1 // SPDX-License-Identifier: GPL-2.0
3 * sni_ave.c - Socionext UniPhier AVE ethernet driver
4 * Copyright 2014 Panasonic Corporation
5 * Copyright 2015-2017 Socionext Inc.
8 #include <linux/bitops.h>
10 #include <linux/etherdevice.h>
11 #include <linux/interrupt.h>
13 #include <linux/iopoll.h>
14 #include <linux/mii.h>
15 #include <linux/module.h>
16 #include <linux/netdevice.h>
17 #include <linux/of_net.h>
18 #include <linux/of_mdio.h>
19 #include <linux/of_platform.h>
20 #include <linux/phy.h>
21 #include <linux/reset.h>
22 #include <linux/types.h>
23 #include <linux/u64_stats_sync.h>
25 /* General Register Group */
26 #define AVE_IDR 0x000 /* ID */
27 #define AVE_VR 0x004 /* Version */
28 #define AVE_GRR 0x008 /* Global Reset */
29 #define AVE_CFGR 0x00c /* Configuration */
31 /* Interrupt Register Group */
32 #define AVE_GIMR 0x100 /* Global Interrupt Mask */
33 #define AVE_GISR 0x104 /* Global Interrupt Status */
35 /* MAC Register Group */
36 #define AVE_TXCR 0x200 /* TX Setup */
37 #define AVE_RXCR 0x204 /* RX Setup */
38 #define AVE_RXMAC1R 0x208 /* MAC address (lower) */
39 #define AVE_RXMAC2R 0x20c /* MAC address (upper) */
40 #define AVE_MDIOCTR 0x214 /* MDIO Control */
41 #define AVE_MDIOAR 0x218 /* MDIO Address */
42 #define AVE_MDIOWDR 0x21c /* MDIO Data */
43 #define AVE_MDIOSR 0x220 /* MDIO Status */
44 #define AVE_MDIORDR 0x224 /* MDIO Rd Data */
46 /* Descriptor Control Register Group */
47 #define AVE_DESCC 0x300 /* Descriptor Control */
48 #define AVE_TXDC 0x304 /* TX Descriptor Configuration */
49 #define AVE_RXDC0 0x308 /* RX Descriptor Ring0 Configuration */
50 #define AVE_IIRQC 0x34c /* Interval IRQ Control */
52 /* Packet Filter Register Group */
53 #define AVE_PKTF_BASE 0x800 /* PF Base Address */
54 #define AVE_PFMBYTE_BASE 0xd00 /* PF Mask Byte Base Address */
55 #define AVE_PFMBIT_BASE 0xe00 /* PF Mask Bit Base Address */
56 #define AVE_PFSEL_BASE 0xf00 /* PF Selector Base Address */
57 #define AVE_PFEN 0xffc /* Packet Filter Enable */
58 #define AVE_PKTF(ent) (AVE_PKTF_BASE + (ent) * 0x40)
59 #define AVE_PFMBYTE(ent) (AVE_PFMBYTE_BASE + (ent) * 8)
60 #define AVE_PFMBIT(ent) (AVE_PFMBIT_BASE + (ent) * 4)
61 #define AVE_PFSEL(ent) (AVE_PFSEL_BASE + (ent) * 4)
63 /* 64bit descriptor memory */
64 #define AVE_DESC_SIZE_64 12 /* Descriptor Size */
66 #define AVE_TXDM_64 0x1000 /* Tx Descriptor Memory */
67 #define AVE_RXDM_64 0x1c00 /* Rx Descriptor Memory */
69 #define AVE_TXDM_SIZE_64 0x0ba0 /* Tx Descriptor Memory Size 3KB */
70 #define AVE_RXDM_SIZE_64 0x6000 /* Rx Descriptor Memory Size 24KB */
72 /* 32bit descriptor memory */
73 #define AVE_DESC_SIZE_32 8 /* Descriptor Size */
75 #define AVE_TXDM_32 0x1000 /* Tx Descriptor Memory */
76 #define AVE_RXDM_32 0x1800 /* Rx Descriptor Memory */
78 #define AVE_TXDM_SIZE_32 0x07c0 /* Tx Descriptor Memory Size 2KB */
79 #define AVE_RXDM_SIZE_32 0x4000 /* Rx Descriptor Memory Size 16KB */
81 /* RMII Bridge Register Group */
82 #define AVE_RSTCTRL 0x8028 /* Reset control */
83 #define AVE_RSTCTRL_RMIIRST BIT(16)
84 #define AVE_LINKSEL 0x8034 /* Link speed setting */
85 #define AVE_LINKSEL_100M BIT(0)
88 #define AVE_GRR_RXFFR BIT(5) /* Reset RxFIFO */
89 #define AVE_GRR_PHYRST BIT(4) /* Reset external PHY */
90 #define AVE_GRR_GRST BIT(0) /* Reset all MAC */
93 #define AVE_CFGR_FLE BIT(31) /* Filter Function */
94 #define AVE_CFGR_CHE BIT(30) /* Checksum Function */
95 #define AVE_CFGR_MII BIT(27) /* Func mode (1:MII/RMII, 0:RGMII) */
96 #define AVE_CFGR_IPFCEN BIT(24) /* IP fragment sum Enable */
98 /* AVE_GISR (common with GIMR) */
99 #define AVE_GI_PHY BIT(24) /* PHY interrupt */
100 #define AVE_GI_TX BIT(16) /* Tx complete */
101 #define AVE_GI_RXERR BIT(8) /* Receive frame more than max size */
102 #define AVE_GI_RXOVF BIT(7) /* Overflow at the RxFIFO */
103 #define AVE_GI_RXDROP BIT(6) /* Drop packet */
104 #define AVE_GI_RXIINT BIT(5) /* Interval interrupt */
107 #define AVE_TXCR_FLOCTR BIT(18) /* Flow control */
108 #define AVE_TXCR_TXSPD_1G BIT(17)
109 #define AVE_TXCR_TXSPD_100 BIT(16)
112 #define AVE_RXCR_RXEN BIT(30) /* Rx enable */
113 #define AVE_RXCR_FDUPEN BIT(22) /* Interface mode */
114 #define AVE_RXCR_FLOCTR BIT(21) /* Flow control */
115 #define AVE_RXCR_AFEN BIT(19) /* MAC address filter */
116 #define AVE_RXCR_DRPEN BIT(18) /* Drop pause frame */
117 #define AVE_RXCR_MPSIZ_MASK GENMASK(10, 0)
120 #define AVE_MDIOCTR_RREQ BIT(3) /* Read request */
121 #define AVE_MDIOCTR_WREQ BIT(2) /* Write request */
124 #define AVE_MDIOSR_STS BIT(0) /* access status */
127 #define AVE_DESCC_STATUS_MASK GENMASK(31, 16)
128 #define AVE_DESCC_RD0 BIT(8) /* Enable Rx descriptor Ring0 */
129 #define AVE_DESCC_RDSTP BIT(4) /* Pause Rx descriptor */
130 #define AVE_DESCC_TD BIT(0) /* Enable Tx descriptor */
133 #define AVE_TXDC_SIZE GENMASK(27, 16) /* Size of Tx descriptor */
134 #define AVE_TXDC_ADDR GENMASK(11, 0) /* Start address */
135 #define AVE_TXDC_ADDR_START 0
138 #define AVE_RXDC0_SIZE GENMASK(30, 16) /* Size of Rx descriptor */
139 #define AVE_RXDC0_ADDR GENMASK(14, 0) /* Start address */
140 #define AVE_RXDC0_ADDR_START 0
143 #define AVE_IIRQC_EN0 BIT(27) /* Enable interval interrupt Ring0 */
144 #define AVE_IIRQC_BSCK GENMASK(15, 0) /* Interval count unit */
146 /* Command status for descriptor */
147 #define AVE_STS_OWN BIT(31) /* Descriptor ownership */
148 #define AVE_STS_INTR BIT(29) /* Request for interrupt */
149 #define AVE_STS_OK BIT(27) /* Normal transmit */
151 #define AVE_STS_NOCSUM BIT(28) /* No use HW checksum */
152 #define AVE_STS_1ST BIT(26) /* Head of buffer chain */
153 #define AVE_STS_LAST BIT(25) /* Tail of buffer chain */
154 #define AVE_STS_OWC BIT(21) /* Out of window,Late Collision */
155 #define AVE_STS_EC BIT(20) /* Excess collision occurred */
156 #define AVE_STS_PKTLEN_TX_MASK GENMASK(15, 0)
158 #define AVE_STS_CSSV BIT(21) /* Checksum check performed */
159 #define AVE_STS_CSER BIT(20) /* Checksum error detected */
160 #define AVE_STS_PKTLEN_RX_MASK GENMASK(10, 0)
163 #define AVE_PFMBYTE_MASK0 (GENMASK(31, 8) | GENMASK(5, 0))
164 #define AVE_PFMBYTE_MASK1 GENMASK(25, 0)
165 #define AVE_PFMBIT_MASK GENMASK(15, 0)
167 #define AVE_PF_SIZE 17 /* Number of all packet filter */
168 #define AVE_PF_MULTICAST_SIZE 7 /* Number of multicast filter */
170 #define AVE_PFNUM_FILTER 0 /* No.0 */
171 #define AVE_PFNUM_UNICAST 1 /* No.1 */
172 #define AVE_PFNUM_BROADCAST 2 /* No.2 */
173 #define AVE_PFNUM_MULTICAST 11 /* No.11-17 */
175 /* NETIF Message control */
176 #define AVE_DEFAULT_MSG_ENABLE (NETIF_MSG_DRV | \
185 /* Parameter for descriptor */
186 #define AVE_NR_TXDESC 32 /* Tx descriptor */
187 #define AVE_NR_RXDESC 64 /* Rx descriptor */
189 #define AVE_DESC_OFS_CMDSTS 0
190 #define AVE_DESC_OFS_ADDRL 4
191 #define AVE_DESC_OFS_ADDRU 8
193 /* Parameter for ethernet frame */
194 #define AVE_MAX_ETHFRAME 1518
196 /* Parameter for interrupt */
197 #define AVE_INTM_COUNT 20
198 #define AVE_FORCE_TXINTCNT 1
200 #define IS_DESC_64BIT(p) ((p)->data->is_desc_64bit)
215 struct sk_buff
*skbs
;
220 struct ave_desc_info
{
221 u32 ndesc
; /* number of descriptor */
222 u32 daddr
; /* start address of descriptor */
223 u32 proc_idx
; /* index of processing packet */
224 u32 done_idx
; /* index of processed packet */
225 struct ave_desc
*desc
; /* skb info related descriptor */
228 struct ave_soc_data
{
233 struct u64_stats_sync syncp
;
246 unsigned int desc_size
;
249 struct reset_control
*rst
;
250 phy_interface_t phy_mode
;
251 struct phy_device
*phydev
;
252 struct mii_bus
*mdio
;
255 struct ave_stats stats_rx
;
256 struct ave_stats stats_tx
;
259 struct net_device
*ndev
;
260 struct napi_struct napi_rx
;
261 struct napi_struct napi_tx
;
264 struct ave_desc_info rx
;
265 struct ave_desc_info tx
;
272 const struct ave_soc_data
*data
;
275 static u32
ave_desc_read(struct net_device
*ndev
, enum desc_id id
, int entry
,
278 struct ave_private
*priv
= netdev_priv(ndev
);
281 addr
= ((id
== AVE_DESCID_TX
) ? priv
->tx
.daddr
: priv
->rx
.daddr
)
282 + entry
* priv
->desc_size
+ offset
;
284 return readl(priv
->base
+ addr
);
287 static u32
ave_desc_read_cmdsts(struct net_device
*ndev
, enum desc_id id
,
290 return ave_desc_read(ndev
, id
, entry
, AVE_DESC_OFS_CMDSTS
);
293 static void ave_desc_write(struct net_device
*ndev
, enum desc_id id
,
294 int entry
, int offset
, u32 val
)
296 struct ave_private
*priv
= netdev_priv(ndev
);
299 addr
= ((id
== AVE_DESCID_TX
) ? priv
->tx
.daddr
: priv
->rx
.daddr
)
300 + entry
* priv
->desc_size
+ offset
;
302 writel(val
, priv
->base
+ addr
);
305 static void ave_desc_write_cmdsts(struct net_device
*ndev
, enum desc_id id
,
308 ave_desc_write(ndev
, id
, entry
, AVE_DESC_OFS_CMDSTS
, val
);
311 static void ave_desc_write_addr(struct net_device
*ndev
, enum desc_id id
,
312 int entry
, dma_addr_t paddr
)
314 struct ave_private
*priv
= netdev_priv(ndev
);
316 ave_desc_write(ndev
, id
, entry
, AVE_DESC_OFS_ADDRL
,
317 lower_32_bits(paddr
));
318 if (IS_DESC_64BIT(priv
))
319 ave_desc_write(ndev
, id
,
320 entry
, AVE_DESC_OFS_ADDRU
,
321 upper_32_bits(paddr
));
324 static u32
ave_irq_disable_all(struct net_device
*ndev
)
326 struct ave_private
*priv
= netdev_priv(ndev
);
329 ret
= readl(priv
->base
+ AVE_GIMR
);
330 writel(0, priv
->base
+ AVE_GIMR
);
335 static void ave_irq_restore(struct net_device
*ndev
, u32 val
)
337 struct ave_private
*priv
= netdev_priv(ndev
);
339 writel(val
, priv
->base
+ AVE_GIMR
);
342 static void ave_irq_enable(struct net_device
*ndev
, u32 bitflag
)
344 struct ave_private
*priv
= netdev_priv(ndev
);
346 writel(readl(priv
->base
+ AVE_GIMR
) | bitflag
, priv
->base
+ AVE_GIMR
);
347 writel(bitflag
, priv
->base
+ AVE_GISR
);
350 static void ave_hw_write_macaddr(struct net_device
*ndev
,
351 const unsigned char *mac_addr
,
354 struct ave_private
*priv
= netdev_priv(ndev
);
356 writel(mac_addr
[0] | mac_addr
[1] << 8 |
357 mac_addr
[2] << 16 | mac_addr
[3] << 24, priv
->base
+ reg1
);
358 writel(mac_addr
[4] | mac_addr
[5] << 8, priv
->base
+ reg2
);
361 static void ave_hw_read_version(struct net_device
*ndev
, char *buf
, int len
)
363 struct ave_private
*priv
= netdev_priv(ndev
);
364 u32 major
, minor
, vr
;
366 vr
= readl(priv
->base
+ AVE_VR
);
367 major
= (vr
& GENMASK(15, 8)) >> 8;
368 minor
= (vr
& GENMASK(7, 0));
369 snprintf(buf
, len
, "v%u.%u", major
, minor
);
372 static void ave_ethtool_get_drvinfo(struct net_device
*ndev
,
373 struct ethtool_drvinfo
*info
)
375 struct device
*dev
= ndev
->dev
.parent
;
377 strlcpy(info
->driver
, dev
->driver
->name
, sizeof(info
->driver
));
378 strlcpy(info
->bus_info
, dev_name(dev
), sizeof(info
->bus_info
));
379 ave_hw_read_version(ndev
, info
->fw_version
, sizeof(info
->fw_version
));
382 static u32
ave_ethtool_get_msglevel(struct net_device
*ndev
)
384 struct ave_private
*priv
= netdev_priv(ndev
);
386 return priv
->msg_enable
;
389 static void ave_ethtool_set_msglevel(struct net_device
*ndev
, u32 val
)
391 struct ave_private
*priv
= netdev_priv(ndev
);
393 priv
->msg_enable
= val
;
396 static void ave_ethtool_get_wol(struct net_device
*ndev
,
397 struct ethtool_wolinfo
*wol
)
403 phy_ethtool_get_wol(ndev
->phydev
, wol
);
406 static int ave_ethtool_set_wol(struct net_device
*ndev
,
407 struct ethtool_wolinfo
*wol
)
412 (wol
->wolopts
& (WAKE_ARP
| WAKE_MAGICSECURE
)))
415 ret
= phy_ethtool_set_wol(ndev
->phydev
, wol
);
417 device_set_wakeup_enable(&ndev
->dev
, !!wol
->wolopts
);
422 static void ave_ethtool_get_pauseparam(struct net_device
*ndev
,
423 struct ethtool_pauseparam
*pause
)
425 struct ave_private
*priv
= netdev_priv(ndev
);
427 pause
->autoneg
= priv
->pause_auto
;
428 pause
->rx_pause
= priv
->pause_rx
;
429 pause
->tx_pause
= priv
->pause_tx
;
432 static int ave_ethtool_set_pauseparam(struct net_device
*ndev
,
433 struct ethtool_pauseparam
*pause
)
435 struct ave_private
*priv
= netdev_priv(ndev
);
436 struct phy_device
*phydev
= ndev
->phydev
;
441 priv
->pause_auto
= pause
->autoneg
;
442 priv
->pause_rx
= pause
->rx_pause
;
443 priv
->pause_tx
= pause
->tx_pause
;
445 phydev
->advertising
&= ~(ADVERTISED_Pause
| ADVERTISED_Asym_Pause
);
447 phydev
->advertising
|= ADVERTISED_Pause
| ADVERTISED_Asym_Pause
;
449 phydev
->advertising
^= ADVERTISED_Asym_Pause
;
451 if (pause
->autoneg
) {
452 if (netif_running(ndev
))
453 phy_start_aneg(phydev
);
459 static const struct ethtool_ops ave_ethtool_ops
= {
460 .get_link_ksettings
= phy_ethtool_get_link_ksettings
,
461 .set_link_ksettings
= phy_ethtool_set_link_ksettings
,
462 .get_drvinfo
= ave_ethtool_get_drvinfo
,
463 .nway_reset
= phy_ethtool_nway_reset
,
464 .get_link
= ethtool_op_get_link
,
465 .get_msglevel
= ave_ethtool_get_msglevel
,
466 .set_msglevel
= ave_ethtool_set_msglevel
,
467 .get_wol
= ave_ethtool_get_wol
,
468 .set_wol
= ave_ethtool_set_wol
,
469 .get_pauseparam
= ave_ethtool_get_pauseparam
,
470 .set_pauseparam
= ave_ethtool_set_pauseparam
,
473 static int ave_mdiobus_read(struct mii_bus
*bus
, int phyid
, int regnum
)
475 struct net_device
*ndev
= bus
->priv
;
476 struct ave_private
*priv
;
480 priv
= netdev_priv(ndev
);
483 writel((phyid
<< 8) | regnum
, priv
->base
+ AVE_MDIOAR
);
486 mdioctl
= readl(priv
->base
+ AVE_MDIOCTR
);
487 writel((mdioctl
| AVE_MDIOCTR_RREQ
) & ~AVE_MDIOCTR_WREQ
,
488 priv
->base
+ AVE_MDIOCTR
);
490 ret
= readl_poll_timeout(priv
->base
+ AVE_MDIOSR
, mdiosr
,
491 !(mdiosr
& AVE_MDIOSR_STS
), 20, 2000);
493 netdev_err(ndev
, "failed to read (phy:%d reg:%x)\n",
498 return readl(priv
->base
+ AVE_MDIORDR
) & GENMASK(15, 0);
501 static int ave_mdiobus_write(struct mii_bus
*bus
, int phyid
, int regnum
,
504 struct net_device
*ndev
= bus
->priv
;
505 struct ave_private
*priv
;
509 priv
= netdev_priv(ndev
);
512 writel((phyid
<< 8) | regnum
, priv
->base
+ AVE_MDIOAR
);
515 writel(val
, priv
->base
+ AVE_MDIOWDR
);
518 mdioctl
= readl(priv
->base
+ AVE_MDIOCTR
);
519 writel((mdioctl
| AVE_MDIOCTR_WREQ
) & ~AVE_MDIOCTR_RREQ
,
520 priv
->base
+ AVE_MDIOCTR
);
522 ret
= readl_poll_timeout(priv
->base
+ AVE_MDIOSR
, mdiosr
,
523 !(mdiosr
& AVE_MDIOSR_STS
), 20, 2000);
525 netdev_err(ndev
, "failed to write (phy:%d reg:%x)\n",
531 static int ave_dma_map(struct net_device
*ndev
, struct ave_desc
*desc
,
532 void *ptr
, size_t len
, enum dma_data_direction dir
,
537 map_addr
= dma_map_single(ndev
->dev
.parent
, ptr
, len
, dir
);
538 if (unlikely(dma_mapping_error(ndev
->dev
.parent
, map_addr
)))
541 desc
->skbs_dma
= map_addr
;
542 desc
->skbs_dmalen
= len
;
548 static void ave_dma_unmap(struct net_device
*ndev
, struct ave_desc
*desc
,
549 enum dma_data_direction dir
)
554 dma_unmap_single(ndev
->dev
.parent
,
555 desc
->skbs_dma
, desc
->skbs_dmalen
, dir
);
559 /* Prepare Rx descriptor and memory */
560 static int ave_rxdesc_prepare(struct net_device
*ndev
, int entry
)
562 struct ave_private
*priv
= netdev_priv(ndev
);
567 skb
= priv
->rx
.desc
[entry
].skbs
;
569 skb
= netdev_alloc_skb_ip_align(ndev
,
572 netdev_err(ndev
, "can't allocate skb for Rx\n");
577 /* set disable to cmdsts */
578 ave_desc_write_cmdsts(ndev
, AVE_DESCID_RX
, entry
,
579 AVE_STS_INTR
| AVE_STS_OWN
);
582 * Rx buffer set to the Rx descriptor has two restrictions:
583 * - Rx buffer address is 4 byte aligned.
584 * - Rx buffer begins with 2 byte headroom, and data will be put from
586 * To satisfy this, specify the address to put back the buffer
587 * pointer advanced by NET_IP_ALIGN by netdev_alloc_skb_ip_align(),
588 * and expand the map size by NET_IP_ALIGN.
590 ret
= ave_dma_map(ndev
, &priv
->rx
.desc
[entry
],
591 skb
->data
- NET_IP_ALIGN
,
592 AVE_MAX_ETHFRAME
+ NET_IP_ALIGN
,
593 DMA_FROM_DEVICE
, &paddr
);
595 netdev_err(ndev
, "can't map skb for Rx\n");
596 dev_kfree_skb_any(skb
);
599 priv
->rx
.desc
[entry
].skbs
= skb
;
601 /* set buffer pointer */
602 ave_desc_write_addr(ndev
, AVE_DESCID_RX
, entry
, paddr
);
604 /* set enable to cmdsts */
605 ave_desc_write_cmdsts(ndev
, AVE_DESCID_RX
, entry
,
606 AVE_STS_INTR
| AVE_MAX_ETHFRAME
);
611 /* Switch state of descriptor */
612 static int ave_desc_switch(struct net_device
*ndev
, enum desc_state state
)
614 struct ave_private
*priv
= netdev_priv(ndev
);
620 writel(AVE_DESCC_TD
| AVE_DESCC_RD0
, priv
->base
+ AVE_DESCC
);
624 writel(0, priv
->base
+ AVE_DESCC
);
625 if (readl_poll_timeout(priv
->base
+ AVE_DESCC
, val
, !val
,
627 netdev_err(ndev
, "can't stop descriptor\n");
632 case AVE_DESC_RX_SUSPEND
:
633 val
= readl(priv
->base
+ AVE_DESCC
);
634 val
|= AVE_DESCC_RDSTP
;
635 val
&= ~AVE_DESCC_STATUS_MASK
;
636 writel(val
, priv
->base
+ AVE_DESCC
);
637 if (readl_poll_timeout(priv
->base
+ AVE_DESCC
, val
,
638 val
& (AVE_DESCC_RDSTP
<< 16),
640 netdev_err(ndev
, "can't suspend descriptor\n");
645 case AVE_DESC_RX_PERMIT
:
646 val
= readl(priv
->base
+ AVE_DESCC
);
647 val
&= ~AVE_DESCC_RDSTP
;
648 val
&= ~AVE_DESCC_STATUS_MASK
;
649 writel(val
, priv
->base
+ AVE_DESCC
);
660 static int ave_tx_complete(struct net_device
*ndev
)
662 struct ave_private
*priv
= netdev_priv(ndev
);
663 u32 proc_idx
, done_idx
, ndesc
, cmdsts
;
664 unsigned int nr_freebuf
= 0;
665 unsigned int tx_packets
= 0;
666 unsigned int tx_bytes
= 0;
668 proc_idx
= priv
->tx
.proc_idx
;
669 done_idx
= priv
->tx
.done_idx
;
670 ndesc
= priv
->tx
.ndesc
;
672 /* free pre-stored skb from done_idx to proc_idx */
673 while (proc_idx
!= done_idx
) {
674 cmdsts
= ave_desc_read_cmdsts(ndev
, AVE_DESCID_TX
, done_idx
);
676 /* do nothing if owner is HW (==1 for Tx) */
677 if (cmdsts
& AVE_STS_OWN
)
680 /* check Tx status and updates statistics */
681 if (cmdsts
& AVE_STS_OK
) {
682 tx_bytes
+= cmdsts
& AVE_STS_PKTLEN_TX_MASK
;
684 if (cmdsts
& AVE_STS_LAST
)
688 if (cmdsts
& AVE_STS_LAST
) {
689 priv
->stats_tx
.errors
++;
690 if (cmdsts
& (AVE_STS_OWC
| AVE_STS_EC
))
691 priv
->stats_tx
.collisions
++;
696 if (priv
->tx
.desc
[done_idx
].skbs
) {
697 ave_dma_unmap(ndev
, &priv
->tx
.desc
[done_idx
],
699 dev_consume_skb_any(priv
->tx
.desc
[done_idx
].skbs
);
700 priv
->tx
.desc
[done_idx
].skbs
= NULL
;
703 done_idx
= (done_idx
+ 1) % ndesc
;
706 priv
->tx
.done_idx
= done_idx
;
709 u64_stats_update_begin(&priv
->stats_tx
.syncp
);
710 priv
->stats_tx
.packets
+= tx_packets
;
711 priv
->stats_tx
.bytes
+= tx_bytes
;
712 u64_stats_update_end(&priv
->stats_tx
.syncp
);
714 /* wake queue for freeing buffer */
715 if (unlikely(netif_queue_stopped(ndev
)) && nr_freebuf
)
716 netif_wake_queue(ndev
);
721 static int ave_rx_receive(struct net_device
*ndev
, int num
)
723 struct ave_private
*priv
= netdev_priv(ndev
);
724 unsigned int rx_packets
= 0;
725 unsigned int rx_bytes
= 0;
726 u32 proc_idx
, done_idx
;
732 proc_idx
= priv
->rx
.proc_idx
;
733 done_idx
= priv
->rx
.done_idx
;
734 ndesc
= priv
->rx
.ndesc
;
735 restpkt
= ((proc_idx
+ ndesc
- 1) - done_idx
) % ndesc
;
737 for (npkts
= 0; npkts
< num
; npkts
++) {
738 /* we can't receive more packet, so fill desc quickly */
742 cmdsts
= ave_desc_read_cmdsts(ndev
, AVE_DESCID_RX
, proc_idx
);
744 /* do nothing if owner is HW (==0 for Rx) */
745 if (!(cmdsts
& AVE_STS_OWN
))
748 if (!(cmdsts
& AVE_STS_OK
)) {
749 priv
->stats_rx
.errors
++;
750 proc_idx
= (proc_idx
+ 1) % ndesc
;
754 pktlen
= cmdsts
& AVE_STS_PKTLEN_RX_MASK
;
756 /* get skbuff for rx */
757 skb
= priv
->rx
.desc
[proc_idx
].skbs
;
758 priv
->rx
.desc
[proc_idx
].skbs
= NULL
;
760 ave_dma_unmap(ndev
, &priv
->rx
.desc
[proc_idx
], DMA_FROM_DEVICE
);
763 skb_put(skb
, pktlen
);
764 skb
->protocol
= eth_type_trans(skb
, ndev
);
766 if ((cmdsts
& AVE_STS_CSSV
) && (!(cmdsts
& AVE_STS_CSER
)))
767 skb
->ip_summed
= CHECKSUM_UNNECESSARY
;
772 netif_receive_skb(skb
);
774 proc_idx
= (proc_idx
+ 1) % ndesc
;
777 priv
->rx
.proc_idx
= proc_idx
;
780 u64_stats_update_begin(&priv
->stats_rx
.syncp
);
781 priv
->stats_rx
.packets
+= rx_packets
;
782 priv
->stats_rx
.bytes
+= rx_bytes
;
783 u64_stats_update_end(&priv
->stats_rx
.syncp
);
785 /* refill the Rx buffers */
786 while (proc_idx
!= done_idx
) {
787 if (ave_rxdesc_prepare(ndev
, done_idx
))
789 done_idx
= (done_idx
+ 1) % ndesc
;
792 priv
->rx
.done_idx
= done_idx
;
797 static int ave_napi_poll_rx(struct napi_struct
*napi
, int budget
)
799 struct ave_private
*priv
;
800 struct net_device
*ndev
;
803 priv
= container_of(napi
, struct ave_private
, napi_rx
);
806 num
= ave_rx_receive(ndev
, budget
);
808 napi_complete_done(napi
, num
);
810 /* enable Rx interrupt when NAPI finishes */
811 ave_irq_enable(ndev
, AVE_GI_RXIINT
);
817 static int ave_napi_poll_tx(struct napi_struct
*napi
, int budget
)
819 struct ave_private
*priv
;
820 struct net_device
*ndev
;
823 priv
= container_of(napi
, struct ave_private
, napi_tx
);
826 num
= ave_tx_complete(ndev
);
829 /* enable Tx interrupt when NAPI finishes */
830 ave_irq_enable(ndev
, AVE_GI_TX
);
835 static void ave_global_reset(struct net_device
*ndev
)
837 struct ave_private
*priv
= netdev_priv(ndev
);
840 /* set config register */
841 val
= AVE_CFGR_FLE
| AVE_CFGR_IPFCEN
| AVE_CFGR_CHE
;
842 if (!phy_interface_mode_is_rgmii(priv
->phy_mode
))
844 writel(val
, priv
->base
+ AVE_CFGR
);
846 /* reset RMII register */
847 val
= readl(priv
->base
+ AVE_RSTCTRL
);
848 val
&= ~AVE_RSTCTRL_RMIIRST
;
849 writel(val
, priv
->base
+ AVE_RSTCTRL
);
852 writel(AVE_GRR_GRST
| AVE_GRR_PHYRST
, priv
->base
+ AVE_GRR
);
855 /* 1st, negate PHY reset only */
856 writel(AVE_GRR_GRST
, priv
->base
+ AVE_GRR
);
860 writel(0, priv
->base
+ AVE_GRR
);
863 /* negate RMII register */
864 val
= readl(priv
->base
+ AVE_RSTCTRL
);
865 val
|= AVE_RSTCTRL_RMIIRST
;
866 writel(val
, priv
->base
+ AVE_RSTCTRL
);
868 ave_irq_disable_all(ndev
);
871 static void ave_rxfifo_reset(struct net_device
*ndev
)
873 struct ave_private
*priv
= netdev_priv(ndev
);
876 /* save and disable MAC receive op */
877 rxcr_org
= readl(priv
->base
+ AVE_RXCR
);
878 writel(rxcr_org
& (~AVE_RXCR_RXEN
), priv
->base
+ AVE_RXCR
);
880 /* suspend Rx descriptor */
881 ave_desc_switch(ndev
, AVE_DESC_RX_SUSPEND
);
883 /* receive all packets before descriptor starts */
884 ave_rx_receive(ndev
, priv
->rx
.ndesc
);
887 writel(AVE_GRR_RXFFR
, priv
->base
+ AVE_GRR
);
888 usleep_range(40, 50);
891 writel(0, priv
->base
+ AVE_GRR
);
892 usleep_range(10, 20);
894 /* negate interrupt status */
895 writel(AVE_GI_RXOVF
, priv
->base
+ AVE_GISR
);
897 /* permit descriptor */
898 ave_desc_switch(ndev
, AVE_DESC_RX_PERMIT
);
900 /* restore MAC reccieve op */
901 writel(rxcr_org
, priv
->base
+ AVE_RXCR
);
904 static irqreturn_t
ave_irq_handler(int irq
, void *netdev
)
906 struct net_device
*ndev
= (struct net_device
*)netdev
;
907 struct ave_private
*priv
= netdev_priv(ndev
);
908 u32 gimr_val
, gisr_val
;
910 gimr_val
= ave_irq_disable_all(ndev
);
912 /* get interrupt status */
913 gisr_val
= readl(priv
->base
+ AVE_GISR
);
916 if (gisr_val
& AVE_GI_PHY
)
917 writel(AVE_GI_PHY
, priv
->base
+ AVE_GISR
);
919 /* check exceeding packet */
920 if (gisr_val
& AVE_GI_RXERR
) {
921 writel(AVE_GI_RXERR
, priv
->base
+ AVE_GISR
);
922 netdev_err(ndev
, "receive a packet exceeding frame buffer\n");
925 gisr_val
&= gimr_val
;
929 /* RxFIFO overflow */
930 if (gisr_val
& AVE_GI_RXOVF
) {
931 priv
->stats_rx
.fifo_errors
++;
932 ave_rxfifo_reset(ndev
);
937 if (gisr_val
& AVE_GI_RXDROP
) {
938 priv
->stats_rx
.dropped
++;
939 writel(AVE_GI_RXDROP
, priv
->base
+ AVE_GISR
);
943 if (gisr_val
& AVE_GI_RXIINT
) {
944 napi_schedule(&priv
->napi_rx
);
945 /* still force to disable Rx interrupt until NAPI finishes */
946 gimr_val
&= ~AVE_GI_RXIINT
;
950 if (gisr_val
& AVE_GI_TX
) {
951 napi_schedule(&priv
->napi_tx
);
952 /* still force to disable Tx interrupt until NAPI finishes */
953 gimr_val
&= ~AVE_GI_TX
;
957 ave_irq_restore(ndev
, gimr_val
);
962 static int ave_pfsel_start(struct net_device
*ndev
, unsigned int entry
)
964 struct ave_private
*priv
= netdev_priv(ndev
);
967 if (WARN_ON(entry
> AVE_PF_SIZE
))
970 val
= readl(priv
->base
+ AVE_PFEN
);
971 writel(val
| BIT(entry
), priv
->base
+ AVE_PFEN
);
976 static int ave_pfsel_stop(struct net_device
*ndev
, unsigned int entry
)
978 struct ave_private
*priv
= netdev_priv(ndev
);
981 if (WARN_ON(entry
> AVE_PF_SIZE
))
984 val
= readl(priv
->base
+ AVE_PFEN
);
985 writel(val
& ~BIT(entry
), priv
->base
+ AVE_PFEN
);
990 static int ave_pfsel_set_macaddr(struct net_device
*ndev
,
992 const unsigned char *mac_addr
,
993 unsigned int set_size
)
995 struct ave_private
*priv
= netdev_priv(ndev
);
997 if (WARN_ON(entry
> AVE_PF_SIZE
))
999 if (WARN_ON(set_size
> 6))
1002 ave_pfsel_stop(ndev
, entry
);
1004 /* set MAC address for the filter */
1005 ave_hw_write_macaddr(ndev
, mac_addr
,
1006 AVE_PKTF(entry
), AVE_PKTF(entry
) + 4);
1009 writel(GENMASK(31, set_size
) & AVE_PFMBYTE_MASK0
,
1010 priv
->base
+ AVE_PFMBYTE(entry
));
1011 writel(AVE_PFMBYTE_MASK1
, priv
->base
+ AVE_PFMBYTE(entry
) + 4);
1013 /* set bit mask filter */
1014 writel(AVE_PFMBIT_MASK
, priv
->base
+ AVE_PFMBIT(entry
));
1016 /* set selector to ring 0 */
1017 writel(0, priv
->base
+ AVE_PFSEL(entry
));
1019 /* restart filter */
1020 ave_pfsel_start(ndev
, entry
);
1025 static void ave_pfsel_set_promisc(struct net_device
*ndev
,
1026 unsigned int entry
, u32 rxring
)
1028 struct ave_private
*priv
= netdev_priv(ndev
);
1030 if (WARN_ON(entry
> AVE_PF_SIZE
))
1033 ave_pfsel_stop(ndev
, entry
);
1036 writel(AVE_PFMBYTE_MASK0
, priv
->base
+ AVE_PFMBYTE(entry
));
1037 writel(AVE_PFMBYTE_MASK1
, priv
->base
+ AVE_PFMBYTE(entry
) + 4);
1039 /* set bit mask filter */
1040 writel(AVE_PFMBIT_MASK
, priv
->base
+ AVE_PFMBIT(entry
));
1042 /* set selector to rxring */
1043 writel(rxring
, priv
->base
+ AVE_PFSEL(entry
));
1045 ave_pfsel_start(ndev
, entry
);
1048 static void ave_pfsel_init(struct net_device
*ndev
)
1050 unsigned char bcast_mac
[ETH_ALEN
];
1053 eth_broadcast_addr(bcast_mac
);
1055 for (i
= 0; i
< AVE_PF_SIZE
; i
++)
1056 ave_pfsel_stop(ndev
, i
);
1058 /* promiscious entry, select ring 0 */
1059 ave_pfsel_set_promisc(ndev
, AVE_PFNUM_FILTER
, 0);
1062 ave_pfsel_set_macaddr(ndev
, AVE_PFNUM_UNICAST
, ndev
->dev_addr
, 6);
1064 /* broadcast entry */
1065 ave_pfsel_set_macaddr(ndev
, AVE_PFNUM_BROADCAST
, bcast_mac
, 6);
1068 static void ave_phy_adjust_link(struct net_device
*ndev
)
1070 struct ave_private
*priv
= netdev_priv(ndev
);
1071 struct phy_device
*phydev
= ndev
->phydev
;
1072 u32 val
, txcr
, rxcr
, rxcr_org
;
1073 u16 rmt_adv
= 0, lcl_adv
= 0;
1076 /* set RGMII speed */
1077 val
= readl(priv
->base
+ AVE_TXCR
);
1078 val
&= ~(AVE_TXCR_TXSPD_100
| AVE_TXCR_TXSPD_1G
);
1080 if (phy_interface_is_rgmii(phydev
) && phydev
->speed
== SPEED_1000
)
1081 val
|= AVE_TXCR_TXSPD_1G
;
1082 else if (phydev
->speed
== SPEED_100
)
1083 val
|= AVE_TXCR_TXSPD_100
;
1085 writel(val
, priv
->base
+ AVE_TXCR
);
1087 /* set RMII speed (100M/10M only) */
1088 if (!phy_interface_is_rgmii(phydev
)) {
1089 val
= readl(priv
->base
+ AVE_LINKSEL
);
1090 if (phydev
->speed
== SPEED_10
)
1091 val
&= ~AVE_LINKSEL_100M
;
1093 val
|= AVE_LINKSEL_100M
;
1094 writel(val
, priv
->base
+ AVE_LINKSEL
);
1097 /* check current RXCR/TXCR */
1098 rxcr
= readl(priv
->base
+ AVE_RXCR
);
1099 txcr
= readl(priv
->base
+ AVE_TXCR
);
1102 if (phydev
->duplex
) {
1103 rxcr
|= AVE_RXCR_FDUPEN
;
1106 rmt_adv
|= LPA_PAUSE_CAP
;
1107 if (phydev
->asym_pause
)
1108 rmt_adv
|= LPA_PAUSE_ASYM
;
1109 if (phydev
->advertising
& ADVERTISED_Pause
)
1110 lcl_adv
|= ADVERTISE_PAUSE_CAP
;
1111 if (phydev
->advertising
& ADVERTISED_Asym_Pause
)
1112 lcl_adv
|= ADVERTISE_PAUSE_ASYM
;
1114 cap
= mii_resolve_flowctrl_fdx(lcl_adv
, rmt_adv
);
1115 if (cap
& FLOW_CTRL_TX
)
1116 txcr
|= AVE_TXCR_FLOCTR
;
1118 txcr
&= ~AVE_TXCR_FLOCTR
;
1119 if (cap
& FLOW_CTRL_RX
)
1120 rxcr
|= AVE_RXCR_FLOCTR
;
1122 rxcr
&= ~AVE_RXCR_FLOCTR
;
1124 rxcr
&= ~AVE_RXCR_FDUPEN
;
1125 rxcr
&= ~AVE_RXCR_FLOCTR
;
1126 txcr
&= ~AVE_TXCR_FLOCTR
;
1129 if (rxcr_org
!= rxcr
) {
1130 /* disable Rx mac */
1131 writel(rxcr
& ~AVE_RXCR_RXEN
, priv
->base
+ AVE_RXCR
);
1132 /* change and enable TX/Rx mac */
1133 writel(txcr
, priv
->base
+ AVE_TXCR
);
1134 writel(rxcr
, priv
->base
+ AVE_RXCR
);
1137 phy_print_status(phydev
);
1140 static void ave_macaddr_init(struct net_device
*ndev
)
1142 ave_hw_write_macaddr(ndev
, ndev
->dev_addr
, AVE_RXMAC1R
, AVE_RXMAC2R
);
1144 /* pfsel unicast entry */
1145 ave_pfsel_set_macaddr(ndev
, AVE_PFNUM_UNICAST
, ndev
->dev_addr
, 6);
1148 static int ave_init(struct net_device
*ndev
)
1150 struct ethtool_wolinfo wol
= { .cmd
= ETHTOOL_GWOL
};
1151 struct ave_private
*priv
= netdev_priv(ndev
);
1152 struct device
*dev
= ndev
->dev
.parent
;
1153 struct device_node
*np
= dev
->of_node
;
1154 struct device_node
*mdio_np
;
1155 struct phy_device
*phydev
;
1158 /* enable clk because of hw access until ndo_open */
1159 ret
= clk_prepare_enable(priv
->clk
);
1161 dev_err(dev
, "can't enable clock\n");
1164 ret
= reset_control_deassert(priv
->rst
);
1166 dev_err(dev
, "can't deassert reset\n");
1167 goto out_clk_disable
;
1170 ave_global_reset(ndev
);
1172 mdio_np
= of_get_child_by_name(np
, "mdio");
1174 dev_err(dev
, "mdio node not found\n");
1176 goto out_reset_assert
;
1178 ret
= of_mdiobus_register(priv
->mdio
, mdio_np
);
1179 of_node_put(mdio_np
);
1181 dev_err(dev
, "failed to register mdiobus\n");
1182 goto out_reset_assert
;
1185 phydev
= of_phy_get_and_connect(ndev
, np
, ave_phy_adjust_link
);
1187 dev_err(dev
, "could not attach to PHY\n");
1189 goto out_mdio_unregister
;
1192 priv
->phydev
= phydev
;
1194 phy_ethtool_get_wol(phydev
, &wol
);
1195 device_set_wakeup_capable(&ndev
->dev
, !!wol
.supported
);
1197 if (!phy_interface_is_rgmii(phydev
)) {
1198 phydev
->supported
&= ~PHY_GBIT_FEATURES
;
1199 phydev
->supported
|= PHY_BASIC_FEATURES
;
1201 phydev
->supported
|= SUPPORTED_Pause
| SUPPORTED_Asym_Pause
;
1203 phy_attached_info(phydev
);
1207 out_mdio_unregister
:
1208 mdiobus_unregister(priv
->mdio
);
1210 reset_control_assert(priv
->rst
);
1212 clk_disable_unprepare(priv
->clk
);
1217 static void ave_uninit(struct net_device
*ndev
)
1219 struct ave_private
*priv
= netdev_priv(ndev
);
1221 phy_disconnect(priv
->phydev
);
1222 mdiobus_unregister(priv
->mdio
);
1224 /* disable clk because of hw access after ndo_stop */
1225 reset_control_assert(priv
->rst
);
1226 clk_disable_unprepare(priv
->clk
);
1229 static int ave_open(struct net_device
*ndev
)
1231 struct ave_private
*priv
= netdev_priv(ndev
);
1236 ret
= request_irq(priv
->irq
, ave_irq_handler
, IRQF_SHARED
, ndev
->name
,
1241 priv
->tx
.desc
= kcalloc(priv
->tx
.ndesc
, sizeof(*priv
->tx
.desc
),
1243 if (!priv
->tx
.desc
) {
1248 priv
->rx
.desc
= kcalloc(priv
->rx
.ndesc
, sizeof(*priv
->rx
.desc
),
1250 if (!priv
->rx
.desc
) {
1251 kfree(priv
->tx
.desc
);
1256 /* initialize Tx work and descriptor */
1257 priv
->tx
.proc_idx
= 0;
1258 priv
->tx
.done_idx
= 0;
1259 for (entry
= 0; entry
< priv
->tx
.ndesc
; entry
++) {
1260 ave_desc_write_cmdsts(ndev
, AVE_DESCID_TX
, entry
, 0);
1261 ave_desc_write_addr(ndev
, AVE_DESCID_TX
, entry
, 0);
1263 writel(AVE_TXDC_ADDR_START
|
1264 (((priv
->tx
.ndesc
* priv
->desc_size
) << 16) & AVE_TXDC_SIZE
),
1265 priv
->base
+ AVE_TXDC
);
1267 /* initialize Rx work and descriptor */
1268 priv
->rx
.proc_idx
= 0;
1269 priv
->rx
.done_idx
= 0;
1270 for (entry
= 0; entry
< priv
->rx
.ndesc
; entry
++) {
1271 if (ave_rxdesc_prepare(ndev
, entry
))
1274 writel(AVE_RXDC0_ADDR_START
|
1275 (((priv
->rx
.ndesc
* priv
->desc_size
) << 16) & AVE_RXDC0_SIZE
),
1276 priv
->base
+ AVE_RXDC0
);
1278 ave_desc_switch(ndev
, AVE_DESC_START
);
1280 ave_pfsel_init(ndev
);
1281 ave_macaddr_init(ndev
);
1283 /* set Rx configuration */
1284 /* full duplex, enable pause drop, enalbe flow control */
1285 val
= AVE_RXCR_RXEN
| AVE_RXCR_FDUPEN
| AVE_RXCR_DRPEN
|
1286 AVE_RXCR_FLOCTR
| (AVE_MAX_ETHFRAME
& AVE_RXCR_MPSIZ_MASK
);
1287 writel(val
, priv
->base
+ AVE_RXCR
);
1289 /* set Tx configuration */
1290 /* enable flow control, disable loopback */
1291 writel(AVE_TXCR_FLOCTR
, priv
->base
+ AVE_TXCR
);
1293 /* enable timer, clear EN,INTM, and mask interval unit(BSCK) */
1294 val
= readl(priv
->base
+ AVE_IIRQC
) & AVE_IIRQC_BSCK
;
1295 val
|= AVE_IIRQC_EN0
| (AVE_INTM_COUNT
<< 16);
1296 writel(val
, priv
->base
+ AVE_IIRQC
);
1298 val
= AVE_GI_RXIINT
| AVE_GI_RXOVF
| AVE_GI_TX
;
1299 ave_irq_restore(ndev
, val
);
1301 napi_enable(&priv
->napi_rx
);
1302 napi_enable(&priv
->napi_tx
);
1304 phy_start(ndev
->phydev
);
1305 phy_start_aneg(ndev
->phydev
);
1306 netif_start_queue(ndev
);
1311 disable_irq(priv
->irq
);
1312 free_irq(priv
->irq
, ndev
);
1317 static int ave_stop(struct net_device
*ndev
)
1319 struct ave_private
*priv
= netdev_priv(ndev
);
1322 ave_irq_disable_all(ndev
);
1323 disable_irq(priv
->irq
);
1324 free_irq(priv
->irq
, ndev
);
1326 netif_tx_disable(ndev
);
1327 phy_stop(ndev
->phydev
);
1328 napi_disable(&priv
->napi_tx
);
1329 napi_disable(&priv
->napi_rx
);
1331 ave_desc_switch(ndev
, AVE_DESC_STOP
);
1333 /* free Tx buffer */
1334 for (entry
= 0; entry
< priv
->tx
.ndesc
; entry
++) {
1335 if (!priv
->tx
.desc
[entry
].skbs
)
1338 ave_dma_unmap(ndev
, &priv
->tx
.desc
[entry
], DMA_TO_DEVICE
);
1339 dev_kfree_skb_any(priv
->tx
.desc
[entry
].skbs
);
1340 priv
->tx
.desc
[entry
].skbs
= NULL
;
1342 priv
->tx
.proc_idx
= 0;
1343 priv
->tx
.done_idx
= 0;
1345 /* free Rx buffer */
1346 for (entry
= 0; entry
< priv
->rx
.ndesc
; entry
++) {
1347 if (!priv
->rx
.desc
[entry
].skbs
)
1350 ave_dma_unmap(ndev
, &priv
->rx
.desc
[entry
], DMA_FROM_DEVICE
);
1351 dev_kfree_skb_any(priv
->rx
.desc
[entry
].skbs
);
1352 priv
->rx
.desc
[entry
].skbs
= NULL
;
1354 priv
->rx
.proc_idx
= 0;
1355 priv
->rx
.done_idx
= 0;
1357 kfree(priv
->tx
.desc
);
1358 kfree(priv
->rx
.desc
);
1363 static int ave_start_xmit(struct sk_buff
*skb
, struct net_device
*ndev
)
1365 struct ave_private
*priv
= netdev_priv(ndev
);
1366 u32 proc_idx
, done_idx
, ndesc
, cmdsts
;
1370 proc_idx
= priv
->tx
.proc_idx
;
1371 done_idx
= priv
->tx
.done_idx
;
1372 ndesc
= priv
->tx
.ndesc
;
1373 freepkt
= ((done_idx
+ ndesc
- 1) - proc_idx
) % ndesc
;
1375 /* stop queue when not enough entry */
1376 if (unlikely(freepkt
< 1)) {
1377 netif_stop_queue(ndev
);
1378 return NETDEV_TX_BUSY
;
1381 /* add padding for short packet */
1382 if (skb_put_padto(skb
, ETH_ZLEN
)) {
1383 priv
->stats_tx
.dropped
++;
1384 return NETDEV_TX_OK
;
1388 * Tx buffer set to the Tx descriptor doesn't have any restriction.
1390 ret
= ave_dma_map(ndev
, &priv
->tx
.desc
[proc_idx
],
1391 skb
->data
, skb
->len
, DMA_TO_DEVICE
, &paddr
);
1393 dev_kfree_skb_any(skb
);
1394 priv
->stats_tx
.dropped
++;
1395 return NETDEV_TX_OK
;
1398 priv
->tx
.desc
[proc_idx
].skbs
= skb
;
1400 ave_desc_write_addr(ndev
, AVE_DESCID_TX
, proc_idx
, paddr
);
1402 cmdsts
= AVE_STS_OWN
| AVE_STS_1ST
| AVE_STS_LAST
|
1403 (skb
->len
& AVE_STS_PKTLEN_TX_MASK
);
1405 /* set interrupt per AVE_FORCE_TXINTCNT or when queue is stopped */
1406 if (!(proc_idx
% AVE_FORCE_TXINTCNT
) || netif_queue_stopped(ndev
))
1407 cmdsts
|= AVE_STS_INTR
;
1409 /* disable checksum calculation when skb doesn't calurate checksum */
1410 if (skb
->ip_summed
== CHECKSUM_NONE
||
1411 skb
->ip_summed
== CHECKSUM_UNNECESSARY
)
1412 cmdsts
|= AVE_STS_NOCSUM
;
1414 ave_desc_write_cmdsts(ndev
, AVE_DESCID_TX
, proc_idx
, cmdsts
);
1416 priv
->tx
.proc_idx
= (proc_idx
+ 1) % ndesc
;
1418 return NETDEV_TX_OK
;
1421 static int ave_ioctl(struct net_device
*ndev
, struct ifreq
*ifr
, int cmd
)
1423 return phy_mii_ioctl(ndev
->phydev
, ifr
, cmd
);
1426 static const u8 v4multi_macadr
[] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 };
1427 static const u8 v6multi_macadr
[] = { 0x33, 0x00, 0x00, 0x00, 0x00, 0x00 };
1429 static void ave_set_rx_mode(struct net_device
*ndev
)
1431 struct ave_private
*priv
= netdev_priv(ndev
);
1432 struct netdev_hw_addr
*hw_adr
;
1436 /* MAC addr filter enable for promiscious mode */
1437 mc_cnt
= netdev_mc_count(ndev
);
1438 val
= readl(priv
->base
+ AVE_RXCR
);
1439 if (ndev
->flags
& IFF_PROMISC
|| !mc_cnt
)
1440 val
&= ~AVE_RXCR_AFEN
;
1442 val
|= AVE_RXCR_AFEN
;
1443 writel(val
, priv
->base
+ AVE_RXCR
);
1445 /* set all multicast address */
1446 if ((ndev
->flags
& IFF_ALLMULTI
) || mc_cnt
> AVE_PF_MULTICAST_SIZE
) {
1447 ave_pfsel_set_macaddr(ndev
, AVE_PFNUM_MULTICAST
,
1449 ave_pfsel_set_macaddr(ndev
, AVE_PFNUM_MULTICAST
+ 1,
1452 /* stop all multicast filter */
1453 for (count
= 0; count
< AVE_PF_MULTICAST_SIZE
; count
++)
1454 ave_pfsel_stop(ndev
, AVE_PFNUM_MULTICAST
+ count
);
1456 /* set multicast addresses */
1458 netdev_for_each_mc_addr(hw_adr
, ndev
) {
1459 if (count
== mc_cnt
)
1461 ave_pfsel_set_macaddr(ndev
, AVE_PFNUM_MULTICAST
+ count
,
1468 static void ave_get_stats64(struct net_device
*ndev
,
1469 struct rtnl_link_stats64
*stats
)
1471 struct ave_private
*priv
= netdev_priv(ndev
);
1475 start
= u64_stats_fetch_begin_irq(&priv
->stats_rx
.syncp
);
1476 stats
->rx_packets
= priv
->stats_rx
.packets
;
1477 stats
->rx_bytes
= priv
->stats_rx
.bytes
;
1478 } while (u64_stats_fetch_retry_irq(&priv
->stats_rx
.syncp
, start
));
1481 start
= u64_stats_fetch_begin_irq(&priv
->stats_tx
.syncp
);
1482 stats
->tx_packets
= priv
->stats_tx
.packets
;
1483 stats
->tx_bytes
= priv
->stats_tx
.bytes
;
1484 } while (u64_stats_fetch_retry_irq(&priv
->stats_tx
.syncp
, start
));
1486 stats
->rx_errors
= priv
->stats_rx
.errors
;
1487 stats
->tx_errors
= priv
->stats_tx
.errors
;
1488 stats
->rx_dropped
= priv
->stats_rx
.dropped
;
1489 stats
->tx_dropped
= priv
->stats_tx
.dropped
;
1490 stats
->rx_fifo_errors
= priv
->stats_rx
.fifo_errors
;
1491 stats
->collisions
= priv
->stats_tx
.collisions
;
1494 static int ave_set_mac_address(struct net_device
*ndev
, void *p
)
1496 int ret
= eth_mac_addr(ndev
, p
);
1501 ave_macaddr_init(ndev
);
1506 static const struct net_device_ops ave_netdev_ops
= {
1507 .ndo_init
= ave_init
,
1508 .ndo_uninit
= ave_uninit
,
1509 .ndo_open
= ave_open
,
1510 .ndo_stop
= ave_stop
,
1511 .ndo_start_xmit
= ave_start_xmit
,
1512 .ndo_do_ioctl
= ave_ioctl
,
1513 .ndo_set_rx_mode
= ave_set_rx_mode
,
1514 .ndo_get_stats64
= ave_get_stats64
,
1515 .ndo_set_mac_address
= ave_set_mac_address
,
1518 static int ave_probe(struct platform_device
*pdev
)
1520 const struct ave_soc_data
*data
;
1521 struct device
*dev
= &pdev
->dev
;
1522 char buf
[ETHTOOL_FWVERS_LEN
];
1523 phy_interface_t phy_mode
;
1524 struct ave_private
*priv
;
1525 struct net_device
*ndev
;
1526 struct device_node
*np
;
1527 struct resource
*res
;
1528 const void *mac_addr
;
1534 data
= of_device_get_match_data(dev
);
1539 phy_mode
= of_get_phy_mode(np
);
1541 dev_err(dev
, "phy-mode not found\n");
1544 if ((!phy_interface_mode_is_rgmii(phy_mode
)) &&
1545 phy_mode
!= PHY_INTERFACE_MODE_RMII
&&
1546 phy_mode
!= PHY_INTERFACE_MODE_MII
) {
1547 dev_err(dev
, "phy-mode is invalid\n");
1551 irq
= platform_get_irq(pdev
, 0);
1553 dev_err(dev
, "IRQ not found\n");
1557 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1558 base
= devm_ioremap_resource(dev
, res
);
1560 return PTR_ERR(base
);
1562 ndev
= alloc_etherdev(sizeof(struct ave_private
));
1564 dev_err(dev
, "can't allocate ethernet device\n");
1568 ndev
->netdev_ops
= &ave_netdev_ops
;
1569 ndev
->ethtool_ops
= &ave_ethtool_ops
;
1570 SET_NETDEV_DEV(ndev
, dev
);
1572 ndev
->features
|= (NETIF_F_IP_CSUM
| NETIF_F_RXCSUM
);
1573 ndev
->hw_features
|= (NETIF_F_IP_CSUM
| NETIF_F_RXCSUM
);
1575 ndev
->max_mtu
= AVE_MAX_ETHFRAME
- (ETH_HLEN
+ ETH_FCS_LEN
);
1577 mac_addr
= of_get_mac_address(np
);
1579 ether_addr_copy(ndev
->dev_addr
, mac_addr
);
1581 /* if the mac address is invalid, use random mac address */
1582 if (!is_valid_ether_addr(ndev
->dev_addr
)) {
1583 eth_hw_addr_random(ndev
);
1584 dev_warn(dev
, "Using random MAC address: %pM\n",
1588 priv
= netdev_priv(ndev
);
1592 priv
->msg_enable
= netif_msg_init(-1, AVE_DEFAULT_MSG_ENABLE
);
1593 priv
->phy_mode
= phy_mode
;
1596 if (IS_DESC_64BIT(priv
)) {
1597 priv
->desc_size
= AVE_DESC_SIZE_64
;
1598 priv
->tx
.daddr
= AVE_TXDM_64
;
1599 priv
->rx
.daddr
= AVE_RXDM_64
;
1600 dma_mask
= DMA_BIT_MASK(64);
1602 priv
->desc_size
= AVE_DESC_SIZE_32
;
1603 priv
->tx
.daddr
= AVE_TXDM_32
;
1604 priv
->rx
.daddr
= AVE_RXDM_32
;
1605 dma_mask
= DMA_BIT_MASK(32);
1607 ret
= dma_set_mask(dev
, dma_mask
);
1609 goto out_free_netdev
;
1611 priv
->tx
.ndesc
= AVE_NR_TXDESC
;
1612 priv
->rx
.ndesc
= AVE_NR_RXDESC
;
1614 u64_stats_init(&priv
->stats_tx
.syncp
);
1615 u64_stats_init(&priv
->stats_rx
.syncp
);
1617 priv
->clk
= devm_clk_get(dev
, NULL
);
1618 if (IS_ERR(priv
->clk
)) {
1619 ret
= PTR_ERR(priv
->clk
);
1620 goto out_free_netdev
;
1623 priv
->rst
= devm_reset_control_get_optional_shared(dev
, NULL
);
1624 if (IS_ERR(priv
->rst
)) {
1625 ret
= PTR_ERR(priv
->rst
);
1626 goto out_free_netdev
;
1629 priv
->mdio
= devm_mdiobus_alloc(dev
);
1632 goto out_free_netdev
;
1634 priv
->mdio
->priv
= ndev
;
1635 priv
->mdio
->parent
= dev
;
1636 priv
->mdio
->read
= ave_mdiobus_read
;
1637 priv
->mdio
->write
= ave_mdiobus_write
;
1638 priv
->mdio
->name
= "uniphier-mdio";
1639 snprintf(priv
->mdio
->id
, MII_BUS_ID_SIZE
, "%s-%x",
1640 pdev
->name
, pdev
->id
);
1642 /* Register as a NAPI supported driver */
1643 netif_napi_add(ndev
, &priv
->napi_rx
, ave_napi_poll_rx
, priv
->rx
.ndesc
);
1644 netif_tx_napi_add(ndev
, &priv
->napi_tx
, ave_napi_poll_tx
,
1647 platform_set_drvdata(pdev
, ndev
);
1649 ret
= register_netdev(ndev
);
1651 dev_err(dev
, "failed to register netdevice\n");
1655 /* get ID and version */
1656 ave_id
= readl(priv
->base
+ AVE_IDR
);
1657 ave_hw_read_version(ndev
, buf
, sizeof(buf
));
1659 dev_info(dev
, "Socionext %c%c%c%c Ethernet IP %s (irq=%d, phy=%s)\n",
1660 (ave_id
>> 24) & 0xff, (ave_id
>> 16) & 0xff,
1661 (ave_id
>> 8) & 0xff, (ave_id
>> 0) & 0xff,
1662 buf
, priv
->irq
, phy_modes(phy_mode
));
1667 netif_napi_del(&priv
->napi_rx
);
1668 netif_napi_del(&priv
->napi_tx
);
1675 static int ave_remove(struct platform_device
*pdev
)
1677 struct net_device
*ndev
= platform_get_drvdata(pdev
);
1678 struct ave_private
*priv
= netdev_priv(ndev
);
1680 unregister_netdev(ndev
);
1681 netif_napi_del(&priv
->napi_rx
);
1682 netif_napi_del(&priv
->napi_tx
);
1688 static const struct ave_soc_data ave_pro4_data
= {
1689 .is_desc_64bit
= false,
1692 static const struct ave_soc_data ave_pxs2_data
= {
1693 .is_desc_64bit
= false,
1696 static const struct ave_soc_data ave_ld11_data
= {
1697 .is_desc_64bit
= false,
1700 static const struct ave_soc_data ave_ld20_data
= {
1701 .is_desc_64bit
= true,
1704 static const struct of_device_id of_ave_match
[] = {
1706 .compatible
= "socionext,uniphier-pro4-ave4",
1707 .data
= &ave_pro4_data
,
1710 .compatible
= "socionext,uniphier-pxs2-ave4",
1711 .data
= &ave_pxs2_data
,
1714 .compatible
= "socionext,uniphier-ld11-ave4",
1715 .data
= &ave_ld11_data
,
1718 .compatible
= "socionext,uniphier-ld20-ave4",
1719 .data
= &ave_ld20_data
,
1723 MODULE_DEVICE_TABLE(of
, of_ave_match
);
1725 static struct platform_driver ave_driver
= {
1727 .remove
= ave_remove
,
1730 .of_match_table
= of_ave_match
,
1733 module_platform_driver(ave_driver
);
1735 MODULE_DESCRIPTION("Socionext UniPhier AVE ethernet driver");
1736 MODULE_LICENSE("GPL v2");