Lines Matching refs:fep
295 struct fec_enet_private *fep = netdev_priv(ndev); in fec_dump() local
303 txq = fep->tx_queue[0]; in fec_dump()
347 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_txq_submit_frag_skb() local
373 if (fep->bufdesc_ex) { in fec_enet_txq_submit_frag_skb()
376 SKBTX_HW_TSTAMP && fep->hwts_tx_en)) in fec_enet_txq_submit_frag_skb()
381 if (fep->bufdesc_ex) { in fec_enet_txq_submit_frag_skb()
382 if (fep->quirks & FEC_QUIRK_HAS_AVB) in fec_enet_txq_submit_frag_skb()
393 if (((unsigned long) bufaddr) & fep->tx_align || in fec_enet_txq_submit_frag_skb()
394 fep->quirks & FEC_QUIRK_SWAP_FRAME) { in fec_enet_txq_submit_frag_skb()
398 if (fep->quirks & FEC_QUIRK_SWAP_FRAME) in fec_enet_txq_submit_frag_skb()
402 addr = dma_map_single(&fep->pdev->dev, bufaddr, frag_len, in fec_enet_txq_submit_frag_skb()
404 if (dma_mapping_error(&fep->pdev->dev, addr)) { in fec_enet_txq_submit_frag_skb()
424 dma_unmap_single(&fep->pdev->dev, fec32_to_cpu(bdp->cbd_bufaddr), in fec_enet_txq_submit_frag_skb()
433 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_txq_submit_skb() local
469 if (((unsigned long) bufaddr) & fep->tx_align || in fec_enet_txq_submit_skb()
470 fep->quirks & FEC_QUIRK_SWAP_FRAME) { in fec_enet_txq_submit_skb()
474 if (fep->quirks & FEC_QUIRK_SWAP_FRAME) in fec_enet_txq_submit_skb()
479 addr = dma_map_single(&fep->pdev->dev, bufaddr, buflen, DMA_TO_DEVICE); in fec_enet_txq_submit_skb()
480 if (dma_mapping_error(&fep->pdev->dev, addr)) { in fec_enet_txq_submit_skb()
490 dma_unmap_single(&fep->pdev->dev, addr, in fec_enet_txq_submit_skb()
497 if (fep->bufdesc_ex) { in fec_enet_txq_submit_skb()
500 SKBTX_HW_TSTAMP && fep->hwts_tx_en)) in fec_enet_txq_submit_skb()
507 if (fep->bufdesc_ex) { in fec_enet_txq_submit_skb()
512 fep->hwts_tx_en)) in fec_enet_txq_submit_skb()
515 if (fep->quirks & FEC_QUIRK_HAS_AVB) in fec_enet_txq_submit_skb()
563 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_txq_put_data_tso() local
574 if (((unsigned long) data) & fep->tx_align || in fec_enet_txq_put_data_tso()
575 fep->quirks & FEC_QUIRK_SWAP_FRAME) { in fec_enet_txq_put_data_tso()
579 if (fep->quirks & FEC_QUIRK_SWAP_FRAME) in fec_enet_txq_put_data_tso()
583 addr = dma_map_single(&fep->pdev->dev, data, size, DMA_TO_DEVICE); in fec_enet_txq_put_data_tso()
584 if (dma_mapping_error(&fep->pdev->dev, addr)) { in fec_enet_txq_put_data_tso()
594 if (fep->bufdesc_ex) { in fec_enet_txq_put_data_tso()
595 if (fep->quirks & FEC_QUIRK_HAS_AVB) in fec_enet_txq_put_data_tso()
608 if (fep->bufdesc_ex) in fec_enet_txq_put_data_tso()
622 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_txq_put_hdr_tso() local
636 if (((unsigned long)bufaddr) & fep->tx_align || in fec_enet_txq_put_hdr_tso()
637 fep->quirks & FEC_QUIRK_SWAP_FRAME) { in fec_enet_txq_put_hdr_tso()
641 if (fep->quirks & FEC_QUIRK_SWAP_FRAME) in fec_enet_txq_put_hdr_tso()
644 dmabuf = dma_map_single(&fep->pdev->dev, bufaddr, in fec_enet_txq_put_hdr_tso()
646 if (dma_mapping_error(&fep->pdev->dev, dmabuf)) { in fec_enet_txq_put_hdr_tso()
657 if (fep->bufdesc_ex) { in fec_enet_txq_put_hdr_tso()
658 if (fep->quirks & FEC_QUIRK_HAS_AVB) in fec_enet_txq_put_hdr_tso()
675 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_txq_submit_tso() local
742 if (!(fep->quirks & FEC_QUIRK_ERR007885) || in fec_enet_txq_submit_tso()
759 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_start_xmit() local
767 txq = fep->tx_queue[queue]; in fec_enet_start_xmit()
788 struct fec_enet_private *fep = netdev_priv(dev); in fec_enet_bd_init() local
795 for (q = 0; q < fep->num_rx_queues; q++) { in fec_enet_bd_init()
797 rxq = fep->rx_queue[q]; in fec_enet_bd_init()
817 for (q = 0; q < fep->num_tx_queues; q++) { in fec_enet_bd_init()
819 txq = fep->tx_queue[q]; in fec_enet_bd_init()
828 dma_unmap_single(&fep->pdev->dev, in fec_enet_bd_init()
849 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_active_rxring() local
852 for (i = 0; i < fep->num_rx_queues; i++) in fec_enet_active_rxring()
853 writel(0, fep->rx_queue[i]->bd.reg_desc_active); in fec_enet_active_rxring()
858 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_enable_ring() local
863 for (i = 0; i < fep->num_rx_queues; i++) { in fec_enet_enable_ring()
864 rxq = fep->rx_queue[i]; in fec_enet_enable_ring()
865 writel(rxq->bd.dma, fep->hwp + FEC_R_DES_START(i)); in fec_enet_enable_ring()
866 writel(PKT_MAXBUF_SIZE, fep->hwp + FEC_R_BUFF_SIZE(i)); in fec_enet_enable_ring()
871 fep->hwp + FEC_RCMR(i)); in fec_enet_enable_ring()
874 for (i = 0; i < fep->num_tx_queues; i++) { in fec_enet_enable_ring()
875 txq = fep->tx_queue[i]; in fec_enet_enable_ring()
876 writel(txq->bd.dma, fep->hwp + FEC_X_DES_START(i)); in fec_enet_enable_ring()
881 fep->hwp + FEC_DMA_CFG(i)); in fec_enet_enable_ring()
887 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_reset_skb() local
891 for (i = 0; i < fep->num_tx_queues; i++) { in fec_enet_reset_skb()
892 txq = fep->tx_queue[i]; in fec_enet_reset_skb()
911 struct fec_enet_private *fep = netdev_priv(ndev); in fec_restart() local
921 if (fep->quirks & FEC_QUIRK_HAS_AVB) { in fec_restart()
922 writel(0, fep->hwp + FEC_ECNTRL); in fec_restart()
924 writel(1, fep->hwp + FEC_ECNTRL); in fec_restart()
934 fep->hwp + FEC_ADDR_LOW); in fec_restart()
936 fep->hwp + FEC_ADDR_HIGH); in fec_restart()
939 writel(0xffffffff, fep->hwp + FEC_IEVENT); in fec_restart()
949 if (fep->full_duplex == DUPLEX_FULL) { in fec_restart()
951 writel(0x04, fep->hwp + FEC_X_CNTRL); in fec_restart()
955 writel(0x0, fep->hwp + FEC_X_CNTRL); in fec_restart()
959 writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED); in fec_restart()
962 if (fep->quirks & FEC_QUIRK_HAS_RACC) { in fec_restart()
963 val = readl(fep->hwp + FEC_RACC); in fec_restart()
966 if (fep->csum_flags & FLAG_RX_CSUM_ENABLED) in fec_restart()
971 writel(val, fep->hwp + FEC_RACC); in fec_restart()
972 writel(PKT_MAXBUF_SIZE, fep->hwp + FEC_FTRL); in fec_restart()
980 if (fep->quirks & FEC_QUIRK_ENET_MAC) { in fec_restart()
985 if (fep->phy_interface == PHY_INTERFACE_MODE_RGMII || in fec_restart()
986 fep->phy_interface == PHY_INTERFACE_MODE_RGMII_ID || in fec_restart()
987 fep->phy_interface == PHY_INTERFACE_MODE_RGMII_RXID || in fec_restart()
988 fep->phy_interface == PHY_INTERFACE_MODE_RGMII_TXID) in fec_restart()
990 else if (fep->phy_interface == PHY_INTERFACE_MODE_RMII) in fec_restart()
1006 if (fep->quirks & FEC_QUIRK_USE_GASKET) { in fec_restart()
1009 writel(0, fep->hwp + FEC_MIIGSK_ENR); in fec_restart()
1010 while (readl(fep->hwp + FEC_MIIGSK_ENR) & 4) in fec_restart()
1018 cfgr = (fep->phy_interface == PHY_INTERFACE_MODE_RMII) in fec_restart()
1022 writel(cfgr, fep->hwp + FEC_MIIGSK_CFGR); in fec_restart()
1025 writel(2, fep->hwp + FEC_MIIGSK_ENR); in fec_restart()
1032 if ((fep->pause_flag & FEC_PAUSE_FLAG_ENABLE) || in fec_restart()
1033 ((fep->pause_flag & FEC_PAUSE_FLAG_AUTONEG) && in fec_restart()
1038 writel(FEC_ENET_RSEM_V, fep->hwp + FEC_R_FIFO_RSEM); in fec_restart()
1039 writel(FEC_ENET_RSFL_V, fep->hwp + FEC_R_FIFO_RSFL); in fec_restart()
1040 writel(FEC_ENET_RAEM_V, fep->hwp + FEC_R_FIFO_RAEM); in fec_restart()
1041 writel(FEC_ENET_RAFL_V, fep->hwp + FEC_R_FIFO_RAFL); in fec_restart()
1044 writel(FEC_ENET_OPD_V, fep->hwp + FEC_OPD); in fec_restart()
1050 writel(rcntl, fep->hwp + FEC_R_CNTRL); in fec_restart()
1055 writel(0, fep->hwp + FEC_HASH_TABLE_HIGH); in fec_restart()
1056 writel(0, fep->hwp + FEC_HASH_TABLE_LOW); in fec_restart()
1059 if (fep->quirks & FEC_QUIRK_ENET_MAC) { in fec_restart()
1063 writel(1 << 8, fep->hwp + FEC_X_WMRK); in fec_restart()
1066 if (fep->bufdesc_ex) in fec_restart()
1071 writel(0 << 31, fep->hwp + FEC_MIB_CTRLSTAT); in fec_restart()
1075 writel(ecntl, fep->hwp + FEC_ECNTRL); in fec_restart()
1078 if (fep->bufdesc_ex) in fec_restart()
1082 if (fep->link) in fec_restart()
1083 writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK); in fec_restart()
1085 writel(FEC_ENET_MII, fep->hwp + FEC_IMASK); in fec_restart()
1095 struct fec_enet_private *fep = netdev_priv(ndev); in fec_stop() local
1096 struct fec_platform_data *pdata = fep->pdev->dev.platform_data; in fec_stop()
1097 u32 rmii_mode = readl(fep->hwp + FEC_R_CNTRL) & (1 << 8); in fec_stop()
1101 if (fep->link) { in fec_stop()
1102 writel(1, fep->hwp + FEC_X_CNTRL); /* Graceful transmit stop */ in fec_stop()
1104 if (!(readl(fep->hwp + FEC_IEVENT) & FEC_ENET_GRA)) in fec_stop()
1112 if (!(fep->wol_flag & FEC_WOL_FLAG_SLEEP_ON)) { in fec_stop()
1113 if (fep->quirks & FEC_QUIRK_HAS_AVB) { in fec_stop()
1114 writel(0, fep->hwp + FEC_ECNTRL); in fec_stop()
1116 writel(1, fep->hwp + FEC_ECNTRL); in fec_stop()
1119 writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK); in fec_stop()
1121 writel(FEC_DEFAULT_IMASK | FEC_ENET_WAKEUP, fep->hwp + FEC_IMASK); in fec_stop()
1122 val = readl(fep->hwp + FEC_ECNTRL); in fec_stop()
1124 writel(val, fep->hwp + FEC_ECNTRL); in fec_stop()
1129 writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED); in fec_stop()
1132 if (fep->quirks & FEC_QUIRK_ENET_MAC && in fec_stop()
1133 !(fep->wol_flag & FEC_WOL_FLAG_SLEEP_ON)) { in fec_stop()
1134 writel(2, fep->hwp + FEC_ECNTRL); in fec_stop()
1135 writel(rmii_mode, fep->hwp + FEC_R_CNTRL); in fec_stop()
1143 struct fec_enet_private *fep = netdev_priv(ndev); in fec_timeout() local
1149 schedule_work(&fep->tx_timeout_work); in fec_timeout()
1154 struct fec_enet_private *fep = in fec_enet_timeout_work() local
1156 struct net_device *ndev = fep->netdev; in fec_enet_timeout_work()
1160 napi_disable(&fep->napi); in fec_enet_timeout_work()
1165 napi_enable(&fep->napi); in fec_enet_timeout_work()
1171 fec_enet_hwtstamp(struct fec_enet_private *fep, unsigned ts, in fec_enet_hwtstamp() argument
1177 spin_lock_irqsave(&fep->tmreg_lock, flags); in fec_enet_hwtstamp()
1178 ns = timecounter_cyc2time(&fep->tc, ts); in fec_enet_hwtstamp()
1179 spin_unlock_irqrestore(&fep->tmreg_lock, flags); in fec_enet_hwtstamp()
1188 struct fec_enet_private *fep; in fec_enet_tx_queue() local
1197 fep = netdev_priv(ndev); in fec_enet_tx_queue()
1201 txq = fep->tx_queue[queue_id]; in fec_enet_tx_queue()
1221 dma_unmap_single(&fep->pdev->dev, in fec_enet_tx_queue()
1250 fep->bufdesc_ex) { in fec_enet_tx_queue()
1254 fec_enet_hwtstamp(fep, fec32_to_cpu(ebdp->ts), &shhwtstamps); in fec_enet_tx_queue()
1294 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_tx() local
1297 for_each_set_bit(queue_id, &fep->work_tx, FEC_ENET_MAX_TX_QS) { in fec_enet_tx()
1298 clear_bit(queue_id, &fep->work_tx); in fec_enet_tx()
1307 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_new_rxbdp() local
1310 off = ((unsigned long)skb->data) & fep->rx_align; in fec_enet_new_rxbdp()
1312 skb_reserve(skb, fep->rx_align + 1 - off); in fec_enet_new_rxbdp()
1314 …bdp->cbd_bufaddr = cpu_to_fec32(dma_map_single(&fep->pdev->dev, skb->data, FEC_ENET_RX_FRSIZE - fe… in fec_enet_new_rxbdp()
1315 if (dma_mapping_error(&fep->pdev->dev, fec32_to_cpu(bdp->cbd_bufaddr))) { in fec_enet_new_rxbdp()
1327 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_copybreak() local
1330 if (length > fep->rx_copybreak) in fec_enet_copybreak()
1337 dma_sync_single_for_cpu(&fep->pdev->dev, in fec_enet_copybreak()
1339 FEC_ENET_RX_FRSIZE - fep->rx_align, in fec_enet_copybreak()
1358 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_rx_queue() local
1372 bool need_swap = fep->quirks & FEC_QUIRK_SWAP_FRAME; in fec_enet_rx_queue()
1378 rxq = fep->rx_queue[queue_id]; in fec_enet_rx_queue()
1391 writel(FEC_ENET_RXF, fep->hwp + FEC_IEVENT); in fec_enet_rx_queue()
1439 dma_unmap_single(&fep->pdev->dev, in fec_enet_rx_queue()
1441 FEC_ENET_RX_FRSIZE - fep->rx_align, in fec_enet_rx_queue()
1453 if (fep->quirks & FEC_QUIRK_HAS_RACC) in fec_enet_rx_queue()
1459 if (fep->bufdesc_ex) in fec_enet_rx_queue()
1465 fep->bufdesc_ex && in fec_enet_rx_queue()
1481 if (fep->hwts_rx_en && fep->bufdesc_ex) in fec_enet_rx_queue()
1482 fec_enet_hwtstamp(fep, fec32_to_cpu(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, in fec_enet_rx_queue()
1506 FEC_ENET_RX_FRSIZE - fep->rx_align, in fec_enet_rx_queue()
1520 if (fep->bufdesc_ex) { in fec_enet_rx_queue()
1551 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_rx() local
1553 for_each_set_bit(queue_id, &fep->work_rx, FEC_ENET_MAX_RX_QS) { in fec_enet_rx()
1560 clear_bit(queue_id, &fep->work_rx); in fec_enet_rx()
1568 fec_enet_collect_events(struct fec_enet_private *fep, uint int_events) in fec_enet_collect_events() argument
1574 fep->work_rx |= (1 << 2); in fec_enet_collect_events()
1576 fep->work_rx |= (1 << 0); in fec_enet_collect_events()
1578 fep->work_rx |= (1 << 1); in fec_enet_collect_events()
1581 fep->work_tx |= (1 << 2); in fec_enet_collect_events()
1583 fep->work_tx |= (1 << 0); in fec_enet_collect_events()
1585 fep->work_tx |= (1 << 1); in fec_enet_collect_events()
1594 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_interrupt() local
1598 int_events = readl(fep->hwp + FEC_IEVENT); in fec_enet_interrupt()
1599 writel(int_events, fep->hwp + FEC_IEVENT); in fec_enet_interrupt()
1600 fec_enet_collect_events(fep, int_events); in fec_enet_interrupt()
1602 if ((fep->work_tx || fep->work_rx) && fep->link) { in fec_enet_interrupt()
1605 if (napi_schedule_prep(&fep->napi)) { in fec_enet_interrupt()
1607 writel(FEC_NAPI_IMASK, fep->hwp + FEC_IMASK); in fec_enet_interrupt()
1608 __napi_schedule(&fep->napi); in fec_enet_interrupt()
1614 complete(&fep->mdio_done); in fec_enet_interrupt()
1622 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_rx_napi() local
1631 writel(FEC_DEFAULT_IMASK, fep->hwp + FEC_IMASK); in fec_enet_rx_napi()
1639 struct fec_enet_private *fep = netdev_priv(ndev); in fec_get_mac() local
1640 struct fec_platform_data *pdata = dev_get_platdata(&fep->pdev->dev); in fec_get_mac()
1655 struct device_node *np = fep->pdev->dev.of_node; in fec_get_mac()
1681 cpu_to_be32(readl(fep->hwp + FEC_ADDR_LOW)); in fec_get_mac()
1683 cpu_to_be16(readl(fep->hwp + FEC_ADDR_HIGH) >> 16); in fec_get_mac()
1703 ndev->dev_addr[ETH_ALEN-1] = macaddr[ETH_ALEN-1] + fep->dev_id; in fec_get_mac()
1713 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_adjust_link() local
1718 if (fep->mii_timeout && phy_dev->state == PHY_HALTED) { in fec_enet_adjust_link()
1729 fep->link = 0; in fec_enet_adjust_link()
1731 if (!fep->link) { in fec_enet_adjust_link()
1732 fep->link = phy_dev->link; in fec_enet_adjust_link()
1736 if (fep->full_duplex != phy_dev->duplex) { in fec_enet_adjust_link()
1737 fep->full_duplex = phy_dev->duplex; in fec_enet_adjust_link()
1741 if (phy_dev->speed != fep->speed) { in fec_enet_adjust_link()
1742 fep->speed = phy_dev->speed; in fec_enet_adjust_link()
1748 napi_disable(&fep->napi); in fec_enet_adjust_link()
1753 napi_enable(&fep->napi); in fec_enet_adjust_link()
1756 if (fep->link) { in fec_enet_adjust_link()
1757 napi_disable(&fep->napi); in fec_enet_adjust_link()
1761 napi_enable(&fep->napi); in fec_enet_adjust_link()
1762 fep->link = phy_dev->link; in fec_enet_adjust_link()
1773 struct fec_enet_private *fep = bus->priv; in fec_enet_mdio_read() local
1774 struct device *dev = &fep->pdev->dev; in fec_enet_mdio_read()
1782 fep->mii_timeout = 0; in fec_enet_mdio_read()
1783 reinit_completion(&fep->mdio_done); in fec_enet_mdio_read()
1788 FEC_MMFR_TA, fep->hwp + FEC_MII_DATA); in fec_enet_mdio_read()
1791 time_left = wait_for_completion_timeout(&fep->mdio_done, in fec_enet_mdio_read()
1794 fep->mii_timeout = 1; in fec_enet_mdio_read()
1795 netdev_err(fep->netdev, "MDIO read timeout\n"); in fec_enet_mdio_read()
1800 ret = FEC_MMFR_DATA(readl(fep->hwp + FEC_MII_DATA)); in fec_enet_mdio_read()
1812 struct fec_enet_private *fep = bus->priv; in fec_enet_mdio_write() local
1813 struct device *dev = &fep->pdev->dev; in fec_enet_mdio_write()
1823 fep->mii_timeout = 0; in fec_enet_mdio_write()
1824 reinit_completion(&fep->mdio_done); in fec_enet_mdio_write()
1830 fep->hwp + FEC_MII_DATA); in fec_enet_mdio_write()
1833 time_left = wait_for_completion_timeout(&fep->mdio_done, in fec_enet_mdio_write()
1836 fep->mii_timeout = 1; in fec_enet_mdio_write()
1837 netdev_err(fep->netdev, "MDIO write timeout\n"); in fec_enet_mdio_write()
1849 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_clk_enable() local
1853 ret = clk_prepare_enable(fep->clk_ahb); in fec_enet_clk_enable()
1857 ret = clk_prepare_enable(fep->clk_enet_out); in fec_enet_clk_enable()
1861 if (fep->clk_ptp) { in fec_enet_clk_enable()
1862 mutex_lock(&fep->ptp_clk_mutex); in fec_enet_clk_enable()
1863 ret = clk_prepare_enable(fep->clk_ptp); in fec_enet_clk_enable()
1865 mutex_unlock(&fep->ptp_clk_mutex); in fec_enet_clk_enable()
1868 fep->ptp_clk_on = true; in fec_enet_clk_enable()
1870 mutex_unlock(&fep->ptp_clk_mutex); in fec_enet_clk_enable()
1873 ret = clk_prepare_enable(fep->clk_ref); in fec_enet_clk_enable()
1879 clk_disable_unprepare(fep->clk_ahb); in fec_enet_clk_enable()
1880 clk_disable_unprepare(fep->clk_enet_out); in fec_enet_clk_enable()
1881 if (fep->clk_ptp) { in fec_enet_clk_enable()
1882 mutex_lock(&fep->ptp_clk_mutex); in fec_enet_clk_enable()
1883 clk_disable_unprepare(fep->clk_ptp); in fec_enet_clk_enable()
1884 fep->ptp_clk_on = false; in fec_enet_clk_enable()
1885 mutex_unlock(&fep->ptp_clk_mutex); in fec_enet_clk_enable()
1887 clk_disable_unprepare(fep->clk_ref); in fec_enet_clk_enable()
1893 if (fep->clk_ref) in fec_enet_clk_enable()
1894 clk_disable_unprepare(fep->clk_ref); in fec_enet_clk_enable()
1896 if (fep->clk_enet_out) in fec_enet_clk_enable()
1897 clk_disable_unprepare(fep->clk_enet_out); in fec_enet_clk_enable()
1899 clk_disable_unprepare(fep->clk_ahb); in fec_enet_clk_enable()
1906 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_mii_probe() local
1911 int dev_id = fep->dev_id; in fec_enet_mii_probe()
1913 if (fep->phy_node) { in fec_enet_mii_probe()
1914 phy_dev = of_phy_connect(ndev, fep->phy_node, in fec_enet_mii_probe()
1916 fep->phy_interface); in fec_enet_mii_probe()
1924 if (!mdiobus_is_registered_device(fep->mii_bus, phy_id)) in fec_enet_mii_probe()
1928 strlcpy(mdio_bus_id, fep->mii_bus->id, MII_BUS_ID_SIZE); in fec_enet_mii_probe()
1941 fep->phy_interface); in fec_enet_mii_probe()
1950 if (fep->quirks & FEC_QUIRK_HAS_GBIT) { in fec_enet_mii_probe()
1962 fep->link = 0; in fec_enet_mii_probe()
1963 fep->full_duplex = 0; in fec_enet_mii_probe()
1974 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_mii_init() local
1995 if ((fep->quirks & FEC_QUIRK_SINGLE_MDIO) && fep->dev_id > 0) { in fec_enet_mii_init()
1998 fep->mii_bus = fec0_mii_bus; in fec_enet_mii_init()
2005 fep->mii_timeout = 0; in fec_enet_mii_init()
2015 mii_speed = DIV_ROUND_UP(clk_get_rate(fep->clk_ipg), 5000000); in fec_enet_mii_init()
2016 if (fep->quirks & FEC_QUIRK_ENET_MAC) in fec_enet_mii_init()
2021 clk_get_rate(fep->clk_ipg)); in fec_enet_mii_init()
2038 holdtime = DIV_ROUND_UP(clk_get_rate(fep->clk_ipg), 100000000) - 1; in fec_enet_mii_init()
2040 fep->phy_speed = mii_speed << 1 | holdtime << 8; in fec_enet_mii_init()
2042 writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED); in fec_enet_mii_init()
2044 fep->mii_bus = mdiobus_alloc(); in fec_enet_mii_init()
2045 if (fep->mii_bus == NULL) { in fec_enet_mii_init()
2050 fep->mii_bus->name = "fec_enet_mii_bus"; in fec_enet_mii_init()
2051 fep->mii_bus->read = fec_enet_mdio_read; in fec_enet_mii_init()
2052 fep->mii_bus->write = fec_enet_mdio_write; in fec_enet_mii_init()
2053 snprintf(fep->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x", in fec_enet_mii_init()
2054 pdev->name, fep->dev_id + 1); in fec_enet_mii_init()
2055 fep->mii_bus->priv = fep; in fec_enet_mii_init()
2056 fep->mii_bus->parent = &pdev->dev; in fec_enet_mii_init()
2059 err = of_mdiobus_register(fep->mii_bus, node); in fec_enet_mii_init()
2068 if (fep->quirks & FEC_QUIRK_SINGLE_MDIO) in fec_enet_mii_init()
2069 fec0_mii_bus = fep->mii_bus; in fec_enet_mii_init()
2074 mdiobus_free(fep->mii_bus); in fec_enet_mii_init()
2079 static void fec_enet_mii_remove(struct fec_enet_private *fep) in fec_enet_mii_remove() argument
2082 mdiobus_unregister(fep->mii_bus); 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_drvinfo() local
2092 strlcpy(info->driver, fep->pdev->dev.driver->name, in fec_enet_get_drvinfo()
2100 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_get_regs_len() local
2104 r = platform_get_resource(fep->pdev, IORESOURCE_MEM, 0); in fec_enet_get_regs_len()
2161 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_get_regs() local
2162 u32 __iomem *theregs = (u32 __iomem *)fep->hwp; in fec_enet_get_regs()
2172 !(fep->quirks & FEC_QUIRK_HAS_FRREG)) in fec_enet_get_regs()
2183 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_get_ts_info() local
2185 if (fep->bufdesc_ex) { in fec_enet_get_ts_info()
2193 if (fep->ptp_clock) in fec_enet_get_ts_info()
2194 info->phc_index = ptp_clock_index(fep->ptp_clock); in fec_enet_get_ts_info()
2214 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_get_pauseparam() local
2216 pause->autoneg = (fep->pause_flag & FEC_PAUSE_FLAG_AUTONEG) != 0; in fec_enet_get_pauseparam()
2217 pause->tx_pause = (fep->pause_flag & FEC_PAUSE_FLAG_ENABLE) != 0; in fec_enet_get_pauseparam()
2224 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_set_pauseparam() local
2235 fep->pause_flag = 0; in fec_enet_set_pauseparam()
2238 fep->pause_flag |= pause->rx_pause ? FEC_PAUSE_FLAG_ENABLE : 0; in fec_enet_set_pauseparam()
2239 fep->pause_flag |= pause->autoneg ? FEC_PAUSE_FLAG_AUTONEG : 0; in fec_enet_set_pauseparam()
2255 napi_disable(&fep->napi); in fec_enet_set_pauseparam()
2260 napi_enable(&fep->napi); in fec_enet_set_pauseparam()
2336 struct fec_enet_private *fep = netdev_priv(dev); in fec_enet_update_ethtool_stats() local
2340 fep->ethtool_stats[i] = readl(fep->hwp + fec_stats[i].offset); in fec_enet_update_ethtool_stats()
2346 struct fec_enet_private *fep = netdev_priv(dev); in fec_enet_get_ethtool_stats() local
2351 memcpy(data, fep->ethtool_stats, FEC_STATS_SIZE); in fec_enet_get_ethtool_stats()
2379 struct fec_enet_private *fep = netdev_priv(dev); in fec_enet_clear_ethtool_stats() local
2383 writel(FEC_MIB_CTRLSTAT_DISABLE, fep->hwp + FEC_MIB_CTRLSTAT); in fec_enet_clear_ethtool_stats()
2386 writel(0, fep->hwp + fec_stats[i].offset); in fec_enet_clear_ethtool_stats()
2389 writel(0, fep->hwp + FEC_MIB_CTRLSTAT); in fec_enet_clear_ethtool_stats()
2409 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_us_to_itr_clock() local
2411 return us * (fep->itr_clk_rate / 64000) / 1000; in fec_enet_us_to_itr_clock()
2417 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_itr_coal_set() local
2421 if (!fep->rx_time_itr || !fep->rx_pkts_itr || in fec_enet_itr_coal_set()
2422 !fep->tx_time_itr || !fep->tx_pkts_itr) in fec_enet_itr_coal_set()
2432 rx_itr |= FEC_ITR_ICFT(fep->rx_pkts_itr); in fec_enet_itr_coal_set()
2433 rx_itr |= FEC_ITR_ICTT(fec_enet_us_to_itr_clock(ndev, fep->rx_time_itr)); in fec_enet_itr_coal_set()
2434 tx_itr |= FEC_ITR_ICFT(fep->tx_pkts_itr); in fec_enet_itr_coal_set()
2435 tx_itr |= FEC_ITR_ICTT(fec_enet_us_to_itr_clock(ndev, fep->tx_time_itr)); in fec_enet_itr_coal_set()
2440 writel(tx_itr, fep->hwp + FEC_TXIC0); in fec_enet_itr_coal_set()
2441 writel(rx_itr, fep->hwp + FEC_RXIC0); in fec_enet_itr_coal_set()
2442 if (fep->quirks & FEC_QUIRK_HAS_AVB) { in fec_enet_itr_coal_set()
2443 writel(tx_itr, fep->hwp + FEC_TXIC1); in fec_enet_itr_coal_set()
2444 writel(rx_itr, fep->hwp + FEC_RXIC1); in fec_enet_itr_coal_set()
2445 writel(tx_itr, fep->hwp + FEC_TXIC2); in fec_enet_itr_coal_set()
2446 writel(rx_itr, fep->hwp + FEC_RXIC2); in fec_enet_itr_coal_set()
2453 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_get_coalesce() local
2455 if (!(fep->quirks & FEC_QUIRK_HAS_COALESCE)) in fec_enet_get_coalesce()
2458 ec->rx_coalesce_usecs = fep->rx_time_itr; in fec_enet_get_coalesce()
2459 ec->rx_max_coalesced_frames = fep->rx_pkts_itr; in fec_enet_get_coalesce()
2461 ec->tx_coalesce_usecs = fep->tx_time_itr; in fec_enet_get_coalesce()
2462 ec->tx_max_coalesced_frames = fep->tx_pkts_itr; in fec_enet_get_coalesce()
2470 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_set_coalesce() local
2473 if (!(fep->quirks & FEC_QUIRK_HAS_COALESCE)) in fec_enet_set_coalesce()
2486 cycle = fec_enet_us_to_itr_clock(ndev, fep->rx_time_itr); in fec_enet_set_coalesce()
2492 cycle = fec_enet_us_to_itr_clock(ndev, fep->tx_time_itr); in fec_enet_set_coalesce()
2498 fep->rx_time_itr = ec->rx_coalesce_usecs; in fec_enet_set_coalesce()
2499 fep->rx_pkts_itr = ec->rx_max_coalesced_frames; in fec_enet_set_coalesce()
2501 fep->tx_time_itr = ec->tx_coalesce_usecs; in fec_enet_set_coalesce()
2502 fep->tx_pkts_itr = ec->tx_max_coalesced_frames; in fec_enet_set_coalesce()
2526 struct fec_enet_private *fep = netdev_priv(netdev); in fec_enet_get_tunable() local
2531 *(u32 *)data = fep->rx_copybreak; in fec_enet_get_tunable()
2545 struct fec_enet_private *fep = netdev_priv(netdev); in fec_enet_set_tunable() local
2550 fep->rx_copybreak = *(u32 *)data; in fec_enet_set_tunable()
2563 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_get_wol() local
2565 if (fep->wol_flag & FEC_WOL_HAS_MAGIC_PACKET) { in fec_enet_get_wol()
2567 wol->wolopts = fep->wol_flag & FEC_WOL_FLAG_ENABLE ? WAKE_MAGIC : 0; in fec_enet_get_wol()
2576 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_set_wol() local
2578 if (!(fep->wol_flag & FEC_WOL_HAS_MAGIC_PACKET)) in fec_enet_set_wol()
2586 fep->wol_flag |= FEC_WOL_FLAG_ENABLE; in fec_enet_set_wol()
2587 if (fep->irq[0] > 0) in fec_enet_set_wol()
2588 enable_irq_wake(fep->irq[0]); in fec_enet_set_wol()
2590 fep->wol_flag &= (~FEC_WOL_FLAG_ENABLE); in fec_enet_set_wol()
2591 if (fep->irq[0] > 0) in fec_enet_set_wol()
2592 disable_irq_wake(fep->irq[0]); in fec_enet_set_wol()
2624 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_ioctl() local
2633 if (fep->bufdesc_ex) { in fec_enet_ioctl()
2645 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_free_buffers() local
2653 for (q = 0; q < fep->num_rx_queues; q++) { in fec_enet_free_buffers()
2654 rxq = fep->rx_queue[q]; in fec_enet_free_buffers()
2660 dma_unmap_single(&fep->pdev->dev, in fec_enet_free_buffers()
2662 FEC_ENET_RX_FRSIZE - fep->rx_align, in fec_enet_free_buffers()
2670 for (q = 0; q < fep->num_tx_queues; q++) { in fec_enet_free_buffers()
2671 txq = fep->tx_queue[q]; in fec_enet_free_buffers()
2685 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_free_queue() local
2689 for (i = 0; i < fep->num_tx_queues; i++) in fec_enet_free_queue()
2690 if (fep->tx_queue[i] && fep->tx_queue[i]->tso_hdrs) { in fec_enet_free_queue()
2691 txq = fep->tx_queue[i]; in fec_enet_free_queue()
2692 dma_free_coherent(&fep->pdev->dev, in fec_enet_free_queue()
2698 for (i = 0; i < fep->num_rx_queues; i++) in fec_enet_free_queue()
2699 kfree(fep->rx_queue[i]); in fec_enet_free_queue()
2700 for (i = 0; i < fep->num_tx_queues; i++) in fec_enet_free_queue()
2701 kfree(fep->tx_queue[i]); in fec_enet_free_queue()
2706 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_alloc_queue() local
2711 for (i = 0; i < fep->num_tx_queues; i++) { in fec_enet_alloc_queue()
2718 fep->tx_queue[i] = txq; in fec_enet_alloc_queue()
2720 fep->total_tx_ring_size += fep->tx_queue[i]->bd.ring_size; in fec_enet_alloc_queue()
2726 txq->tso_hdrs = dma_alloc_coherent(&fep->pdev->dev, in fec_enet_alloc_queue()
2736 for (i = 0; i < fep->num_rx_queues; i++) { in fec_enet_alloc_queue()
2737 fep->rx_queue[i] = kzalloc(sizeof(*fep->rx_queue[i]), in fec_enet_alloc_queue()
2739 if (!fep->rx_queue[i]) { in fec_enet_alloc_queue()
2744 fep->rx_queue[i]->bd.ring_size = RX_RING_SIZE; in fec_enet_alloc_queue()
2745 fep->total_rx_ring_size += fep->rx_queue[i]->bd.ring_size; in fec_enet_alloc_queue()
2757 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_alloc_rxq_buffers() local
2763 rxq = fep->rx_queue[queue]; in fec_enet_alloc_rxq_buffers()
2778 if (fep->bufdesc_ex) { in fec_enet_alloc_rxq_buffers()
2799 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_alloc_txq_buffers() local
2804 txq = fep->tx_queue[queue]; in fec_enet_alloc_txq_buffers()
2814 if (fep->bufdesc_ex) { in fec_enet_alloc_txq_buffers()
2835 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_alloc_buffers() local
2838 for (i = 0; i < fep->num_rx_queues; i++) in fec_enet_alloc_buffers()
2842 for (i = 0; i < fep->num_tx_queues; i++) in fec_enet_alloc_buffers()
2851 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_open() local
2855 ret = pm_runtime_get_sync(&fep->pdev->dev); in fec_enet_open()
2859 pinctrl_pm_select_default_state(&fep->pdev->dev); in fec_enet_open()
2897 if (fep->quirks & FEC_QUIRK_ERR006687) in fec_enet_open()
2900 napi_enable(&fep->napi); in fec_enet_open()
2904 device_set_wakeup_enable(&ndev->dev, fep->wol_flag & in fec_enet_open()
2914 pm_runtime_mark_last_busy(&fep->pdev->dev); in fec_enet_open()
2915 pm_runtime_put_autosuspend(&fep->pdev->dev); in fec_enet_open()
2916 pinctrl_pm_select_sleep_state(&fep->pdev->dev); in fec_enet_open()
2923 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_close() local
2928 napi_disable(&fep->napi); in fec_enet_close()
2935 if (fep->quirks & FEC_QUIRK_ERR006687) in fec_enet_close()
2941 pinctrl_pm_select_sleep_state(&fep->pdev->dev); in fec_enet_close()
2942 pm_runtime_mark_last_busy(&fep->pdev->dev); in fec_enet_close()
2943 pm_runtime_put_autosuspend(&fep->pdev->dev); in fec_enet_close()
2964 struct fec_enet_private *fep = netdev_priv(ndev); in set_multicast_list() local
2971 tmp = readl(fep->hwp + FEC_R_CNTRL); in set_multicast_list()
2973 writel(tmp, fep->hwp + FEC_R_CNTRL); in set_multicast_list()
2977 tmp = readl(fep->hwp + FEC_R_CNTRL); in set_multicast_list()
2979 writel(tmp, fep->hwp + FEC_R_CNTRL); in set_multicast_list()
2985 writel(0xffffffff, fep->hwp + FEC_GRP_HASH_TABLE_HIGH); in set_multicast_list()
2986 writel(0xffffffff, fep->hwp + FEC_GRP_HASH_TABLE_LOW); in set_multicast_list()
3007 writel(hash_high, fep->hwp + FEC_GRP_HASH_TABLE_HIGH); in set_multicast_list()
3008 writel(hash_low, fep->hwp + FEC_GRP_HASH_TABLE_LOW); in set_multicast_list()
3015 struct fec_enet_private *fep = netdev_priv(ndev); in fec_set_mac_address() local
3034 fep->hwp + FEC_ADDR_LOW); in fec_set_mac_address()
3036 fep->hwp + FEC_ADDR_HIGH); in fec_set_mac_address()
3051 struct fec_enet_private *fep = netdev_priv(dev); in fec_poll_controller() local
3054 if (fep->irq[i] > 0) { in fec_poll_controller()
3055 disable_irq(fep->irq[i]); in fec_poll_controller()
3056 fec_enet_interrupt(fep->irq[i], dev); in fec_poll_controller()
3057 enable_irq(fep->irq[i]); in fec_poll_controller()
3066 struct fec_enet_private *fep = netdev_priv(netdev); in fec_enet_set_netdev_features() local
3074 fep->csum_flags |= FLAG_RX_CSUM_ENABLED; in fec_enet_set_netdev_features()
3076 fep->csum_flags &= ~FLAG_RX_CSUM_ENABLED; in fec_enet_set_netdev_features()
3083 struct fec_enet_private *fep = netdev_priv(netdev); in fec_set_features() local
3087 napi_disable(&fep->napi); in fec_set_features()
3094 napi_enable(&fep->napi); in fec_set_features()
3131 struct fec_enet_private *fep = netdev_priv(ndev); in fec_enet_init() local
3136 unsigned dsize = fep->bufdesc_ex ? sizeof(struct bufdesc_ex) : in fec_enet_init()
3143 fep->rx_align = 0xf; in fec_enet_init()
3144 fep->tx_align = 0xf; in fec_enet_init()
3146 fep->rx_align = 0x3; in fec_enet_init()
3147 fep->tx_align = 0x3; in fec_enet_init()
3151 ret = dma_set_mask_and_coherent(&fep->pdev->dev, DMA_BIT_MASK(32)); in fec_enet_init()
3153 dev_warn(&fep->pdev->dev, "No suitable DMA available\n"); in fec_enet_init()
3159 bd_size = (fep->total_tx_ring_size + fep->total_rx_ring_size) * dsize; in fec_enet_init()
3162 cbd_base = dmam_alloc_coherent(&fep->pdev->dev, bd_size, &bd_dma, in fec_enet_init()
3176 for (i = 0; i < fep->num_rx_queues; i++) { in fec_enet_init()
3177 struct fec_enet_priv_rx_q *rxq = fep->rx_queue[i]; in fec_enet_init()
3186 rxq->bd.reg_desc_active = fep->hwp + offset_des_active_rxq[i]; in fec_enet_init()
3192 for (i = 0; i < fep->num_tx_queues; i++) { in fec_enet_init()
3193 struct fec_enet_priv_tx_q *txq = fep->tx_queue[i]; in fec_enet_init()
3202 txq->bd.reg_desc_active = fep->hwp + offset_des_active_txq[i]; in fec_enet_init()
3214 writel(FEC_RX_DISABLED_IMASK, fep->hwp + FEC_IMASK); in fec_enet_init()
3215 netif_napi_add(ndev, &fep->napi, fec_enet_rx_napi, NAPI_POLL_WEIGHT); in fec_enet_init()
3217 if (fep->quirks & FEC_QUIRK_HAS_VLAN) in fec_enet_init()
3221 if (fep->quirks & FEC_QUIRK_HAS_CSUM) { in fec_enet_init()
3227 fep->csum_flags |= FLAG_RX_CSUM_ENABLED; in fec_enet_init()
3230 if (fep->quirks & FEC_QUIRK_HAS_AVB) { in fec_enet_init()
3231 fep->tx_align = 0; in fec_enet_init()
3232 fep->rx_align = 0x3f; in fec_enet_init()
3239 if (fep->quirks & FEC_QUIRK_MIB_CLEAR) in fec_enet_init()
3360 struct fec_enet_private *fep; in fec_probe() local
3384 fep = netdev_priv(ndev); in fec_probe()
3389 fep->quirks = pdev->id_entry->driver_data; in fec_probe()
3391 fep->netdev = ndev; in fec_probe()
3392 fep->num_rx_queues = num_rx_qs; in fec_probe()
3393 fep->num_tx_queues = num_tx_qs; in fec_probe()
3397 if (fep->quirks & FEC_QUIRK_HAS_GBIT) in fec_probe()
3398 fep->pause_flag |= FEC_PAUSE_FLAG_AUTONEG; in fec_probe()
3405 fep->hwp = devm_ioremap_resource(&pdev->dev, r); in fec_probe()
3406 if (IS_ERR(fep->hwp)) { in fec_probe()
3407 ret = PTR_ERR(fep->hwp); in fec_probe()
3411 fep->pdev = pdev; in fec_probe()
3412 fep->dev_id = dev_id++; in fec_probe()
3419 fep->quirks |= FEC_QUIRK_ERR006687; in fec_probe()
3422 fep->wol_flag |= FEC_WOL_HAS_MAGIC_PACKET; in fec_probe()
3434 fep->phy_node = phy_node; in fec_probe()
3440 fep->phy_interface = pdata->phy; in fec_probe()
3442 fep->phy_interface = PHY_INTERFACE_MODE_MII; in fec_probe()
3444 fep->phy_interface = ret; in fec_probe()
3447 fep->clk_ipg = devm_clk_get(&pdev->dev, "ipg"); in fec_probe()
3448 if (IS_ERR(fep->clk_ipg)) { in fec_probe()
3449 ret = PTR_ERR(fep->clk_ipg); in fec_probe()
3453 fep->clk_ahb = devm_clk_get(&pdev->dev, "ahb"); in fec_probe()
3454 if (IS_ERR(fep->clk_ahb)) { in fec_probe()
3455 ret = PTR_ERR(fep->clk_ahb); in fec_probe()
3459 fep->itr_clk_rate = clk_get_rate(fep->clk_ahb); in fec_probe()
3462 fep->clk_enet_out = devm_clk_get(&pdev->dev, "enet_out"); in fec_probe()
3463 if (IS_ERR(fep->clk_enet_out)) in fec_probe()
3464 fep->clk_enet_out = NULL; in fec_probe()
3466 fep->ptp_clk_on = false; in fec_probe()
3467 mutex_init(&fep->ptp_clk_mutex); in fec_probe()
3470 fep->clk_ref = devm_clk_get(&pdev->dev, "enet_clk_ref"); in fec_probe()
3471 if (IS_ERR(fep->clk_ref)) in fec_probe()
3472 fep->clk_ref = NULL; in fec_probe()
3474 fep->bufdesc_ex = fep->quirks & FEC_QUIRK_HAS_BUFDESC_EX; in fec_probe()
3475 fep->clk_ptp = devm_clk_get(&pdev->dev, "ptp"); in fec_probe()
3476 if (IS_ERR(fep->clk_ptp)) { in fec_probe()
3477 fep->clk_ptp = NULL; in fec_probe()
3478 fep->bufdesc_ex = false; in fec_probe()
3485 ret = clk_prepare_enable(fep->clk_ipg); in fec_probe()
3489 fep->reg_phy = devm_regulator_get(&pdev->dev, "phy"); in fec_probe()
3490 if (!IS_ERR(fep->reg_phy)) { in fec_probe()
3491 ret = regulator_enable(fep->reg_phy); in fec_probe()
3495 clk_disable_unprepare(fep->clk_ipg); in fec_probe()
3499 if (PTR_ERR(fep->reg_phy) == -EPROBE_DEFER) { in fec_probe()
3503 fep->reg_phy = NULL; in fec_probe()
3517 if (fep->bufdesc_ex) in fec_probe()
3538 fep->irq[i] = irq; in fec_probe()
3541 init_completion(&fep->mdio_done); in fec_probe()
3555 device_init_wakeup(&ndev->dev, fep->wol_flag & in fec_probe()
3558 if (fep->bufdesc_ex && fep->ptp_clock) in fec_probe()
3559 netdev_info(ndev, "registered PHC device %d\n", fep->dev_id); in fec_probe()
3561 fep->rx_copybreak = COPYBREAK_DEFAULT; in fec_probe()
3562 INIT_WORK(&fep->tx_timeout_work, fec_enet_timeout_work); in fec_probe()
3570 fec_enet_mii_remove(fep); in fec_probe()
3575 if (fep->reg_phy) in fec_probe()
3576 regulator_disable(fep->reg_phy); in fec_probe()
3599 struct fec_enet_private *fep = netdev_priv(ndev); in fec_drv_remove() local
3602 cancel_work_sync(&fep->tx_timeout_work); in fec_drv_remove()
3605 fec_enet_mii_remove(fep); in fec_drv_remove()
3606 if (fep->reg_phy) in fec_drv_remove()
3607 regulator_disable(fep->reg_phy); in fec_drv_remove()
3612 of_node_put(fep->phy_node); in fec_drv_remove()
3621 struct fec_enet_private *fep = netdev_priv(ndev); in fec_suspend() local
3625 if (fep->wol_flag & FEC_WOL_FLAG_ENABLE) in fec_suspend()
3626 fep->wol_flag |= FEC_WOL_FLAG_SLEEP_ON; in fec_suspend()
3628 napi_disable(&fep->napi); in fec_suspend()
3634 if (!(fep->wol_flag & FEC_WOL_FLAG_ENABLE)) in fec_suspend()
3635 pinctrl_pm_select_sleep_state(&fep->pdev->dev); in fec_suspend()
3639 if (fep->reg_phy && !(fep->wol_flag & FEC_WOL_FLAG_ENABLE)) in fec_suspend()
3640 regulator_disable(fep->reg_phy); in fec_suspend()
3645 if (fep->clk_enet_out || fep->reg_phy) in fec_suspend()
3646 fep->link = 0; in fec_suspend()
3654 struct fec_enet_private *fep = netdev_priv(ndev); in fec_resume() local
3655 struct fec_platform_data *pdata = fep->pdev->dev.platform_data; in fec_resume()
3659 if (fep->reg_phy && !(fep->wol_flag & FEC_WOL_FLAG_ENABLE)) { in fec_resume()
3660 ret = regulator_enable(fep->reg_phy); in fec_resume()
3672 if (fep->wol_flag & FEC_WOL_FLAG_ENABLE) { in fec_resume()
3675 val = readl(fep->hwp + FEC_ECNTRL); in fec_resume()
3677 writel(val, fep->hwp + FEC_ECNTRL); in fec_resume()
3678 fep->wol_flag &= ~FEC_WOL_FLAG_SLEEP_ON; in fec_resume()
3680 pinctrl_pm_select_default_state(&fep->pdev->dev); in fec_resume()
3686 napi_enable(&fep->napi); in fec_resume()
3694 if (fep->reg_phy) in fec_resume()
3695 regulator_disable(fep->reg_phy); in fec_resume()
3702 struct fec_enet_private *fep = netdev_priv(ndev); in fec_runtime_suspend() local
3704 clk_disable_unprepare(fep->clk_ipg); in fec_runtime_suspend()
3712 struct fec_enet_private *fep = netdev_priv(ndev); in fec_runtime_resume() local
3714 return clk_prepare_enable(fep->clk_ipg); in fec_runtime_resume()