1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2015 Mans Rullgard <mans@mansr.com>
5 * Mostly rewritten, based on driver from Sigma Designs. Original
6 * copyright notice below.
8 * Driver for tangox SMP864x/SMP865x/SMP867x/SMP868x builtin Ethernet Mac.
10 * Copyright (C) 2005 Maxime Bizon <mbizon@freebox.fr>
13 #include <linux/module.h>
14 #include <linux/etherdevice.h>
15 #include <linux/delay.h>
16 #include <linux/ethtool.h>
17 #include <linux/interrupt.h>
18 #include <linux/platform_device.h>
19 #include <linux/of_device.h>
20 #include <linux/of_mdio.h>
21 #include <linux/of_net.h>
22 #include <linux/dma-mapping.h>
23 #include <linux/phy.h>
24 #include <linux/cache.h>
25 #include <linux/jiffies.h>
27 #include <linux/iopoll.h>
28 #include <asm/barrier.h>
32 static void nb8800_tx_done(struct net_device
*dev
);
33 static int nb8800_dma_stop(struct net_device
*dev
);
35 static inline u8
nb8800_readb(struct nb8800_priv
*priv
, int reg
)
37 return readb_relaxed(priv
->base
+ reg
);
40 static inline u32
nb8800_readl(struct nb8800_priv
*priv
, int reg
)
42 return readl_relaxed(priv
->base
+ reg
);
45 static inline void nb8800_writeb(struct nb8800_priv
*priv
, int reg
, u8 val
)
47 writeb_relaxed(val
, priv
->base
+ reg
);
50 static inline void nb8800_writew(struct nb8800_priv
*priv
, int reg
, u16 val
)
52 writew_relaxed(val
, priv
->base
+ reg
);
55 static inline void nb8800_writel(struct nb8800_priv
*priv
, int reg
, u32 val
)
57 writel_relaxed(val
, priv
->base
+ reg
);
60 static inline void nb8800_maskb(struct nb8800_priv
*priv
, int reg
,
63 u32 old
= nb8800_readb(priv
, reg
);
64 u32
new = (old
& ~mask
) | (val
& mask
);
67 nb8800_writeb(priv
, reg
, new);
70 static inline void nb8800_maskl(struct nb8800_priv
*priv
, int reg
,
73 u32 old
= nb8800_readl(priv
, reg
);
74 u32
new = (old
& ~mask
) | (val
& mask
);
77 nb8800_writel(priv
, reg
, new);
80 static inline void nb8800_modb(struct nb8800_priv
*priv
, int reg
, u8 bits
,
83 nb8800_maskb(priv
, reg
, bits
, set
? bits
: 0);
86 static inline void nb8800_setb(struct nb8800_priv
*priv
, int reg
, u8 bits
)
88 nb8800_maskb(priv
, reg
, bits
, bits
);
91 static inline void nb8800_clearb(struct nb8800_priv
*priv
, int reg
, u8 bits
)
93 nb8800_maskb(priv
, reg
, bits
, 0);
96 static inline void nb8800_modl(struct nb8800_priv
*priv
, int reg
, u32 bits
,
99 nb8800_maskl(priv
, reg
, bits
, set
? bits
: 0);
102 static inline void nb8800_setl(struct nb8800_priv
*priv
, int reg
, u32 bits
)
104 nb8800_maskl(priv
, reg
, bits
, bits
);
107 static inline void nb8800_clearl(struct nb8800_priv
*priv
, int reg
, u32 bits
)
109 nb8800_maskl(priv
, reg
, bits
, 0);
112 static int nb8800_mdio_wait(struct mii_bus
*bus
)
114 struct nb8800_priv
*priv
= bus
->priv
;
117 return readl_poll_timeout_atomic(priv
->base
+ NB8800_MDIO_CMD
,
118 val
, !(val
& MDIO_CMD_GO
), 1, 1000);
121 static int nb8800_mdio_cmd(struct mii_bus
*bus
, u32 cmd
)
123 struct nb8800_priv
*priv
= bus
->priv
;
126 err
= nb8800_mdio_wait(bus
);
130 nb8800_writel(priv
, NB8800_MDIO_CMD
, cmd
);
132 nb8800_writel(priv
, NB8800_MDIO_CMD
, cmd
| MDIO_CMD_GO
);
134 return nb8800_mdio_wait(bus
);
137 static int nb8800_mdio_read(struct mii_bus
*bus
, int phy_id
, int reg
)
139 struct nb8800_priv
*priv
= bus
->priv
;
143 err
= nb8800_mdio_cmd(bus
, MDIO_CMD_ADDR(phy_id
) | MDIO_CMD_REG(reg
));
147 val
= nb8800_readl(priv
, NB8800_MDIO_STS
);
148 if (val
& MDIO_STS_ERR
)
154 static int nb8800_mdio_write(struct mii_bus
*bus
, int phy_id
, int reg
, u16 val
)
156 u32 cmd
= MDIO_CMD_ADDR(phy_id
) | MDIO_CMD_REG(reg
) |
157 MDIO_CMD_DATA(val
) | MDIO_CMD_WR
;
159 return nb8800_mdio_cmd(bus
, cmd
);
162 static void nb8800_mac_tx(struct net_device
*dev
, bool enable
)
164 struct nb8800_priv
*priv
= netdev_priv(dev
);
166 while (nb8800_readl(priv
, NB8800_TXC_CR
) & TCR_EN
)
169 nb8800_modb(priv
, NB8800_TX_CTL1
, TX_EN
, enable
);
172 static void nb8800_mac_rx(struct net_device
*dev
, bool enable
)
174 nb8800_modb(netdev_priv(dev
), NB8800_RX_CTL
, RX_EN
, enable
);
177 static void nb8800_mac_af(struct net_device
*dev
, bool enable
)
179 nb8800_modb(netdev_priv(dev
), NB8800_RX_CTL
, RX_AF_EN
, enable
);
182 static void nb8800_start_rx(struct net_device
*dev
)
184 nb8800_setl(netdev_priv(dev
), NB8800_RXC_CR
, RCR_EN
);
187 static int nb8800_alloc_rx(struct net_device
*dev
, unsigned int i
, bool napi
)
189 struct nb8800_priv
*priv
= netdev_priv(dev
);
190 struct nb8800_rx_desc
*rxd
= &priv
->rx_descs
[i
];
191 struct nb8800_rx_buf
*rxb
= &priv
->rx_bufs
[i
];
192 int size
= L1_CACHE_ALIGN(RX_BUF_SIZE
);
195 unsigned long offset
;
198 data
= napi
? napi_alloc_frag(size
) : netdev_alloc_frag(size
);
202 page
= virt_to_head_page(data
);
203 offset
= data
- page_address(page
);
205 dma_addr
= dma_map_page(&dev
->dev
, page
, offset
, RX_BUF_SIZE
,
208 if (dma_mapping_error(&dev
->dev
, dma_addr
)) {
214 rxb
->offset
= offset
;
215 rxd
->desc
.s_addr
= dma_addr
;
220 static void nb8800_receive(struct net_device
*dev
, unsigned int i
,
223 struct nb8800_priv
*priv
= netdev_priv(dev
);
224 struct nb8800_rx_desc
*rxd
= &priv
->rx_descs
[i
];
225 struct page
*page
= priv
->rx_bufs
[i
].page
;
226 int offset
= priv
->rx_bufs
[i
].offset
;
227 void *data
= page_address(page
) + offset
;
228 dma_addr_t dma
= rxd
->desc
.s_addr
;
233 size
= len
<= RX_COPYBREAK
? len
: RX_COPYHDR
;
235 skb
= napi_alloc_skb(&priv
->napi
, size
);
237 netdev_err(dev
, "rx skb allocation failed\n");
238 dev
->stats
.rx_dropped
++;
242 if (len
<= RX_COPYBREAK
) {
243 dma_sync_single_for_cpu(&dev
->dev
, dma
, len
, DMA_FROM_DEVICE
);
244 skb_put_data(skb
, data
, len
);
245 dma_sync_single_for_device(&dev
->dev
, dma
, len
,
248 err
= nb8800_alloc_rx(dev
, i
, true);
250 netdev_err(dev
, "rx buffer allocation failed\n");
251 dev
->stats
.rx_dropped
++;
256 dma_unmap_page(&dev
->dev
, dma
, RX_BUF_SIZE
, DMA_FROM_DEVICE
);
257 skb_put_data(skb
, data
, RX_COPYHDR
);
258 skb_add_rx_frag(skb
, skb_shinfo(skb
)->nr_frags
, page
,
259 offset
+ RX_COPYHDR
, len
- RX_COPYHDR
,
263 skb
->protocol
= eth_type_trans(skb
, dev
);
264 napi_gro_receive(&priv
->napi
, skb
);
267 static void nb8800_rx_error(struct net_device
*dev
, u32 report
)
269 if (report
& RX_LENGTH_ERR
)
270 dev
->stats
.rx_length_errors
++;
272 if (report
& RX_FCS_ERR
)
273 dev
->stats
.rx_crc_errors
++;
275 if (report
& RX_FIFO_OVERRUN
)
276 dev
->stats
.rx_fifo_errors
++;
278 if (report
& RX_ALIGNMENT_ERROR
)
279 dev
->stats
.rx_frame_errors
++;
281 dev
->stats
.rx_errors
++;
284 static int nb8800_poll(struct napi_struct
*napi
, int budget
)
286 struct net_device
*dev
= napi
->dev
;
287 struct nb8800_priv
*priv
= netdev_priv(dev
);
288 struct nb8800_rx_desc
*rxd
;
289 unsigned int last
= priv
->rx_eoc
;
299 next
= (last
+ 1) % RX_DESC_COUNT
;
301 rxd
= &priv
->rx_descs
[next
];
306 len
= RX_BYTES_TRANSFERRED(rxd
->report
);
308 if (IS_RX_ERROR(rxd
->report
))
309 nb8800_rx_error(dev
, rxd
->report
);
311 nb8800_receive(dev
, next
, len
);
313 dev
->stats
.rx_packets
++;
314 dev
->stats
.rx_bytes
+= len
;
316 if (rxd
->report
& RX_MULTICAST_PKT
)
317 dev
->stats
.multicast
++;
322 } while (work
< budget
);
325 priv
->rx_descs
[last
].desc
.config
|= DESC_EOC
;
326 wmb(); /* ensure new EOC is written before clearing old */
327 priv
->rx_descs
[priv
->rx_eoc
].desc
.config
&= ~DESC_EOC
;
329 nb8800_start_rx(dev
);
333 nb8800_writel(priv
, NB8800_RX_ITR
, priv
->rx_itr_irq
);
335 /* If a packet arrived after we last checked but
336 * before writing RX_ITR, the interrupt will be
337 * delayed, so we retrieve it now.
339 if (priv
->rx_descs
[next
].report
)
342 napi_complete_done(napi
, work
);
348 static void __nb8800_tx_dma_start(struct net_device
*dev
)
350 struct nb8800_priv
*priv
= netdev_priv(dev
);
351 struct nb8800_tx_buf
*txb
;
354 txb
= &priv
->tx_bufs
[priv
->tx_queue
];
358 txc_cr
= nb8800_readl(priv
, NB8800_TXC_CR
);
362 nb8800_writel(priv
, NB8800_TX_DESC_ADDR
, txb
->dma_desc
);
363 wmb(); /* ensure desc addr is written before starting DMA */
364 nb8800_writel(priv
, NB8800_TXC_CR
, txc_cr
| TCR_EN
);
366 priv
->tx_queue
= (priv
->tx_queue
+ txb
->chain_len
) % TX_DESC_COUNT
;
369 static void nb8800_tx_dma_start(struct net_device
*dev
)
371 struct nb8800_priv
*priv
= netdev_priv(dev
);
373 spin_lock_irq(&priv
->tx_lock
);
374 __nb8800_tx_dma_start(dev
);
375 spin_unlock_irq(&priv
->tx_lock
);
378 static void nb8800_tx_dma_start_irq(struct net_device
*dev
)
380 struct nb8800_priv
*priv
= netdev_priv(dev
);
382 spin_lock(&priv
->tx_lock
);
383 __nb8800_tx_dma_start(dev
);
384 spin_unlock(&priv
->tx_lock
);
387 static int nb8800_xmit(struct sk_buff
*skb
, struct net_device
*dev
)
389 struct nb8800_priv
*priv
= netdev_priv(dev
);
390 struct nb8800_tx_desc
*txd
;
391 struct nb8800_tx_buf
*txb
;
392 struct nb8800_dma_desc
*desc
;
394 unsigned int dma_len
;
399 if (atomic_read(&priv
->tx_free
) <= NB8800_DESC_LOW
) {
400 netif_stop_queue(dev
);
401 return NETDEV_TX_BUSY
;
404 align
= (8 - (uintptr_t)skb
->data
) & 7;
406 dma_len
= skb
->len
- align
;
407 dma_addr
= dma_map_single(&dev
->dev
, skb
->data
+ align
,
408 dma_len
, DMA_TO_DEVICE
);
410 if (dma_mapping_error(&dev
->dev
, dma_addr
)) {
411 netdev_err(dev
, "tx dma mapping error\n");
413 dev
->stats
.tx_dropped
++;
417 xmit_more
= netdev_xmit_more();
418 if (atomic_dec_return(&priv
->tx_free
) <= NB8800_DESC_LOW
) {
419 netif_stop_queue(dev
);
423 next
= priv
->tx_next
;
424 txb
= &priv
->tx_bufs
[next
];
425 txd
= &priv
->tx_descs
[next
];
426 desc
= &txd
->desc
[0];
428 next
= (next
+ 1) % TX_DESC_COUNT
;
431 memcpy(txd
->buf
, skb
->data
, align
);
434 txb
->dma_desc
+ offsetof(struct nb8800_tx_desc
, buf
);
435 desc
->n_addr
= txb
->dma_desc
+ sizeof(txd
->desc
[0]);
436 desc
->config
= DESC_BTS(2) | DESC_DS
| align
;
441 desc
->s_addr
= dma_addr
;
442 desc
->n_addr
= priv
->tx_bufs
[next
].dma_desc
;
443 desc
->config
= DESC_BTS(2) | DESC_DS
| DESC_EOF
| dma_len
;
446 desc
->config
|= DESC_EOC
;
449 txb
->dma_addr
= dma_addr
;
450 txb
->dma_len
= dma_len
;
452 if (!priv
->tx_chain
) {
454 priv
->tx_chain
= txb
;
456 priv
->tx_chain
->chain_len
++;
459 netdev_sent_queue(dev
, skb
->len
);
461 priv
->tx_next
= next
;
465 priv
->tx_chain
->ready
= true;
466 priv
->tx_chain
= NULL
;
467 nb8800_tx_dma_start(dev
);
473 static void nb8800_tx_error(struct net_device
*dev
, u32 report
)
475 if (report
& TX_LATE_COLLISION
)
476 dev
->stats
.collisions
++;
478 if (report
& TX_PACKET_DROPPED
)
479 dev
->stats
.tx_dropped
++;
481 if (report
& TX_FIFO_UNDERRUN
)
482 dev
->stats
.tx_fifo_errors
++;
484 dev
->stats
.tx_errors
++;
487 static void nb8800_tx_done(struct net_device
*dev
)
489 struct nb8800_priv
*priv
= netdev_priv(dev
);
490 unsigned int limit
= priv
->tx_next
;
491 unsigned int done
= priv
->tx_done
;
492 unsigned int packets
= 0;
493 unsigned int len
= 0;
495 while (done
!= limit
) {
496 struct nb8800_tx_desc
*txd
= &priv
->tx_descs
[done
];
497 struct nb8800_tx_buf
*txb
= &priv
->tx_bufs
[done
];
506 dma_unmap_single(&dev
->dev
, txb
->dma_addr
, txb
->dma_len
,
509 if (IS_TX_ERROR(txd
->report
)) {
510 nb8800_tx_error(dev
, txd
->report
);
516 dev
->stats
.tx_packets
++;
517 dev
->stats
.tx_bytes
+= TX_BYTES_TRANSFERRED(txd
->report
);
518 dev
->stats
.collisions
+= TX_EARLY_COLLISIONS(txd
->report
);
524 done
= (done
+ 1) % TX_DESC_COUNT
;
529 smp_mb__before_atomic();
530 atomic_add(packets
, &priv
->tx_free
);
531 netdev_completed_queue(dev
, packets
, len
);
532 netif_wake_queue(dev
);
533 priv
->tx_done
= done
;
537 static irqreturn_t
nb8800_irq(int irq
, void *dev_id
)
539 struct net_device
*dev
= dev_id
;
540 struct nb8800_priv
*priv
= netdev_priv(dev
);
541 irqreturn_t ret
= IRQ_NONE
;
545 val
= nb8800_readl(priv
, NB8800_TXC_SR
);
547 nb8800_writel(priv
, NB8800_TXC_SR
, val
);
550 nb8800_tx_dma_start_irq(dev
);
553 napi_schedule_irqoff(&priv
->napi
);
555 if (unlikely(val
& TSR_DE
))
556 netdev_err(dev
, "TX DMA error\n");
558 /* should never happen with automatic status retrieval */
559 if (unlikely(val
& TSR_TO
))
560 netdev_err(dev
, "TX Status FIFO overflow\n");
566 val
= nb8800_readl(priv
, NB8800_RXC_SR
);
568 nb8800_writel(priv
, NB8800_RXC_SR
, val
);
570 if (likely(val
& (RSR_RI
| RSR_DI
))) {
571 nb8800_writel(priv
, NB8800_RX_ITR
, priv
->rx_itr_poll
);
572 napi_schedule_irqoff(&priv
->napi
);
575 if (unlikely(val
& RSR_DE
))
576 netdev_err(dev
, "RX DMA error\n");
578 /* should never happen with automatic status retrieval */
579 if (unlikely(val
& RSR_RO
))
580 netdev_err(dev
, "RX Status FIFO overflow\n");
588 static void nb8800_mac_config(struct net_device
*dev
)
590 struct nb8800_priv
*priv
= netdev_priv(dev
);
591 bool gigabit
= priv
->speed
== SPEED_1000
;
592 u32 mac_mode_mask
= RGMII_MODE
| HALF_DUPLEX
| GMAC_MODE
;
599 mac_mode
|= HALF_DUPLEX
;
602 if (phy_interface_is_rgmii(dev
->phydev
))
603 mac_mode
|= RGMII_MODE
;
605 mac_mode
|= GMAC_MODE
;
608 /* Should be 512 but register is only 8 bits */
615 ict
= DIV_ROUND_UP(phy_clk
, clk_get_rate(priv
->clk
));
617 nb8800_writeb(priv
, NB8800_IC_THRESHOLD
, ict
);
618 nb8800_writeb(priv
, NB8800_SLOT_TIME
, slot_time
);
619 nb8800_maskb(priv
, NB8800_MAC_MODE
, mac_mode_mask
, mac_mode
);
622 static void nb8800_pause_config(struct net_device
*dev
)
624 struct nb8800_priv
*priv
= netdev_priv(dev
);
625 struct phy_device
*phydev
= dev
->phydev
;
628 if (priv
->pause_aneg
) {
629 if (!phydev
|| !phydev
->link
)
632 priv
->pause_rx
= phydev
->pause
;
633 priv
->pause_tx
= phydev
->pause
^ phydev
->asym_pause
;
636 nb8800_modb(priv
, NB8800_RX_CTL
, RX_PAUSE_EN
, priv
->pause_rx
);
638 rxcr
= nb8800_readl(priv
, NB8800_RXC_CR
);
639 if (!!(rxcr
& RCR_FL
) == priv
->pause_tx
)
642 if (netif_running(dev
)) {
643 napi_disable(&priv
->napi
);
644 netif_tx_lock_bh(dev
);
645 nb8800_dma_stop(dev
);
646 nb8800_modl(priv
, NB8800_RXC_CR
, RCR_FL
, priv
->pause_tx
);
647 nb8800_start_rx(dev
);
648 netif_tx_unlock_bh(dev
);
649 napi_enable(&priv
->napi
);
651 nb8800_modl(priv
, NB8800_RXC_CR
, RCR_FL
, priv
->pause_tx
);
655 static void nb8800_link_reconfigure(struct net_device
*dev
)
657 struct nb8800_priv
*priv
= netdev_priv(dev
);
658 struct phy_device
*phydev
= dev
->phydev
;
662 if (phydev
->speed
!= priv
->speed
) {
663 priv
->speed
= phydev
->speed
;
667 if (phydev
->duplex
!= priv
->duplex
) {
668 priv
->duplex
= phydev
->duplex
;
673 nb8800_mac_config(dev
);
675 nb8800_pause_config(dev
);
678 if (phydev
->link
!= priv
->link
) {
679 priv
->link
= phydev
->link
;
684 phy_print_status(phydev
);
687 static void nb8800_update_mac_addr(struct net_device
*dev
)
689 struct nb8800_priv
*priv
= netdev_priv(dev
);
692 for (i
= 0; i
< ETH_ALEN
; i
++)
693 nb8800_writeb(priv
, NB8800_SRC_ADDR(i
), dev
->dev_addr
[i
]);
695 for (i
= 0; i
< ETH_ALEN
; i
++)
696 nb8800_writeb(priv
, NB8800_UC_ADDR(i
), dev
->dev_addr
[i
]);
699 static int nb8800_set_mac_address(struct net_device
*dev
, void *addr
)
701 struct sockaddr
*sock
= addr
;
703 if (netif_running(dev
))
706 ether_addr_copy(dev
->dev_addr
, sock
->sa_data
);
707 nb8800_update_mac_addr(dev
);
712 static void nb8800_mc_init(struct net_device
*dev
, int val
)
714 struct nb8800_priv
*priv
= netdev_priv(dev
);
716 nb8800_writeb(priv
, NB8800_MC_INIT
, val
);
717 readb_poll_timeout_atomic(priv
->base
+ NB8800_MC_INIT
, val
, !val
,
721 static void nb8800_set_rx_mode(struct net_device
*dev
)
723 struct nb8800_priv
*priv
= netdev_priv(dev
);
724 struct netdev_hw_addr
*ha
;
727 if (dev
->flags
& (IFF_PROMISC
| IFF_ALLMULTI
)) {
728 nb8800_mac_af(dev
, false);
732 nb8800_mac_af(dev
, true);
733 nb8800_mc_init(dev
, 0);
735 netdev_for_each_mc_addr(ha
, dev
) {
736 for (i
= 0; i
< ETH_ALEN
; i
++)
737 nb8800_writeb(priv
, NB8800_MC_ADDR(i
), ha
->addr
[i
]);
739 nb8800_mc_init(dev
, 0xff);
743 #define RX_DESC_SIZE (RX_DESC_COUNT * sizeof(struct nb8800_rx_desc))
744 #define TX_DESC_SIZE (TX_DESC_COUNT * sizeof(struct nb8800_tx_desc))
746 static void nb8800_dma_free(struct net_device
*dev
)
748 struct nb8800_priv
*priv
= netdev_priv(dev
);
752 for (i
= 0; i
< RX_DESC_COUNT
; i
++)
753 if (priv
->rx_bufs
[i
].page
)
754 put_page(priv
->rx_bufs
[i
].page
);
756 kfree(priv
->rx_bufs
);
757 priv
->rx_bufs
= NULL
;
761 for (i
= 0; i
< TX_DESC_COUNT
; i
++)
762 kfree_skb(priv
->tx_bufs
[i
].skb
);
764 kfree(priv
->tx_bufs
);
765 priv
->tx_bufs
= NULL
;
768 if (priv
->rx_descs
) {
769 dma_free_coherent(dev
->dev
.parent
, RX_DESC_SIZE
, priv
->rx_descs
,
771 priv
->rx_descs
= NULL
;
774 if (priv
->tx_descs
) {
775 dma_free_coherent(dev
->dev
.parent
, TX_DESC_SIZE
, priv
->tx_descs
,
777 priv
->tx_descs
= NULL
;
781 static void nb8800_dma_reset(struct net_device
*dev
)
783 struct nb8800_priv
*priv
= netdev_priv(dev
);
784 struct nb8800_rx_desc
*rxd
;
785 struct nb8800_tx_desc
*txd
;
788 for (i
= 0; i
< RX_DESC_COUNT
; i
++) {
789 dma_addr_t rx_dma
= priv
->rx_desc_dma
+ i
* sizeof(*rxd
);
791 rxd
= &priv
->rx_descs
[i
];
792 rxd
->desc
.n_addr
= rx_dma
+ sizeof(*rxd
);
794 rx_dma
+ offsetof(struct nb8800_rx_desc
, report
);
795 rxd
->desc
.config
= priv
->rx_dma_config
;
799 rxd
->desc
.n_addr
= priv
->rx_desc_dma
;
800 rxd
->desc
.config
|= DESC_EOC
;
802 priv
->rx_eoc
= RX_DESC_COUNT
- 1;
804 for (i
= 0; i
< TX_DESC_COUNT
; i
++) {
805 struct nb8800_tx_buf
*txb
= &priv
->tx_bufs
[i
];
806 dma_addr_t r_dma
= txb
->dma_desc
+
807 offsetof(struct nb8800_tx_desc
, report
);
809 txd
= &priv
->tx_descs
[i
];
810 txd
->desc
[0].r_addr
= r_dma
;
811 txd
->desc
[1].r_addr
= r_dma
;
818 atomic_set(&priv
->tx_free
, TX_DESC_COUNT
);
820 nb8800_writel(priv
, NB8800_RX_DESC_ADDR
, priv
->rx_desc_dma
);
822 wmb(); /* ensure all setup is written before starting */
825 static int nb8800_dma_init(struct net_device
*dev
)
827 struct nb8800_priv
*priv
= netdev_priv(dev
);
828 unsigned int n_rx
= RX_DESC_COUNT
;
829 unsigned int n_tx
= TX_DESC_COUNT
;
833 priv
->rx_descs
= dma_alloc_coherent(dev
->dev
.parent
, RX_DESC_SIZE
,
834 &priv
->rx_desc_dma
, GFP_KERNEL
);
838 priv
->rx_bufs
= kcalloc(n_rx
, sizeof(*priv
->rx_bufs
), GFP_KERNEL
);
842 for (i
= 0; i
< n_rx
; i
++) {
843 err
= nb8800_alloc_rx(dev
, i
, false);
848 priv
->tx_descs
= dma_alloc_coherent(dev
->dev
.parent
, TX_DESC_SIZE
,
849 &priv
->tx_desc_dma
, GFP_KERNEL
);
853 priv
->tx_bufs
= kcalloc(n_tx
, sizeof(*priv
->tx_bufs
), GFP_KERNEL
);
857 for (i
= 0; i
< n_tx
; i
++)
858 priv
->tx_bufs
[i
].dma_desc
=
859 priv
->tx_desc_dma
+ i
* sizeof(struct nb8800_tx_desc
);
861 nb8800_dma_reset(dev
);
866 nb8800_dma_free(dev
);
871 static int nb8800_dma_stop(struct net_device
*dev
)
873 struct nb8800_priv
*priv
= netdev_priv(dev
);
874 struct nb8800_tx_buf
*txb
= &priv
->tx_bufs
[0];
875 struct nb8800_tx_desc
*txd
= &priv
->tx_descs
[0];
882 /* wait for tx to finish */
883 err
= readl_poll_timeout_atomic(priv
->base
+ NB8800_TXC_CR
, txcr
,
885 priv
->tx_done
== priv
->tx_next
,
890 /* The rx DMA only stops if it reaches the end of chain.
891 * To make this happen, we set the EOC flag on all rx
892 * descriptors, put the device in loopback mode, and send
893 * a few dummy frames. The interrupt handler will ignore
894 * these since NAPI is disabled and no real frames are in
898 for (i
= 0; i
< RX_DESC_COUNT
; i
++)
899 priv
->rx_descs
[i
].desc
.config
|= DESC_EOC
;
901 txd
->desc
[0].s_addr
=
902 txb
->dma_desc
+ offsetof(struct nb8800_tx_desc
, buf
);
903 txd
->desc
[0].config
= DESC_BTS(2) | DESC_DS
| DESC_EOF
| DESC_EOC
| 8;
904 memset(txd
->buf
, 0, sizeof(txd
->buf
));
906 nb8800_mac_af(dev
, false);
907 nb8800_setb(priv
, NB8800_MAC_MODE
, LOOPBACK_EN
);
910 nb8800_writel(priv
, NB8800_TX_DESC_ADDR
, txb
->dma_desc
);
912 nb8800_writel(priv
, NB8800_TXC_CR
, txcr
| TCR_EN
);
914 err
= readl_poll_timeout_atomic(priv
->base
+ NB8800_RXC_CR
,
915 rxcr
, !(rxcr
& RCR_EN
),
917 } while (err
&& --retry
);
919 nb8800_mac_af(dev
, true);
920 nb8800_clearb(priv
, NB8800_MAC_MODE
, LOOPBACK_EN
);
921 nb8800_dma_reset(dev
);
923 return retry
? 0 : -ETIMEDOUT
;
926 static void nb8800_pause_adv(struct net_device
*dev
)
928 struct nb8800_priv
*priv
= netdev_priv(dev
);
929 struct phy_device
*phydev
= dev
->phydev
;
934 phy_set_asym_pause(phydev
, priv
->pause_rx
, priv
->pause_tx
);
937 static int nb8800_open(struct net_device
*dev
)
939 struct nb8800_priv
*priv
= netdev_priv(dev
);
940 struct phy_device
*phydev
;
943 /* clear any pending interrupts */
944 nb8800_writel(priv
, NB8800_RXC_SR
, 0xf);
945 nb8800_writel(priv
, NB8800_TXC_SR
, 0xf);
947 err
= nb8800_dma_init(dev
);
951 err
= request_irq(dev
->irq
, nb8800_irq
, 0, dev_name(&dev
->dev
), dev
);
955 nb8800_mac_rx(dev
, true);
956 nb8800_mac_tx(dev
, true);
958 phydev
= of_phy_connect(dev
, priv
->phy_node
,
959 nb8800_link_reconfigure
, 0,
966 nb8800_pause_adv(dev
);
968 netdev_reset_queue(dev
);
969 napi_enable(&priv
->napi
);
970 netif_start_queue(dev
);
972 nb8800_start_rx(dev
);
978 free_irq(dev
->irq
, dev
);
980 nb8800_dma_free(dev
);
985 static int nb8800_stop(struct net_device
*dev
)
987 struct nb8800_priv
*priv
= netdev_priv(dev
);
988 struct phy_device
*phydev
= dev
->phydev
;
992 netif_stop_queue(dev
);
993 napi_disable(&priv
->napi
);
995 nb8800_dma_stop(dev
);
996 nb8800_mac_rx(dev
, false);
997 nb8800_mac_tx(dev
, false);
999 phy_disconnect(phydev
);
1001 free_irq(dev
->irq
, dev
);
1003 nb8800_dma_free(dev
);
1008 static const struct net_device_ops nb8800_netdev_ops
= {
1009 .ndo_open
= nb8800_open
,
1010 .ndo_stop
= nb8800_stop
,
1011 .ndo_start_xmit
= nb8800_xmit
,
1012 .ndo_set_mac_address
= nb8800_set_mac_address
,
1013 .ndo_set_rx_mode
= nb8800_set_rx_mode
,
1014 .ndo_do_ioctl
= phy_do_ioctl
,
1015 .ndo_validate_addr
= eth_validate_addr
,
1018 static void nb8800_get_pauseparam(struct net_device
*dev
,
1019 struct ethtool_pauseparam
*pp
)
1021 struct nb8800_priv
*priv
= netdev_priv(dev
);
1023 pp
->autoneg
= priv
->pause_aneg
;
1024 pp
->rx_pause
= priv
->pause_rx
;
1025 pp
->tx_pause
= priv
->pause_tx
;
1028 static int nb8800_set_pauseparam(struct net_device
*dev
,
1029 struct ethtool_pauseparam
*pp
)
1031 struct nb8800_priv
*priv
= netdev_priv(dev
);
1032 struct phy_device
*phydev
= dev
->phydev
;
1034 priv
->pause_aneg
= pp
->autoneg
;
1035 priv
->pause_rx
= pp
->rx_pause
;
1036 priv
->pause_tx
= pp
->tx_pause
;
1038 nb8800_pause_adv(dev
);
1040 if (!priv
->pause_aneg
)
1041 nb8800_pause_config(dev
);
1043 phy_start_aneg(phydev
);
1048 static const char nb8800_stats_names
[][ETH_GSTRING_LEN
] = {
1051 "rx_undersize_frames",
1052 "rx_fragment_frames",
1053 "rx_64_byte_frames",
1054 "rx_127_byte_frames",
1055 "rx_255_byte_frames",
1056 "rx_511_byte_frames",
1057 "rx_1023_byte_frames",
1058 "rx_max_size_frames",
1059 "rx_oversize_frames",
1060 "rx_bad_fcs_frames",
1061 "rx_broadcast_frames",
1062 "rx_multicast_frames",
1063 "rx_control_frames",
1065 "rx_unsup_control_frames",
1066 "rx_align_error_frames",
1067 "rx_overrun_frames",
1074 "tx_64_byte_frames",
1075 "tx_127_byte_frames",
1076 "tx_255_byte_frames",
1077 "tx_511_byte_frames",
1078 "tx_1023_byte_frames",
1079 "tx_max_size_frames",
1080 "tx_oversize_frames",
1081 "tx_broadcast_frames",
1082 "tx_multicast_frames",
1083 "tx_control_frames",
1085 "tx_underrun_frames",
1086 "tx_single_collision_frames",
1087 "tx_multi_collision_frames",
1088 "tx_deferred_collision_frames",
1089 "tx_late_collision_frames",
1090 "tx_excessive_collision_frames",
1096 #define NB8800_NUM_STATS ARRAY_SIZE(nb8800_stats_names)
1098 static int nb8800_get_sset_count(struct net_device
*dev
, int sset
)
1100 if (sset
== ETH_SS_STATS
)
1101 return NB8800_NUM_STATS
;
1106 static void nb8800_get_strings(struct net_device
*dev
, u32 sset
, u8
*buf
)
1108 if (sset
== ETH_SS_STATS
)
1109 memcpy(buf
, &nb8800_stats_names
, sizeof(nb8800_stats_names
));
1112 static u32
nb8800_read_stat(struct net_device
*dev
, int index
)
1114 struct nb8800_priv
*priv
= netdev_priv(dev
);
1116 nb8800_writeb(priv
, NB8800_STAT_INDEX
, index
);
1118 return nb8800_readl(priv
, NB8800_STAT_DATA
);
1121 static void nb8800_get_ethtool_stats(struct net_device
*dev
,
1122 struct ethtool_stats
*estats
, u64
*st
)
1127 for (i
= 0; i
< NB8800_NUM_STATS
/ 2; i
++) {
1128 rx
= nb8800_read_stat(dev
, i
);
1129 tx
= nb8800_read_stat(dev
, i
| 0x80);
1131 st
[i
+ NB8800_NUM_STATS
/ 2] = tx
;
1135 static const struct ethtool_ops nb8800_ethtool_ops
= {
1136 .nway_reset
= phy_ethtool_nway_reset
,
1137 .get_link
= ethtool_op_get_link
,
1138 .get_pauseparam
= nb8800_get_pauseparam
,
1139 .set_pauseparam
= nb8800_set_pauseparam
,
1140 .get_sset_count
= nb8800_get_sset_count
,
1141 .get_strings
= nb8800_get_strings
,
1142 .get_ethtool_stats
= nb8800_get_ethtool_stats
,
1143 .get_link_ksettings
= phy_ethtool_get_link_ksettings
,
1144 .set_link_ksettings
= phy_ethtool_set_link_ksettings
,
1147 static int nb8800_hw_init(struct net_device
*dev
)
1149 struct nb8800_priv
*priv
= netdev_priv(dev
);
1152 val
= TX_RETRY_EN
| TX_PAD_EN
| TX_APPEND_FCS
;
1153 nb8800_writeb(priv
, NB8800_TX_CTL1
, val
);
1155 /* Collision retry count */
1156 nb8800_writeb(priv
, NB8800_TX_CTL2
, 5);
1158 val
= RX_PAD_STRIP
| RX_AF_EN
;
1159 nb8800_writeb(priv
, NB8800_RX_CTL
, val
);
1161 /* Chosen by fair dice roll */
1162 nb8800_writeb(priv
, NB8800_RANDOM_SEED
, 4);
1164 /* TX cycles per deferral period */
1165 nb8800_writeb(priv
, NB8800_TX_SDP
, 12);
1167 /* The following three threshold values have been
1168 * experimentally determined for good results.
1171 /* RX/TX FIFO threshold for partial empty (64-bit entries) */
1172 nb8800_writeb(priv
, NB8800_PE_THRESHOLD
, 0);
1174 /* RX/TX FIFO threshold for partial full (64-bit entries) */
1175 nb8800_writeb(priv
, NB8800_PF_THRESHOLD
, 255);
1177 /* Buffer size for transmit (64-bit entries) */
1178 nb8800_writeb(priv
, NB8800_TX_BUFSIZE
, 64);
1180 /* Configure tx DMA */
1182 val
= nb8800_readl(priv
, NB8800_TXC_CR
);
1183 val
&= TCR_LE
; /* keep endian setting */
1184 val
|= TCR_DM
; /* DMA descriptor mode */
1185 val
|= TCR_RS
; /* automatically store tx status */
1186 val
|= TCR_DIE
; /* interrupt on DMA chain completion */
1187 val
|= TCR_TFI(7); /* interrupt after 7 frames transmitted */
1188 val
|= TCR_BTS(2); /* 32-byte bus transaction size */
1189 nb8800_writel(priv
, NB8800_TXC_CR
, val
);
1191 /* TX complete interrupt after 10 ms or 7 frames (see above) */
1192 val
= clk_get_rate(priv
->clk
) / 100;
1193 nb8800_writel(priv
, NB8800_TX_ITR
, val
);
1195 /* Configure rx DMA */
1197 val
= nb8800_readl(priv
, NB8800_RXC_CR
);
1198 val
&= RCR_LE
; /* keep endian setting */
1199 val
|= RCR_DM
; /* DMA descriptor mode */
1200 val
|= RCR_RS
; /* automatically store rx status */
1201 val
|= RCR_DIE
; /* interrupt at end of DMA chain */
1202 val
|= RCR_RFI(7); /* interrupt after 7 frames received */
1203 val
|= RCR_BTS(2); /* 32-byte bus transaction size */
1204 nb8800_writel(priv
, NB8800_RXC_CR
, val
);
1206 /* The rx interrupt can fire before the DMA has completed
1207 * unless a small delay is added. 50 us is hopefully enough.
1209 priv
->rx_itr_irq
= clk_get_rate(priv
->clk
) / 20000;
1211 /* In NAPI poll mode we want to disable interrupts, but the
1212 * hardware does not permit this. Delay 10 ms instead.
1214 priv
->rx_itr_poll
= clk_get_rate(priv
->clk
) / 100;
1216 nb8800_writel(priv
, NB8800_RX_ITR
, priv
->rx_itr_irq
);
1218 priv
->rx_dma_config
= RX_BUF_SIZE
| DESC_BTS(2) | DESC_DS
| DESC_EOF
;
1220 /* Flow control settings */
1222 /* Pause time of 0.1 ms */
1224 nb8800_writeb(priv
, NB8800_PQ1
, val
>> 8);
1225 nb8800_writeb(priv
, NB8800_PQ2
, val
& 0xff);
1227 /* Auto-negotiate by default */
1228 priv
->pause_aneg
= true;
1229 priv
->pause_rx
= true;
1230 priv
->pause_tx
= true;
1232 nb8800_mc_init(dev
, 0);
1237 static int nb8800_tangox_init(struct net_device
*dev
)
1239 struct nb8800_priv
*priv
= netdev_priv(dev
);
1240 u32 pad_mode
= PAD_MODE_MII
;
1242 switch (priv
->phy_mode
) {
1243 case PHY_INTERFACE_MODE_MII
:
1244 case PHY_INTERFACE_MODE_GMII
:
1245 pad_mode
= PAD_MODE_MII
;
1248 case PHY_INTERFACE_MODE_RGMII
:
1249 case PHY_INTERFACE_MODE_RGMII_ID
:
1250 case PHY_INTERFACE_MODE_RGMII_RXID
:
1251 case PHY_INTERFACE_MODE_RGMII_TXID
:
1252 pad_mode
= PAD_MODE_RGMII
;
1256 dev_err(dev
->dev
.parent
, "unsupported phy mode %s\n",
1257 phy_modes(priv
->phy_mode
));
1261 nb8800_writeb(priv
, NB8800_TANGOX_PAD_MODE
, pad_mode
);
1266 static int nb8800_tangox_reset(struct net_device
*dev
)
1268 struct nb8800_priv
*priv
= netdev_priv(dev
);
1271 nb8800_writeb(priv
, NB8800_TANGOX_RESET
, 0);
1272 usleep_range(1000, 10000);
1273 nb8800_writeb(priv
, NB8800_TANGOX_RESET
, 1);
1275 wmb(); /* ensure reset is cleared before proceeding */
1277 clk_div
= DIV_ROUND_UP(clk_get_rate(priv
->clk
), 2 * MAX_MDC_CLOCK
);
1278 nb8800_writew(priv
, NB8800_TANGOX_MDIO_CLKDIV
, clk_div
);
1283 static const struct nb8800_ops nb8800_tangox_ops
= {
1284 .init
= nb8800_tangox_init
,
1285 .reset
= nb8800_tangox_reset
,
1288 static int nb8800_tango4_init(struct net_device
*dev
)
1290 struct nb8800_priv
*priv
= netdev_priv(dev
);
1293 err
= nb8800_tangox_init(dev
);
1297 /* On tango4 interrupt on DMA completion per frame works and gives
1298 * better performance despite generating more rx interrupts.
1301 /* Disable unnecessary interrupt on rx completion */
1302 nb8800_clearl(priv
, NB8800_RXC_CR
, RCR_RFI(7));
1304 /* Request interrupt on descriptor DMA completion */
1305 priv
->rx_dma_config
|= DESC_ID
;
1310 static const struct nb8800_ops nb8800_tango4_ops
= {
1311 .init
= nb8800_tango4_init
,
1312 .reset
= nb8800_tangox_reset
,
1315 static const struct of_device_id nb8800_dt_ids
[] = {
1317 .compatible
= "aurora,nb8800",
1320 .compatible
= "sigma,smp8642-ethernet",
1321 .data
= &nb8800_tangox_ops
,
1324 .compatible
= "sigma,smp8734-ethernet",
1325 .data
= &nb8800_tango4_ops
,
1329 MODULE_DEVICE_TABLE(of
, nb8800_dt_ids
);
1331 static int nb8800_probe(struct platform_device
*pdev
)
1333 const struct of_device_id
*match
;
1334 const struct nb8800_ops
*ops
= NULL
;
1335 struct nb8800_priv
*priv
;
1336 struct resource
*res
;
1337 struct net_device
*dev
;
1338 struct mii_bus
*bus
;
1339 const unsigned char *mac
;
1344 match
= of_match_device(nb8800_dt_ids
, &pdev
->dev
);
1348 irq
= platform_get_irq(pdev
, 0);
1352 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1353 base
= devm_ioremap_resource(&pdev
->dev
, res
);
1355 return PTR_ERR(base
);
1357 dev_dbg(&pdev
->dev
, "AU-NB8800 Ethernet at %pa\n", &res
->start
);
1359 dev
= alloc_etherdev(sizeof(*priv
));
1363 platform_set_drvdata(pdev
, dev
);
1364 SET_NETDEV_DEV(dev
, &pdev
->dev
);
1366 priv
= netdev_priv(dev
);
1369 ret
= of_get_phy_mode(pdev
->dev
.of_node
, &priv
->phy_mode
);
1371 priv
->phy_mode
= PHY_INTERFACE_MODE_RGMII
;
1373 priv
->clk
= devm_clk_get(&pdev
->dev
, NULL
);
1374 if (IS_ERR(priv
->clk
)) {
1375 dev_err(&pdev
->dev
, "failed to get clock\n");
1376 ret
= PTR_ERR(priv
->clk
);
1380 ret
= clk_prepare_enable(priv
->clk
);
1384 spin_lock_init(&priv
->tx_lock
);
1386 if (ops
&& ops
->reset
) {
1387 ret
= ops
->reset(dev
);
1389 goto err_disable_clk
;
1392 bus
= devm_mdiobus_alloc(&pdev
->dev
);
1395 goto err_disable_clk
;
1398 bus
->name
= "nb8800-mii";
1399 bus
->read
= nb8800_mdio_read
;
1400 bus
->write
= nb8800_mdio_write
;
1401 bus
->parent
= &pdev
->dev
;
1402 snprintf(bus
->id
, MII_BUS_ID_SIZE
, "%lx.nb8800-mii",
1403 (unsigned long)res
->start
);
1406 ret
= of_mdiobus_register(bus
, pdev
->dev
.of_node
);
1408 dev_err(&pdev
->dev
, "failed to register MII bus\n");
1409 goto err_disable_clk
;
1412 if (of_phy_is_fixed_link(pdev
->dev
.of_node
)) {
1413 ret
= of_phy_register_fixed_link(pdev
->dev
.of_node
);
1415 dev_err(&pdev
->dev
, "bad fixed-link spec\n");
1418 priv
->phy_node
= of_node_get(pdev
->dev
.of_node
);
1421 if (!priv
->phy_node
)
1422 priv
->phy_node
= of_parse_phandle(pdev
->dev
.of_node
,
1425 if (!priv
->phy_node
) {
1426 dev_err(&pdev
->dev
, "no PHY specified\n");
1431 priv
->mii_bus
= bus
;
1433 ret
= nb8800_hw_init(dev
);
1435 goto err_deregister_fixed_link
;
1437 if (ops
&& ops
->init
) {
1438 ret
= ops
->init(dev
);
1440 goto err_deregister_fixed_link
;
1443 dev
->netdev_ops
= &nb8800_netdev_ops
;
1444 dev
->ethtool_ops
= &nb8800_ethtool_ops
;
1445 dev
->flags
|= IFF_MULTICAST
;
1448 mac
= of_get_mac_address(pdev
->dev
.of_node
);
1450 ether_addr_copy(dev
->dev_addr
, mac
);
1452 if (!is_valid_ether_addr(dev
->dev_addr
))
1453 eth_hw_addr_random(dev
);
1455 nb8800_update_mac_addr(dev
);
1457 netif_carrier_off(dev
);
1459 ret
= register_netdev(dev
);
1461 netdev_err(dev
, "failed to register netdev\n");
1465 netif_napi_add(dev
, &priv
->napi
, nb8800_poll
, NAPI_POLL_WEIGHT
);
1467 netdev_info(dev
, "MAC address %pM\n", dev
->dev_addr
);
1472 nb8800_dma_free(dev
);
1473 err_deregister_fixed_link
:
1474 if (of_phy_is_fixed_link(pdev
->dev
.of_node
))
1475 of_phy_deregister_fixed_link(pdev
->dev
.of_node
);
1477 of_node_put(priv
->phy_node
);
1478 mdiobus_unregister(bus
);
1480 clk_disable_unprepare(priv
->clk
);
1487 static int nb8800_remove(struct platform_device
*pdev
)
1489 struct net_device
*ndev
= platform_get_drvdata(pdev
);
1490 struct nb8800_priv
*priv
= netdev_priv(ndev
);
1492 unregister_netdev(ndev
);
1493 if (of_phy_is_fixed_link(pdev
->dev
.of_node
))
1494 of_phy_deregister_fixed_link(pdev
->dev
.of_node
);
1495 of_node_put(priv
->phy_node
);
1497 mdiobus_unregister(priv
->mii_bus
);
1499 clk_disable_unprepare(priv
->clk
);
1501 nb8800_dma_free(ndev
);
1507 static struct platform_driver nb8800_driver
= {
1510 .of_match_table
= nb8800_dt_ids
,
1512 .probe
= nb8800_probe
,
1513 .remove
= nb8800_remove
,
1516 module_platform_driver(nb8800_driver
);
1518 MODULE_DESCRIPTION("Aurora AU-NB8800 Ethernet driver");
1519 MODULE_AUTHOR("Mans Rullgard <mans@mansr.com>");
1520 MODULE_LICENSE("GPL");