Lines Matching refs:ndev
43 void ravb_modify(struct net_device *ndev, enum ravb_reg reg, u32 clear, in ravb_modify() argument
46 ravb_write(ndev, (ravb_read(ndev, reg) & ~clear) | set, reg); in ravb_modify()
49 int ravb_wait(struct net_device *ndev, enum ravb_reg reg, u32 mask, u32 value) in ravb_wait() argument
54 if ((ravb_read(ndev, reg) & mask) == value) in ravb_wait()
61 static int ravb_set_opmode(struct net_device *ndev, u32 opmode) in ravb_set_opmode() argument
75 ravb_modify(ndev, CCC, ccc_mask, opmode); in ravb_set_opmode()
77 error = ravb_wait(ndev, CSR, CSR_OPS, csr_ops); in ravb_set_opmode()
79 netdev_err(ndev, "failed to switch device to requested mode (%u)\n", in ravb_set_opmode()
86 static void ravb_set_rate_gbeth(struct net_device *ndev) in ravb_set_rate_gbeth() argument
88 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_rate_gbeth()
92 ravb_write(ndev, GBETH_GECMR_SPEED_10, GECMR); in ravb_set_rate_gbeth()
95 ravb_write(ndev, GBETH_GECMR_SPEED_100, GECMR); in ravb_set_rate_gbeth()
98 ravb_write(ndev, GBETH_GECMR_SPEED_1000, GECMR); in ravb_set_rate_gbeth()
103 static void ravb_set_rate_rcar(struct net_device *ndev) in ravb_set_rate_rcar() argument
105 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_rate_rcar()
109 ravb_write(ndev, GECMR_SPEED_100, GECMR); in ravb_set_rate_rcar()
112 ravb_write(ndev, GECMR_SPEED_1000, GECMR); in ravb_set_rate_rcar()
123 struct net_device *ndev) in ravb_read_mac_address() argument
127 ret = of_get_ethdev_address(np, ndev); in ravb_read_mac_address()
129 u32 mahr = ravb_read(ndev, MAHR); in ravb_read_mac_address()
130 u32 malr = ravb_read(ndev, MALR); in ravb_read_mac_address()
139 eth_hw_addr_set(ndev, addr); in ravb_read_mac_address()
148 ravb_modify(priv->ndev, PIR, mask, set ? mask : 0); in ravb_mdio_ctrl()
175 return (ravb_read(priv->ndev, PIR) & PIR_MDI) != 0; in ravb_get_mdio_data()
195 static int ravb_tx_free(struct net_device *ndev, int q, bool free_txed_only) in ravb_tx_free() argument
197 struct ravb_private *priv = netdev_priv(ndev); in ravb_tx_free()
219 dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr), in ravb_tx_free()
238 static void ravb_rx_ring_free(struct net_device *ndev, int q) in ravb_rx_ring_free() argument
240 struct ravb_private *priv = netdev_priv(ndev); in ravb_rx_ring_free()
247 dma_free_coherent(ndev->dev.parent, ring_size, priv->rx_ring[q].raw, in ravb_rx_ring_free()
253 static void ravb_ring_free(struct net_device *ndev, int q) in ravb_ring_free() argument
255 struct ravb_private *priv = netdev_priv(ndev); in ravb_ring_free()
260 ravb_rx_ring_free(ndev, q); in ravb_ring_free()
263 ravb_tx_free(ndev, q, false); in ravb_ring_free()
267 dma_free_coherent(ndev->dev.parent, ring_size, priv->tx_ring[q], in ravb_ring_free()
295 ravb_alloc_rx_buffer(struct net_device *ndev, int q, u32 entry, gfp_t gfp_mask, in ravb_alloc_rx_buffer() argument
298 struct ravb_private *priv = netdev_priv(ndev); in ravb_alloc_rx_buffer()
317 dma_sync_single_for_device(ndev->dev.parent, dma_addr, in ravb_alloc_rx_buffer()
331 ravb_rx_ring_refill(struct net_device *ndev, int q, u32 count, gfp_t gfp_mask) in ravb_rx_ring_refill() argument
333 struct ravb_private *priv = netdev_priv(ndev); in ravb_rx_ring_refill()
342 if (unlikely(ravb_alloc_rx_buffer(ndev, q, entry, in ravb_rx_ring_refill()
355 static void ravb_ring_format(struct net_device *ndev, int q) in ravb_ring_format() argument
357 struct ravb_private *priv = netdev_priv(ndev); in ravb_ring_format()
403 static void *ravb_alloc_rx_desc(struct net_device *ndev, int q) in ravb_alloc_rx_desc() argument
405 struct ravb_private *priv = netdev_priv(ndev); in ravb_alloc_rx_desc()
410 priv->rx_ring[q].raw = dma_alloc_coherent(ndev->dev.parent, ring_size, in ravb_alloc_rx_desc()
418 static int ravb_ring_init(struct net_device *ndev, int q) in ravb_ring_init() argument
420 struct ravb_private *priv = netdev_priv(ndev); in ravb_ring_init()
427 .dev = ndev->dev.parent, in ravb_ring_init()
451 if (!ravb_alloc_rx_desc(ndev, q)) in ravb_ring_init()
458 num_filled = ravb_rx_ring_refill(ndev, q, priv->num_rx_ring[q], in ravb_ring_init()
474 priv->tx_ring[q] = dma_alloc_coherent(ndev->dev.parent, ring_size, in ravb_ring_init()
483 ravb_ring_free(ndev, q); in ravb_ring_init()
488 static void ravb_csum_init_gbeth(struct net_device *ndev) in ravb_csum_init_gbeth() argument
490 bool tx_enable = ndev->features & NETIF_F_HW_CSUM; in ravb_csum_init_gbeth()
491 bool rx_enable = ndev->features & NETIF_F_RXCSUM; in ravb_csum_init_gbeth()
496 ravb_write(ndev, 0, CSR0); in ravb_csum_init_gbeth()
497 if (ravb_wait(ndev, CSR0, CSR0_TPE | CSR0_RPE, 0)) { in ravb_csum_init_gbeth()
498 netdev_err(ndev, "Timeout enabling hardware checksum\n"); in ravb_csum_init_gbeth()
501 ndev->features &= ~NETIF_F_HW_CSUM; in ravb_csum_init_gbeth()
504 ndev->features &= ~NETIF_F_RXCSUM; in ravb_csum_init_gbeth()
507 ravb_write(ndev, CSR1_CSUM_ENABLE, CSR1); in ravb_csum_init_gbeth()
510 ravb_write(ndev, CSR2_CSUM_ENABLE, CSR2); in ravb_csum_init_gbeth()
514 ravb_write(ndev, CSR0_TPE | CSR0_RPE, CSR0); in ravb_csum_init_gbeth()
517 static void ravb_emac_init_gbeth(struct net_device *ndev) in ravb_emac_init_gbeth() argument
519 struct ravb_private *priv = netdev_priv(ndev); in ravb_emac_init_gbeth()
522 ravb_write(ndev, (1000 << 16) | CXR35_SEL_XMII_MII, CXR35); in ravb_emac_init_gbeth()
523 ravb_modify(ndev, CXR31, CXR31_SEL_LINK0 | CXR31_SEL_LINK1, 0); in ravb_emac_init_gbeth()
525 ravb_write(ndev, (1000 << 16) | CXR35_SEL_XMII_RGMII, CXR35); in ravb_emac_init_gbeth()
526 ravb_modify(ndev, CXR31, CXR31_SEL_LINK0 | CXR31_SEL_LINK1, in ravb_emac_init_gbeth()
531 ravb_write(ndev, priv->info->rx_max_frame_size + ETH_FCS_LEN, RFLR); in ravb_emac_init_gbeth()
534 ravb_write(ndev, ECMR_ZPF | ((priv->duplex > 0) ? ECMR_DM : 0) | in ravb_emac_init_gbeth()
538 ravb_set_rate_gbeth(ndev); in ravb_emac_init_gbeth()
541 ravb_write(ndev, in ravb_emac_init_gbeth()
542 (ndev->dev_addr[0] << 24) | (ndev->dev_addr[1] << 16) | in ravb_emac_init_gbeth()
543 (ndev->dev_addr[2] << 8) | (ndev->dev_addr[3]), MAHR); in ravb_emac_init_gbeth()
544 ravb_write(ndev, (ndev->dev_addr[4] << 8) | (ndev->dev_addr[5]), MALR); in ravb_emac_init_gbeth()
547 ravb_write(ndev, ECSR_ICD | ECSR_LCHNG | ECSR_PFRI, ECSR); in ravb_emac_init_gbeth()
549 ravb_csum_init_gbeth(ndev); in ravb_emac_init_gbeth()
552 ravb_write(ndev, ECSIPR_ICDIP, ECSIPR); in ravb_emac_init_gbeth()
555 static void ravb_emac_init_rcar(struct net_device *ndev) in ravb_emac_init_rcar() argument
557 struct ravb_private *priv = netdev_priv(ndev); in ravb_emac_init_rcar()
566 ravb_write(ndev, priv->info->rx_max_frame_size + ETH_FCS_LEN, RFLR); in ravb_emac_init_rcar()
569 ravb_write(ndev, ECMR_ZPF | ECMR_DM | in ravb_emac_init_rcar()
570 (ndev->features & NETIF_F_RXCSUM ? ECMR_RCSC : 0) | in ravb_emac_init_rcar()
573 ravb_set_rate_rcar(ndev); in ravb_emac_init_rcar()
576 ravb_write(ndev, in ravb_emac_init_rcar()
577 (ndev->dev_addr[0] << 24) | (ndev->dev_addr[1] << 16) | in ravb_emac_init_rcar()
578 (ndev->dev_addr[2] << 8) | (ndev->dev_addr[3]), MAHR); in ravb_emac_init_rcar()
579 ravb_write(ndev, in ravb_emac_init_rcar()
580 (ndev->dev_addr[4] << 8) | (ndev->dev_addr[5]), MALR); in ravb_emac_init_rcar()
583 ravb_write(ndev, ECSR_ICD | ECSR_MPD, ECSR); in ravb_emac_init_rcar()
586 ravb_write(ndev, ECSIPR_ICDIP | ECSIPR_MPDIP | ECSIPR_LCHNGIP, ECSIPR); in ravb_emac_init_rcar()
589 static void ravb_emac_init_rcar_gen4(struct net_device *ndev) in ravb_emac_init_rcar_gen4() argument
591 struct ravb_private *priv = netdev_priv(ndev); in ravb_emac_init_rcar_gen4()
594 ravb_modify(ndev, APSR, APSR_MIISELECT, mii ? APSR_MIISELECT : 0); in ravb_emac_init_rcar_gen4()
596 ravb_emac_init_rcar(ndev); in ravb_emac_init_rcar_gen4()
600 static void ravb_emac_init(struct net_device *ndev) in ravb_emac_init() argument
602 struct ravb_private *priv = netdev_priv(ndev); in ravb_emac_init()
605 info->emac_init(ndev); in ravb_emac_init()
608 static int ravb_dmac_init_gbeth(struct net_device *ndev) in ravb_dmac_init_gbeth() argument
610 struct ravb_private *priv = netdev_priv(ndev); in ravb_dmac_init_gbeth()
613 error = ravb_ring_init(ndev, RAVB_BE); in ravb_dmac_init_gbeth()
618 ravb_ring_format(ndev, RAVB_BE); in ravb_dmac_init_gbeth()
621 ravb_write(ndev, 0x60000000, RCR); in ravb_dmac_init_gbeth()
624 ravb_write(ndev, 0x7ffc0000 | priv->info->rx_max_frame_size, RTC); in ravb_dmac_init_gbeth()
627 ravb_write(ndev, 0x00222200, TGC); in ravb_dmac_init_gbeth()
629 ravb_write(ndev, 0, TCCR); in ravb_dmac_init_gbeth()
632 ravb_write(ndev, RIC0_FRE0, RIC0); in ravb_dmac_init_gbeth()
634 ravb_write(ndev, 0x0, RIC1); in ravb_dmac_init_gbeth()
636 ravb_write(ndev, RIC2_QFE0 | RIC2_RFFE, RIC2); in ravb_dmac_init_gbeth()
638 ravb_write(ndev, TIC_FTE0, TIC); in ravb_dmac_init_gbeth()
643 static int ravb_dmac_init_rcar(struct net_device *ndev) in ravb_dmac_init_rcar() argument
645 struct ravb_private *priv = netdev_priv(ndev); in ravb_dmac_init_rcar()
649 error = ravb_ring_init(ndev, RAVB_BE); in ravb_dmac_init_rcar()
652 error = ravb_ring_init(ndev, RAVB_NC); in ravb_dmac_init_rcar()
654 ravb_ring_free(ndev, RAVB_BE); in ravb_dmac_init_rcar()
659 ravb_ring_format(ndev, RAVB_BE); in ravb_dmac_init_rcar()
660 ravb_ring_format(ndev, RAVB_NC); in ravb_dmac_init_rcar()
663 ravb_write(ndev, in ravb_dmac_init_rcar()
667 ravb_write(ndev, TGC_TQP_AVBMODE1 | 0x00112200, TGC); in ravb_dmac_init_rcar()
670 ravb_write(ndev, TCCR_TFEN, TCCR); in ravb_dmac_init_rcar()
675 ravb_write(ndev, 0, DIL); in ravb_dmac_init_rcar()
677 ravb_write(ndev, CIE_CRIE | CIE_CTIE | CIE_CL0M, CIE); in ravb_dmac_init_rcar()
680 ravb_write(ndev, RIC0_FRE0 | RIC0_FRE1, RIC0); in ravb_dmac_init_rcar()
682 ravb_write(ndev, 0, RIC1); in ravb_dmac_init_rcar()
684 ravb_write(ndev, RIC2_QFE0 | RIC2_QFE1 | RIC2_RFFE, RIC2); in ravb_dmac_init_rcar()
686 ravb_write(ndev, TIC_FTE0 | TIC_FTE1 | TIC_TFUE, TIC); in ravb_dmac_init_rcar()
692 static int ravb_dmac_init(struct net_device *ndev) in ravb_dmac_init() argument
694 struct ravb_private *priv = netdev_priv(ndev); in ravb_dmac_init()
699 error = ravb_set_opmode(ndev, CCC_OPC_CONFIG); in ravb_dmac_init()
703 error = info->dmac_init(ndev); in ravb_dmac_init()
708 return ravb_set_opmode(ndev, CCC_OPC_OPERATION); in ravb_dmac_init()
711 static void ravb_get_tx_tstamp(struct net_device *ndev) in ravb_get_tx_tstamp() argument
713 struct ravb_private *priv = netdev_priv(ndev); in ravb_get_tx_tstamp()
722 count = (ravb_read(ndev, TSR) & TSR_TFFL) >> 8; in ravb_get_tx_tstamp()
724 tfa2 = ravb_read(ndev, TFA2); in ravb_get_tx_tstamp()
726 ts.tv_nsec = (u64)ravb_read(ndev, TFA0); in ravb_get_tx_tstamp()
728 ravb_read(ndev, TFA1); in ravb_get_tx_tstamp()
745 ravb_modify(ndev, TCCR, TCCR_TFR, TCCR_TFR); in ravb_get_tx_tstamp()
799 static int ravb_rx_gbeth(struct net_device *ndev, int budget, int q) in ravb_rx_gbeth() argument
801 struct ravb_private *priv = netdev_priv(ndev); in ravb_rx_gbeth()
852 dma_sync_single_for_cpu(ndev->dev.parent, in ravb_rx_gbeth()
920 skb->protocol = eth_type_trans(skb, ndev); in ravb_rx_gbeth()
921 if (ndev->features & NETIF_F_RXCSUM) in ravb_rx_gbeth()
940 priv->dirty_rx[q] += ravb_rx_ring_refill(ndev, q, in ravb_rx_gbeth()
949 static int ravb_rx_rcar(struct net_device *ndev, int budget, int q) in ravb_rx_rcar() argument
951 struct ravb_private *priv = netdev_priv(ndev); in ravb_rx_rcar()
1000 dma_sync_single_for_cpu(ndev->dev.parent, in ravb_rx_rcar()
1027 skb->protocol = eth_type_trans(skb, ndev); in ravb_rx_rcar()
1028 if (ndev->features & NETIF_F_RXCSUM) in ravb_rx_rcar()
1040 priv->dirty_rx[q] += ravb_rx_ring_refill(ndev, q, in ravb_rx_rcar()
1049 static int ravb_rx(struct net_device *ndev, int budget, int q) in ravb_rx() argument
1051 struct ravb_private *priv = netdev_priv(ndev); in ravb_rx()
1054 return info->receive(ndev, budget, q); in ravb_rx()
1057 static void ravb_rcv_snd_disable(struct net_device *ndev) in ravb_rcv_snd_disable() argument
1060 ravb_modify(ndev, ECMR, ECMR_RE | ECMR_TE, 0); in ravb_rcv_snd_disable()
1063 static void ravb_rcv_snd_enable(struct net_device *ndev) in ravb_rcv_snd_enable() argument
1066 ravb_modify(ndev, ECMR, ECMR_RE | ECMR_TE, ECMR_RE | ECMR_TE); in ravb_rcv_snd_enable()
1070 static int ravb_stop_dma(struct net_device *ndev) in ravb_stop_dma() argument
1072 struct ravb_private *priv = netdev_priv(ndev); in ravb_stop_dma()
1077 error = ravb_wait(ndev, TCCR, info->tccr_mask, 0); in ravb_stop_dma()
1082 error = ravb_wait(ndev, CSR, CSR_TPO0 | CSR_TPO1 | CSR_TPO2 | CSR_TPO3, in ravb_stop_dma()
1088 ravb_rcv_snd_disable(ndev); in ravb_stop_dma()
1091 error = ravb_wait(ndev, CSR, CSR_RPO, 0); in ravb_stop_dma()
1096 return ravb_set_opmode(ndev, CCC_OPC_CONFIG); in ravb_stop_dma()
1100 static void ravb_emac_interrupt_unlocked(struct net_device *ndev) in ravb_emac_interrupt_unlocked() argument
1102 struct ravb_private *priv = netdev_priv(ndev); in ravb_emac_interrupt_unlocked()
1105 ecsr = ravb_read(ndev, ECSR); in ravb_emac_interrupt_unlocked()
1106 ravb_write(ndev, ecsr, ECSR); /* clear interrupt */ in ravb_emac_interrupt_unlocked()
1111 ndev->stats.tx_carrier_errors++; in ravb_emac_interrupt_unlocked()
1116 psr = ravb_read(ndev, PSR); in ravb_emac_interrupt_unlocked()
1121 ravb_rcv_snd_disable(ndev); in ravb_emac_interrupt_unlocked()
1124 ravb_rcv_snd_enable(ndev); in ravb_emac_interrupt_unlocked()
1131 struct net_device *ndev = dev_id; in ravb_emac_interrupt() local
1132 struct ravb_private *priv = netdev_priv(ndev); in ravb_emac_interrupt()
1144 ravb_emac_interrupt_unlocked(ndev); in ravb_emac_interrupt()
1153 static void ravb_error_interrupt(struct net_device *ndev) in ravb_error_interrupt() argument
1155 struct ravb_private *priv = netdev_priv(ndev); in ravb_error_interrupt()
1158 eis = ravb_read(ndev, EIS); in ravb_error_interrupt()
1159 ravb_write(ndev, ~(EIS_QFS | EIS_RESERVED), EIS); in ravb_error_interrupt()
1161 ris2 = ravb_read(ndev, RIS2); in ravb_error_interrupt()
1162 ravb_write(ndev, ~(RIS2_QFF0 | RIS2_QFF1 | RIS2_RFFF | RIS2_RESERVED), in ravb_error_interrupt()
1179 static bool ravb_queue_interrupt(struct net_device *ndev, int q) in ravb_queue_interrupt() argument
1181 struct ravb_private *priv = netdev_priv(ndev); in ravb_queue_interrupt()
1183 u32 ris0 = ravb_read(ndev, RIS0); in ravb_queue_interrupt()
1184 u32 ric0 = ravb_read(ndev, RIC0); in ravb_queue_interrupt()
1185 u32 tis = ravb_read(ndev, TIS); in ravb_queue_interrupt()
1186 u32 tic = ravb_read(ndev, TIC); in ravb_queue_interrupt()
1192 ravb_write(ndev, ric0 & ~BIT(q), RIC0); in ravb_queue_interrupt()
1193 ravb_write(ndev, tic & ~BIT(q), TIC); in ravb_queue_interrupt()
1195 ravb_write(ndev, BIT(q), RID0); in ravb_queue_interrupt()
1196 ravb_write(ndev, BIT(q), TID); in ravb_queue_interrupt()
1200 netdev_warn(ndev, in ravb_queue_interrupt()
1203 netdev_warn(ndev, in ravb_queue_interrupt()
1212 static bool ravb_timestamp_interrupt(struct net_device *ndev) in ravb_timestamp_interrupt() argument
1214 u32 tis = ravb_read(ndev, TIS); in ravb_timestamp_interrupt()
1217 ravb_write(ndev, ~(TIS_TFUF | TIS_RESERVED), TIS); in ravb_timestamp_interrupt()
1218 ravb_get_tx_tstamp(ndev); in ravb_timestamp_interrupt()
1226 struct net_device *ndev = dev_id; in ravb_interrupt() local
1227 struct ravb_private *priv = netdev_priv(ndev); in ravb_interrupt()
1240 iss = ravb_read(ndev, ISS); in ravb_interrupt()
1247 if (ravb_timestamp_interrupt(ndev)) in ravb_interrupt()
1253 if (ravb_queue_interrupt(ndev, q)) in ravb_interrupt()
1257 if (ravb_queue_interrupt(ndev, RAVB_BE)) in ravb_interrupt()
1264 ravb_emac_interrupt_unlocked(ndev); in ravb_interrupt()
1270 ravb_error_interrupt(ndev); in ravb_interrupt()
1276 ravb_ptp_interrupt(ndev); in ravb_interrupt()
1290 struct net_device *ndev = dev_id; in ravb_multi_interrupt() local
1291 struct ravb_private *priv = netdev_priv(ndev); in ravb_multi_interrupt()
1303 iss = ravb_read(ndev, ISS); in ravb_multi_interrupt()
1306 if ((iss & ISS_TFUS) && ravb_timestamp_interrupt(ndev)) in ravb_multi_interrupt()
1311 ravb_error_interrupt(ndev); in ravb_multi_interrupt()
1317 ravb_ptp_interrupt(ndev); in ravb_multi_interrupt()
1330 struct net_device *ndev = dev_id; in ravb_dma_interrupt() local
1331 struct ravb_private *priv = netdev_priv(ndev); in ravb_dma_interrupt()
1343 if (ravb_queue_interrupt(ndev, q)) in ravb_dma_interrupt()
1365 struct net_device *ndev = napi->dev; in ravb_poll() local
1366 struct ravb_private *priv = netdev_priv(ndev); in ravb_poll()
1375 ravb_write(ndev, ~(mask | RIS0_RESERVED), RIS0); in ravb_poll()
1376 work_done = ravb_rx(ndev, budget, q); in ravb_poll()
1381 ravb_write(ndev, ~(mask | TIS_RESERVED), TIS); in ravb_poll()
1382 ravb_tx_free(ndev, q, true); in ravb_poll()
1383 netif_wake_subqueue(ndev, q); in ravb_poll()
1390 if (priv->rx_over_errors != ndev->stats.rx_over_errors) in ravb_poll()
1391 ndev->stats.rx_over_errors = priv->rx_over_errors; in ravb_poll()
1392 if (priv->rx_fifo_errors != ndev->stats.rx_fifo_errors) in ravb_poll()
1393 ndev->stats.rx_fifo_errors = priv->rx_fifo_errors; in ravb_poll()
1399 ravb_modify(ndev, RIC0, mask, mask); in ravb_poll()
1400 ravb_modify(ndev, TIC, mask, mask); in ravb_poll()
1402 ravb_write(ndev, mask, RIE0); in ravb_poll()
1403 ravb_write(ndev, mask, TIE); in ravb_poll()
1411 static void ravb_set_duplex_gbeth(struct net_device *ndev) in ravb_set_duplex_gbeth() argument
1413 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_duplex_gbeth()
1415 ravb_modify(ndev, ECMR, ECMR_DM, priv->duplex > 0 ? ECMR_DM : 0); in ravb_set_duplex_gbeth()
1419 static void ravb_adjust_link(struct net_device *ndev) in ravb_adjust_link() argument
1421 struct ravb_private *priv = netdev_priv(ndev); in ravb_adjust_link()
1423 struct phy_device *phydev = ndev->phydev; in ravb_adjust_link()
1431 ravb_rcv_snd_disable(ndev); in ravb_adjust_link()
1437 ravb_set_duplex_gbeth(ndev); in ravb_adjust_link()
1443 info->set_rate(ndev); in ravb_adjust_link()
1446 ravb_modify(ndev, ECMR, ECMR_TXF, 0); in ravb_adjust_link()
1460 ravb_rcv_snd_enable(ndev); in ravb_adjust_link()
1469 static int ravb_phy_init(struct net_device *ndev) in ravb_phy_init() argument
1471 struct device_node *np = ndev->dev.parent->of_node; in ravb_phy_init()
1472 struct ravb_private *priv = netdev_priv(ndev); in ravb_phy_init()
1499 phydev = of_phy_connect(ndev, pn, ravb_adjust_link, 0, iface); in ravb_phy_init()
1502 netdev_err(ndev, "failed to connect PHY\n"); in ravb_phy_init()
1531 static int ravb_phy_start(struct net_device *ndev) in ravb_phy_start() argument
1535 error = ravb_phy_init(ndev); in ravb_phy_start()
1539 phy_start(ndev->phydev); in ravb_phy_start()
1544 static u32 ravb_get_msglevel(struct net_device *ndev) in ravb_get_msglevel() argument
1546 struct ravb_private *priv = netdev_priv(ndev); in ravb_get_msglevel()
1551 static void ravb_set_msglevel(struct net_device *ndev, u32 value) in ravb_set_msglevel() argument
1553 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_msglevel()
1623 static void ravb_get_ethtool_stats(struct net_device *ndev, in ravb_get_ethtool_stats() argument
1626 struct ravb_private *priv = netdev_priv(ndev); in ravb_get_ethtool_stats()
1655 static void ravb_get_strings(struct net_device *ndev, u32 stringset, u8 *data) in ravb_get_strings() argument
1657 struct ravb_private *priv = netdev_priv(ndev); in ravb_get_strings()
1667 static void ravb_get_ringparam(struct net_device *ndev, in ravb_get_ringparam() argument
1672 struct ravb_private *priv = netdev_priv(ndev); in ravb_get_ringparam()
1680 static int ravb_set_ringparam(struct net_device *ndev, in ravb_set_ringparam() argument
1685 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_ringparam()
1697 if (netif_running(ndev)) { in ravb_set_ringparam()
1698 netif_device_detach(ndev); in ravb_set_ringparam()
1701 ravb_ptp_stop(ndev); in ravb_set_ringparam()
1703 error = ravb_stop_dma(ndev); in ravb_set_ringparam()
1705 netdev_err(ndev, in ravb_set_ringparam()
1709 synchronize_irq(ndev->irq); in ravb_set_ringparam()
1712 ravb_ring_free(ndev, RAVB_BE); in ravb_set_ringparam()
1714 ravb_ring_free(ndev, RAVB_NC); in ravb_set_ringparam()
1721 if (netif_running(ndev)) { in ravb_set_ringparam()
1722 error = ravb_dmac_init(ndev); in ravb_set_ringparam()
1724 netdev_err(ndev, in ravb_set_ringparam()
1730 ravb_emac_init(ndev); in ravb_set_ringparam()
1734 ravb_ptp_init(ndev, priv->pdev); in ravb_set_ringparam()
1736 netif_device_attach(ndev); in ravb_set_ringparam()
1742 static int ravb_get_ts_info(struct net_device *ndev, in ravb_get_ts_info() argument
1745 struct ravb_private *priv = netdev_priv(ndev); in ravb_get_ts_info()
1765 static void ravb_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) in ravb_get_wol() argument
1767 struct ravb_private *priv = netdev_priv(ndev); in ravb_get_wol()
1773 static int ravb_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) in ravb_set_wol() argument
1775 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_wol()
1805 static int ravb_set_config_mode(struct net_device *ndev) in ravb_set_config_mode() argument
1807 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_config_mode()
1812 error = ravb_set_opmode(ndev, CCC_OPC_CONFIG); in ravb_set_config_mode()
1816 ravb_modify(ndev, CCC, CCC_CSEL, CCC_CSEL_HPB); in ravb_set_config_mode()
1818 error = ravb_set_opmode(ndev, CCC_OPC_CONFIG | CCC_GAC | CCC_CSEL_HPB); in ravb_set_config_mode()
1820 error = ravb_set_opmode(ndev, CCC_OPC_CONFIG); in ravb_set_config_mode()
1826 static void ravb_set_gti(struct net_device *ndev) in ravb_set_gti() argument
1828 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_gti()
1834 ravb_write(ndev, priv->gti_tiv, GTI); in ravb_set_gti()
1837 ravb_modify(ndev, GCCR, GCCR_LTI, GCCR_LTI); in ravb_set_gti()
1840 static int ravb_compute_gti(struct net_device *ndev) in ravb_compute_gti() argument
1842 struct ravb_private *priv = netdev_priv(ndev); in ravb_compute_gti()
1844 struct device *dev = ndev->dev.parent; in ravb_compute_gti()
1871 static void ravb_parse_delay_mode(struct device_node *np, struct net_device *ndev) in ravb_parse_delay_mode() argument
1873 struct ravb_private *priv = netdev_priv(ndev); in ravb_parse_delay_mode()
1908 static void ravb_set_delay_mode(struct net_device *ndev) in ravb_set_delay_mode() argument
1910 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_delay_mode()
1920 ravb_modify(ndev, APSR, APSR_RDM | APSR_TDM, set); in ravb_set_delay_mode()
1924 static int ravb_open(struct net_device *ndev) in ravb_open() argument
1926 struct ravb_private *priv = netdev_priv(ndev); in ravb_open()
1940 error = ravb_set_config_mode(ndev); in ravb_open()
1944 ravb_set_delay_mode(ndev); in ravb_open()
1945 ravb_write(ndev, priv->desc_bat_dma, DBAT); in ravb_open()
1948 error = ravb_dmac_init(ndev); in ravb_open()
1952 ravb_emac_init(ndev); in ravb_open()
1954 ravb_set_gti(ndev); in ravb_open()
1958 ravb_ptp_init(ndev, priv->pdev); in ravb_open()
1961 error = ravb_phy_start(ndev); in ravb_open()
1965 netif_tx_start_all_queues(ndev); in ravb_open()
1972 ravb_ptp_stop(ndev); in ravb_open()
1973 ravb_stop_dma(ndev); in ravb_open()
1975 ravb_set_opmode(ndev, CCC_OPC_RESET); in ravb_open()
1987 static void ravb_tx_timeout(struct net_device *ndev, unsigned int txqueue) in ravb_tx_timeout() argument
1989 struct ravb_private *priv = netdev_priv(ndev); in ravb_tx_timeout()
1991 netif_err(priv, tx_err, ndev, in ravb_tx_timeout()
1993 ravb_read(ndev, ISS)); in ravb_tx_timeout()
1996 ndev->stats.tx_errors++; in ravb_tx_timeout()
2006 struct net_device *ndev = priv->ndev; in ravb_tx_timeout_work() local
2015 netif_tx_stop_all_queues(ndev); in ravb_tx_timeout_work()
2019 ravb_ptp_stop(ndev); in ravb_tx_timeout_work()
2022 if (ravb_stop_dma(ndev)) { in ravb_tx_timeout_work()
2031 ravb_rcv_snd_enable(ndev); in ravb_tx_timeout_work()
2035 ravb_ring_free(ndev, RAVB_BE); in ravb_tx_timeout_work()
2037 ravb_ring_free(ndev, RAVB_NC); in ravb_tx_timeout_work()
2040 error = ravb_dmac_init(ndev); in ravb_tx_timeout_work()
2046 netdev_err(ndev, "%s: ravb_dmac_init() failed, error %d\n", in ravb_tx_timeout_work()
2050 ravb_emac_init(ndev); in ravb_tx_timeout_work()
2055 ravb_ptp_init(ndev, priv->pdev); in ravb_tx_timeout_work()
2057 netif_tx_start_all_queues(ndev); in ravb_tx_timeout_work()
2106 static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev) in ravb_start_xmit() argument
2108 struct ravb_private *priv = netdev_priv(ndev); in ravb_start_xmit()
2126 netif_err(priv, tx_queued, ndev, in ravb_start_xmit()
2128 netif_stop_subqueue(ndev, q); in ravb_start_xmit()
2160 dma_addr = dma_map_single(ndev->dev.parent, buffer, len, in ravb_start_xmit()
2162 if (dma_mapping_error(ndev->dev.parent, dma_addr)) in ravb_start_xmit()
2171 dma_addr = dma_map_single(ndev->dev.parent, buffer, len, in ravb_start_xmit()
2173 if (dma_mapping_error(ndev->dev.parent, dma_addr)) in ravb_start_xmit()
2180 dma_addr = dma_map_single(ndev->dev.parent, skb->data, skb->len, in ravb_start_xmit()
2182 if (dma_mapping_error(ndev->dev.parent, dma_addr)) in ravb_start_xmit()
2195 dma_unmap_single(ndev->dev.parent, dma_addr, in ravb_start_xmit()
2222 ravb_modify(ndev, TCCR, TCCR_TSRQ0 << q, TCCR_TSRQ0 << q); in ravb_start_xmit()
2227 !ravb_tx_free(ndev, q, true)) in ravb_start_xmit()
2228 netif_stop_subqueue(ndev, q); in ravb_start_xmit()
2235 dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr), in ravb_start_xmit()
2243 static u16 ravb_select_queue(struct net_device *ndev, struct sk_buff *skb, in ravb_select_queue() argument
2252 static struct net_device_stats *ravb_get_stats(struct net_device *ndev) in ravb_get_stats() argument
2254 struct ravb_private *priv = netdev_priv(ndev); in ravb_get_stats()
2259 nstats = &ndev->stats; in ravb_get_stats()
2269 nstats->tx_dropped += ravb_read(ndev, TROCR); in ravb_get_stats()
2270 ravb_write(ndev, 0, TROCR); /* (write clear) */ in ravb_get_stats()
2274 nstats->collisions += ravb_read(ndev, CXR41); in ravb_get_stats()
2275 ravb_write(ndev, 0, CXR41); /* (write clear) */ in ravb_get_stats()
2276 nstats->tx_carrier_errors += ravb_read(ndev, CXR42); in ravb_get_stats()
2277 ravb_write(ndev, 0, CXR42); /* (write clear) */ in ravb_get_stats()
2313 static void ravb_set_rx_mode(struct net_device *ndev) in ravb_set_rx_mode() argument
2315 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_rx_mode()
2319 ravb_modify(ndev, ECMR, ECMR_PRM, in ravb_set_rx_mode()
2320 ndev->flags & IFF_PROMISC ? ECMR_PRM : 0); in ravb_set_rx_mode()
2325 static int ravb_close(struct net_device *ndev) in ravb_close() argument
2327 struct device_node *np = ndev->dev.parent->of_node; in ravb_close()
2328 struct ravb_private *priv = netdev_priv(ndev); in ravb_close()
2334 netif_tx_stop_all_queues(ndev); in ravb_close()
2337 ravb_write(ndev, 0, RIC0); in ravb_close()
2338 ravb_write(ndev, 0, RIC2); in ravb_close()
2339 ravb_write(ndev, 0, TIC); in ravb_close()
2342 if (ndev->phydev) { in ravb_close()
2343 phy_stop(ndev->phydev); in ravb_close()
2344 phy_disconnect(ndev->phydev); in ravb_close()
2351 ravb_ptp_stop(ndev); in ravb_close()
2354 if (ravb_stop_dma(ndev) < 0) in ravb_close()
2355 netdev_err(ndev, in ravb_close()
2374 ravb_ring_free(ndev, RAVB_BE); in ravb_close()
2376 ravb_ring_free(ndev, RAVB_NC); in ravb_close()
2379 ravb_get_stats(ndev); in ravb_close()
2382 error = ravb_set_opmode(ndev, CCC_OPC_RESET); in ravb_close()
2392 static int ravb_hwtstamp_get(struct net_device *ndev, struct ifreq *req) in ravb_hwtstamp_get() argument
2394 struct ravb_private *priv = netdev_priv(ndev); in ravb_hwtstamp_get()
2416 static int ravb_hwtstamp_set(struct net_device *ndev, struct ifreq *req) in ravb_hwtstamp_set() argument
2418 struct ravb_private *priv = netdev_priv(ndev); in ravb_hwtstamp_set()
2457 static int ravb_do_ioctl(struct net_device *ndev, struct ifreq *req, int cmd) in ravb_do_ioctl() argument
2459 struct phy_device *phydev = ndev->phydev; in ravb_do_ioctl()
2461 if (!netif_running(ndev)) in ravb_do_ioctl()
2469 return ravb_hwtstamp_get(ndev, req); in ravb_do_ioctl()
2471 return ravb_hwtstamp_set(ndev, req); in ravb_do_ioctl()
2477 static int ravb_change_mtu(struct net_device *ndev, int new_mtu) in ravb_change_mtu() argument
2479 struct ravb_private *priv = netdev_priv(ndev); in ravb_change_mtu()
2481 WRITE_ONCE(ndev->mtu, new_mtu); in ravb_change_mtu()
2483 if (netif_running(ndev)) { in ravb_change_mtu()
2485 ravb_emac_init(ndev); in ravb_change_mtu()
2488 netdev_update_features(ndev); in ravb_change_mtu()
2493 static void ravb_set_rx_csum(struct net_device *ndev, bool enable) in ravb_set_rx_csum() argument
2495 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_rx_csum()
2501 ravb_rcv_snd_disable(ndev); in ravb_set_rx_csum()
2504 ravb_modify(ndev, ECMR, ECMR_RCSC, enable ? ECMR_RCSC : 0); in ravb_set_rx_csum()
2507 ravb_rcv_snd_enable(ndev); in ravb_set_rx_csum()
2512 static int ravb_endisable_csum_gbeth(struct net_device *ndev, enum ravb_reg reg, in ravb_endisable_csum_gbeth() argument
2518 ravb_write(ndev, csr0 & ~mask, CSR0); in ravb_endisable_csum_gbeth()
2519 ret = ravb_wait(ndev, CSR0, mask, 0); in ravb_endisable_csum_gbeth()
2521 ravb_write(ndev, val, reg); in ravb_endisable_csum_gbeth()
2523 ravb_write(ndev, csr0, CSR0); in ravb_endisable_csum_gbeth()
2528 static int ravb_set_features_gbeth(struct net_device *ndev, in ravb_set_features_gbeth() argument
2531 netdev_features_t changed = ndev->features ^ features; in ravb_set_features_gbeth()
2532 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_features_gbeth()
2544 ret = ravb_endisable_csum_gbeth(ndev, CSR2, val, CSR0_RPE); in ravb_set_features_gbeth()
2555 ret = ravb_endisable_csum_gbeth(ndev, CSR1, val, CSR0_TPE); in ravb_set_features_gbeth()
2566 static int ravb_set_features_rcar(struct net_device *ndev, in ravb_set_features_rcar() argument
2569 netdev_features_t changed = ndev->features ^ features; in ravb_set_features_rcar()
2572 ravb_set_rx_csum(ndev, features & NETIF_F_RXCSUM); in ravb_set_features_rcar()
2577 static int ravb_set_features(struct net_device *ndev, in ravb_set_features() argument
2580 struct ravb_private *priv = netdev_priv(ndev); in ravb_set_features()
2588 ret = info->set_feature(ndev, features); in ravb_set_features()
2597 ndev->features = features; in ravb_set_features()
2820 struct net_device *ndev = priv->ndev; in ravb_setup_irq() local
2843 error = devm_request_irq(dev, irq_num, handler, flags, devname, ndev); in ravb_setup_irq()
2845 netdev_err(ndev, "cannot request IRQ %s\n", devname); in ravb_setup_irq()
2853 struct net_device *ndev = priv->ndev; in ravb_setup_irqs() local
2858 return ravb_setup_irq(priv, NULL, NULL, &ndev->irq, ravb_interrupt); in ravb_setup_irqs()
2868 error = ravb_setup_irq(priv, irq_name, "ch22:multi", &ndev->irq, ravb_multi_interrupt); in ravb_setup_irqs()
2908 struct net_device *ndev; in ravb_probe() local
2923 ndev = alloc_etherdev_mqs(sizeof(struct ravb_private), in ravb_probe()
2925 if (!ndev) in ravb_probe()
2930 ndev->features = info->net_features; in ravb_probe()
2931 ndev->hw_features = info->net_hw_features; in ravb_probe()
2932 ndev->vlan_features = info->vlan_features; in ravb_probe()
2938 SET_NETDEV_DEV(ndev, &pdev->dev); in ravb_probe()
2940 priv = netdev_priv(ndev); in ravb_probe()
2943 priv->ndev = ndev; in ravb_probe()
2977 platform_set_drvdata(pdev, ndev); in ravb_probe()
2992 ndev->base_addr = res->start; in ravb_probe()
3005 ndev->max_mtu = info->tx_max_frame_size - in ravb_probe()
3007 ndev->min_mtu = ETH_MIN_MTU; in ravb_probe()
3017 ndev->netdev_ops = &ravb_netdev_ops; in ravb_probe()
3018 ndev->ethtool_ops = &ravb_ethtool_ops; in ravb_probe()
3020 error = ravb_compute_gti(ndev); in ravb_probe()
3024 ravb_parse_delay_mode(np, ndev); in ravb_probe()
3028 priv->desc_bat = dma_alloc_coherent(ndev->dev.parent, priv->desc_bat_size, in ravb_probe()
3047 error = ravb_set_opmode(ndev, CCC_OPC_CONFIG); in ravb_probe()
3052 ravb_read_mac_address(np, ndev); in ravb_probe()
3053 if (!is_valid_ether_addr(ndev->dev_addr)) { in ravb_probe()
3056 eth_hw_addr_random(ndev); in ravb_probe()
3067 error = ravb_set_opmode(ndev, CCC_OPC_RESET); in ravb_probe()
3071 netif_napi_add(ndev, &priv->napi[RAVB_BE], ravb_poll); in ravb_probe()
3073 netif_napi_add(ndev, &priv->napi[RAVB_NC], ravb_poll); in ravb_probe()
3076 netdev_sw_irq_coalesce_default_on(ndev); in ravb_probe()
3078 dev_set_threaded(ndev, true); in ravb_probe()
3082 error = register_netdev(ndev); in ravb_probe()
3089 netdev_info(ndev, "Base address at %#x, %pM, IRQ %d.\n", in ravb_probe()
3090 (u32)ndev->base_addr, ndev->dev_addr, ndev->irq); in ravb_probe()
3105 ravb_set_opmode(ndev, CCC_OPC_RESET); in ravb_probe()
3106 dma_free_coherent(ndev->dev.parent, priv->desc_bat_size, priv->desc_bat, in ravb_probe()
3117 free_netdev(ndev); in ravb_probe()
3123 struct net_device *ndev = platform_get_drvdata(pdev); in ravb_remove() local
3124 struct ravb_private *priv = netdev_priv(ndev); in ravb_remove()
3133 unregister_netdev(ndev); in ravb_remove()
3140 dma_free_coherent(ndev->dev.parent, priv->desc_bat_size, priv->desc_bat, in ravb_remove()
3148 free_netdev(ndev); in ravb_remove()
3152 static int ravb_wol_setup(struct net_device *ndev) in ravb_wol_setup() argument
3154 struct ravb_private *priv = netdev_priv(ndev); in ravb_wol_setup()
3158 ravb_write(ndev, 0, RIC0); in ravb_wol_setup()
3159 ravb_write(ndev, 0, RIC2); in ravb_wol_setup()
3160 ravb_write(ndev, 0, TIC); in ravb_wol_setup()
3167 ravb_write(ndev, ECSIPR_MPDIP, ECSIPR); in ravb_wol_setup()
3170 ravb_modify(ndev, ECMR, ECMR_MPDE, ECMR_MPDE); in ravb_wol_setup()
3173 ravb_ptp_stop(ndev); in ravb_wol_setup()
3178 static int ravb_wol_restore(struct net_device *ndev) in ravb_wol_restore() argument
3180 struct ravb_private *priv = netdev_priv(ndev); in ravb_wol_restore()
3185 error = ravb_set_opmode(ndev, CCC_OPC_RESET); in ravb_wol_restore()
3190 error = ravb_set_config_mode(ndev); in ravb_wol_restore()
3195 ravb_ptp_init(ndev, priv->pdev); in ravb_wol_restore()
3202 ravb_modify(ndev, ECMR, ECMR_MPDE, 0); in ravb_wol_restore()
3204 ravb_close(ndev); in ravb_wol_restore()
3211 struct net_device *ndev = dev_get_drvdata(dev); in ravb_suspend() local
3212 struct ravb_private *priv = netdev_priv(ndev); in ravb_suspend()
3215 if (!netif_running(ndev)) in ravb_suspend()
3218 netif_device_detach(ndev); in ravb_suspend()
3222 ret = ravb_wol_setup(ndev); in ravb_suspend()
3227 ret = ravb_close(ndev); in ravb_suspend()
3242 struct net_device *ndev = dev_get_drvdata(dev); in ravb_resume() local
3243 struct ravb_private *priv = netdev_priv(ndev); in ravb_resume()
3250 if (!netif_running(ndev)) in ravb_resume()
3256 ret = ravb_wol_restore(ndev); in ravb_resume()
3265 ret = ravb_open(ndev); in ravb_resume()
3270 ravb_set_rx_mode(ndev); in ravb_resume()
3271 netif_device_attach(ndev); in ravb_resume()
3286 struct net_device *ndev = dev_get_drvdata(dev); in ravb_runtime_suspend() local
3287 struct ravb_private *priv = netdev_priv(ndev); in ravb_runtime_suspend()
3296 struct net_device *ndev = dev_get_drvdata(dev); in ravb_runtime_resume() local
3297 struct ravb_private *priv = netdev_priv(ndev); in ravb_runtime_resume()