Lines Matching +full:asym +full:- +full:pause
1 // SPDX-License-Identifier: GPL-2.0
4 * Copyright (C) 2014-2019 Renesas Electronics Corporation
6 * Copyright (C) 2015-2016 Cogent Embedded, Inc. <source@cogentembedded.com>
14 #include <linux/dma-mapping.h>
69 return -ETIMEDOUT; in ravb_wait()
90 switch (priv->speed) { in ravb_set_rate()
102 u32 reserve = (unsigned long)skb->data & (RAVB_ALIGN - 1); in ravb_set_buffer_align()
105 skb_reserve(skb, RAVB_ALIGN - reserve); in ravb_set_buffer_align()
118 ret = of_get_mac_address(np, ndev->dev_addr); in ravb_read_mac_address()
123 ndev->dev_addr[0] = (mahr >> 24) & 0xFF; in ravb_read_mac_address()
124 ndev->dev_addr[1] = (mahr >> 16) & 0xFF; in ravb_read_mac_address()
125 ndev->dev_addr[2] = (mahr >> 8) & 0xFF; in ravb_read_mac_address()
126 ndev->dev_addr[3] = (mahr >> 0) & 0xFF; in ravb_read_mac_address()
127 ndev->dev_addr[4] = (malr >> 8) & 0xFF; in ravb_read_mac_address()
128 ndev->dev_addr[5] = (malr >> 0) & 0xFF; in ravb_read_mac_address()
137 ravb_modify(priv->ndev, PIR, mask, set ? mask : 0); in ravb_mdio_ctrl()
164 return (ravb_read(priv->ndev, PIR) & PIR_MDI) != 0; in ravb_get_mdio_data()
176 /* Free TX skb function for AVB-IP */
180 struct net_device_stats *stats = &priv->stats[q]; in ravb_tx_free()
181 unsigned int num_tx_desc = priv->num_tx_desc; in ravb_tx_free()
187 for (; priv->cur_tx[q] - priv->dirty_tx[q] > 0; priv->dirty_tx[q]++) { in ravb_tx_free()
190 entry = priv->dirty_tx[q] % (priv->num_tx_ring[q] * in ravb_tx_free()
192 desc = &priv->tx_ring[q][entry]; in ravb_tx_free()
193 txed = desc->die_dt == DT_FEMPTY; in ravb_tx_free()
198 size = le16_to_cpu(desc->ds_tagl) & TX_DS; in ravb_tx_free()
200 if (priv->tx_skb[q][entry / num_tx_desc]) { in ravb_tx_free()
201 dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr), in ravb_tx_free()
204 if (entry % num_tx_desc == num_tx_desc - 1) { in ravb_tx_free()
206 dev_kfree_skb_any(priv->tx_skb[q][entry]); in ravb_tx_free()
207 priv->tx_skb[q][entry] = NULL; in ravb_tx_free()
209 stats->tx_packets++; in ravb_tx_free()
214 stats->tx_bytes += size; in ravb_tx_free()
215 desc->die_dt = DT_EEMPTY; in ravb_tx_free()
226 if (!priv->rx_ring[q]) in ravb_rx_ring_free()
229 for (i = 0; i < priv->num_rx_ring[q]; i++) { in ravb_rx_ring_free()
230 struct ravb_ex_rx_desc *desc = &priv->rx_ring[q][i]; in ravb_rx_ring_free()
232 if (!dma_mapping_error(ndev->dev.parent, in ravb_rx_ring_free()
233 le32_to_cpu(desc->dptr))) in ravb_rx_ring_free()
234 dma_unmap_single(ndev->dev.parent, in ravb_rx_ring_free()
235 le32_to_cpu(desc->dptr), in ravb_rx_ring_free()
240 (priv->num_rx_ring[q] + 1); in ravb_rx_ring_free()
241 dma_free_coherent(ndev->dev.parent, ring_size, priv->rx_ring[q], in ravb_rx_ring_free()
242 priv->rx_desc_dma[q]); in ravb_rx_ring_free()
243 priv->rx_ring[q] = NULL; in ravb_rx_ring_free()
250 const struct ravb_hw_info *info = priv->info; in ravb_ring_free()
251 unsigned int num_tx_desc = priv->num_tx_desc; in ravb_ring_free()
255 info->rx_ring_free(ndev, q); in ravb_ring_free()
257 if (priv->tx_ring[q]) { in ravb_ring_free()
261 (priv->num_tx_ring[q] * num_tx_desc + 1); in ravb_ring_free()
262 dma_free_coherent(ndev->dev.parent, ring_size, priv->tx_ring[q], in ravb_ring_free()
263 priv->tx_desc_dma[q]); in ravb_ring_free()
264 priv->tx_ring[q] = NULL; in ravb_ring_free()
268 if (priv->rx_skb[q]) { in ravb_ring_free()
269 for (i = 0; i < priv->num_rx_ring[q]; i++) in ravb_ring_free()
270 dev_kfree_skb(priv->rx_skb[q][i]); in ravb_ring_free()
272 kfree(priv->rx_skb[q]); in ravb_ring_free()
273 priv->rx_skb[q] = NULL; in ravb_ring_free()
276 kfree(priv->tx_align[q]); in ravb_ring_free()
277 priv->tx_align[q] = NULL; in ravb_ring_free()
282 kfree(priv->tx_skb[q]); in ravb_ring_free()
283 priv->tx_skb[q] = NULL; in ravb_ring_free()
290 unsigned int rx_ring_size = sizeof(*rx_desc) * priv->num_rx_ring[q]; in ravb_rx_ring_format()
294 memset(priv->rx_ring[q], 0, rx_ring_size); in ravb_rx_ring_format()
296 for (i = 0; i < priv->num_rx_ring[q]; i++) { in ravb_rx_ring_format()
298 rx_desc = &priv->rx_ring[q][i]; in ravb_rx_ring_format()
299 rx_desc->ds_cc = cpu_to_le16(RX_BUF_SZ); in ravb_rx_ring_format()
300 dma_addr = dma_map_single(ndev->dev.parent, priv->rx_skb[q][i]->data, in ravb_rx_ring_format()
306 if (dma_mapping_error(ndev->dev.parent, dma_addr)) in ravb_rx_ring_format()
307 rx_desc->ds_cc = cpu_to_le16(0); in ravb_rx_ring_format()
308 rx_desc->dptr = cpu_to_le32(dma_addr); in ravb_rx_ring_format()
309 rx_desc->die_dt = DT_FEMPTY; in ravb_rx_ring_format()
311 rx_desc = &priv->rx_ring[q][i]; in ravb_rx_ring_format()
312 rx_desc->dptr = cpu_to_le32((u32)priv->rx_desc_dma[q]); in ravb_rx_ring_format()
313 rx_desc->die_dt = DT_LINKFIX; /* type */ in ravb_rx_ring_format()
320 const struct ravb_hw_info *info = priv->info; in ravb_ring_format()
321 unsigned int num_tx_desc = priv->num_tx_desc; in ravb_ring_format()
324 unsigned int tx_ring_size = sizeof(*tx_desc) * priv->num_tx_ring[q] * in ravb_ring_format()
328 priv->cur_rx[q] = 0; in ravb_ring_format()
329 priv->cur_tx[q] = 0; in ravb_ring_format()
330 priv->dirty_rx[q] = 0; in ravb_ring_format()
331 priv->dirty_tx[q] = 0; in ravb_ring_format()
333 info->rx_ring_format(ndev, q); in ravb_ring_format()
335 memset(priv->tx_ring[q], 0, tx_ring_size); in ravb_ring_format()
337 for (i = 0, tx_desc = priv->tx_ring[q]; i < priv->num_tx_ring[q]; in ravb_ring_format()
339 tx_desc->die_dt = DT_EEMPTY; in ravb_ring_format()
342 tx_desc->die_dt = DT_EEMPTY; in ravb_ring_format()
345 tx_desc->dptr = cpu_to_le32((u32)priv->tx_desc_dma[q]); in ravb_ring_format()
346 tx_desc->die_dt = DT_LINKFIX; /* type */ in ravb_ring_format()
349 desc = &priv->desc_bat[RX_QUEUE_OFFSET + q]; in ravb_ring_format()
350 desc->die_dt = DT_LINKFIX; /* type */ in ravb_ring_format()
351 desc->dptr = cpu_to_le32((u32)priv->rx_desc_dma[q]); in ravb_ring_format()
354 desc = &priv->desc_bat[q]; in ravb_ring_format()
355 desc->die_dt = DT_LINKFIX; /* type */ in ravb_ring_format()
356 desc->dptr = cpu_to_le32((u32)priv->tx_desc_dma[q]); in ravb_ring_format()
364 ring_size = sizeof(struct ravb_ex_rx_desc) * (priv->num_rx_ring[q] + 1); in ravb_alloc_rx_desc()
366 priv->rx_ring[q] = dma_alloc_coherent(ndev->dev.parent, ring_size, in ravb_alloc_rx_desc()
367 &priv->rx_desc_dma[q], in ravb_alloc_rx_desc()
369 return priv->rx_ring[q]; in ravb_alloc_rx_desc()
376 const struct ravb_hw_info *info = priv->info; in ravb_ring_init()
377 unsigned int num_tx_desc = priv->num_tx_desc; in ravb_ring_init()
383 priv->rx_skb[q] = kcalloc(priv->num_rx_ring[q], in ravb_ring_init()
384 sizeof(*priv->rx_skb[q]), GFP_KERNEL); in ravb_ring_init()
385 priv->tx_skb[q] = kcalloc(priv->num_tx_ring[q], in ravb_ring_init()
386 sizeof(*priv->tx_skb[q]), GFP_KERNEL); in ravb_ring_init()
387 if (!priv->rx_skb[q] || !priv->tx_skb[q]) in ravb_ring_init()
390 for (i = 0; i < priv->num_rx_ring[q]; i++) { in ravb_ring_init()
391 skb = netdev_alloc_skb(ndev, info->max_rx_len); in ravb_ring_init()
395 priv->rx_skb[q][i] = skb; in ravb_ring_init()
400 priv->tx_align[q] = kmalloc(DPTR_ALIGN * priv->num_tx_ring[q] + in ravb_ring_init()
401 DPTR_ALIGN - 1, GFP_KERNEL); in ravb_ring_init()
402 if (!priv->tx_align[q]) in ravb_ring_init()
407 if (!info->alloc_rx_desc(ndev, q)) in ravb_ring_init()
410 priv->dirty_rx[q] = 0; in ravb_ring_init()
414 (priv->num_tx_ring[q] * num_tx_desc + 1); in ravb_ring_init()
415 priv->tx_ring[q] = dma_alloc_coherent(ndev->dev.parent, ring_size, in ravb_ring_init()
416 &priv->tx_desc_dma[q], in ravb_ring_init()
418 if (!priv->tx_ring[q]) in ravb_ring_init()
426 return -ENOMEM; in ravb_ring_init()
432 ravb_write(ndev, ndev->mtu + ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN, RFLR); in ravb_rcar_emac_init()
434 /* EMAC Mode: PAUSE prohibition; Duplex; RX Checksum; TX; RX */ in ravb_rcar_emac_init()
436 (ndev->features & NETIF_F_RXCSUM ? ECMR_RCSC : 0) | in ravb_rcar_emac_init()
443 (ndev->dev_addr[0] << 24) | (ndev->dev_addr[1] << 16) | in ravb_rcar_emac_init()
444 (ndev->dev_addr[2] << 8) | (ndev->dev_addr[3]), MAHR); in ravb_rcar_emac_init()
446 (ndev->dev_addr[4] << 8) | (ndev->dev_addr[5]), MALR); in ravb_rcar_emac_init()
448 /* E-MAC status register clear */ in ravb_rcar_emac_init()
451 /* E-MAC interrupt enable register */ in ravb_rcar_emac_init()
455 /* E-MAC init function */
459 const struct ravb_hw_info *info = priv->info; in ravb_emac_init()
461 info->emac_init(ndev); in ravb_emac_init()
467 const struct ravb_hw_info *info = priv->info; in ravb_rcar_dmac_init()
480 if (info->multi_irqs) { in ravb_rcar_dmac_init()
500 const struct ravb_hw_info *info = priv->info; in ravb_dmac_init()
521 info->dmac_init(ndev); in ravb_dmac_init()
523 /* Setting the control will start the AVB-DMAC process. */ in ravb_dmac_init()
541 while (count--) { in ravb_get_tx_tstamp()
549 list_for_each_entry_safe(ts_skb, ts_skb2, &priv->ts_skb_list, in ravb_get_tx_tstamp()
551 skb = ts_skb->skb; in ravb_get_tx_tstamp()
552 tag = ts_skb->tag; in ravb_get_tx_tstamp()
553 list_del(&ts_skb->list); in ravb_get_tx_tstamp()
574 if (unlikely(skb->len < sizeof(__sum16))) in ravb_rx_csum()
576 hw_csum = skb_tail_pointer(skb) - sizeof(__sum16); in ravb_rx_csum()
577 skb->csum = csum_unfold((__force __sum16)get_unaligned_le16(hw_csum)); in ravb_rx_csum()
578 skb->ip_summed = CHECKSUM_COMPLETE; in ravb_rx_csum()
579 skb_trim(skb, skb->len - sizeof(__sum16)); in ravb_rx_csum()
585 const struct ravb_hw_info *info = priv->info; in ravb_rcar_rx()
586 int entry = priv->cur_rx[q] % priv->num_rx_ring[q]; in ravb_rcar_rx()
587 int boguscnt = (priv->dirty_rx[q] + priv->num_rx_ring[q]) - in ravb_rcar_rx()
588 priv->cur_rx[q]; in ravb_rcar_rx()
589 struct net_device_stats *stats = &priv->stats[q]; in ravb_rcar_rx()
600 desc = &priv->rx_ring[q][entry]; in ravb_rcar_rx()
601 while (desc->die_dt != DT_FEMPTY) { in ravb_rcar_rx()
604 desc_status = desc->msc; in ravb_rcar_rx()
605 pkt_len = le16_to_cpu(desc->ds_cc) & RX_DS; in ravb_rcar_rx()
607 if (--boguscnt < 0) in ravb_rcar_rx()
610 /* We use 0-byte descriptors to mark the DMA mapping errors */ in ravb_rcar_rx()
615 stats->multicast++; in ravb_rcar_rx()
619 stats->rx_errors++; in ravb_rcar_rx()
621 stats->rx_crc_errors++; in ravb_rcar_rx()
623 stats->rx_frame_errors++; in ravb_rcar_rx()
625 stats->rx_length_errors++; in ravb_rcar_rx()
627 stats->rx_missed_errors++; in ravb_rcar_rx()
629 u32 get_ts = priv->tstamp_rx_ctrl & RAVB_RXTSTAMP_TYPE; in ravb_rcar_rx()
631 skb = priv->rx_skb[q][entry]; in ravb_rcar_rx()
632 priv->rx_skb[q][entry] = NULL; in ravb_rcar_rx()
633 dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr), in ravb_rcar_rx()
644 ts.tv_sec = ((u64) le16_to_cpu(desc->ts_sh) << in ravb_rcar_rx()
645 32) | le32_to_cpu(desc->ts_sl); in ravb_rcar_rx()
646 ts.tv_nsec = le32_to_cpu(desc->ts_n); in ravb_rcar_rx()
647 shhwtstamps->hwtstamp = timespec64_to_ktime(ts); in ravb_rcar_rx()
651 skb->protocol = eth_type_trans(skb, ndev); in ravb_rcar_rx()
652 if (ndev->features & NETIF_F_RXCSUM) in ravb_rcar_rx()
654 napi_gro_receive(&priv->napi[q], skb); in ravb_rcar_rx()
655 stats->rx_packets++; in ravb_rcar_rx()
656 stats->rx_bytes += pkt_len; in ravb_rcar_rx()
659 entry = (++priv->cur_rx[q]) % priv->num_rx_ring[q]; in ravb_rcar_rx()
660 desc = &priv->rx_ring[q][entry]; in ravb_rcar_rx()
664 for (; priv->cur_rx[q] - priv->dirty_rx[q] > 0; priv->dirty_rx[q]++) { in ravb_rcar_rx()
665 entry = priv->dirty_rx[q] % priv->num_rx_ring[q]; in ravb_rcar_rx()
666 desc = &priv->rx_ring[q][entry]; in ravb_rcar_rx()
667 desc->ds_cc = cpu_to_le16(RX_BUF_SZ); in ravb_rcar_rx()
669 if (!priv->rx_skb[q][entry]) { in ravb_rcar_rx()
670 skb = netdev_alloc_skb(ndev, info->max_rx_len); in ravb_rcar_rx()
674 dma_addr = dma_map_single(ndev->dev.parent, skb->data, in ravb_rcar_rx()
675 le16_to_cpu(desc->ds_cc), in ravb_rcar_rx()
681 if (dma_mapping_error(ndev->dev.parent, dma_addr)) in ravb_rcar_rx()
682 desc->ds_cc = cpu_to_le16(0); in ravb_rcar_rx()
683 desc->dptr = cpu_to_le32(dma_addr); in ravb_rcar_rx()
684 priv->rx_skb[q][entry] = skb; in ravb_rcar_rx()
688 desc->die_dt = DT_FEMPTY; in ravb_rcar_rx()
691 *quota -= limit - (++boguscnt); in ravb_rcar_rx()
700 const struct ravb_hw_info *info = priv->info; in ravb_rx()
702 return info->receive(ndev, quota, q); in ravb_rx()
733 /* Stop the E-MAC's RX/TX processes. */ in ravb_stop_dma()
741 /* Stop AVB-DMAC process */ in ravb_stop_dma()
745 /* E-MAC interrupt handler */
755 pm_wakeup_event(&priv->pdev->dev, 0); in ravb_emac_interrupt_unlocked()
757 ndev->stats.tx_carrier_errors++; in ravb_emac_interrupt_unlocked()
760 if (priv->no_avb_link) in ravb_emac_interrupt_unlocked()
763 if (priv->avb_link_active_low) in ravb_emac_interrupt_unlocked()
780 spin_lock(&priv->lock); in ravb_emac_interrupt()
782 spin_unlock(&priv->lock); in ravb_emac_interrupt()
801 priv->stats[RAVB_BE].rx_over_errors++; in ravb_error_interrupt()
805 priv->stats[RAVB_NC].rx_over_errors++; in ravb_error_interrupt()
809 priv->rx_fifo_errors++; in ravb_error_interrupt()
816 const struct ravb_hw_info *info = priv->info; in ravb_queue_interrupt()
823 if (napi_schedule_prep(&priv->napi[q])) { in ravb_queue_interrupt()
825 if (!info->multi_irqs) { in ravb_queue_interrupt()
832 __napi_schedule(&priv->napi[q]); in ravb_queue_interrupt()
865 spin_lock(&priv->lock); in ravb_interrupt()
878 for (q = RAVB_NC; q >= RAVB_BE; q--) { in ravb_interrupt()
884 /* E-MAC status summary */ in ravb_interrupt()
902 spin_unlock(&priv->lock); in ravb_interrupt()
914 spin_lock(&priv->lock); in ravb_multi_interrupt()
934 spin_unlock(&priv->lock); in ravb_multi_interrupt()
944 spin_lock(&priv->lock); in ravb_dma_interrupt()
950 spin_unlock(&priv->lock); in ravb_dma_interrupt()
966 struct net_device *ndev = napi->dev; in ravb_poll()
968 const struct ravb_hw_info *info = priv->info; in ravb_poll()
970 int q = napi - priv->napi; in ravb_poll()
981 spin_lock_irqsave(&priv->lock, flags); in ravb_poll()
986 spin_unlock_irqrestore(&priv->lock, flags); in ravb_poll()
990 /* Re-enable RX/TX interrupts */ in ravb_poll()
991 spin_lock_irqsave(&priv->lock, flags); in ravb_poll()
992 if (!info->multi_irqs) { in ravb_poll()
999 spin_unlock_irqrestore(&priv->lock, flags); in ravb_poll()
1002 priv->rx_over_errors = priv->stats[RAVB_BE].rx_over_errors; in ravb_poll()
1003 priv->rx_over_errors += priv->stats[RAVB_NC].rx_over_errors; in ravb_poll()
1004 if (priv->rx_over_errors != ndev->stats.rx_over_errors) in ravb_poll()
1005 ndev->stats.rx_over_errors = priv->rx_over_errors; in ravb_poll()
1006 if (priv->rx_fifo_errors != ndev->stats.rx_fifo_errors) in ravb_poll()
1007 ndev->stats.rx_fifo_errors = priv->rx_fifo_errors; in ravb_poll()
1009 return budget - quota; in ravb_poll()
1016 const struct ravb_hw_info *info = priv->info; in ravb_adjust_link()
1017 struct phy_device *phydev = ndev->phydev; in ravb_adjust_link()
1021 spin_lock_irqsave(&priv->lock, flags); in ravb_adjust_link()
1023 /* Disable TX and RX right over here, if E-MAC change is ignored */ in ravb_adjust_link()
1024 if (priv->no_avb_link) in ravb_adjust_link()
1027 if (phydev->link) { in ravb_adjust_link()
1028 if (phydev->speed != priv->speed) { in ravb_adjust_link()
1030 priv->speed = phydev->speed; in ravb_adjust_link()
1031 info->set_rate(ndev); in ravb_adjust_link()
1033 if (!priv->link) { in ravb_adjust_link()
1036 priv->link = phydev->link; in ravb_adjust_link()
1038 } else if (priv->link) { in ravb_adjust_link()
1040 priv->link = 0; in ravb_adjust_link()
1041 priv->speed = 0; in ravb_adjust_link()
1044 /* Enable TX and RX right over here, if E-MAC change is ignored */ in ravb_adjust_link()
1045 if (priv->no_avb_link && phydev->link) in ravb_adjust_link()
1048 spin_unlock_irqrestore(&priv->lock, flags); in ravb_adjust_link()
1062 struct device_node *np = ndev->dev.parent->of_node; in ravb_phy_init()
1069 priv->link = 0; in ravb_phy_init()
1070 priv->speed = 0; in ravb_phy_init()
1073 pn = of_parse_phandle(np, "phy-handle", 0); in ravb_phy_init()
1086 iface = priv->rgmii_override ? PHY_INTERFACE_MODE_RGMII in ravb_phy_init()
1087 : priv->phy_interface; in ravb_phy_init()
1092 err = -ENOENT; in ravb_phy_init()
1096 /* This driver only support 10/100Mbit speeds on R-Car H3 ES1.0 in ravb_phy_init()
1109 /* 10BASE, Pause and Asym Pause is not supported */ in ravb_phy_init()
1141 phy_start(ndev->phydev); in ravb_phy_start()
1150 return priv->msg_enable; in ravb_get_msglevel()
1157 priv->msg_enable = value; in ravb_set_msglevel()
1197 const struct ravb_hw_info *info = priv->info; in ravb_get_sset_count()
1201 return info->stats_len; in ravb_get_sset_count()
1203 return -EOPNOTSUPP; in ravb_get_sset_count()
1214 /* Device-specific stats */ in ravb_get_ethtool_stats()
1216 struct net_device_stats *stats = &priv->stats[q]; in ravb_get_ethtool_stats()
1218 data[i++] = priv->cur_rx[q]; in ravb_get_ethtool_stats()
1219 data[i++] = priv->cur_tx[q]; in ravb_get_ethtool_stats()
1220 data[i++] = priv->dirty_rx[q]; in ravb_get_ethtool_stats()
1221 data[i++] = priv->dirty_tx[q]; in ravb_get_ethtool_stats()
1222 data[i++] = stats->rx_packets; in ravb_get_ethtool_stats()
1223 data[i++] = stats->tx_packets; in ravb_get_ethtool_stats()
1224 data[i++] = stats->rx_bytes; in ravb_get_ethtool_stats()
1225 data[i++] = stats->tx_bytes; in ravb_get_ethtool_stats()
1226 data[i++] = stats->multicast; in ravb_get_ethtool_stats()
1227 data[i++] = stats->rx_errors; in ravb_get_ethtool_stats()
1228 data[i++] = stats->rx_crc_errors; in ravb_get_ethtool_stats()
1229 data[i++] = stats->rx_frame_errors; in ravb_get_ethtool_stats()
1230 data[i++] = stats->rx_length_errors; in ravb_get_ethtool_stats()
1231 data[i++] = stats->rx_missed_errors; in ravb_get_ethtool_stats()
1232 data[i++] = stats->rx_over_errors; in ravb_get_ethtool_stats()
1239 const struct ravb_hw_info *info = priv->info; in ravb_get_strings()
1243 memcpy(data, info->gstrings_stats, info->gstrings_size); in ravb_get_strings()
1253 ring->rx_max_pending = BE_RX_RING_MAX; in ravb_get_ringparam()
1254 ring->tx_max_pending = BE_TX_RING_MAX; in ravb_get_ringparam()
1255 ring->rx_pending = priv->num_rx_ring[RAVB_BE]; in ravb_get_ringparam()
1256 ring->tx_pending = priv->num_tx_ring[RAVB_BE]; in ravb_get_ringparam()
1263 const struct ravb_hw_info *info = priv->info; in ravb_set_ringparam()
1266 if (ring->tx_pending > BE_TX_RING_MAX || in ravb_set_ringparam()
1267 ring->rx_pending > BE_RX_RING_MAX || in ravb_set_ringparam()
1268 ring->tx_pending < BE_TX_RING_MIN || in ravb_set_ringparam()
1269 ring->rx_pending < BE_RX_RING_MIN) in ravb_set_ringparam()
1270 return -EINVAL; in ravb_set_ringparam()
1271 if (ring->rx_mini_pending || ring->rx_jumbo_pending) in ravb_set_ringparam()
1272 return -EINVAL; in ravb_set_ringparam()
1277 if (info->no_ptp_cfg_active) in ravb_set_ringparam()
1286 synchronize_irq(ndev->irq); in ravb_set_ringparam()
1294 priv->num_rx_ring[RAVB_BE] = ring->rx_pending; in ravb_set_ringparam()
1295 priv->num_tx_ring[RAVB_BE] = ring->tx_pending; in ravb_set_ringparam()
1309 if (info->no_ptp_cfg_active) in ravb_set_ringparam()
1310 ravb_ptp_init(ndev, priv->pdev); in ravb_set_ringparam()
1323 info->so_timestamping = in ravb_get_ts_info()
1330 info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON); in ravb_get_ts_info()
1331 info->rx_filters = in ravb_get_ts_info()
1335 info->phc_index = ptp_clock_index(priv->ptp.clock); in ravb_get_ts_info()
1344 wol->supported = WAKE_MAGIC; in ravb_get_wol()
1345 wol->wolopts = priv->wol_enabled ? WAKE_MAGIC : 0; in ravb_get_wol()
1352 if (wol->wolopts & ~WAKE_MAGIC) in ravb_set_wol()
1353 return -EOPNOTSUPP; in ravb_set_wol()
1355 priv->wol_enabled = !!(wol->wolopts & WAKE_MAGIC); in ravb_set_wol()
1357 device_set_wakeup_enable(&priv->pdev->dev, priv->wol_enabled); in ravb_set_wol()
1386 name = devm_kasprintf(dev, GFP_KERNEL, "%s:%s", ndev->name, ch); in ravb_hook_irq()
1388 return -ENOMEM; in ravb_hook_irq()
1400 const struct ravb_hw_info *info = priv->info; in ravb_open()
1401 struct platform_device *pdev = priv->pdev; in ravb_open()
1402 struct device *dev = &pdev->dev; in ravb_open()
1405 napi_enable(&priv->napi[RAVB_BE]); in ravb_open()
1406 napi_enable(&priv->napi[RAVB_NC]); in ravb_open()
1408 if (!info->multi_irqs) { in ravb_open()
1409 error = request_irq(ndev->irq, ravb_interrupt, IRQF_SHARED, in ravb_open()
1410 ndev->name, ndev); in ravb_open()
1416 error = ravb_hook_irq(ndev->irq, ravb_multi_interrupt, ndev, in ravb_open()
1420 error = ravb_hook_irq(priv->emac_irq, ravb_emac_interrupt, ndev, in ravb_open()
1424 error = ravb_hook_irq(priv->rx_irqs[RAVB_BE], ravb_be_interrupt, in ravb_open()
1428 error = ravb_hook_irq(priv->tx_irqs[RAVB_BE], ravb_be_interrupt, in ravb_open()
1432 error = ravb_hook_irq(priv->rx_irqs[RAVB_NC], ravb_nc_interrupt, in ravb_open()
1436 error = ravb_hook_irq(priv->tx_irqs[RAVB_NC], ravb_nc_interrupt, in ravb_open()
1449 if (info->no_ptp_cfg_active) in ravb_open()
1450 ravb_ptp_init(ndev, priv->pdev); in ravb_open()
1463 if (info->no_ptp_cfg_active) in ravb_open()
1466 if (!info->multi_irqs) in ravb_open()
1468 free_irq(priv->tx_irqs[RAVB_NC], ndev); in ravb_open()
1470 free_irq(priv->rx_irqs[RAVB_NC], ndev); in ravb_open()
1472 free_irq(priv->tx_irqs[RAVB_BE], ndev); in ravb_open()
1474 free_irq(priv->rx_irqs[RAVB_BE], ndev); in ravb_open()
1476 free_irq(priv->emac_irq, ndev); in ravb_open()
1478 free_irq(ndev->irq, ndev); in ravb_open()
1480 napi_disable(&priv->napi[RAVB_NC]); in ravb_open()
1481 napi_disable(&priv->napi[RAVB_BE]); in ravb_open()
1495 ndev->stats.tx_errors++; in ravb_tx_timeout()
1497 schedule_work(&priv->work); in ravb_tx_timeout()
1504 const struct ravb_hw_info *info = priv->info; in ravb_tx_timeout_work()
1505 struct net_device *ndev = priv->ndev; in ravb_tx_timeout_work()
1511 if (info->no_ptp_cfg_active) in ravb_tx_timeout_work()
1521 * re-enables the TX and RX and skip the following in ravb_tx_timeout_work()
1522 * re-initialization procedure. in ravb_tx_timeout_work()
1535 * should return here to avoid re-enabling the TX and RX in in ravb_tx_timeout_work()
1546 if (info->no_ptp_cfg_active) in ravb_tx_timeout_work()
1547 ravb_ptp_init(ndev, priv->pdev); in ravb_tx_timeout_work()
1556 unsigned int num_tx_desc = priv->num_tx_desc; in ravb_start_xmit()
1566 spin_lock_irqsave(&priv->lock, flags); in ravb_start_xmit()
1567 if (priv->cur_tx[q] - priv->dirty_tx[q] > (priv->num_tx_ring[q] - 1) * in ravb_start_xmit()
1572 spin_unlock_irqrestore(&priv->lock, flags); in ravb_start_xmit()
1579 entry = priv->cur_tx[q] % (priv->num_tx_ring[q] * num_tx_desc); in ravb_start_xmit()
1580 priv->tx_skb[q][entry / num_tx_desc] = skb; in ravb_start_xmit()
1583 buffer = PTR_ALIGN(priv->tx_align[q], DPTR_ALIGN) + in ravb_start_xmit()
1585 len = PTR_ALIGN(skb->data, DPTR_ALIGN) - skb->data; in ravb_start_xmit()
1596 * length of the second DMA descriptor (skb->len - len) in ravb_start_xmit()
1602 memcpy(buffer, skb->data, len); in ravb_start_xmit()
1603 dma_addr = dma_map_single(ndev->dev.parent, buffer, len, in ravb_start_xmit()
1605 if (dma_mapping_error(ndev->dev.parent, dma_addr)) in ravb_start_xmit()
1608 desc = &priv->tx_ring[q][entry]; in ravb_start_xmit()
1609 desc->ds_tagl = cpu_to_le16(len); in ravb_start_xmit()
1610 desc->dptr = cpu_to_le32(dma_addr); in ravb_start_xmit()
1612 buffer = skb->data + len; in ravb_start_xmit()
1613 len = skb->len - len; in ravb_start_xmit()
1614 dma_addr = dma_map_single(ndev->dev.parent, buffer, len, in ravb_start_xmit()
1616 if (dma_mapping_error(ndev->dev.parent, dma_addr)) in ravb_start_xmit()
1621 desc = &priv->tx_ring[q][entry]; in ravb_start_xmit()
1622 len = skb->len; in ravb_start_xmit()
1623 dma_addr = dma_map_single(ndev->dev.parent, skb->data, skb->len, in ravb_start_xmit()
1625 if (dma_mapping_error(ndev->dev.parent, dma_addr)) in ravb_start_xmit()
1628 desc->ds_tagl = cpu_to_le16(len); in ravb_start_xmit()
1629 desc->dptr = cpu_to_le32(dma_addr); in ravb_start_xmit()
1636 desc--; in ravb_start_xmit()
1637 dma_unmap_single(ndev->dev.parent, dma_addr, in ravb_start_xmit()
1642 ts_skb->skb = skb_get(skb); in ravb_start_xmit()
1643 ts_skb->tag = priv->ts_skb_tag++; in ravb_start_xmit()
1644 priv->ts_skb_tag &= 0x3ff; in ravb_start_xmit()
1645 list_add_tail(&ts_skb->list, &priv->ts_skb_list); in ravb_start_xmit()
1648 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; in ravb_start_xmit()
1649 desc->tagh_tsr = (ts_skb->tag >> 4) | TX_TSR; in ravb_start_xmit()
1650 desc->ds_tagl |= cpu_to_le16(ts_skb->tag << 12); in ravb_start_xmit()
1657 desc->die_dt = DT_FEND; in ravb_start_xmit()
1658 desc--; in ravb_start_xmit()
1659 desc->die_dt = DT_FSTART; in ravb_start_xmit()
1661 desc->die_dt = DT_FSINGLE; in ravb_start_xmit()
1665 priv->cur_tx[q] += num_tx_desc; in ravb_start_xmit()
1666 if (priv->cur_tx[q] - priv->dirty_tx[q] > in ravb_start_xmit()
1667 (priv->num_tx_ring[q] - 1) * num_tx_desc && in ravb_start_xmit()
1672 spin_unlock_irqrestore(&priv->lock, flags); in ravb_start_xmit()
1676 dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr), in ravb_start_xmit()
1677 le16_to_cpu(desc->ds_tagl), DMA_TO_DEVICE); in ravb_start_xmit()
1680 priv->tx_skb[q][entry / num_tx_desc] = NULL; in ravb_start_xmit()
1688 return (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) ? RAVB_NC : in ravb_select_queue()
1696 const struct ravb_hw_info *info = priv->info; in ravb_get_stats()
1699 nstats = &ndev->stats; in ravb_get_stats()
1700 stats0 = &priv->stats[RAVB_BE]; in ravb_get_stats()
1701 stats1 = &priv->stats[RAVB_NC]; in ravb_get_stats()
1703 if (info->tx_counters) { in ravb_get_stats()
1704 nstats->tx_dropped += ravb_read(ndev, TROCR); in ravb_get_stats()
1708 nstats->rx_packets = stats0->rx_packets + stats1->rx_packets; in ravb_get_stats()
1709 nstats->tx_packets = stats0->tx_packets + stats1->tx_packets; in ravb_get_stats()
1710 nstats->rx_bytes = stats0->rx_bytes + stats1->rx_bytes; in ravb_get_stats()
1711 nstats->tx_bytes = stats0->tx_bytes + stats1->tx_bytes; in ravb_get_stats()
1712 nstats->multicast = stats0->multicast + stats1->multicast; in ravb_get_stats()
1713 nstats->rx_errors = stats0->rx_errors + stats1->rx_errors; in ravb_get_stats()
1714 nstats->rx_crc_errors = stats0->rx_crc_errors + stats1->rx_crc_errors; in ravb_get_stats()
1715 nstats->rx_frame_errors = in ravb_get_stats()
1716 stats0->rx_frame_errors + stats1->rx_frame_errors; in ravb_get_stats()
1717 nstats->rx_length_errors = in ravb_get_stats()
1718 stats0->rx_length_errors + stats1->rx_length_errors; in ravb_get_stats()
1719 nstats->rx_missed_errors = in ravb_get_stats()
1720 stats0->rx_missed_errors + stats1->rx_missed_errors; in ravb_get_stats()
1721 nstats->rx_over_errors = in ravb_get_stats()
1722 stats0->rx_over_errors + stats1->rx_over_errors; in ravb_get_stats()
1733 spin_lock_irqsave(&priv->lock, flags); in ravb_set_rx_mode()
1735 ndev->flags & IFF_PROMISC ? ECMR_PRM : 0); in ravb_set_rx_mode()
1736 spin_unlock_irqrestore(&priv->lock, flags); in ravb_set_rx_mode()
1742 struct device_node *np = ndev->dev.parent->of_node; in ravb_close()
1744 const struct ravb_hw_info *info = priv->info; in ravb_close()
1755 if (info->no_ptp_cfg_active) in ravb_close()
1758 /* Set the config mode to stop the AVB-DMAC's processes */ in ravb_close()
1764 list_for_each_entry_safe(ts_skb, ts_skb2, &priv->ts_skb_list, list) { in ravb_close()
1765 list_del(&ts_skb->list); in ravb_close()
1766 kfree_skb(ts_skb->skb); in ravb_close()
1771 if (ndev->phydev) { in ravb_close()
1772 phy_stop(ndev->phydev); in ravb_close()
1773 phy_disconnect(ndev->phydev); in ravb_close()
1778 if (info->multi_irqs) { in ravb_close()
1779 free_irq(priv->tx_irqs[RAVB_NC], ndev); in ravb_close()
1780 free_irq(priv->rx_irqs[RAVB_NC], ndev); in ravb_close()
1781 free_irq(priv->tx_irqs[RAVB_BE], ndev); in ravb_close()
1782 free_irq(priv->rx_irqs[RAVB_BE], ndev); in ravb_close()
1783 free_irq(priv->emac_irq, ndev); in ravb_close()
1785 free_irq(ndev->irq, ndev); in ravb_close()
1787 napi_disable(&priv->napi[RAVB_NC]); in ravb_close()
1788 napi_disable(&priv->napi[RAVB_BE]); in ravb_close()
1803 config.tx_type = priv->tstamp_tx_ctrl ? HWTSTAMP_TX_ON : in ravb_hwtstamp_get()
1805 switch (priv->tstamp_rx_ctrl & RAVB_RXTSTAMP_TYPE) { in ravb_hwtstamp_get()
1816 return copy_to_user(req->ifr_data, &config, sizeof(config)) ? in ravb_hwtstamp_get()
1817 -EFAULT : 0; in ravb_hwtstamp_get()
1828 if (copy_from_user(&config, req->ifr_data, sizeof(config))) in ravb_hwtstamp_set()
1829 return -EFAULT; in ravb_hwtstamp_set()
1833 return -EINVAL; in ravb_hwtstamp_set()
1843 return -ERANGE; in ravb_hwtstamp_set()
1858 priv->tstamp_tx_ctrl = tstamp_tx_ctrl; in ravb_hwtstamp_set()
1859 priv->tstamp_rx_ctrl = tstamp_rx_ctrl; in ravb_hwtstamp_set()
1861 return copy_to_user(req->ifr_data, &config, sizeof(config)) ? in ravb_hwtstamp_set()
1862 -EFAULT : 0; in ravb_hwtstamp_set()
1868 struct phy_device *phydev = ndev->phydev; in ravb_do_ioctl()
1871 return -EINVAL; in ravb_do_ioctl()
1874 return -ENODEV; in ravb_do_ioctl()
1890 ndev->mtu = new_mtu; in ravb_change_mtu()
1893 synchronize_irq(priv->emac_irq); in ravb_change_mtu()
1907 spin_lock_irqsave(&priv->lock, flags); in ravb_set_rx_csum()
1918 spin_unlock_irqrestore(&priv->lock, flags); in ravb_set_rx_csum()
1924 netdev_features_t changed = ndev->features ^ features; in ravb_set_features_rx_csum()
1929 ndev->features = features; in ravb_set_features_rx_csum()
1938 const struct ravb_hw_info *info = priv->info; in ravb_set_features()
1940 return info->set_rx_csum_feature(ndev, features); in ravb_set_features()
1961 struct platform_device *pdev = priv->pdev; in ravb_mdio_init()
1962 struct device *dev = &pdev->dev; in ravb_mdio_init()
1966 priv->mdiobb.ops = &bb_ops; in ravb_mdio_init()
1969 priv->mii_bus = alloc_mdio_bitbang(&priv->mdiobb); in ravb_mdio_init()
1970 if (!priv->mii_bus) in ravb_mdio_init()
1971 return -ENOMEM; in ravb_mdio_init()
1974 priv->mii_bus->name = "ravb_mii"; in ravb_mdio_init()
1975 priv->mii_bus->parent = dev; in ravb_mdio_init()
1976 snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x", in ravb_mdio_init()
1977 pdev->name, pdev->id); in ravb_mdio_init()
1980 error = of_mdiobus_register(priv->mii_bus, dev->of_node); in ravb_mdio_init()
1987 free_mdio_bitbang(priv->mii_bus); in ravb_mdio_init()
1995 mdiobus_unregister(priv->mii_bus); in ravb_mdio_release()
1998 free_mdio_bitbang(priv->mii_bus); in ravb_mdio_release()
2017 .max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1,
2038 .max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1,
2044 { .compatible = "renesas,etheravb-r8a7790", .data = &ravb_gen2_hw_info },
2045 { .compatible = "renesas,etheravb-r8a7794", .data = &ravb_gen2_hw_info },
2046 { .compatible = "renesas,etheravb-rcar-gen2", .data = &ravb_gen2_hw_info },
2047 { .compatible = "renesas,etheravb-r8a7795", .data = &ravb_gen3_hw_info },
2048 { .compatible = "renesas,etheravb-rcar-gen3", .data = &ravb_gen3_hw_info },
2056 struct device *dev = ndev->dev.parent; in ravb_set_gti()
2060 rate = clk_get_rate(priv->clk); in ravb_set_gti()
2062 return -EINVAL; in ravb_set_gti()
2068 dev_err(dev, "gti.tiv increment 0x%llx is outside the range 0x%x - 0x%x\n", in ravb_set_gti()
2070 return -EINVAL; in ravb_set_gti()
2081 const struct ravb_hw_info *info = priv->info; in ravb_set_config_mode()
2083 if (info->no_ptp_cfg_active) { in ravb_set_config_mode()
2100 if (!of_property_read_u32(np, "rx-internal-delay-ps", &delay)) { in ravb_parse_delay_mode()
2102 priv->rxcidm = !!delay; in ravb_parse_delay_mode()
2105 if (!of_property_read_u32(np, "tx-internal-delay-ps", &delay)) { in ravb_parse_delay_mode()
2107 priv->txcidm = !!delay; in ravb_parse_delay_mode()
2114 /* Fall back to legacy rgmii-*id behavior */ in ravb_parse_delay_mode()
2115 if (priv->phy_interface == PHY_INTERFACE_MODE_RGMII_ID || in ravb_parse_delay_mode()
2116 priv->phy_interface == PHY_INTERFACE_MODE_RGMII_RXID) { in ravb_parse_delay_mode()
2117 priv->rxcidm = 1; in ravb_parse_delay_mode()
2118 priv->rgmii_override = 1; in ravb_parse_delay_mode()
2121 if (priv->phy_interface == PHY_INTERFACE_MODE_RGMII_ID || in ravb_parse_delay_mode()
2122 priv->phy_interface == PHY_INTERFACE_MODE_RGMII_TXID) { in ravb_parse_delay_mode()
2123 priv->txcidm = 1; in ravb_parse_delay_mode()
2124 priv->rgmii_override = 1; in ravb_parse_delay_mode()
2133 if (priv->rxcidm) in ravb_set_delay_mode()
2135 if (priv->txcidm) in ravb_set_delay_mode()
2142 struct device_node *np = pdev->dev.of_node; in ravb_probe()
2152 dev_err(&pdev->dev, in ravb_probe()
2154 return -EINVAL; in ravb_probe()
2157 rstc = devm_reset_control_get_optional_exclusive(&pdev->dev, NULL); in ravb_probe()
2159 return dev_err_probe(&pdev->dev, PTR_ERR(rstc), in ravb_probe()
2165 return -ENOMEM; in ravb_probe()
2167 info = of_device_get_match_data(&pdev->dev); in ravb_probe()
2169 ndev->features = info->net_features; in ravb_probe()
2170 ndev->hw_features = info->net_hw_features; in ravb_probe()
2173 pm_runtime_enable(&pdev->dev); in ravb_probe()
2174 pm_runtime_get_sync(&pdev->dev); in ravb_probe()
2176 if (info->multi_irqs) in ravb_probe()
2184 ndev->irq = irq; in ravb_probe()
2186 SET_NETDEV_DEV(ndev, &pdev->dev); in ravb_probe()
2189 priv->info = info; in ravb_probe()
2190 priv->rstc = rstc; in ravb_probe()
2191 priv->ndev = ndev; in ravb_probe()
2192 priv->pdev = pdev; in ravb_probe()
2193 priv->num_tx_ring[RAVB_BE] = BE_TX_RING_SIZE; in ravb_probe()
2194 priv->num_rx_ring[RAVB_BE] = BE_RX_RING_SIZE; in ravb_probe()
2195 priv->num_tx_ring[RAVB_NC] = NC_TX_RING_SIZE; in ravb_probe()
2196 priv->num_rx_ring[RAVB_NC] = NC_RX_RING_SIZE; in ravb_probe()
2197 priv->addr = devm_platform_get_and_ioremap_resource(pdev, 0, &res); in ravb_probe()
2198 if (IS_ERR(priv->addr)) { in ravb_probe()
2199 error = PTR_ERR(priv->addr); in ravb_probe()
2203 /* The Ether-specific entries in the device structure. */ in ravb_probe()
2204 ndev->base_addr = res->start; in ravb_probe()
2206 spin_lock_init(&priv->lock); in ravb_probe()
2207 INIT_WORK(&priv->work, ravb_tx_timeout_work); in ravb_probe()
2209 error = of_get_phy_mode(np, &priv->phy_interface); in ravb_probe()
2210 if (error && error != -ENODEV) in ravb_probe()
2213 priv->no_avb_link = of_property_read_bool(np, "renesas,no-ether-link"); in ravb_probe()
2214 priv->avb_link_active_low = in ravb_probe()
2215 of_property_read_bool(np, "renesas,ether-link-active-low"); in ravb_probe()
2217 if (info->multi_irqs) { in ravb_probe()
2223 priv->emac_irq = irq; in ravb_probe()
2230 priv->rx_irqs[i] = irq; in ravb_probe()
2238 priv->tx_irqs[i] = irq; in ravb_probe()
2242 priv->clk = devm_clk_get(&pdev->dev, NULL); in ravb_probe()
2243 if (IS_ERR(priv->clk)) { in ravb_probe()
2244 error = PTR_ERR(priv->clk); in ravb_probe()
2248 priv->refclk = devm_clk_get_optional(&pdev->dev, "refclk"); in ravb_probe()
2249 if (IS_ERR(priv->refclk)) { in ravb_probe()
2250 error = PTR_ERR(priv->refclk); in ravb_probe()
2253 clk_prepare_enable(priv->refclk); in ravb_probe()
2255 ndev->max_mtu = 2048 - (ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN); in ravb_probe()
2256 ndev->min_mtu = ETH_MIN_MTU; in ravb_probe()
2258 /* FIXME: R-Car Gen2 has 4byte alignment restriction for tx buffer in ravb_probe()
2263 priv->num_tx_desc = info->aligned_tx ? 2 : 1; in ravb_probe()
2266 ndev->netdev_ops = &ravb_netdev_ops; in ravb_probe()
2267 ndev->ethtool_ops = &ravb_ethtool_ops; in ravb_probe()
2280 if (info->internal_delay) { in ravb_probe()
2286 priv->desc_bat_size = sizeof(struct ravb_desc) * DBAT_ENTRY_NUM; in ravb_probe()
2287 priv->desc_bat = dma_alloc_coherent(ndev->dev.parent, priv->desc_bat_size, in ravb_probe()
2288 &priv->desc_bat_dma, GFP_KERNEL); in ravb_probe()
2289 if (!priv->desc_bat) { in ravb_probe()
2290 dev_err(&pdev->dev, in ravb_probe()
2292 priv->desc_bat_size); in ravb_probe()
2293 error = -ENOMEM; in ravb_probe()
2297 priv->desc_bat[q].die_dt = DT_EOS; in ravb_probe()
2298 ravb_write(ndev, priv->desc_bat_dma, DBAT); in ravb_probe()
2301 INIT_LIST_HEAD(&priv->ts_skb_list); in ravb_probe()
2304 if (info->ptp_cfg_active) in ravb_probe()
2308 priv->msg_enable = RAVB_DEF_MSG_ENABLE; in ravb_probe()
2312 if (!is_valid_ether_addr(ndev->dev_addr)) { in ravb_probe()
2313 dev_warn(&pdev->dev, in ravb_probe()
2321 dev_err(&pdev->dev, "failed to initialize MDIO\n"); in ravb_probe()
2325 netif_napi_add(ndev, &priv->napi[RAVB_BE], ravb_poll, 64); in ravb_probe()
2326 netif_napi_add(ndev, &priv->napi[RAVB_NC], ravb_poll, 64); in ravb_probe()
2333 device_set_wakeup_capable(&pdev->dev, 1); in ravb_probe()
2337 (u32)ndev->base_addr, ndev->dev_addr, ndev->irq); in ravb_probe()
2344 netif_napi_del(&priv->napi[RAVB_NC]); in ravb_probe()
2345 netif_napi_del(&priv->napi[RAVB_BE]); in ravb_probe()
2348 dma_free_coherent(ndev->dev.parent, priv->desc_bat_size, priv->desc_bat, in ravb_probe()
2349 priv->desc_bat_dma); in ravb_probe()
2352 if (info->ptp_cfg_active) in ravb_probe()
2355 clk_disable_unprepare(priv->refclk); in ravb_probe()
2359 pm_runtime_put(&pdev->dev); in ravb_probe()
2360 pm_runtime_disable(&pdev->dev); in ravb_probe()
2369 const struct ravb_hw_info *info = priv->info; in ravb_remove()
2372 if (info->ptp_cfg_active) in ravb_remove()
2375 clk_disable_unprepare(priv->refclk); in ravb_remove()
2377 dma_free_coherent(ndev->dev.parent, priv->desc_bat_size, priv->desc_bat, in ravb_remove()
2378 priv->desc_bat_dma); in ravb_remove()
2381 pm_runtime_put_sync(&pdev->dev); in ravb_remove()
2383 netif_napi_del(&priv->napi[RAVB_NC]); in ravb_remove()
2384 netif_napi_del(&priv->napi[RAVB_BE]); in ravb_remove()
2386 pm_runtime_disable(&pdev->dev); in ravb_remove()
2387 reset_control_assert(priv->rstc); in ravb_remove()
2404 synchronize_irq(priv->emac_irq); in ravb_wol_setup()
2405 napi_disable(&priv->napi[RAVB_NC]); in ravb_wol_setup()
2406 napi_disable(&priv->napi[RAVB_BE]); in ravb_wol_setup()
2412 return enable_irq_wake(priv->emac_irq); in ravb_wol_setup()
2420 napi_enable(&priv->napi[RAVB_NC]); in ravb_wol_restore()
2421 napi_enable(&priv->napi[RAVB_BE]); in ravb_wol_restore()
2430 return disable_irq_wake(priv->emac_irq); in ravb_wol_restore()
2444 if (priv->wol_enabled) in ravb_suspend()
2456 const struct ravb_hw_info *info = priv->info; in ravb_resume()
2460 if (priv->wol_enabled) in ravb_resume()
2479 if (info->internal_delay) in ravb_resume()
2483 ravb_write(ndev, priv->desc_bat_dma, DBAT); in ravb_resume()
2486 if (priv->wol_enabled) { in ravb_resume()
2502 /* Runtime PM callback shared between ->runtime_suspend() in ravb_runtime_nop()
2503 * and ->runtime_resume(). Simply returns success. in ravb_runtime_nop()
2505 * This driver re-initializes all registers after in ravb_runtime_nop()