Lines Matching full:ndev
53 void ravb_modify(struct net_device *ndev, enum ravb_reg reg, u32 clear, in ravb_modify() argument
56 ravb_write(ndev, (ravb_read(ndev, reg) & ~clear) | set, reg); in ravb_modify()
59 int ravb_wait(struct net_device *ndev, enum ravb_reg reg, u32 mask, u32 value) in ravb_wait() argument
64 if ((ravb_read(ndev, reg) & mask) == value) in ravb_wait()
71 static int ravb_config(struct net_device *ndev) in ravb_config() argument
76 ravb_modify(ndev, CCC, CCC_OPC, CCC_OPC_CONFIG); in ravb_config()
78 error = ravb_wait(ndev, CSR, CSR_OPS, CSR_OPS_CONFIG); in ravb_config()
80 netdev_err(ndev, "failed to switch device to config mode\n"); in ravb_config()
85 static void ravb_set_rate(struct net_device *ndev) in ravb_set_rate() argument
87 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_rate()
91 ravb_write(ndev, GECMR_SPEED_100, GECMR); in ravb_set_rate()
94 ravb_write(ndev, GECMR_SPEED_1000, GECMR); in ravb_set_rate()
112 static void ravb_read_mac_address(struct net_device *ndev, const u8 *mac) in ravb_read_mac_address() argument
115 ether_addr_copy(ndev->dev_addr, mac); in ravb_read_mac_address()
117 u32 mahr = ravb_read(ndev, MAHR); in ravb_read_mac_address()
118 u32 malr = ravb_read(ndev, MALR); in ravb_read_mac_address()
120 ndev->dev_addr[0] = (mahr >> 24) & 0xFF; in ravb_read_mac_address()
121 ndev->dev_addr[1] = (mahr >> 16) & 0xFF; in ravb_read_mac_address()
122 ndev->dev_addr[2] = (mahr >> 8) & 0xFF; in ravb_read_mac_address()
123 ndev->dev_addr[3] = (mahr >> 0) & 0xFF; in ravb_read_mac_address()
124 ndev->dev_addr[4] = (malr >> 8) & 0xFF; in ravb_read_mac_address()
125 ndev->dev_addr[5] = (malr >> 0) & 0xFF; in ravb_read_mac_address()
134 ravb_modify(priv->ndev, PIR, mask, set ? mask : 0); in ravb_mdio_ctrl()
161 return (ravb_read(priv->ndev, PIR) & PIR_MDI) != 0; in ravb_get_mdio_data()
174 static int ravb_tx_free(struct net_device *ndev, int q, bool free_txed_only) in ravb_tx_free() argument
176 struct ravb_private *priv = netdev_priv(ndev); in ravb_tx_free()
197 dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr), in ravb_tx_free()
217 static void ravb_ring_free(struct net_device *ndev, int q) in ravb_ring_free() argument
219 struct ravb_private *priv = netdev_priv(ndev); in ravb_ring_free()
227 if (!dma_mapping_error(ndev->dev.parent, in ravb_ring_free()
229 dma_unmap_single(ndev->dev.parent, in ravb_ring_free()
236 dma_free_coherent(ndev->dev.parent, ring_size, priv->rx_ring[q], in ravb_ring_free()
242 ravb_tx_free(ndev, q, false); in ravb_ring_free()
246 dma_free_coherent(ndev->dev.parent, ring_size, priv->tx_ring[q], in ravb_ring_free()
271 static void ravb_ring_format(struct net_device *ndev, int q) in ravb_ring_format() argument
273 struct ravb_private *priv = netdev_priv(ndev); in ravb_ring_format()
294 dma_addr = dma_map_single(ndev->dev.parent, priv->rx_skb[q][i]->data, in ravb_ring_format()
300 if (dma_mapping_error(ndev->dev.parent, dma_addr)) in ravb_ring_format()
332 static int ravb_ring_init(struct net_device *ndev, int q) in ravb_ring_init() argument
334 struct ravb_private *priv = netdev_priv(ndev); in ravb_ring_init()
339 priv->rx_buf_sz = (ndev->mtu <= 1492 ? PKT_BUF_SZ : ndev->mtu) + in ravb_ring_init()
351 skb = netdev_alloc_skb(ndev, priv->rx_buf_sz + RAVB_ALIGN - 1); in ravb_ring_init()
366 priv->rx_ring[q] = dma_alloc_coherent(ndev->dev.parent, ring_size, in ravb_ring_init()
377 priv->tx_ring[q] = dma_alloc_coherent(ndev->dev.parent, ring_size, in ravb_ring_init()
386 ravb_ring_free(ndev, q); in ravb_ring_init()
392 static void ravb_emac_init(struct net_device *ndev) in ravb_emac_init() argument
395 ravb_write(ndev, ndev->mtu + ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN, RFLR); in ravb_emac_init()
398 ravb_write(ndev, ECMR_ZPF | ECMR_DM | in ravb_emac_init()
399 (ndev->features & NETIF_F_RXCSUM ? ECMR_RCSC : 0) | in ravb_emac_init()
402 ravb_set_rate(ndev); in ravb_emac_init()
405 ravb_write(ndev, in ravb_emac_init()
406 (ndev->dev_addr[0] << 24) | (ndev->dev_addr[1] << 16) | in ravb_emac_init()
407 (ndev->dev_addr[2] << 8) | (ndev->dev_addr[3]), MAHR); in ravb_emac_init()
408 ravb_write(ndev, in ravb_emac_init()
409 (ndev->dev_addr[4] << 8) | (ndev->dev_addr[5]), MALR); in ravb_emac_init()
412 ravb_write(ndev, ECSR_ICD | ECSR_MPD, ECSR); in ravb_emac_init()
415 ravb_write(ndev, ECSIPR_ICDIP | ECSIPR_MPDIP | ECSIPR_LCHNGIP, ECSIPR); in ravb_emac_init()
419 static int ravb_dmac_init(struct net_device *ndev) in ravb_dmac_init() argument
421 struct ravb_private *priv = netdev_priv(ndev); in ravb_dmac_init()
425 error = ravb_config(ndev); in ravb_dmac_init()
429 error = ravb_ring_init(ndev, RAVB_BE); in ravb_dmac_init()
432 error = ravb_ring_init(ndev, RAVB_NC); in ravb_dmac_init()
434 ravb_ring_free(ndev, RAVB_BE); in ravb_dmac_init()
439 ravb_ring_format(ndev, RAVB_BE); in ravb_dmac_init()
440 ravb_ring_format(ndev, RAVB_NC); in ravb_dmac_init()
443 ravb_modify(ndev, CCC, CCC_BOC, 0); in ravb_dmac_init()
445 ravb_modify(ndev, CCC, CCC_BOC, CCC_BOC); in ravb_dmac_init()
449 ravb_write(ndev, in ravb_dmac_init()
453 ravb_write(ndev, TGC_TQP_AVBMODE1 | 0x00112200, TGC); in ravb_dmac_init()
456 ravb_write(ndev, TCCR_TFEN, TCCR); in ravb_dmac_init()
461 ravb_write(ndev, 0, DIL); in ravb_dmac_init()
463 ravb_write(ndev, CIE_CRIE | CIE_CTIE | CIE_CL0M, CIE); in ravb_dmac_init()
466 ravb_write(ndev, RIC0_FRE0 | RIC0_FRE1, RIC0); in ravb_dmac_init()
468 ravb_write(ndev, 0, RIC1); in ravb_dmac_init()
470 ravb_write(ndev, RIC2_QFE0 | RIC2_QFE1 | RIC2_RFFE, RIC2); in ravb_dmac_init()
472 ravb_write(ndev, TIC_FTE0 | TIC_FTE1 | TIC_TFUE, TIC); in ravb_dmac_init()
475 ravb_modify(ndev, CCC, CCC_OPC, CCC_OPC_OPERATION); in ravb_dmac_init()
480 static void ravb_get_tx_tstamp(struct net_device *ndev) in ravb_get_tx_tstamp() argument
482 struct ravb_private *priv = netdev_priv(ndev); in ravb_get_tx_tstamp()
491 count = (ravb_read(ndev, TSR) & TSR_TFFL) >> 8; in ravb_get_tx_tstamp()
493 tfa2 = ravb_read(ndev, TFA2); in ravb_get_tx_tstamp()
495 ts.tv_nsec = (u64)ravb_read(ndev, TFA0); in ravb_get_tx_tstamp()
497 ravb_read(ndev, TFA1); in ravb_get_tx_tstamp()
514 ravb_modify(ndev, TCCR, TCCR_TFR, TCCR_TFR); in ravb_get_tx_tstamp()
534 static bool ravb_rx(struct net_device *ndev, int *quota, int q) in ravb_rx() argument
536 struct ravb_private *priv = netdev_priv(ndev); in ravb_rx()
584 dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr), in ravb_rx()
602 skb->protocol = eth_type_trans(skb, ndev); in ravb_rx()
603 if (ndev->features & NETIF_F_RXCSUM) in ravb_rx()
621 skb = netdev_alloc_skb(ndev, in ravb_rx()
627 dma_addr = dma_map_single(ndev->dev.parent, skb->data, in ravb_rx()
634 if (dma_mapping_error(ndev->dev.parent, dma_addr)) in ravb_rx()
649 static void ravb_rcv_snd_disable(struct net_device *ndev) in ravb_rcv_snd_disable() argument
652 ravb_modify(ndev, ECMR, ECMR_RE | ECMR_TE, 0); in ravb_rcv_snd_disable()
655 static void ravb_rcv_snd_enable(struct net_device *ndev) in ravb_rcv_snd_enable() argument
658 ravb_modify(ndev, ECMR, ECMR_RE | ECMR_TE, ECMR_RE | ECMR_TE); in ravb_rcv_snd_enable()
662 static int ravb_stop_dma(struct net_device *ndev) in ravb_stop_dma() argument
667 error = ravb_wait(ndev, TCCR, in ravb_stop_dma()
672 error = ravb_wait(ndev, CSR, CSR_TPO0 | CSR_TPO1 | CSR_TPO2 | CSR_TPO3, in ravb_stop_dma()
678 ravb_rcv_snd_disable(ndev); in ravb_stop_dma()
681 error = ravb_wait(ndev, CSR, CSR_RPO, 0); in ravb_stop_dma()
686 return ravb_config(ndev); in ravb_stop_dma()
690 static void ravb_emac_interrupt_unlocked(struct net_device *ndev) in ravb_emac_interrupt_unlocked() argument
692 struct ravb_private *priv = netdev_priv(ndev); in ravb_emac_interrupt_unlocked()
695 ecsr = ravb_read(ndev, ECSR); in ravb_emac_interrupt_unlocked()
696 ravb_write(ndev, ecsr, ECSR); /* clear interrupt */ in ravb_emac_interrupt_unlocked()
701 ndev->stats.tx_carrier_errors++; in ravb_emac_interrupt_unlocked()
706 psr = ravb_read(ndev, PSR); in ravb_emac_interrupt_unlocked()
711 ravb_rcv_snd_disable(ndev); in ravb_emac_interrupt_unlocked()
714 ravb_rcv_snd_enable(ndev); in ravb_emac_interrupt_unlocked()
721 struct net_device *ndev = dev_id; in ravb_emac_interrupt() local
722 struct ravb_private *priv = netdev_priv(ndev); in ravb_emac_interrupt()
725 ravb_emac_interrupt_unlocked(ndev); in ravb_emac_interrupt()
732 static void ravb_error_interrupt(struct net_device *ndev) in ravb_error_interrupt() argument
734 struct ravb_private *priv = netdev_priv(ndev); in ravb_error_interrupt()
737 eis = ravb_read(ndev, EIS); in ravb_error_interrupt()
738 ravb_write(ndev, ~(EIS_QFS | EIS_RESERVED), EIS); in ravb_error_interrupt()
740 ris2 = ravb_read(ndev, RIS2); in ravb_error_interrupt()
741 ravb_write(ndev, ~(RIS2_QFF0 | RIS2_RFFF | RIS2_RESERVED), in ravb_error_interrupt()
758 static bool ravb_queue_interrupt(struct net_device *ndev, int q) in ravb_queue_interrupt() argument
760 struct ravb_private *priv = netdev_priv(ndev); in ravb_queue_interrupt()
761 u32 ris0 = ravb_read(ndev, RIS0); in ravb_queue_interrupt()
762 u32 ric0 = ravb_read(ndev, RIC0); in ravb_queue_interrupt()
763 u32 tis = ravb_read(ndev, TIS); in ravb_queue_interrupt()
764 u32 tic = ravb_read(ndev, TIC); in ravb_queue_interrupt()
770 ravb_write(ndev, ric0 & ~BIT(q), RIC0); in ravb_queue_interrupt()
771 ravb_write(ndev, tic & ~BIT(q), TIC); in ravb_queue_interrupt()
773 ravb_write(ndev, BIT(q), RID0); in ravb_queue_interrupt()
774 ravb_write(ndev, BIT(q), TID); in ravb_queue_interrupt()
778 netdev_warn(ndev, in ravb_queue_interrupt()
781 netdev_warn(ndev, in ravb_queue_interrupt()
790 static bool ravb_timestamp_interrupt(struct net_device *ndev) in ravb_timestamp_interrupt() argument
792 u32 tis = ravb_read(ndev, TIS); in ravb_timestamp_interrupt()
795 ravb_write(ndev, ~(TIS_TFUF | TIS_RESERVED), TIS); in ravb_timestamp_interrupt()
796 ravb_get_tx_tstamp(ndev); in ravb_timestamp_interrupt()
804 struct net_device *ndev = dev_id; in ravb_interrupt() local
805 struct ravb_private *priv = netdev_priv(ndev); in ravb_interrupt()
811 iss = ravb_read(ndev, ISS); in ravb_interrupt()
818 if (ravb_timestamp_interrupt(ndev)) in ravb_interrupt()
823 if (ravb_queue_interrupt(ndev, q)) in ravb_interrupt()
830 ravb_emac_interrupt_unlocked(ndev); in ravb_interrupt()
836 ravb_error_interrupt(ndev); in ravb_interrupt()
842 ravb_ptp_interrupt(ndev); in ravb_interrupt()
854 struct net_device *ndev = dev_id; in ravb_multi_interrupt() local
855 struct ravb_private *priv = netdev_priv(ndev); in ravb_multi_interrupt()
861 iss = ravb_read(ndev, ISS); in ravb_multi_interrupt()
864 if ((iss & ISS_TFUS) && ravb_timestamp_interrupt(ndev)) in ravb_multi_interrupt()
869 ravb_error_interrupt(ndev); in ravb_multi_interrupt()
875 ravb_ptp_interrupt(ndev); in ravb_multi_interrupt()
886 struct net_device *ndev = dev_id; in ravb_dma_interrupt() local
887 struct ravb_private *priv = netdev_priv(ndev); in ravb_dma_interrupt()
893 if (ravb_queue_interrupt(ndev, q)) in ravb_dma_interrupt()
913 struct net_device *ndev = napi->dev; in ravb_poll() local
914 struct ravb_private *priv = netdev_priv(ndev); in ravb_poll()
922 tis = ravb_read(ndev, TIS); in ravb_poll()
923 ris0 = ravb_read(ndev, RIS0); in ravb_poll()
930 ravb_write(ndev, ~(mask | RIS0_RESERVED), RIS0); in ravb_poll()
931 if (ravb_rx(ndev, "a, q)) in ravb_poll()
938 ravb_write(ndev, ~(mask | TIS_RESERVED), TIS); in ravb_poll()
939 ravb_tx_free(ndev, q, true); in ravb_poll()
940 netif_wake_subqueue(ndev, q); in ravb_poll()
951 ravb_modify(ndev, RIC0, mask, mask); in ravb_poll()
952 ravb_modify(ndev, TIC, mask, mask); in ravb_poll()
954 ravb_write(ndev, mask, RIE0); in ravb_poll()
955 ravb_write(ndev, mask, TIE); in ravb_poll()
963 if (priv->rx_over_errors != ndev->stats.rx_over_errors) in ravb_poll()
964 ndev->stats.rx_over_errors = priv->rx_over_errors; in ravb_poll()
965 if (priv->rx_fifo_errors != ndev->stats.rx_fifo_errors) in ravb_poll()
966 ndev->stats.rx_fifo_errors = priv->rx_fifo_errors; in ravb_poll()
972 static void ravb_adjust_link(struct net_device *ndev) in ravb_adjust_link() argument
974 struct ravb_private *priv = netdev_priv(ndev); in ravb_adjust_link()
975 struct phy_device *phydev = ndev->phydev; in ravb_adjust_link()
983 ravb_rcv_snd_disable(ndev); in ravb_adjust_link()
989 ravb_set_rate(ndev); in ravb_adjust_link()
992 ravb_modify(ndev, ECMR, ECMR_TXF, 0); in ravb_adjust_link()
1004 ravb_rcv_snd_enable(ndev); in ravb_adjust_link()
1019 static int ravb_phy_init(struct net_device *ndev) in ravb_phy_init() argument
1021 struct device_node *np = ndev->dev.parent->of_node; in ravb_phy_init()
1022 struct ravb_private *priv = netdev_priv(ndev); in ravb_phy_init()
1043 phydev = of_phy_connect(ndev, pn, ravb_adjust_link, 0, in ravb_phy_init()
1047 netdev_err(ndev, "failed to connect PHY\n"); in ravb_phy_init()
1058 netdev_err(ndev, "failed to limit PHY to 100Mbit/s\n"); in ravb_phy_init()
1062 netdev_info(ndev, "limited PHY to 100Mbit/s\n"); in ravb_phy_init()
1082 static int ravb_phy_start(struct net_device *ndev) in ravb_phy_start() argument
1086 error = ravb_phy_init(ndev); in ravb_phy_start()
1090 phy_start(ndev->phydev); in ravb_phy_start()
1095 static u32 ravb_get_msglevel(struct net_device *ndev) in ravb_get_msglevel() argument
1097 struct ravb_private *priv = netdev_priv(ndev); in ravb_get_msglevel()
1102 static void ravb_set_msglevel(struct net_device *ndev, u32 value) in ravb_set_msglevel() argument
1104 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_msglevel()
1155 static void ravb_get_ethtool_stats(struct net_device *ndev, in ravb_get_ethtool_stats() argument
1158 struct ravb_private *priv = netdev_priv(ndev); in ravb_get_ethtool_stats()
1184 static void ravb_get_strings(struct net_device *ndev, u32 stringset, u8 *data) in ravb_get_strings() argument
1193 static void ravb_get_ringparam(struct net_device *ndev, in ravb_get_ringparam() argument
1196 struct ravb_private *priv = netdev_priv(ndev); in ravb_get_ringparam()
1204 static int ravb_set_ringparam(struct net_device *ndev, in ravb_set_ringparam() argument
1207 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_ringparam()
1218 if (netif_running(ndev)) { in ravb_set_ringparam()
1219 netif_device_detach(ndev); in ravb_set_ringparam()
1222 ravb_ptp_stop(ndev); in ravb_set_ringparam()
1224 error = ravb_stop_dma(ndev); in ravb_set_ringparam()
1226 netdev_err(ndev, in ravb_set_ringparam()
1230 synchronize_irq(ndev->irq); in ravb_set_ringparam()
1233 ravb_ring_free(ndev, RAVB_BE); in ravb_set_ringparam()
1234 ravb_ring_free(ndev, RAVB_NC); in ravb_set_ringparam()
1241 if (netif_running(ndev)) { in ravb_set_ringparam()
1242 error = ravb_dmac_init(ndev); in ravb_set_ringparam()
1244 netdev_err(ndev, in ravb_set_ringparam()
1250 ravb_emac_init(ndev); in ravb_set_ringparam()
1254 ravb_ptp_init(ndev, priv->pdev); in ravb_set_ringparam()
1256 netif_device_attach(ndev); in ravb_set_ringparam()
1262 static int ravb_get_ts_info(struct net_device *ndev, in ravb_get_ts_info() argument
1265 struct ravb_private *priv = netdev_priv(ndev); in ravb_get_ts_info()
1284 static void ravb_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) in ravb_get_wol() argument
1286 struct ravb_private *priv = netdev_priv(ndev); in ravb_get_wol()
1292 static int ravb_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) in ravb_set_wol() argument
1294 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_wol()
1324 struct net_device *ndev, struct device *dev, in ravb_hook_irq() argument
1330 name = devm_kasprintf(dev, GFP_KERNEL, "%s:%s", ndev->name, ch); in ravb_hook_irq()
1333 error = request_irq(irq, handler, 0, name, ndev); in ravb_hook_irq()
1335 netdev_err(ndev, "cannot request IRQ %s\n", name); in ravb_hook_irq()
1341 static int ravb_open(struct net_device *ndev) in ravb_open() argument
1343 struct ravb_private *priv = netdev_priv(ndev); in ravb_open()
1352 error = request_irq(ndev->irq, ravb_interrupt, IRQF_SHARED, in ravb_open()
1353 ndev->name, ndev); in ravb_open()
1355 netdev_err(ndev, "cannot request IRQ\n"); in ravb_open()
1359 error = ravb_hook_irq(ndev->irq, ravb_multi_interrupt, ndev, in ravb_open()
1363 error = ravb_hook_irq(priv->emac_irq, ravb_emac_interrupt, ndev, in ravb_open()
1368 ndev, dev, "ch0:rx_be"); in ravb_open()
1372 ndev, dev, "ch18:tx_be"); in ravb_open()
1376 ndev, dev, "ch1:rx_nc"); in ravb_open()
1380 ndev, dev, "ch19:tx_nc"); in ravb_open()
1386 error = ravb_dmac_init(ndev); in ravb_open()
1389 ravb_emac_init(ndev); in ravb_open()
1393 ravb_ptp_init(ndev, priv->pdev); in ravb_open()
1395 netif_tx_start_all_queues(ndev); in ravb_open()
1398 error = ravb_phy_start(ndev); in ravb_open()
1407 ravb_ptp_stop(ndev); in ravb_open()
1411 free_irq(priv->tx_irqs[RAVB_NC], ndev); in ravb_open()
1413 free_irq(priv->rx_irqs[RAVB_NC], ndev); in ravb_open()
1415 free_irq(priv->tx_irqs[RAVB_BE], ndev); in ravb_open()
1417 free_irq(priv->rx_irqs[RAVB_BE], ndev); in ravb_open()
1419 free_irq(priv->emac_irq, ndev); in ravb_open()
1421 free_irq(ndev->irq, ndev); in ravb_open()
1429 static void ravb_tx_timeout(struct net_device *ndev) in ravb_tx_timeout() argument
1431 struct ravb_private *priv = netdev_priv(ndev); in ravb_tx_timeout()
1433 netif_err(priv, tx_err, ndev, in ravb_tx_timeout()
1435 ravb_read(ndev, ISS)); in ravb_tx_timeout()
1438 ndev->stats.tx_errors++; in ravb_tx_timeout()
1447 struct net_device *ndev = priv->ndev; in ravb_tx_timeout_work() local
1450 netif_tx_stop_all_queues(ndev); in ravb_tx_timeout_work()
1454 ravb_ptp_stop(ndev); in ravb_tx_timeout_work()
1457 if (ravb_stop_dma(ndev)) { in ravb_tx_timeout_work()
1466 ravb_rcv_snd_enable(ndev); in ravb_tx_timeout_work()
1470 ravb_ring_free(ndev, RAVB_BE); in ravb_tx_timeout_work()
1471 ravb_ring_free(ndev, RAVB_NC); in ravb_tx_timeout_work()
1474 error = ravb_dmac_init(ndev); in ravb_tx_timeout_work()
1480 netdev_err(ndev, "%s: ravb_dmac_init() failed, error %d\n", in ravb_tx_timeout_work()
1484 ravb_emac_init(ndev); in ravb_tx_timeout_work()
1489 ravb_ptp_init(ndev, priv->pdev); in ravb_tx_timeout_work()
1491 netif_tx_start_all_queues(ndev); in ravb_tx_timeout_work()
1495 static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev) in ravb_start_xmit() argument
1497 struct ravb_private *priv = netdev_priv(ndev); in ravb_start_xmit()
1510 netif_err(priv, tx_queued, ndev, in ravb_start_xmit()
1512 netif_stop_subqueue(ndev, q); in ravb_start_xmit()
1540 dma_addr = dma_map_single(ndev->dev.parent, buffer, len, DMA_TO_DEVICE); in ravb_start_xmit()
1541 if (dma_mapping_error(ndev->dev.parent, dma_addr)) in ravb_start_xmit()
1550 dma_addr = dma_map_single(ndev->dev.parent, buffer, len, DMA_TO_DEVICE); in ravb_start_xmit()
1551 if (dma_mapping_error(ndev->dev.parent, dma_addr)) in ravb_start_xmit()
1563 dma_unmap_single(ndev->dev.parent, dma_addr, len, in ravb_start_xmit()
1585 ravb_modify(ndev, TCCR, TCCR_TSRQ0 << q, TCCR_TSRQ0 << q); in ravb_start_xmit()
1590 !ravb_tx_free(ndev, q, true)) in ravb_start_xmit()
1591 netif_stop_subqueue(ndev, q); in ravb_start_xmit()
1599 dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr), in ravb_start_xmit()
1607 static u16 ravb_select_queue(struct net_device *ndev, struct sk_buff *skb, in ravb_select_queue() argument
1617 static struct net_device_stats *ravb_get_stats(struct net_device *ndev) in ravb_get_stats() argument
1619 struct ravb_private *priv = netdev_priv(ndev); in ravb_get_stats()
1622 nstats = &ndev->stats; in ravb_get_stats()
1626 nstats->tx_dropped += ravb_read(ndev, TROCR); in ravb_get_stats()
1627 ravb_write(ndev, 0, TROCR); /* (write clear) */ in ravb_get_stats()
1628 nstats->collisions += ravb_read(ndev, CDCR); in ravb_get_stats()
1629 ravb_write(ndev, 0, CDCR); /* (write clear) */ in ravb_get_stats()
1630 nstats->tx_carrier_errors += ravb_read(ndev, LCCR); in ravb_get_stats()
1631 ravb_write(ndev, 0, LCCR); /* (write clear) */ in ravb_get_stats()
1633 nstats->tx_carrier_errors += ravb_read(ndev, CERCR); in ravb_get_stats()
1634 ravb_write(ndev, 0, CERCR); /* (write clear) */ in ravb_get_stats()
1635 nstats->tx_carrier_errors += ravb_read(ndev, CEECR); in ravb_get_stats()
1636 ravb_write(ndev, 0, CEECR); /* (write clear) */ in ravb_get_stats()
1658 static void ravb_set_rx_mode(struct net_device *ndev) in ravb_set_rx_mode() argument
1660 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_rx_mode()
1664 ravb_modify(ndev, ECMR, ECMR_PRM, in ravb_set_rx_mode()
1665 ndev->flags & IFF_PROMISC ? ECMR_PRM : 0); in ravb_set_rx_mode()
1671 static int ravb_close(struct net_device *ndev) in ravb_close() argument
1673 struct device_node *np = ndev->dev.parent->of_node; in ravb_close()
1674 struct ravb_private *priv = netdev_priv(ndev); in ravb_close()
1677 netif_tx_stop_all_queues(ndev); in ravb_close()
1680 ravb_write(ndev, 0, RIC0); in ravb_close()
1681 ravb_write(ndev, 0, RIC2); in ravb_close()
1682 ravb_write(ndev, 0, TIC); in ravb_close()
1686 ravb_ptp_stop(ndev); in ravb_close()
1689 if (ravb_stop_dma(ndev) < 0) in ravb_close()
1690 netdev_err(ndev, in ravb_close()
1701 if (ndev->phydev) { in ravb_close()
1702 phy_stop(ndev->phydev); in ravb_close()
1703 phy_disconnect(ndev->phydev); in ravb_close()
1709 free_irq(priv->tx_irqs[RAVB_NC], ndev); in ravb_close()
1710 free_irq(priv->rx_irqs[RAVB_NC], ndev); in ravb_close()
1711 free_irq(priv->tx_irqs[RAVB_BE], ndev); in ravb_close()
1712 free_irq(priv->rx_irqs[RAVB_BE], ndev); in ravb_close()
1713 free_irq(priv->emac_irq, ndev); in ravb_close()
1715 free_irq(ndev->irq, ndev); in ravb_close()
1721 ravb_ring_free(ndev, RAVB_BE); in ravb_close()
1722 ravb_ring_free(ndev, RAVB_NC); in ravb_close()
1727 static int ravb_hwtstamp_get(struct net_device *ndev, struct ifreq *req) in ravb_hwtstamp_get() argument
1729 struct ravb_private *priv = netdev_priv(ndev); in ravb_hwtstamp_get()
1751 static int ravb_hwtstamp_set(struct net_device *ndev, struct ifreq *req) in ravb_hwtstamp_set() argument
1753 struct ravb_private *priv = netdev_priv(ndev); in ravb_hwtstamp_set()
1796 static int ravb_do_ioctl(struct net_device *ndev, struct ifreq *req, int cmd) in ravb_do_ioctl() argument
1798 struct phy_device *phydev = ndev->phydev; in ravb_do_ioctl()
1800 if (!netif_running(ndev)) in ravb_do_ioctl()
1808 return ravb_hwtstamp_get(ndev, req); in ravb_do_ioctl()
1810 return ravb_hwtstamp_set(ndev, req); in ravb_do_ioctl()
1816 static int ravb_change_mtu(struct net_device *ndev, int new_mtu) in ravb_change_mtu() argument
1818 if (netif_running(ndev)) in ravb_change_mtu()
1821 ndev->mtu = new_mtu; in ravb_change_mtu()
1822 netdev_update_features(ndev); in ravb_change_mtu()
1827 static void ravb_set_rx_csum(struct net_device *ndev, bool enable) in ravb_set_rx_csum() argument
1829 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_rx_csum()
1835 ravb_rcv_snd_disable(ndev); in ravb_set_rx_csum()
1838 ravb_modify(ndev, ECMR, ECMR_RCSC, enable ? ECMR_RCSC : 0); in ravb_set_rx_csum()
1841 ravb_rcv_snd_enable(ndev); in ravb_set_rx_csum()
1846 static int ravb_set_features(struct net_device *ndev, in ravb_set_features() argument
1849 netdev_features_t changed = ndev->features ^ features; in ravb_set_features()
1852 ravb_set_rx_csum(ndev, features & NETIF_F_RXCSUM); in ravb_set_features()
1854 ndev->features = features; in ravb_set_features()
1929 static int ravb_set_gti(struct net_device *ndev) in ravb_set_gti() argument
1931 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_gti()
1932 struct device *dev = ndev->dev.parent; in ravb_set_gti()
1949 ravb_write(ndev, inc, GTI); in ravb_set_gti()
1954 static void ravb_set_config_mode(struct net_device *ndev) in ravb_set_config_mode() argument
1956 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_config_mode()
1959 ravb_modify(ndev, CCC, CCC_OPC, CCC_OPC_CONFIG); in ravb_set_config_mode()
1961 ravb_modify(ndev, CCC, CCC_CSEL, CCC_CSEL_HPB); in ravb_set_config_mode()
1963 ravb_modify(ndev, CCC, CCC_OPC, CCC_OPC_CONFIG | in ravb_set_config_mode()
1969 static void ravb_set_delay_mode(struct net_device *ndev) in ravb_set_delay_mode() argument
1971 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_delay_mode()
1982 ravb_modify(ndev, APSR, APSR_DM, set); in ravb_set_delay_mode()
1990 struct net_device *ndev; in ravb_probe() local
2008 ndev = alloc_etherdev_mqs(sizeof(struct ravb_private), in ravb_probe()
2010 if (!ndev) in ravb_probe()
2013 ndev->features = NETIF_F_RXCSUM; in ravb_probe()
2014 ndev->hw_features = NETIF_F_RXCSUM; in ravb_probe()
2020 ndev->base_addr = res->start; in ravb_probe()
2032 ndev->irq = irq; in ravb_probe()
2034 SET_NETDEV_DEV(ndev, &pdev->dev); in ravb_probe()
2036 priv = netdev_priv(ndev); in ravb_probe()
2037 priv->ndev = ndev; in ravb_probe()
2091 ndev->max_mtu = 2048 - (ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN); in ravb_probe()
2092 ndev->min_mtu = ETH_MIN_MTU; in ravb_probe()
2095 ndev->netdev_ops = &ravb_netdev_ops; in ravb_probe()
2096 ndev->ethtool_ops = &ravb_ethtool_ops; in ravb_probe()
2099 ravb_set_config_mode(ndev); in ravb_probe()
2102 error = ravb_set_gti(ndev); in ravb_probe()
2107 ravb_modify(ndev, GCCR, GCCR_LTI, GCCR_LTI); in ravb_probe()
2110 ravb_set_delay_mode(ndev); in ravb_probe()
2114 priv->desc_bat = dma_alloc_coherent(ndev->dev.parent, priv->desc_bat_size, in ravb_probe()
2125 ravb_write(ndev, priv->desc_bat_dma, DBAT); in ravb_probe()
2132 ravb_ptp_init(ndev, pdev); in ravb_probe()
2138 ravb_read_mac_address(ndev, of_get_mac_address(np)); in ravb_probe()
2139 if (!is_valid_ether_addr(ndev->dev_addr)) { in ravb_probe()
2142 eth_hw_addr_random(ndev); in ravb_probe()
2152 netif_napi_add(ndev, &priv->napi[RAVB_BE], ravb_poll, 64); in ravb_probe()
2153 netif_napi_add(ndev, &priv->napi[RAVB_NC], ravb_poll, 64); in ravb_probe()
2156 error = register_netdev(ndev); in ravb_probe()
2163 netdev_info(ndev, "Base address at %#x, %pM, IRQ %d.\n", in ravb_probe()
2164 (u32)ndev->base_addr, ndev->dev_addr, ndev->irq); in ravb_probe()
2166 platform_set_drvdata(pdev, ndev); in ravb_probe()
2175 dma_free_coherent(ndev->dev.parent, priv->desc_bat_size, priv->desc_bat, in ravb_probe()
2180 ravb_ptp_stop(ndev); in ravb_probe()
2182 free_netdev(ndev); in ravb_probe()
2191 struct net_device *ndev = platform_get_drvdata(pdev); in ravb_remove() local
2192 struct ravb_private *priv = netdev_priv(ndev); in ravb_remove()
2196 ravb_ptp_stop(ndev); in ravb_remove()
2198 dma_free_coherent(ndev->dev.parent, priv->desc_bat_size, priv->desc_bat, in ravb_remove()
2201 ravb_write(ndev, CCC_OPC_RESET, CCC); in ravb_remove()
2203 unregister_netdev(ndev); in ravb_remove()
2208 free_netdev(ndev); in ravb_remove()
2214 static int ravb_wol_setup(struct net_device *ndev) in ravb_wol_setup() argument
2216 struct ravb_private *priv = netdev_priv(ndev); in ravb_wol_setup()
2219 ravb_write(ndev, 0, RIC0); in ravb_wol_setup()
2220 ravb_write(ndev, 0, RIC2); in ravb_wol_setup()
2221 ravb_write(ndev, 0, TIC); in ravb_wol_setup()
2227 ravb_write(ndev, ECSIPR_MPDIP, ECSIPR); in ravb_wol_setup()
2230 ravb_modify(ndev, ECMR, ECMR_MPDE, ECMR_MPDE); in ravb_wol_setup()
2235 static int ravb_wol_restore(struct net_device *ndev) in ravb_wol_restore() argument
2237 struct ravb_private *priv = netdev_priv(ndev); in ravb_wol_restore()
2244 ravb_modify(ndev, ECMR, ECMR_MPDE, 0); in ravb_wol_restore()
2246 ret = ravb_close(ndev); in ravb_wol_restore()
2255 struct net_device *ndev = dev_get_drvdata(dev); in ravb_suspend() local
2256 struct ravb_private *priv = netdev_priv(ndev); in ravb_suspend()
2259 if (!netif_running(ndev)) in ravb_suspend()
2262 netif_device_detach(ndev); in ravb_suspend()
2265 ret = ravb_wol_setup(ndev); in ravb_suspend()
2267 ret = ravb_close(ndev); in ravb_suspend()
2274 struct net_device *ndev = dev_get_drvdata(dev); in ravb_resume() local
2275 struct ravb_private *priv = netdev_priv(ndev); in ravb_resume()
2280 ravb_write(ndev, CCC_OPC_RESET, CCC); in ravb_resume()
2288 ravb_set_config_mode(ndev); in ravb_resume()
2291 ret = ravb_set_gti(ndev); in ravb_resume()
2296 ravb_modify(ndev, GCCR, GCCR_LTI, GCCR_LTI); in ravb_resume()
2299 ravb_set_delay_mode(ndev); in ravb_resume()
2302 ravb_write(ndev, priv->desc_bat_dma, DBAT); in ravb_resume()
2304 if (netif_running(ndev)) { in ravb_resume()
2306 ret = ravb_wol_restore(ndev); in ravb_resume()
2310 ret = ravb_open(ndev); in ravb_resume()
2313 netif_device_attach(ndev); in ravb_resume()