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()
1395 if (netif_msg_probe(ugeth)) in adjust_enet_interface()
1403 static int ugeth_graceful_stop_tx(struct ucc_geth_private *ugeth) in ugeth_graceful_stop_tx() argument
1410 uccf = ugeth->uccf; in ugeth_graceful_stop_tx()
1418 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info.ucc_num); in ugeth_graceful_stop_tx()
1433 static int ugeth_graceful_stop_rx(struct ucc_geth_private *ugeth) in ugeth_graceful_stop_rx() argument
1440 uccf = ugeth->uccf; in ugeth_graceful_stop_rx()
1443 temp = in_8(&ugeth->p_rx_glbl_pram->rxgstpack); in ugeth_graceful_stop_rx()
1445 out_8(&ugeth->p_rx_glbl_pram->rxgstpack, temp); in ugeth_graceful_stop_rx()
1452 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info. in ugeth_graceful_stop_rx()
1457 temp = in_8(&ugeth->p_rx_glbl_pram->rxgstpack); in ugeth_graceful_stop_rx()
1465 static int ugeth_restart_tx(struct ucc_geth_private *ugeth) in ugeth_restart_tx() argument
1470 uccf = ugeth->uccf; in ugeth_restart_tx()
1473 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info.ucc_num); in ugeth_restart_tx()
1480 static int ugeth_restart_rx(struct ucc_geth_private *ugeth) in ugeth_restart_rx() argument
1485 uccf = ugeth->uccf; in ugeth_restart_rx()
1488 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info.ucc_num); in ugeth_restart_rx()
1496 static int ugeth_enable(struct ucc_geth_private *ugeth, enum comm_dir mode) in ugeth_enable() argument
1501 uccf = ugeth->uccf; in ugeth_enable()
1504 if (ugeth->ug_info->uf_info.ucc_num >= UCC_MAX_NUM) { in ugeth_enable()
1505 if (netif_msg_probe(ugeth)) in ugeth_enable()
1516 ugeth_restart_tx(ugeth); in ugeth_enable()
1518 ugeth_restart_rx(ugeth); in ugeth_enable()
1526 static int ugeth_disable(struct ucc_geth_private *ugeth, enum comm_dir mode) in ugeth_disable() argument
1530 uccf = ugeth->uccf; in ugeth_disable()
1533 if (ugeth->ug_info->uf_info.ucc_num >= UCC_MAX_NUM) { in ugeth_disable()
1534 if (netif_msg_probe(ugeth)) in ugeth_disable()
1541 ugeth_graceful_stop_tx(ugeth); in ugeth_disable()
1545 ugeth_graceful_stop_rx(ugeth); in ugeth_disable()
1547 ucc_fast_disable(ugeth->uccf, mode); /* OK to do even if not enabled */ in ugeth_disable()
1552 static void ugeth_quiesce(struct ucc_geth_private *ugeth) in ugeth_quiesce() argument
1555 netif_device_detach(ugeth->ndev); in ugeth_quiesce()
1558 netif_tx_disable(ugeth->ndev); in ugeth_quiesce()
1561 disable_irq(ugeth->ug_info->uf_info.irq); in ugeth_quiesce()
1564 napi_disable(&ugeth->napi); in ugeth_quiesce()
1567 static void ugeth_activate(struct ucc_geth_private *ugeth) in ugeth_activate() argument
1569 napi_enable(&ugeth->napi); in ugeth_activate()
1570 enable_irq(ugeth->ug_info->uf_info.irq); in ugeth_activate()
1571 netif_device_attach(ugeth->ndev); in ugeth_activate()
1583 struct ucc_geth_private *ugeth = netdev_priv(dev); in adjust_link() local
1586 struct phy_device *phydev = ugeth->phydev; in adjust_link()
1589 ug_regs = ugeth->ug_regs; in adjust_link()
1590 uf_regs = ugeth->uccf->uf_regs; in adjust_link()
1597 if (phydev->duplex != ugeth->oldduplex) { in adjust_link()
1603 ugeth->oldduplex = phydev->duplex; in adjust_link()
1606 if (phydev->speed != ugeth->oldspeed) { in adjust_link()
1620 if ((ugeth->phy_interface == PHY_INTERFACE_MODE_RMII) || in adjust_link()
1621 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII) || in adjust_link()
1622 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_ID) || in adjust_link()
1623 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_RXID) || in adjust_link()
1624 (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_TXID) || in adjust_link()
1625 (ugeth->phy_interface == PHY_INTERFACE_MODE_RTBI)) { in adjust_link()
1633 if (netif_msg_link(ugeth)) in adjust_link()
1639 ugeth->oldspeed = phydev->speed; in adjust_link()
1642 if (!ugeth->oldlink) { in adjust_link()
1644 ugeth->oldlink = 1; in adjust_link()
1655 ugeth_quiesce(ugeth); in adjust_link()
1656 ugeth_disable(ugeth, COMM_DIR_RX_AND_TX); in adjust_link()
1661 ugeth_enable(ugeth, COMM_DIR_RX_AND_TX); in adjust_link()
1662 ugeth_activate(ugeth); in adjust_link()
1664 } else if (ugeth->oldlink) { in adjust_link()
1666 ugeth->oldlink = 0; in adjust_link()
1667 ugeth->oldspeed = 0; in adjust_link()
1668 ugeth->oldduplex = -1; in adjust_link()
1671 if (new_state && netif_msg_link(ugeth)) in adjust_link()
1685 struct ucc_geth_private *ugeth = netdev_priv(dev); in uec_configure_serdes() local
1686 struct ucc_geth_info *ug_info = ugeth->ug_info; in uec_configure_serdes()
1762 static void ugeth_dump_regs(struct ucc_geth_private *ugeth) in ugeth_dump_regs() argument
1765 ucc_fast_dump_regs(ugeth->uccf); in ugeth_dump_regs()
1766 dump_regs(ugeth); in ugeth_dump_regs()
1767 dump_bds(ugeth); in ugeth_dump_regs()
1772 ugeth, in ugeth_82xx_filtering_clear_all_addr_in_hash()
1785 uccf = ugeth->uccf; in ugeth_82xx_filtering_clear_all_addr_in_hash()
1789 ugeth->p_rx_glbl_pram->addressfiltering; in ugeth_82xx_filtering_clear_all_addr_in_hash()
1794 p_lh = &ugeth->group_hash_q; in ugeth_82xx_filtering_clear_all_addr_in_hash()
1795 p_counter = &(ugeth->numGroupAddrInHash); in ugeth_82xx_filtering_clear_all_addr_in_hash()
1799 p_lh = &ugeth->ind_hash_q; in ugeth_82xx_filtering_clear_all_addr_in_hash()
1800 p_counter = &(ugeth->numIndAddrInHash); in ugeth_82xx_filtering_clear_all_addr_in_hash()
1810 ugeth_disable(ugeth, comm_dir); in ugeth_82xx_filtering_clear_all_addr_in_hash()
1828 ugeth_enable(ugeth, comm_dir); in ugeth_82xx_filtering_clear_all_addr_in_hash()
1833 static int ugeth_82xx_filtering_clear_addr_in_paddr(struct ucc_geth_private *ugeth, in ugeth_82xx_filtering_clear_addr_in_paddr() argument
1836 ugeth->indAddrRegUsed[paddr_num] = 0; /* mark this paddr as not used */ in ugeth_82xx_filtering_clear_addr_in_paddr()
1837 return hw_clear_addr_in_paddr(ugeth, paddr_num);/* clear in hardware */ in ugeth_82xx_filtering_clear_addr_in_paddr()
1840 static void ucc_geth_free_rx(struct ucc_geth_private *ugeth) in ucc_geth_free_rx() argument
1848 ug_info = ugeth->ug_info; in ucc_geth_free_rx()
1851 for (i = 0; i < ugeth->ug_info->numQueuesRx; i++) { in ucc_geth_free_rx()
1852 if (ugeth->p_rx_bd_ring[i]) { in ucc_geth_free_rx()
1854 bd = ugeth->p_rx_bd_ring[i]; in ucc_geth_free_rx()
1855 for (j = 0; j < ugeth->ug_info->bdRingLenRx[i]; j++) { in ucc_geth_free_rx()
1856 if (ugeth->rx_skbuff[i][j]) { in ucc_geth_free_rx()
1857 dma_unmap_single(ugeth->dev, in ucc_geth_free_rx()
1859 ugeth->ug_info-> in ucc_geth_free_rx()
1864 ugeth->rx_skbuff[i][j]); in ucc_geth_free_rx()
1865 ugeth->rx_skbuff[i][j] = NULL; in ucc_geth_free_rx()
1870 kfree(ugeth->rx_skbuff[i]); in ucc_geth_free_rx()
1872 if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_free_rx()
1874 kfree((void *)ugeth->rx_bd_ring_offset[i]); in ucc_geth_free_rx()
1875 else if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_free_rx()
1877 qe_muram_free(ugeth->rx_bd_ring_offset[i]); in ucc_geth_free_rx()
1878 ugeth->p_rx_bd_ring[i] = NULL; in ucc_geth_free_rx()
1884 static void ucc_geth_free_tx(struct ucc_geth_private *ugeth) in ucc_geth_free_tx() argument
1891 ug_info = ugeth->ug_info; in ucc_geth_free_tx()
1894 for (i = 0; i < ugeth->ug_info->numQueuesTx; i++) { in ucc_geth_free_tx()
1895 bd = ugeth->p_tx_bd_ring[i]; in ucc_geth_free_tx()
1898 for (j = 0; j < ugeth->ug_info->bdRingLenTx[i]; j++) { in ucc_geth_free_tx()
1899 if (ugeth->tx_skbuff[i][j]) { in ucc_geth_free_tx()
1900 dma_unmap_single(ugeth->dev, in ucc_geth_free_tx()
1905 dev_kfree_skb_any(ugeth->tx_skbuff[i][j]); in ucc_geth_free_tx()
1906 ugeth->tx_skbuff[i][j] = NULL; in ucc_geth_free_tx()
1910 kfree(ugeth->tx_skbuff[i]); in ucc_geth_free_tx()
1912 if (ugeth->p_tx_bd_ring[i]) { in ucc_geth_free_tx()
1913 if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_free_tx()
1915 kfree((void *)ugeth->tx_bd_ring_offset[i]); in ucc_geth_free_tx()
1916 else if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_free_tx()
1918 qe_muram_free(ugeth->tx_bd_ring_offset[i]); in ucc_geth_free_tx()
1919 ugeth->p_tx_bd_ring[i] = NULL; in ucc_geth_free_tx()
1925 static void ucc_geth_memclean(struct ucc_geth_private *ugeth) in ucc_geth_memclean() argument
1927 if (!ugeth) in ucc_geth_memclean()
1930 if (ugeth->uccf) { in ucc_geth_memclean()
1931 ucc_fast_free(ugeth->uccf); in ucc_geth_memclean()
1932 ugeth->uccf = NULL; in ucc_geth_memclean()
1935 if (ugeth->p_thread_data_tx) { in ucc_geth_memclean()
1936 qe_muram_free(ugeth->thread_dat_tx_offset); in ucc_geth_memclean()
1937 ugeth->p_thread_data_tx = NULL; in ucc_geth_memclean()
1939 if (ugeth->p_thread_data_rx) { in ucc_geth_memclean()
1940 qe_muram_free(ugeth->thread_dat_rx_offset); in ucc_geth_memclean()
1941 ugeth->p_thread_data_rx = NULL; in ucc_geth_memclean()
1943 if (ugeth->p_exf_glbl_param) { in ucc_geth_memclean()
1944 qe_muram_free(ugeth->exf_glbl_param_offset); in ucc_geth_memclean()
1945 ugeth->p_exf_glbl_param = NULL; in ucc_geth_memclean()
1947 if (ugeth->p_rx_glbl_pram) { in ucc_geth_memclean()
1948 qe_muram_free(ugeth->rx_glbl_pram_offset); in ucc_geth_memclean()
1949 ugeth->p_rx_glbl_pram = NULL; in ucc_geth_memclean()
1951 if (ugeth->p_tx_glbl_pram) { in ucc_geth_memclean()
1952 qe_muram_free(ugeth->tx_glbl_pram_offset); in ucc_geth_memclean()
1953 ugeth->p_tx_glbl_pram = NULL; in ucc_geth_memclean()
1955 if (ugeth->p_send_q_mem_reg) { in ucc_geth_memclean()
1956 qe_muram_free(ugeth->send_q_mem_reg_offset); in ucc_geth_memclean()
1957 ugeth->p_send_q_mem_reg = NULL; in ucc_geth_memclean()
1959 if (ugeth->p_scheduler) { in ucc_geth_memclean()
1960 qe_muram_free(ugeth->scheduler_offset); in ucc_geth_memclean()
1961 ugeth->p_scheduler = NULL; in ucc_geth_memclean()
1963 if (ugeth->p_tx_fw_statistics_pram) { in ucc_geth_memclean()
1964 qe_muram_free(ugeth->tx_fw_statistics_pram_offset); in ucc_geth_memclean()
1965 ugeth->p_tx_fw_statistics_pram = NULL; in ucc_geth_memclean()
1967 if (ugeth->p_rx_fw_statistics_pram) { in ucc_geth_memclean()
1968 qe_muram_free(ugeth->rx_fw_statistics_pram_offset); in ucc_geth_memclean()
1969 ugeth->p_rx_fw_statistics_pram = NULL; in ucc_geth_memclean()
1971 if (ugeth->p_rx_irq_coalescing_tbl) { in ucc_geth_memclean()
1972 qe_muram_free(ugeth->rx_irq_coalescing_tbl_offset); in ucc_geth_memclean()
1973 ugeth->p_rx_irq_coalescing_tbl = NULL; in ucc_geth_memclean()
1975 if (ugeth->p_rx_bd_qs_tbl) { in ucc_geth_memclean()
1976 qe_muram_free(ugeth->rx_bd_qs_tbl_offset); in ucc_geth_memclean()
1977 ugeth->p_rx_bd_qs_tbl = NULL; in ucc_geth_memclean()
1979 if (ugeth->p_init_enet_param_shadow) { in ucc_geth_memclean()
1980 return_init_enet_entries(ugeth, in ucc_geth_memclean()
1981 &(ugeth->p_init_enet_param_shadow-> in ucc_geth_memclean()
1984 ugeth->ug_info->riscRx, 1); in ucc_geth_memclean()
1985 return_init_enet_entries(ugeth, in ucc_geth_memclean()
1986 &(ugeth->p_init_enet_param_shadow-> in ucc_geth_memclean()
1989 ugeth->ug_info->riscTx, 0); in ucc_geth_memclean()
1990 kfree(ugeth->p_init_enet_param_shadow); in ucc_geth_memclean()
1991 ugeth->p_init_enet_param_shadow = NULL; in ucc_geth_memclean()
1993 ucc_geth_free_tx(ugeth); in ucc_geth_memclean()
1994 ucc_geth_free_rx(ugeth); in ucc_geth_memclean()
1995 while (!list_empty(&ugeth->group_hash_q)) in ucc_geth_memclean()
1997 (dequeue(&ugeth->group_hash_q))); in ucc_geth_memclean()
1998 while (!list_empty(&ugeth->ind_hash_q)) in ucc_geth_memclean()
2000 (dequeue(&ugeth->ind_hash_q))); in ucc_geth_memclean()
2001 if (ugeth->ug_regs) { in ucc_geth_memclean()
2002 iounmap(ugeth->ug_regs); in ucc_geth_memclean()
2003 ugeth->ug_regs = NULL; in ucc_geth_memclean()
2009 struct ucc_geth_private *ugeth; in ucc_geth_set_multi() local
2014 ugeth = netdev_priv(dev); in ucc_geth_set_multi()
2016 uf_regs = ugeth->uccf->uf_regs; in ucc_geth_set_multi()
2024 (struct ucc_geth_82xx_address_filtering_pram __iomem *) ugeth-> in ucc_geth_set_multi()
2043 hw_add_addr_in_hash(ugeth, ha->addr); in ucc_geth_set_multi()
2049 static void ucc_geth_stop(struct ucc_geth_private *ugeth) in ucc_geth_stop() argument
2051 struct ucc_geth __iomem *ug_regs = ugeth->ug_regs; in ucc_geth_stop()
2052 struct phy_device *phydev = ugeth->phydev; in ucc_geth_stop()
2064 ugeth_disable(ugeth, COMM_DIR_RX_AND_TX); in ucc_geth_stop()
2067 out_be32(ugeth->uccf->p_uccm, 0x00000000); in ucc_geth_stop()
2070 out_be32(ugeth->uccf->p_ucce, 0xffffffff); in ucc_geth_stop()
2075 ucc_geth_memclean(ugeth); in ucc_geth_stop()
2078 static int ucc_struct_init(struct ucc_geth_private *ugeth) in ucc_struct_init() argument
2084 ug_info = ugeth->ug_info; in ucc_struct_init()
2089 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2099 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2108 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2117 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2124 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2131 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2139 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2148 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2155 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2163 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2176 if (ucc_fast_init(uf_info, &ugeth->uccf)) { in ucc_struct_init()
2177 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2190 ugeth->ug_regs = ioremap(uf_info->regs, sizeof(*ugeth->ug_regs)); in ucc_struct_init()
2191 if (!ugeth->ug_regs) { in ucc_struct_init()
2192 if (netif_msg_probe(ugeth)) in ucc_struct_init()
2200 static int ucc_geth_alloc_tx(struct ucc_geth_private *ugeth) in ucc_geth_alloc_tx() argument
2208 ug_info = ugeth->ug_info; in ucc_geth_alloc_tx()
2226 ugeth->tx_bd_ring_offset[j] = in ucc_geth_alloc_tx()
2229 if (ugeth->tx_bd_ring_offset[j] != 0) in ucc_geth_alloc_tx()
2230 ugeth->p_tx_bd_ring[j] = in ucc_geth_alloc_tx()
2231 (u8 __iomem *)((ugeth->tx_bd_ring_offset[j] + in ucc_geth_alloc_tx()
2234 ugeth->tx_bd_ring_offset[j] = in ucc_geth_alloc_tx()
2237 if (!IS_ERR_VALUE(ugeth->tx_bd_ring_offset[j])) in ucc_geth_alloc_tx()
2238 ugeth->p_tx_bd_ring[j] = in ucc_geth_alloc_tx()
2239 (u8 __iomem *) qe_muram_addr(ugeth-> in ucc_geth_alloc_tx()
2242 if (!ugeth->p_tx_bd_ring[j]) { in ucc_geth_alloc_tx()
2243 if (netif_msg_ifup(ugeth)) in ucc_geth_alloc_tx()
2248 memset_io((void __iomem *)(ugeth->p_tx_bd_ring[j] + in ucc_geth_alloc_tx()
2256 ugeth->tx_skbuff[j] = kmalloc(sizeof(struct sk_buff *) * in ucc_geth_alloc_tx()
2257 ugeth->ug_info->bdRingLenTx[j], in ucc_geth_alloc_tx()
2260 if (ugeth->tx_skbuff[j] == NULL) { in ucc_geth_alloc_tx()
2261 if (netif_msg_ifup(ugeth)) in ucc_geth_alloc_tx()
2266 for (i = 0; i < ugeth->ug_info->bdRingLenTx[j]; i++) in ucc_geth_alloc_tx()
2267 ugeth->tx_skbuff[j][i] = NULL; in ucc_geth_alloc_tx()
2269 ugeth->skb_curtx[j] = ugeth->skb_dirtytx[j] = 0; in ucc_geth_alloc_tx()
2270 bd = ugeth->confBd[j] = ugeth->txBd[j] = ugeth->p_tx_bd_ring[j]; in ucc_geth_alloc_tx()
2286 static int ucc_geth_alloc_rx(struct ucc_geth_private *ugeth) in ucc_geth_alloc_rx() argument
2294 ug_info = ugeth->ug_info; in ucc_geth_alloc_rx()
2304 ugeth->rx_bd_ring_offset[j] = in ucc_geth_alloc_rx()
2306 if (ugeth->rx_bd_ring_offset[j] != 0) in ucc_geth_alloc_rx()
2307 ugeth->p_rx_bd_ring[j] = in ucc_geth_alloc_rx()
2308 (u8 __iomem *)((ugeth->rx_bd_ring_offset[j] + in ucc_geth_alloc_rx()
2311 ugeth->rx_bd_ring_offset[j] = in ucc_geth_alloc_rx()
2314 if (!IS_ERR_VALUE(ugeth->rx_bd_ring_offset[j])) in ucc_geth_alloc_rx()
2315 ugeth->p_rx_bd_ring[j] = in ucc_geth_alloc_rx()
2316 (u8 __iomem *) qe_muram_addr(ugeth-> in ucc_geth_alloc_rx()
2319 if (!ugeth->p_rx_bd_ring[j]) { in ucc_geth_alloc_rx()
2320 if (netif_msg_ifup(ugeth)) in ucc_geth_alloc_rx()
2329 ugeth->rx_skbuff[j] = kmalloc(sizeof(struct sk_buff *) * in ucc_geth_alloc_rx()
2330 ugeth->ug_info->bdRingLenRx[j], in ucc_geth_alloc_rx()
2333 if (ugeth->rx_skbuff[j] == NULL) { in ucc_geth_alloc_rx()
2334 if (netif_msg_ifup(ugeth)) in ucc_geth_alloc_rx()
2339 for (i = 0; i < ugeth->ug_info->bdRingLenRx[j]; i++) in ucc_geth_alloc_rx()
2340 ugeth->rx_skbuff[j][i] = NULL; in ucc_geth_alloc_rx()
2342 ugeth->skb_currx[j] = 0; in ucc_geth_alloc_rx()
2343 bd = ugeth->rxBd[j] = ugeth->p_rx_bd_ring[j]; in ucc_geth_alloc_rx()
2359 static int ucc_geth_startup(struct ucc_geth_private *ugeth) in ucc_geth_startup() argument
2379 uccf = ugeth->uccf; in ucc_geth_startup()
2380 ug_info = ugeth->ug_info; in ucc_geth_startup()
2383 ug_regs = ugeth->ug_regs; in ucc_geth_startup()
2402 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2424 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2430 ugeth->rx_non_dynamic_extended_features = ug_info->ipCheckSumCheck || in ucc_geth_startup()
2435 ugeth->rx_extended_features = ugeth->rx_non_dynamic_extended_features || in ucc_geth_startup()
2472 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2488 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2508 ret_val = ucc_geth_alloc_tx(ugeth); in ucc_geth_startup()
2512 ret_val = ucc_geth_alloc_rx(ugeth); in ucc_geth_startup()
2521 ugeth->tx_glbl_pram_offset = in ucc_geth_startup()
2524 if (IS_ERR_VALUE(ugeth->tx_glbl_pram_offset)) { in ucc_geth_startup()
2525 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2529 ugeth->p_tx_glbl_pram = in ucc_geth_startup()
2530 (struct ucc_geth_tx_global_pram __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2533 memset_io((void __iomem *)ugeth->p_tx_glbl_pram, 0, sizeof(struct ucc_geth_tx_global_pram)); in ucc_geth_startup()
2539 ugeth->thread_dat_tx_offset = in ucc_geth_startup()
2544 if (IS_ERR_VALUE(ugeth->thread_dat_tx_offset)) { in ucc_geth_startup()
2545 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2550 ugeth->p_thread_data_tx = in ucc_geth_startup()
2551 (struct ucc_geth_thread_data_tx __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2553 out_be32(&ugeth->p_tx_glbl_pram->tqptr, ugeth->thread_dat_tx_offset); in ucc_geth_startup()
2557 out_be32(&ugeth->p_tx_glbl_pram->vtagtable[i], in ucc_geth_startup()
2562 out_8(&ugeth->p_tx_glbl_pram->iphoffset[i], in ucc_geth_startup()
2567 ugeth->send_q_mem_reg_offset = in ucc_geth_startup()
2571 if (IS_ERR_VALUE(ugeth->send_q_mem_reg_offset)) { in ucc_geth_startup()
2572 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2577 ugeth->p_send_q_mem_reg = in ucc_geth_startup()
2578 (struct ucc_geth_send_queue_mem_region __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2580 out_be32(&ugeth->p_tx_glbl_pram->sqptr, ugeth->send_q_mem_reg_offset); in ucc_geth_startup()
2586 ugeth->p_tx_bd_ring[i] + (ug_info->bdRingLenTx[i] - in ucc_geth_startup()
2588 if (ugeth->ug_info->uf_info.bd_mem_part == MEM_PART_SYSTEM) { in ucc_geth_startup()
2589 out_be32(&ugeth->p_send_q_mem_reg->sqqd[i].bd_ring_base, in ucc_geth_startup()
2590 (u32) virt_to_phys(ugeth->p_tx_bd_ring[i])); in ucc_geth_startup()
2591 out_be32(&ugeth->p_send_q_mem_reg->sqqd[i]. in ucc_geth_startup()
2594 } else if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_startup()
2596 out_be32(&ugeth->p_send_q_mem_reg->sqqd[i].bd_ring_base, in ucc_geth_startup()
2597 (u32) immrbar_virt_to_phys(ugeth-> in ucc_geth_startup()
2599 out_be32(&ugeth->p_send_q_mem_reg->sqqd[i]. in ucc_geth_startup()
2609 ugeth->scheduler_offset = in ucc_geth_startup()
2612 if (IS_ERR_VALUE(ugeth->scheduler_offset)) { in ucc_geth_startup()
2613 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2618 ugeth->p_scheduler = in ucc_geth_startup()
2619 (struct ucc_geth_scheduler __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2621 out_be32(&ugeth->p_tx_glbl_pram->schedulerbasepointer, in ucc_geth_startup()
2622 ugeth->scheduler_offset); in ucc_geth_startup()
2624 memset_io((void __iomem *)ugeth->p_scheduler, 0, sizeof(struct ucc_geth_scheduler)); in ucc_geth_startup()
2627 out_be32(&ugeth->p_scheduler->mblinterval, in ucc_geth_startup()
2629 out_be16(&ugeth->p_scheduler->nortsrbytetime, in ucc_geth_startup()
2631 out_8(&ugeth->p_scheduler->fracsiz, ug_info->fracsiz); in ucc_geth_startup()
2632 out_8(&ugeth->p_scheduler->strictpriorityq, in ucc_geth_startup()
2634 out_8(&ugeth->p_scheduler->txasap, ug_info->txasap); in ucc_geth_startup()
2635 out_8(&ugeth->p_scheduler->extrabw, ug_info->extrabw); in ucc_geth_startup()
2637 out_8(&ugeth->p_scheduler->weightfactor[i], in ucc_geth_startup()
2641 ugeth->p_cpucount[0] = &(ugeth->p_scheduler->cpucount0); in ucc_geth_startup()
2642 ugeth->p_cpucount[1] = &(ugeth->p_scheduler->cpucount1); in ucc_geth_startup()
2643 ugeth->p_cpucount[2] = &(ugeth->p_scheduler->cpucount2); in ucc_geth_startup()
2644 ugeth->p_cpucount[3] = &(ugeth->p_scheduler->cpucount3); in ucc_geth_startup()
2645 ugeth->p_cpucount[4] = &(ugeth->p_scheduler->cpucount4); in ucc_geth_startup()
2646 ugeth->p_cpucount[5] = &(ugeth->p_scheduler->cpucount5); in ucc_geth_startup()
2647 ugeth->p_cpucount[6] = &(ugeth->p_scheduler->cpucount6); in ucc_geth_startup()
2648 ugeth->p_cpucount[7] = &(ugeth->p_scheduler->cpucount7); in ucc_geth_startup()
2655 ugeth->tx_fw_statistics_pram_offset = in ucc_geth_startup()
2659 if (IS_ERR_VALUE(ugeth->tx_fw_statistics_pram_offset)) { in ucc_geth_startup()
2660 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2664 ugeth->p_tx_fw_statistics_pram = in ucc_geth_startup()
2666 qe_muram_addr(ugeth->tx_fw_statistics_pram_offset); in ucc_geth_startup()
2668 memset_io((void __iomem *)ugeth->p_tx_fw_statistics_pram, in ucc_geth_startup()
2680 out_be16(&ugeth->p_tx_glbl_pram->temoder, temoder); in ucc_geth_startup()
2682 test = in_be16(&ugeth->p_tx_glbl_pram->temoder); in ucc_geth_startup()
2689 out_be32(&ugeth->p_tx_glbl_pram->tstate, ((u32) function_code) << 24); in ucc_geth_startup()
2693 ugeth->rx_glbl_pram_offset = in ucc_geth_startup()
2696 if (IS_ERR_VALUE(ugeth->rx_glbl_pram_offset)) { in ucc_geth_startup()
2697 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2701 ugeth->p_rx_glbl_pram = in ucc_geth_startup()
2702 (struct ucc_geth_rx_global_pram __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2705 memset_io((void __iomem *)ugeth->p_rx_glbl_pram, 0, sizeof(struct ucc_geth_rx_global_pram)); in ucc_geth_startup()
2711 ugeth->thread_dat_rx_offset = in ucc_geth_startup()
2715 if (IS_ERR_VALUE(ugeth->thread_dat_rx_offset)) { in ucc_geth_startup()
2716 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2721 ugeth->p_thread_data_rx = in ucc_geth_startup()
2722 (struct ucc_geth_thread_data_rx __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2724 out_be32(&ugeth->p_rx_glbl_pram->rqptr, ugeth->thread_dat_rx_offset); in ucc_geth_startup()
2727 out_be16(&ugeth->p_rx_glbl_pram->typeorlen, ug_info->typeorlen); in ucc_geth_startup()
2732 ugeth->rx_fw_statistics_pram_offset = in ucc_geth_startup()
2736 if (IS_ERR_VALUE(ugeth->rx_fw_statistics_pram_offset)) { in ucc_geth_startup()
2737 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2741 ugeth->p_rx_fw_statistics_pram = in ucc_geth_startup()
2743 qe_muram_addr(ugeth->rx_fw_statistics_pram_offset); in ucc_geth_startup()
2745 memset_io((void __iomem *)ugeth->p_rx_fw_statistics_pram, 0, in ucc_geth_startup()
2752 ugeth->rx_irq_coalescing_tbl_offset = in ucc_geth_startup()
2756 if (IS_ERR_VALUE(ugeth->rx_irq_coalescing_tbl_offset)) { in ucc_geth_startup()
2757 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2762 ugeth->p_rx_irq_coalescing_tbl = in ucc_geth_startup()
2764 qe_muram_addr(ugeth->rx_irq_coalescing_tbl_offset); in ucc_geth_startup()
2765 out_be32(&ugeth->p_rx_glbl_pram->intcoalescingptr, in ucc_geth_startup()
2766 ugeth->rx_irq_coalescing_tbl_offset); in ucc_geth_startup()
2770 out_be32(&ugeth->p_rx_irq_coalescing_tbl->coalescingentry[i]. in ucc_geth_startup()
2773 out_be32(&ugeth->p_rx_irq_coalescing_tbl->coalescingentry[i]. in ucc_geth_startup()
2780 &ugeth->p_rx_glbl_pram->mrblr); in ucc_geth_startup()
2782 out_be16(&ugeth->p_rx_glbl_pram->mflr, ug_info->maxFrameLength); in ucc_geth_startup()
2785 &ugeth->p_rx_glbl_pram->minflr, in ucc_geth_startup()
2786 &ugeth->p_rx_glbl_pram->mrblr); in ucc_geth_startup()
2788 out_be16(&ugeth->p_rx_glbl_pram->maxd1, ug_info->maxD1Length); in ucc_geth_startup()
2790 out_be16(&ugeth->p_rx_glbl_pram->maxd2, ug_info->maxD2Length); in ucc_geth_startup()
2796 out_be32(&ugeth->p_rx_glbl_pram->l2qt, l2qt); in ucc_geth_startup()
2803 out_be32(&ugeth->p_rx_glbl_pram->l3qt[j/8], l3qt); in ucc_geth_startup()
2807 out_be16(&ugeth->p_rx_glbl_pram->vlantype, ug_info->vlantype); in ucc_geth_startup()
2810 out_be16(&ugeth->p_rx_glbl_pram->vlantci, ug_info->vlantci); in ucc_geth_startup()
2813 out_be32(&ugeth->p_rx_glbl_pram->ecamptr, ug_info->ecamptr); in ucc_geth_startup()
2817 ugeth->rx_bd_qs_tbl_offset = in ucc_geth_startup()
2822 if (IS_ERR_VALUE(ugeth->rx_bd_qs_tbl_offset)) { in ucc_geth_startup()
2823 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2828 ugeth->p_rx_bd_qs_tbl = in ucc_geth_startup()
2829 (struct ucc_geth_rx_bd_queues_entry __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2831 out_be32(&ugeth->p_rx_glbl_pram->rbdqptr, ugeth->rx_bd_qs_tbl_offset); in ucc_geth_startup()
2833 memset_io((void __iomem *)ugeth->p_rx_bd_qs_tbl, in ucc_geth_startup()
2841 if (ugeth->ug_info->uf_info.bd_mem_part == MEM_PART_SYSTEM) { in ucc_geth_startup()
2842 out_be32(&ugeth->p_rx_bd_qs_tbl[i].externalbdbaseptr, in ucc_geth_startup()
2843 (u32) virt_to_phys(ugeth->p_rx_bd_ring[i])); in ucc_geth_startup()
2844 } else if (ugeth->ug_info->uf_info.bd_mem_part == in ucc_geth_startup()
2846 out_be32(&ugeth->p_rx_bd_qs_tbl[i].externalbdbaseptr, in ucc_geth_startup()
2847 (u32) immrbar_virt_to_phys(ugeth-> in ucc_geth_startup()
2856 if (ugeth->rx_extended_features) in ucc_geth_startup()
2875 out_be32(&ugeth->p_rx_glbl_pram->remoder, remoder); in ucc_geth_startup()
2885 &ugeth->p_tx_glbl_pram->txrmonbaseptr, in ucc_geth_startup()
2886 ugeth->tx_fw_statistics_pram_offset, in ucc_geth_startup()
2887 &ugeth->p_rx_glbl_pram->rxrmonbaseptr, in ucc_geth_startup()
2888 ugeth->rx_fw_statistics_pram_offset, in ucc_geth_startup()
2889 &ugeth->p_tx_glbl_pram->temoder, in ucc_geth_startup()
2890 &ugeth->p_rx_glbl_pram->remoder); in ucc_geth_startup()
2893 out_8(&ugeth->p_rx_glbl_pram->rstate, function_code); in ucc_geth_startup()
2898 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2905 ugeth->exf_glbl_param_offset = in ucc_geth_startup()
2908 if (IS_ERR_VALUE(ugeth->exf_glbl_param_offset)) { in ucc_geth_startup()
2909 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2914 ugeth->p_exf_glbl_param = in ucc_geth_startup()
2915 (struct ucc_geth_exf_global_pram __iomem *) qe_muram_addr(ugeth-> in ucc_geth_startup()
2917 out_be32(&ugeth->p_rx_glbl_pram->exfGlobalParam, in ucc_geth_startup()
2918 ugeth->exf_glbl_param_offset); in ucc_geth_startup()
2919 out_be32(&ugeth->p_exf_glbl_param->l2pcdptr, in ucc_geth_startup()
2927 ugeth_82xx_filtering_clear_addr_in_paddr(ugeth, (u8) j); in ucc_geth_startup()
2930 (struct ucc_geth_82xx_address_filtering_pram __iomem *) ugeth-> in ucc_geth_startup()
2933 ugeth_82xx_filtering_clear_all_addr_in_hash(ugeth, in ucc_geth_startup()
2935 ugeth_82xx_filtering_clear_all_addr_in_hash(ugeth, in ucc_geth_startup()
2952 if (!(ugeth->p_init_enet_param_shadow = in ucc_geth_startup()
2954 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2959 memset((char *)ugeth->p_init_enet_param_shadow, in ucc_geth_startup()
2964 ugeth->p_init_enet_param_shadow->resinit1 = in ucc_geth_startup()
2966 ugeth->p_init_enet_param_shadow->resinit2 = in ucc_geth_startup()
2968 ugeth->p_init_enet_param_shadow->resinit3 = in ucc_geth_startup()
2970 ugeth->p_init_enet_param_shadow->resinit4 = in ucc_geth_startup()
2972 ugeth->p_init_enet_param_shadow->resinit5 = in ucc_geth_startup()
2974 ugeth->p_init_enet_param_shadow->rgftgfrxglobal |= in ucc_geth_startup()
2976 ugeth->p_init_enet_param_shadow->rgftgfrxglobal |= in ucc_geth_startup()
2979 ugeth->p_init_enet_param_shadow->rgftgfrxglobal |= in ucc_geth_startup()
2980 ugeth->rx_glbl_pram_offset | ug_info->riscRx; in ucc_geth_startup()
2987 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
2991 ugeth->p_init_enet_param_shadow->largestexternallookupkeysize = in ucc_geth_startup()
3006 if ((ret_val = fill_init_enet_entries(ugeth, &(ugeth-> in ucc_geth_startup()
3012 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
3017 ugeth->p_init_enet_param_shadow->txglobal = in ucc_geth_startup()
3018 ugeth->tx_glbl_pram_offset | ug_info->riscTx; in ucc_geth_startup()
3020 fill_init_enet_entries(ugeth, in ucc_geth_startup()
3021 &(ugeth->p_init_enet_param_shadow-> in ucc_geth_startup()
3026 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
3033 if ((ret_val = rx_bd_buffer_set(ugeth, (u8) i)) != 0) { in ucc_geth_startup()
3034 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
3043 if (netif_msg_ifup(ugeth)) in ucc_geth_startup()
3052 ugeth->p_init_enet_param_shadow->resinit1); in ucc_geth_startup()
3054 ugeth->p_init_enet_param_shadow->resinit2); in ucc_geth_startup()
3056 ugeth->p_init_enet_param_shadow->resinit3); in ucc_geth_startup()
3058 ugeth->p_init_enet_param_shadow->resinit4); in ucc_geth_startup()
3060 ugeth->p_init_enet_param_shadow->resinit5); in ucc_geth_startup()
3062 ugeth->p_init_enet_param_shadow->largestexternallookupkeysize); in ucc_geth_startup()
3064 ugeth->p_init_enet_param_shadow->rgftgfrxglobal); in ucc_geth_startup()
3067 ugeth->p_init_enet_param_shadow->rxthread[i]); in ucc_geth_startup()
3069 ugeth->p_init_enet_param_shadow->txglobal); in ucc_geth_startup()
3072 ugeth->p_init_enet_param_shadow->txthread[i]); in ucc_geth_startup()
3076 ucc_fast_get_qe_cr_subblock(ugeth->ug_info->uf_info.ucc_num); in ucc_geth_startup()
3090 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_start_xmit() local
3101 spin_lock_irqsave(&ugeth->lock, flags); in ucc_geth_start_xmit()
3106 bd = ugeth->txBd[txQ]; in ucc_geth_start_xmit()
3109 ugeth->tx_skbuff[txQ][ugeth->skb_curtx[txQ]] = skb; in ucc_geth_start_xmit()
3112 ugeth->skb_curtx[txQ] = in ucc_geth_start_xmit()
3113 (ugeth->skb_curtx[txQ] + in ucc_geth_start_xmit()
3114 1) & TX_RING_MOD_MASK(ugeth->ug_info->bdRingLenTx[txQ]); in ucc_geth_start_xmit()
3118 dma_map_single(ugeth->dev, skb->data, in ucc_geth_start_xmit()
3132 bd = ugeth->p_tx_bd_ring[txQ]; in ucc_geth_start_xmit()
3136 if (bd == ugeth->confBd[txQ]) { in ucc_geth_start_xmit()
3141 ugeth->txBd[txQ] = bd; in ucc_geth_start_xmit()
3145 if (ugeth->p_scheduler) { in ucc_geth_start_xmit()
3146 ugeth->cpucount[txQ]++; in ucc_geth_start_xmit()
3151 out_be16(ugeth->p_cpucount[txQ], ugeth->cpucount[txQ]); in ucc_geth_start_xmit()
3155 uccf = ugeth->uccf; in ucc_geth_start_xmit()
3158 spin_unlock_irqrestore(&ugeth->lock, flags); in ucc_geth_start_xmit()
3163 static int ucc_geth_rx(struct ucc_geth_private *ugeth, u8 rxQ, int rx_work_limit) in ucc_geth_rx() argument
3174 dev = ugeth->ndev; in ucc_geth_rx()
3177 bd = ugeth->rxBd[rxQ]; in ucc_geth_rx()
3185 skb = ugeth->rx_skbuff[rxQ][ugeth->skb_currx[rxQ]]; in ucc_geth_rx()
3192 if (netif_msg_rx_err(ugeth)) in ucc_geth_rx()
3197 ugeth->rx_skbuff[rxQ][ugeth->skb_currx[rxQ]] = NULL; in ucc_geth_rx()
3207 skb->protocol = eth_type_trans(skb, ugeth->ndev); in ucc_geth_rx()
3214 skb = get_new_skb(ugeth, bd); in ucc_geth_rx()
3216 if (netif_msg_rx_err(ugeth)) in ucc_geth_rx()
3222 ugeth->rx_skbuff[rxQ][ugeth->skb_currx[rxQ]] = skb; in ucc_geth_rx()
3225 ugeth->skb_currx[rxQ] = in ucc_geth_rx()
3226 (ugeth->skb_currx[rxQ] + in ucc_geth_rx()
3227 1) & RX_RING_MOD_MASK(ugeth->ug_info->bdRingLenRx[rxQ]); in ucc_geth_rx()
3230 bd = ugeth->p_rx_bd_ring[rxQ]; in ucc_geth_rx()
3237 ugeth->rxBd[rxQ] = bd; in ucc_geth_rx()
3244 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_tx() local
3248 bd = ugeth->confBd[txQ]; in ucc_geth_tx()
3259 skb = ugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]]; in ucc_geth_tx()
3267 ugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]] = NULL; in ucc_geth_tx()
3268 ugeth->skb_dirtytx[txQ] = in ucc_geth_tx()
3269 (ugeth->skb_dirtytx[txQ] + in ucc_geth_tx()
3270 1) & TX_RING_MOD_MASK(ugeth->ug_info->bdRingLenTx[txQ]); in ucc_geth_tx()
3280 bd = ugeth->p_tx_bd_ring[txQ]; in ucc_geth_tx()
3283 ugeth->confBd[txQ] = bd; in ucc_geth_tx()
3289 struct ucc_geth_private *ugeth = container_of(napi, struct ucc_geth_private, napi); in ucc_geth_poll() local
3293 ug_info = ugeth->ug_info; in ucc_geth_poll()
3296 spin_lock(&ugeth->lock); in ucc_geth_poll()
3298 ucc_geth_tx(ugeth->ndev, i); in ucc_geth_poll()
3299 spin_unlock(&ugeth->lock); in ucc_geth_poll()
3303 howmany += ucc_geth_rx(ugeth, i, budget - howmany); in ucc_geth_poll()
3307 setbits32(ugeth->uccf->p_uccm, UCCE_RX_EVENTS | UCCE_TX_EVENTS); in ucc_geth_poll()
3316 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_irq_handler() local
3324 uccf = ugeth->uccf; in ucc_geth_irq_handler()
3325 ug_info = ugeth->ug_info; in ucc_geth_irq_handler()
3335 if (napi_schedule_prep(&ugeth->napi)) { in ucc_geth_irq_handler()
3338 __napi_schedule(&ugeth->napi); in ucc_geth_irq_handler()
3361 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_netpoll() local
3362 int irq = ugeth->ug_info->uf_info.irq; in ucc_netpoll()
3372 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_set_mac_addr() local
3387 spin_lock_irq(&ugeth->lock); in ucc_geth_set_mac_addr()
3394 &ugeth->ug_regs->macstnaddr1, in ucc_geth_set_mac_addr()
3395 &ugeth->ug_regs->macstnaddr2); in ucc_geth_set_mac_addr()
3396 spin_unlock_irq(&ugeth->lock); in ucc_geth_set_mac_addr()
3401 static int ucc_geth_init_mac(struct ucc_geth_private *ugeth) in ucc_geth_init_mac() argument
3403 struct net_device *dev = ugeth->ndev; in ucc_geth_init_mac()
3406 err = ucc_struct_init(ugeth); in ucc_geth_init_mac()
3408 netif_err(ugeth, ifup, dev, "Cannot configure internal struct, aborting\n"); in ucc_geth_init_mac()
3412 err = ucc_geth_startup(ugeth); in ucc_geth_init_mac()
3414 netif_err(ugeth, ifup, dev, "Cannot configure net device, aborting\n"); in ucc_geth_init_mac()
3418 err = adjust_enet_interface(ugeth); in ucc_geth_init_mac()
3420 netif_err(ugeth, ifup, dev, "Cannot configure net device, aborting\n"); in ucc_geth_init_mac()
3432 &ugeth->ug_regs->macstnaddr1, in ucc_geth_init_mac()
3433 &ugeth->ug_regs->macstnaddr2); in ucc_geth_init_mac()
3435 err = ugeth_enable(ugeth, COMM_DIR_RX_AND_TX); in ucc_geth_init_mac()
3437 netif_err(ugeth, ifup, dev, "Cannot enable net device, aborting\n"); in ucc_geth_init_mac()
3443 ucc_geth_stop(ugeth); in ucc_geth_init_mac()
3451 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_open() local
3458 netif_err(ugeth, ifup, dev, in ucc_geth_open()
3465 netif_err(ugeth, ifup, dev, "Cannot initialize PHY, aborting\n"); in ucc_geth_open()
3469 err = ucc_geth_init_mac(ugeth); in ucc_geth_open()
3471 netif_err(ugeth, ifup, dev, "Cannot initialize MAC, aborting\n"); in ucc_geth_open()
3475 err = request_irq(ugeth->ug_info->uf_info.irq, ucc_geth_irq_handler, in ucc_geth_open()
3478 netif_err(ugeth, ifup, dev, "Cannot get IRQ for net device, aborting\n"); in ucc_geth_open()
3482 phy_start(ugeth->phydev); in ucc_geth_open()
3483 napi_enable(&ugeth->napi); in ucc_geth_open()
3487 qe_alive_during_sleep() || ugeth->phydev->irq); in ucc_geth_open()
3488 device_set_wakeup_enable(&dev->dev, ugeth->wol_en); in ucc_geth_open()
3493 ucc_geth_stop(ugeth); in ucc_geth_open()
3500 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_close() local
3504 napi_disable(&ugeth->napi); in ucc_geth_close()
3506 cancel_work_sync(&ugeth->timeout_work); in ucc_geth_close()
3507 ucc_geth_stop(ugeth); in ucc_geth_close()
3508 phy_disconnect(ugeth->phydev); in ucc_geth_close()
3509 ugeth->phydev = NULL; in ucc_geth_close()
3511 free_irq(ugeth->ug_info->uf_info.irq, ugeth->ndev); in ucc_geth_close()
3521 struct ucc_geth_private *ugeth; in ucc_geth_timeout_work() local
3524 ugeth = container_of(work, struct ucc_geth_private, timeout_work); in ucc_geth_timeout_work()
3525 dev = ugeth->ndev; in ucc_geth_timeout_work()
3531 ugeth_dump_regs(ugeth); in ucc_geth_timeout_work()
3539 ucc_geth_stop(ugeth); in ucc_geth_timeout_work()
3540 ucc_geth_init_mac(ugeth); in ucc_geth_timeout_work()
3542 phy_start(ugeth->phydev); in ucc_geth_timeout_work()
3555 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_timeout() local
3557 schedule_work(&ugeth->timeout_work); in ucc_geth_timeout()
3566 struct ucc_geth_private *ugeth = netdev_priv(ndev); in ucc_geth_suspend() local
3572 napi_disable(&ugeth->napi); in ucc_geth_suspend()
3578 ugeth_disable(ugeth, COMM_DIR_RX_AND_TX); in ucc_geth_suspend()
3580 if (ugeth->wol_en & WAKE_MAGIC) { in ucc_geth_suspend()
3581 setbits32(ugeth->uccf->p_uccm, UCC_GETH_UCCE_MPD); in ucc_geth_suspend()
3582 setbits32(&ugeth->ug_regs->maccfg2, MACCFG2_MPE); in ucc_geth_suspend()
3583 ucc_fast_enable(ugeth->uccf, COMM_DIR_RX_AND_TX); in ucc_geth_suspend()
3584 } else if (!(ugeth->wol_en & WAKE_PHY)) { in ucc_geth_suspend()
3585 phy_stop(ugeth->phydev); in ucc_geth_suspend()
3594 struct ucc_geth_private *ugeth = netdev_priv(ndev); in ucc_geth_resume() local
3601 if (ugeth->wol_en & WAKE_MAGIC) { in ucc_geth_resume()
3602 ucc_fast_disable(ugeth->uccf, COMM_DIR_RX_AND_TX); in ucc_geth_resume()
3603 clrbits32(&ugeth->ug_regs->maccfg2, MACCFG2_MPE); in ucc_geth_resume()
3604 clrbits32(ugeth->uccf->p_uccm, UCC_GETH_UCCE_MPD); in ucc_geth_resume()
3606 ugeth_enable(ugeth, COMM_DIR_RX_AND_TX); in ucc_geth_resume()
3612 ucc_geth_memclean(ugeth); in ucc_geth_resume()
3614 err = ucc_geth_init_mac(ugeth); in ucc_geth_resume()
3621 ugeth->oldlink = 0; in ucc_geth_resume()
3622 ugeth->oldspeed = 0; in ucc_geth_resume()
3623 ugeth->oldduplex = -1; in ucc_geth_resume()
3625 phy_stop(ugeth->phydev); in ucc_geth_resume()
3626 phy_start(ugeth->phydev); in ucc_geth_resume()
3628 napi_enable(&ugeth->napi); in ucc_geth_resume()
3667 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_ioctl() local
3672 if (!ugeth->phydev) in ucc_geth_ioctl()
3675 return phy_mii_ioctl(ugeth->phydev, rq, cmd); in ucc_geth_ioctl()
3698 struct ucc_geth_private *ugeth = NULL; in ucc_geth_probe() local
3868 dev = alloc_etherdev(sizeof(*ugeth)); in ucc_geth_probe()
3876 ugeth = netdev_priv(dev); in ucc_geth_probe()
3877 spin_lock_init(&ugeth->lock); in ucc_geth_probe()
3880 INIT_LIST_HEAD(&ugeth->group_hash_q); in ucc_geth_probe()
3881 INIT_LIST_HEAD(&ugeth->ind_hash_q); in ucc_geth_probe()
3894 INIT_WORK(&ugeth->timeout_work, ucc_geth_timeout_work); in ucc_geth_probe()
3895 netif_napi_add(dev, &ugeth->napi, ucc_geth_poll, 64); in ucc_geth_probe()
3898 ugeth->msg_enable = netif_msg_init(debug.msg_enable, UGETH_MSG_DEFAULT); in ucc_geth_probe()
3899 ugeth->phy_interface = phy_interface; in ucc_geth_probe()
3900 ugeth->max_speed = max_speed; in ucc_geth_probe()
3907 if (netif_msg_probe(ugeth)) in ucc_geth_probe()
3920 ugeth->ug_info = ug_info; in ucc_geth_probe()
3921 ugeth->dev = device; in ucc_geth_probe()
3922 ugeth->ndev = dev; in ucc_geth_probe()
3923 ugeth->node = np; in ucc_geth_probe()
3931 struct ucc_geth_private *ugeth = netdev_priv(dev); in ucc_geth_remove() local
3935 ucc_geth_memclean(ugeth); in ucc_geth_remove()
3936 of_node_put(ugeth->ug_info->tbi_node); in ucc_geth_remove()
3937 of_node_put(ugeth->ug_info->phy_node); in ucc_geth_remove()