Lines Matching refs:ugeth

205 static struct sk_buff *get_new_skb(struct ucc_geth_private *ugeth,  in get_new_skb()  argument
210 skb = netdev_alloc_skb(ugeth->ndev, in get_new_skb()
211 ugeth->ug_info->uf_info.max_rx_buf_length + in get_new_skb()
225 dma_map_single(ugeth->dev, in get_new_skb()
227 ugeth->ug_info->uf_info.max_rx_buf_length + in get_new_skb()
237 static int rx_bd_buffer_set(struct ucc_geth_private *ugeth, u8 rxQ) in rx_bd_buffer_set() argument
244 bd = ugeth->p_rx_bd_ring[rxQ]; in rx_bd_buffer_set()
249 skb = get_new_skb(ugeth, bd); in rx_bd_buffer_set()
255 ugeth->rx_skbuff[rxQ][i] = skb; in rx_bd_buffer_set()
265 static int fill_init_enet_entries(struct ucc_geth_private *ugeth, in fill_init_enet_entries() argument
279 if (netif_msg_ifup(ugeth)) in fill_init_enet_entries()
290 if (netif_msg_ifup(ugeth)) in fill_init_enet_entries()
304 static int return_init_enet_entries(struct ucc_geth_private *ugeth, in return_init_enet_entries() argument
338 static int dump_init_enet_entries(struct ucc_geth_private *ugeth, in dump_init_enet_entries() argument
390 static int hw_clear_addr_in_paddr(struct ucc_geth_private *ugeth, u8 paddr_num) in hw_clear_addr_in_paddr() argument
400 (struct ucc_geth_82xx_address_filtering_pram __iomem *) ugeth->p_rx_glbl_pram-> in hw_clear_addr_in_paddr()
412 static void hw_add_addr_in_hash(struct ucc_geth_private *ugeth, in hw_add_addr_in_hash() argument
419 (struct ucc_geth_82xx_address_filtering_pram __iomem *) ugeth->p_rx_glbl_pram-> in hw_add_addr_in_hash()
423 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info.ucc_num); in hw_add_addr_in_hash()
436 static void get_statistics(struct ucc_geth_private *ugeth, in get_statistics() argument
448 ug_regs = ugeth->ug_regs; in get_statistics()
450 p_tx_fw_statistics_pram = ugeth->p_tx_fw_statistics_pram; in get_statistics()
451 p_rx_fw_statistics_pram = ugeth->p_rx_fw_statistics_pram; in get_statistics()
556 static void dump_bds(struct ucc_geth_private *ugeth) in dump_bds() argument
561 for (i = 0; i < ugeth->ug_info->numQueuesTx; i++) { in dump_bds()
562 if (ugeth->p_tx_bd_ring[i]) { in dump_bds()
564 (ugeth->ug_info->bdRingLenTx[i] * in dump_bds()
567 mem_disp(ugeth->p_tx_bd_ring[i], length); in dump_bds()
570 for (i = 0; i < ugeth->ug_info->numQueuesRx; i++) { in dump_bds()
571 if (ugeth->p_rx_bd_ring[i]) { in dump_bds()
573 (ugeth->ug_info->bdRingLenRx[i] * in dump_bds()
576 mem_disp(ugeth->p_rx_bd_ring[i], length); in dump_bds()
581 static void dump_regs(struct ucc_geth_private *ugeth) in dump_regs() argument
585 pr_info("UCC%d Geth registers:\n", ugeth->ug_info->uf_info.ucc_num + 1); in dump_regs()
586 pr_info("Base address: 0x%08x\n", (u32)ugeth->ug_regs); in dump_regs()
589 (u32)&ugeth->ug_regs->maccfg1, in dump_regs()
590 in_be32(&ugeth->ug_regs->maccfg1)); in dump_regs()
592 (u32)&ugeth->ug_regs->maccfg2, in dump_regs()
593 in_be32(&ugeth->ug_regs->maccfg2)); in dump_regs()
595 (u32)&ugeth->ug_regs->ipgifg, in dump_regs()
596 in_be32(&ugeth->ug_regs->ipgifg)); in dump_regs()
598 (u32)&ugeth->ug_regs->hafdup, in dump_regs()
599 in_be32(&ugeth->ug_regs->hafdup)); in dump_regs()
601 (u32)&ugeth->ug_regs->ifctl, in dump_regs()
602 in_be32(&ugeth->ug_regs->ifctl)); in dump_regs()
604 (u32)&ugeth->ug_regs->ifstat, in dump_regs()
605 in_be32(&ugeth->ug_regs->ifstat)); in dump_regs()
607 (u32)&ugeth->ug_regs->macstnaddr1, in dump_regs()
608 in_be32(&ugeth->ug_regs->macstnaddr1)); in dump_regs()
610 (u32)&ugeth->ug_regs->macstnaddr2, in dump_regs()
611 in_be32(&ugeth->ug_regs->macstnaddr2)); in dump_regs()
613 (u32)&ugeth->ug_regs->uempr, in dump_regs()
614 in_be32(&ugeth->ug_regs->uempr)); in dump_regs()
616 (u32)&ugeth->ug_regs->utbipar, in dump_regs()
617 in_be32(&ugeth->ug_regs->utbipar)); in dump_regs()
619 (u32)&ugeth->ug_regs->uescr, in dump_regs()
620 in_be16(&ugeth->ug_regs->uescr)); in dump_regs()
622 (u32)&ugeth->ug_regs->tx64, in dump_regs()
623 in_be32(&ugeth->ug_regs->tx64)); in dump_regs()
625 (u32)&ugeth->ug_regs->tx127, in dump_regs()
626 in_be32(&ugeth->ug_regs->tx127)); in dump_regs()
628 (u32)&ugeth->ug_regs->tx255, in dump_regs()
629 in_be32(&ugeth->ug_regs->tx255)); in dump_regs()
631 (u32)&ugeth->ug_regs->rx64, in dump_regs()
632 in_be32(&ugeth->ug_regs->rx64)); in dump_regs()
634 (u32)&ugeth->ug_regs->rx127, in dump_regs()
635 in_be32(&ugeth->ug_regs->rx127)); in dump_regs()
637 (u32)&ugeth->ug_regs->rx255, in dump_regs()
638 in_be32(&ugeth->ug_regs->rx255)); in dump_regs()
640 (u32)&ugeth->ug_regs->txok, in dump_regs()
641 in_be32(&ugeth->ug_regs->txok)); in dump_regs()
643 (u32)&ugeth->ug_regs->txcf, in dump_regs()
644 in_be16(&ugeth->ug_regs->txcf)); in dump_regs()
646 (u32)&ugeth->ug_regs->tmca, in dump_regs()
647 in_be32(&ugeth->ug_regs->tmca)); in dump_regs()
649 (u32)&ugeth->ug_regs->tbca, in dump_regs()
650 in_be32(&ugeth->ug_regs->tbca)); in dump_regs()
652 (u32)&ugeth->ug_regs->rxfok, in dump_regs()
653 in_be32(&ugeth->ug_regs->rxfok)); in dump_regs()
655 (u32)&ugeth->ug_regs->rxbok, in dump_regs()
656 in_be32(&ugeth->ug_regs->rxbok)); in dump_regs()
658 (u32)&ugeth->ug_regs->rbyt, in dump_regs()
659 in_be32(&ugeth->ug_regs->rbyt)); in dump_regs()
661 (u32)&ugeth->ug_regs->rmca, in dump_regs()
662 in_be32(&ugeth->ug_regs->rmca)); in dump_regs()
664 (u32)&ugeth->ug_regs->rbca, in dump_regs()
665 in_be32(&ugeth->ug_regs->rbca)); in dump_regs()
667 (u32)&ugeth->ug_regs->scar, in dump_regs()
668 in_be32(&ugeth->ug_regs->scar)); in dump_regs()
670 (u32)&ugeth->ug_regs->scam, in dump_regs()
671 in_be32(&ugeth->ug_regs->scam)); in dump_regs()
673 if (ugeth->p_thread_data_tx) { in dump_regs()
675 switch (ugeth->ug_info->numThreadsTx) { in dump_regs()
698 (u32)ugeth->p_thread_data_tx); in dump_regs()
702 (u32)&ugeth->p_thread_data_tx[i]); in dump_regs()
703 mem_disp((u8 *) & ugeth->p_thread_data_tx[i], in dump_regs()
707 if (ugeth->p_thread_data_rx) { in dump_regs()
709 switch (ugeth->ug_info->numThreadsRx) { in dump_regs()
732 (u32)ugeth->p_thread_data_rx); in dump_regs()
736 (u32)&ugeth->p_thread_data_rx[i]); in dump_regs()
737 mem_disp((u8 *) & ugeth->p_thread_data_rx[i], in dump_regs()
741 if (ugeth->p_exf_glbl_param) { in dump_regs()
744 (u32)ugeth->p_exf_glbl_param); in dump_regs()
745 mem_disp((u8 *) ugeth->p_exf_glbl_param, in dump_regs()
746 sizeof(*ugeth->p_exf_glbl_param)); in dump_regs()
748 if (ugeth->p_tx_glbl_pram) { in dump_regs()
750 pr_info("Base address: 0x%08x\n", (u32)ugeth->p_tx_glbl_pram); in dump_regs()
752 (u32)&ugeth->p_tx_glbl_pram->temoder, in dump_regs()
753 in_be16(&ugeth->p_tx_glbl_pram->temoder)); in dump_regs()
755 (u32)&ugeth->p_tx_glbl_pram->sqptr, in dump_regs()
756 in_be32(&ugeth->p_tx_glbl_pram->sqptr)); in dump_regs()
758 (u32)&ugeth->p_tx_glbl_pram->schedulerbasepointer, in dump_regs()
759 in_be32(&ugeth->p_tx_glbl_pram->schedulerbasepointer)); in dump_regs()
761 (u32)&ugeth->p_tx_glbl_pram->txrmonbaseptr, in dump_regs()
762 in_be32(&ugeth->p_tx_glbl_pram->txrmonbaseptr)); in dump_regs()
764 (u32)&ugeth->p_tx_glbl_pram->tstate, in dump_regs()
765 in_be32(&ugeth->p_tx_glbl_pram->tstate)); in dump_regs()
767 (u32)&ugeth->p_tx_glbl_pram->iphoffset[0], in dump_regs()
768 ugeth->p_tx_glbl_pram->iphoffset[0]); in dump_regs()
770 (u32)&ugeth->p_tx_glbl_pram->iphoffset[1], in dump_regs()
771 ugeth->p_tx_glbl_pram->iphoffset[1]); in dump_regs()
773 (u32)&ugeth->p_tx_glbl_pram->iphoffset[2], in dump_regs()
774 ugeth->p_tx_glbl_pram->iphoffset[2]); in dump_regs()
776 (u32)&ugeth->p_tx_glbl_pram->iphoffset[3], in dump_regs()
777 ugeth->p_tx_glbl_pram->iphoffset[3]); in dump_regs()
779 (u32)&ugeth->p_tx_glbl_pram->iphoffset[4], in dump_regs()
780 ugeth->p_tx_glbl_pram->iphoffset[4]); in dump_regs()
782 (u32)&ugeth->p_tx_glbl_pram->iphoffset[5], in dump_regs()
783 ugeth->p_tx_glbl_pram->iphoffset[5]); in dump_regs()
785 (u32)&ugeth->p_tx_glbl_pram->iphoffset[6], in dump_regs()
786 ugeth->p_tx_glbl_pram->iphoffset[6]); in dump_regs()
788 (u32)&ugeth->p_tx_glbl_pram->iphoffset[7], in dump_regs()
789 ugeth->p_tx_glbl_pram->iphoffset[7]); in dump_regs()
791 (u32)&ugeth->p_tx_glbl_pram->vtagtable[0], in dump_regs()
792 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[0])); in dump_regs()
794 (u32)&ugeth->p_tx_glbl_pram->vtagtable[1], in dump_regs()
795 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[1])); in dump_regs()
797 (u32)&ugeth->p_tx_glbl_pram->vtagtable[2], in dump_regs()
798 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[2])); in dump_regs()
800 (u32)&ugeth->p_tx_glbl_pram->vtagtable[3], in dump_regs()
801 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[3])); in dump_regs()
803 (u32)&ugeth->p_tx_glbl_pram->vtagtable[4], in dump_regs()
804 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[4])); in dump_regs()
806 (u32)&ugeth->p_tx_glbl_pram->vtagtable[5], in dump_regs()
807 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[5])); in dump_regs()
809 (u32)&ugeth->p_tx_glbl_pram->vtagtable[6], in dump_regs()
810 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[6])); in dump_regs()
812 (u32)&ugeth->p_tx_glbl_pram->vtagtable[7], in dump_regs()
813 in_be32(&ugeth->p_tx_glbl_pram->vtagtable[7])); in dump_regs()
815 (u32)&ugeth->p_tx_glbl_pram->tqptr, in dump_regs()
816 in_be32(&ugeth->p_tx_glbl_pram->tqptr)); in dump_regs()
818 if (ugeth->p_rx_glbl_pram) { in dump_regs()
820 pr_info("Base address: 0x%08x\n", (u32)ugeth->p_rx_glbl_pram); in dump_regs()
822 (u32)&ugeth->p_rx_glbl_pram->remoder, in dump_regs()
823 in_be32(&ugeth->p_rx_glbl_pram->remoder)); in dump_regs()
825 (u32)&ugeth->p_rx_glbl_pram->rqptr, in dump_regs()
826 in_be32(&ugeth->p_rx_glbl_pram->rqptr)); in dump_regs()
828 (u32)&ugeth->p_rx_glbl_pram->typeorlen, in dump_regs()
829 in_be16(&ugeth->p_rx_glbl_pram->typeorlen)); in dump_regs()
831 (u32)&ugeth->p_rx_glbl_pram->rxgstpack, in dump_regs()
832 ugeth->p_rx_glbl_pram->rxgstpack); in dump_regs()
834 (u32)&ugeth->p_rx_glbl_pram->rxrmonbaseptr, in dump_regs()
835 in_be32(&ugeth->p_rx_glbl_pram->rxrmonbaseptr)); in dump_regs()
837 (u32)&ugeth->p_rx_glbl_pram->intcoalescingptr, in dump_regs()
838 in_be32(&ugeth->p_rx_glbl_pram->intcoalescingptr)); in dump_regs()
840 (u32)&ugeth->p_rx_glbl_pram->rstate, in dump_regs()
841 ugeth->p_rx_glbl_pram->rstate); in dump_regs()
843 (u32)&ugeth->p_rx_glbl_pram->mrblr, in dump_regs()
844 in_be16(&ugeth->p_rx_glbl_pram->mrblr)); in dump_regs()
846 (u32)&ugeth->p_rx_glbl_pram->rbdqptr, in dump_regs()
847 in_be32(&ugeth->p_rx_glbl_pram->rbdqptr)); in dump_regs()
849 (u32)&ugeth->p_rx_glbl_pram->mflr, in dump_regs()
850 in_be16(&ugeth->p_rx_glbl_pram->mflr)); in dump_regs()
852 (u32)&ugeth->p_rx_glbl_pram->minflr, in dump_regs()
853 in_be16(&ugeth->p_rx_glbl_pram->minflr)); in dump_regs()
855 (u32)&ugeth->p_rx_glbl_pram->maxd1, in dump_regs()
856 in_be16(&ugeth->p_rx_glbl_pram->maxd1)); in dump_regs()
858 (u32)&ugeth->p_rx_glbl_pram->maxd2, in dump_regs()
859 in_be16(&ugeth->p_rx_glbl_pram->maxd2)); in dump_regs()
861 (u32)&ugeth->p_rx_glbl_pram->ecamptr, in dump_regs()
862 in_be32(&ugeth->p_rx_glbl_pram->ecamptr)); in dump_regs()
864 (u32)&ugeth->p_rx_glbl_pram->l2qt, in dump_regs()
865 in_be32(&ugeth->p_rx_glbl_pram->l2qt)); in dump_regs()
867 (u32)&ugeth->p_rx_glbl_pram->l3qt[0], in dump_regs()
868 in_be32(&ugeth->p_rx_glbl_pram->l3qt[0])); in dump_regs()
870 (u32)&ugeth->p_rx_glbl_pram->l3qt[1], in dump_regs()
871 in_be32(&ugeth->p_rx_glbl_pram->l3qt[1])); in dump_regs()
873 (u32)&ugeth->p_rx_glbl_pram->l3qt[2], in dump_regs()
874 in_be32(&ugeth->p_rx_glbl_pram->l3qt[2])); in dump_regs()
876 (u32)&ugeth->p_rx_glbl_pram->l3qt[3], in dump_regs()
877 in_be32(&ugeth->p_rx_glbl_pram->l3qt[3])); in dump_regs()
879 (u32)&ugeth->p_rx_glbl_pram->l3qt[4], in dump_regs()
880 in_be32(&ugeth->p_rx_glbl_pram->l3qt[4])); in dump_regs()
882 (u32)&ugeth->p_rx_glbl_pram->l3qt[5], in dump_regs()
883 in_be32(&ugeth->p_rx_glbl_pram->l3qt[5])); in dump_regs()
885 (u32)&ugeth->p_rx_glbl_pram->l3qt[6], in dump_regs()
886 in_be32(&ugeth->p_rx_glbl_pram->l3qt[6])); in dump_regs()
888 (u32)&ugeth->p_rx_glbl_pram->l3qt[7], in dump_regs()
889 in_be32(&ugeth->p_rx_glbl_pram->l3qt[7])); in dump_regs()
891 (u32)&ugeth->p_rx_glbl_pram->vlantype, in dump_regs()
892 in_be16(&ugeth->p_rx_glbl_pram->vlantype)); in dump_regs()
894 (u32)&ugeth->p_rx_glbl_pram->vlantci, in dump_regs()
895 in_be16(&ugeth->p_rx_glbl_pram->vlantci)); in dump_regs()
899 (u32)&ugeth->p_rx_glbl_pram->addressfiltering[i], in dump_regs()
900 ugeth->p_rx_glbl_pram->addressfiltering[i]); in dump_regs()
902 (u32)&ugeth->p_rx_glbl_pram->exfGlobalParam, in dump_regs()
903 in_be32(&ugeth->p_rx_glbl_pram->exfGlobalParam)); in dump_regs()
905 if (ugeth->p_send_q_mem_reg) { in dump_regs()
907 pr_info("Base address: 0x%08x\n", (u32)ugeth->p_send_q_mem_reg); in dump_regs()
908 for (i = 0; i < ugeth->ug_info->numQueuesTx; i++) { in dump_regs()
911 (u32)&ugeth->p_send_q_mem_reg->sqqd[i]); in dump_regs()
912 mem_disp((u8 *) & ugeth->p_send_q_mem_reg->sqqd[i], in dump_regs()
916 if (ugeth->p_scheduler) { in dump_regs()
918 pr_info("Base address: 0x%08x\n", (u32)ugeth->p_scheduler); in dump_regs()
919 mem_disp((u8 *) ugeth->p_scheduler, in dump_regs()
920 sizeof(*ugeth->p_scheduler)); in dump_regs()
922 if (ugeth->p_tx_fw_statistics_pram) { in dump_regs()
925 (u32)ugeth->p_tx_fw_statistics_pram); in dump_regs()
926 mem_disp((u8 *) ugeth->p_tx_fw_statistics_pram, in dump_regs()
927 sizeof(*ugeth->p_tx_fw_statistics_pram)); in dump_regs()
929 if (ugeth->p_rx_fw_statistics_pram) { in dump_regs()
932 (u32)ugeth->p_rx_fw_statistics_pram); in dump_regs()
933 mem_disp((u8 *) ugeth->p_rx_fw_statistics_pram, in dump_regs()
934 sizeof(*ugeth->p_rx_fw_statistics_pram)); in dump_regs()
936 if (ugeth->p_rx_irq_coalescing_tbl) { in dump_regs()
939 (u32)ugeth->p_rx_irq_coalescing_tbl); in dump_regs()
940 for (i = 0; i < ugeth->ug_info->numQueuesRx; i++) { in dump_regs()
943 (u32)&ugeth->p_rx_irq_coalescing_tbl-> in dump_regs()
946 (u32)&ugeth->p_rx_irq_coalescing_tbl-> in dump_regs()
948 in_be32(&ugeth->p_rx_irq_coalescing_tbl-> in dump_regs()
952 (u32)&ugeth->p_rx_irq_coalescing_tbl-> in dump_regs()
954 in_be32(&ugeth->p_rx_irq_coalescing_tbl-> in dump_regs()
959 if (ugeth->p_rx_bd_qs_tbl) { in dump_regs()
961 pr_info("Base address: 0x%08x\n", (u32)ugeth->p_rx_bd_qs_tbl); in dump_regs()
962 for (i = 0; i < ugeth->ug_info->numQueuesRx; i++) { in dump_regs()
965 (u32)&ugeth->p_rx_bd_qs_tbl[i]); in dump_regs()
967 (u32)&ugeth->p_rx_bd_qs_tbl[i].bdbaseptr, in dump_regs()
968 in_be32(&ugeth->p_rx_bd_qs_tbl[i].bdbaseptr)); in dump_regs()
970 (u32)&ugeth->p_rx_bd_qs_tbl[i].bdptr, in dump_regs()
971 in_be32(&ugeth->p_rx_bd_qs_tbl[i].bdptr)); in dump_regs()
973 (u32)&ugeth->p_rx_bd_qs_tbl[i].externalbdbaseptr, in dump_regs()
974 in_be32(&ugeth->p_rx_bd_qs_tbl[i]. in dump_regs()
977 (u32)&ugeth->p_rx_bd_qs_tbl[i].externalbdptr, in dump_regs()
978 in_be32(&ugeth->p_rx_bd_qs_tbl[i].externalbdptr)); in dump_regs()
982 (&ugeth->p_rx_bd_qs_tbl[i]. in dump_regs()
986 (&ugeth->p_rx_bd_qs_tbl[i]. in dump_regs()
991 if (ugeth->p_init_enet_param_shadow) { in dump_regs()
995 (u32) ugeth->p_init_enet_param_shadow); in dump_regs()
996 mem_disp((u8 *) ugeth->p_init_enet_param_shadow, in dump_regs()
997 sizeof(*ugeth->p_init_enet_param_shadow)); in dump_regs()
1000 if (ugeth->ug_info->rxExtendedFiltering) { in dump_regs()
1003 if (ugeth->ug_info->largestexternallookupkeysize == in dump_regs()
1007 if (ugeth->ug_info->largestexternallookupkeysize == in dump_regs()
1013 dump_init_enet_entries(ugeth, in dump_regs()
1014 &(ugeth->p_init_enet_param_shadow-> in dump_regs()
1018 ugeth->ug_info->riscTx, 0); in dump_regs()
1019 dump_init_enet_entries(ugeth, in dump_regs()
1020 &(ugeth->p_init_enet_param_shadow-> in dump_regs()
1023 ugeth->ug_info->riscRx, 1); in dump_regs()
1310 static int adjust_enet_interface(struct ucc_geth_private *ugeth) in adjust_enet_interface() argument
1321 ug_info = ugeth->ug_info; in adjust_enet_interface()
1322 ug_regs = ugeth->ug_regs; in adjust_enet_interface()
1323 uf_regs = ugeth->uccf->uf_regs; in adjust_enet_interface()
1328 if ((ugeth->max_speed == SPEED_10) || in adjust_enet_interface()
1329 (ugeth->max_speed == SPEED_100)) in adjust_enet_interface()
1331 else if (ugeth->max_speed == SPEED_1000) in adjust_enet_interface()
1340 if ((ugeth->phy_interface == PHY_INTERFACE_MODE_RMII) || in adjust_enet_interface()
1341 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII) || in adjust_enet_interface()
1342 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_ID) || in adjust_enet_interface()
1343 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_RXID) || in adjust_enet_interface()
1344 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_TXID) || in adjust_enet_interface()
1345 (ugeth->phy_interface == PHY_INTERFACE_MODE_RTBI)) { in adjust_enet_interface()
1346 if (ugeth->phy_interface != PHY_INTERFACE_MODE_RMII) in adjust_enet_interface()
1348 switch (ugeth->max_speed) { in adjust_enet_interface()
1353 if (ugeth->phy_interface != PHY_INTERFACE_MODE_RTBI) in adjust_enet_interface()
1357 if ((ugeth->phy_interface == PHY_INTERFACE_MODE_TBI) || in adjust_enet_interface()
1358 (ugeth->phy_interface == PHY_INTERFACE_MODE_RTBI)) { in adjust_enet_interface()
1361 if (ugeth->phy_interface == PHY_INTERFACE_MODE_SGMII) in adjust_enet_interface()
1369 if ((ugeth->phy_interface == PHY_INTERFACE_MODE_TBI) || in adjust_enet_interface()
1370 (ugeth->phy_interface == PHY_INTERFACE_MODE_RTBI)) { in adjust_enet_interface()
1371 struct ucc_geth_info *ug_info = ugeth->ug_info; in adjust_enet_interface()
1392 if (netif_msg_probe(ugeth)) in adjust_enet_interface()
1400 static int ugeth_graceful_stop_tx(struct ucc_geth_private *ugeth) in ugeth_graceful_stop_tx() argument
1407 uccf = ugeth->uccf; in ugeth_graceful_stop_tx()
1415 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info.ucc_num); in ugeth_graceful_stop_tx()
1430 static int ugeth_graceful_stop_rx(struct ucc_geth_private *ugeth) in ugeth_graceful_stop_rx() argument
1437 uccf = ugeth->uccf; in ugeth_graceful_stop_rx()
1440 temp = in_8(&ugeth->p_rx_glbl_pram->rxgstpack); in ugeth_graceful_stop_rx()
1442 out_8(&ugeth->p_rx_glbl_pram->rxgstpack, temp); in ugeth_graceful_stop_rx()
1449 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info. in ugeth_graceful_stop_rx()
1454 temp = in_8(&ugeth->p_rx_glbl_pram->rxgstpack); in ugeth_graceful_stop_rx()
1462 static int ugeth_restart_tx(struct ucc_geth_private *ugeth) in ugeth_restart_tx() argument
1467 uccf = ugeth->uccf; in ugeth_restart_tx()
1470 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info.ucc_num); in ugeth_restart_tx()
1477 static int ugeth_restart_rx(struct ucc_geth_private *ugeth) in ugeth_restart_rx() argument
1482 uccf = ugeth->uccf; in ugeth_restart_rx()
1485 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info.ucc_num); in ugeth_restart_rx()
1493 static int ugeth_enable(struct ucc_geth_private *ugeth, enum comm_dir mode) in ugeth_enable() argument
1498 uccf = ugeth->uccf; in ugeth_enable()
1501 if (ugeth->ug_info->uf_info.ucc_num >= UCC_MAX_NUM) { in ugeth_enable()
1502 if (netif_msg_probe(ugeth)) in ugeth_enable()
1513 ugeth_restart_tx(ugeth); in ugeth_enable()
1515 ugeth_restart_rx(ugeth); in ugeth_enable()
1523 static int ugeth_disable(struct ucc_geth_private *ugeth, enum comm_dir mode) in ugeth_disable() argument
1527 uccf = ugeth->uccf; in ugeth_disable()
1530 if (ugeth->ug_info->uf_info.ucc_num >= UCC_MAX_NUM) { in ugeth_disable()
1531 if (netif_msg_probe(ugeth)) in ugeth_disable()
1538 ugeth_graceful_stop_tx(ugeth); in ugeth_disable()
1542 ugeth_graceful_stop_rx(ugeth); in ugeth_disable()
1544 ucc_fast_disable(ugeth->uccf, mode); /* OK to do even if not enabled */ in ugeth_disable()
1549 static void ugeth_quiesce(struct ucc_geth_private *ugeth) in ugeth_quiesce() argument
1552 netif_tx_stop_all_queues(ugeth->ndev); in ugeth_quiesce()
1555 disable_irq(ugeth->ug_info->uf_info.irq); in ugeth_quiesce()
1558 napi_disable(&ugeth->napi); in ugeth_quiesce()
1561 static void ugeth_activate(struct ucc_geth_private *ugeth) in ugeth_activate() argument
1563 napi_enable(&ugeth->napi); in ugeth_activate()
1564 enable_irq(ugeth->ug_info->uf_info.irq); in ugeth_activate()
1567 netif_tx_wake_all_queues(ugeth->ndev); in ugeth_activate()
1568 __netdev_watchdog_up(ugeth->ndev); in ugeth_activate()
1580 struct ucc_geth_private *ugeth = netdev_priv(dev); in adjust_link() local
1583 struct phy_device *phydev = ugeth->phydev; in adjust_link()
1586 ug_regs = ugeth->ug_regs; in adjust_link()
1587 uf_regs = ugeth->uccf->uf_regs; in adjust_link()
1594 if (phydev->duplex != ugeth->oldduplex) { in adjust_link()
1600 ugeth->oldduplex = phydev->duplex; in adjust_link()
1603 if (phydev->speed != ugeth->oldspeed) { in adjust_link()
1617 if ((ugeth->phy_interface == PHY_INTERFACE_MODE_RMII) || in adjust_link()
1618 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII) || in adjust_link()
1619 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_ID) || in adjust_link()
1620 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_RXID) || in adjust_link()
1621 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_TXID) || in adjust_link()
1622 (ugeth->phy_interface == PHY_INTERFACE_MODE_RTBI)) { in adjust_link()
1630 if (netif_msg_link(ugeth)) in adjust_link()
1636 ugeth->oldspeed = phydev->speed; in adjust_link()
1639 if (!ugeth->oldlink) { in adjust_link()
1641 ugeth->oldlink = 1; in adjust_link()
1652 ugeth_quiesce(ugeth); in adjust_link()
1653 ugeth_disable(ugeth, COMM_DIR_RX_AND_TX); in adjust_link()
1658 ugeth_enable(ugeth, COMM_DIR_RX_AND_TX); in adjust_link()
1659 ugeth_activate(ugeth); in adjust_link()
1661 } else if (ugeth->oldlink) { in adjust_link()
1663 ugeth->oldlink = 0; in adjust_link()
1664 ugeth->oldspeed = 0; in adjust_link()
1665 ugeth->oldduplex = -1; in adjust_link()
1668 if (new_state && netif_msg_link(ugeth)) in adjust_link()
1682 struct ucc_geth_private *ugeth = netdev_priv(dev); in uec_configure_serdes() local
1683 struct ucc_geth_info *ug_info = ugeth->ug_info; in uec_configure_serdes()
1749 static void ugeth_dump_regs(struct ucc_geth_private *ugeth) in ugeth_dump_regs() argument
1752 ucc_fast_dump_regs(ugeth->uccf); in ugeth_dump_regs()
1753 dump_regs(ugeth); in ugeth_dump_regs()
1754 dump_bds(ugeth); in ugeth_dump_regs()
1759 ugeth, in ugeth_82xx_filtering_clear_all_addr_in_hash()
1772 uccf = ugeth->uccf; in ugeth_82xx_filtering_clear_all_addr_in_hash()
1776 ugeth->p_rx_glbl_pram->addressfiltering; in ugeth_82xx_filtering_clear_all_addr_in_hash()
1781 p_lh = &ugeth->group_hash_q; in ugeth_82xx_filtering_clear_all_addr_in_hash()
1782 p_counter = &(ugeth->numGroupAddrInHash); in ugeth_82xx_filtering_clear_all_addr_in_hash()
1786 p_lh = &ugeth->ind_hash_q; in ugeth_82xx_filtering_clear_all_addr_in_hash()
1787 p_counter = &(ugeth->numIndAddrInHash); in ugeth_82xx_filtering_clear_all_addr_in_hash()
1797 ugeth_disable(ugeth, comm_dir); in ugeth_82xx_filtering_clear_all_addr_in_hash()
1815 ugeth_enable(ugeth, comm_dir); in ugeth_82xx_filtering_clear_all_addr_in_hash()
1820 static int ugeth_82xx_filtering_clear_addr_in_paddr(struct ucc_geth_private *ugeth, in ugeth_82xx_filtering_clear_addr_in_paddr() argument
1823 ugeth->indAddrRegUsed[paddr_num] = 0; /* mark this paddr as not used */ in ugeth_82xx_filtering_clear_addr_in_paddr()
1824 return hw_clear_addr_in_paddr(ugeth, paddr_num);/* clear in hardware */ in ugeth_82xx_filtering_clear_addr_in_paddr()
1827 static void ucc_geth_free_rx(struct ucc_geth_private *ugeth) in ucc_geth_free_rx() argument
1835 ug_info = ugeth->ug_info; in ucc_geth_free_rx()
1838 for (i = 0; i < ugeth->ug_info->numQueuesRx; i++) { in ucc_geth_free_rx()
1839 if (ugeth->p_rx_bd_ring[i]) { in ucc_geth_free_rx()
1841 bd = ugeth->p_rx_bd_ring[i]; in ucc_geth_free_rx()
1842 for (j = 0; j < ugeth->ug_info->bdRingLenRx[i]; j++) { in ucc_geth_free_rx()
1843 if (ugeth->rx_skbuff[i][j]) { in ucc_geth_free_rx()
1844 dma_unmap_single(ugeth->dev, in ucc_geth_free_rx()
1846 ugeth->ug_info-> in ucc_geth_free_rx()
1851 ugeth->rx_skbuff[i][j]); in ucc_geth_free_rx()
1852 ugeth->rx_skbuff[i][j] = NULL; in ucc_geth_free_rx()
1857 kfree(ugeth->rx_skbuff[i]); in ucc_geth_free_rx()
1859 if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_free_rx()
1861 kfree((void *)ugeth->rx_bd_ring_offset[i]); in ucc_geth_free_rx()
1862 else if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_free_rx()
1864 qe_muram_free(ugeth->rx_bd_ring_offset[i]); in ucc_geth_free_rx()
1865 ugeth->p_rx_bd_ring[i] = NULL; in ucc_geth_free_rx()
1871 static void ucc_geth_free_tx(struct ucc_geth_private *ugeth) in ucc_geth_free_tx() argument
1878 netdev_reset_queue(ugeth->ndev); in ucc_geth_free_tx()
1880 ug_info = ugeth->ug_info; in ucc_geth_free_tx()
1883 for (i = 0; i < ugeth->ug_info->numQueuesTx; i++) { in ucc_geth_free_tx()
1884 bd = ugeth->p_tx_bd_ring[i]; in ucc_geth_free_tx()
1887 for (j = 0; j < ugeth->ug_info->bdRingLenTx[i]; j++) { in ucc_geth_free_tx()
1888 if (ugeth->tx_skbuff[i][j]) { in ucc_geth_free_tx()
1889 dma_unmap_single(ugeth->dev, in ucc_geth_free_tx()
1894 dev_kfree_skb_any(ugeth->tx_skbuff[i][j]); in ucc_geth_free_tx()
1895 ugeth->tx_skbuff[i][j] = NULL; in ucc_geth_free_tx()
1899 kfree(ugeth->tx_skbuff[i]); in ucc_geth_free_tx()
1901 if (ugeth->p_tx_bd_ring[i]) { in ucc_geth_free_tx()
1902 if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_free_tx()
1904 kfree((void *)ugeth->tx_bd_ring_offset[i]); in ucc_geth_free_tx()
1905 else if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_free_tx()
1907 qe_muram_free(ugeth->tx_bd_ring_offset[i]); in ucc_geth_free_tx()
1908 ugeth->p_tx_bd_ring[i] = NULL; in ucc_geth_free_tx()
1914 static void ucc_geth_memclean(struct ucc_geth_private *ugeth) in ucc_geth_memclean() argument
1916 if (!ugeth) in ucc_geth_memclean()
1919 if (ugeth->uccf) { in ucc_geth_memclean()
1920 ucc_fast_free(ugeth->uccf); in ucc_geth_memclean()
1921 ugeth->uccf = NULL; in ucc_geth_memclean()
1924 if (ugeth->p_thread_data_tx) { in ucc_geth_memclean()
1925 qe_muram_free(ugeth->thread_dat_tx_offset); in ucc_geth_memclean()
1926 ugeth->p_thread_data_tx = NULL; in ucc_geth_memclean()
1928 if (ugeth->p_thread_data_rx) { in ucc_geth_memclean()
1929 qe_muram_free(ugeth->thread_dat_rx_offset); in ucc_geth_memclean()
1930 ugeth->p_thread_data_rx = NULL; in ucc_geth_memclean()
1932 if (ugeth->p_exf_glbl_param) { in ucc_geth_memclean()
1933 qe_muram_free(ugeth->exf_glbl_param_offset); in ucc_geth_memclean()
1934 ugeth->p_exf_glbl_param = NULL; in ucc_geth_memclean()
1936 if (ugeth->p_rx_glbl_pram) { in ucc_geth_memclean()
1937 qe_muram_free(ugeth->rx_glbl_pram_offset); in ucc_geth_memclean()
1938 ugeth->p_rx_glbl_pram = NULL; in ucc_geth_memclean()
1940 if (ugeth->p_tx_glbl_pram) { in ucc_geth_memclean()
1941 qe_muram_free(ugeth->tx_glbl_pram_offset); in ucc_geth_memclean()
1942 ugeth->p_tx_glbl_pram = NULL; in ucc_geth_memclean()
1944 if (ugeth->p_send_q_mem_reg) { in ucc_geth_memclean()
1945 qe_muram_free(ugeth->send_q_mem_reg_offset); in ucc_geth_memclean()
1946 ugeth->p_send_q_mem_reg = NULL; in ucc_geth_memclean()
1948 if (ugeth->p_scheduler) { in ucc_geth_memclean()
1949 qe_muram_free(ugeth->scheduler_offset); in ucc_geth_memclean()
1950 ugeth->p_scheduler = NULL; in ucc_geth_memclean()
1952 if (ugeth->p_tx_fw_statistics_pram) { in ucc_geth_memclean()
1953 qe_muram_free(ugeth->tx_fw_statistics_pram_offset); in ucc_geth_memclean()
1954 ugeth->p_tx_fw_statistics_pram = NULL; in ucc_geth_memclean()
1956 if (ugeth->p_rx_fw_statistics_pram) { in ucc_geth_memclean()
1957 qe_muram_free(ugeth->rx_fw_statistics_pram_offset); in ucc_geth_memclean()
1958 ugeth->p_rx_fw_statistics_pram = NULL; in ucc_geth_memclean()
1960 if (ugeth->p_rx_irq_coalescing_tbl) { in ucc_geth_memclean()
1961 qe_muram_free(ugeth->rx_irq_coalescing_tbl_offset); in ucc_geth_memclean()
1962 ugeth->p_rx_irq_coalescing_tbl = NULL; in ucc_geth_memclean()
1964 if (ugeth->p_rx_bd_qs_tbl) { in ucc_geth_memclean()
1965 qe_muram_free(ugeth->rx_bd_qs_tbl_offset); in ucc_geth_memclean()
1966 ugeth->p_rx_bd_qs_tbl = NULL; in ucc_geth_memclean()
1968 if (ugeth->p_init_enet_param_shadow) { in ucc_geth_memclean()
1969 return_init_enet_entries(ugeth, in ucc_geth_memclean()
1970 &(ugeth->p_init_enet_param_shadow-> in ucc_geth_memclean()
1973 ugeth->ug_info->riscRx, 1); 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->riscTx, 0); in ucc_geth_memclean()
1979 kfree(ugeth->p_init_enet_param_shadow); in ucc_geth_memclean()
1980 ugeth->p_init_enet_param_shadow = NULL; in ucc_geth_memclean()
1982 ucc_geth_free_tx(ugeth); in ucc_geth_memclean()
1983 ucc_geth_free_rx(ugeth); in ucc_geth_memclean()
1984 while (!list_empty(&ugeth->group_hash_q)) in ucc_geth_memclean()
1986 (dequeue(&ugeth->group_hash_q))); in ucc_geth_memclean()
1987 while (!list_empty(&ugeth->ind_hash_q)) in ucc_geth_memclean()
1989 (dequeue(&ugeth->ind_hash_q))); in ucc_geth_memclean()
1990 if (ugeth->ug_regs) { in ucc_geth_memclean()
1991 iounmap(ugeth->ug_regs); in ucc_geth_memclean()
1992 ugeth->ug_regs = NULL; in ucc_geth_memclean()
1998 struct ucc_geth_private *ugeth; in ucc_geth_set_multi() local
2003 ugeth = netdev_priv(dev); in ucc_geth_set_multi()
2005 uf_regs = ugeth->uccf->uf_regs; in ucc_geth_set_multi()
2013 (struct ucc_geth_82xx_address_filtering_pram __iomem *) ugeth-> in ucc_geth_set_multi()
2032 hw_add_addr_in_hash(ugeth, ha->addr); in ucc_geth_set_multi()
2038 static void ucc_geth_stop(struct ucc_geth_private *ugeth) in ucc_geth_stop() argument
2040 struct ucc_geth __iomem *ug_regs = ugeth->ug_regs; in ucc_geth_stop()
2041 struct phy_device *phydev = ugeth->phydev; in ucc_geth_stop()
2053 ugeth_disable(ugeth, COMM_DIR_RX_AND_TX); in ucc_geth_stop()
2056 out_be32(ugeth->uccf->p_uccm, 0x00000000); in ucc_geth_stop()
2059 out_be32(ugeth->uccf->p_ucce, 0xffffffff); in ucc_geth_stop()
2064 ucc_geth_memclean(ugeth); in ucc_geth_stop()
2067 static int ucc_struct_init(struct ucc_geth_private *ugeth) in ucc_struct_init() argument
2073 ug_info = ugeth->ug_info; in ucc_struct_init()
2078 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2088 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2097 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2106 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2113 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2120 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2128 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2137 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2144 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2152 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2165 if (ucc_fast_init(uf_info, &ugeth->uccf)) { in ucc_struct_init()
2166 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2179 ugeth->ug_regs = ioremap(uf_info->regs, sizeof(*ugeth->ug_regs)); in ucc_struct_init()
2180 if (!ugeth->ug_regs) { in ucc_struct_init()
2181 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2189 static int ucc_geth_alloc_tx(struct ucc_geth_private *ugeth) in ucc_geth_alloc_tx() argument
2197 ug_info = ugeth->ug_info; in ucc_geth_alloc_tx()
2215 ugeth->tx_bd_ring_offset[j] = in ucc_geth_alloc_tx()
2218 if (ugeth->tx_bd_ring_offset[j] != 0) in ucc_geth_alloc_tx()
2219 ugeth->p_tx_bd_ring[j] = in ucc_geth_alloc_tx()
2220 (u8 __iomem *)((ugeth->tx_bd_ring_offset[j] + in ucc_geth_alloc_tx()
2223 ugeth->tx_bd_ring_offset[j] = in ucc_geth_alloc_tx()
2226 if (!IS_ERR_VALUE(ugeth->tx_bd_ring_offset[j])) in ucc_geth_alloc_tx()
2227 ugeth->p_tx_bd_ring[j] = in ucc_geth_alloc_tx()
2228 (u8 __iomem *) qe_muram_addr(ugeth-> in ucc_geth_alloc_tx()
2231 if (!ugeth->p_tx_bd_ring[j]) { in ucc_geth_alloc_tx()
2232 if (netif_msg_ifup(ugeth)) in ucc_geth_alloc_tx()
2237 memset_io((void __iomem *)(ugeth->p_tx_bd_ring[j] + in ucc_geth_alloc_tx()
2245 ugeth->tx_skbuff[j] = in ucc_geth_alloc_tx()
2246 kmalloc_array(ugeth->ug_info->bdRingLenTx[j], in ucc_geth_alloc_tx()
2249 if (ugeth->tx_skbuff[j] == NULL) { in ucc_geth_alloc_tx()
2250 if (netif_msg_ifup(ugeth)) in ucc_geth_alloc_tx()
2255 for (i = 0; i < ugeth->ug_info->bdRingLenTx[j]; i++) in ucc_geth_alloc_tx()
2256 ugeth->tx_skbuff[j][i] = NULL; in ucc_geth_alloc_tx()
2258 ugeth->skb_curtx[j] = ugeth->skb_dirtytx[j] = 0; in ucc_geth_alloc_tx()
2259 bd = ugeth->confBd[j] = ugeth->txBd[j] = ugeth->p_tx_bd_ring[j]; in ucc_geth_alloc_tx()
2275 static int ucc_geth_alloc_rx(struct ucc_geth_private *ugeth) in ucc_geth_alloc_rx() argument
2283 ug_info = ugeth->ug_info; in ucc_geth_alloc_rx()
2293 ugeth->rx_bd_ring_offset[j] = in ucc_geth_alloc_rx()
2295 if (ugeth->rx_bd_ring_offset[j] != 0) in ucc_geth_alloc_rx()
2296 ugeth->p_rx_bd_ring[j] = in ucc_geth_alloc_rx()
2297 (u8 __iomem *)((ugeth->rx_bd_ring_offset[j] + in ucc_geth_alloc_rx()
2300 ugeth->rx_bd_ring_offset[j] = in ucc_geth_alloc_rx()
2303 if (!IS_ERR_VALUE(ugeth->rx_bd_ring_offset[j])) in ucc_geth_alloc_rx()
2304 ugeth->p_rx_bd_ring[j] = in ucc_geth_alloc_rx()
2305 (u8 __iomem *) qe_muram_addr(ugeth-> in ucc_geth_alloc_rx()
2308 if (!ugeth->p_rx_bd_ring[j]) { in ucc_geth_alloc_rx()
2309 if (netif_msg_ifup(ugeth)) in ucc_geth_alloc_rx()
2318 ugeth->rx_skbuff[j] = in ucc_geth_alloc_rx()
2319 kmalloc_array(ugeth->ug_info->bdRingLenRx[j], in ucc_geth_alloc_rx()
2322 if (ugeth->rx_skbuff[j] == NULL) { in ucc_geth_alloc_rx()
2323 if (netif_msg_ifup(ugeth)) in ucc_geth_alloc_rx()
2328 for (i = 0; i < ugeth->ug_info->bdRingLenRx[j]; i++) in ucc_geth_alloc_rx()
2329 ugeth->rx_skbuff[j][i] = NULL; in ucc_geth_alloc_rx()
2331 ugeth->skb_currx[j] = 0; in ucc_geth_alloc_rx()
2332 bd = ugeth->rxBd[j] = ugeth->p_rx_bd_ring[j]; in ucc_geth_alloc_rx()
2348 static int ucc_geth_startup(struct ucc_geth_private *ugeth) in ucc_geth_startup() argument
2368 uccf = ugeth->uccf; in ucc_geth_startup()
2369 ug_info = ugeth->ug_info; in ucc_geth_startup()
2372 ug_regs = ugeth->ug_regs; in ucc_geth_startup()
2391 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2413 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2419 ugeth->rx_non_dynamic_extended_features = ug_info->ipCheckSumCheck || in ucc_geth_startup()
2424 ugeth->rx_extended_features = ugeth->rx_non_dynamic_extended_features || in ucc_geth_startup()
2461 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2477 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2497 ret_val = ucc_geth_alloc_tx(ugeth); in ucc_geth_startup()
2501 ret_val = ucc_geth_alloc_rx(ugeth); in ucc_geth_startup()
2510 ugeth->tx_glbl_pram_offset = in ucc_geth_startup()
2513 if (IS_ERR_VALUE(ugeth->tx_glbl_pram_offset)) { in ucc_geth_startup()
2514 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2518 ugeth->p_tx_glbl_pram = in ucc_geth_startup()
2519 (struct ucc_geth_tx_global_pram __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2522 memset_io((void __iomem *)ugeth->p_tx_glbl_pram, 0, sizeof(struct ucc_geth_tx_global_pram)); in ucc_geth_startup()
2528 ugeth->thread_dat_tx_offset = in ucc_geth_startup()
2533 if (IS_ERR_VALUE(ugeth->thread_dat_tx_offset)) { in ucc_geth_startup()
2534 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2539 ugeth->p_thread_data_tx = in ucc_geth_startup()
2540 (struct ucc_geth_thread_data_tx __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2542 out_be32(&ugeth->p_tx_glbl_pram->tqptr, ugeth->thread_dat_tx_offset); in ucc_geth_startup()
2546 out_be32(&ugeth->p_tx_glbl_pram->vtagtable[i], in ucc_geth_startup()
2551 out_8(&ugeth->p_tx_glbl_pram->iphoffset[i], in ucc_geth_startup()
2556 ugeth->send_q_mem_reg_offset = in ucc_geth_startup()
2560 if (IS_ERR_VALUE(ugeth->send_q_mem_reg_offset)) { in ucc_geth_startup()
2561 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2566 ugeth->p_send_q_mem_reg = in ucc_geth_startup()
2567 (struct ucc_geth_send_queue_mem_region __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2569 out_be32(&ugeth->p_tx_glbl_pram->sqptr, ugeth->send_q_mem_reg_offset); in ucc_geth_startup()
2575 ugeth->p_tx_bd_ring[i] + (ug_info->bdRingLenTx[i] - in ucc_geth_startup()
2577 if (ugeth->ug_info->uf_info.bd_mem_part == MEM_PART_SYSTEM) { in ucc_geth_startup()
2578 out_be32(&ugeth->p_send_q_mem_reg->sqqd[i].bd_ring_base, in ucc_geth_startup()
2579 (u32) virt_to_phys(ugeth->p_tx_bd_ring[i])); in ucc_geth_startup()
2580 out_be32(&ugeth->p_send_q_mem_reg->sqqd[i]. in ucc_geth_startup()
2583 } else if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_startup()
2585 out_be32(&ugeth->p_send_q_mem_reg->sqqd[i].bd_ring_base, in ucc_geth_startup()
2586 (u32)qe_muram_dma(ugeth->p_tx_bd_ring[i])); in ucc_geth_startup()
2587 out_be32(&ugeth->p_send_q_mem_reg->sqqd[i]. in ucc_geth_startup()
2597 ugeth->scheduler_offset = in ucc_geth_startup()
2600 if (IS_ERR_VALUE(ugeth->scheduler_offset)) { in ucc_geth_startup()
2601 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2606 ugeth->p_scheduler = in ucc_geth_startup()
2607 (struct ucc_geth_scheduler __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2609 out_be32(&ugeth->p_tx_glbl_pram->schedulerbasepointer, in ucc_geth_startup()
2610 ugeth->scheduler_offset); in ucc_geth_startup()
2612 memset_io((void __iomem *)ugeth->p_scheduler, 0, sizeof(struct ucc_geth_scheduler)); in ucc_geth_startup()
2615 out_be32(&ugeth->p_scheduler->mblinterval, in ucc_geth_startup()
2617 out_be16(&ugeth->p_scheduler->nortsrbytetime, in ucc_geth_startup()
2619 out_8(&ugeth->p_scheduler->fracsiz, ug_info->fracsiz); in ucc_geth_startup()
2620 out_8(&ugeth->p_scheduler->strictpriorityq, in ucc_geth_startup()
2622 out_8(&ugeth->p_scheduler->txasap, ug_info->txasap); in ucc_geth_startup()
2623 out_8(&ugeth->p_scheduler->extrabw, ug_info->extrabw); in ucc_geth_startup()
2625 out_8(&ugeth->p_scheduler->weightfactor[i], in ucc_geth_startup()
2629 ugeth->p_cpucount[0] = &(ugeth->p_scheduler->cpucount0); in ucc_geth_startup()
2630 ugeth->p_cpucount[1] = &(ugeth->p_scheduler->cpucount1); in ucc_geth_startup()
2631 ugeth->p_cpucount[2] = &(ugeth->p_scheduler->cpucount2); in ucc_geth_startup()
2632 ugeth->p_cpucount[3] = &(ugeth->p_scheduler->cpucount3); in ucc_geth_startup()
2633 ugeth->p_cpucount[4] = &(ugeth->p_scheduler->cpucount4); in ucc_geth_startup()
2634 ugeth->p_cpucount[5] = &(ugeth->p_scheduler->cpucount5); in ucc_geth_startup()
2635 ugeth->p_cpucount[6] = &(ugeth->p_scheduler->cpucount6); in ucc_geth_startup()
2636 ugeth->p_cpucount[7] = &(ugeth->p_scheduler->cpucount7); in ucc_geth_startup()
2643 ugeth->tx_fw_statistics_pram_offset = in ucc_geth_startup()
2647 if (IS_ERR_VALUE(ugeth->tx_fw_statistics_pram_offset)) { in ucc_geth_startup()
2648 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2652 ugeth->p_tx_fw_statistics_pram = in ucc_geth_startup()
2654 qe_muram_addr(ugeth->tx_fw_statistics_pram_offset); in ucc_geth_startup()
2656 memset_io((void __iomem *)ugeth->p_tx_fw_statistics_pram, in ucc_geth_startup()
2668 out_be16(&ugeth->p_tx_glbl_pram->temoder, temoder); in ucc_geth_startup()
2670 test = in_be16(&ugeth->p_tx_glbl_pram->temoder); in ucc_geth_startup()
2677 out_be32(&ugeth->p_tx_glbl_pram->tstate, ((u32) function_code) << 24); in ucc_geth_startup()
2681 ugeth->rx_glbl_pram_offset = in ucc_geth_startup()
2684 if (IS_ERR_VALUE(ugeth->rx_glbl_pram_offset)) { in ucc_geth_startup()
2685 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2689 ugeth->p_rx_glbl_pram = in ucc_geth_startup()
2690 (struct ucc_geth_rx_global_pram __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2693 memset_io((void __iomem *)ugeth->p_rx_glbl_pram, 0, sizeof(struct ucc_geth_rx_global_pram)); in ucc_geth_startup()
2699 ugeth->thread_dat_rx_offset = in ucc_geth_startup()
2703 if (IS_ERR_VALUE(ugeth->thread_dat_rx_offset)) { in ucc_geth_startup()
2704 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2709 ugeth->p_thread_data_rx = in ucc_geth_startup()
2710 (struct ucc_geth_thread_data_rx __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2712 out_be32(&ugeth->p_rx_glbl_pram->rqptr, ugeth->thread_dat_rx_offset); in ucc_geth_startup()
2715 out_be16(&ugeth->p_rx_glbl_pram->typeorlen, ug_info->typeorlen); in ucc_geth_startup()
2720 ugeth->rx_fw_statistics_pram_offset = in ucc_geth_startup()
2724 if (IS_ERR_VALUE(ugeth->rx_fw_statistics_pram_offset)) { in ucc_geth_startup()
2725 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2729 ugeth->p_rx_fw_statistics_pram = in ucc_geth_startup()
2731 qe_muram_addr(ugeth->rx_fw_statistics_pram_offset); in ucc_geth_startup()
2733 memset_io((void __iomem *)ugeth->p_rx_fw_statistics_pram, 0, in ucc_geth_startup()
2740 ugeth->rx_irq_coalescing_tbl_offset = in ucc_geth_startup()
2744 if (IS_ERR_VALUE(ugeth->rx_irq_coalescing_tbl_offset)) { in ucc_geth_startup()
2745 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2750 ugeth->p_rx_irq_coalescing_tbl = in ucc_geth_startup()
2752 qe_muram_addr(ugeth->rx_irq_coalescing_tbl_offset); in ucc_geth_startup()
2753 out_be32(&ugeth->p_rx_glbl_pram->intcoalescingptr, in ucc_geth_startup()
2754 ugeth->rx_irq_coalescing_tbl_offset); in ucc_geth_startup()
2758 out_be32(&ugeth->p_rx_irq_coalescing_tbl->coalescingentry[i]. in ucc_geth_startup()
2761 out_be32(&ugeth->p_rx_irq_coalescing_tbl->coalescingentry[i]. in ucc_geth_startup()
2768 &ugeth->p_rx_glbl_pram->mrblr); in ucc_geth_startup()
2770 out_be16(&ugeth->p_rx_glbl_pram->mflr, ug_info->maxFrameLength); in ucc_geth_startup()
2773 &ugeth->p_rx_glbl_pram->minflr, in ucc_geth_startup()
2774 &ugeth->p_rx_glbl_pram->mrblr); in ucc_geth_startup()
2776 out_be16(&ugeth->p_rx_glbl_pram->maxd1, ug_info->maxD1Length); in ucc_geth_startup()
2778 out_be16(&ugeth->p_rx_glbl_pram->maxd2, ug_info->maxD2Length); in ucc_geth_startup()
2784 out_be32(&ugeth->p_rx_glbl_pram->l2qt, l2qt); in ucc_geth_startup()
2791 out_be32(&ugeth->p_rx_glbl_pram->l3qt[j/8], l3qt); in ucc_geth_startup()
2795 out_be16(&ugeth->p_rx_glbl_pram->vlantype, ug_info->vlantype); in ucc_geth_startup()
2798 out_be16(&ugeth->p_rx_glbl_pram->vlantci, ug_info->vlantci); in ucc_geth_startup()
2801 out_be32(&ugeth->p_rx_glbl_pram->ecamptr, ug_info->ecamptr); in ucc_geth_startup()
2805 ugeth->rx_bd_qs_tbl_offset = in ucc_geth_startup()
2810 if (IS_ERR_VALUE(ugeth->rx_bd_qs_tbl_offset)) { in ucc_geth_startup()
2811 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2816 ugeth->p_rx_bd_qs_tbl = in ucc_geth_startup()
2817 (struct ucc_geth_rx_bd_queues_entry __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2819 out_be32(&ugeth->p_rx_glbl_pram->rbdqptr, ugeth->rx_bd_qs_tbl_offset); in ucc_geth_startup()
2821 memset_io((void __iomem *)ugeth->p_rx_bd_qs_tbl, in ucc_geth_startup()
2829 if (ugeth->ug_info->uf_info.bd_mem_part == MEM_PART_SYSTEM) { in ucc_geth_startup()
2830 out_be32(&ugeth->p_rx_bd_qs_tbl[i].externalbdbaseptr, in ucc_geth_startup()
2831 (u32) virt_to_phys(ugeth->p_rx_bd_ring[i])); in ucc_geth_startup()
2832 } else if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_startup()
2834 out_be32(&ugeth->p_rx_bd_qs_tbl[i].externalbdbaseptr, in ucc_geth_startup()
2835 (u32)qe_muram_dma(ugeth->p_rx_bd_ring[i])); in ucc_geth_startup()
2843 if (ugeth->rx_extended_features) in ucc_geth_startup()
2862 out_be32(&ugeth->p_rx_glbl_pram->remoder, remoder); in ucc_geth_startup()
2872 &ugeth->p_tx_glbl_pram->txrmonbaseptr, in ucc_geth_startup()
2873 ugeth->tx_fw_statistics_pram_offset, in ucc_geth_startup()
2874 &ugeth->p_rx_glbl_pram->rxrmonbaseptr, in ucc_geth_startup()
2875 ugeth->rx_fw_statistics_pram_offset, in ucc_geth_startup()
2876 &ugeth->p_tx_glbl_pram->temoder, in ucc_geth_startup()
2877 &ugeth->p_rx_glbl_pram->remoder); in ucc_geth_startup()
2880 out_8(&ugeth->p_rx_glbl_pram->rstate, function_code); in ucc_geth_startup()
2885 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2892 ugeth->exf_glbl_param_offset = in ucc_geth_startup()
2895 if (IS_ERR_VALUE(ugeth->exf_glbl_param_offset)) { in ucc_geth_startup()
2896 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2901 ugeth->p_exf_glbl_param = in ucc_geth_startup()
2902 (struct ucc_geth_exf_global_pram __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2904 out_be32(&ugeth->p_rx_glbl_pram->exfGlobalParam, in ucc_geth_startup()
2905 ugeth->exf_glbl_param_offset); in ucc_geth_startup()
2906 out_be32(&ugeth->p_exf_glbl_param->l2pcdptr, in ucc_geth_startup()
2914 ugeth_82xx_filtering_clear_addr_in_paddr(ugeth, (u8) j); in ucc_geth_startup()
2917 (struct ucc_geth_82xx_address_filtering_pram __iomem *) ugeth-> in ucc_geth_startup()
2920 ugeth_82xx_filtering_clear_all_addr_in_hash(ugeth, in ucc_geth_startup()
2922 ugeth_82xx_filtering_clear_all_addr_in_hash(ugeth, in ucc_geth_startup()
2939 if (!(ugeth->p_init_enet_param_shadow = in ucc_geth_startup()
2941 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2946 memset((char *)ugeth->p_init_enet_param_shadow, in ucc_geth_startup()
2951 ugeth->p_init_enet_param_shadow->resinit1 = in ucc_geth_startup()
2953 ugeth->p_init_enet_param_shadow->resinit2 = in ucc_geth_startup()
2955 ugeth->p_init_enet_param_shadow->resinit3 = in ucc_geth_startup()
2957 ugeth->p_init_enet_param_shadow->resinit4 = in ucc_geth_startup()
2959 ugeth->p_init_enet_param_shadow->resinit5 = in ucc_geth_startup()
2961 ugeth->p_init_enet_param_shadow->rgftgfrxglobal |= in ucc_geth_startup()
2963 ugeth->p_init_enet_param_shadow->rgftgfrxglobal |= in ucc_geth_startup()
2966 ugeth->p_init_enet_param_shadow->rgftgfrxglobal |= in ucc_geth_startup()
2967 ugeth->rx_glbl_pram_offset | ug_info->riscRx; in ucc_geth_startup()
2974 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2978 ugeth->p_init_enet_param_shadow->largestexternallookupkeysize = in ucc_geth_startup()
2993 if ((ret_val = fill_init_enet_entries(ugeth, &(ugeth-> in ucc_geth_startup()
2999 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
3004 ugeth->p_init_enet_param_shadow->txglobal = in ucc_geth_startup()
3005 ugeth->tx_glbl_pram_offset | ug_info->riscTx; in ucc_geth_startup()
3007 fill_init_enet_entries(ugeth, in ucc_geth_startup()
3008 &(ugeth->p_init_enet_param_shadow-> in ucc_geth_startup()
3013 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
3020 if ((ret_val = rx_bd_buffer_set(ugeth, (u8) i)) != 0) { in ucc_geth_startup()
3021 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
3030 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
3039 ugeth->p_init_enet_param_shadow->resinit1); in ucc_geth_startup()
3041 ugeth->p_init_enet_param_shadow->resinit2); in ucc_geth_startup()
3043 ugeth->p_init_enet_param_shadow->resinit3); in ucc_geth_startup()
3045 ugeth->p_init_enet_param_shadow->resinit4); in ucc_geth_startup()
3047 ugeth->p_init_enet_param_shadow->resinit5); in ucc_geth_startup()
3049 ugeth->p_init_enet_param_shadow->largestexternallookupkeysize); in ucc_geth_startup()
3051 ugeth->p_init_enet_param_shadow->rgftgfrxglobal); in ucc_geth_startup()
3054 ugeth->p_init_enet_param_shadow->rxthread[i]); in ucc_geth_startup()
3056 ugeth->p_init_enet_param_shadow->txglobal); in ucc_geth_startup()
3059 ugeth->p_init_enet_param_shadow->txthread[i]); in ucc_geth_startup()
3063 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info.ucc_num); in ucc_geth_startup()
3078 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_start_xmit() local
3090 spin_lock_irqsave(&ugeth->lock, flags); in ucc_geth_start_xmit()
3095 bd = ugeth->txBd[txQ]; in ucc_geth_start_xmit()
3098 ugeth->tx_skbuff[txQ][ugeth->skb_curtx[txQ]] = skb; in ucc_geth_start_xmit()
3101 ugeth->skb_curtx[txQ] = in ucc_geth_start_xmit()
3102 (ugeth->skb_curtx[txQ] + in ucc_geth_start_xmit()
3103 1) & TX_RING_MOD_MASK(ugeth->ug_info->bdRingLenTx[txQ]); in ucc_geth_start_xmit()
3107 dma_map_single(ugeth->dev, skb->data, in ucc_geth_start_xmit()
3121 bd = ugeth->p_tx_bd_ring[txQ]; in ucc_geth_start_xmit()
3125 if (bd == ugeth->confBd[txQ]) { in ucc_geth_start_xmit()
3130 ugeth->txBd[txQ] = bd; in ucc_geth_start_xmit()
3134 if (ugeth->p_scheduler) { in ucc_geth_start_xmit()
3135 ugeth->cpucount[txQ]++; in ucc_geth_start_xmit()
3140 out_be16(ugeth->p_cpucount[txQ], ugeth->cpucount[txQ]); in ucc_geth_start_xmit()
3144 uccf = ugeth->uccf; in ucc_geth_start_xmit()
3147 spin_unlock_irqrestore(&ugeth->lock, flags); in ucc_geth_start_xmit()
3152 static int ucc_geth_rx(struct ucc_geth_private *ugeth, u8 rxQ, int rx_work_limit) in ucc_geth_rx() argument
3163 dev = ugeth->ndev; in ucc_geth_rx()
3166 bd = ugeth->rxBd[rxQ]; in ucc_geth_rx()
3174 skb = ugeth->rx_skbuff[rxQ][ugeth->skb_currx[rxQ]]; in ucc_geth_rx()
3181 if (netif_msg_rx_err(ugeth)) in ucc_geth_rx()
3186 ugeth->rx_skbuff[rxQ][ugeth->skb_currx[rxQ]] = NULL; in ucc_geth_rx()
3196 skb->protocol = eth_type_trans(skb, ugeth->ndev); in ucc_geth_rx()
3203 skb = get_new_skb(ugeth, bd); in ucc_geth_rx()
3205 if (netif_msg_rx_err(ugeth)) in ucc_geth_rx()
3211 ugeth->rx_skbuff[rxQ][ugeth->skb_currx[rxQ]] = skb; in ucc_geth_rx()
3214 ugeth->skb_currx[rxQ] = in ucc_geth_rx()
3215 (ugeth->skb_currx[rxQ] + in ucc_geth_rx()
3216 1) & RX_RING_MOD_MASK(ugeth->ug_info->bdRingLenRx[rxQ]); in ucc_geth_rx()
3219 bd = ugeth->p_rx_bd_ring[rxQ]; in ucc_geth_rx()
3226 ugeth->rxBd[rxQ] = bd; in ucc_geth_rx()
3233 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_tx() local
3239 bd = ugeth->confBd[txQ]; in ucc_geth_tx()
3250 skb = ugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]]; in ucc_geth_tx()
3259 ugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]] = NULL; in ucc_geth_tx()
3260 ugeth->skb_dirtytx[txQ] = in ucc_geth_tx()
3261 (ugeth->skb_dirtytx[txQ] + in ucc_geth_tx()
3262 1) & TX_RING_MOD_MASK(ugeth->ug_info->bdRingLenTx[txQ]); in ucc_geth_tx()
3272 bd = ugeth->p_tx_bd_ring[txQ]; in ucc_geth_tx()
3275 ugeth->confBd[txQ] = bd; in ucc_geth_tx()
3282 struct ucc_geth_private *ugeth = container_of(napi, struct ucc_geth_private, napi); in ucc_geth_poll() local
3286 ug_info = ugeth->ug_info; in ucc_geth_poll()
3289 spin_lock(&ugeth->lock); in ucc_geth_poll()
3291 ucc_geth_tx(ugeth->ndev, i); in ucc_geth_poll()
3292 spin_unlock(&ugeth->lock); in ucc_geth_poll()
3296 howmany += ucc_geth_rx(ugeth, i, budget - howmany); in ucc_geth_poll()
3300 setbits32(ugeth->uccf->p_uccm, UCCE_RX_EVENTS | UCCE_TX_EVENTS); in ucc_geth_poll()
3309 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_irq_handler() local
3317 uccf = ugeth->uccf; in ucc_geth_irq_handler()
3318 ug_info = ugeth->ug_info; in ucc_geth_irq_handler()
3328 if (napi_schedule_prep(&ugeth->napi)) { in ucc_geth_irq_handler()
3331 __napi_schedule(&ugeth->napi); in ucc_geth_irq_handler()
3354 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_netpoll() local
3355 int irq = ugeth->ug_info->uf_info.irq; in ucc_netpoll()
3365 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_set_mac_addr() local
3380 spin_lock_irq(&ugeth->lock); in ucc_geth_set_mac_addr()
3387 &ugeth->ug_regs->macstnaddr1, in ucc_geth_set_mac_addr()
3388 &ugeth->ug_regs->macstnaddr2); in ucc_geth_set_mac_addr()
3389 spin_unlock_irq(&ugeth->lock); in ucc_geth_set_mac_addr()
3394 static int ucc_geth_init_mac(struct ucc_geth_private *ugeth) in ucc_geth_init_mac() argument
3396 struct net_device *dev = ugeth->ndev; in ucc_geth_init_mac()
3399 err = ucc_struct_init(ugeth); in ucc_geth_init_mac()
3401 netif_err(ugeth, ifup, dev, "Cannot configure internal struct, aborting\n"); in ucc_geth_init_mac()
3405 err = ucc_geth_startup(ugeth); in ucc_geth_init_mac()
3407 netif_err(ugeth, ifup, dev, "Cannot configure net device, aborting\n"); in ucc_geth_init_mac()
3411 err = adjust_enet_interface(ugeth); in ucc_geth_init_mac()
3413 netif_err(ugeth, ifup, dev, "Cannot configure net device, aborting\n"); in ucc_geth_init_mac()
3425 &ugeth->ug_regs->macstnaddr1, in ucc_geth_init_mac()
3426 &ugeth->ug_regs->macstnaddr2); in ucc_geth_init_mac()
3428 err = ugeth_enable(ugeth, COMM_DIR_RX_AND_TX); in ucc_geth_init_mac()
3430 netif_err(ugeth, ifup, dev, "Cannot enable net device, aborting\n"); in ucc_geth_init_mac()
3436 ucc_geth_stop(ugeth); in ucc_geth_init_mac()
3444 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_open() local
3451 netif_err(ugeth, ifup, dev, in ucc_geth_open()
3458 netif_err(ugeth, ifup, dev, "Cannot initialize PHY, aborting\n"); in ucc_geth_open()
3462 err = ucc_geth_init_mac(ugeth); in ucc_geth_open()
3464 netif_err(ugeth, ifup, dev, "Cannot initialize MAC, aborting\n"); in ucc_geth_open()
3468 err = request_irq(ugeth->ug_info->uf_info.irq, ucc_geth_irq_handler, in ucc_geth_open()
3471 netif_err(ugeth, ifup, dev, "Cannot get IRQ for net device, aborting\n"); in ucc_geth_open()
3475 phy_start(ugeth->phydev); in ucc_geth_open()
3476 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()
3516 struct ucc_geth_private *ugeth; in ucc_geth_timeout_work() local
3519 ugeth = container_of(work, struct ucc_geth_private, timeout_work); in ucc_geth_timeout_work()
3520 dev = ugeth->ndev; in ucc_geth_timeout_work()
3526 ugeth_dump_regs(ugeth); in ucc_geth_timeout_work()
3534 ucc_geth_stop(ugeth); in ucc_geth_timeout_work()
3535 ucc_geth_init_mac(ugeth); in ucc_geth_timeout_work()
3537 phy_start(ugeth->phydev); in ucc_geth_timeout_work()
3550 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_timeout() local
3552 schedule_work(&ugeth->timeout_work); in ucc_geth_timeout()
3561 struct ucc_geth_private *ugeth = netdev_priv(ndev); in ucc_geth_suspend() local
3567 napi_disable(&ugeth->napi); in ucc_geth_suspend()
3573 ugeth_disable(ugeth, COMM_DIR_RX_AND_TX); in ucc_geth_suspend()
3575 if (ugeth->wol_en & WAKE_MAGIC) { in ucc_geth_suspend()
3576 setbits32(ugeth->uccf->p_uccm, UCC_GETH_UCCE_MPD); in ucc_geth_suspend()
3577 setbits32(&ugeth->ug_regs->maccfg2, MACCFG2_MPE); in ucc_geth_suspend()
3578 ucc_fast_enable(ugeth->uccf, COMM_DIR_RX_AND_TX); in ucc_geth_suspend()
3579 } else if (!(ugeth->wol_en & WAKE_PHY)) { in ucc_geth_suspend()
3580 phy_stop(ugeth->phydev); in ucc_geth_suspend()
3589 struct ucc_geth_private *ugeth = netdev_priv(ndev); in ucc_geth_resume() local
3596 if (ugeth->wol_en & WAKE_MAGIC) { in ucc_geth_resume()
3597 ucc_fast_disable(ugeth->uccf, COMM_DIR_RX_AND_TX); in ucc_geth_resume()
3598 clrbits32(&ugeth->ug_regs->maccfg2, MACCFG2_MPE); in ucc_geth_resume()
3599 clrbits32(ugeth->uccf->p_uccm, UCC_GETH_UCCE_MPD); in ucc_geth_resume()
3601 ugeth_enable(ugeth, COMM_DIR_RX_AND_TX); in ucc_geth_resume()
3607 ucc_geth_memclean(ugeth); in ucc_geth_resume()
3609 err = ucc_geth_init_mac(ugeth); in ucc_geth_resume()
3616 ugeth->oldlink = 0; in ucc_geth_resume()
3617 ugeth->oldspeed = 0; in ucc_geth_resume()
3618 ugeth->oldduplex = -1; in ucc_geth_resume()
3620 phy_stop(ugeth->phydev); in ucc_geth_resume()
3621 phy_start(ugeth->phydev); in ucc_geth_resume()
3623 napi_enable(&ugeth->napi); in ucc_geth_resume()
3662 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_ioctl() local
3667 if (!ugeth->phydev) in ucc_geth_ioctl()
3670 return phy_mii_ioctl(ugeth->phydev, rq, cmd); in ucc_geth_ioctl()
3693 struct ucc_geth_private *ugeth = NULL; in ucc_geth_probe() local
3864 dev = alloc_etherdev(sizeof(*ugeth)); in ucc_geth_probe()
3871 ugeth = netdev_priv(dev); in ucc_geth_probe()
3872 spin_lock_init(&ugeth->lock); in ucc_geth_probe()
3875 INIT_LIST_HEAD(&ugeth->group_hash_q); in ucc_geth_probe()
3876 INIT_LIST_HEAD(&ugeth->ind_hash_q); in ucc_geth_probe()
3889 INIT_WORK(&ugeth->timeout_work, ucc_geth_timeout_work); in ucc_geth_probe()
3890 netif_napi_add(dev, &ugeth->napi, ucc_geth_poll, 64); in ucc_geth_probe()
3894 ugeth->msg_enable = netif_msg_init(debug.msg_enable, UGETH_MSG_DEFAULT); in ucc_geth_probe()
3895 ugeth->phy_interface = phy_interface; in ucc_geth_probe()
3896 ugeth->max_speed = max_speed; in ucc_geth_probe()
3903 if (netif_msg_probe(ugeth)) in ucc_geth_probe()
3913 ugeth->ug_info = ug_info; in ucc_geth_probe()
3914 ugeth->dev = device; in ucc_geth_probe()
3915 ugeth->ndev = dev; in ucc_geth_probe()
3916 ugeth->node = np; in ucc_geth_probe()
3934 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_remove() local
3938 ucc_geth_memclean(ugeth); in ucc_geth_remove()
3941 of_node_put(ugeth->ug_info->tbi_node); in ucc_geth_remove()
3942 of_node_put(ugeth->ug_info->phy_node); in ucc_geth_remove()