1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2 /*
3 * rtase is the Linux device driver released for Realtek Automotive Switch
4 * controllers with PCI-Express interface.
5 *
6 * Copyright(c) 2024 Realtek Semiconductor Corp.
7 *
8 * Below is a simplified block diagram of the chip and its relevant interfaces.
9 *
10 * *************************
11 * * *
12 * * CPU network device *
13 * * *
14 * * +-------------+ *
15 * * | PCIE Host | *
16 * ***********++************
17 * ||
18 * PCIE
19 * ||
20 * ********************++**********************
21 * * | PCIE Endpoint | *
22 * * +---------------+ *
23 * * | GMAC | *
24 * * +--++--+ Realtek *
25 * * || RTL90xx Series *
26 * * || *
27 * * +-------------++----------------+ *
28 * * | | MAC | | *
29 * * | +-----+ | *
30 * * | | *
31 * * | Ethernet Switch Core | *
32 * * | | *
33 * * | +-----+ +-----+ | *
34 * * | | MAC |...........| MAC | | *
35 * * +---+-----+-----------+-----+---+ *
36 * * | PHY |...........| PHY | *
37 * * +--++-+ +--++-+ *
38 * *************||****************||***********
39 *
40 * The block of the Realtek RTL90xx series is our entire chip architecture,
41 * the GMAC is connected to the switch core, and there is no PHY in between.
42 * In addition, this driver is mainly used to control GMAC, but does not
43 * control the switch core, so it is not the same as DSA. Linux only plays
44 * the role of a normal leaf node in this model.
45 */
46
47 #include <linux/crc32.h>
48 #include <linux/dma-mapping.h>
49 #include <linux/etherdevice.h>
50 #include <linux/if_vlan.h>
51 #include <linux/in.h>
52 #include <linux/init.h>
53 #include <linux/interrupt.h>
54 #include <linux/io.h>
55 #include <linux/iopoll.h>
56 #include <linux/ip.h>
57 #include <linux/ipv6.h>
58 #include <linux/mdio.h>
59 #include <linux/module.h>
60 #include <linux/netdevice.h>
61 #include <linux/pci.h>
62 #include <linux/pm_runtime.h>
63 #include <linux/prefetch.h>
64 #include <linux/rtnetlink.h>
65 #include <linux/tcp.h>
66 #include <asm/irq.h>
67 #include <net/ip6_checksum.h>
68 #include <net/netdev_queues.h>
69 #include <net/page_pool/helpers.h>
70 #include <net/pkt_cls.h>
71
72 #include "rtase.h"
73
74 #define RTK_OPTS1_DEBUG_VALUE 0x0BADBEEF
75 #define RTK_MAGIC_NUMBER 0x0BADBADBADBADBAD
76
77 static const struct pci_device_id rtase_pci_tbl[] = {
78 {PCI_VDEVICE(REALTEK, 0x906A)},
79 {}
80 };
81
82 MODULE_DEVICE_TABLE(pci, rtase_pci_tbl);
83
84 MODULE_AUTHOR("Realtek ARD Software Team");
85 MODULE_DESCRIPTION("Network Driver for the PCIe interface of Realtek Automotive Ethernet Switch");
86 MODULE_LICENSE("Dual BSD/GPL");
87
88 struct rtase_counters {
89 __le64 tx_packets;
90 __le64 rx_packets;
91 __le64 tx_errors;
92 __le32 rx_errors;
93 __le16 rx_missed;
94 __le16 align_errors;
95 __le32 tx_one_collision;
96 __le32 tx_multi_collision;
97 __le64 rx_unicast;
98 __le64 rx_broadcast;
99 __le32 rx_multicast;
100 __le16 tx_aborted;
101 __le16 tx_underrun;
102 } __packed;
103
rtase_w8(const struct rtase_private * tp,u16 reg,u8 val8)104 static void rtase_w8(const struct rtase_private *tp, u16 reg, u8 val8)
105 {
106 writeb(val8, tp->mmio_addr + reg);
107 }
108
rtase_w16(const struct rtase_private * tp,u16 reg,u16 val16)109 static void rtase_w16(const struct rtase_private *tp, u16 reg, u16 val16)
110 {
111 writew(val16, tp->mmio_addr + reg);
112 }
113
rtase_w32(const struct rtase_private * tp,u16 reg,u32 val32)114 static void rtase_w32(const struct rtase_private *tp, u16 reg, u32 val32)
115 {
116 writel(val32, tp->mmio_addr + reg);
117 }
118
rtase_r8(const struct rtase_private * tp,u16 reg)119 static u8 rtase_r8(const struct rtase_private *tp, u16 reg)
120 {
121 return readb(tp->mmio_addr + reg);
122 }
123
rtase_r16(const struct rtase_private * tp,u16 reg)124 static u16 rtase_r16(const struct rtase_private *tp, u16 reg)
125 {
126 return readw(tp->mmio_addr + reg);
127 }
128
rtase_r32(const struct rtase_private * tp,u16 reg)129 static u32 rtase_r32(const struct rtase_private *tp, u16 reg)
130 {
131 return readl(tp->mmio_addr + reg);
132 }
133
rtase_free_desc(struct rtase_private * tp)134 static void rtase_free_desc(struct rtase_private *tp)
135 {
136 struct pci_dev *pdev = tp->pdev;
137 u32 i;
138
139 for (i = 0; i < tp->func_tx_queue_num; i++) {
140 if (!tp->tx_ring[i].desc)
141 continue;
142
143 dma_free_coherent(&pdev->dev, RTASE_TX_RING_DESC_SIZE,
144 tp->tx_ring[i].desc,
145 tp->tx_ring[i].phy_addr);
146 tp->tx_ring[i].desc = NULL;
147 }
148
149 for (i = 0; i < tp->func_rx_queue_num; i++) {
150 if (!tp->rx_ring[i].desc)
151 continue;
152
153 dma_free_coherent(&pdev->dev, RTASE_RX_RING_DESC_SIZE,
154 tp->rx_ring[i].desc,
155 tp->rx_ring[i].phy_addr);
156 tp->rx_ring[i].desc = NULL;
157 }
158 }
159
rtase_alloc_desc(struct rtase_private * tp)160 static int rtase_alloc_desc(struct rtase_private *tp)
161 {
162 struct pci_dev *pdev = tp->pdev;
163 u32 i;
164
165 /* rx and tx descriptors needs 256 bytes alignment.
166 * dma_alloc_coherent provides more.
167 */
168 for (i = 0; i < tp->func_tx_queue_num; i++) {
169 tp->tx_ring[i].desc =
170 dma_alloc_coherent(&pdev->dev,
171 RTASE_TX_RING_DESC_SIZE,
172 &tp->tx_ring[i].phy_addr,
173 GFP_KERNEL);
174 if (!tp->tx_ring[i].desc)
175 goto err_out;
176 }
177
178 for (i = 0; i < tp->func_rx_queue_num; i++) {
179 tp->rx_ring[i].desc =
180 dma_alloc_coherent(&pdev->dev,
181 RTASE_RX_RING_DESC_SIZE,
182 &tp->rx_ring[i].phy_addr,
183 GFP_KERNEL);
184 if (!tp->rx_ring[i].desc)
185 goto err_out;
186 }
187
188 return 0;
189
190 err_out:
191 rtase_free_desc(tp);
192 return -ENOMEM;
193 }
194
rtase_unmap_tx_skb(struct pci_dev * pdev,u32 len,struct rtase_tx_desc * desc)195 static void rtase_unmap_tx_skb(struct pci_dev *pdev, u32 len,
196 struct rtase_tx_desc *desc)
197 {
198 dma_unmap_single(&pdev->dev, le64_to_cpu(desc->addr), len,
199 DMA_TO_DEVICE);
200 desc->opts1 = cpu_to_le32(RTK_OPTS1_DEBUG_VALUE);
201 desc->opts2 = 0x00;
202 desc->addr = cpu_to_le64(RTK_MAGIC_NUMBER);
203 }
204
rtase_tx_clear_range(struct rtase_ring * ring,u32 start,u32 n)205 static void rtase_tx_clear_range(struct rtase_ring *ring, u32 start, u32 n)
206 {
207 struct rtase_tx_desc *desc_base = ring->desc;
208 struct rtase_private *tp = ring->ivec->tp;
209 u32 i;
210
211 for (i = 0; i < n; i++) {
212 u32 entry = (start + i) % RTASE_NUM_DESC;
213 struct rtase_tx_desc *desc = desc_base + entry;
214 u32 len = ring->mis.len[entry];
215 struct sk_buff *skb;
216
217 if (len == 0)
218 continue;
219
220 rtase_unmap_tx_skb(tp->pdev, len, desc);
221 ring->mis.len[entry] = 0;
222 skb = ring->skbuff[entry];
223 if (!skb)
224 continue;
225
226 tp->stats.tx_dropped++;
227 dev_kfree_skb_any(skb);
228 ring->skbuff[entry] = NULL;
229 }
230 }
231
rtase_tx_clear(struct rtase_private * tp)232 static void rtase_tx_clear(struct rtase_private *tp)
233 {
234 struct rtase_ring *ring;
235 u16 i;
236
237 for (i = 0; i < tp->func_tx_queue_num; i++) {
238 ring = &tp->tx_ring[i];
239 rtase_tx_clear_range(ring, ring->dirty_idx, RTASE_NUM_DESC);
240 ring->cur_idx = 0;
241 ring->dirty_idx = 0;
242
243 netdev_tx_reset_subqueue(tp->dev, i);
244 }
245 }
246
rtase_mark_to_asic(union rtase_rx_desc * desc,u32 rx_buf_sz)247 static void rtase_mark_to_asic(union rtase_rx_desc *desc, u32 rx_buf_sz)
248 {
249 u32 eor = le32_to_cpu(desc->desc_cmd.opts1) & RTASE_RING_END;
250
251 desc->desc_status.opts2 = 0;
252 /* force memory writes to complete before releasing descriptor */
253 dma_wmb();
254 WRITE_ONCE(desc->desc_cmd.opts1,
255 cpu_to_le32(RTASE_DESC_OWN | eor | rx_buf_sz));
256 }
257
rtase_tx_avail(struct rtase_ring * ring)258 static u32 rtase_tx_avail(struct rtase_ring *ring)
259 {
260 return READ_ONCE(ring->dirty_idx) + RTASE_NUM_DESC -
261 READ_ONCE(ring->cur_idx);
262 }
263
tx_handler(struct rtase_ring * ring,int budget)264 static int tx_handler(struct rtase_ring *ring, int budget)
265 {
266 const struct rtase_private *tp = ring->ivec->tp;
267 struct net_device *dev = tp->dev;
268 u32 dirty_tx, tx_left;
269 u32 bytes_compl = 0;
270 u32 pkts_compl = 0;
271 int workdone = 0;
272
273 dirty_tx = ring->dirty_idx;
274 tx_left = READ_ONCE(ring->cur_idx) - dirty_tx;
275
276 while (tx_left > 0) {
277 u32 entry = dirty_tx % RTASE_NUM_DESC;
278 struct rtase_tx_desc *desc = ring->desc +
279 sizeof(struct rtase_tx_desc) * entry;
280 u32 status;
281
282 status = le32_to_cpu(desc->opts1);
283
284 if (status & RTASE_DESC_OWN)
285 break;
286
287 rtase_unmap_tx_skb(tp->pdev, ring->mis.len[entry], desc);
288 ring->mis.len[entry] = 0;
289 if (ring->skbuff[entry]) {
290 pkts_compl++;
291 bytes_compl += ring->skbuff[entry]->len;
292 napi_consume_skb(ring->skbuff[entry], budget);
293 ring->skbuff[entry] = NULL;
294 }
295
296 dirty_tx++;
297 tx_left--;
298 workdone++;
299
300 if (workdone == RTASE_TX_BUDGET_DEFAULT)
301 break;
302 }
303
304 if (ring->dirty_idx != dirty_tx) {
305 dev_sw_netstats_tx_add(dev, pkts_compl, bytes_compl);
306 WRITE_ONCE(ring->dirty_idx, dirty_tx);
307
308 netif_subqueue_completed_wake(dev, ring->index, pkts_compl,
309 bytes_compl,
310 rtase_tx_avail(ring),
311 RTASE_TX_START_THRS);
312
313 if (ring->cur_idx != dirty_tx)
314 rtase_w8(tp, RTASE_TPPOLL, BIT(ring->index));
315 }
316
317 return 0;
318 }
319
rtase_tx_desc_init(struct rtase_private * tp,u16 idx)320 static void rtase_tx_desc_init(struct rtase_private *tp, u16 idx)
321 {
322 struct rtase_ring *ring = &tp->tx_ring[idx];
323 struct rtase_tx_desc *desc;
324 u32 i;
325
326 memset(ring->desc, 0x0, RTASE_TX_RING_DESC_SIZE);
327 memset(ring->skbuff, 0x0, sizeof(ring->skbuff));
328 ring->cur_idx = 0;
329 ring->dirty_idx = 0;
330 ring->index = idx;
331 ring->type = NETDEV_QUEUE_TYPE_TX;
332 ring->alloc_fail = 0;
333
334 for (i = 0; i < RTASE_NUM_DESC; i++) {
335 ring->mis.len[i] = 0;
336 if ((RTASE_NUM_DESC - 1) == i) {
337 desc = ring->desc + sizeof(struct rtase_tx_desc) * i;
338 desc->opts1 = cpu_to_le32(RTASE_RING_END);
339 }
340 }
341
342 ring->ring_handler = tx_handler;
343 if (idx < 4) {
344 ring->ivec = &tp->int_vector[idx];
345 list_add_tail(&ring->ring_entry,
346 &tp->int_vector[idx].ring_list);
347 } else {
348 ring->ivec = &tp->int_vector[0];
349 list_add_tail(&ring->ring_entry, &tp->int_vector[0].ring_list);
350 }
351
352 netif_queue_set_napi(tp->dev, ring->index,
353 ring->type, &ring->ivec->napi);
354 }
355
rtase_map_to_asic(union rtase_rx_desc * desc,dma_addr_t mapping,u32 rx_buf_sz)356 static void rtase_map_to_asic(union rtase_rx_desc *desc, dma_addr_t mapping,
357 u32 rx_buf_sz)
358 {
359 desc->desc_cmd.addr = cpu_to_le64(mapping);
360
361 rtase_mark_to_asic(desc, rx_buf_sz);
362 }
363
rtase_make_unusable_by_asic(union rtase_rx_desc * desc)364 static void rtase_make_unusable_by_asic(union rtase_rx_desc *desc)
365 {
366 desc->desc_cmd.addr = cpu_to_le64(RTK_MAGIC_NUMBER);
367 desc->desc_cmd.opts1 &= ~cpu_to_le32(RTASE_DESC_OWN | RSVD_MASK);
368 }
369
rtase_alloc_rx_data_buf(struct rtase_ring * ring,void ** p_data_buf,union rtase_rx_desc * desc,dma_addr_t * rx_phy_addr)370 static int rtase_alloc_rx_data_buf(struct rtase_ring *ring,
371 void **p_data_buf,
372 union rtase_rx_desc *desc,
373 dma_addr_t *rx_phy_addr)
374 {
375 struct rtase_int_vector *ivec = ring->ivec;
376 const struct rtase_private *tp = ivec->tp;
377 dma_addr_t mapping;
378 struct page *page;
379
380 page = page_pool_dev_alloc_pages(tp->page_pool);
381 if (!page) {
382 ring->alloc_fail++;
383 goto err_out;
384 }
385
386 *p_data_buf = page_address(page);
387 mapping = page_pool_get_dma_addr(page);
388 *rx_phy_addr = mapping;
389 rtase_map_to_asic(desc, mapping, tp->rx_buf_sz);
390
391 return 0;
392
393 err_out:
394 rtase_make_unusable_by_asic(desc);
395
396 return -ENOMEM;
397 }
398
rtase_rx_ring_fill(struct rtase_ring * ring,u32 ring_start,u32 ring_end)399 static u32 rtase_rx_ring_fill(struct rtase_ring *ring, u32 ring_start,
400 u32 ring_end)
401 {
402 union rtase_rx_desc *desc_base = ring->desc;
403 u32 cur;
404
405 for (cur = ring_start; ring_end - cur > 0; cur++) {
406 u32 i = cur % RTASE_NUM_DESC;
407 union rtase_rx_desc *desc = desc_base + i;
408 int ret;
409
410 if (ring->data_buf[i])
411 continue;
412
413 ret = rtase_alloc_rx_data_buf(ring, &ring->data_buf[i], desc,
414 &ring->mis.data_phy_addr[i]);
415 if (ret)
416 break;
417 }
418
419 return cur - ring_start;
420 }
421
rtase_mark_as_last_descriptor(union rtase_rx_desc * desc)422 static void rtase_mark_as_last_descriptor(union rtase_rx_desc *desc)
423 {
424 desc->desc_cmd.opts1 |= cpu_to_le32(RTASE_RING_END);
425 }
426
rtase_rx_ring_clear(struct page_pool * page_pool,struct rtase_ring * ring)427 static void rtase_rx_ring_clear(struct page_pool *page_pool,
428 struct rtase_ring *ring)
429 {
430 union rtase_rx_desc *desc;
431 struct page *page;
432 u32 i;
433
434 for (i = 0; i < RTASE_NUM_DESC; i++) {
435 desc = ring->desc + sizeof(union rtase_rx_desc) * i;
436 page = virt_to_head_page(ring->data_buf[i]);
437
438 if (ring->data_buf[i])
439 page_pool_put_full_page(page_pool, page, true);
440
441 rtase_make_unusable_by_asic(desc);
442 }
443 }
444
rtase_fragmented_frame(u32 status)445 static int rtase_fragmented_frame(u32 status)
446 {
447 return (status & (RTASE_RX_FIRST_FRAG | RTASE_RX_LAST_FRAG)) !=
448 (RTASE_RX_FIRST_FRAG | RTASE_RX_LAST_FRAG);
449 }
450
rtase_rx_csum(const struct rtase_private * tp,struct sk_buff * skb,const union rtase_rx_desc * desc)451 static void rtase_rx_csum(const struct rtase_private *tp, struct sk_buff *skb,
452 const union rtase_rx_desc *desc)
453 {
454 u32 opts2 = le32_to_cpu(desc->desc_status.opts2);
455
456 /* rx csum offload */
457 if (((opts2 & RTASE_RX_V4F) && !(opts2 & RTASE_RX_IPF)) ||
458 (opts2 & RTASE_RX_V6F)) {
459 if (((opts2 & RTASE_RX_TCPT) && !(opts2 & RTASE_RX_TCPF)) ||
460 ((opts2 & RTASE_RX_UDPT) && !(opts2 & RTASE_RX_UDPF)))
461 skb->ip_summed = CHECKSUM_UNNECESSARY;
462 else
463 skb->ip_summed = CHECKSUM_NONE;
464 } else {
465 skb->ip_summed = CHECKSUM_NONE;
466 }
467 }
468
rtase_rx_vlan_skb(union rtase_rx_desc * desc,struct sk_buff * skb)469 static void rtase_rx_vlan_skb(union rtase_rx_desc *desc, struct sk_buff *skb)
470 {
471 u32 opts2 = le32_to_cpu(desc->desc_status.opts2);
472
473 if (!(opts2 & RTASE_RX_VLAN_TAG))
474 return;
475
476 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
477 swab16(opts2 & RTASE_VLAN_TAG_MASK));
478 }
479
rtase_rx_skb(const struct rtase_ring * ring,struct sk_buff * skb)480 static void rtase_rx_skb(const struct rtase_ring *ring, struct sk_buff *skb)
481 {
482 struct rtase_int_vector *ivec = ring->ivec;
483
484 napi_gro_receive(&ivec->napi, skb);
485 }
486
rx_handler(struct rtase_ring * ring,int budget)487 static int rx_handler(struct rtase_ring *ring, int budget)
488 {
489 union rtase_rx_desc *desc_base = ring->desc;
490 u32 pkt_size, cur_rx, delta, entry, status;
491 struct rtase_private *tp = ring->ivec->tp;
492 struct net_device *dev = tp->dev;
493 union rtase_rx_desc *desc;
494 struct sk_buff *skb;
495 int workdone = 0;
496
497 cur_rx = ring->cur_idx;
498 entry = cur_rx % RTASE_NUM_DESC;
499 desc = &desc_base[entry];
500
501 while (workdone < budget) {
502 status = le32_to_cpu(desc->desc_status.opts1);
503
504 if (status & RTASE_DESC_OWN)
505 break;
506
507 /* This barrier is needed to keep us from reading
508 * any other fields out of the rx descriptor until
509 * we know the status of RTASE_DESC_OWN
510 */
511 dma_rmb();
512
513 if (unlikely(status & RTASE_RX_RES)) {
514 if (net_ratelimit())
515 netdev_warn(dev, "Rx ERROR. status = %08x\n",
516 status);
517
518 tp->stats.rx_errors++;
519
520 if (status & (RTASE_RX_RWT | RTASE_RX_RUNT))
521 tp->stats.rx_length_errors++;
522
523 if (status & RTASE_RX_CRC)
524 tp->stats.rx_crc_errors++;
525
526 if (dev->features & NETIF_F_RXALL)
527 goto process_pkt;
528
529 rtase_mark_to_asic(desc, tp->rx_buf_sz);
530 goto skip_process_pkt;
531 }
532
533 process_pkt:
534 pkt_size = status & RTASE_RX_PKT_SIZE_MASK;
535 if (likely(!(dev->features & NETIF_F_RXFCS)))
536 pkt_size -= ETH_FCS_LEN;
537
538 /* The driver does not support incoming fragmented frames.
539 * They are seen as a symptom of over-mtu sized frames.
540 */
541 if (unlikely(rtase_fragmented_frame(status))) {
542 tp->stats.rx_dropped++;
543 tp->stats.rx_length_errors++;
544 rtase_mark_to_asic(desc, tp->rx_buf_sz);
545 goto skip_process_pkt;
546 }
547
548 dma_sync_single_for_cpu(&tp->pdev->dev,
549 ring->mis.data_phy_addr[entry],
550 tp->rx_buf_sz, DMA_FROM_DEVICE);
551
552 skb = build_skb(ring->data_buf[entry], PAGE_SIZE);
553 if (!skb) {
554 tp->stats.rx_dropped++;
555 rtase_mark_to_asic(desc, tp->rx_buf_sz);
556 goto skip_process_pkt;
557 }
558 ring->data_buf[entry] = NULL;
559
560 if (dev->features & NETIF_F_RXCSUM)
561 rtase_rx_csum(tp, skb, desc);
562
563 skb_put(skb, pkt_size);
564 skb_mark_for_recycle(skb);
565 skb->protocol = eth_type_trans(skb, dev);
566
567 if (skb->pkt_type == PACKET_MULTICAST)
568 tp->stats.multicast++;
569
570 rtase_rx_vlan_skb(desc, skb);
571 rtase_rx_skb(ring, skb);
572
573 dev_sw_netstats_rx_add(dev, pkt_size);
574
575 skip_process_pkt:
576 workdone++;
577 cur_rx++;
578 entry = cur_rx % RTASE_NUM_DESC;
579 desc = ring->desc + sizeof(union rtase_rx_desc) * entry;
580 }
581
582 ring->cur_idx = cur_rx;
583 delta = rtase_rx_ring_fill(ring, ring->dirty_idx, ring->cur_idx);
584 ring->dirty_idx += delta;
585
586 return workdone;
587 }
588
rtase_rx_desc_init(struct rtase_private * tp,u16 idx)589 static void rtase_rx_desc_init(struct rtase_private *tp, u16 idx)
590 {
591 struct rtase_ring *ring = &tp->rx_ring[idx];
592 u16 i;
593
594 memset(ring->desc, 0x0, RTASE_RX_RING_DESC_SIZE);
595 memset(ring->data_buf, 0x0, sizeof(ring->data_buf));
596 ring->cur_idx = 0;
597 ring->dirty_idx = 0;
598 ring->index = idx;
599 ring->type = NETDEV_QUEUE_TYPE_RX;
600 ring->alloc_fail = 0;
601
602 for (i = 0; i < RTASE_NUM_DESC; i++)
603 ring->mis.data_phy_addr[i] = 0;
604
605 ring->ring_handler = rx_handler;
606 ring->ivec = &tp->int_vector[idx];
607 netif_queue_set_napi(tp->dev, ring->index,
608 ring->type, &ring->ivec->napi);
609 list_add_tail(&ring->ring_entry, &tp->int_vector[idx].ring_list);
610 }
611
rtase_rx_clear(struct rtase_private * tp)612 static void rtase_rx_clear(struct rtase_private *tp)
613 {
614 u32 i;
615
616 for (i = 0; i < tp->func_rx_queue_num; i++)
617 rtase_rx_ring_clear(tp->page_pool, &tp->rx_ring[i]);
618
619 page_pool_destroy(tp->page_pool);
620 tp->page_pool = NULL;
621 }
622
rtase_init_ring(const struct net_device * dev)623 static int rtase_init_ring(const struct net_device *dev)
624 {
625 struct rtase_private *tp = netdev_priv(dev);
626 struct page_pool_params pp_params = { 0 };
627 struct page_pool *page_pool;
628 u32 num;
629 u16 i;
630
631 pp_params.flags = PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV;
632 pp_params.order = 0;
633 pp_params.pool_size = RTASE_NUM_DESC * tp->func_rx_queue_num;
634 pp_params.nid = dev_to_node(&tp->pdev->dev);
635 pp_params.dev = &tp->pdev->dev;
636 pp_params.dma_dir = DMA_FROM_DEVICE;
637 pp_params.max_len = PAGE_SIZE;
638 pp_params.offset = 0;
639
640 page_pool = page_pool_create(&pp_params);
641 if (IS_ERR(page_pool)) {
642 netdev_err(tp->dev, "failed to create page pool\n");
643 return -ENOMEM;
644 }
645
646 tp->page_pool = page_pool;
647
648 for (i = 0; i < tp->func_tx_queue_num; i++)
649 rtase_tx_desc_init(tp, i);
650
651 for (i = 0; i < tp->func_rx_queue_num; i++) {
652 rtase_rx_desc_init(tp, i);
653
654 num = rtase_rx_ring_fill(&tp->rx_ring[i], 0, RTASE_NUM_DESC);
655 if (num != RTASE_NUM_DESC)
656 goto err_out;
657
658 rtase_mark_as_last_descriptor(tp->rx_ring[i].desc +
659 sizeof(union rtase_rx_desc) *
660 (RTASE_NUM_DESC - 1));
661 }
662
663 return 0;
664
665 err_out:
666 rtase_rx_clear(tp);
667 return -ENOMEM;
668 }
669
rtase_interrupt_mitigation(const struct rtase_private * tp)670 static void rtase_interrupt_mitigation(const struct rtase_private *tp)
671 {
672 u32 i;
673
674 for (i = 0; i < tp->func_tx_queue_num; i++)
675 rtase_w16(tp, RTASE_INT_MITI_TX + i * 2, tp->tx_int_mit);
676
677 for (i = 0; i < tp->func_rx_queue_num; i++)
678 rtase_w16(tp, RTASE_INT_MITI_RX + i * 2, tp->rx_int_mit);
679 }
680
rtase_tally_counter_addr_fill(const struct rtase_private * tp)681 static void rtase_tally_counter_addr_fill(const struct rtase_private *tp)
682 {
683 rtase_w32(tp, RTASE_DTCCR4, upper_32_bits(tp->tally_paddr));
684 rtase_w32(tp, RTASE_DTCCR0, lower_32_bits(tp->tally_paddr));
685 }
686
rtase_tally_counter_clear(const struct rtase_private * tp)687 static void rtase_tally_counter_clear(const struct rtase_private *tp)
688 {
689 u32 cmd = lower_32_bits(tp->tally_paddr);
690
691 rtase_w32(tp, RTASE_DTCCR4, upper_32_bits(tp->tally_paddr));
692 rtase_w32(tp, RTASE_DTCCR0, cmd | RTASE_COUNTER_RESET);
693 }
694
rtase_desc_addr_fill(const struct rtase_private * tp)695 static void rtase_desc_addr_fill(const struct rtase_private *tp)
696 {
697 const struct rtase_ring *ring;
698 u16 i, cmd, val;
699 int err;
700
701 for (i = 0; i < tp->func_tx_queue_num; i++) {
702 ring = &tp->tx_ring[i];
703
704 rtase_w32(tp, RTASE_TX_DESC_ADDR0,
705 lower_32_bits(ring->phy_addr));
706 rtase_w32(tp, RTASE_TX_DESC_ADDR4,
707 upper_32_bits(ring->phy_addr));
708
709 cmd = i | RTASE_TX_DESC_CMD_WE | RTASE_TX_DESC_CMD_CS;
710 rtase_w16(tp, RTASE_TX_DESC_COMMAND, cmd);
711
712 err = read_poll_timeout(rtase_r16, val,
713 !(val & RTASE_TX_DESC_CMD_CS), 10,
714 1000, false, tp,
715 RTASE_TX_DESC_COMMAND);
716
717 if (err == -ETIMEDOUT)
718 netdev_err(tp->dev,
719 "error occurred in fill tx descriptor\n");
720 }
721
722 for (i = 0; i < tp->func_rx_queue_num; i++) {
723 ring = &tp->rx_ring[i];
724
725 if (i == 0) {
726 rtase_w32(tp, RTASE_Q0_RX_DESC_ADDR0,
727 lower_32_bits(ring->phy_addr));
728 rtase_w32(tp, RTASE_Q0_RX_DESC_ADDR4,
729 upper_32_bits(ring->phy_addr));
730 } else {
731 rtase_w32(tp, (RTASE_Q1_RX_DESC_ADDR0 + ((i - 1) * 8)),
732 lower_32_bits(ring->phy_addr));
733 rtase_w32(tp, (RTASE_Q1_RX_DESC_ADDR4 + ((i - 1) * 8)),
734 upper_32_bits(ring->phy_addr));
735 }
736 }
737 }
738
rtase_hw_set_features(const struct net_device * dev,netdev_features_t features)739 static void rtase_hw_set_features(const struct net_device *dev,
740 netdev_features_t features)
741 {
742 const struct rtase_private *tp = netdev_priv(dev);
743 u16 rx_config, val;
744
745 rx_config = rtase_r16(tp, RTASE_RX_CONFIG_0);
746 if (features & NETIF_F_RXALL)
747 rx_config |= (RTASE_ACCEPT_ERR | RTASE_ACCEPT_RUNT);
748 else
749 rx_config &= ~(RTASE_ACCEPT_ERR | RTASE_ACCEPT_RUNT);
750
751 rtase_w16(tp, RTASE_RX_CONFIG_0, rx_config);
752
753 val = rtase_r16(tp, RTASE_CPLUS_CMD);
754 if (features & NETIF_F_RXCSUM)
755 rtase_w16(tp, RTASE_CPLUS_CMD, val | RTASE_RX_CHKSUM);
756 else
757 rtase_w16(tp, RTASE_CPLUS_CMD, val & ~RTASE_RX_CHKSUM);
758
759 rx_config = rtase_r16(tp, RTASE_RX_CONFIG_1);
760 if (dev->features & NETIF_F_HW_VLAN_CTAG_RX)
761 rx_config |= (RTASE_INNER_VLAN_DETAG_EN |
762 RTASE_OUTER_VLAN_DETAG_EN);
763 else
764 rx_config &= ~(RTASE_INNER_VLAN_DETAG_EN |
765 RTASE_OUTER_VLAN_DETAG_EN);
766
767 rtase_w16(tp, RTASE_RX_CONFIG_1, rx_config);
768 }
769
rtase_hw_set_rx_packet_filter(struct net_device * dev)770 static void rtase_hw_set_rx_packet_filter(struct net_device *dev)
771 {
772 u32 mc_filter[2] = { 0xFFFFFFFF, 0xFFFFFFFF };
773 struct rtase_private *tp = netdev_priv(dev);
774 u16 rx_mode;
775
776 rx_mode = rtase_r16(tp, RTASE_RX_CONFIG_0) & ~RTASE_ACCEPT_MASK;
777 rx_mode |= RTASE_ACCEPT_BROADCAST | RTASE_ACCEPT_MYPHYS;
778
779 if (dev->flags & IFF_PROMISC) {
780 rx_mode |= RTASE_ACCEPT_MULTICAST | RTASE_ACCEPT_ALLPHYS;
781 } else if (dev->flags & IFF_ALLMULTI) {
782 rx_mode |= RTASE_ACCEPT_MULTICAST;
783 } else {
784 struct netdev_hw_addr *hw_addr;
785
786 mc_filter[0] = 0;
787 mc_filter[1] = 0;
788
789 netdev_for_each_mc_addr(hw_addr, dev) {
790 u32 bit_nr = eth_hw_addr_crc(hw_addr);
791 u32 idx = u32_get_bits(bit_nr, BIT(31));
792 u32 bit = u32_get_bits(bit_nr,
793 RTASE_MULTICAST_FILTER_MASK);
794
795 mc_filter[idx] |= BIT(bit);
796 rx_mode |= RTASE_ACCEPT_MULTICAST;
797 }
798 }
799
800 if (dev->features & NETIF_F_RXALL)
801 rx_mode |= RTASE_ACCEPT_ERR | RTASE_ACCEPT_RUNT;
802
803 rtase_w32(tp, RTASE_MAR0, swab32(mc_filter[1]));
804 rtase_w32(tp, RTASE_MAR1, swab32(mc_filter[0]));
805 rtase_w16(tp, RTASE_RX_CONFIG_0, rx_mode);
806 }
807
rtase_irq_dis_and_clear(const struct rtase_private * tp)808 static void rtase_irq_dis_and_clear(const struct rtase_private *tp)
809 {
810 const struct rtase_int_vector *ivec = &tp->int_vector[0];
811 u32 val1;
812 u16 val2;
813 u8 i;
814
815 rtase_w32(tp, ivec->imr_addr, 0);
816 val1 = rtase_r32(tp, ivec->isr_addr);
817 rtase_w32(tp, ivec->isr_addr, val1);
818
819 for (i = 1; i < tp->int_nums; i++) {
820 ivec = &tp->int_vector[i];
821 rtase_w16(tp, ivec->imr_addr, 0);
822 val2 = rtase_r16(tp, ivec->isr_addr);
823 rtase_w16(tp, ivec->isr_addr, val2);
824 }
825 }
826
rtase_poll_timeout(const struct rtase_private * tp,u32 cond,u32 sleep_us,u64 timeout_us,u16 reg)827 static void rtase_poll_timeout(const struct rtase_private *tp, u32 cond,
828 u32 sleep_us, u64 timeout_us, u16 reg)
829 {
830 int err;
831 u8 val;
832
833 err = read_poll_timeout(rtase_r8, val, val & cond, sleep_us,
834 timeout_us, false, tp, reg);
835
836 if (err == -ETIMEDOUT)
837 netdev_err(tp->dev, "poll reg 0x00%x timeout\n", reg);
838 }
839
rtase_nic_reset(const struct net_device * dev)840 static void rtase_nic_reset(const struct net_device *dev)
841 {
842 const struct rtase_private *tp = netdev_priv(dev);
843 u16 rx_config;
844 u8 val;
845
846 rx_config = rtase_r16(tp, RTASE_RX_CONFIG_0);
847 rtase_w16(tp, RTASE_RX_CONFIG_0, rx_config & ~RTASE_ACCEPT_MASK);
848
849 val = rtase_r8(tp, RTASE_MISC);
850 rtase_w8(tp, RTASE_MISC, val | RTASE_RX_DV_GATE_EN);
851
852 val = rtase_r8(tp, RTASE_CHIP_CMD);
853 rtase_w8(tp, RTASE_CHIP_CMD, val | RTASE_STOP_REQ);
854 mdelay(2);
855
856 rtase_poll_timeout(tp, RTASE_STOP_REQ_DONE, 100, 150000,
857 RTASE_CHIP_CMD);
858
859 rtase_poll_timeout(tp, RTASE_TX_FIFO_EMPTY, 100, 100000,
860 RTASE_FIFOR);
861
862 rtase_poll_timeout(tp, RTASE_RX_FIFO_EMPTY, 100, 100000,
863 RTASE_FIFOR);
864
865 val = rtase_r8(tp, RTASE_CHIP_CMD);
866 rtase_w8(tp, RTASE_CHIP_CMD, val & ~(RTASE_TE | RTASE_RE));
867 val = rtase_r8(tp, RTASE_CHIP_CMD);
868 rtase_w8(tp, RTASE_CHIP_CMD, val & ~RTASE_STOP_REQ);
869
870 rtase_w16(tp, RTASE_RX_CONFIG_0, rx_config);
871 }
872
rtase_hw_reset(const struct net_device * dev)873 static void rtase_hw_reset(const struct net_device *dev)
874 {
875 const struct rtase_private *tp = netdev_priv(dev);
876
877 rtase_irq_dis_and_clear(tp);
878
879 rtase_nic_reset(dev);
880 }
881
rtase_set_rx_queue(const struct rtase_private * tp)882 static void rtase_set_rx_queue(const struct rtase_private *tp)
883 {
884 u16 reg_data;
885
886 reg_data = rtase_r16(tp, RTASE_FCR);
887 switch (tp->func_rx_queue_num) {
888 case 1:
889 u16p_replace_bits(®_data, 0x1, RTASE_FCR_RXQ_MASK);
890 break;
891 case 2:
892 u16p_replace_bits(®_data, 0x2, RTASE_FCR_RXQ_MASK);
893 break;
894 case 4:
895 u16p_replace_bits(®_data, 0x3, RTASE_FCR_RXQ_MASK);
896 break;
897 }
898 rtase_w16(tp, RTASE_FCR, reg_data);
899 }
900
rtase_set_tx_queue(const struct rtase_private * tp)901 static void rtase_set_tx_queue(const struct rtase_private *tp)
902 {
903 u16 reg_data;
904
905 reg_data = rtase_r16(tp, RTASE_TX_CONFIG_1);
906 switch (tp->tx_queue_ctrl) {
907 case 1:
908 u16p_replace_bits(®_data, 0x0, RTASE_TC_MODE_MASK);
909 break;
910 case 2:
911 u16p_replace_bits(®_data, 0x1, RTASE_TC_MODE_MASK);
912 break;
913 case 3:
914 case 4:
915 u16p_replace_bits(®_data, 0x2, RTASE_TC_MODE_MASK);
916 break;
917 default:
918 u16p_replace_bits(®_data, 0x3, RTASE_TC_MODE_MASK);
919 break;
920 }
921 rtase_w16(tp, RTASE_TX_CONFIG_1, reg_data);
922 }
923
rtase_hw_config(struct net_device * dev)924 static void rtase_hw_config(struct net_device *dev)
925 {
926 const struct rtase_private *tp = netdev_priv(dev);
927 u32 reg_data32;
928 u16 reg_data16;
929
930 rtase_hw_reset(dev);
931
932 /* set rx dma burst */
933 reg_data16 = rtase_r16(tp, RTASE_RX_CONFIG_0);
934 reg_data16 &= ~(RTASE_RX_SINGLE_TAG | RTASE_RX_SINGLE_FETCH);
935 u16p_replace_bits(®_data16, RTASE_RX_DMA_BURST_256,
936 RTASE_RX_MX_DMA_MASK);
937 rtase_w16(tp, RTASE_RX_CONFIG_0, reg_data16);
938
939 /* new rx descritpor */
940 reg_data16 = rtase_r16(tp, RTASE_RX_CONFIG_1);
941 reg_data16 |= RTASE_RX_NEW_DESC_FORMAT_EN | RTASE_PCIE_NEW_FLOW;
942 u16p_replace_bits(®_data16, 0xF, RTASE_RX_MAX_FETCH_DESC_MASK);
943 rtase_w16(tp, RTASE_RX_CONFIG_1, reg_data16);
944
945 rtase_set_rx_queue(tp);
946
947 rtase_interrupt_mitigation(tp);
948
949 /* set tx dma burst size and interframe gap time */
950 reg_data32 = rtase_r32(tp, RTASE_TX_CONFIG_0);
951 u32p_replace_bits(®_data32, RTASE_TX_DMA_BURST_UNLIMITED,
952 RTASE_TX_DMA_MASK);
953 u32p_replace_bits(®_data32, RTASE_INTERFRAMEGAP,
954 RTASE_TX_INTER_FRAME_GAP_MASK);
955 rtase_w32(tp, RTASE_TX_CONFIG_0, reg_data32);
956
957 /* new tx descriptor */
958 reg_data16 = rtase_r16(tp, RTASE_TFUN_CTRL);
959 rtase_w16(tp, RTASE_TFUN_CTRL, reg_data16 |
960 RTASE_TX_NEW_DESC_FORMAT_EN);
961
962 /* tx fetch desc number */
963 rtase_w8(tp, RTASE_TDFNR, 0x10);
964
965 /* tag num select */
966 reg_data16 = rtase_r16(tp, RTASE_MTPS);
967 u16p_replace_bits(®_data16, 0x4, RTASE_TAG_NUM_SEL_MASK);
968 rtase_w16(tp, RTASE_MTPS, reg_data16);
969
970 rtase_set_tx_queue(tp);
971
972 rtase_w16(tp, RTASE_TOKSEL, 0x5555);
973
974 rtase_tally_counter_addr_fill(tp);
975 rtase_desc_addr_fill(tp);
976 rtase_hw_set_features(dev, dev->features);
977
978 /* enable flow control */
979 reg_data16 = rtase_r16(tp, RTASE_CPLUS_CMD);
980 reg_data16 |= (RTASE_FORCE_TXFLOW_EN | RTASE_FORCE_RXFLOW_EN);
981 rtase_w16(tp, RTASE_CPLUS_CMD, reg_data16);
982 /* set near fifo threshold - rx missed issue. */
983 rtase_w16(tp, RTASE_RFIFONFULL, 0x190);
984
985 rtase_w16(tp, RTASE_RMS, tp->rx_buf_sz);
986
987 rtase_hw_set_rx_packet_filter(dev);
988 }
989
rtase_nic_enable(const struct net_device * dev)990 static void rtase_nic_enable(const struct net_device *dev)
991 {
992 const struct rtase_private *tp = netdev_priv(dev);
993 u16 rcr = rtase_r16(tp, RTASE_RX_CONFIG_1);
994 u8 val;
995
996 rtase_w16(tp, RTASE_RX_CONFIG_1, rcr & ~RTASE_PCIE_RELOAD_EN);
997 rtase_w16(tp, RTASE_RX_CONFIG_1, rcr | RTASE_PCIE_RELOAD_EN);
998
999 val = rtase_r8(tp, RTASE_CHIP_CMD);
1000 rtase_w8(tp, RTASE_CHIP_CMD, val | RTASE_TE | RTASE_RE);
1001
1002 val = rtase_r8(tp, RTASE_MISC);
1003 rtase_w8(tp, RTASE_MISC, val & ~RTASE_RX_DV_GATE_EN);
1004 }
1005
rtase_enable_hw_interrupt(const struct rtase_private * tp)1006 static void rtase_enable_hw_interrupt(const struct rtase_private *tp)
1007 {
1008 const struct rtase_int_vector *ivec = &tp->int_vector[0];
1009 u32 i;
1010
1011 rtase_w32(tp, ivec->imr_addr, ivec->imr);
1012
1013 for (i = 1; i < tp->int_nums; i++) {
1014 ivec = &tp->int_vector[i];
1015 rtase_w16(tp, ivec->imr_addr, ivec->imr);
1016 }
1017 }
1018
rtase_hw_start(const struct net_device * dev)1019 static void rtase_hw_start(const struct net_device *dev)
1020 {
1021 const struct rtase_private *tp = netdev_priv(dev);
1022
1023 rtase_nic_enable(dev);
1024 rtase_enable_hw_interrupt(tp);
1025 }
1026
1027 /* the interrupt handler does RXQ0 and TXQ0, TXQ4~7 interrutp status
1028 */
rtase_interrupt(int irq,void * dev_instance)1029 static irqreturn_t rtase_interrupt(int irq, void *dev_instance)
1030 {
1031 const struct rtase_private *tp;
1032 struct rtase_int_vector *ivec;
1033 u32 status;
1034
1035 ivec = dev_instance;
1036 tp = ivec->tp;
1037 status = rtase_r32(tp, ivec->isr_addr);
1038
1039 rtase_w32(tp, ivec->imr_addr, 0x0);
1040 rtase_w32(tp, ivec->isr_addr, status & ~RTASE_FOVW);
1041
1042 if (napi_schedule_prep(&ivec->napi))
1043 __napi_schedule(&ivec->napi);
1044
1045 return IRQ_HANDLED;
1046 }
1047
1048 /* the interrupt handler does RXQ1&TXQ1 or RXQ2&TXQ2 or RXQ3&TXQ3 interrupt
1049 * status according to interrupt vector
1050 */
rtase_q_interrupt(int irq,void * dev_instance)1051 static irqreturn_t rtase_q_interrupt(int irq, void *dev_instance)
1052 {
1053 const struct rtase_private *tp;
1054 struct rtase_int_vector *ivec;
1055 u16 status;
1056
1057 ivec = dev_instance;
1058 tp = ivec->tp;
1059 status = rtase_r16(tp, ivec->isr_addr);
1060
1061 rtase_w16(tp, ivec->imr_addr, 0x0);
1062 rtase_w16(tp, ivec->isr_addr, status);
1063
1064 if (napi_schedule_prep(&ivec->napi))
1065 __napi_schedule(&ivec->napi);
1066
1067 return IRQ_HANDLED;
1068 }
1069
rtase_poll(struct napi_struct * napi,int budget)1070 static int rtase_poll(struct napi_struct *napi, int budget)
1071 {
1072 const struct rtase_int_vector *ivec;
1073 const struct rtase_private *tp;
1074 struct rtase_ring *ring;
1075 int total_workdone = 0;
1076
1077 ivec = container_of(napi, struct rtase_int_vector, napi);
1078 tp = ivec->tp;
1079
1080 list_for_each_entry(ring, &ivec->ring_list, ring_entry)
1081 total_workdone += ring->ring_handler(ring, budget);
1082
1083 if (total_workdone >= budget)
1084 return budget;
1085
1086 if (napi_complete_done(napi, total_workdone)) {
1087 if (!ivec->index)
1088 rtase_w32(tp, ivec->imr_addr, ivec->imr);
1089 else
1090 rtase_w16(tp, ivec->imr_addr, ivec->imr);
1091 }
1092
1093 return total_workdone;
1094 }
1095
rtase_open(struct net_device * dev)1096 static int rtase_open(struct net_device *dev)
1097 {
1098 struct rtase_private *tp = netdev_priv(dev);
1099 const struct pci_dev *pdev = tp->pdev;
1100 struct rtase_int_vector *ivec;
1101 u16 i = 0, j;
1102 int ret;
1103
1104 ivec = &tp->int_vector[0];
1105 tp->rx_buf_sz = RTASE_RX_BUF_SIZE;
1106
1107 ret = rtase_alloc_desc(tp);
1108 if (ret)
1109 return ret;
1110
1111 ret = rtase_init_ring(dev);
1112 if (ret)
1113 goto err_free_all_allocated_mem;
1114
1115 rtase_hw_config(dev);
1116
1117 if (tp->sw_flag & RTASE_SWF_MSIX_ENABLED) {
1118 ret = request_irq(ivec->irq, rtase_interrupt, 0,
1119 dev->name, ivec);
1120 if (ret)
1121 goto err_free_all_allocated_irq;
1122
1123 /* request other interrupts to handle multiqueue */
1124 for (i = 1; i < tp->int_nums; i++) {
1125 ivec = &tp->int_vector[i];
1126 snprintf(ivec->name, sizeof(ivec->name), "%s_int%u",
1127 tp->dev->name, i);
1128 ret = request_irq(ivec->irq, rtase_q_interrupt, 0,
1129 ivec->name, ivec);
1130 if (ret)
1131 goto err_free_all_allocated_irq;
1132 }
1133 } else {
1134 ret = request_irq(pdev->irq, rtase_interrupt, 0, dev->name,
1135 ivec);
1136 if (ret)
1137 goto err_free_all_allocated_mem;
1138 }
1139
1140 rtase_hw_start(dev);
1141
1142 for (i = 0; i < tp->int_nums; i++) {
1143 ivec = &tp->int_vector[i];
1144 napi_enable(&ivec->napi);
1145 }
1146
1147 netif_carrier_on(dev);
1148 netif_wake_queue(dev);
1149
1150 return 0;
1151
1152 err_free_all_allocated_irq:
1153 for (j = 0; j < i; j++)
1154 free_irq(tp->int_vector[j].irq, &tp->int_vector[j]);
1155
1156 err_free_all_allocated_mem:
1157 rtase_free_desc(tp);
1158
1159 return ret;
1160 }
1161
rtase_down(struct net_device * dev)1162 static void rtase_down(struct net_device *dev)
1163 {
1164 struct rtase_private *tp = netdev_priv(dev);
1165 struct rtase_int_vector *ivec;
1166 struct rtase_ring *ring, *tmp;
1167 u32 i;
1168
1169 for (i = 0; i < tp->int_nums; i++) {
1170 ivec = &tp->int_vector[i];
1171 napi_disable(&ivec->napi);
1172 list_for_each_entry_safe(ring, tmp, &ivec->ring_list,
1173 ring_entry) {
1174 netif_queue_set_napi(tp->dev, ring->index,
1175 ring->type, NULL);
1176
1177 list_del(&ring->ring_entry);
1178 }
1179 }
1180
1181 netif_tx_disable(dev);
1182
1183 netif_carrier_off(dev);
1184
1185 rtase_hw_reset(dev);
1186
1187 rtase_tx_clear(tp);
1188
1189 rtase_rx_clear(tp);
1190 }
1191
rtase_close(struct net_device * dev)1192 static int rtase_close(struct net_device *dev)
1193 {
1194 struct rtase_private *tp = netdev_priv(dev);
1195 const struct pci_dev *pdev = tp->pdev;
1196 u32 i;
1197
1198 rtase_down(dev);
1199
1200 if (tp->sw_flag & RTASE_SWF_MSIX_ENABLED) {
1201 for (i = 0; i < tp->int_nums; i++)
1202 free_irq(tp->int_vector[i].irq, &tp->int_vector[i]);
1203
1204 } else {
1205 free_irq(pdev->irq, &tp->int_vector[0]);
1206 }
1207
1208 rtase_free_desc(tp);
1209
1210 return 0;
1211 }
1212
rtase_tx_vlan_tag(const struct rtase_private * tp,const struct sk_buff * skb)1213 static u32 rtase_tx_vlan_tag(const struct rtase_private *tp,
1214 const struct sk_buff *skb)
1215 {
1216 return (skb_vlan_tag_present(skb)) ?
1217 (RTASE_TX_VLAN_TAG | swab16(skb_vlan_tag_get(skb))) : 0x00;
1218 }
1219
rtase_tx_csum(struct sk_buff * skb,const struct net_device * dev)1220 static u32 rtase_tx_csum(struct sk_buff *skb, const struct net_device *dev)
1221 {
1222 u32 csum_cmd = 0;
1223 u8 ip_protocol;
1224
1225 switch (vlan_get_protocol(skb)) {
1226 case htons(ETH_P_IP):
1227 csum_cmd = RTASE_TX_IPCS_C;
1228 ip_protocol = ip_hdr(skb)->protocol;
1229 break;
1230
1231 case htons(ETH_P_IPV6):
1232 csum_cmd = RTASE_TX_IPV6F_C;
1233 ip_protocol = ipv6_hdr(skb)->nexthdr;
1234 break;
1235
1236 default:
1237 ip_protocol = IPPROTO_RAW;
1238 break;
1239 }
1240
1241 if (ip_protocol == IPPROTO_TCP)
1242 csum_cmd |= RTASE_TX_TCPCS_C;
1243 else if (ip_protocol == IPPROTO_UDP)
1244 csum_cmd |= RTASE_TX_UDPCS_C;
1245
1246 csum_cmd |= u32_encode_bits(skb_transport_offset(skb),
1247 RTASE_TCPHO_MASK);
1248
1249 return csum_cmd;
1250 }
1251
rtase_xmit_frags(struct rtase_ring * ring,struct sk_buff * skb,u32 opts1,u32 opts2)1252 static int rtase_xmit_frags(struct rtase_ring *ring, struct sk_buff *skb,
1253 u32 opts1, u32 opts2)
1254 {
1255 const struct skb_shared_info *info = skb_shinfo(skb);
1256 const struct rtase_private *tp = ring->ivec->tp;
1257 const u8 nr_frags = info->nr_frags;
1258 struct rtase_tx_desc *txd = NULL;
1259 u32 cur_frag, entry;
1260
1261 entry = ring->cur_idx;
1262 for (cur_frag = 0; cur_frag < nr_frags; cur_frag++) {
1263 const skb_frag_t *frag = &info->frags[cur_frag];
1264 dma_addr_t mapping;
1265 u32 status, len;
1266 void *addr;
1267
1268 entry = (entry + 1) % RTASE_NUM_DESC;
1269
1270 txd = ring->desc + sizeof(struct rtase_tx_desc) * entry;
1271 len = skb_frag_size(frag);
1272 addr = skb_frag_address(frag);
1273 mapping = dma_map_single(&tp->pdev->dev, addr, len,
1274 DMA_TO_DEVICE);
1275
1276 if (unlikely(dma_mapping_error(&tp->pdev->dev, mapping))) {
1277 if (unlikely(net_ratelimit()))
1278 netdev_err(tp->dev,
1279 "Failed to map TX fragments DMA!\n");
1280
1281 goto err_out;
1282 }
1283
1284 if (((entry + 1) % RTASE_NUM_DESC) == 0)
1285 status = (opts1 | len | RTASE_RING_END);
1286 else
1287 status = opts1 | len;
1288
1289 if (cur_frag == (nr_frags - 1)) {
1290 ring->skbuff[entry] = skb;
1291 status |= RTASE_TX_LAST_FRAG;
1292 }
1293
1294 ring->mis.len[entry] = len;
1295 txd->addr = cpu_to_le64(mapping);
1296 txd->opts2 = cpu_to_le32(opts2);
1297
1298 /* make sure the operating fields have been updated */
1299 dma_wmb();
1300 txd->opts1 = cpu_to_le32(status);
1301 }
1302
1303 return cur_frag;
1304
1305 err_out:
1306 rtase_tx_clear_range(ring, ring->cur_idx + 1, cur_frag);
1307 return -EIO;
1308 }
1309
rtase_start_xmit(struct sk_buff * skb,struct net_device * dev)1310 static netdev_tx_t rtase_start_xmit(struct sk_buff *skb,
1311 struct net_device *dev)
1312 {
1313 struct skb_shared_info *shinfo = skb_shinfo(skb);
1314 struct rtase_private *tp = netdev_priv(dev);
1315 u32 q_idx, entry, len, opts1, opts2;
1316 struct netdev_queue *tx_queue;
1317 bool stop_queue, door_bell;
1318 u32 mss = shinfo->gso_size;
1319 struct rtase_tx_desc *txd;
1320 struct rtase_ring *ring;
1321 dma_addr_t mapping;
1322 int frags;
1323
1324 /* multiqueues */
1325 q_idx = skb_get_queue_mapping(skb);
1326 ring = &tp->tx_ring[q_idx];
1327 tx_queue = netdev_get_tx_queue(dev, q_idx);
1328
1329 if (unlikely(!rtase_tx_avail(ring))) {
1330 if (net_ratelimit())
1331 netdev_err(dev,
1332 "BUG! Tx Ring full when queue awake!\n");
1333
1334 netif_stop_queue(dev);
1335 return NETDEV_TX_BUSY;
1336 }
1337
1338 entry = ring->cur_idx % RTASE_NUM_DESC;
1339 txd = ring->desc + sizeof(struct rtase_tx_desc) * entry;
1340
1341 opts1 = RTASE_DESC_OWN;
1342 opts2 = rtase_tx_vlan_tag(tp, skb);
1343
1344 /* tcp segmentation offload (or tcp large send) */
1345 if (mss) {
1346 if (shinfo->gso_type & SKB_GSO_TCPV4) {
1347 opts1 |= RTASE_GIANT_SEND_V4;
1348 } else if (shinfo->gso_type & SKB_GSO_TCPV6) {
1349 if (skb_cow_head(skb, 0))
1350 goto err_dma_0;
1351
1352 tcp_v6_gso_csum_prep(skb);
1353 opts1 |= RTASE_GIANT_SEND_V6;
1354 } else {
1355 WARN_ON_ONCE(1);
1356 }
1357
1358 opts1 |= u32_encode_bits(skb_transport_offset(skb),
1359 RTASE_TCPHO_MASK);
1360 opts2 |= u32_encode_bits(mss, RTASE_MSS_MASK);
1361 } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
1362 opts2 |= rtase_tx_csum(skb, dev);
1363 }
1364
1365 frags = rtase_xmit_frags(ring, skb, opts1, opts2);
1366 if (unlikely(frags < 0))
1367 goto err_dma_0;
1368
1369 if (frags) {
1370 len = skb_headlen(skb);
1371 opts1 |= RTASE_TX_FIRST_FRAG;
1372 } else {
1373 len = skb->len;
1374 ring->skbuff[entry] = skb;
1375 opts1 |= RTASE_TX_FIRST_FRAG | RTASE_TX_LAST_FRAG;
1376 }
1377
1378 if (((entry + 1) % RTASE_NUM_DESC) == 0)
1379 opts1 |= (len | RTASE_RING_END);
1380 else
1381 opts1 |= len;
1382
1383 mapping = dma_map_single(&tp->pdev->dev, skb->data, len,
1384 DMA_TO_DEVICE);
1385
1386 if (unlikely(dma_mapping_error(&tp->pdev->dev, mapping))) {
1387 if (unlikely(net_ratelimit()))
1388 netdev_err(dev, "Failed to map TX DMA!\n");
1389
1390 goto err_dma_1;
1391 }
1392
1393 ring->mis.len[entry] = len;
1394 txd->addr = cpu_to_le64(mapping);
1395 txd->opts2 = cpu_to_le32(opts2);
1396 txd->opts1 = cpu_to_le32(opts1 & ~RTASE_DESC_OWN);
1397
1398 /* make sure the operating fields have been updated */
1399 dma_wmb();
1400
1401 door_bell = __netdev_tx_sent_queue(tx_queue, skb->len,
1402 netdev_xmit_more());
1403
1404 txd->opts1 = cpu_to_le32(opts1);
1405
1406 skb_tx_timestamp(skb);
1407
1408 /* tx needs to see descriptor changes before updated cur_idx */
1409 smp_wmb();
1410
1411 WRITE_ONCE(ring->cur_idx, ring->cur_idx + frags + 1);
1412
1413 stop_queue = !netif_subqueue_maybe_stop(dev, ring->index,
1414 rtase_tx_avail(ring),
1415 RTASE_TX_STOP_THRS,
1416 RTASE_TX_START_THRS);
1417
1418 if (door_bell || stop_queue)
1419 rtase_w8(tp, RTASE_TPPOLL, BIT(ring->index));
1420
1421 return NETDEV_TX_OK;
1422
1423 err_dma_1:
1424 ring->skbuff[entry] = NULL;
1425 rtase_tx_clear_range(ring, ring->cur_idx + 1, frags);
1426
1427 err_dma_0:
1428 tp->stats.tx_dropped++;
1429 dev_kfree_skb_any(skb);
1430 return NETDEV_TX_OK;
1431 }
1432
rtase_set_rx_mode(struct net_device * dev)1433 static void rtase_set_rx_mode(struct net_device *dev)
1434 {
1435 rtase_hw_set_rx_packet_filter(dev);
1436 }
1437
rtase_enable_eem_write(const struct rtase_private * tp)1438 static void rtase_enable_eem_write(const struct rtase_private *tp)
1439 {
1440 u8 val;
1441
1442 val = rtase_r8(tp, RTASE_EEM);
1443 rtase_w8(tp, RTASE_EEM, val | RTASE_EEM_UNLOCK);
1444 }
1445
rtase_disable_eem_write(const struct rtase_private * tp)1446 static void rtase_disable_eem_write(const struct rtase_private *tp)
1447 {
1448 u8 val;
1449
1450 val = rtase_r8(tp, RTASE_EEM);
1451 rtase_w8(tp, RTASE_EEM, val & ~RTASE_EEM_UNLOCK);
1452 }
1453
rtase_rar_set(const struct rtase_private * tp,const u8 * addr)1454 static void rtase_rar_set(const struct rtase_private *tp, const u8 *addr)
1455 {
1456 u32 rar_low, rar_high;
1457
1458 rar_low = (u32)addr[0] | ((u32)addr[1] << 8) |
1459 ((u32)addr[2] << 16) | ((u32)addr[3] << 24);
1460
1461 rar_high = (u32)addr[4] | ((u32)addr[5] << 8);
1462
1463 rtase_enable_eem_write(tp);
1464 rtase_w32(tp, RTASE_MAC0, rar_low);
1465 rtase_w32(tp, RTASE_MAC4, rar_high);
1466 rtase_disable_eem_write(tp);
1467 rtase_w16(tp, RTASE_LBK_CTRL, RTASE_LBK_ATLD | RTASE_LBK_CLR);
1468 }
1469
rtase_set_mac_address(struct net_device * dev,void * p)1470 static int rtase_set_mac_address(struct net_device *dev, void *p)
1471 {
1472 struct rtase_private *tp = netdev_priv(dev);
1473 int ret;
1474
1475 ret = eth_mac_addr(dev, p);
1476 if (ret)
1477 return ret;
1478
1479 rtase_rar_set(tp, dev->dev_addr);
1480
1481 return 0;
1482 }
1483
rtase_change_mtu(struct net_device * dev,int new_mtu)1484 static int rtase_change_mtu(struct net_device *dev, int new_mtu)
1485 {
1486 dev->mtu = new_mtu;
1487
1488 netdev_update_features(dev);
1489
1490 return 0;
1491 }
1492
rtase_wait_for_quiescence(const struct net_device * dev)1493 static void rtase_wait_for_quiescence(const struct net_device *dev)
1494 {
1495 struct rtase_private *tp = netdev_priv(dev);
1496 struct rtase_int_vector *ivec;
1497 u32 i;
1498
1499 for (i = 0; i < tp->int_nums; i++) {
1500 ivec = &tp->int_vector[i];
1501 synchronize_irq(ivec->irq);
1502 /* wait for any pending NAPI task to complete */
1503 napi_disable(&ivec->napi);
1504 }
1505
1506 rtase_irq_dis_and_clear(tp);
1507
1508 for (i = 0; i < tp->int_nums; i++) {
1509 ivec = &tp->int_vector[i];
1510 napi_enable(&ivec->napi);
1511 }
1512 }
1513
rtase_sw_reset(struct net_device * dev)1514 static void rtase_sw_reset(struct net_device *dev)
1515 {
1516 struct rtase_private *tp = netdev_priv(dev);
1517 struct rtase_ring *ring, *tmp;
1518 struct rtase_int_vector *ivec;
1519 int ret;
1520 u32 i;
1521
1522 netif_stop_queue(dev);
1523 netif_carrier_off(dev);
1524 rtase_hw_reset(dev);
1525
1526 /* let's wait a bit while any (async) irq lands on */
1527 rtase_wait_for_quiescence(dev);
1528 rtase_tx_clear(tp);
1529 rtase_rx_clear(tp);
1530
1531 for (i = 0; i < tp->int_nums; i++) {
1532 ivec = &tp->int_vector[i];
1533 list_for_each_entry_safe(ring, tmp, &ivec->ring_list,
1534 ring_entry) {
1535 netif_queue_set_napi(tp->dev, ring->index,
1536 ring->type, NULL);
1537
1538 list_del(&ring->ring_entry);
1539 }
1540 }
1541
1542 ret = rtase_init_ring(dev);
1543 if (ret) {
1544 netdev_err(dev, "unable to init ring\n");
1545 rtase_free_desc(tp);
1546 return;
1547 }
1548
1549 rtase_hw_config(dev);
1550 /* always link, so start to transmit & receive */
1551 rtase_hw_start(dev);
1552
1553 netif_carrier_on(dev);
1554 netif_wake_queue(dev);
1555 }
1556
rtase_dump_tally_counter(const struct rtase_private * tp)1557 static void rtase_dump_tally_counter(const struct rtase_private *tp)
1558 {
1559 dma_addr_t paddr = tp->tally_paddr;
1560 u32 cmd = lower_32_bits(paddr);
1561 u32 val;
1562 int err;
1563
1564 rtase_w32(tp, RTASE_DTCCR4, upper_32_bits(paddr));
1565 rtase_w32(tp, RTASE_DTCCR0, cmd);
1566 rtase_w32(tp, RTASE_DTCCR0, cmd | RTASE_COUNTER_DUMP);
1567
1568 err = read_poll_timeout_atomic(rtase_r32, val,
1569 !(val & RTASE_COUNTER_DUMP),
1570 10, 250, false, tp, RTASE_DTCCR0);
1571
1572 if (err == -ETIMEDOUT)
1573 netdev_err(tp->dev, "error occurred in dump tally counter\n");
1574 }
1575
rtase_dump_state(const struct net_device * dev)1576 static void rtase_dump_state(const struct net_device *dev)
1577 {
1578 const struct rtase_private *tp = netdev_priv(dev);
1579 int max_reg_size = RTASE_PCI_REGS_SIZE;
1580 const struct rtase_counters *counters;
1581 const struct rtase_ring *ring;
1582 u32 dword_rd;
1583 int n = 0;
1584
1585 ring = &tp->tx_ring[0];
1586 netdev_err(dev, "Tx descriptor info:\n");
1587 netdev_err(dev, "Tx curIdx = 0x%x\n", ring->cur_idx);
1588 netdev_err(dev, "Tx dirtyIdx = 0x%x\n", ring->dirty_idx);
1589 netdev_err(dev, "Tx phyAddr = %pad\n", &ring->phy_addr);
1590
1591 ring = &tp->rx_ring[0];
1592 netdev_err(dev, "Rx descriptor info:\n");
1593 netdev_err(dev, "Rx curIdx = 0x%x\n", ring->cur_idx);
1594 netdev_err(dev, "Rx dirtyIdx = 0x%x\n", ring->dirty_idx);
1595 netdev_err(dev, "Rx phyAddr = %pad\n", &ring->phy_addr);
1596
1597 netdev_err(dev, "Device Registers:\n");
1598 netdev_err(dev, "Chip Command = 0x%02x\n",
1599 rtase_r8(tp, RTASE_CHIP_CMD));
1600 netdev_err(dev, "IMR = %08x\n", rtase_r32(tp, RTASE_IMR0));
1601 netdev_err(dev, "ISR = %08x\n", rtase_r32(tp, RTASE_ISR0));
1602 netdev_err(dev, "Boot Ctrl Reg(0xE004) = %04x\n",
1603 rtase_r16(tp, RTASE_BOOT_CTL));
1604 netdev_err(dev, "EPHY ISR(0xE014) = %04x\n",
1605 rtase_r16(tp, RTASE_EPHY_ISR));
1606 netdev_err(dev, "EPHY IMR(0xE016) = %04x\n",
1607 rtase_r16(tp, RTASE_EPHY_IMR));
1608 netdev_err(dev, "CLKSW SET REG(0xE018) = %04x\n",
1609 rtase_r16(tp, RTASE_CLKSW_SET));
1610
1611 netdev_err(dev, "Dump PCI Registers:\n");
1612
1613 while (n < max_reg_size) {
1614 if ((n % RTASE_DWORD_MOD) == 0)
1615 netdev_err(tp->dev, "0x%03x:\n", n);
1616
1617 pci_read_config_dword(tp->pdev, n, &dword_rd);
1618 netdev_err(tp->dev, "%08x\n", dword_rd);
1619 n += 4;
1620 }
1621
1622 netdev_err(dev, "Dump tally counter:\n");
1623 counters = tp->tally_vaddr;
1624 rtase_dump_tally_counter(tp);
1625
1626 netdev_err(dev, "tx_packets %lld\n",
1627 le64_to_cpu(counters->tx_packets));
1628 netdev_err(dev, "rx_packets %lld\n",
1629 le64_to_cpu(counters->rx_packets));
1630 netdev_err(dev, "tx_errors %lld\n",
1631 le64_to_cpu(counters->tx_errors));
1632 netdev_err(dev, "rx_errors %d\n",
1633 le32_to_cpu(counters->rx_errors));
1634 netdev_err(dev, "rx_missed %d\n",
1635 le16_to_cpu(counters->rx_missed));
1636 netdev_err(dev, "align_errors %d\n",
1637 le16_to_cpu(counters->align_errors));
1638 netdev_err(dev, "tx_one_collision %d\n",
1639 le32_to_cpu(counters->tx_one_collision));
1640 netdev_err(dev, "tx_multi_collision %d\n",
1641 le32_to_cpu(counters->tx_multi_collision));
1642 netdev_err(dev, "rx_unicast %lld\n",
1643 le64_to_cpu(counters->rx_unicast));
1644 netdev_err(dev, "rx_broadcast %lld\n",
1645 le64_to_cpu(counters->rx_broadcast));
1646 netdev_err(dev, "rx_multicast %d\n",
1647 le32_to_cpu(counters->rx_multicast));
1648 netdev_err(dev, "tx_aborted %d\n",
1649 le16_to_cpu(counters->tx_aborted));
1650 netdev_err(dev, "tx_underrun %d\n",
1651 le16_to_cpu(counters->tx_underrun));
1652 }
1653
rtase_tx_timeout(struct net_device * dev,unsigned int txqueue)1654 static void rtase_tx_timeout(struct net_device *dev, unsigned int txqueue)
1655 {
1656 rtase_dump_state(dev);
1657 rtase_sw_reset(dev);
1658 }
1659
rtase_get_stats64(struct net_device * dev,struct rtnl_link_stats64 * stats)1660 static void rtase_get_stats64(struct net_device *dev,
1661 struct rtnl_link_stats64 *stats)
1662 {
1663 const struct rtase_private *tp = netdev_priv(dev);
1664 const struct rtase_counters *counters;
1665
1666 counters = tp->tally_vaddr;
1667
1668 dev_fetch_sw_netstats(stats, dev->tstats);
1669
1670 /* fetch additional counter values missing in stats collected by driver
1671 * from tally counter
1672 */
1673 rtase_dump_tally_counter(tp);
1674 stats->rx_errors = tp->stats.rx_errors;
1675 stats->tx_errors = le64_to_cpu(counters->tx_errors);
1676 stats->rx_dropped = tp->stats.rx_dropped;
1677 stats->tx_dropped = tp->stats.tx_dropped;
1678 stats->multicast = tp->stats.multicast;
1679 stats->rx_length_errors = tp->stats.rx_length_errors;
1680 }
1681
rtase_set_hw_cbs(const struct rtase_private * tp,u32 queue)1682 static void rtase_set_hw_cbs(const struct rtase_private *tp, u32 queue)
1683 {
1684 u32 idle = tp->tx_qos[queue].idleslope * RTASE_1T_CLOCK;
1685 u32 val, i;
1686
1687 val = u32_encode_bits(idle / RTASE_1T_POWER, RTASE_IDLESLOPE_INT_MASK);
1688 idle %= RTASE_1T_POWER;
1689
1690 for (i = 1; i <= RTASE_IDLESLOPE_INT_SHIFT; i++) {
1691 idle *= 2;
1692 if ((idle / RTASE_1T_POWER) == 1)
1693 val |= BIT(RTASE_IDLESLOPE_INT_SHIFT - i);
1694
1695 idle %= RTASE_1T_POWER;
1696 }
1697
1698 rtase_w32(tp, RTASE_TXQCRDT_0 + queue * 4, val);
1699 }
1700
rtase_setup_tc_cbs(struct rtase_private * tp,const struct tc_cbs_qopt_offload * qopt)1701 static int rtase_setup_tc_cbs(struct rtase_private *tp,
1702 const struct tc_cbs_qopt_offload *qopt)
1703 {
1704 int queue = qopt->queue;
1705
1706 if (queue < 0 || queue >= tp->func_tx_queue_num)
1707 return -EINVAL;
1708
1709 if (!qopt->enable) {
1710 tp->tx_qos[queue].hicredit = 0;
1711 tp->tx_qos[queue].locredit = 0;
1712 tp->tx_qos[queue].idleslope = 0;
1713 tp->tx_qos[queue].sendslope = 0;
1714
1715 rtase_w32(tp, RTASE_TXQCRDT_0 + queue * 4, 0);
1716 } else {
1717 tp->tx_qos[queue].hicredit = qopt->hicredit;
1718 tp->tx_qos[queue].locredit = qopt->locredit;
1719 tp->tx_qos[queue].idleslope = qopt->idleslope;
1720 tp->tx_qos[queue].sendslope = qopt->sendslope;
1721
1722 rtase_set_hw_cbs(tp, queue);
1723 }
1724
1725 return 0;
1726 }
1727
rtase_setup_tc(struct net_device * dev,enum tc_setup_type type,void * type_data)1728 static int rtase_setup_tc(struct net_device *dev, enum tc_setup_type type,
1729 void *type_data)
1730 {
1731 struct rtase_private *tp = netdev_priv(dev);
1732
1733 switch (type) {
1734 case TC_SETUP_QDISC_CBS:
1735 return rtase_setup_tc_cbs(tp, type_data);
1736 default:
1737 return -EOPNOTSUPP;
1738 }
1739 }
1740
rtase_fix_features(struct net_device * dev,netdev_features_t features)1741 static netdev_features_t rtase_fix_features(struct net_device *dev,
1742 netdev_features_t features)
1743 {
1744 netdev_features_t features_fix = features;
1745
1746 /* not support TSO for jumbo frames */
1747 if (dev->mtu > ETH_DATA_LEN)
1748 features_fix &= ~NETIF_F_ALL_TSO;
1749
1750 return features_fix;
1751 }
1752
rtase_set_features(struct net_device * dev,netdev_features_t features)1753 static int rtase_set_features(struct net_device *dev,
1754 netdev_features_t features)
1755 {
1756 netdev_features_t features_set = features;
1757
1758 features_set &= NETIF_F_RXALL | NETIF_F_RXCSUM |
1759 NETIF_F_HW_VLAN_CTAG_RX;
1760
1761 if (features_set ^ dev->features)
1762 rtase_hw_set_features(dev, features_set);
1763
1764 return 0;
1765 }
1766
1767 static const struct net_device_ops rtase_netdev_ops = {
1768 .ndo_open = rtase_open,
1769 .ndo_stop = rtase_close,
1770 .ndo_start_xmit = rtase_start_xmit,
1771 .ndo_set_rx_mode = rtase_set_rx_mode,
1772 .ndo_set_mac_address = rtase_set_mac_address,
1773 .ndo_change_mtu = rtase_change_mtu,
1774 .ndo_tx_timeout = rtase_tx_timeout,
1775 .ndo_get_stats64 = rtase_get_stats64,
1776 .ndo_setup_tc = rtase_setup_tc,
1777 .ndo_fix_features = rtase_fix_features,
1778 .ndo_set_features = rtase_set_features,
1779 };
1780
rtase_get_mac_address(struct net_device * dev)1781 static void rtase_get_mac_address(struct net_device *dev)
1782 {
1783 struct rtase_private *tp = netdev_priv(dev);
1784 u8 mac_addr[ETH_ALEN] __aligned(2) = {};
1785 u32 i;
1786
1787 for (i = 0; i < ETH_ALEN; i++)
1788 mac_addr[i] = rtase_r8(tp, RTASE_MAC0 + i);
1789
1790 if (!is_valid_ether_addr(mac_addr)) {
1791 eth_hw_addr_random(dev);
1792 netdev_warn(dev, "Random ether addr %pM\n", dev->dev_addr);
1793 } else {
1794 eth_hw_addr_set(dev, mac_addr);
1795 ether_addr_copy(dev->perm_addr, dev->dev_addr);
1796 }
1797
1798 rtase_rar_set(tp, dev->dev_addr);
1799 }
1800
rtase_get_settings(struct net_device * dev,struct ethtool_link_ksettings * cmd)1801 static int rtase_get_settings(struct net_device *dev,
1802 struct ethtool_link_ksettings *cmd)
1803 {
1804 u32 supported = SUPPORTED_MII | SUPPORTED_Pause | SUPPORTED_Asym_Pause;
1805 const struct rtase_private *tp = netdev_priv(dev);
1806
1807 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
1808 supported);
1809
1810 switch (tp->hw_ver) {
1811 case RTASE_HW_VER_906X_7XA:
1812 case RTASE_HW_VER_906X_7XC:
1813 cmd->base.speed = SPEED_5000;
1814 break;
1815 case RTASE_HW_VER_907XD_V1:
1816 case RTASE_HW_VER_907XD_VA:
1817 cmd->base.speed = SPEED_10000;
1818 break;
1819 }
1820
1821 cmd->base.duplex = DUPLEX_FULL;
1822 cmd->base.port = PORT_MII;
1823 cmd->base.autoneg = AUTONEG_DISABLE;
1824
1825 return 0;
1826 }
1827
rtase_get_pauseparam(struct net_device * dev,struct ethtool_pauseparam * pause)1828 static void rtase_get_pauseparam(struct net_device *dev,
1829 struct ethtool_pauseparam *pause)
1830 {
1831 const struct rtase_private *tp = netdev_priv(dev);
1832 u16 value = rtase_r16(tp, RTASE_CPLUS_CMD);
1833
1834 pause->autoneg = AUTONEG_DISABLE;
1835 pause->tx_pause = !!(value & RTASE_FORCE_TXFLOW_EN);
1836 pause->rx_pause = !!(value & RTASE_FORCE_RXFLOW_EN);
1837 }
1838
rtase_set_pauseparam(struct net_device * dev,struct ethtool_pauseparam * pause)1839 static int rtase_set_pauseparam(struct net_device *dev,
1840 struct ethtool_pauseparam *pause)
1841 {
1842 const struct rtase_private *tp = netdev_priv(dev);
1843 u16 value = rtase_r16(tp, RTASE_CPLUS_CMD);
1844
1845 if (pause->autoneg)
1846 return -EOPNOTSUPP;
1847
1848 value &= ~(RTASE_FORCE_TXFLOW_EN | RTASE_FORCE_RXFLOW_EN);
1849
1850 if (pause->tx_pause)
1851 value |= RTASE_FORCE_TXFLOW_EN;
1852
1853 if (pause->rx_pause)
1854 value |= RTASE_FORCE_RXFLOW_EN;
1855
1856 rtase_w16(tp, RTASE_CPLUS_CMD, value);
1857 return 0;
1858 }
1859
rtase_get_eth_mac_stats(struct net_device * dev,struct ethtool_eth_mac_stats * stats)1860 static void rtase_get_eth_mac_stats(struct net_device *dev,
1861 struct ethtool_eth_mac_stats *stats)
1862 {
1863 struct rtase_private *tp = netdev_priv(dev);
1864 const struct rtase_counters *counters;
1865
1866 counters = tp->tally_vaddr;
1867
1868 rtase_dump_tally_counter(tp);
1869
1870 stats->FramesTransmittedOK = le64_to_cpu(counters->tx_packets);
1871 stats->FramesReceivedOK = le64_to_cpu(counters->rx_packets);
1872 stats->FramesLostDueToIntMACXmitError =
1873 le64_to_cpu(counters->tx_errors);
1874 stats->BroadcastFramesReceivedOK = le64_to_cpu(counters->rx_broadcast);
1875 }
1876
1877 static const struct ethtool_ops rtase_ethtool_ops = {
1878 .get_link = ethtool_op_get_link,
1879 .get_link_ksettings = rtase_get_settings,
1880 .get_pauseparam = rtase_get_pauseparam,
1881 .set_pauseparam = rtase_set_pauseparam,
1882 .get_eth_mac_stats = rtase_get_eth_mac_stats,
1883 .get_ts_info = ethtool_op_get_ts_info,
1884 };
1885
rtase_init_netdev_ops(struct net_device * dev)1886 static void rtase_init_netdev_ops(struct net_device *dev)
1887 {
1888 dev->netdev_ops = &rtase_netdev_ops;
1889 dev->ethtool_ops = &rtase_ethtool_ops;
1890 }
1891
rtase_init_napi(struct rtase_private * tp)1892 static void rtase_init_napi(struct rtase_private *tp)
1893 {
1894 u16 i;
1895
1896 for (i = 0; i < tp->int_nums; i++) {
1897 netif_napi_add_config(tp->dev, &tp->int_vector[i].napi,
1898 tp->int_vector[i].poll, i);
1899 netif_napi_set_irq(&tp->int_vector[i].napi,
1900 tp->int_vector[i].irq);
1901 }
1902 }
1903
rtase_reset_interrupt(struct pci_dev * pdev,const struct rtase_private * tp)1904 static void rtase_reset_interrupt(struct pci_dev *pdev,
1905 const struct rtase_private *tp)
1906 {
1907 if (tp->sw_flag & RTASE_SWF_MSIX_ENABLED)
1908 pci_disable_msix(pdev);
1909 else
1910 pci_disable_msi(pdev);
1911 }
1912
rtase_alloc_msix(struct pci_dev * pdev,struct rtase_private * tp)1913 static int rtase_alloc_msix(struct pci_dev *pdev, struct rtase_private *tp)
1914 {
1915 int ret, irq;
1916 u16 i;
1917
1918 memset(tp->msix_entry, 0x0, RTASE_NUM_MSIX *
1919 sizeof(struct msix_entry));
1920
1921 for (i = 0; i < RTASE_NUM_MSIX; i++)
1922 tp->msix_entry[i].entry = i;
1923
1924 ret = pci_enable_msix_exact(pdev, tp->msix_entry, tp->int_nums);
1925
1926 if (ret)
1927 return ret;
1928
1929 for (i = 0; i < tp->int_nums; i++) {
1930 irq = pci_irq_vector(pdev, i);
1931 if (irq < 0) {
1932 pci_disable_msix(pdev);
1933 return irq;
1934 }
1935
1936 tp->int_vector[i].irq = irq;
1937 }
1938
1939 return 0;
1940 }
1941
rtase_alloc_interrupt(struct pci_dev * pdev,struct rtase_private * tp)1942 static int rtase_alloc_interrupt(struct pci_dev *pdev,
1943 struct rtase_private *tp)
1944 {
1945 int ret;
1946
1947 ret = rtase_alloc_msix(pdev, tp);
1948 if (ret) {
1949 ret = pci_enable_msi(pdev);
1950 if (ret) {
1951 dev_err(&pdev->dev,
1952 "unable to alloc interrupt.(MSI)\n");
1953 return ret;
1954 }
1955
1956 tp->sw_flag |= RTASE_SWF_MSI_ENABLED;
1957 } else {
1958 tp->sw_flag |= RTASE_SWF_MSIX_ENABLED;
1959 }
1960
1961 return 0;
1962 }
1963
rtase_init_hardware(const struct rtase_private * tp)1964 static void rtase_init_hardware(const struct rtase_private *tp)
1965 {
1966 u16 i;
1967
1968 for (i = 0; i < RTASE_VLAN_FILTER_ENTRY_NUM; i++)
1969 rtase_w32(tp, RTASE_VLAN_ENTRY_0 + i * 4, 0);
1970 }
1971
rtase_init_int_vector(struct rtase_private * tp)1972 static void rtase_init_int_vector(struct rtase_private *tp)
1973 {
1974 u16 i;
1975
1976 /* interrupt vector 0 */
1977 tp->int_vector[0].tp = tp;
1978 tp->int_vector[0].index = 0;
1979 tp->int_vector[0].imr_addr = RTASE_IMR0;
1980 tp->int_vector[0].isr_addr = RTASE_ISR0;
1981 tp->int_vector[0].imr = RTASE_ROK | RTASE_RDU | RTASE_TOK |
1982 RTASE_TOK4 | RTASE_TOK5 | RTASE_TOK6 |
1983 RTASE_TOK7;
1984 tp->int_vector[0].poll = rtase_poll;
1985
1986 memset(tp->int_vector[0].name, 0x0, sizeof(tp->int_vector[0].name));
1987 INIT_LIST_HEAD(&tp->int_vector[0].ring_list);
1988
1989 /* interrupt vector 1 ~ 3 */
1990 for (i = 1; i < tp->int_nums; i++) {
1991 tp->int_vector[i].tp = tp;
1992 tp->int_vector[i].index = i;
1993 tp->int_vector[i].imr_addr = RTASE_IMR1 + (i - 1) * 4;
1994 tp->int_vector[i].isr_addr = RTASE_ISR1 + (i - 1) * 4;
1995 tp->int_vector[i].imr = RTASE_Q_ROK | RTASE_Q_RDU |
1996 RTASE_Q_TOK;
1997 tp->int_vector[i].poll = rtase_poll;
1998
1999 memset(tp->int_vector[i].name, 0x0,
2000 sizeof(tp->int_vector[0].name));
2001 INIT_LIST_HEAD(&tp->int_vector[i].ring_list);
2002 }
2003 }
2004
rtase_calc_time_mitigation(u32 time_us)2005 static u16 rtase_calc_time_mitigation(u32 time_us)
2006 {
2007 u8 msb, time_count, time_unit;
2008 u16 int_miti;
2009
2010 time_us = min(time_us, RTASE_MITI_MAX_TIME);
2011
2012 if (time_us > RTASE_MITI_TIME_COUNT_MASK) {
2013 msb = fls(time_us);
2014 time_unit = msb - RTASE_MITI_COUNT_BIT_NUM;
2015 time_count = time_us >> (msb - RTASE_MITI_COUNT_BIT_NUM);
2016 } else {
2017 time_unit = 0;
2018 time_count = time_us;
2019 }
2020
2021 int_miti = u16_encode_bits(time_count, RTASE_MITI_TIME_COUNT_MASK) |
2022 u16_encode_bits(time_unit, RTASE_MITI_TIME_UNIT_MASK);
2023
2024 return int_miti;
2025 }
2026
rtase_calc_packet_num_mitigation(u16 pkt_num)2027 static u16 rtase_calc_packet_num_mitigation(u16 pkt_num)
2028 {
2029 u8 msb, pkt_num_count, pkt_num_unit;
2030 u16 int_miti;
2031
2032 pkt_num = min(pkt_num, RTASE_MITI_MAX_PKT_NUM);
2033
2034 if (pkt_num > 60) {
2035 pkt_num_unit = RTASE_MITI_MAX_PKT_NUM_IDX;
2036 pkt_num_count = pkt_num / RTASE_MITI_MAX_PKT_NUM_UNIT;
2037 } else {
2038 msb = fls(pkt_num);
2039 if (msb >= RTASE_MITI_COUNT_BIT_NUM) {
2040 pkt_num_unit = msb - RTASE_MITI_COUNT_BIT_NUM;
2041 pkt_num_count = pkt_num >> (msb -
2042 RTASE_MITI_COUNT_BIT_NUM);
2043 } else {
2044 pkt_num_unit = 0;
2045 pkt_num_count = pkt_num;
2046 }
2047 }
2048
2049 int_miti = u16_encode_bits(pkt_num_count,
2050 RTASE_MITI_PKT_NUM_COUNT_MASK) |
2051 u16_encode_bits(pkt_num_unit,
2052 RTASE_MITI_PKT_NUM_UNIT_MASK);
2053
2054 return int_miti;
2055 }
2056
rtase_init_software_variable(struct pci_dev * pdev,struct rtase_private * tp)2057 static void rtase_init_software_variable(struct pci_dev *pdev,
2058 struct rtase_private *tp)
2059 {
2060 u16 int_miti;
2061
2062 tp->tx_queue_ctrl = RTASE_TXQ_CTRL;
2063 tp->func_tx_queue_num = RTASE_FUNC_TXQ_NUM;
2064 tp->func_rx_queue_num = RTASE_FUNC_RXQ_NUM;
2065 tp->int_nums = RTASE_INTERRUPT_NUM;
2066
2067 int_miti = rtase_calc_time_mitigation(RTASE_MITI_DEFAULT_TIME) |
2068 rtase_calc_packet_num_mitigation(RTASE_MITI_DEFAULT_PKT_NUM);
2069 tp->tx_int_mit = int_miti;
2070 tp->rx_int_mit = int_miti;
2071
2072 tp->sw_flag = 0;
2073
2074 rtase_init_int_vector(tp);
2075
2076 /* MTU range: 60 - hw-specific max */
2077 tp->dev->min_mtu = ETH_ZLEN;
2078 tp->dev->max_mtu = RTASE_MAX_JUMBO_SIZE;
2079 }
2080
rtase_check_mac_version_valid(struct rtase_private * tp)2081 static int rtase_check_mac_version_valid(struct rtase_private *tp)
2082 {
2083 int ret = -ENODEV;
2084
2085 tp->hw_ver = rtase_r32(tp, RTASE_TX_CONFIG_0) & RTASE_HW_VER_MASK;
2086
2087 switch (tp->hw_ver) {
2088 case RTASE_HW_VER_906X_7XA:
2089 case RTASE_HW_VER_906X_7XC:
2090 case RTASE_HW_VER_907XD_V1:
2091 case RTASE_HW_VER_907XD_VA:
2092 ret = 0;
2093 break;
2094 }
2095
2096 return ret;
2097 }
2098
rtase_init_board(struct pci_dev * pdev,struct net_device ** dev_out,void __iomem ** ioaddr_out)2099 static int rtase_init_board(struct pci_dev *pdev, struct net_device **dev_out,
2100 void __iomem **ioaddr_out)
2101 {
2102 struct net_device *dev;
2103 void __iomem *ioaddr;
2104 int ret = -ENOMEM;
2105
2106 /* dev zeroed in alloc_etherdev */
2107 dev = alloc_etherdev_mq(sizeof(struct rtase_private),
2108 RTASE_FUNC_TXQ_NUM);
2109 if (!dev)
2110 goto err_out;
2111
2112 SET_NETDEV_DEV(dev, &pdev->dev);
2113
2114 ret = pci_enable_device(pdev);
2115 if (ret)
2116 goto err_out_free_dev;
2117
2118 /* make sure PCI base addr 1 is MMIO */
2119 if (!(pci_resource_flags(pdev, 2) & IORESOURCE_MEM)) {
2120 ret = -ENODEV;
2121 goto err_out_disable;
2122 }
2123
2124 /* check for weird/broken PCI region reporting */
2125 if (pci_resource_len(pdev, 2) < RTASE_REGS_SIZE) {
2126 ret = -ENODEV;
2127 goto err_out_disable;
2128 }
2129
2130 ret = pci_request_regions(pdev, KBUILD_MODNAME);
2131 if (ret)
2132 goto err_out_disable;
2133
2134 ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
2135 if (ret) {
2136 dev_err(&pdev->dev, "no usable dma addressing method\n");
2137 goto err_out_free_res;
2138 }
2139
2140 pci_set_master(pdev);
2141
2142 /* ioremap MMIO region */
2143 ioaddr = ioremap(pci_resource_start(pdev, 2),
2144 pci_resource_len(pdev, 2));
2145 if (!ioaddr) {
2146 ret = -EIO;
2147 goto err_out_free_res;
2148 }
2149
2150 *ioaddr_out = ioaddr;
2151 *dev_out = dev;
2152
2153 return ret;
2154
2155 err_out_free_res:
2156 pci_release_regions(pdev);
2157
2158 err_out_disable:
2159 pci_disable_device(pdev);
2160
2161 err_out_free_dev:
2162 free_netdev(dev);
2163
2164 err_out:
2165 *ioaddr_out = NULL;
2166 *dev_out = NULL;
2167
2168 return ret;
2169 }
2170
rtase_release_board(struct pci_dev * pdev,struct net_device * dev,void __iomem * ioaddr)2171 static void rtase_release_board(struct pci_dev *pdev, struct net_device *dev,
2172 void __iomem *ioaddr)
2173 {
2174 const struct rtase_private *tp = netdev_priv(dev);
2175
2176 rtase_rar_set(tp, tp->dev->perm_addr);
2177 iounmap(ioaddr);
2178
2179 if (tp->sw_flag & RTASE_SWF_MSIX_ENABLED)
2180 pci_disable_msix(pdev);
2181 else
2182 pci_disable_msi(pdev);
2183
2184 pci_release_regions(pdev);
2185 pci_disable_device(pdev);
2186 free_netdev(dev);
2187 }
2188
rtase_init_one(struct pci_dev * pdev,const struct pci_device_id * ent)2189 static int rtase_init_one(struct pci_dev *pdev,
2190 const struct pci_device_id *ent)
2191 {
2192 struct net_device *dev = NULL;
2193 struct rtase_int_vector *ivec;
2194 void __iomem *ioaddr = NULL;
2195 struct rtase_private *tp;
2196 int ret, i;
2197
2198 if (!pdev->is_physfn && pdev->is_virtfn) {
2199 dev_err(&pdev->dev,
2200 "This module does not support a virtual function.");
2201 return -EINVAL;
2202 }
2203
2204 dev_dbg(&pdev->dev, "Automotive Switch Ethernet driver loaded\n");
2205
2206 ret = rtase_init_board(pdev, &dev, &ioaddr);
2207 if (ret)
2208 return ret;
2209
2210 tp = netdev_priv(dev);
2211 tp->mmio_addr = ioaddr;
2212 tp->dev = dev;
2213 tp->pdev = pdev;
2214
2215 /* identify chip attached to board */
2216 ret = rtase_check_mac_version_valid(tp);
2217 if (ret) {
2218 dev_err(&pdev->dev,
2219 "unknown chip version: 0x%08x, contact rtase maintainers (see MAINTAINERS file)\n",
2220 tp->hw_ver);
2221 goto err_out_release_board;
2222 }
2223
2224 rtase_init_software_variable(pdev, tp);
2225 rtase_init_hardware(tp);
2226
2227 ret = rtase_alloc_interrupt(pdev, tp);
2228 if (ret) {
2229 dev_err(&pdev->dev, "unable to alloc MSIX/MSI\n");
2230 goto err_out_del_napi;
2231 }
2232
2233 rtase_init_napi(tp);
2234
2235 rtase_init_netdev_ops(dev);
2236
2237 dev->pcpu_stat_type = NETDEV_PCPU_STAT_TSTATS;
2238
2239 dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX |
2240 NETIF_F_IP_CSUM | NETIF_F_HIGHDMA |
2241 NETIF_F_RXCSUM | NETIF_F_SG |
2242 NETIF_F_TSO | NETIF_F_IPV6_CSUM |
2243 NETIF_F_TSO6;
2244
2245 dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM |
2246 NETIF_F_TSO | NETIF_F_RXCSUM |
2247 NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX |
2248 NETIF_F_RXALL | NETIF_F_RXFCS |
2249 NETIF_F_IPV6_CSUM | NETIF_F_TSO6;
2250
2251 dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
2252 NETIF_F_HIGHDMA;
2253 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
2254 netif_set_tso_max_size(dev, RTASE_LSO_64K);
2255 netif_set_tso_max_segs(dev, RTASE_NIC_MAX_PHYS_BUF_COUNT_LSO2);
2256
2257 rtase_get_mac_address(dev);
2258
2259 tp->tally_vaddr = dma_alloc_coherent(&pdev->dev,
2260 sizeof(*tp->tally_vaddr),
2261 &tp->tally_paddr,
2262 GFP_KERNEL);
2263 if (!tp->tally_vaddr) {
2264 ret = -ENOMEM;
2265 goto err_out_free_dma;
2266 }
2267
2268 rtase_tally_counter_clear(tp);
2269
2270 pci_set_drvdata(pdev, dev);
2271
2272 netif_carrier_off(dev);
2273
2274 ret = register_netdev(dev);
2275 if (ret)
2276 goto err_out_free_dma;
2277
2278 netdev_dbg(dev, "%pM, IRQ %d\n", dev->dev_addr, dev->irq);
2279
2280 return 0;
2281
2282 err_out_free_dma:
2283 if (tp->tally_vaddr) {
2284 dma_free_coherent(&pdev->dev,
2285 sizeof(*tp->tally_vaddr),
2286 tp->tally_vaddr,
2287 tp->tally_paddr);
2288
2289 tp->tally_vaddr = NULL;
2290 }
2291
2292 err_out_del_napi:
2293 for (i = 0; i < tp->int_nums; i++) {
2294 ivec = &tp->int_vector[i];
2295 netif_napi_del(&ivec->napi);
2296 }
2297
2298 err_out_release_board:
2299 rtase_release_board(pdev, dev, ioaddr);
2300
2301 return ret;
2302 }
2303
rtase_remove_one(struct pci_dev * pdev)2304 static void rtase_remove_one(struct pci_dev *pdev)
2305 {
2306 struct net_device *dev = pci_get_drvdata(pdev);
2307 struct rtase_private *tp = netdev_priv(dev);
2308 struct rtase_int_vector *ivec;
2309 u32 i;
2310
2311 unregister_netdev(dev);
2312
2313 for (i = 0; i < tp->int_nums; i++) {
2314 ivec = &tp->int_vector[i];
2315 netif_napi_del(&ivec->napi);
2316 }
2317
2318 rtase_reset_interrupt(pdev, tp);
2319 if (tp->tally_vaddr) {
2320 dma_free_coherent(&pdev->dev,
2321 sizeof(*tp->tally_vaddr),
2322 tp->tally_vaddr,
2323 tp->tally_paddr);
2324 tp->tally_vaddr = NULL;
2325 }
2326
2327 rtase_release_board(pdev, dev, tp->mmio_addr);
2328 pci_set_drvdata(pdev, NULL);
2329 }
2330
rtase_shutdown(struct pci_dev * pdev)2331 static void rtase_shutdown(struct pci_dev *pdev)
2332 {
2333 struct net_device *dev = pci_get_drvdata(pdev);
2334 const struct rtase_private *tp;
2335
2336 tp = netdev_priv(dev);
2337
2338 if (netif_running(dev))
2339 rtase_close(dev);
2340
2341 rtase_reset_interrupt(pdev, tp);
2342 }
2343
rtase_suspend(struct device * device)2344 static int rtase_suspend(struct device *device)
2345 {
2346 struct net_device *dev = dev_get_drvdata(device);
2347
2348 if (netif_running(dev)) {
2349 netif_device_detach(dev);
2350 rtase_hw_reset(dev);
2351 }
2352
2353 return 0;
2354 }
2355
rtase_resume(struct device * device)2356 static int rtase_resume(struct device *device)
2357 {
2358 struct net_device *dev = dev_get_drvdata(device);
2359 struct rtase_private *tp = netdev_priv(dev);
2360 int ret;
2361
2362 /* restore last modified mac address */
2363 rtase_rar_set(tp, dev->dev_addr);
2364
2365 if (!netif_running(dev))
2366 goto out;
2367
2368 rtase_wait_for_quiescence(dev);
2369
2370 rtase_tx_clear(tp);
2371 rtase_rx_clear(tp);
2372
2373 ret = rtase_init_ring(dev);
2374 if (ret) {
2375 netdev_err(dev, "unable to init ring\n");
2376 rtase_free_desc(tp);
2377 return -ENOMEM;
2378 }
2379
2380 rtase_hw_config(dev);
2381 /* always link, so start to transmit & receive */
2382 rtase_hw_start(dev);
2383
2384 netif_device_attach(dev);
2385 out:
2386
2387 return 0;
2388 }
2389
2390 static const struct dev_pm_ops rtase_pm_ops = {
2391 SYSTEM_SLEEP_PM_OPS(rtase_suspend, rtase_resume)
2392 };
2393
2394 static struct pci_driver rtase_pci_driver = {
2395 .name = KBUILD_MODNAME,
2396 .id_table = rtase_pci_tbl,
2397 .probe = rtase_init_one,
2398 .remove = rtase_remove_one,
2399 .shutdown = rtase_shutdown,
2400 .driver.pm = pm_ptr(&rtase_pm_ops),
2401 };
2402
2403 module_pci_driver(rtase_pci_driver);
2404