Lines Matching refs:ugeth

208 static struct sk_buff *get_new_skb(struct ucc_geth_private *ugeth,  in get_new_skb()  argument
213 skb = netdev_alloc_skb(ugeth->ndev, in get_new_skb()
214 ugeth->ug_info->uf_info.max_rx_buf_length + in get_new_skb()
228 dma_map_single(ugeth->dev, in get_new_skb()
230 ugeth->ug_info->uf_info.max_rx_buf_length + in get_new_skb()
240 static int rx_bd_buffer_set(struct ucc_geth_private *ugeth, u8 rxQ) in rx_bd_buffer_set() argument
247 bd = ugeth->p_rx_bd_ring[rxQ]; in rx_bd_buffer_set()
252 skb = get_new_skb(ugeth, bd); in rx_bd_buffer_set()
258 ugeth->rx_skbuff[rxQ][i] = skb; in rx_bd_buffer_set()
268 static int fill_init_enet_entries(struct ucc_geth_private *ugeth, in fill_init_enet_entries() argument
282 if (netif_msg_ifup(ugeth)) in fill_init_enet_entries()
293 if (netif_msg_ifup(ugeth)) in fill_init_enet_entries()
307 static int return_init_enet_entries(struct ucc_geth_private *ugeth, in return_init_enet_entries() argument
341 static int dump_init_enet_entries(struct ucc_geth_private *ugeth, in dump_init_enet_entries() argument
393 static int hw_clear_addr_in_paddr(struct ucc_geth_private *ugeth, u8 paddr_num) in hw_clear_addr_in_paddr() argument
403 (struct ucc_geth_82xx_address_filtering_pram __iomem *) ugeth->p_rx_glbl_pram-> in hw_clear_addr_in_paddr()
415 static void hw_add_addr_in_hash(struct ucc_geth_private *ugeth, in hw_add_addr_in_hash() argument
422 (struct ucc_geth_82xx_address_filtering_pram __iomem *) ugeth->p_rx_glbl_pram-> in hw_add_addr_in_hash()
426 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info.ucc_num); in hw_add_addr_in_hash()
439 static void get_statistics(struct ucc_geth_private *ugeth, in get_statistics() argument
451 ug_regs = ugeth->ug_regs; in get_statistics()
453 p_tx_fw_statistics_pram = ugeth->p_tx_fw_statistics_pram; in get_statistics()
454 p_rx_fw_statistics_pram = ugeth->p_rx_fw_statistics_pram; in get_statistics()
559 static void dump_bds(struct ucc_geth_private *ugeth) in dump_bds() argument
564 for (i = 0; i < ugeth->ug_info->numQueuesTx; i++) { in dump_bds()
565 if (ugeth->p_tx_bd_ring[i]) { in dump_bds()
567 (ugeth->ug_info->bdRingLenTx[i] * in dump_bds()
570 mem_disp(ugeth->p_tx_bd_ring[i], length); in dump_bds()
573 for (i = 0; i < ugeth->ug_info->numQueuesRx; i++) { in dump_bds()
574 if (ugeth->p_rx_bd_ring[i]) { in dump_bds()
576 (ugeth->ug_info->bdRingLenRx[i] * in dump_bds()
579 mem_disp(ugeth->p_rx_bd_ring[i], length); in dump_bds()
584 static void dump_regs(struct ucc_geth_private *ugeth) in dump_regs() argument
588 pr_info("UCC%d Geth registers:\n", ugeth->ug_info->uf_info.ucc_num + 1); in dump_regs()
589 pr_info("Base address: 0x%08x\n", (u32)ugeth->ug_regs); in dump_regs()
592 (u32)&ugeth->ug_regs->maccfg1, in dump_regs()
593 in_be32(&ugeth->ug_regs->maccfg1)); in dump_regs()
595 (u32)&ugeth->ug_regs->maccfg2, in dump_regs()
596 in_be32(&ugeth->ug_regs->maccfg2)); in dump_regs()
598 (u32)&ugeth->ug_regs->ipgifg, in dump_regs()
599 in_be32(&ugeth->ug_regs->ipgifg)); in dump_regs()
601 (u32)&ugeth->ug_regs->hafdup, in dump_regs()
602 in_be32(&ugeth->ug_regs->hafdup)); in dump_regs()
604 (u32)&ugeth->ug_regs->ifctl, in dump_regs()
605 in_be32(&ugeth->ug_regs->ifctl)); in dump_regs()
607 (u32)&ugeth->ug_regs->ifstat, in dump_regs()
608 in_be32(&ugeth->ug_regs->ifstat)); in dump_regs()
610 (u32)&ugeth->ug_regs->macstnaddr1, in dump_regs()
611 in_be32(&ugeth->ug_regs->macstnaddr1)); in dump_regs()
613 (u32)&ugeth->ug_regs->macstnaddr2, in dump_regs()
614 in_be32(&ugeth->ug_regs->macstnaddr2)); in dump_regs()
616 (u32)&ugeth->ug_regs->uempr, in dump_regs()
617 in_be32(&ugeth->ug_regs->uempr)); in dump_regs()
619 (u32)&ugeth->ug_regs->utbipar, in dump_regs()
620 in_be32(&ugeth->ug_regs->utbipar)); in dump_regs()
622 (u32)&ugeth->ug_regs->uescr, in dump_regs()
623 in_be16(&ugeth->ug_regs->uescr)); in dump_regs()
625 (u32)&ugeth->ug_regs->tx64, in dump_regs()
626 in_be32(&ugeth->ug_regs->tx64)); in dump_regs()
628 (u32)&ugeth->ug_regs->tx127, in dump_regs()
629 in_be32(&ugeth->ug_regs->tx127)); in dump_regs()
631 (u32)&ugeth->ug_regs->tx255, in dump_regs()
632 in_be32(&ugeth->ug_regs->tx255)); in dump_regs()
634 (u32)&ugeth->ug_regs->rx64, in dump_regs()
635 in_be32(&ugeth->ug_regs->rx64)); in dump_regs()
637 (u32)&ugeth->ug_regs->rx127, in dump_regs()
638 in_be32(&ugeth->ug_regs->rx127)); in dump_regs()
640 (u32)&ugeth->ug_regs->rx255, in dump_regs()
641 in_be32(&ugeth->ug_regs->rx255)); in dump_regs()
643 (u32)&ugeth->ug_regs->txok, in dump_regs()
644 in_be32(&ugeth->ug_regs->txok)); in dump_regs()
646 (u32)&ugeth->ug_regs->txcf, in dump_regs()
647 in_be16(&ugeth->ug_regs->txcf)); in dump_regs()
649 (u32)&ugeth->ug_regs->tmca, in dump_regs()
650 in_be32(&ugeth->ug_regs->tmca)); in dump_regs()
652 (u32)&ugeth->ug_regs->tbca, in dump_regs()
653 in_be32(&ugeth->ug_regs->tbca)); in dump_regs()
655 (u32)&ugeth->ug_regs->rxfok, in dump_regs()
656 in_be32(&ugeth->ug_regs->rxfok)); in dump_regs()
658 (u32)&ugeth->ug_regs->rxbok, in dump_regs()
659 in_be32(&ugeth->ug_regs->rxbok)); in dump_regs()
661 (u32)&ugeth->ug_regs->rbyt, in dump_regs()
662 in_be32(&ugeth->ug_regs->rbyt)); in dump_regs()
664 (u32)&ugeth->ug_regs->rmca, in dump_regs()
665 in_be32(&ugeth->ug_regs->rmca)); in dump_regs()
667 (u32)&ugeth->ug_regs->rbca, in dump_regs()
668 in_be32(&ugeth->ug_regs->rbca)); in dump_regs()
670 (u32)&ugeth->ug_regs->scar, in dump_regs()
671 in_be32(&ugeth->ug_regs->scar)); in dump_regs()
673 (u32)&ugeth->ug_regs->scam, in dump_regs()
674 in_be32(&ugeth->ug_regs->scam)); in dump_regs()
676 if (ugeth->p_thread_data_tx) { in dump_regs()
678 switch (ugeth->ug_info->numThreadsTx) { in dump_regs()
701 (u32)ugeth->p_thread_data_tx); in dump_regs()
705 (u32)&ugeth->p_thread_data_tx[i]); in dump_regs()
706 mem_disp((u8 *) & ugeth->p_thread_data_tx[i], in dump_regs()
710 if (ugeth->p_thread_data_rx) { in dump_regs()
712 switch (ugeth->ug_info->numThreadsRx) { in dump_regs()
735 (u32)ugeth->p_thread_data_rx); in dump_regs()
739 (u32)&ugeth->p_thread_data_rx[i]); in dump_regs()
740 mem_disp((u8 *) & ugeth->p_thread_data_rx[i], in dump_regs()
744 if (ugeth->p_exf_glbl_param) { in dump_regs()
747 (u32)ugeth->p_exf_glbl_param); in dump_regs()
748 mem_disp((u8 *) ugeth->p_exf_glbl_param, in dump_regs()
749 sizeof(*ugeth->p_exf_glbl_param)); in dump_regs()
751 if (ugeth->p_tx_glbl_pram) { in dump_regs()
753 pr_info("Base address: 0x%08x\n", (u32)ugeth->p_tx_glbl_pram); in dump_regs()
755 (u32)&ugeth->p_tx_glbl_pram->temoder, in dump_regs()
756 in_be16(&ugeth->p_tx_glbl_pram->temoder)); in dump_regs()
758 (u32)&ugeth->p_tx_glbl_pram->sqptr, in dump_regs()
759 in_be32(&ugeth->p_tx_glbl_pram->sqptr)); in dump_regs()
761 (u32)&ugeth->p_tx_glbl_pram->schedulerbasepointer, in dump_regs()
762 in_be32(&ugeth->p_tx_glbl_pram->schedulerbasepointer)); in dump_regs()
764 (u32)&ugeth->p_tx_glbl_pram->txrmonbaseptr, in dump_regs()
765 in_be32(&ugeth->p_tx_glbl_pram->txrmonbaseptr)); in dump_regs()
767 (u32)&ugeth->p_tx_glbl_pram->tstate, in dump_regs()
768 in_be32(&ugeth->p_tx_glbl_pram->tstate)); in dump_regs()
770 (u32)&ugeth->p_tx_glbl_pram->iphoffset[0], in dump_regs()
771 ugeth->p_tx_glbl_pram->iphoffset[0]); in dump_regs()
773 (u32)&ugeth->p_tx_glbl_pram->iphoffset[1], in dump_regs()
774 ugeth->p_tx_glbl_pram->iphoffset[1]); in dump_regs()
776 (u32)&ugeth->p_tx_glbl_pram->iphoffset[2], in dump_regs()
777 ugeth->p_tx_glbl_pram->iphoffset[2]); in dump_regs()
779 (u32)&ugeth->p_tx_glbl_pram->iphoffset[3], in dump_regs()
780 ugeth->p_tx_glbl_pram->iphoffset[3]); in dump_regs()
782 (u32)&ugeth->p_tx_glbl_pram->iphoffset[4], in dump_regs()
783 ugeth->p_tx_glbl_pram->iphoffset[4]); in dump_regs()
785 (u32)&ugeth->p_tx_glbl_pram->iphoffset[5], in dump_regs()
786 ugeth->p_tx_glbl_pram->iphoffset[5]); in dump_regs()
788 (u32)&ugeth->p_tx_glbl_pram->iphoffset[6], in dump_regs()
789 ugeth->p_tx_glbl_pram->iphoffset[6]); in dump_regs()
791 (u32)&ugeth->p_tx_glbl_pram->iphoffset[7], in dump_regs()
792 ugeth->p_tx_glbl_pram->iphoffset[7]); in dump_regs()
794 (u32)&ugeth->p_tx_glbl_pram->vtagtable[0], in dump_regs()
795 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[0])); in dump_regs()
797 (u32)&ugeth->p_tx_glbl_pram->vtagtable[1], in dump_regs()
798 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[1])); in dump_regs()
800 (u32)&ugeth->p_tx_glbl_pram->vtagtable[2], in dump_regs()
801 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[2])); in dump_regs()
803 (u32)&ugeth->p_tx_glbl_pram->vtagtable[3], in dump_regs()
804 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[3])); in dump_regs()
806 (u32)&ugeth->p_tx_glbl_pram->vtagtable[4], in dump_regs()
807 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[4])); in dump_regs()
809 (u32)&ugeth->p_tx_glbl_pram->vtagtable[5], in dump_regs()
810 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[5])); in dump_regs()
812 (u32)&ugeth->p_tx_glbl_pram->vtagtable[6], in dump_regs()
813 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[6])); in dump_regs()
815 (u32)&ugeth->p_tx_glbl_pram->vtagtable[7], in dump_regs()
816 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[7])); in dump_regs()
818 (u32)&ugeth->p_tx_glbl_pram->tqptr, in dump_regs()
819 in_be32(&ugeth->p_tx_glbl_pram->tqptr)); in dump_regs()
821 if (ugeth->p_rx_glbl_pram) { in dump_regs()
823 pr_info("Base address: 0x%08x\n", (u32)ugeth->p_rx_glbl_pram); in dump_regs()
825 (u32)&ugeth->p_rx_glbl_pram->remoder, in dump_regs()
826 in_be32(&ugeth->p_rx_glbl_pram->remoder)); in dump_regs()
828 (u32)&ugeth->p_rx_glbl_pram->rqptr, in dump_regs()
829 in_be32(&ugeth->p_rx_glbl_pram->rqptr)); in dump_regs()
831 (u32)&ugeth->p_rx_glbl_pram->typeorlen, in dump_regs()
832 in_be16(&ugeth->p_rx_glbl_pram->typeorlen)); in dump_regs()
834 (u32)&ugeth->p_rx_glbl_pram->rxgstpack, in dump_regs()
835 ugeth->p_rx_glbl_pram->rxgstpack); in dump_regs()
837 (u32)&ugeth->p_rx_glbl_pram->rxrmonbaseptr, in dump_regs()
838 in_be32(&ugeth->p_rx_glbl_pram->rxrmonbaseptr)); in dump_regs()
840 (u32)&ugeth->p_rx_glbl_pram->intcoalescingptr, in dump_regs()
841 in_be32(&ugeth->p_rx_glbl_pram->intcoalescingptr)); in dump_regs()
843 (u32)&ugeth->p_rx_glbl_pram->rstate, in dump_regs()
844 ugeth->p_rx_glbl_pram->rstate); in dump_regs()
846 (u32)&ugeth->p_rx_glbl_pram->mrblr, in dump_regs()
847 in_be16(&ugeth->p_rx_glbl_pram->mrblr)); in dump_regs()
849 (u32)&ugeth->p_rx_glbl_pram->rbdqptr, in dump_regs()
850 in_be32(&ugeth->p_rx_glbl_pram->rbdqptr)); in dump_regs()
852 (u32)&ugeth->p_rx_glbl_pram->mflr, in dump_regs()
853 in_be16(&ugeth->p_rx_glbl_pram->mflr)); in dump_regs()
855 (u32)&ugeth->p_rx_glbl_pram->minflr, in dump_regs()
856 in_be16(&ugeth->p_rx_glbl_pram->minflr)); in dump_regs()
858 (u32)&ugeth->p_rx_glbl_pram->maxd1, in dump_regs()
859 in_be16(&ugeth->p_rx_glbl_pram->maxd1)); in dump_regs()
861 (u32)&ugeth->p_rx_glbl_pram->maxd2, in dump_regs()
862 in_be16(&ugeth->p_rx_glbl_pram->maxd2)); in dump_regs()
864 (u32)&ugeth->p_rx_glbl_pram->ecamptr, in dump_regs()
865 in_be32(&ugeth->p_rx_glbl_pram->ecamptr)); in dump_regs()
867 (u32)&ugeth->p_rx_glbl_pram->l2qt, in dump_regs()
868 in_be32(&ugeth->p_rx_glbl_pram->l2qt)); in dump_regs()
870 (u32)&ugeth->p_rx_glbl_pram->l3qt[0], in dump_regs()
871 in_be32(&ugeth->p_rx_glbl_pram->l3qt[0])); in dump_regs()
873 (u32)&ugeth->p_rx_glbl_pram->l3qt[1], in dump_regs()
874 in_be32(&ugeth->p_rx_glbl_pram->l3qt[1])); in dump_regs()
876 (u32)&ugeth->p_rx_glbl_pram->l3qt[2], in dump_regs()
877 in_be32(&ugeth->p_rx_glbl_pram->l3qt[2])); in dump_regs()
879 (u32)&ugeth->p_rx_glbl_pram->l3qt[3], in dump_regs()
880 in_be32(&ugeth->p_rx_glbl_pram->l3qt[3])); in dump_regs()
882 (u32)&ugeth->p_rx_glbl_pram->l3qt[4], in dump_regs()
883 in_be32(&ugeth->p_rx_glbl_pram->l3qt[4])); in dump_regs()
885 (u32)&ugeth->p_rx_glbl_pram->l3qt[5], in dump_regs()
886 in_be32(&ugeth->p_rx_glbl_pram->l3qt[5])); in dump_regs()
888 (u32)&ugeth->p_rx_glbl_pram->l3qt[6], in dump_regs()
889 in_be32(&ugeth->p_rx_glbl_pram->l3qt[6])); in dump_regs()
891 (u32)&ugeth->p_rx_glbl_pram->l3qt[7], in dump_regs()
892 in_be32(&ugeth->p_rx_glbl_pram->l3qt[7])); in dump_regs()
894 (u32)&ugeth->p_rx_glbl_pram->vlantype, in dump_regs()
895 in_be16(&ugeth->p_rx_glbl_pram->vlantype)); in dump_regs()
897 (u32)&ugeth->p_rx_glbl_pram->vlantci, in dump_regs()
898 in_be16(&ugeth->p_rx_glbl_pram->vlantci)); in dump_regs()
902 (u32)&ugeth->p_rx_glbl_pram->addressfiltering[i], in dump_regs()
903 ugeth->p_rx_glbl_pram->addressfiltering[i]); in dump_regs()
905 (u32)&ugeth->p_rx_glbl_pram->exfGlobalParam, in dump_regs()
906 in_be32(&ugeth->p_rx_glbl_pram->exfGlobalParam)); in dump_regs()
908 if (ugeth->p_send_q_mem_reg) { in dump_regs()
910 pr_info("Base address: 0x%08x\n", (u32)ugeth->p_send_q_mem_reg); in dump_regs()
911 for (i = 0; i < ugeth->ug_info->numQueuesTx; i++) { in dump_regs()
914 (u32)&ugeth->p_send_q_mem_reg->sqqd[i]); in dump_regs()
915 mem_disp((u8 *) & ugeth->p_send_q_mem_reg->sqqd[i], in dump_regs()
919 if (ugeth->p_scheduler) { in dump_regs()
921 pr_info("Base address: 0x%08x\n", (u32)ugeth->p_scheduler); in dump_regs()
922 mem_disp((u8 *) ugeth->p_scheduler, in dump_regs()
923 sizeof(*ugeth->p_scheduler)); in dump_regs()
925 if (ugeth->p_tx_fw_statistics_pram) { in dump_regs()
928 (u32)ugeth->p_tx_fw_statistics_pram); in dump_regs()
929 mem_disp((u8 *) ugeth->p_tx_fw_statistics_pram, in dump_regs()
930 sizeof(*ugeth->p_tx_fw_statistics_pram)); in dump_regs()
932 if (ugeth->p_rx_fw_statistics_pram) { in dump_regs()
935 (u32)ugeth->p_rx_fw_statistics_pram); in dump_regs()
936 mem_disp((u8 *) ugeth->p_rx_fw_statistics_pram, in dump_regs()
937 sizeof(*ugeth->p_rx_fw_statistics_pram)); in dump_regs()
939 if (ugeth->p_rx_irq_coalescing_tbl) { in dump_regs()
942 (u32)ugeth->p_rx_irq_coalescing_tbl); in dump_regs()
943 for (i = 0; i < ugeth->ug_info->numQueuesRx; i++) { in dump_regs()
946 (u32)&ugeth->p_rx_irq_coalescing_tbl-> in dump_regs()
949 (u32)&ugeth->p_rx_irq_coalescing_tbl-> in dump_regs()
951 in_be32(&ugeth->p_rx_irq_coalescing_tbl-> in dump_regs()
955 (u32)&ugeth->p_rx_irq_coalescing_tbl-> in dump_regs()
957 in_be32(&ugeth->p_rx_irq_coalescing_tbl-> in dump_regs()
962 if (ugeth->p_rx_bd_qs_tbl) { in dump_regs()
964 pr_info("Base address: 0x%08x\n", (u32)ugeth->p_rx_bd_qs_tbl); in dump_regs()
965 for (i = 0; i < ugeth->ug_info->numQueuesRx; i++) { in dump_regs()
968 (u32)&ugeth->p_rx_bd_qs_tbl[i]); in dump_regs()
970 (u32)&ugeth->p_rx_bd_qs_tbl[i].bdbaseptr, in dump_regs()
971 in_be32(&ugeth->p_rx_bd_qs_tbl[i].bdbaseptr)); in dump_regs()
973 (u32)&ugeth->p_rx_bd_qs_tbl[i].bdptr, in dump_regs()
974 in_be32(&ugeth->p_rx_bd_qs_tbl[i].bdptr)); in dump_regs()
976 (u32)&ugeth->p_rx_bd_qs_tbl[i].externalbdbaseptr, in dump_regs()
977 in_be32(&ugeth->p_rx_bd_qs_tbl[i]. in dump_regs()
980 (u32)&ugeth->p_rx_bd_qs_tbl[i].externalbdptr, in dump_regs()
981 in_be32(&ugeth->p_rx_bd_qs_tbl[i].externalbdptr)); in dump_regs()
985 (&ugeth->p_rx_bd_qs_tbl[i]. in dump_regs()
989 (&ugeth->p_rx_bd_qs_tbl[i]. in dump_regs()
994 if (ugeth->p_init_enet_param_shadow) { in dump_regs()
998 (u32) ugeth->p_init_enet_param_shadow); in dump_regs()
999 mem_disp((u8 *) ugeth->p_init_enet_param_shadow, in dump_regs()
1000 sizeof(*ugeth->p_init_enet_param_shadow)); in dump_regs()
1003 if (ugeth->ug_info->rxExtendedFiltering) { in dump_regs()
1006 if (ugeth->ug_info->largestexternallookupkeysize == in dump_regs()
1010 if (ugeth->ug_info->largestexternallookupkeysize == in dump_regs()
1016 dump_init_enet_entries(ugeth, in dump_regs()
1017 &(ugeth->p_init_enet_param_shadow-> in dump_regs()
1021 ugeth->ug_info->riscTx, 0); in dump_regs()
1022 dump_init_enet_entries(ugeth, in dump_regs()
1023 &(ugeth->p_init_enet_param_shadow-> in dump_regs()
1026 ugeth->ug_info->riscRx, 1); in dump_regs()
1313 static int adjust_enet_interface(struct ucc_geth_private *ugeth) in adjust_enet_interface() argument
1324 ug_info = ugeth->ug_info; in adjust_enet_interface()
1325 ug_regs = ugeth->ug_regs; in adjust_enet_interface()
1326 uf_regs = ugeth->uccf->uf_regs; in adjust_enet_interface()
1331 if ((ugeth->max_speed == SPEED_10) || in adjust_enet_interface()
1332 (ugeth->max_speed == SPEED_100)) in adjust_enet_interface()
1334 else if (ugeth->max_speed == SPEED_1000) in adjust_enet_interface()
1343 if ((ugeth->phy_interface == PHY_INTERFACE_MODE_RMII) || in adjust_enet_interface()
1344 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII) || in adjust_enet_interface()
1345 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_ID) || in adjust_enet_interface()
1346 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_RXID) || in adjust_enet_interface()
1347 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_TXID) || in adjust_enet_interface()
1348 (ugeth->phy_interface == PHY_INTERFACE_MODE_RTBI)) { in adjust_enet_interface()
1349 if (ugeth->phy_interface != PHY_INTERFACE_MODE_RMII) in adjust_enet_interface()
1351 switch (ugeth->max_speed) { in adjust_enet_interface()
1356 if (ugeth->phy_interface != PHY_INTERFACE_MODE_RTBI) in adjust_enet_interface()
1360 if ((ugeth->phy_interface == PHY_INTERFACE_MODE_TBI) || in adjust_enet_interface()
1361 (ugeth->phy_interface == PHY_INTERFACE_MODE_RTBI)) { in adjust_enet_interface()
1364 if ((ugeth->phy_interface == PHY_INTERFACE_MODE_SGMII)) in adjust_enet_interface()
1372 if ((ugeth->phy_interface == PHY_INTERFACE_MODE_TBI) || in adjust_enet_interface()
1373 (ugeth->phy_interface == PHY_INTERFACE_MODE_RTBI)) { in adjust_enet_interface()
1374 struct ucc_geth_info *ug_info = ugeth->ug_info; in adjust_enet_interface()
1393 if (netif_msg_probe(ugeth)) in adjust_enet_interface()
1401 static int ugeth_graceful_stop_tx(struct ucc_geth_private *ugeth) in ugeth_graceful_stop_tx() argument
1408 uccf = ugeth->uccf; in ugeth_graceful_stop_tx()
1416 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info.ucc_num); in ugeth_graceful_stop_tx()
1431 static int ugeth_graceful_stop_rx(struct ucc_geth_private *ugeth) in ugeth_graceful_stop_rx() argument
1438 uccf = ugeth->uccf; in ugeth_graceful_stop_rx()
1441 temp = in_8(&ugeth->p_rx_glbl_pram->rxgstpack); in ugeth_graceful_stop_rx()
1443 out_8(&ugeth->p_rx_glbl_pram->rxgstpack, temp); in ugeth_graceful_stop_rx()
1450 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info. in ugeth_graceful_stop_rx()
1455 temp = in_8(&ugeth->p_rx_glbl_pram->rxgstpack); in ugeth_graceful_stop_rx()
1463 static int ugeth_restart_tx(struct ucc_geth_private *ugeth) in ugeth_restart_tx() argument
1468 uccf = ugeth->uccf; in ugeth_restart_tx()
1471 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info.ucc_num); in ugeth_restart_tx()
1478 static int ugeth_restart_rx(struct ucc_geth_private *ugeth) in ugeth_restart_rx() argument
1483 uccf = ugeth->uccf; in ugeth_restart_rx()
1486 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info.ucc_num); in ugeth_restart_rx()
1494 static int ugeth_enable(struct ucc_geth_private *ugeth, enum comm_dir mode) in ugeth_enable() argument
1499 uccf = ugeth->uccf; in ugeth_enable()
1502 if (ugeth->ug_info->uf_info.ucc_num >= UCC_MAX_NUM) { in ugeth_enable()
1503 if (netif_msg_probe(ugeth)) in ugeth_enable()
1514 ugeth_restart_tx(ugeth); in ugeth_enable()
1516 ugeth_restart_rx(ugeth); in ugeth_enable()
1524 static int ugeth_disable(struct ucc_geth_private *ugeth, enum comm_dir mode) in ugeth_disable() argument
1528 uccf = ugeth->uccf; in ugeth_disable()
1531 if (ugeth->ug_info->uf_info.ucc_num >= UCC_MAX_NUM) { in ugeth_disable()
1532 if (netif_msg_probe(ugeth)) in ugeth_disable()
1539 ugeth_graceful_stop_tx(ugeth); in ugeth_disable()
1543 ugeth_graceful_stop_rx(ugeth); in ugeth_disable()
1545 ucc_fast_disable(ugeth->uccf, mode); /* OK to do even if not enabled */ in ugeth_disable()
1550 static void ugeth_quiesce(struct ucc_geth_private *ugeth) in ugeth_quiesce() argument
1553 netif_device_detach(ugeth->ndev); in ugeth_quiesce()
1556 netif_tx_disable(ugeth->ndev); in ugeth_quiesce()
1559 disable_irq(ugeth->ug_info->uf_info.irq); in ugeth_quiesce()
1562 napi_disable(&ugeth->napi); in ugeth_quiesce()
1565 static void ugeth_activate(struct ucc_geth_private *ugeth) in ugeth_activate() argument
1567 napi_enable(&ugeth->napi); in ugeth_activate()
1568 enable_irq(ugeth->ug_info->uf_info.irq); in ugeth_activate()
1569 netif_device_attach(ugeth->ndev); in ugeth_activate()
1581 struct ucc_geth_private *ugeth = netdev_priv(dev); in adjust_link() local
1584 struct phy_device *phydev = ugeth->phydev; in adjust_link()
1587 ug_regs = ugeth->ug_regs; in adjust_link()
1588 uf_regs = ugeth->uccf->uf_regs; in adjust_link()
1595 if (phydev->duplex != ugeth->oldduplex) { in adjust_link()
1601 ugeth->oldduplex = phydev->duplex; in adjust_link()
1604 if (phydev->speed != ugeth->oldspeed) { in adjust_link()
1618 if ((ugeth->phy_interface == PHY_INTERFACE_MODE_RMII) || in adjust_link()
1619 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII) || in adjust_link()
1620 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_ID) || in adjust_link()
1621 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_RXID) || in adjust_link()
1622 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_TXID) || in adjust_link()
1623 (ugeth->phy_interface == PHY_INTERFACE_MODE_RTBI)) { in adjust_link()
1631 if (netif_msg_link(ugeth)) in adjust_link()
1637 ugeth->oldspeed = phydev->speed; in adjust_link()
1640 if (!ugeth->oldlink) { in adjust_link()
1642 ugeth->oldlink = 1; in adjust_link()
1653 ugeth_quiesce(ugeth); in adjust_link()
1654 ugeth_disable(ugeth, COMM_DIR_RX_AND_TX); in adjust_link()
1659 ugeth_enable(ugeth, COMM_DIR_RX_AND_TX); in adjust_link()
1660 ugeth_activate(ugeth); in adjust_link()
1662 } else if (ugeth->oldlink) { in adjust_link()
1664 ugeth->oldlink = 0; in adjust_link()
1665 ugeth->oldspeed = 0; in adjust_link()
1666 ugeth->oldduplex = -1; in adjust_link()
1669 if (new_state && netif_msg_link(ugeth)) in adjust_link()
1683 struct ucc_geth_private *ugeth = netdev_priv(dev); in uec_configure_serdes() local
1684 struct ucc_geth_info *ug_info = ugeth->ug_info; in uec_configure_serdes()
1756 static void ugeth_dump_regs(struct ucc_geth_private *ugeth) in ugeth_dump_regs() argument
1759 ucc_fast_dump_regs(ugeth->uccf); in ugeth_dump_regs()
1760 dump_regs(ugeth); in ugeth_dump_regs()
1761 dump_bds(ugeth); in ugeth_dump_regs()
1766 ugeth, in ugeth_82xx_filtering_clear_all_addr_in_hash()
1779 uccf = ugeth->uccf; in ugeth_82xx_filtering_clear_all_addr_in_hash()
1783 ugeth->p_rx_glbl_pram->addressfiltering; in ugeth_82xx_filtering_clear_all_addr_in_hash()
1788 p_lh = &ugeth->group_hash_q; in ugeth_82xx_filtering_clear_all_addr_in_hash()
1789 p_counter = &(ugeth->numGroupAddrInHash); in ugeth_82xx_filtering_clear_all_addr_in_hash()
1793 p_lh = &ugeth->ind_hash_q; in ugeth_82xx_filtering_clear_all_addr_in_hash()
1794 p_counter = &(ugeth->numIndAddrInHash); in ugeth_82xx_filtering_clear_all_addr_in_hash()
1804 ugeth_disable(ugeth, comm_dir); in ugeth_82xx_filtering_clear_all_addr_in_hash()
1822 ugeth_enable(ugeth, comm_dir); in ugeth_82xx_filtering_clear_all_addr_in_hash()
1827 static int ugeth_82xx_filtering_clear_addr_in_paddr(struct ucc_geth_private *ugeth, in ugeth_82xx_filtering_clear_addr_in_paddr() argument
1830 ugeth->indAddrRegUsed[paddr_num] = 0; /* mark this paddr as not used */ in ugeth_82xx_filtering_clear_addr_in_paddr()
1831 return hw_clear_addr_in_paddr(ugeth, paddr_num);/* clear in hardware */ in ugeth_82xx_filtering_clear_addr_in_paddr()
1834 static void ucc_geth_free_rx(struct ucc_geth_private *ugeth) in ucc_geth_free_rx() argument
1842 ug_info = ugeth->ug_info; in ucc_geth_free_rx()
1845 for (i = 0; i < ugeth->ug_info->numQueuesRx; i++) { in ucc_geth_free_rx()
1846 if (ugeth->p_rx_bd_ring[i]) { in ucc_geth_free_rx()
1848 bd = ugeth->p_rx_bd_ring[i]; in ucc_geth_free_rx()
1849 for (j = 0; j < ugeth->ug_info->bdRingLenRx[i]; j++) { in ucc_geth_free_rx()
1850 if (ugeth->rx_skbuff[i][j]) { in ucc_geth_free_rx()
1851 dma_unmap_single(ugeth->dev, in ucc_geth_free_rx()
1853 ugeth->ug_info-> in ucc_geth_free_rx()
1858 ugeth->rx_skbuff[i][j]); in ucc_geth_free_rx()
1859 ugeth->rx_skbuff[i][j] = NULL; in ucc_geth_free_rx()
1864 kfree(ugeth->rx_skbuff[i]); in ucc_geth_free_rx()
1866 if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_free_rx()
1868 kfree((void *)ugeth->rx_bd_ring_offset[i]); in ucc_geth_free_rx()
1869 else if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_free_rx()
1871 qe_muram_free(ugeth->rx_bd_ring_offset[i]); in ucc_geth_free_rx()
1872 ugeth->p_rx_bd_ring[i] = NULL; in ucc_geth_free_rx()
1878 static void ucc_geth_free_tx(struct ucc_geth_private *ugeth) in ucc_geth_free_tx() argument
1885 ug_info = ugeth->ug_info; in ucc_geth_free_tx()
1888 for (i = 0; i < ugeth->ug_info->numQueuesTx; i++) { in ucc_geth_free_tx()
1889 bd = ugeth->p_tx_bd_ring[i]; in ucc_geth_free_tx()
1892 for (j = 0; j < ugeth->ug_info->bdRingLenTx[i]; j++) { in ucc_geth_free_tx()
1893 if (ugeth->tx_skbuff[i][j]) { in ucc_geth_free_tx()
1894 dma_unmap_single(ugeth->dev, in ucc_geth_free_tx()
1899 dev_kfree_skb_any(ugeth->tx_skbuff[i][j]); in ucc_geth_free_tx()
1900 ugeth->tx_skbuff[i][j] = NULL; in ucc_geth_free_tx()
1904 kfree(ugeth->tx_skbuff[i]); in ucc_geth_free_tx()
1906 if (ugeth->p_tx_bd_ring[i]) { in ucc_geth_free_tx()
1907 if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_free_tx()
1909 kfree((void *)ugeth->tx_bd_ring_offset[i]); in ucc_geth_free_tx()
1910 else if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_free_tx()
1912 qe_muram_free(ugeth->tx_bd_ring_offset[i]); in ucc_geth_free_tx()
1913 ugeth->p_tx_bd_ring[i] = NULL; in ucc_geth_free_tx()
1919 static void ucc_geth_memclean(struct ucc_geth_private *ugeth) in ucc_geth_memclean() argument
1921 if (!ugeth) in ucc_geth_memclean()
1924 if (ugeth->uccf) { in ucc_geth_memclean()
1925 ucc_fast_free(ugeth->uccf); in ucc_geth_memclean()
1926 ugeth->uccf = NULL; in ucc_geth_memclean()
1929 if (ugeth->p_thread_data_tx) { in ucc_geth_memclean()
1930 qe_muram_free(ugeth->thread_dat_tx_offset); in ucc_geth_memclean()
1931 ugeth->p_thread_data_tx = NULL; in ucc_geth_memclean()
1933 if (ugeth->p_thread_data_rx) { in ucc_geth_memclean()
1934 qe_muram_free(ugeth->thread_dat_rx_offset); in ucc_geth_memclean()
1935 ugeth->p_thread_data_rx = NULL; in ucc_geth_memclean()
1937 if (ugeth->p_exf_glbl_param) { in ucc_geth_memclean()
1938 qe_muram_free(ugeth->exf_glbl_param_offset); in ucc_geth_memclean()
1939 ugeth->p_exf_glbl_param = NULL; in ucc_geth_memclean()
1941 if (ugeth->p_rx_glbl_pram) { in ucc_geth_memclean()
1942 qe_muram_free(ugeth->rx_glbl_pram_offset); in ucc_geth_memclean()
1943 ugeth->p_rx_glbl_pram = NULL; in ucc_geth_memclean()
1945 if (ugeth->p_tx_glbl_pram) { in ucc_geth_memclean()
1946 qe_muram_free(ugeth->tx_glbl_pram_offset); in ucc_geth_memclean()
1947 ugeth->p_tx_glbl_pram = NULL; in ucc_geth_memclean()
1949 if (ugeth->p_send_q_mem_reg) { in ucc_geth_memclean()
1950 qe_muram_free(ugeth->send_q_mem_reg_offset); in ucc_geth_memclean()
1951 ugeth->p_send_q_mem_reg = NULL; in ucc_geth_memclean()
1953 if (ugeth->p_scheduler) { in ucc_geth_memclean()
1954 qe_muram_free(ugeth->scheduler_offset); in ucc_geth_memclean()
1955 ugeth->p_scheduler = NULL; in ucc_geth_memclean()
1957 if (ugeth->p_tx_fw_statistics_pram) { in ucc_geth_memclean()
1958 qe_muram_free(ugeth->tx_fw_statistics_pram_offset); in ucc_geth_memclean()
1959 ugeth->p_tx_fw_statistics_pram = NULL; in ucc_geth_memclean()
1961 if (ugeth->p_rx_fw_statistics_pram) { in ucc_geth_memclean()
1962 qe_muram_free(ugeth->rx_fw_statistics_pram_offset); in ucc_geth_memclean()
1963 ugeth->p_rx_fw_statistics_pram = NULL; in ucc_geth_memclean()
1965 if (ugeth->p_rx_irq_coalescing_tbl) { in ucc_geth_memclean()
1966 qe_muram_free(ugeth->rx_irq_coalescing_tbl_offset); in ucc_geth_memclean()
1967 ugeth->p_rx_irq_coalescing_tbl = NULL; in ucc_geth_memclean()
1969 if (ugeth->p_rx_bd_qs_tbl) { in ucc_geth_memclean()
1970 qe_muram_free(ugeth->rx_bd_qs_tbl_offset); in ucc_geth_memclean()
1971 ugeth->p_rx_bd_qs_tbl = NULL; in ucc_geth_memclean()
1973 if (ugeth->p_init_enet_param_shadow) { in ucc_geth_memclean()
1974 return_init_enet_entries(ugeth, in ucc_geth_memclean()
1975 &(ugeth->p_init_enet_param_shadow-> in ucc_geth_memclean()
1978 ugeth->ug_info->riscRx, 1); in ucc_geth_memclean()
1979 return_init_enet_entries(ugeth, in ucc_geth_memclean()
1980 &(ugeth->p_init_enet_param_shadow-> in ucc_geth_memclean()
1983 ugeth->ug_info->riscTx, 0); in ucc_geth_memclean()
1984 kfree(ugeth->p_init_enet_param_shadow); in ucc_geth_memclean()
1985 ugeth->p_init_enet_param_shadow = NULL; in ucc_geth_memclean()
1987 ucc_geth_free_tx(ugeth); in ucc_geth_memclean()
1988 ucc_geth_free_rx(ugeth); in ucc_geth_memclean()
1989 while (!list_empty(&ugeth->group_hash_q)) in ucc_geth_memclean()
1991 (dequeue(&ugeth->group_hash_q))); in ucc_geth_memclean()
1992 while (!list_empty(&ugeth->ind_hash_q)) in ucc_geth_memclean()
1994 (dequeue(&ugeth->ind_hash_q))); in ucc_geth_memclean()
1995 if (ugeth->ug_regs) { in ucc_geth_memclean()
1996 iounmap(ugeth->ug_regs); in ucc_geth_memclean()
1997 ugeth->ug_regs = NULL; in ucc_geth_memclean()
2003 struct ucc_geth_private *ugeth; in ucc_geth_set_multi() local
2008 ugeth = netdev_priv(dev); in ucc_geth_set_multi()
2010 uf_regs = ugeth->uccf->uf_regs; in ucc_geth_set_multi()
2018 (struct ucc_geth_82xx_address_filtering_pram __iomem *) ugeth-> in ucc_geth_set_multi()
2037 hw_add_addr_in_hash(ugeth, ha->addr); in ucc_geth_set_multi()
2043 static void ucc_geth_stop(struct ucc_geth_private *ugeth) in ucc_geth_stop() argument
2045 struct ucc_geth __iomem *ug_regs = ugeth->ug_regs; in ucc_geth_stop()
2046 struct phy_device *phydev = ugeth->phydev; in ucc_geth_stop()
2058 ugeth_disable(ugeth, COMM_DIR_RX_AND_TX); in ucc_geth_stop()
2061 out_be32(ugeth->uccf->p_uccm, 0x00000000); in ucc_geth_stop()
2064 out_be32(ugeth->uccf->p_ucce, 0xffffffff); in ucc_geth_stop()
2069 ucc_geth_memclean(ugeth); in ucc_geth_stop()
2072 static int ucc_struct_init(struct ucc_geth_private *ugeth) in ucc_struct_init() argument
2078 ug_info = ugeth->ug_info; in ucc_struct_init()
2083 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2093 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2102 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2111 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2118 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2125 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2133 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2142 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2149 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2157 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2170 if (ucc_fast_init(uf_info, &ugeth->uccf)) { in ucc_struct_init()
2171 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2184 ugeth->ug_regs = ioremap(uf_info->regs, sizeof(*ugeth->ug_regs)); in ucc_struct_init()
2185 if (!ugeth->ug_regs) { in ucc_struct_init()
2186 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2194 static int ucc_geth_alloc_tx(struct ucc_geth_private *ugeth) in ucc_geth_alloc_tx() argument
2202 ug_info = ugeth->ug_info; in ucc_geth_alloc_tx()
2220 ugeth->tx_bd_ring_offset[j] = in ucc_geth_alloc_tx()
2223 if (ugeth->tx_bd_ring_offset[j] != 0) in ucc_geth_alloc_tx()
2224 ugeth->p_tx_bd_ring[j] = in ucc_geth_alloc_tx()
2225 (u8 __iomem *)((ugeth->tx_bd_ring_offset[j] + in ucc_geth_alloc_tx()
2228 ugeth->tx_bd_ring_offset[j] = in ucc_geth_alloc_tx()
2231 if (!IS_ERR_VALUE(ugeth->tx_bd_ring_offset[j])) in ucc_geth_alloc_tx()
2232 ugeth->p_tx_bd_ring[j] = in ucc_geth_alloc_tx()
2233 (u8 __iomem *) qe_muram_addr(ugeth-> in ucc_geth_alloc_tx()
2236 if (!ugeth->p_tx_bd_ring[j]) { in ucc_geth_alloc_tx()
2237 if (netif_msg_ifup(ugeth)) in ucc_geth_alloc_tx()
2242 memset_io((void __iomem *)(ugeth->p_tx_bd_ring[j] + in ucc_geth_alloc_tx()
2250 ugeth->tx_skbuff[j] = kmalloc(sizeof(struct sk_buff *) * in ucc_geth_alloc_tx()
2251 ugeth->ug_info->bdRingLenTx[j], in ucc_geth_alloc_tx()
2254 if (ugeth->tx_skbuff[j] == NULL) { in ucc_geth_alloc_tx()
2255 if (netif_msg_ifup(ugeth)) in ucc_geth_alloc_tx()
2260 for (i = 0; i < ugeth->ug_info->bdRingLenTx[j]; i++) in ucc_geth_alloc_tx()
2261 ugeth->tx_skbuff[j][i] = NULL; in ucc_geth_alloc_tx()
2263 ugeth->skb_curtx[j] = ugeth->skb_dirtytx[j] = 0; in ucc_geth_alloc_tx()
2264 bd = ugeth->confBd[j] = ugeth->txBd[j] = ugeth->p_tx_bd_ring[j]; in ucc_geth_alloc_tx()
2280 static int ucc_geth_alloc_rx(struct ucc_geth_private *ugeth) in ucc_geth_alloc_rx() argument
2288 ug_info = ugeth->ug_info; in ucc_geth_alloc_rx()
2298 ugeth->rx_bd_ring_offset[j] = in ucc_geth_alloc_rx()
2300 if (ugeth->rx_bd_ring_offset[j] != 0) in ucc_geth_alloc_rx()
2301 ugeth->p_rx_bd_ring[j] = in ucc_geth_alloc_rx()
2302 (u8 __iomem *)((ugeth->rx_bd_ring_offset[j] + in ucc_geth_alloc_rx()
2305 ugeth->rx_bd_ring_offset[j] = in ucc_geth_alloc_rx()
2308 if (!IS_ERR_VALUE(ugeth->rx_bd_ring_offset[j])) in ucc_geth_alloc_rx()
2309 ugeth->p_rx_bd_ring[j] = in ucc_geth_alloc_rx()
2310 (u8 __iomem *) qe_muram_addr(ugeth-> in ucc_geth_alloc_rx()
2313 if (!ugeth->p_rx_bd_ring[j]) { in ucc_geth_alloc_rx()
2314 if (netif_msg_ifup(ugeth)) in ucc_geth_alloc_rx()
2323 ugeth->rx_skbuff[j] = kmalloc(sizeof(struct sk_buff *) * in ucc_geth_alloc_rx()
2324 ugeth->ug_info->bdRingLenRx[j], in ucc_geth_alloc_rx()
2327 if (ugeth->rx_skbuff[j] == NULL) { in ucc_geth_alloc_rx()
2328 if (netif_msg_ifup(ugeth)) in ucc_geth_alloc_rx()
2333 for (i = 0; i < ugeth->ug_info->bdRingLenRx[j]; i++) in ucc_geth_alloc_rx()
2334 ugeth->rx_skbuff[j][i] = NULL; in ucc_geth_alloc_rx()
2336 ugeth->skb_currx[j] = 0; in ucc_geth_alloc_rx()
2337 bd = ugeth->rxBd[j] = ugeth->p_rx_bd_ring[j]; in ucc_geth_alloc_rx()
2353 static int ucc_geth_startup(struct ucc_geth_private *ugeth) in ucc_geth_startup() argument
2373 uccf = ugeth->uccf; in ucc_geth_startup()
2374 ug_info = ugeth->ug_info; in ucc_geth_startup()
2377 ug_regs = ugeth->ug_regs; in ucc_geth_startup()
2396 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2418 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2424 ugeth->rx_non_dynamic_extended_features = ug_info->ipCheckSumCheck || in ucc_geth_startup()
2429 ugeth->rx_extended_features = ugeth->rx_non_dynamic_extended_features || in ucc_geth_startup()
2466 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2482 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2502 ret_val = ucc_geth_alloc_tx(ugeth); in ucc_geth_startup()
2506 ret_val = ucc_geth_alloc_rx(ugeth); in ucc_geth_startup()
2515 ugeth->tx_glbl_pram_offset = in ucc_geth_startup()
2518 if (IS_ERR_VALUE(ugeth->tx_glbl_pram_offset)) { in ucc_geth_startup()
2519 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2523 ugeth->p_tx_glbl_pram = in ucc_geth_startup()
2524 (struct ucc_geth_tx_global_pram __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2527 memset_io((void __iomem *)ugeth->p_tx_glbl_pram, 0, sizeof(struct ucc_geth_tx_global_pram)); in ucc_geth_startup()
2533 ugeth->thread_dat_tx_offset = in ucc_geth_startup()
2538 if (IS_ERR_VALUE(ugeth->thread_dat_tx_offset)) { in ucc_geth_startup()
2539 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2544 ugeth->p_thread_data_tx = in ucc_geth_startup()
2545 (struct ucc_geth_thread_data_tx __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2547 out_be32(&ugeth->p_tx_glbl_pram->tqptr, ugeth->thread_dat_tx_offset); in ucc_geth_startup()
2551 out_be32(&ugeth->p_tx_glbl_pram->vtagtable[i], in ucc_geth_startup()
2556 out_8(&ugeth->p_tx_glbl_pram->iphoffset[i], in ucc_geth_startup()
2561 ugeth->send_q_mem_reg_offset = in ucc_geth_startup()
2565 if (IS_ERR_VALUE(ugeth->send_q_mem_reg_offset)) { in ucc_geth_startup()
2566 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2571 ugeth->p_send_q_mem_reg = in ucc_geth_startup()
2572 (struct ucc_geth_send_queue_mem_region __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2574 out_be32(&ugeth->p_tx_glbl_pram->sqptr, ugeth->send_q_mem_reg_offset); in ucc_geth_startup()
2580 ugeth->p_tx_bd_ring[i] + (ug_info->bdRingLenTx[i] - in ucc_geth_startup()
2582 if (ugeth->ug_info->uf_info.bd_mem_part == MEM_PART_SYSTEM) { in ucc_geth_startup()
2583 out_be32(&ugeth->p_send_q_mem_reg->sqqd[i].bd_ring_base, in ucc_geth_startup()
2584 (u32) virt_to_phys(ugeth->p_tx_bd_ring[i])); in ucc_geth_startup()
2585 out_be32(&ugeth->p_send_q_mem_reg->sqqd[i]. in ucc_geth_startup()
2588 } else if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_startup()
2590 out_be32(&ugeth->p_send_q_mem_reg->sqqd[i].bd_ring_base, in ucc_geth_startup()
2591 (u32) immrbar_virt_to_phys(ugeth-> in ucc_geth_startup()
2593 out_be32(&ugeth->p_send_q_mem_reg->sqqd[i]. in ucc_geth_startup()
2603 ugeth->scheduler_offset = in ucc_geth_startup()
2606 if (IS_ERR_VALUE(ugeth->scheduler_offset)) { in ucc_geth_startup()
2607 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2612 ugeth->p_scheduler = in ucc_geth_startup()
2613 (struct ucc_geth_scheduler __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2615 out_be32(&ugeth->p_tx_glbl_pram->schedulerbasepointer, in ucc_geth_startup()
2616 ugeth->scheduler_offset); in ucc_geth_startup()
2618 memset_io((void __iomem *)ugeth->p_scheduler, 0, sizeof(struct ucc_geth_scheduler)); in ucc_geth_startup()
2621 out_be32(&ugeth->p_scheduler->mblinterval, in ucc_geth_startup()
2623 out_be16(&ugeth->p_scheduler->nortsrbytetime, in ucc_geth_startup()
2625 out_8(&ugeth->p_scheduler->fracsiz, ug_info->fracsiz); in ucc_geth_startup()
2626 out_8(&ugeth->p_scheduler->strictpriorityq, in ucc_geth_startup()
2628 out_8(&ugeth->p_scheduler->txasap, ug_info->txasap); in ucc_geth_startup()
2629 out_8(&ugeth->p_scheduler->extrabw, ug_info->extrabw); in ucc_geth_startup()
2631 out_8(&ugeth->p_scheduler->weightfactor[i], in ucc_geth_startup()
2635 ugeth->p_cpucount[0] = &(ugeth->p_scheduler->cpucount0); in ucc_geth_startup()
2636 ugeth->p_cpucount[1] = &(ugeth->p_scheduler->cpucount1); in ucc_geth_startup()
2637 ugeth->p_cpucount[2] = &(ugeth->p_scheduler->cpucount2); in ucc_geth_startup()
2638 ugeth->p_cpucount[3] = &(ugeth->p_scheduler->cpucount3); in ucc_geth_startup()
2639 ugeth->p_cpucount[4] = &(ugeth->p_scheduler->cpucount4); in ucc_geth_startup()
2640 ugeth->p_cpucount[5] = &(ugeth->p_scheduler->cpucount5); in ucc_geth_startup()
2641 ugeth->p_cpucount[6] = &(ugeth->p_scheduler->cpucount6); in ucc_geth_startup()
2642 ugeth->p_cpucount[7] = &(ugeth->p_scheduler->cpucount7); in ucc_geth_startup()
2649 ugeth->tx_fw_statistics_pram_offset = in ucc_geth_startup()
2653 if (IS_ERR_VALUE(ugeth->tx_fw_statistics_pram_offset)) { in ucc_geth_startup()
2654 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2658 ugeth->p_tx_fw_statistics_pram = in ucc_geth_startup()
2660 qe_muram_addr(ugeth->tx_fw_statistics_pram_offset); in ucc_geth_startup()
2662 memset_io((void __iomem *)ugeth->p_tx_fw_statistics_pram, in ucc_geth_startup()
2674 out_be16(&ugeth->p_tx_glbl_pram->temoder, temoder); in ucc_geth_startup()
2676 test = in_be16(&ugeth->p_tx_glbl_pram->temoder); in ucc_geth_startup()
2683 out_be32(&ugeth->p_tx_glbl_pram->tstate, ((u32) function_code) << 24); in ucc_geth_startup()
2687 ugeth->rx_glbl_pram_offset = in ucc_geth_startup()
2690 if (IS_ERR_VALUE(ugeth->rx_glbl_pram_offset)) { in ucc_geth_startup()
2691 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2695 ugeth->p_rx_glbl_pram = in ucc_geth_startup()
2696 (struct ucc_geth_rx_global_pram __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2699 memset_io((void __iomem *)ugeth->p_rx_glbl_pram, 0, sizeof(struct ucc_geth_rx_global_pram)); in ucc_geth_startup()
2705 ugeth->thread_dat_rx_offset = in ucc_geth_startup()
2709 if (IS_ERR_VALUE(ugeth->thread_dat_rx_offset)) { in ucc_geth_startup()
2710 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2715 ugeth->p_thread_data_rx = in ucc_geth_startup()
2716 (struct ucc_geth_thread_data_rx __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2718 out_be32(&ugeth->p_rx_glbl_pram->rqptr, ugeth->thread_dat_rx_offset); in ucc_geth_startup()
2721 out_be16(&ugeth->p_rx_glbl_pram->typeorlen, ug_info->typeorlen); in ucc_geth_startup()
2726 ugeth->rx_fw_statistics_pram_offset = in ucc_geth_startup()
2730 if (IS_ERR_VALUE(ugeth->rx_fw_statistics_pram_offset)) { in ucc_geth_startup()
2731 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2735 ugeth->p_rx_fw_statistics_pram = in ucc_geth_startup()
2737 qe_muram_addr(ugeth->rx_fw_statistics_pram_offset); in ucc_geth_startup()
2739 memset_io((void __iomem *)ugeth->p_rx_fw_statistics_pram, 0, in ucc_geth_startup()
2746 ugeth->rx_irq_coalescing_tbl_offset = in ucc_geth_startup()
2750 if (IS_ERR_VALUE(ugeth->rx_irq_coalescing_tbl_offset)) { in ucc_geth_startup()
2751 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2756 ugeth->p_rx_irq_coalescing_tbl = in ucc_geth_startup()
2758 qe_muram_addr(ugeth->rx_irq_coalescing_tbl_offset); in ucc_geth_startup()
2759 out_be32(&ugeth->p_rx_glbl_pram->intcoalescingptr, in ucc_geth_startup()
2760 ugeth->rx_irq_coalescing_tbl_offset); in ucc_geth_startup()
2764 out_be32(&ugeth->p_rx_irq_coalescing_tbl->coalescingentry[i]. in ucc_geth_startup()
2767 out_be32(&ugeth->p_rx_irq_coalescing_tbl->coalescingentry[i]. in ucc_geth_startup()
2774 &ugeth->p_rx_glbl_pram->mrblr); in ucc_geth_startup()
2776 out_be16(&ugeth->p_rx_glbl_pram->mflr, ug_info->maxFrameLength); in ucc_geth_startup()
2779 &ugeth->p_rx_glbl_pram->minflr, in ucc_geth_startup()
2780 &ugeth->p_rx_glbl_pram->mrblr); in ucc_geth_startup()
2782 out_be16(&ugeth->p_rx_glbl_pram->maxd1, ug_info->maxD1Length); in ucc_geth_startup()
2784 out_be16(&ugeth->p_rx_glbl_pram->maxd2, ug_info->maxD2Length); in ucc_geth_startup()
2790 out_be32(&ugeth->p_rx_glbl_pram->l2qt, l2qt); in ucc_geth_startup()
2797 out_be32(&ugeth->p_rx_glbl_pram->l3qt[j/8], l3qt); in ucc_geth_startup()
2801 out_be16(&ugeth->p_rx_glbl_pram->vlantype, ug_info->vlantype); in ucc_geth_startup()
2804 out_be16(&ugeth->p_rx_glbl_pram->vlantci, ug_info->vlantci); in ucc_geth_startup()
2807 out_be32(&ugeth->p_rx_glbl_pram->ecamptr, ug_info->ecamptr); in ucc_geth_startup()
2811 ugeth->rx_bd_qs_tbl_offset = in ucc_geth_startup()
2816 if (IS_ERR_VALUE(ugeth->rx_bd_qs_tbl_offset)) { in ucc_geth_startup()
2817 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2822 ugeth->p_rx_bd_qs_tbl = in ucc_geth_startup()
2823 (struct ucc_geth_rx_bd_queues_entry __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2825 out_be32(&ugeth->p_rx_glbl_pram->rbdqptr, ugeth->rx_bd_qs_tbl_offset); in ucc_geth_startup()
2827 memset_io((void __iomem *)ugeth->p_rx_bd_qs_tbl, in ucc_geth_startup()
2835 if (ugeth->ug_info->uf_info.bd_mem_part == MEM_PART_SYSTEM) { in ucc_geth_startup()
2836 out_be32(&ugeth->p_rx_bd_qs_tbl[i].externalbdbaseptr, in ucc_geth_startup()
2837 (u32) virt_to_phys(ugeth->p_rx_bd_ring[i])); in ucc_geth_startup()
2838 } else if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_startup()
2840 out_be32(&ugeth->p_rx_bd_qs_tbl[i].externalbdbaseptr, in ucc_geth_startup()
2841 (u32) immrbar_virt_to_phys(ugeth-> in ucc_geth_startup()
2850 if (ugeth->rx_extended_features) in ucc_geth_startup()
2869 out_be32(&ugeth->p_rx_glbl_pram->remoder, remoder); in ucc_geth_startup()
2879 &ugeth->p_tx_glbl_pram->txrmonbaseptr, in ucc_geth_startup()
2880 ugeth->tx_fw_statistics_pram_offset, in ucc_geth_startup()
2881 &ugeth->p_rx_glbl_pram->rxrmonbaseptr, in ucc_geth_startup()
2882 ugeth->rx_fw_statistics_pram_offset, in ucc_geth_startup()
2883 &ugeth->p_tx_glbl_pram->temoder, in ucc_geth_startup()
2884 &ugeth->p_rx_glbl_pram->remoder); in ucc_geth_startup()
2887 out_8(&ugeth->p_rx_glbl_pram->rstate, function_code); in ucc_geth_startup()
2892 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2899 ugeth->exf_glbl_param_offset = in ucc_geth_startup()
2902 if (IS_ERR_VALUE(ugeth->exf_glbl_param_offset)) { in ucc_geth_startup()
2903 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2908 ugeth->p_exf_glbl_param = in ucc_geth_startup()
2909 (struct ucc_geth_exf_global_pram __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2911 out_be32(&ugeth->p_rx_glbl_pram->exfGlobalParam, in ucc_geth_startup()
2912 ugeth->exf_glbl_param_offset); in ucc_geth_startup()
2913 out_be32(&ugeth->p_exf_glbl_param->l2pcdptr, in ucc_geth_startup()
2921 ugeth_82xx_filtering_clear_addr_in_paddr(ugeth, (u8) j); in ucc_geth_startup()
2924 (struct ucc_geth_82xx_address_filtering_pram __iomem *) ugeth-> in ucc_geth_startup()
2927 ugeth_82xx_filtering_clear_all_addr_in_hash(ugeth, in ucc_geth_startup()
2929 ugeth_82xx_filtering_clear_all_addr_in_hash(ugeth, in ucc_geth_startup()
2946 if (!(ugeth->p_init_enet_param_shadow = in ucc_geth_startup()
2948 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2953 memset((char *)ugeth->p_init_enet_param_shadow, in ucc_geth_startup()
2958 ugeth->p_init_enet_param_shadow->resinit1 = in ucc_geth_startup()
2960 ugeth->p_init_enet_param_shadow->resinit2 = in ucc_geth_startup()
2962 ugeth->p_init_enet_param_shadow->resinit3 = in ucc_geth_startup()
2964 ugeth->p_init_enet_param_shadow->resinit4 = in ucc_geth_startup()
2966 ugeth->p_init_enet_param_shadow->resinit5 = in ucc_geth_startup()
2968 ugeth->p_init_enet_param_shadow->rgftgfrxglobal |= in ucc_geth_startup()
2970 ugeth->p_init_enet_param_shadow->rgftgfrxglobal |= in ucc_geth_startup()
2973 ugeth->p_init_enet_param_shadow->rgftgfrxglobal |= in ucc_geth_startup()
2974 ugeth->rx_glbl_pram_offset | ug_info->riscRx; in ucc_geth_startup()
2981 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2985 ugeth->p_init_enet_param_shadow->largestexternallookupkeysize = in ucc_geth_startup()
3000 if ((ret_val = fill_init_enet_entries(ugeth, &(ugeth-> in ucc_geth_startup()
3006 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
3011 ugeth->p_init_enet_param_shadow->txglobal = in ucc_geth_startup()
3012 ugeth->tx_glbl_pram_offset | ug_info->riscTx; in ucc_geth_startup()
3014 fill_init_enet_entries(ugeth, in ucc_geth_startup()
3015 &(ugeth->p_init_enet_param_shadow-> in ucc_geth_startup()
3020 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
3027 if ((ret_val = rx_bd_buffer_set(ugeth, (u8) i)) != 0) { in ucc_geth_startup()
3028 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
3037 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
3046 ugeth->p_init_enet_param_shadow->resinit1); in ucc_geth_startup()
3048 ugeth->p_init_enet_param_shadow->resinit2); in ucc_geth_startup()
3050 ugeth->p_init_enet_param_shadow->resinit3); in ucc_geth_startup()
3052 ugeth->p_init_enet_param_shadow->resinit4); in ucc_geth_startup()
3054 ugeth->p_init_enet_param_shadow->resinit5); in ucc_geth_startup()
3056 ugeth->p_init_enet_param_shadow->largestexternallookupkeysize); in ucc_geth_startup()
3058 ugeth->p_init_enet_param_shadow->rgftgfrxglobal); in ucc_geth_startup()
3061 ugeth->p_init_enet_param_shadow->rxthread[i]); in ucc_geth_startup()
3063 ugeth->p_init_enet_param_shadow->txglobal); in ucc_geth_startup()
3066 ugeth->p_init_enet_param_shadow->txthread[i]); in ucc_geth_startup()
3070 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info.ucc_num); in ucc_geth_startup()
3084 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_start_xmit() local
3095 spin_lock_irqsave(&ugeth->lock, flags); in ucc_geth_start_xmit()
3100 bd = ugeth->txBd[txQ]; in ucc_geth_start_xmit()
3103 ugeth->tx_skbuff[txQ][ugeth->skb_curtx[txQ]] = skb; in ucc_geth_start_xmit()
3106 ugeth->skb_curtx[txQ] = in ucc_geth_start_xmit()
3107 (ugeth->skb_curtx[txQ] + in ucc_geth_start_xmit()
3108 1) & TX_RING_MOD_MASK(ugeth->ug_info->bdRingLenTx[txQ]); in ucc_geth_start_xmit()
3112 dma_map_single(ugeth->dev, skb->data, in ucc_geth_start_xmit()
3126 bd = ugeth->p_tx_bd_ring[txQ]; in ucc_geth_start_xmit()
3130 if (bd == ugeth->confBd[txQ]) { in ucc_geth_start_xmit()
3135 ugeth->txBd[txQ] = bd; in ucc_geth_start_xmit()
3139 if (ugeth->p_scheduler) { in ucc_geth_start_xmit()
3140 ugeth->cpucount[txQ]++; in ucc_geth_start_xmit()
3145 out_be16(ugeth->p_cpucount[txQ], ugeth->cpucount[txQ]); in ucc_geth_start_xmit()
3149 uccf = ugeth->uccf; in ucc_geth_start_xmit()
3152 spin_unlock_irqrestore(&ugeth->lock, flags); in ucc_geth_start_xmit()
3157 static int ucc_geth_rx(struct ucc_geth_private *ugeth, u8 rxQ, int rx_work_limit) in ucc_geth_rx() argument
3168 dev = ugeth->ndev; in ucc_geth_rx()
3171 bd = ugeth->rxBd[rxQ]; in ucc_geth_rx()
3179 skb = ugeth->rx_skbuff[rxQ][ugeth->skb_currx[rxQ]]; in ucc_geth_rx()
3186 if (netif_msg_rx_err(ugeth)) in ucc_geth_rx()
3191 ugeth->rx_skbuff[rxQ][ugeth->skb_currx[rxQ]] = NULL; in ucc_geth_rx()
3201 skb->protocol = eth_type_trans(skb, ugeth->ndev); in ucc_geth_rx()
3208 skb = get_new_skb(ugeth, bd); in ucc_geth_rx()
3210 if (netif_msg_rx_err(ugeth)) in ucc_geth_rx()
3216 ugeth->rx_skbuff[rxQ][ugeth->skb_currx[rxQ]] = skb; in ucc_geth_rx()
3219 ugeth->skb_currx[rxQ] = in ucc_geth_rx()
3220 (ugeth->skb_currx[rxQ] + in ucc_geth_rx()
3221 1) & RX_RING_MOD_MASK(ugeth->ug_info->bdRingLenRx[rxQ]); in ucc_geth_rx()
3224 bd = ugeth->p_rx_bd_ring[rxQ]; in ucc_geth_rx()
3231 ugeth->rxBd[rxQ] = bd; in ucc_geth_rx()
3238 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_tx() local
3242 bd = ugeth->confBd[txQ]; in ucc_geth_tx()
3253 skb = ugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]]; in ucc_geth_tx()
3261 ugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]] = NULL; in ucc_geth_tx()
3262 ugeth->skb_dirtytx[txQ] = in ucc_geth_tx()
3263 (ugeth->skb_dirtytx[txQ] + in ucc_geth_tx()
3264 1) & TX_RING_MOD_MASK(ugeth->ug_info->bdRingLenTx[txQ]); in ucc_geth_tx()
3274 bd = ugeth->p_tx_bd_ring[txQ]; in ucc_geth_tx()
3277 ugeth->confBd[txQ] = bd; in ucc_geth_tx()
3283 struct ucc_geth_private *ugeth = container_of(napi, struct ucc_geth_private, napi); in ucc_geth_poll() local
3287 ug_info = ugeth->ug_info; in ucc_geth_poll()
3290 spin_lock(&ugeth->lock); in ucc_geth_poll()
3292 ucc_geth_tx(ugeth->ndev, i); in ucc_geth_poll()
3293 spin_unlock(&ugeth->lock); in ucc_geth_poll()
3297 howmany += ucc_geth_rx(ugeth, i, budget - howmany); in ucc_geth_poll()
3301 setbits32(ugeth->uccf->p_uccm, UCCE_RX_EVENTS | UCCE_TX_EVENTS); in ucc_geth_poll()
3310 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_irq_handler() local
3318 uccf = ugeth->uccf; in ucc_geth_irq_handler()
3319 ug_info = ugeth->ug_info; in ucc_geth_irq_handler()
3329 if (napi_schedule_prep(&ugeth->napi)) { in ucc_geth_irq_handler()
3332 __napi_schedule(&ugeth->napi); in ucc_geth_irq_handler()
3355 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_netpoll() local
3356 int irq = ugeth->ug_info->uf_info.irq; in ucc_netpoll()
3366 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_set_mac_addr() local
3381 spin_lock_irq(&ugeth->lock); in ucc_geth_set_mac_addr()
3388 &ugeth->ug_regs->macstnaddr1, in ucc_geth_set_mac_addr()
3389 &ugeth->ug_regs->macstnaddr2); in ucc_geth_set_mac_addr()
3390 spin_unlock_irq(&ugeth->lock); in ucc_geth_set_mac_addr()
3395 static int ucc_geth_init_mac(struct ucc_geth_private *ugeth) in ucc_geth_init_mac() argument
3397 struct net_device *dev = ugeth->ndev; in ucc_geth_init_mac()
3400 err = ucc_struct_init(ugeth); in ucc_geth_init_mac()
3402 netif_err(ugeth, ifup, dev, "Cannot configure internal struct, aborting\n"); in ucc_geth_init_mac()
3406 err = ucc_geth_startup(ugeth); in ucc_geth_init_mac()
3408 netif_err(ugeth, ifup, dev, "Cannot configure net device, aborting\n"); in ucc_geth_init_mac()
3412 err = adjust_enet_interface(ugeth); in ucc_geth_init_mac()
3414 netif_err(ugeth, ifup, dev, "Cannot configure net device, aborting\n"); in ucc_geth_init_mac()
3426 &ugeth->ug_regs->macstnaddr1, in ucc_geth_init_mac()
3427 &ugeth->ug_regs->macstnaddr2); in ucc_geth_init_mac()
3429 err = ugeth_enable(ugeth, COMM_DIR_RX_AND_TX); in ucc_geth_init_mac()
3431 netif_err(ugeth, ifup, dev, "Cannot enable net device, aborting\n"); in ucc_geth_init_mac()
3437 ucc_geth_stop(ugeth); in ucc_geth_init_mac()
3445 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_open() local
3452 netif_err(ugeth, ifup, dev, in ucc_geth_open()
3459 netif_err(ugeth, ifup, dev, "Cannot initialize PHY, aborting\n"); in ucc_geth_open()
3463 err = ucc_geth_init_mac(ugeth); in ucc_geth_open()
3465 netif_err(ugeth, ifup, dev, "Cannot initialize MAC, aborting\n"); in ucc_geth_open()
3469 err = request_irq(ugeth->ug_info->uf_info.irq, ucc_geth_irq_handler, in ucc_geth_open()
3472 netif_err(ugeth, ifup, dev, "Cannot get IRQ for net device, aborting\n"); in ucc_geth_open()
3476 phy_start(ugeth->phydev); in ucc_geth_open()
3477 napi_enable(&ugeth->napi); in ucc_geth_open()
3481 qe_alive_during_sleep() || ugeth->phydev->irq); in ucc_geth_open()
3482 device_set_wakeup_enable(&dev->dev, ugeth->wol_en); in ucc_geth_open()
3487 ucc_geth_stop(ugeth); in ucc_geth_open()
3494 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_close() local
3498 napi_disable(&ugeth->napi); in ucc_geth_close()
3500 cancel_work_sync(&ugeth->timeout_work); in ucc_geth_close()
3501 ucc_geth_stop(ugeth); in ucc_geth_close()
3502 phy_disconnect(ugeth->phydev); in ucc_geth_close()
3503 ugeth->phydev = NULL; in ucc_geth_close()
3505 free_irq(ugeth->ug_info->uf_info.irq, ugeth->ndev); in ucc_geth_close()
3515 struct ucc_geth_private *ugeth; in ucc_geth_timeout_work() local
3518 ugeth = container_of(work, struct ucc_geth_private, timeout_work); in ucc_geth_timeout_work()
3519 dev = ugeth->ndev; in ucc_geth_timeout_work()
3525 ugeth_dump_regs(ugeth); in ucc_geth_timeout_work()
3533 ucc_geth_stop(ugeth); in ucc_geth_timeout_work()
3534 ucc_geth_init_mac(ugeth); in ucc_geth_timeout_work()
3536 phy_start(ugeth->phydev); in ucc_geth_timeout_work()
3549 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_timeout() local
3551 schedule_work(&ugeth->timeout_work); in ucc_geth_timeout()
3560 struct ucc_geth_private *ugeth = netdev_priv(ndev); in ucc_geth_suspend() local
3566 napi_disable(&ugeth->napi); in ucc_geth_suspend()
3572 ugeth_disable(ugeth, COMM_DIR_RX_AND_TX); in ucc_geth_suspend()
3574 if (ugeth->wol_en & WAKE_MAGIC) { in ucc_geth_suspend()
3575 setbits32(ugeth->uccf->p_uccm, UCC_GETH_UCCE_MPD); in ucc_geth_suspend()
3576 setbits32(&ugeth->ug_regs->maccfg2, MACCFG2_MPE); in ucc_geth_suspend()
3577 ucc_fast_enable(ugeth->uccf, COMM_DIR_RX_AND_TX); in ucc_geth_suspend()
3578 } else if (!(ugeth->wol_en & WAKE_PHY)) { in ucc_geth_suspend()
3579 phy_stop(ugeth->phydev); in ucc_geth_suspend()
3588 struct ucc_geth_private *ugeth = netdev_priv(ndev); in ucc_geth_resume() local
3595 if (ugeth->wol_en & WAKE_MAGIC) { in ucc_geth_resume()
3596 ucc_fast_disable(ugeth->uccf, COMM_DIR_RX_AND_TX); in ucc_geth_resume()
3597 clrbits32(&ugeth->ug_regs->maccfg2, MACCFG2_MPE); in ucc_geth_resume()
3598 clrbits32(ugeth->uccf->p_uccm, UCC_GETH_UCCE_MPD); in ucc_geth_resume()
3600 ugeth_enable(ugeth, COMM_DIR_RX_AND_TX); in ucc_geth_resume()
3606 ucc_geth_memclean(ugeth); in ucc_geth_resume()
3608 err = ucc_geth_init_mac(ugeth); in ucc_geth_resume()
3615 ugeth->oldlink = 0; in ucc_geth_resume()
3616 ugeth->oldspeed = 0; in ucc_geth_resume()
3617 ugeth->oldduplex = -1; in ucc_geth_resume()
3619 phy_stop(ugeth->phydev); in ucc_geth_resume()
3620 phy_start(ugeth->phydev); in ucc_geth_resume()
3622 napi_enable(&ugeth->napi); in ucc_geth_resume()
3661 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_ioctl() local
3666 if (!ugeth->phydev) in ucc_geth_ioctl()
3669 return phy_mii_ioctl(ugeth->phydev, rq, cmd); in ucc_geth_ioctl()
3692 struct ucc_geth_private *ugeth = NULL; in ucc_geth_probe() local
3862 dev = alloc_etherdev(sizeof(*ugeth)); in ucc_geth_probe()
3870 ugeth = netdev_priv(dev); in ucc_geth_probe()
3871 spin_lock_init(&ugeth->lock); in ucc_geth_probe()
3874 INIT_LIST_HEAD(&ugeth->group_hash_q); in ucc_geth_probe()
3875 INIT_LIST_HEAD(&ugeth->ind_hash_q); in ucc_geth_probe()
3888 INIT_WORK(&ugeth->timeout_work, ucc_geth_timeout_work); in ucc_geth_probe()
3889 netif_napi_add(dev, &ugeth->napi, ucc_geth_poll, 64); in ucc_geth_probe()
3892 ugeth->msg_enable = netif_msg_init(debug.msg_enable, UGETH_MSG_DEFAULT); in ucc_geth_probe()
3893 ugeth->phy_interface = phy_interface; in ucc_geth_probe()
3894 ugeth->max_speed = max_speed; in ucc_geth_probe()
3901 if (netif_msg_probe(ugeth)) in ucc_geth_probe()
3914 ugeth->ug_info = ug_info; in ucc_geth_probe()
3915 ugeth->dev = device; in ucc_geth_probe()
3916 ugeth->ndev = dev; in ucc_geth_probe()
3917 ugeth->node = np; in ucc_geth_probe()
3925 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_remove() local
3929 ucc_geth_memclean(ugeth); in ucc_geth_remove()
3930 of_node_put(ugeth->ug_info->tbi_node); in ucc_geth_remove()
3931 of_node_put(ugeth->ug_info->phy_node); in ucc_geth_remove()