Lines Matching refs:fep

221 				      struct fec_enet_private *fep,  in fec_enet_get_nextdesc()  argument
226 struct fec_enet_priv_tx_q *txq = fep->tx_queue[queue_id]; in fec_enet_get_nextdesc()
227 struct fec_enet_priv_rx_q *rxq = fep->rx_queue[queue_id]; in fec_enet_get_nextdesc()
242 if (fep->bufdesc_ex) in fec_enet_get_nextdesc()
252 struct fec_enet_private *fep, in fec_enet_get_prevdesc() argument
257 struct fec_enet_priv_tx_q *txq = fep->tx_queue[queue_id]; in fec_enet_get_prevdesc()
258 struct fec_enet_priv_rx_q *rxq = fep->rx_queue[queue_id]; in fec_enet_get_prevdesc()
273 if (fep->bufdesc_ex) in fec_enet_get_prevdesc()
281 struct fec_enet_private *fep) in fec_enet_get_bd_index() argument
283 return ((const char *)bdp - (const char *)base) / fep->bufdesc_size; in fec_enet_get_bd_index()
286 static int fec_enet_get_free_txdesc_num(struct fec_enet_private *fep, in fec_enet_get_free_txdesc_num() argument
292 (const char *)txq->cur_tx) / fep->bufdesc_size - 1; in fec_enet_get_free_txdesc_num()
318 struct fec_enet_private *fep = netdev_priv(ndev); in fec_dump() local
326 txq = fep->tx_queue[0]; in fec_dump()
336 bdp = fec_enet_get_nextdesc(bdp, fep, 0); in fec_dump()
368 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_txq_submit_frag_skb() local
384 bdp = fec_enet_get_nextdesc(bdp, fep, queue); in fec_enet_txq_submit_frag_skb()
395 if (fep->bufdesc_ex) { in fec_enet_txq_submit_frag_skb()
398 SKBTX_HW_TSTAMP && fep->hwts_tx_en)) in fec_enet_txq_submit_frag_skb()
403 if (fep->bufdesc_ex) { in fec_enet_txq_submit_frag_skb()
404 if (fep->quirks & FEC_QUIRK_HAS_AVB) in fec_enet_txq_submit_frag_skb()
414 index = fec_enet_get_bd_index(txq->tx_bd_base, bdp, fep); in fec_enet_txq_submit_frag_skb()
415 if (((unsigned long) bufaddr) & fep->tx_align || in fec_enet_txq_submit_frag_skb()
416 fep->quirks & FEC_QUIRK_SWAP_FRAME) { in fec_enet_txq_submit_frag_skb()
420 if (fep->quirks & FEC_QUIRK_SWAP_FRAME) in fec_enet_txq_submit_frag_skb()
424 addr = dma_map_single(&fep->pdev->dev, bufaddr, frag_len, in fec_enet_txq_submit_frag_skb()
426 if (dma_mapping_error(&fep->pdev->dev, addr)) { in fec_enet_txq_submit_frag_skb()
445 bdp = fec_enet_get_nextdesc(bdp, fep, queue); in fec_enet_txq_submit_frag_skb()
446 dma_unmap_single(&fep->pdev->dev, bdp->cbd_bufaddr, in fec_enet_txq_submit_frag_skb()
455 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_txq_submit_skb() local
468 entries_free = fec_enet_get_free_txdesc_num(fep, txq); in fec_enet_txq_submit_skb()
492 index = fec_enet_get_bd_index(txq->tx_bd_base, bdp, fep); in fec_enet_txq_submit_skb()
493 if (((unsigned long) bufaddr) & fep->tx_align || in fec_enet_txq_submit_skb()
494 fep->quirks & FEC_QUIRK_SWAP_FRAME) { in fec_enet_txq_submit_skb()
498 if (fep->quirks & FEC_QUIRK_SWAP_FRAME) in fec_enet_txq_submit_skb()
503 addr = dma_map_single(&fep->pdev->dev, bufaddr, buflen, DMA_TO_DEVICE); in fec_enet_txq_submit_skb()
504 if (dma_mapping_error(&fep->pdev->dev, addr)) { in fec_enet_txq_submit_skb()
517 if (fep->bufdesc_ex) { in fec_enet_txq_submit_skb()
520 SKBTX_HW_TSTAMP && fep->hwts_tx_en)) in fec_enet_txq_submit_skb()
525 if (fep->bufdesc_ex) { in fec_enet_txq_submit_skb()
530 fep->hwts_tx_en)) in fec_enet_txq_submit_skb()
533 if (fep->quirks & FEC_QUIRK_HAS_AVB) in fec_enet_txq_submit_skb()
544 index = fec_enet_get_bd_index(txq->tx_bd_base, last_bdp, fep); in fec_enet_txq_submit_skb()
558 bdp = fec_enet_get_nextdesc(last_bdp, fep, queue); in fec_enet_txq_submit_skb()
565 writel(0, fep->hwp + FEC_X_DES_ACTIVE(queue)); in fec_enet_txq_submit_skb()
576 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_txq_put_data_tso() local
588 if (((unsigned long) data) & fep->tx_align || in fec_enet_txq_put_data_tso()
589 fep->quirks & FEC_QUIRK_SWAP_FRAME) { in fec_enet_txq_put_data_tso()
593 if (fep->quirks & FEC_QUIRK_SWAP_FRAME) in fec_enet_txq_put_data_tso()
597 addr = dma_map_single(&fep->pdev->dev, data, size, DMA_TO_DEVICE); in fec_enet_txq_put_data_tso()
598 if (dma_mapping_error(&fep->pdev->dev, addr)) { in fec_enet_txq_put_data_tso()
608 if (fep->bufdesc_ex) { in fec_enet_txq_put_data_tso()
609 if (fep->quirks & FEC_QUIRK_HAS_AVB) in fec_enet_txq_put_data_tso()
622 if (fep->bufdesc_ex) in fec_enet_txq_put_data_tso()
636 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_txq_put_hdr_tso() local
651 if (((unsigned long)bufaddr) & fep->tx_align || in fec_enet_txq_put_hdr_tso()
652 fep->quirks & FEC_QUIRK_SWAP_FRAME) { in fec_enet_txq_put_hdr_tso()
656 if (fep->quirks & FEC_QUIRK_SWAP_FRAME) in fec_enet_txq_put_hdr_tso()
659 dmabuf = dma_map_single(&fep->pdev->dev, bufaddr, in fec_enet_txq_put_hdr_tso()
661 if (dma_mapping_error(&fep->pdev->dev, dmabuf)) { in fec_enet_txq_put_hdr_tso()
672 if (fep->bufdesc_ex) { in fec_enet_txq_put_hdr_tso()
673 if (fep->quirks & FEC_QUIRK_HAS_AVB) in fec_enet_txq_put_hdr_tso()
690 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_txq_submit_tso() local
699 if (tso_count_descs(skb) >= fec_enet_get_free_txdesc_num(fep, txq)) { in fec_enet_txq_submit_tso()
719 index = fec_enet_get_bd_index(txq->tx_bd_base, bdp, fep); in fec_enet_txq_submit_tso()
734 bdp = fec_enet_get_nextdesc(bdp, fep, queue); in fec_enet_txq_submit_tso()
736 bdp, fep); in fec_enet_txq_submit_tso()
749 bdp = fec_enet_get_nextdesc(bdp, fep, queue); in fec_enet_txq_submit_tso()
759 if (!(fep->quirks & FEC_QUIRK_ERR007885) || in fec_enet_txq_submit_tso()
760 !readl(fep->hwp + FEC_X_DES_ACTIVE(queue)) || in fec_enet_txq_submit_tso()
761 !readl(fep->hwp + FEC_X_DES_ACTIVE(queue)) || in fec_enet_txq_submit_tso()
762 !readl(fep->hwp + FEC_X_DES_ACTIVE(queue)) || in fec_enet_txq_submit_tso()
763 !readl(fep->hwp + FEC_X_DES_ACTIVE(queue))) in fec_enet_txq_submit_tso()
764 writel(0, fep->hwp + FEC_X_DES_ACTIVE(queue)); in fec_enet_txq_submit_tso()
776 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_start_xmit() local
784 txq = fep->tx_queue[queue]; in fec_enet_start_xmit()
794 entries_free = fec_enet_get_free_txdesc_num(fep, txq); in fec_enet_start_xmit()
805 struct fec_enet_private *fep = netdev_priv(dev); in fec_enet_bd_init() local
812 for (q = 0; q < fep->num_rx_queues; q++) { in fec_enet_bd_init()
814 rxq = fep->rx_queue[q]; in fec_enet_bd_init()
824 bdp = fec_enet_get_nextdesc(bdp, fep, q); in fec_enet_bd_init()
828 bdp = fec_enet_get_prevdesc(bdp, fep, q); in fec_enet_bd_init()
834 for (q = 0; q < fep->num_tx_queues; q++) { in fec_enet_bd_init()
836 txq = fep->tx_queue[q]; in fec_enet_bd_init()
848 bdp = fec_enet_get_nextdesc(bdp, fep, q); in fec_enet_bd_init()
852 bdp = fec_enet_get_prevdesc(bdp, fep, q); in fec_enet_bd_init()
860 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_active_rxring() local
863 for (i = 0; i < fep->num_rx_queues; i++) in fec_enet_active_rxring()
864 writel(0, fep->hwp + FEC_R_DES_ACTIVE(i)); in fec_enet_active_rxring()
869 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_enable_ring() local
874 for (i = 0; i < fep->num_rx_queues; i++) { in fec_enet_enable_ring()
875 rxq = fep->rx_queue[i]; in fec_enet_enable_ring()
876 writel(rxq->bd_dma, fep->hwp + FEC_R_DES_START(i)); in fec_enet_enable_ring()
877 writel(PKT_MAXBLR_SIZE, fep->hwp + FEC_R_BUFF_SIZE(i)); in fec_enet_enable_ring()
882 fep->hwp + FEC_RCMR(i)); in fec_enet_enable_ring()
885 for (i = 0; i < fep->num_tx_queues; i++) { in fec_enet_enable_ring()
886 txq = fep->tx_queue[i]; in fec_enet_enable_ring()
887 writel(txq->bd_dma, fep->hwp + FEC_X_DES_START(i)); in fec_enet_enable_ring()
892 fep->hwp + FEC_DMA_CFG(i)); in fec_enet_enable_ring()
898 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_reset_skb() local
902 for (i = 0; i < fep->num_tx_queues; i++) { in fec_enet_reset_skb()
903 txq = fep->tx_queue[i]; in fec_enet_reset_skb()
922 struct fec_enet_private *fep = netdev_priv(ndev); in fec_restart() local
932 if (fep->quirks & FEC_QUIRK_HAS_AVB) { in fec_restart()
933 writel(0, fep->hwp + FEC_ECNTRL); in fec_restart()
935 writel(1, fep->hwp + FEC_ECNTRL); in fec_restart()
943 if (fep->quirks & FEC_QUIRK_ENET_MAC) { in fec_restart()
945 writel(cpu_to_be32(temp_mac[0]), fep->hwp + FEC_ADDR_LOW); in fec_restart()
946 writel(cpu_to_be32(temp_mac[1]), fep->hwp + FEC_ADDR_HIGH); in fec_restart()
950 writel(0xffffffff, fep->hwp + FEC_IEVENT); in fec_restart()
960 if (fep->full_duplex == DUPLEX_FULL) { in fec_restart()
962 writel(0x04, fep->hwp + FEC_X_CNTRL); in fec_restart()
966 writel(0x0, fep->hwp + FEC_X_CNTRL); in fec_restart()
970 writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED); in fec_restart()
974 val = readl(fep->hwp + FEC_RACC); in fec_restart()
975 if (fep->csum_flags & FLAG_RX_CSUM_ENABLED) in fec_restart()
979 writel(val, fep->hwp + FEC_RACC); in fec_restart()
986 if (fep->quirks & FEC_QUIRK_ENET_MAC) { in fec_restart()
991 if (fep->phy_interface == PHY_INTERFACE_MODE_RGMII || in fec_restart()
992 fep->phy_interface == PHY_INTERFACE_MODE_RGMII_ID || in fec_restart()
993 fep->phy_interface == PHY_INTERFACE_MODE_RGMII_RXID || in fec_restart()
994 fep->phy_interface == PHY_INTERFACE_MODE_RGMII_TXID) in fec_restart()
996 else if (fep->phy_interface == PHY_INTERFACE_MODE_RMII) in fec_restart()
1002 if (fep->phy_dev) { in fec_restart()
1003 if (fep->phy_dev->speed == SPEED_1000) in fec_restart()
1005 else if (fep->phy_dev->speed == SPEED_100) in fec_restart()
1012 if (fep->quirks & FEC_QUIRK_USE_GASKET) { in fec_restart()
1015 writel(0, fep->hwp + FEC_MIIGSK_ENR); in fec_restart()
1016 while (readl(fep->hwp + FEC_MIIGSK_ENR) & 4) in fec_restart()
1024 cfgr = (fep->phy_interface == PHY_INTERFACE_MODE_RMII) in fec_restart()
1026 if (fep->phy_dev && fep->phy_dev->speed == SPEED_10) in fec_restart()
1028 writel(cfgr, fep->hwp + FEC_MIIGSK_CFGR); in fec_restart()
1031 writel(2, fep->hwp + FEC_MIIGSK_ENR); in fec_restart()
1038 if ((fep->pause_flag & FEC_PAUSE_FLAG_ENABLE) || in fec_restart()
1039 ((fep->pause_flag & FEC_PAUSE_FLAG_AUTONEG) && in fec_restart()
1040 fep->phy_dev && fep->phy_dev->pause)) { in fec_restart()
1044 writel(FEC_ENET_RSEM_V, fep->hwp + FEC_R_FIFO_RSEM); in fec_restart()
1045 writel(FEC_ENET_RSFL_V, fep->hwp + FEC_R_FIFO_RSFL); in fec_restart()
1046 writel(FEC_ENET_RAEM_V, fep->hwp + FEC_R_FIFO_RAEM); in fec_restart()
1047 writel(FEC_ENET_RAFL_V, fep->hwp + FEC_R_FIFO_RAFL); in fec_restart()
1050 writel(FEC_ENET_OPD_V, fep->hwp + FEC_OPD); in fec_restart()
1056 writel(rcntl, fep->hwp + FEC_R_CNTRL); in fec_restart()
1061 writel(0, fep->hwp + FEC_HASH_TABLE_HIGH); in fec_restart()
1062 writel(0, fep->hwp + FEC_HASH_TABLE_LOW); in fec_restart()
1065 if (fep->quirks & FEC_QUIRK_ENET_MAC) { in fec_restart()
1069 writel(1 << 8, fep->hwp + FEC_X_WMRK); in fec_restart()
1072 if (fep->bufdesc_ex) in fec_restart()
1077 writel(0 << 31, fep->hwp + FEC_MIB_CTRLSTAT); in fec_restart()
1081 writel(ecntl, fep->hwp + FEC_ECNTRL); in fec_restart()
1084 if (fep->bufdesc_ex) in fec_restart()
1088 if (fep->link) in fec_restart()
1089 writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK); in fec_restart()
1091 writel(FEC_ENET_MII, fep->hwp + FEC_IMASK); in fec_restart()
1101 struct fec_enet_private *fep = netdev_priv(ndev); in fec_stop() local
1102 struct fec_platform_data *pdata = fep->pdev->dev.platform_data; in fec_stop()
1103 u32 rmii_mode = readl(fep->hwp + FEC_R_CNTRL) & (1 << 8); in fec_stop()
1107 if (fep->link) { in fec_stop()
1108 writel(1, fep->hwp + FEC_X_CNTRL); /* Graceful transmit stop */ in fec_stop()
1110 if (!(readl(fep->hwp + FEC_IEVENT) & FEC_ENET_GRA)) in fec_stop()
1118 if (!(fep->wol_flag & FEC_WOL_FLAG_SLEEP_ON)) { in fec_stop()
1119 if (fep->quirks & FEC_QUIRK_HAS_AVB) { in fec_stop()
1120 writel(0, fep->hwp + FEC_ECNTRL); in fec_stop()
1122 writel(1, fep->hwp + FEC_ECNTRL); in fec_stop()
1125 writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK); in fec_stop()
1127 writel(FEC_DEFAULT_IMASK | FEC_ENET_WAKEUP, fep->hwp + FEC_IMASK); in fec_stop()
1128 val = readl(fep->hwp + FEC_ECNTRL); in fec_stop()
1130 writel(val, fep->hwp + FEC_ECNTRL); in fec_stop()
1135 writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED); in fec_stop()
1138 if (fep->quirks & FEC_QUIRK_ENET_MAC && in fec_stop()
1139 !(fep->wol_flag & FEC_WOL_FLAG_SLEEP_ON)) { in fec_stop()
1140 writel(2, fep->hwp + FEC_ECNTRL); in fec_stop()
1141 writel(rmii_mode, fep->hwp + FEC_R_CNTRL); in fec_stop()
1149 struct fec_enet_private *fep = netdev_priv(ndev); in fec_timeout() local
1155 schedule_work(&fep->tx_timeout_work); in fec_timeout()
1160 struct fec_enet_private *fep = in fec_enet_timeout_work() local
1162 struct net_device *ndev = fep->netdev; in fec_enet_timeout_work()
1166 napi_disable(&fep->napi); in fec_enet_timeout_work()
1171 napi_enable(&fep->napi); in fec_enet_timeout_work()
1177 fec_enet_hwtstamp(struct fec_enet_private *fep, unsigned ts, in fec_enet_hwtstamp() argument
1183 spin_lock_irqsave(&fep->tmreg_lock, flags); in fec_enet_hwtstamp()
1184 ns = timecounter_cyc2time(&fep->tc, ts); in fec_enet_hwtstamp()
1185 spin_unlock_irqrestore(&fep->tmreg_lock, flags); in fec_enet_hwtstamp()
1194 struct fec_enet_private *fep; in fec_enet_tx_queue() local
1203 fep = netdev_priv(ndev); in fec_enet_tx_queue()
1207 txq = fep->tx_queue[queue_id]; in fec_enet_tx_queue()
1213 bdp = fec_enet_get_nextdesc(bdp, fep, queue_id); in fec_enet_tx_queue()
1221 index = fec_enet_get_bd_index(txq->tx_bd_base, bdp, fep); in fec_enet_tx_queue()
1226 dma_unmap_single(&fep->pdev->dev, bdp->cbd_bufaddr, in fec_enet_tx_queue()
1230 bdp = fec_enet_get_nextdesc(bdp, fep, queue_id); in fec_enet_tx_queue()
1255 fep->bufdesc_ex) { in fec_enet_tx_queue()
1259 fec_enet_hwtstamp(fep, ebdp->ts, &shhwtstamps); in fec_enet_tx_queue()
1275 bdp = fec_enet_get_nextdesc(bdp, fep, queue_id); in fec_enet_tx_queue()
1280 entries_free = fec_enet_get_free_txdesc_num(fep, txq); in fec_enet_tx_queue()
1288 readl(fep->hwp + FEC_X_DES_ACTIVE(queue_id)) == 0) in fec_enet_tx_queue()
1289 writel(0, fep->hwp + FEC_X_DES_ACTIVE(queue_id)); in fec_enet_tx_queue()
1295 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_tx() local
1298 for_each_set_bit(queue_id, &fep->work_tx, FEC_ENET_MAX_TX_QS) { in fec_enet_tx()
1299 clear_bit(queue_id, &fep->work_tx); in fec_enet_tx()
1308 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_new_rxbdp() local
1311 off = ((unsigned long)skb->data) & fep->rx_align; in fec_enet_new_rxbdp()
1313 skb_reserve(skb, fep->rx_align + 1 - off); in fec_enet_new_rxbdp()
1315 bdp->cbd_bufaddr = dma_map_single(&fep->pdev->dev, skb->data, in fec_enet_new_rxbdp()
1316 FEC_ENET_RX_FRSIZE - fep->rx_align, in fec_enet_new_rxbdp()
1318 if (dma_mapping_error(&fep->pdev->dev, bdp->cbd_bufaddr)) { in fec_enet_new_rxbdp()
1330 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_copybreak() local
1333 if (length > fep->rx_copybreak) in fec_enet_copybreak()
1340 dma_sync_single_for_cpu(&fep->pdev->dev, bdp->cbd_bufaddr, in fec_enet_copybreak()
1341 FEC_ENET_RX_FRSIZE - fep->rx_align, in fec_enet_copybreak()
1360 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_rx_queue() local
1374 bool need_swap = fep->quirks & FEC_QUIRK_SWAP_FRAME; in fec_enet_rx_queue()
1380 rxq = fep->rx_queue[queue_id]; in fec_enet_rx_queue()
1399 writel(FEC_ENET_RXF, fep->hwp + FEC_IEVENT); in fec_enet_rx_queue()
1432 index = fec_enet_get_bd_index(rxq->rx_bd_base, bdp, fep); in fec_enet_rx_queue()
1447 dma_unmap_single(&fep->pdev->dev, bdp->cbd_bufaddr, in fec_enet_rx_queue()
1448 FEC_ENET_RX_FRSIZE - fep->rx_align, in fec_enet_rx_queue()
1460 if (fep->bufdesc_ex) in fec_enet_rx_queue()
1466 fep->bufdesc_ex && (ebdp->cbd_esc & BD_ENET_RX_VLAN)) { in fec_enet_rx_queue()
1481 if (fep->hwts_rx_en && fep->bufdesc_ex) in fec_enet_rx_queue()
1482 fec_enet_hwtstamp(fep, ebdp->ts, in fec_enet_rx_queue()
1485 if (fep->bufdesc_ex && in fec_enet_rx_queue()
1486 (fep->csum_flags & FLAG_RX_CSUM_ENABLED)) { in fec_enet_rx_queue()
1501 napi_gro_receive(&fep->napi, skb); in fec_enet_rx_queue()
1504 dma_sync_single_for_device(&fep->pdev->dev, bdp->cbd_bufaddr, in fec_enet_rx_queue()
1505 FEC_ENET_RX_FRSIZE - fep->rx_align, in fec_enet_rx_queue()
1520 if (fep->bufdesc_ex) { in fec_enet_rx_queue()
1529 bdp = fec_enet_get_nextdesc(bdp, fep, queue_id); in fec_enet_rx_queue()
1535 writel(0, fep->hwp + FEC_R_DES_ACTIVE(queue_id)); in fec_enet_rx_queue()
1546 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_rx() local
1548 for_each_set_bit(queue_id, &fep->work_rx, FEC_ENET_MAX_RX_QS) { in fec_enet_rx()
1549 clear_bit(queue_id, &fep->work_rx); in fec_enet_rx()
1557 fec_enet_collect_events(struct fec_enet_private *fep, uint int_events) in fec_enet_collect_events() argument
1563 fep->work_rx |= (1 << 2); in fec_enet_collect_events()
1565 fep->work_rx |= (1 << 0); in fec_enet_collect_events()
1567 fep->work_rx |= (1 << 1); in fec_enet_collect_events()
1570 fep->work_tx |= (1 << 2); in fec_enet_collect_events()
1572 fep->work_tx |= (1 << 0); in fec_enet_collect_events()
1574 fep->work_tx |= (1 << 1); in fec_enet_collect_events()
1583 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_interrupt() local
1587 int_events = readl(fep->hwp + FEC_IEVENT); in fec_enet_interrupt()
1588 writel(int_events, fep->hwp + FEC_IEVENT); in fec_enet_interrupt()
1589 fec_enet_collect_events(fep, int_events); in fec_enet_interrupt()
1591 if ((fep->work_tx || fep->work_rx) && fep->link) { in fec_enet_interrupt()
1594 if (napi_schedule_prep(&fep->napi)) { in fec_enet_interrupt()
1596 writel(FEC_ENET_MII, fep->hwp + FEC_IMASK); in fec_enet_interrupt()
1597 __napi_schedule(&fep->napi); in fec_enet_interrupt()
1603 complete(&fep->mdio_done); in fec_enet_interrupt()
1606 if (fep->ptp_clock) in fec_enet_interrupt()
1607 fec_ptp_check_pps_event(fep); in fec_enet_interrupt()
1615 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_rx_napi() local
1624 writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK); in fec_enet_rx_napi()
1632 struct fec_enet_private *fep = netdev_priv(ndev); in fec_get_mac() local
1633 struct fec_platform_data *pdata = dev_get_platdata(&fep->pdev->dev); in fec_get_mac()
1648 struct device_node *np = fep->pdev->dev.of_node; in fec_get_mac()
1674 cpu_to_be32(readl(fep->hwp + FEC_ADDR_LOW)); in fec_get_mac()
1676 cpu_to_be16(readl(fep->hwp + FEC_ADDR_HIGH) >> 16); in fec_get_mac()
1696 ndev->dev_addr[ETH_ALEN-1] = macaddr[ETH_ALEN-1] + fep->dev_id; in fec_get_mac()
1706 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_adjust_link() local
1707 struct phy_device *phy_dev = fep->phy_dev; in fec_enet_adjust_link()
1711 if (fep->mii_timeout && phy_dev->state == PHY_HALTED) { in fec_enet_adjust_link()
1722 fep->link = 0; in fec_enet_adjust_link()
1724 if (!fep->link) { in fec_enet_adjust_link()
1725 fep->link = phy_dev->link; in fec_enet_adjust_link()
1729 if (fep->full_duplex != phy_dev->duplex) { in fec_enet_adjust_link()
1730 fep->full_duplex = phy_dev->duplex; in fec_enet_adjust_link()
1734 if (phy_dev->speed != fep->speed) { in fec_enet_adjust_link()
1735 fep->speed = phy_dev->speed; in fec_enet_adjust_link()
1741 napi_disable(&fep->napi); in fec_enet_adjust_link()
1746 napi_enable(&fep->napi); in fec_enet_adjust_link()
1749 if (fep->link) { in fec_enet_adjust_link()
1750 napi_disable(&fep->napi); in fec_enet_adjust_link()
1754 napi_enable(&fep->napi); in fec_enet_adjust_link()
1755 fep->link = phy_dev->link; in fec_enet_adjust_link()
1766 struct fec_enet_private *fep = bus->priv; in fec_enet_mdio_read() local
1769 fep->mii_timeout = 0; in fec_enet_mdio_read()
1770 init_completion(&fep->mdio_done); in fec_enet_mdio_read()
1775 FEC_MMFR_TA, fep->hwp + FEC_MII_DATA); in fec_enet_mdio_read()
1778 time_left = wait_for_completion_timeout(&fep->mdio_done, in fec_enet_mdio_read()
1781 fep->mii_timeout = 1; in fec_enet_mdio_read()
1782 netdev_err(fep->netdev, "MDIO read timeout\n"); in fec_enet_mdio_read()
1787 return FEC_MMFR_DATA(readl(fep->hwp + FEC_MII_DATA)); in fec_enet_mdio_read()
1793 struct fec_enet_private *fep = bus->priv; in fec_enet_mdio_write() local
1796 fep->mii_timeout = 0; in fec_enet_mdio_write()
1797 init_completion(&fep->mdio_done); in fec_enet_mdio_write()
1803 fep->hwp + FEC_MII_DATA); in fec_enet_mdio_write()
1806 time_left = wait_for_completion_timeout(&fep->mdio_done, in fec_enet_mdio_write()
1809 fep->mii_timeout = 1; in fec_enet_mdio_write()
1810 netdev_err(fep->netdev, "MDIO write timeout\n"); in fec_enet_mdio_write()
1819 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_clk_enable() local
1823 ret = clk_prepare_enable(fep->clk_ahb); in fec_enet_clk_enable()
1826 ret = clk_prepare_enable(fep->clk_ipg); in fec_enet_clk_enable()
1829 if (fep->clk_enet_out) { in fec_enet_clk_enable()
1830 ret = clk_prepare_enable(fep->clk_enet_out); in fec_enet_clk_enable()
1834 if (fep->clk_ptp) { in fec_enet_clk_enable()
1835 mutex_lock(&fep->ptp_clk_mutex); in fec_enet_clk_enable()
1836 ret = clk_prepare_enable(fep->clk_ptp); in fec_enet_clk_enable()
1838 mutex_unlock(&fep->ptp_clk_mutex); in fec_enet_clk_enable()
1841 fep->ptp_clk_on = true; in fec_enet_clk_enable()
1843 mutex_unlock(&fep->ptp_clk_mutex); in fec_enet_clk_enable()
1845 if (fep->clk_ref) { in fec_enet_clk_enable()
1846 ret = clk_prepare_enable(fep->clk_ref); in fec_enet_clk_enable()
1851 clk_disable_unprepare(fep->clk_ahb); in fec_enet_clk_enable()
1852 clk_disable_unprepare(fep->clk_ipg); in fec_enet_clk_enable()
1853 if (fep->clk_enet_out) in fec_enet_clk_enable()
1854 clk_disable_unprepare(fep->clk_enet_out); in fec_enet_clk_enable()
1855 if (fep->clk_ptp) { in fec_enet_clk_enable()
1856 mutex_lock(&fep->ptp_clk_mutex); in fec_enet_clk_enable()
1857 clk_disable_unprepare(fep->clk_ptp); in fec_enet_clk_enable()
1858 fep->ptp_clk_on = false; in fec_enet_clk_enable()
1859 mutex_unlock(&fep->ptp_clk_mutex); in fec_enet_clk_enable()
1861 if (fep->clk_ref) in fec_enet_clk_enable()
1862 clk_disable_unprepare(fep->clk_ref); in fec_enet_clk_enable()
1868 if (fep->clk_ref) in fec_enet_clk_enable()
1869 clk_disable_unprepare(fep->clk_ref); in fec_enet_clk_enable()
1871 if (fep->clk_enet_out) in fec_enet_clk_enable()
1872 clk_disable_unprepare(fep->clk_enet_out); in fec_enet_clk_enable()
1874 clk_disable_unprepare(fep->clk_ipg); in fec_enet_clk_enable()
1876 clk_disable_unprepare(fep->clk_ahb); in fec_enet_clk_enable()
1883 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_mii_probe() local
1888 int dev_id = fep->dev_id; in fec_enet_mii_probe()
1890 fep->phy_dev = NULL; in fec_enet_mii_probe()
1892 if (fep->phy_node) { in fec_enet_mii_probe()
1893 phy_dev = of_phy_connect(ndev, fep->phy_node, in fec_enet_mii_probe()
1895 fep->phy_interface); in fec_enet_mii_probe()
1901 if ((fep->mii_bus->phy_mask & (1 << phy_id))) in fec_enet_mii_probe()
1903 if (fep->mii_bus->phy_map[phy_id] == NULL) in fec_enet_mii_probe()
1905 if (fep->mii_bus->phy_map[phy_id]->phy_id == 0) in fec_enet_mii_probe()
1909 strlcpy(mdio_bus_id, fep->mii_bus->id, MII_BUS_ID_SIZE); in fec_enet_mii_probe()
1922 fep->phy_interface); in fec_enet_mii_probe()
1931 if (fep->quirks & FEC_QUIRK_HAS_GBIT) { in fec_enet_mii_probe()
1943 fep->phy_dev = phy_dev; in fec_enet_mii_probe()
1944 fep->link = 0; in fec_enet_mii_probe()
1945 fep->full_duplex = 0; in fec_enet_mii_probe()
1948 fep->phy_dev->drv->name, dev_name(&fep->phy_dev->dev), in fec_enet_mii_probe()
1949 fep->phy_dev->irq); in fec_enet_mii_probe()
1958 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_mii_init() local
1979 if ((fep->quirks & FEC_QUIRK_SINGLE_MDIO) && fep->dev_id > 0) { in fec_enet_mii_init()
1982 fep->mii_bus = fec0_mii_bus; in fec_enet_mii_init()
1989 fep->mii_timeout = 0; in fec_enet_mii_init()
1999 mii_speed = DIV_ROUND_UP(clk_get_rate(fep->clk_ipg), 5000000); in fec_enet_mii_init()
2000 if (fep->quirks & FEC_QUIRK_ENET_MAC) in fec_enet_mii_init()
2005 clk_get_rate(fep->clk_ipg)); in fec_enet_mii_init()
2022 holdtime = DIV_ROUND_UP(clk_get_rate(fep->clk_ipg), 100000000) - 1; in fec_enet_mii_init()
2024 fep->phy_speed = mii_speed << 1 | holdtime << 8; in fec_enet_mii_init()
2026 writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED); in fec_enet_mii_init()
2028 fep->mii_bus = mdiobus_alloc(); in fec_enet_mii_init()
2029 if (fep->mii_bus == NULL) { in fec_enet_mii_init()
2034 fep->mii_bus->name = "fec_enet_mii_bus"; in fec_enet_mii_init()
2035 fep->mii_bus->read = fec_enet_mdio_read; in fec_enet_mii_init()
2036 fep->mii_bus->write = fec_enet_mdio_write; in fec_enet_mii_init()
2037 snprintf(fep->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x", in fec_enet_mii_init()
2038 pdev->name, fep->dev_id + 1); in fec_enet_mii_init()
2039 fep->mii_bus->priv = fep; in fec_enet_mii_init()
2040 fep->mii_bus->parent = &pdev->dev; in fec_enet_mii_init()
2042 fep->mii_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL); in fec_enet_mii_init()
2043 if (!fep->mii_bus->irq) { in fec_enet_mii_init()
2049 fep->mii_bus->irq[i] = PHY_POLL; in fec_enet_mii_init()
2053 err = of_mdiobus_register(fep->mii_bus, node); in fec_enet_mii_init()
2056 err = mdiobus_register(fep->mii_bus); in fec_enet_mii_init()
2065 if (fep->quirks & FEC_QUIRK_SINGLE_MDIO) in fec_enet_mii_init()
2066 fec0_mii_bus = fep->mii_bus; in fec_enet_mii_init()
2071 kfree(fep->mii_bus->irq); in fec_enet_mii_init()
2073 mdiobus_free(fep->mii_bus); in fec_enet_mii_init()
2078 static void fec_enet_mii_remove(struct fec_enet_private *fep) in fec_enet_mii_remove() argument
2081 mdiobus_unregister(fep->mii_bus); in fec_enet_mii_remove()
2082 kfree(fep->mii_bus->irq); in fec_enet_mii_remove()
2083 mdiobus_free(fep->mii_bus); in fec_enet_mii_remove()
2090 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_get_settings() local
2091 struct phy_device *phydev = fep->phy_dev; in fec_enet_get_settings()
2102 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_set_settings() local
2103 struct phy_device *phydev = fep->phy_dev; in fec_enet_set_settings()
2114 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_get_drvinfo() local
2116 strlcpy(info->driver, fep->pdev->dev.driver->name, in fec_enet_get_drvinfo()
2125 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_get_ts_info() local
2127 if (fep->bufdesc_ex) { in fec_enet_get_ts_info()
2135 if (fep->ptp_clock) in fec_enet_get_ts_info()
2136 info->phc_index = ptp_clock_index(fep->ptp_clock); in fec_enet_get_ts_info()
2156 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_get_pauseparam() local
2158 pause->autoneg = (fep->pause_flag & FEC_PAUSE_FLAG_AUTONEG) != 0; in fec_enet_get_pauseparam()
2159 pause->tx_pause = (fep->pause_flag & FEC_PAUSE_FLAG_ENABLE) != 0; in fec_enet_get_pauseparam()
2166 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_set_pauseparam() local
2168 if (!fep->phy_dev) in fec_enet_set_pauseparam()
2177 fep->pause_flag = 0; in fec_enet_set_pauseparam()
2180 fep->pause_flag |= pause->rx_pause ? FEC_PAUSE_FLAG_ENABLE : 0; in fec_enet_set_pauseparam()
2181 fep->pause_flag |= pause->autoneg ? FEC_PAUSE_FLAG_AUTONEG : 0; in fec_enet_set_pauseparam()
2184 fep->phy_dev->supported |= ADVERTISED_Pause; in fec_enet_set_pauseparam()
2185 fep->phy_dev->advertising |= ADVERTISED_Pause; in fec_enet_set_pauseparam()
2187 fep->phy_dev->supported &= ~ADVERTISED_Pause; in fec_enet_set_pauseparam()
2188 fep->phy_dev->advertising &= ~ADVERTISED_Pause; in fec_enet_set_pauseparam()
2194 phy_start_aneg(fep->phy_dev); in fec_enet_set_pauseparam()
2197 napi_disable(&fep->napi); in fec_enet_set_pauseparam()
2202 napi_enable(&fep->napi); in fec_enet_set_pauseparam()
2277 struct fec_enet_private *fep = netdev_priv(dev); in fec_enet_get_ethtool_stats() local
2281 data[i] = readl(fep->hwp + fec_stats[i].offset); in fec_enet_get_ethtool_stats()
2310 struct fec_enet_private *fep = netdev_priv(dev); in fec_enet_nway_reset() local
2311 struct phy_device *phydev = fep->phy_dev; in fec_enet_nway_reset()
2325 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_us_to_itr_clock() local
2327 return us * (fep->itr_clk_rate / 64000) / 1000; in fec_enet_us_to_itr_clock()
2333 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_itr_coal_set() local
2336 if (!(fep->quirks & FEC_QUIRK_HAS_AVB)) in fec_enet_itr_coal_set()
2340 if (!fep->rx_time_itr || !fep->rx_pkts_itr || in fec_enet_itr_coal_set()
2341 !fep->tx_time_itr || !fep->tx_pkts_itr) in fec_enet_itr_coal_set()
2351 rx_itr |= FEC_ITR_ICFT(fep->rx_pkts_itr); in fec_enet_itr_coal_set()
2352 rx_itr |= FEC_ITR_ICTT(fec_enet_us_to_itr_clock(ndev, fep->rx_time_itr)); in fec_enet_itr_coal_set()
2353 tx_itr |= FEC_ITR_ICFT(fep->tx_pkts_itr); in fec_enet_itr_coal_set()
2354 tx_itr |= FEC_ITR_ICTT(fec_enet_us_to_itr_clock(ndev, fep->tx_time_itr)); in fec_enet_itr_coal_set()
2359 writel(tx_itr, fep->hwp + FEC_TXIC0); in fec_enet_itr_coal_set()
2360 writel(rx_itr, fep->hwp + FEC_RXIC0); in fec_enet_itr_coal_set()
2361 writel(tx_itr, fep->hwp + FEC_TXIC1); in fec_enet_itr_coal_set()
2362 writel(rx_itr, fep->hwp + FEC_RXIC1); in fec_enet_itr_coal_set()
2363 writel(tx_itr, fep->hwp + FEC_TXIC2); in fec_enet_itr_coal_set()
2364 writel(rx_itr, fep->hwp + FEC_RXIC2); in fec_enet_itr_coal_set()
2370 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_get_coalesce() local
2372 if (!(fep->quirks & FEC_QUIRK_HAS_AVB)) in fec_enet_get_coalesce()
2375 ec->rx_coalesce_usecs = fep->rx_time_itr; in fec_enet_get_coalesce()
2376 ec->rx_max_coalesced_frames = fep->rx_pkts_itr; in fec_enet_get_coalesce()
2378 ec->tx_coalesce_usecs = fep->tx_time_itr; in fec_enet_get_coalesce()
2379 ec->tx_max_coalesced_frames = fep->tx_pkts_itr; in fec_enet_get_coalesce()
2387 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_set_coalesce() local
2390 if (!(fep->quirks & FEC_QUIRK_HAS_AVB)) in fec_enet_set_coalesce()
2403 cycle = fec_enet_us_to_itr_clock(ndev, fep->rx_time_itr); in fec_enet_set_coalesce()
2409 cycle = fec_enet_us_to_itr_clock(ndev, fep->tx_time_itr); in fec_enet_set_coalesce()
2415 fep->rx_time_itr = ec->rx_coalesce_usecs; in fec_enet_set_coalesce()
2416 fep->rx_pkts_itr = ec->rx_max_coalesced_frames; in fec_enet_set_coalesce()
2418 fep->tx_time_itr = ec->tx_coalesce_usecs; in fec_enet_set_coalesce()
2419 fep->tx_pkts_itr = ec->tx_max_coalesced_frames; in fec_enet_set_coalesce()
2443 struct fec_enet_private *fep = netdev_priv(netdev); in fec_enet_get_tunable() local
2448 *(u32 *)data = fep->rx_copybreak; in fec_enet_get_tunable()
2462 struct fec_enet_private *fep = netdev_priv(netdev); in fec_enet_set_tunable() local
2467 fep->rx_copybreak = *(u32 *)data; in fec_enet_set_tunable()
2480 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_get_wol() local
2482 if (fep->wol_flag & FEC_WOL_HAS_MAGIC_PACKET) { in fec_enet_get_wol()
2484 wol->wolopts = fep->wol_flag & FEC_WOL_FLAG_ENABLE ? WAKE_MAGIC : 0; in fec_enet_get_wol()
2493 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_set_wol() local
2495 if (!(fep->wol_flag & FEC_WOL_HAS_MAGIC_PACKET)) in fec_enet_set_wol()
2503 fep->wol_flag |= FEC_WOL_FLAG_ENABLE; in fec_enet_set_wol()
2504 if (fep->irq[0] > 0) in fec_enet_set_wol()
2505 enable_irq_wake(fep->irq[0]); in fec_enet_set_wol()
2507 fep->wol_flag &= (~FEC_WOL_FLAG_ENABLE); in fec_enet_set_wol()
2508 if (fep->irq[0] > 0) in fec_enet_set_wol()
2509 disable_irq_wake(fep->irq[0]); in fec_enet_set_wol()
2539 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_ioctl() local
2540 struct phy_device *phydev = fep->phy_dev; in fec_enet_ioctl()
2548 if (fep->bufdesc_ex) { in fec_enet_ioctl()
2560 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_free_buffers() local
2568 for (q = 0; q < fep->num_rx_queues; q++) { in fec_enet_free_buffers()
2569 rxq = fep->rx_queue[q]; in fec_enet_free_buffers()
2575 dma_unmap_single(&fep->pdev->dev, in fec_enet_free_buffers()
2577 FEC_ENET_RX_FRSIZE - fep->rx_align, in fec_enet_free_buffers()
2581 bdp = fec_enet_get_nextdesc(bdp, fep, q); in fec_enet_free_buffers()
2585 for (q = 0; q < fep->num_tx_queues; q++) { in fec_enet_free_buffers()
2586 txq = fep->tx_queue[q]; in fec_enet_free_buffers()
2600 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_free_queue() local
2604 for (i = 0; i < fep->num_tx_queues; i++) in fec_enet_free_queue()
2605 if (fep->tx_queue[i] && fep->tx_queue[i]->tso_hdrs) { in fec_enet_free_queue()
2606 txq = fep->tx_queue[i]; in fec_enet_free_queue()
2613 for (i = 0; i < fep->num_rx_queues; i++) in fec_enet_free_queue()
2614 kfree(fep->rx_queue[i]); in fec_enet_free_queue()
2615 for (i = 0; i < fep->num_tx_queues; i++) in fec_enet_free_queue()
2616 kfree(fep->tx_queue[i]); in fec_enet_free_queue()
2621 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_alloc_queue() local
2626 for (i = 0; i < fep->num_tx_queues; i++) { in fec_enet_alloc_queue()
2633 fep->tx_queue[i] = txq; in fec_enet_alloc_queue()
2635 fep->total_tx_ring_size += fep->tx_queue[i]->tx_ring_size; in fec_enet_alloc_queue()
2651 for (i = 0; i < fep->num_rx_queues; i++) { in fec_enet_alloc_queue()
2652 fep->rx_queue[i] = kzalloc(sizeof(*fep->rx_queue[i]), in fec_enet_alloc_queue()
2654 if (!fep->rx_queue[i]) { in fec_enet_alloc_queue()
2659 fep->rx_queue[i]->rx_ring_size = RX_RING_SIZE; in fec_enet_alloc_queue()
2660 fep->total_rx_ring_size += fep->rx_queue[i]->rx_ring_size; in fec_enet_alloc_queue()
2672 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_alloc_rxq_buffers() local
2678 rxq = fep->rx_queue[queue]; in fec_enet_alloc_rxq_buffers()
2693 if (fep->bufdesc_ex) { in fec_enet_alloc_rxq_buffers()
2698 bdp = fec_enet_get_nextdesc(bdp, fep, queue); in fec_enet_alloc_rxq_buffers()
2702 bdp = fec_enet_get_prevdesc(bdp, fep, queue); in fec_enet_alloc_rxq_buffers()
2714 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_alloc_txq_buffers() local
2719 txq = fep->tx_queue[queue]; in fec_enet_alloc_txq_buffers()
2729 if (fep->bufdesc_ex) { in fec_enet_alloc_txq_buffers()
2734 bdp = fec_enet_get_nextdesc(bdp, fep, queue); in fec_enet_alloc_txq_buffers()
2738 bdp = fec_enet_get_prevdesc(bdp, fep, queue); in fec_enet_alloc_txq_buffers()
2750 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_alloc_buffers() local
2753 for (i = 0; i < fep->num_rx_queues; i++) in fec_enet_alloc_buffers()
2757 for (i = 0; i < fep->num_tx_queues; i++) in fec_enet_alloc_buffers()
2766 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_open() local
2769 pinctrl_pm_select_default_state(&fep->pdev->dev); in fec_enet_open()
2788 napi_enable(&fep->napi); in fec_enet_open()
2789 phy_start(fep->phy_dev); in fec_enet_open()
2792 device_set_wakeup_enable(&ndev->dev, fep->wol_flag & in fec_enet_open()
2801 pinctrl_pm_select_sleep_state(&fep->pdev->dev); in fec_enet_open()
2808 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_close() local
2810 phy_stop(fep->phy_dev); in fec_enet_close()
2813 napi_disable(&fep->napi); in fec_enet_close()
2818 phy_disconnect(fep->phy_dev); in fec_enet_close()
2819 fep->phy_dev = NULL; in fec_enet_close()
2822 pinctrl_pm_select_sleep_state(&fep->pdev->dev); in fec_enet_close()
2843 struct fec_enet_private *fep = netdev_priv(ndev); in set_multicast_list() local
2849 tmp = readl(fep->hwp + FEC_R_CNTRL); in set_multicast_list()
2851 writel(tmp, fep->hwp + FEC_R_CNTRL); in set_multicast_list()
2855 tmp = readl(fep->hwp + FEC_R_CNTRL); in set_multicast_list()
2857 writel(tmp, fep->hwp + FEC_R_CNTRL); in set_multicast_list()
2863 writel(0xffffffff, fep->hwp + FEC_GRP_HASH_TABLE_HIGH); in set_multicast_list()
2864 writel(0xffffffff, fep->hwp + FEC_GRP_HASH_TABLE_LOW); in set_multicast_list()
2871 writel(0, fep->hwp + FEC_GRP_HASH_TABLE_HIGH); in set_multicast_list()
2872 writel(0, fep->hwp + FEC_GRP_HASH_TABLE_LOW); in set_multicast_list()
2892 tmp = readl(fep->hwp + FEC_GRP_HASH_TABLE_HIGH); in set_multicast_list()
2894 writel(tmp, fep->hwp + FEC_GRP_HASH_TABLE_HIGH); in set_multicast_list()
2896 tmp = readl(fep->hwp + FEC_GRP_HASH_TABLE_LOW); in set_multicast_list()
2898 writel(tmp, fep->hwp + FEC_GRP_HASH_TABLE_LOW); in set_multicast_list()
2907 struct fec_enet_private *fep = netdev_priv(ndev); in fec_set_mac_address() local
2918 fep->hwp + FEC_ADDR_LOW); in fec_set_mac_address()
2920 fep->hwp + FEC_ADDR_HIGH); in fec_set_mac_address()
2935 struct fec_enet_private *fep = netdev_priv(dev); in fec_poll_controller() local
2938 if (fep->irq[i] > 0) { in fec_poll_controller()
2939 disable_irq(fep->irq[i]); in fec_poll_controller()
2940 fec_enet_interrupt(fep->irq[i], dev); in fec_poll_controller()
2941 enable_irq(fep->irq[i]); in fec_poll_controller()
2951 struct fec_enet_private *fep = netdev_priv(netdev); in fec_enet_set_netdev_features() local
2959 fep->csum_flags |= FLAG_RX_CSUM_ENABLED; in fec_enet_set_netdev_features()
2961 fep->csum_flags &= ~FLAG_RX_CSUM_ENABLED; in fec_enet_set_netdev_features()
2968 struct fec_enet_private *fep = netdev_priv(netdev); in fec_set_features() local
2972 napi_disable(&fep->napi); in fec_set_features()
2979 napi_enable(&fep->napi); in fec_set_features()
3009 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_init() local
3018 fep->rx_align = 0xf; in fec_enet_init()
3019 fep->tx_align = 0xf; in fec_enet_init()
3021 fep->rx_align = 0x3; in fec_enet_init()
3022 fep->tx_align = 0x3; in fec_enet_init()
3027 if (fep->bufdesc_ex) in fec_enet_init()
3028 fep->bufdesc_size = sizeof(struct bufdesc_ex); in fec_enet_init()
3030 fep->bufdesc_size = sizeof(struct bufdesc); in fec_enet_init()
3031 bd_size = (fep->total_tx_ring_size + fep->total_rx_ring_size) * in fec_enet_init()
3032 fep->bufdesc_size; in fec_enet_init()
3049 for (i = 0; i < fep->num_rx_queues; i++) { in fec_enet_init()
3050 rxq = fep->rx_queue[i]; in fec_enet_init()
3054 if (fep->bufdesc_ex) { in fec_enet_init()
3064 for (i = 0; i < fep->num_tx_queues; i++) { in fec_enet_init()
3065 txq = fep->tx_queue[i]; in fec_enet_init()
3069 if (fep->bufdesc_ex) { in fec_enet_init()
3085 writel(FEC_RX_DISABLED_IMASK, fep->hwp + FEC_IMASK); in fec_enet_init()
3086 netif_napi_add(ndev, &fep->napi, fec_enet_rx_napi, NAPI_POLL_WEIGHT); in fec_enet_init()
3088 if (fep->quirks & FEC_QUIRK_HAS_VLAN) in fec_enet_init()
3092 if (fep->quirks & FEC_QUIRK_HAS_CSUM) { in fec_enet_init()
3098 fep->csum_flags |= FLAG_RX_CSUM_ENABLED; in fec_enet_init()
3101 if (fep->quirks & FEC_QUIRK_HAS_AVB) { in fec_enet_init()
3102 fep->tx_align = 0; in fec_enet_init()
3103 fep->rx_align = 0x3f; in fec_enet_init()
3190 struct fec_enet_private *fep; in fec_probe() local
3212 fep = netdev_priv(ndev); in fec_probe()
3217 fep->quirks = pdev->id_entry->driver_data; in fec_probe()
3219 fep->netdev = ndev; in fec_probe()
3220 fep->num_rx_queues = num_rx_qs; in fec_probe()
3221 fep->num_tx_queues = num_tx_qs; in fec_probe()
3225 if (fep->quirks & FEC_QUIRK_HAS_GBIT) in fec_probe()
3226 fep->pause_flag |= FEC_PAUSE_FLAG_AUTONEG; in fec_probe()
3233 fep->hwp = devm_ioremap_resource(&pdev->dev, r); in fec_probe()
3234 if (IS_ERR(fep->hwp)) { in fec_probe()
3235 ret = PTR_ERR(fep->hwp); in fec_probe()
3239 fep->pdev = pdev; in fec_probe()
3240 fep->dev_id = dev_id++; in fec_probe()
3245 fep->wol_flag |= FEC_WOL_HAS_MAGIC_PACKET; in fec_probe()
3257 fep->phy_node = phy_node; in fec_probe()
3263 fep->phy_interface = pdata->phy; in fec_probe()
3265 fep->phy_interface = PHY_INTERFACE_MODE_MII; in fec_probe()
3267 fep->phy_interface = ret; in fec_probe()
3270 fep->clk_ipg = devm_clk_get(&pdev->dev, "ipg"); in fec_probe()
3271 if (IS_ERR(fep->clk_ipg)) { in fec_probe()
3272 ret = PTR_ERR(fep->clk_ipg); in fec_probe()
3276 fep->clk_ahb = devm_clk_get(&pdev->dev, "ahb"); in fec_probe()
3277 if (IS_ERR(fep->clk_ahb)) { in fec_probe()
3278 ret = PTR_ERR(fep->clk_ahb); in fec_probe()
3282 fep->itr_clk_rate = clk_get_rate(fep->clk_ahb); in fec_probe()
3285 fep->clk_enet_out = devm_clk_get(&pdev->dev, "enet_out"); in fec_probe()
3286 if (IS_ERR(fep->clk_enet_out)) in fec_probe()
3287 fep->clk_enet_out = NULL; in fec_probe()
3289 fep->ptp_clk_on = false; in fec_probe()
3290 mutex_init(&fep->ptp_clk_mutex); in fec_probe()
3293 fep->clk_ref = devm_clk_get(&pdev->dev, "enet_clk_ref"); in fec_probe()
3294 if (IS_ERR(fep->clk_ref)) in fec_probe()
3295 fep->clk_ref = NULL; in fec_probe()
3297 fep->bufdesc_ex = fep->quirks & FEC_QUIRK_HAS_BUFDESC_EX; in fec_probe()
3298 fep->clk_ptp = devm_clk_get(&pdev->dev, "ptp"); in fec_probe()
3299 if (IS_ERR(fep->clk_ptp)) { in fec_probe()
3300 fep->clk_ptp = NULL; in fec_probe()
3301 fep->bufdesc_ex = false; in fec_probe()
3308 fep->reg_phy = devm_regulator_get(&pdev->dev, "phy"); in fec_probe()
3309 if (!IS_ERR(fep->reg_phy)) { in fec_probe()
3310 ret = regulator_enable(fep->reg_phy); in fec_probe()
3317 fep->reg_phy = NULL; in fec_probe()
3322 if (fep->bufdesc_ex) in fec_probe()
3342 fep->irq[i] = irq; in fec_probe()
3345 init_completion(&fep->mdio_done); in fec_probe()
3359 device_init_wakeup(&ndev->dev, fep->wol_flag & in fec_probe()
3362 if (fep->bufdesc_ex && fep->ptp_clock) in fec_probe()
3363 netdev_info(ndev, "registered PHC device %d\n", fep->dev_id); in fec_probe()
3365 fep->rx_copybreak = COPYBREAK_DEFAULT; in fec_probe()
3366 INIT_WORK(&fep->tx_timeout_work, fec_enet_timeout_work); in fec_probe()
3370 fec_enet_mii_remove(fep); in fec_probe()
3374 if (fep->reg_phy) in fec_probe()
3375 regulator_disable(fep->reg_phy); in fec_probe()
3391 struct fec_enet_private *fep = netdev_priv(ndev); in fec_drv_remove() local
3393 cancel_delayed_work_sync(&fep->time_keep); in fec_drv_remove()
3394 cancel_work_sync(&fep->tx_timeout_work); in fec_drv_remove()
3396 fec_enet_mii_remove(fep); in fec_drv_remove()
3397 if (fep->reg_phy) in fec_drv_remove()
3398 regulator_disable(fep->reg_phy); in fec_drv_remove()
3399 if (fep->ptp_clock) in fec_drv_remove()
3400 ptp_clock_unregister(fep->ptp_clock); in fec_drv_remove()
3401 of_node_put(fep->phy_node); in fec_drv_remove()
3410 struct fec_enet_private *fep = netdev_priv(ndev); in fec_suspend() local
3414 if (fep->wol_flag & FEC_WOL_FLAG_ENABLE) in fec_suspend()
3415 fep->wol_flag |= FEC_WOL_FLAG_SLEEP_ON; in fec_suspend()
3416 phy_stop(fep->phy_dev); in fec_suspend()
3417 napi_disable(&fep->napi); in fec_suspend()
3423 if (!(fep->wol_flag & FEC_WOL_FLAG_ENABLE)) in fec_suspend()
3424 pinctrl_pm_select_sleep_state(&fep->pdev->dev); in fec_suspend()
3428 if (fep->reg_phy && !(fep->wol_flag & FEC_WOL_FLAG_ENABLE)) in fec_suspend()
3429 regulator_disable(fep->reg_phy); in fec_suspend()
3434 if (fep->clk_enet_out || fep->reg_phy) in fec_suspend()
3435 fep->link = 0; in fec_suspend()
3443 struct fec_enet_private *fep = netdev_priv(ndev); in fec_resume() local
3444 struct fec_platform_data *pdata = fep->pdev->dev.platform_data; in fec_resume()
3448 if (fep->reg_phy && !(fep->wol_flag & FEC_WOL_FLAG_ENABLE)) { in fec_resume()
3449 ret = regulator_enable(fep->reg_phy); in fec_resume()
3461 if (fep->wol_flag & FEC_WOL_FLAG_ENABLE) { in fec_resume()
3464 val = readl(fep->hwp + FEC_ECNTRL); in fec_resume()
3466 writel(val, fep->hwp + FEC_ECNTRL); in fec_resume()
3467 fep->wol_flag &= ~FEC_WOL_FLAG_SLEEP_ON; in fec_resume()
3469 pinctrl_pm_select_default_state(&fep->pdev->dev); in fec_resume()
3475 napi_enable(&fep->napi); in fec_resume()
3476 phy_start(fep->phy_dev); in fec_resume()
3483 if (fep->reg_phy) in fec_resume()
3484 regulator_disable(fep->reg_phy); in fec_resume()