blob: 73ce3ee6a520e39d09398f82c237310c6280de25 [file] [log] [blame]
Bryan Whitehead23f07032018-03-05 14:23:30 -05001/* SPDX-License-Identifier: GPL-2.0+ */
2/* Copyright (C) 2018 Microchip Technology Inc. */
3
4#include <linux/module.h>
5#include <linux/pci.h>
6#include <linux/netdevice.h>
7#include <linux/etherdevice.h>
8#include <linux/crc32.h>
9#include <linux/microchipphy.h>
10#include <linux/net_tstamp.h>
11#include <linux/phy.h>
12#include <linux/rtnetlink.h>
13#include <linux/iopoll.h>
14#include "lan743x_main.h"
15
16static void lan743x_pci_cleanup(struct lan743x_adapter *adapter)
17{
18 pci_release_selected_regions(adapter->pdev,
19 pci_select_bars(adapter->pdev,
20 IORESOURCE_MEM));
21 pci_disable_device(adapter->pdev);
22}
23
24static int lan743x_pci_init(struct lan743x_adapter *adapter,
25 struct pci_dev *pdev)
26{
27 unsigned long bars = 0;
28 int ret;
29
30 adapter->pdev = pdev;
31 ret = pci_enable_device_mem(pdev);
32 if (ret)
33 goto return_error;
34
35 netif_info(adapter, probe, adapter->netdev,
36 "PCI: Vendor ID = 0x%04X, Device ID = 0x%04X\n",
37 pdev->vendor, pdev->device);
38 bars = pci_select_bars(pdev, IORESOURCE_MEM);
39 if (!test_bit(0, &bars))
40 goto disable_device;
41
42 ret = pci_request_selected_regions(pdev, bars, DRIVER_NAME);
43 if (ret)
44 goto disable_device;
45
46 pci_set_master(pdev);
47 return 0;
48
49disable_device:
50 pci_disable_device(adapter->pdev);
51
52return_error:
53 return ret;
54}
55
56u32 lan743x_csr_read(struct lan743x_adapter *adapter, int offset)
57{
58 return ioread32(&adapter->csr.csr_address[offset]);
59}
60
61void lan743x_csr_write(struct lan743x_adapter *adapter, int offset, u32 data)
62{
63 iowrite32(data, &adapter->csr.csr_address[offset]);
64}
65
66#define LAN743X_CSR_READ_OP(offset) lan743x_csr_read(adapter, offset)
67
68static int lan743x_csr_light_reset(struct lan743x_adapter *adapter)
69{
70 u32 data;
71
72 data = lan743x_csr_read(adapter, HW_CFG);
73 data |= HW_CFG_LRST_;
74 lan743x_csr_write(adapter, HW_CFG, data);
75
76 return readx_poll_timeout(LAN743X_CSR_READ_OP, HW_CFG, data,
77 !(data & HW_CFG_LRST_), 100000, 10000000);
78}
79
80static int lan743x_csr_wait_for_bit(struct lan743x_adapter *adapter,
81 int offset, u32 bit_mask,
82 int target_value, int usleep_min,
83 int usleep_max, int count)
84{
85 u32 data;
86
87 return readx_poll_timeout(LAN743X_CSR_READ_OP, offset, data,
88 target_value == ((data & bit_mask) ? 1 : 0),
89 usleep_max, usleep_min * count);
90}
91
92static int lan743x_csr_init(struct lan743x_adapter *adapter)
93{
94 struct lan743x_csr *csr = &adapter->csr;
95 resource_size_t bar_start, bar_length;
96 int result;
97
98 bar_start = pci_resource_start(adapter->pdev, 0);
99 bar_length = pci_resource_len(adapter->pdev, 0);
100 csr->csr_address = devm_ioremap(&adapter->pdev->dev,
101 bar_start, bar_length);
102 if (!csr->csr_address) {
103 result = -ENOMEM;
104 goto clean_up;
105 }
106
107 csr->id_rev = lan743x_csr_read(adapter, ID_REV);
108 csr->fpga_rev = lan743x_csr_read(adapter, FPGA_REV);
109 netif_info(adapter, probe, adapter->netdev,
110 "ID_REV = 0x%08X, FPGA_REV = %d.%d\n",
111 csr->id_rev, FPGA_REV_GET_MAJOR_(csr->fpga_rev),
112 FPGA_REV_GET_MINOR_(csr->fpga_rev));
113 if (!ID_REV_IS_VALID_CHIP_ID_(csr->id_rev)) {
114 result = -ENODEV;
115 goto clean_up;
116 }
117
118 csr->flags = LAN743X_CSR_FLAG_SUPPORTS_INTR_AUTO_SET_CLR;
119 switch (csr->id_rev & ID_REV_CHIP_REV_MASK_) {
120 case ID_REV_CHIP_REV_A0_:
121 csr->flags |= LAN743X_CSR_FLAG_IS_A0;
122 csr->flags &= ~LAN743X_CSR_FLAG_SUPPORTS_INTR_AUTO_SET_CLR;
123 break;
124 case ID_REV_CHIP_REV_B0_:
125 csr->flags |= LAN743X_CSR_FLAG_IS_B0;
126 break;
127 }
128
129 result = lan743x_csr_light_reset(adapter);
130 if (result)
131 goto clean_up;
132 return 0;
133clean_up:
134 return result;
135}
136
137static void lan743x_intr_software_isr(void *context)
138{
139 struct lan743x_adapter *adapter = context;
140 struct lan743x_intr *intr = &adapter->intr;
141 u32 int_sts;
142
143 int_sts = lan743x_csr_read(adapter, INT_STS);
144 if (int_sts & INT_BIT_SW_GP_) {
145 lan743x_csr_write(adapter, INT_STS, INT_BIT_SW_GP_);
146 intr->software_isr_flag = 1;
147 }
148}
149
150static void lan743x_tx_isr(void *context, u32 int_sts, u32 flags)
151{
152 struct lan743x_tx *tx = context;
153 struct lan743x_adapter *adapter = tx->adapter;
154 bool enable_flag = true;
155 u32 int_en = 0;
156
157 int_en = lan743x_csr_read(adapter, INT_EN_SET);
158 if (flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CLEAR) {
159 lan743x_csr_write(adapter, INT_EN_CLR,
160 INT_BIT_DMA_TX_(tx->channel_number));
161 }
162
163 if (int_sts & INT_BIT_DMA_TX_(tx->channel_number)) {
164 u32 ioc_bit = DMAC_INT_BIT_TX_IOC_(tx->channel_number);
165 u32 dmac_int_sts;
166 u32 dmac_int_en;
167
168 if (flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_READ)
169 dmac_int_sts = lan743x_csr_read(adapter, DMAC_INT_STS);
170 else
171 dmac_int_sts = ioc_bit;
172 if (flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CHECK)
173 dmac_int_en = lan743x_csr_read(adapter,
174 DMAC_INT_EN_SET);
175 else
176 dmac_int_en = ioc_bit;
177
178 dmac_int_en &= ioc_bit;
179 dmac_int_sts &= dmac_int_en;
180 if (dmac_int_sts & ioc_bit) {
181 napi_schedule(&tx->napi);
182 enable_flag = false;/* poll func will enable later */
183 }
184 }
185
186 if (enable_flag)
187 /* enable isr */
188 lan743x_csr_write(adapter, INT_EN_SET,
189 INT_BIT_DMA_TX_(tx->channel_number));
190}
191
192static void lan743x_rx_isr(void *context, u32 int_sts, u32 flags)
193{
194 struct lan743x_rx *rx = context;
195 struct lan743x_adapter *adapter = rx->adapter;
196 bool enable_flag = true;
197
198 if (flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CLEAR) {
199 lan743x_csr_write(adapter, INT_EN_CLR,
200 INT_BIT_DMA_RX_(rx->channel_number));
201 }
202
203 if (int_sts & INT_BIT_DMA_RX_(rx->channel_number)) {
204 u32 rx_frame_bit = DMAC_INT_BIT_RXFRM_(rx->channel_number);
205 u32 dmac_int_sts;
206 u32 dmac_int_en;
207
208 if (flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_READ)
209 dmac_int_sts = lan743x_csr_read(adapter, DMAC_INT_STS);
210 else
211 dmac_int_sts = rx_frame_bit;
212 if (flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CHECK)
213 dmac_int_en = lan743x_csr_read(adapter,
214 DMAC_INT_EN_SET);
215 else
216 dmac_int_en = rx_frame_bit;
217
218 dmac_int_en &= rx_frame_bit;
219 dmac_int_sts &= dmac_int_en;
220 if (dmac_int_sts & rx_frame_bit) {
221 napi_schedule(&rx->napi);
222 enable_flag = false;/* poll funct will enable later */
223 }
224 }
225
226 if (enable_flag) {
227 /* enable isr */
228 lan743x_csr_write(adapter, INT_EN_SET,
229 INT_BIT_DMA_RX_(rx->channel_number));
230 }
231}
232
233static void lan743x_intr_shared_isr(void *context, u32 int_sts, u32 flags)
234{
235 struct lan743x_adapter *adapter = context;
236 unsigned int channel;
237
238 if (int_sts & INT_BIT_ALL_RX_) {
239 for (channel = 0; channel < LAN743X_USED_RX_CHANNELS;
240 channel++) {
241 u32 int_bit = INT_BIT_DMA_RX_(channel);
242
243 if (int_sts & int_bit) {
244 lan743x_rx_isr(&adapter->rx[channel],
245 int_bit, flags);
246 int_sts &= ~int_bit;
247 }
248 }
249 }
250 if (int_sts & INT_BIT_ALL_TX_) {
251 for (channel = 0; channel < LAN743X_USED_TX_CHANNELS;
252 channel++) {
253 u32 int_bit = INT_BIT_DMA_TX_(channel);
254
255 if (int_sts & int_bit) {
256 lan743x_tx_isr(&adapter->tx[channel],
257 int_bit, flags);
258 int_sts &= ~int_bit;
259 }
260 }
261 }
262 if (int_sts & INT_BIT_ALL_OTHER_) {
263 if (int_sts & INT_BIT_SW_GP_) {
264 lan743x_intr_software_isr(adapter);
265 int_sts &= ~INT_BIT_SW_GP_;
266 }
267 }
268 if (int_sts)
269 lan743x_csr_write(adapter, INT_EN_CLR, int_sts);
270}
271
272static irqreturn_t lan743x_intr_entry_isr(int irq, void *ptr)
273{
274 struct lan743x_vector *vector = ptr;
275 struct lan743x_adapter *adapter = vector->adapter;
276 irqreturn_t result = IRQ_NONE;
277 u32 int_enables;
278 u32 int_sts;
279
280 if (vector->flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_READ) {
281 int_sts = lan743x_csr_read(adapter, INT_STS);
282 } else if (vector->flags &
283 (LAN743X_VECTOR_FLAG_SOURCE_STATUS_R2C |
284 LAN743X_VECTOR_FLAG_SOURCE_ENABLE_R2C)) {
285 int_sts = lan743x_csr_read(adapter, INT_STS_R2C);
286 } else {
287 /* use mask as implied status */
288 int_sts = vector->int_mask | INT_BIT_MAS_;
289 }
290
291 if (!(int_sts & INT_BIT_MAS_))
292 goto irq_done;
293
294 if (vector->flags & LAN743X_VECTOR_FLAG_VECTOR_ENABLE_ISR_CLEAR)
295 /* disable vector interrupt */
296 lan743x_csr_write(adapter,
297 INT_VEC_EN_CLR,
298 INT_VEC_EN_(vector->vector_index));
299
300 if (vector->flags & LAN743X_VECTOR_FLAG_MASTER_ENABLE_CLEAR)
301 /* disable master interrupt */
302 lan743x_csr_write(adapter, INT_EN_CLR, INT_BIT_MAS_);
303
304 if (vector->flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CHECK) {
305 int_enables = lan743x_csr_read(adapter, INT_EN_SET);
306 } else {
307 /* use vector mask as implied enable mask */
308 int_enables = vector->int_mask;
309 }
310
311 int_sts &= int_enables;
312 int_sts &= vector->int_mask;
313 if (int_sts) {
314 if (vector->handler) {
315 vector->handler(vector->context,
316 int_sts, vector->flags);
317 } else {
318 /* disable interrupts on this vector */
319 lan743x_csr_write(adapter, INT_EN_CLR,
320 vector->int_mask);
321 }
322 result = IRQ_HANDLED;
323 }
324
325 if (vector->flags & LAN743X_VECTOR_FLAG_MASTER_ENABLE_SET)
326 /* enable master interrupt */
327 lan743x_csr_write(adapter, INT_EN_SET, INT_BIT_MAS_);
328
329 if (vector->flags & LAN743X_VECTOR_FLAG_VECTOR_ENABLE_ISR_SET)
330 /* enable vector interrupt */
331 lan743x_csr_write(adapter,
332 INT_VEC_EN_SET,
333 INT_VEC_EN_(vector->vector_index));
334irq_done:
335 return result;
336}
337
338static int lan743x_intr_test_isr(struct lan743x_adapter *adapter)
339{
340 struct lan743x_intr *intr = &adapter->intr;
341 int result = -ENODEV;
342 int timeout = 10;
343
344 intr->software_isr_flag = 0;
345
346 /* enable interrupt */
347 lan743x_csr_write(adapter, INT_EN_SET, INT_BIT_SW_GP_);
348
349 /* activate interrupt here */
350 lan743x_csr_write(adapter, INT_SET, INT_BIT_SW_GP_);
351 while ((timeout > 0) && (!(intr->software_isr_flag))) {
352 usleep_range(1000, 20000);
353 timeout--;
354 }
355
356 if (intr->software_isr_flag)
357 result = 0;
358
359 /* disable interrupts */
360 lan743x_csr_write(adapter, INT_EN_CLR, INT_BIT_SW_GP_);
361 return result;
362}
363
364static int lan743x_intr_register_isr(struct lan743x_adapter *adapter,
365 int vector_index, u32 flags,
366 u32 int_mask,
367 lan743x_vector_handler handler,
368 void *context)
369{
370 struct lan743x_vector *vector = &adapter->intr.vector_list
371 [vector_index];
372 int ret;
373
374 vector->adapter = adapter;
375 vector->flags = flags;
376 vector->vector_index = vector_index;
377 vector->int_mask = int_mask;
378 vector->handler = handler;
379 vector->context = context;
380
381 ret = request_irq(vector->irq,
382 lan743x_intr_entry_isr,
383 (flags & LAN743X_VECTOR_FLAG_IRQ_SHARED) ?
384 IRQF_SHARED : 0, DRIVER_NAME, vector);
385 if (ret) {
386 vector->handler = NULL;
387 vector->context = NULL;
388 vector->int_mask = 0;
389 vector->flags = 0;
390 }
391 return ret;
392}
393
394static void lan743x_intr_unregister_isr(struct lan743x_adapter *adapter,
395 int vector_index)
396{
397 struct lan743x_vector *vector = &adapter->intr.vector_list
398 [vector_index];
399
400 free_irq(vector->irq, vector);
401 vector->handler = NULL;
402 vector->context = NULL;
403 vector->int_mask = 0;
404 vector->flags = 0;
405}
406
407static u32 lan743x_intr_get_vector_flags(struct lan743x_adapter *adapter,
408 u32 int_mask)
409{
410 int index;
411
412 for (index = 0; index < LAN743X_MAX_VECTOR_COUNT; index++) {
413 if (adapter->intr.vector_list[index].int_mask & int_mask)
414 return adapter->intr.vector_list[index].flags;
415 }
416 return 0;
417}
418
419static void lan743x_intr_close(struct lan743x_adapter *adapter)
420{
421 struct lan743x_intr *intr = &adapter->intr;
422 int index = 0;
423
424 lan743x_csr_write(adapter, INT_EN_CLR, INT_BIT_MAS_);
425 lan743x_csr_write(adapter, INT_VEC_EN_CLR, 0x000000FF);
426
427 for (index = 0; index < LAN743X_MAX_VECTOR_COUNT; index++) {
428 if (intr->flags & INTR_FLAG_IRQ_REQUESTED(index)) {
429 lan743x_intr_unregister_isr(adapter, index);
430 intr->flags &= ~INTR_FLAG_IRQ_REQUESTED(index);
431 }
432 }
433
434 if (intr->flags & INTR_FLAG_MSI_ENABLED) {
435 pci_disable_msi(adapter->pdev);
436 intr->flags &= ~INTR_FLAG_MSI_ENABLED;
437 }
438
439 if (intr->flags & INTR_FLAG_MSIX_ENABLED) {
440 pci_disable_msix(adapter->pdev);
441 intr->flags &= ~INTR_FLAG_MSIX_ENABLED;
442 }
443}
444
445static int lan743x_intr_open(struct lan743x_adapter *adapter)
446{
447 struct msix_entry msix_entries[LAN743X_MAX_VECTOR_COUNT];
448 struct lan743x_intr *intr = &adapter->intr;
449 u32 int_vec_en_auto_clr = 0;
450 u32 int_vec_map0 = 0;
451 u32 int_vec_map1 = 0;
452 int ret = -ENODEV;
453 int index = 0;
454 u32 flags = 0;
455
456 intr->number_of_vectors = 0;
457
458 /* Try to set up MSIX interrupts */
459 memset(&msix_entries[0], 0,
460 sizeof(struct msix_entry) * LAN743X_MAX_VECTOR_COUNT);
461 for (index = 0; index < LAN743X_MAX_VECTOR_COUNT; index++)
462 msix_entries[index].entry = index;
463 ret = pci_enable_msix_range(adapter->pdev,
464 msix_entries, 1,
465 1 + LAN743X_USED_TX_CHANNELS +
466 LAN743X_USED_RX_CHANNELS);
467
468 if (ret > 0) {
469 intr->flags |= INTR_FLAG_MSIX_ENABLED;
470 intr->number_of_vectors = ret;
471 intr->using_vectors = true;
472 for (index = 0; index < intr->number_of_vectors; index++)
473 intr->vector_list[index].irq = msix_entries
474 [index].vector;
475 netif_info(adapter, ifup, adapter->netdev,
476 "using MSIX interrupts, number of vectors = %d\n",
477 intr->number_of_vectors);
478 }
479
480 /* If MSIX failed try to setup using MSI interrupts */
481 if (!intr->number_of_vectors) {
482 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) {
483 if (!pci_enable_msi(adapter->pdev)) {
484 intr->flags |= INTR_FLAG_MSI_ENABLED;
485 intr->number_of_vectors = 1;
486 intr->using_vectors = true;
487 intr->vector_list[0].irq =
488 adapter->pdev->irq;
489 netif_info(adapter, ifup, adapter->netdev,
490 "using MSI interrupts, number of vectors = %d\n",
491 intr->number_of_vectors);
492 }
493 }
494 }
495
496 /* If MSIX, and MSI failed, setup using legacy interrupt */
497 if (!intr->number_of_vectors) {
498 intr->number_of_vectors = 1;
499 intr->using_vectors = false;
500 intr->vector_list[0].irq = intr->irq;
501 netif_info(adapter, ifup, adapter->netdev,
502 "using legacy interrupts\n");
503 }
504
505 /* At this point we must have at least one irq */
506 lan743x_csr_write(adapter, INT_VEC_EN_CLR, 0xFFFFFFFF);
507
508 /* map all interrupts to vector 0 */
509 lan743x_csr_write(adapter, INT_VEC_MAP0, 0x00000000);
510 lan743x_csr_write(adapter, INT_VEC_MAP1, 0x00000000);
511 lan743x_csr_write(adapter, INT_VEC_MAP2, 0x00000000);
512 flags = LAN743X_VECTOR_FLAG_SOURCE_STATUS_READ |
513 LAN743X_VECTOR_FLAG_SOURCE_STATUS_W2C |
514 LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CHECK |
515 LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CLEAR;
516
517 if (intr->using_vectors) {
518 flags |= LAN743X_VECTOR_FLAG_VECTOR_ENABLE_ISR_CLEAR |
519 LAN743X_VECTOR_FLAG_VECTOR_ENABLE_ISR_SET;
520 } else {
521 flags |= LAN743X_VECTOR_FLAG_MASTER_ENABLE_CLEAR |
522 LAN743X_VECTOR_FLAG_MASTER_ENABLE_SET |
523 LAN743X_VECTOR_FLAG_IRQ_SHARED;
524 }
525
526 if (adapter->csr.flags & LAN743X_CSR_FLAG_SUPPORTS_INTR_AUTO_SET_CLR) {
527 flags &= ~LAN743X_VECTOR_FLAG_SOURCE_STATUS_READ;
528 flags &= ~LAN743X_VECTOR_FLAG_SOURCE_STATUS_W2C;
529 flags &= ~LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CLEAR;
530 flags &= ~LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CHECK;
531 flags |= LAN743X_VECTOR_FLAG_SOURCE_STATUS_R2C;
532 flags |= LAN743X_VECTOR_FLAG_SOURCE_ENABLE_R2C;
533 }
534
535 ret = lan743x_intr_register_isr(adapter, 0, flags,
536 INT_BIT_ALL_RX_ | INT_BIT_ALL_TX_ |
537 INT_BIT_ALL_OTHER_,
538 lan743x_intr_shared_isr, adapter);
539 if (ret)
540 goto clean_up;
541 intr->flags |= INTR_FLAG_IRQ_REQUESTED(0);
542
543 if (intr->using_vectors)
544 lan743x_csr_write(adapter, INT_VEC_EN_SET,
545 INT_VEC_EN_(0));
546
547 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) {
548 lan743x_csr_write(adapter, INT_MOD_CFG0, LAN743X_INT_MOD);
549 lan743x_csr_write(adapter, INT_MOD_CFG1, LAN743X_INT_MOD);
550 lan743x_csr_write(adapter, INT_MOD_CFG2, LAN743X_INT_MOD);
551 lan743x_csr_write(adapter, INT_MOD_CFG3, LAN743X_INT_MOD);
552 lan743x_csr_write(adapter, INT_MOD_CFG4, LAN743X_INT_MOD);
553 lan743x_csr_write(adapter, INT_MOD_CFG5, LAN743X_INT_MOD);
554 lan743x_csr_write(adapter, INT_MOD_CFG6, LAN743X_INT_MOD);
555 lan743x_csr_write(adapter, INT_MOD_CFG7, LAN743X_INT_MOD);
556 lan743x_csr_write(adapter, INT_MOD_MAP0, 0x00005432);
557 lan743x_csr_write(adapter, INT_MOD_MAP1, 0x00000001);
558 lan743x_csr_write(adapter, INT_MOD_MAP2, 0x00FFFFFF);
559 }
560
561 /* enable interrupts */
562 lan743x_csr_write(adapter, INT_EN_SET, INT_BIT_MAS_);
563 ret = lan743x_intr_test_isr(adapter);
564 if (ret)
565 goto clean_up;
566
567 if (intr->number_of_vectors > 1) {
568 int number_of_tx_vectors = intr->number_of_vectors - 1;
569
570 if (number_of_tx_vectors > LAN743X_USED_TX_CHANNELS)
571 number_of_tx_vectors = LAN743X_USED_TX_CHANNELS;
572 flags = LAN743X_VECTOR_FLAG_SOURCE_STATUS_READ |
573 LAN743X_VECTOR_FLAG_SOURCE_STATUS_W2C |
574 LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CHECK |
575 LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CLEAR |
576 LAN743X_VECTOR_FLAG_VECTOR_ENABLE_ISR_CLEAR |
577 LAN743X_VECTOR_FLAG_VECTOR_ENABLE_ISR_SET;
578
579 if (adapter->csr.flags &
580 LAN743X_CSR_FLAG_SUPPORTS_INTR_AUTO_SET_CLR) {
581 flags = LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_CLEAR |
582 LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_SET |
583 LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_SET |
584 LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_CLEAR |
585 LAN743X_VECTOR_FLAG_SOURCE_STATUS_AUTO_CLEAR;
586 }
587
588 for (index = 0; index < number_of_tx_vectors; index++) {
589 u32 int_bit = INT_BIT_DMA_TX_(index);
590 int vector = index + 1;
591
592 /* map TX interrupt to vector */
593 int_vec_map1 |= INT_VEC_MAP1_TX_VEC_(index, vector);
594 lan743x_csr_write(adapter, INT_VEC_MAP1, int_vec_map1);
595 if (flags &
596 LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_CLEAR) {
597 int_vec_en_auto_clr |= INT_VEC_EN_(vector);
598 lan743x_csr_write(adapter, INT_VEC_EN_AUTO_CLR,
599 int_vec_en_auto_clr);
600 }
601
602 /* Remove TX interrupt from shared mask */
603 intr->vector_list[0].int_mask &= ~int_bit;
604 ret = lan743x_intr_register_isr(adapter, vector, flags,
605 int_bit, lan743x_tx_isr,
606 &adapter->tx[index]);
607 if (ret)
608 goto clean_up;
609 intr->flags |= INTR_FLAG_IRQ_REQUESTED(vector);
610 if (!(flags &
611 LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_SET))
612 lan743x_csr_write(adapter, INT_VEC_EN_SET,
613 INT_VEC_EN_(vector));
614 }
615 }
616 if ((intr->number_of_vectors - LAN743X_USED_TX_CHANNELS) > 1) {
617 int number_of_rx_vectors = intr->number_of_vectors -
618 LAN743X_USED_TX_CHANNELS - 1;
619
620 if (number_of_rx_vectors > LAN743X_USED_RX_CHANNELS)
621 number_of_rx_vectors = LAN743X_USED_RX_CHANNELS;
622
623 flags = LAN743X_VECTOR_FLAG_SOURCE_STATUS_READ |
624 LAN743X_VECTOR_FLAG_SOURCE_STATUS_W2C |
625 LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CHECK |
626 LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CLEAR |
627 LAN743X_VECTOR_FLAG_VECTOR_ENABLE_ISR_CLEAR |
628 LAN743X_VECTOR_FLAG_VECTOR_ENABLE_ISR_SET;
629
630 if (adapter->csr.flags &
631 LAN743X_CSR_FLAG_SUPPORTS_INTR_AUTO_SET_CLR) {
632 flags = LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_CLEAR |
633 LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_SET |
634 LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_SET |
635 LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_CLEAR |
636 LAN743X_VECTOR_FLAG_SOURCE_STATUS_AUTO_CLEAR;
637 }
638 for (index = 0; index < number_of_rx_vectors; index++) {
639 int vector = index + 1 + LAN743X_USED_TX_CHANNELS;
640 u32 int_bit = INT_BIT_DMA_RX_(index);
641
642 /* map RX interrupt to vector */
643 int_vec_map0 |= INT_VEC_MAP0_RX_VEC_(index, vector);
644 lan743x_csr_write(adapter, INT_VEC_MAP0, int_vec_map0);
645 if (flags &
646 LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_CLEAR) {
647 int_vec_en_auto_clr |= INT_VEC_EN_(vector);
648 lan743x_csr_write(adapter, INT_VEC_EN_AUTO_CLR,
649 int_vec_en_auto_clr);
650 }
651
652 /* Remove RX interrupt from shared mask */
653 intr->vector_list[0].int_mask &= ~int_bit;
654 ret = lan743x_intr_register_isr(adapter, vector, flags,
655 int_bit, lan743x_rx_isr,
656 &adapter->rx[index]);
657 if (ret)
658 goto clean_up;
659 intr->flags |= INTR_FLAG_IRQ_REQUESTED(vector);
660
661 lan743x_csr_write(adapter, INT_VEC_EN_SET,
662 INT_VEC_EN_(vector));
663 }
664 }
665 return 0;
666
667clean_up:
668 lan743x_intr_close(adapter);
669 return ret;
670}
671
672static int lan743x_dp_write(struct lan743x_adapter *adapter,
673 u32 select, u32 addr, u32 length, u32 *buf)
674{
675 int ret = -EIO;
676 u32 dp_sel;
677 int i;
678
679 mutex_lock(&adapter->dp_lock);
680 if (lan743x_csr_wait_for_bit(adapter, DP_SEL, DP_SEL_DPRDY_,
681 1, 40, 100, 100))
682 goto unlock;
683 dp_sel = lan743x_csr_read(adapter, DP_SEL);
684 dp_sel &= ~DP_SEL_MASK_;
685 dp_sel |= select;
686 lan743x_csr_write(adapter, DP_SEL, dp_sel);
687
688 for (i = 0; i < length; i++) {
689 lan743x_csr_write(adapter, DP_ADDR, addr + i);
690 lan743x_csr_write(adapter, DP_DATA_0, buf[i]);
691 lan743x_csr_write(adapter, DP_CMD, DP_CMD_WRITE_);
692 if (lan743x_csr_wait_for_bit(adapter, DP_SEL, DP_SEL_DPRDY_,
693 1, 40, 100, 100))
694 goto unlock;
695 }
696 ret = 0;
697
698unlock:
699 mutex_unlock(&adapter->dp_lock);
700 return ret;
701}
702
703static u32 lan743x_mac_mii_access(u16 id, u16 index, int read)
704{
705 u32 ret;
706
707 ret = (id << MAC_MII_ACC_PHY_ADDR_SHIFT_) &
708 MAC_MII_ACC_PHY_ADDR_MASK_;
709 ret |= (index << MAC_MII_ACC_MIIRINDA_SHIFT_) &
710 MAC_MII_ACC_MIIRINDA_MASK_;
711
712 if (read)
713 ret |= MAC_MII_ACC_MII_READ_;
714 else
715 ret |= MAC_MII_ACC_MII_WRITE_;
716 ret |= MAC_MII_ACC_MII_BUSY_;
717
718 return ret;
719}
720
721static int lan743x_mac_mii_wait_till_not_busy(struct lan743x_adapter *adapter)
722{
723 u32 data;
724
725 return readx_poll_timeout(LAN743X_CSR_READ_OP, MAC_MII_ACC, data,
726 !(data & MAC_MII_ACC_MII_BUSY_), 0, 1000000);
727}
728
729static int lan743x_mdiobus_read(struct mii_bus *bus, int phy_id, int index)
730{
731 struct lan743x_adapter *adapter = bus->priv;
732 u32 val, mii_access;
733 int ret;
734
735 /* comfirm MII not busy */
736 ret = lan743x_mac_mii_wait_till_not_busy(adapter);
737 if (ret < 0)
738 return ret;
739
740 /* set the address, index & direction (read from PHY) */
741 mii_access = lan743x_mac_mii_access(phy_id, index, MAC_MII_READ);
742 lan743x_csr_write(adapter, MAC_MII_ACC, mii_access);
743 ret = lan743x_mac_mii_wait_till_not_busy(adapter);
744 if (ret < 0)
745 return ret;
746
747 val = lan743x_csr_read(adapter, MAC_MII_DATA);
748 return (int)(val & 0xFFFF);
749}
750
751static int lan743x_mdiobus_write(struct mii_bus *bus,
752 int phy_id, int index, u16 regval)
753{
754 struct lan743x_adapter *adapter = bus->priv;
755 u32 val, mii_access;
756 int ret;
757
758 /* confirm MII not busy */
759 ret = lan743x_mac_mii_wait_till_not_busy(adapter);
760 if (ret < 0)
761 return ret;
762 val = (u32)regval;
763 lan743x_csr_write(adapter, MAC_MII_DATA, val);
764
765 /* set the address, index & direction (write to PHY) */
766 mii_access = lan743x_mac_mii_access(phy_id, index, MAC_MII_WRITE);
767 lan743x_csr_write(adapter, MAC_MII_ACC, mii_access);
768 ret = lan743x_mac_mii_wait_till_not_busy(adapter);
769 return ret;
770}
771
772static void lan743x_mac_set_address(struct lan743x_adapter *adapter,
773 u8 *addr)
774{
775 u32 addr_lo, addr_hi;
776
777 addr_lo = addr[0] |
778 addr[1] << 8 |
779 addr[2] << 16 |
780 addr[3] << 24;
781 addr_hi = addr[4] |
782 addr[5] << 8;
783 lan743x_csr_write(adapter, MAC_RX_ADDRL, addr_lo);
784 lan743x_csr_write(adapter, MAC_RX_ADDRH, addr_hi);
785
786 ether_addr_copy(adapter->mac_address, addr);
787 netif_info(adapter, drv, adapter->netdev,
788 "MAC address set to %pM\n", addr);
789}
790
791static int lan743x_mac_init(struct lan743x_adapter *adapter)
792{
793 bool mac_address_valid = true;
794 struct net_device *netdev;
795 u32 mac_addr_hi = 0;
796 u32 mac_addr_lo = 0;
797 u32 data;
798 int ret;
799
800 netdev = adapter->netdev;
801 lan743x_csr_write(adapter, MAC_CR, MAC_CR_RST_);
802 ret = lan743x_csr_wait_for_bit(adapter, MAC_CR, MAC_CR_RST_,
803 0, 1000, 20000, 100);
804 if (ret)
805 return ret;
806
807 /* setup auto duplex, and speed detection */
808 data = lan743x_csr_read(adapter, MAC_CR);
809 data |= MAC_CR_ADD_ | MAC_CR_ASD_;
810 data |= MAC_CR_CNTR_RST_;
811 lan743x_csr_write(adapter, MAC_CR, data);
812
813 mac_addr_hi = lan743x_csr_read(adapter, MAC_RX_ADDRH);
814 mac_addr_lo = lan743x_csr_read(adapter, MAC_RX_ADDRL);
815 adapter->mac_address[0] = mac_addr_lo & 0xFF;
816 adapter->mac_address[1] = (mac_addr_lo >> 8) & 0xFF;
817 adapter->mac_address[2] = (mac_addr_lo >> 16) & 0xFF;
818 adapter->mac_address[3] = (mac_addr_lo >> 24) & 0xFF;
819 adapter->mac_address[4] = mac_addr_hi & 0xFF;
820 adapter->mac_address[5] = (mac_addr_hi >> 8) & 0xFF;
821
822 if (((mac_addr_hi & 0x0000FFFF) == 0x0000FFFF) &&
823 mac_addr_lo == 0xFFFFFFFF) {
824 mac_address_valid = false;
825 } else if (!is_valid_ether_addr(adapter->mac_address)) {
826 mac_address_valid = false;
827 }
828
829 if (!mac_address_valid)
830 random_ether_addr(adapter->mac_address);
831 lan743x_mac_set_address(adapter, adapter->mac_address);
832 ether_addr_copy(netdev->dev_addr, adapter->mac_address);
833 return 0;
834}
835
836static int lan743x_mac_open(struct lan743x_adapter *adapter)
837{
838 int ret = 0;
839 u32 temp;
840
841 temp = lan743x_csr_read(adapter, MAC_RX);
842 lan743x_csr_write(adapter, MAC_RX, temp | MAC_RX_RXEN_);
843 temp = lan743x_csr_read(adapter, MAC_TX);
844 lan743x_csr_write(adapter, MAC_TX, temp | MAC_TX_TXEN_);
845 return ret;
846}
847
848static void lan743x_mac_close(struct lan743x_adapter *adapter)
849{
850 u32 temp;
851
852 temp = lan743x_csr_read(adapter, MAC_TX);
853 temp &= ~MAC_TX_TXEN_;
854 lan743x_csr_write(adapter, MAC_TX, temp);
855 lan743x_csr_wait_for_bit(adapter, MAC_TX, MAC_TX_TXD_,
856 1, 1000, 20000, 100);
857
858 temp = lan743x_csr_read(adapter, MAC_RX);
859 temp &= ~MAC_RX_RXEN_;
860 lan743x_csr_write(adapter, MAC_RX, temp);
861 lan743x_csr_wait_for_bit(adapter, MAC_RX, MAC_RX_RXD_,
862 1, 1000, 20000, 100);
863}
864
865static void lan743x_mac_flow_ctrl_set_enables(struct lan743x_adapter *adapter,
866 bool tx_enable, bool rx_enable)
867{
868 u32 flow_setting = 0;
869
870 /* set maximum pause time because when fifo space frees
871 * up a zero value pause frame will be sent to release the pause
872 */
873 flow_setting = MAC_FLOW_CR_FCPT_MASK_;
874 if (tx_enable)
875 flow_setting |= MAC_FLOW_CR_TX_FCEN_;
876 if (rx_enable)
877 flow_setting |= MAC_FLOW_CR_RX_FCEN_;
878 lan743x_csr_write(adapter, MAC_FLOW, flow_setting);
879}
880
881static int lan743x_mac_set_mtu(struct lan743x_adapter *adapter, int new_mtu)
882{
883 int enabled = 0;
884 u32 mac_rx = 0;
885
886 mac_rx = lan743x_csr_read(adapter, MAC_RX);
887 if (mac_rx & MAC_RX_RXEN_) {
888 enabled = 1;
889 if (mac_rx & MAC_RX_RXD_) {
890 lan743x_csr_write(adapter, MAC_RX, mac_rx);
891 mac_rx &= ~MAC_RX_RXD_;
892 }
893 mac_rx &= ~MAC_RX_RXEN_;
894 lan743x_csr_write(adapter, MAC_RX, mac_rx);
895 lan743x_csr_wait_for_bit(adapter, MAC_RX, MAC_RX_RXD_,
896 1, 1000, 20000, 100);
897 lan743x_csr_write(adapter, MAC_RX, mac_rx | MAC_RX_RXD_);
898 }
899
900 mac_rx &= ~(MAC_RX_MAX_SIZE_MASK_);
901 mac_rx |= (((new_mtu + ETH_HLEN + 4) << MAC_RX_MAX_SIZE_SHIFT_) &
902 MAC_RX_MAX_SIZE_MASK_);
903 lan743x_csr_write(adapter, MAC_RX, mac_rx);
904
905 if (enabled) {
906 mac_rx |= MAC_RX_RXEN_;
907 lan743x_csr_write(adapter, MAC_RX, mac_rx);
908 }
909 return 0;
910}
911
912/* PHY */
913static int lan743x_phy_reset(struct lan743x_adapter *adapter)
914{
915 u32 data;
916
917 /* Only called with in probe, and before mdiobus_register */
918
919 data = lan743x_csr_read(adapter, PMT_CTL);
920 data |= PMT_CTL_ETH_PHY_RST_;
921 lan743x_csr_write(adapter, PMT_CTL, data);
922
923 return readx_poll_timeout(LAN743X_CSR_READ_OP, PMT_CTL, data,
924 (!(data & PMT_CTL_ETH_PHY_RST_) &&
925 (data & PMT_CTL_READY_)),
926 50000, 1000000);
927}
928
929static void lan743x_phy_update_flowcontrol(struct lan743x_adapter *adapter,
930 u8 duplex, u16 local_adv,
931 u16 remote_adv)
932{
933 struct lan743x_phy *phy = &adapter->phy;
934 u8 cap;
935
936 if (phy->fc_autoneg)
937 cap = mii_resolve_flowctrl_fdx(local_adv, remote_adv);
938 else
939 cap = phy->fc_request_control;
940
941 lan743x_mac_flow_ctrl_set_enables(adapter,
942 cap & FLOW_CTRL_TX,
943 cap & FLOW_CTRL_RX);
944}
945
946static int lan743x_phy_init(struct lan743x_adapter *adapter)
947{
Colin Ian King8e8af972018-03-11 17:42:33 +0100948 return lan743x_phy_reset(adapter);
Bryan Whitehead23f07032018-03-05 14:23:30 -0500949}
950
951static void lan743x_phy_link_status_change(struct net_device *netdev)
952{
953 struct lan743x_adapter *adapter = netdev_priv(netdev);
954 struct phy_device *phydev = netdev->phydev;
955
956 phy_print_status(phydev);
957 if (phydev->state == PHY_RUNNING) {
958 struct ethtool_link_ksettings ksettings;
Bryan Whitehead23f07032018-03-05 14:23:30 -0500959 int remote_advertisement = 0;
960 int local_advertisement = 0;
961
Bryan Whitehead23f07032018-03-05 14:23:30 -0500962 memset(&ksettings, 0, sizeof(ksettings));
963 phy_ethtool_get_link_ksettings(netdev, &ksettings);
964 local_advertisement = phy_read(phydev, MII_ADVERTISE);
965 if (local_advertisement < 0)
966 return;
967
968 remote_advertisement = phy_read(phydev, MII_LPA);
969 if (remote_advertisement < 0)
970 return;
971
972 lan743x_phy_update_flowcontrol(adapter,
973 ksettings.base.duplex,
974 local_advertisement,
975 remote_advertisement);
976 }
977}
978
979static void lan743x_phy_close(struct lan743x_adapter *adapter)
980{
981 struct net_device *netdev = adapter->netdev;
982
983 phy_stop(netdev->phydev);
984 phy_disconnect(netdev->phydev);
985 netdev->phydev = NULL;
986}
987
988static int lan743x_phy_open(struct lan743x_adapter *adapter)
989{
990 struct lan743x_phy *phy = &adapter->phy;
991 struct phy_device *phydev;
992 struct net_device *netdev;
993 int ret = -EIO;
994 u32 mii_adv;
995
996 netdev = adapter->netdev;
997 phydev = phy_find_first(adapter->mdiobus);
998 if (!phydev)
999 goto return_error;
1000
1001 ret = phy_connect_direct(netdev, phydev,
1002 lan743x_phy_link_status_change,
1003 PHY_INTERFACE_MODE_GMII);
1004 if (ret)
1005 goto return_error;
1006
1007 /* MAC doesn't support 1000T Half */
1008 phydev->supported &= ~SUPPORTED_1000baseT_Half;
1009
1010 /* support both flow controls */
1011 phy->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX);
1012 phydev->advertising &= ~(ADVERTISED_Pause | ADVERTISED_Asym_Pause);
1013 mii_adv = (u32)mii_advertise_flowctrl(phy->fc_request_control);
1014 phydev->advertising |= mii_adv_to_ethtool_adv_t(mii_adv);
1015 phy->fc_autoneg = phydev->autoneg;
1016
1017 phy_start(phydev);
1018 phy_start_aneg(phydev);
1019 return 0;
1020
1021return_error:
1022 return ret;
1023}
1024
1025static void lan743x_rfe_update_mac_address(struct lan743x_adapter *adapter)
1026{
1027 u8 *mac_addr;
1028 u32 mac_addr_hi = 0;
1029 u32 mac_addr_lo = 0;
1030
1031 /* Add mac address to perfect Filter */
1032 mac_addr = adapter->mac_address;
1033 mac_addr_lo = ((((u32)(mac_addr[0])) << 0) |
1034 (((u32)(mac_addr[1])) << 8) |
1035 (((u32)(mac_addr[2])) << 16) |
1036 (((u32)(mac_addr[3])) << 24));
1037 mac_addr_hi = ((((u32)(mac_addr[4])) << 0) |
1038 (((u32)(mac_addr[5])) << 8));
1039
1040 lan743x_csr_write(adapter, RFE_ADDR_FILT_LO(0), mac_addr_lo);
1041 lan743x_csr_write(adapter, RFE_ADDR_FILT_HI(0),
1042 mac_addr_hi | RFE_ADDR_FILT_HI_VALID_);
1043}
1044
1045static void lan743x_rfe_set_multicast(struct lan743x_adapter *adapter)
1046{
1047 struct net_device *netdev = adapter->netdev;
1048 u32 hash_table[DP_SEL_VHF_HASH_LEN];
1049 u32 rfctl;
1050 u32 data;
1051
1052 rfctl = lan743x_csr_read(adapter, RFE_CTL);
1053 rfctl &= ~(RFE_CTL_AU_ | RFE_CTL_AM_ |
1054 RFE_CTL_DA_PERFECT_ | RFE_CTL_MCAST_HASH_);
1055 rfctl |= RFE_CTL_AB_;
1056 if (netdev->flags & IFF_PROMISC) {
1057 rfctl |= RFE_CTL_AM_ | RFE_CTL_AU_;
1058 } else {
1059 if (netdev->flags & IFF_ALLMULTI)
1060 rfctl |= RFE_CTL_AM_;
1061 }
1062
1063 memset(hash_table, 0, DP_SEL_VHF_HASH_LEN * sizeof(u32));
1064 if (netdev_mc_count(netdev)) {
1065 struct netdev_hw_addr *ha;
1066 int i;
1067
1068 rfctl |= RFE_CTL_DA_PERFECT_;
1069 i = 1;
1070 netdev_for_each_mc_addr(ha, netdev) {
1071 /* set first 32 into Perfect Filter */
1072 if (i < 33) {
1073 lan743x_csr_write(adapter,
1074 RFE_ADDR_FILT_HI(i), 0);
1075 data = ha->addr[3];
1076 data = ha->addr[2] | (data << 8);
1077 data = ha->addr[1] | (data << 8);
1078 data = ha->addr[0] | (data << 8);
1079 lan743x_csr_write(adapter,
1080 RFE_ADDR_FILT_LO(i), data);
1081 data = ha->addr[5];
1082 data = ha->addr[4] | (data << 8);
1083 data |= RFE_ADDR_FILT_HI_VALID_;
1084 lan743x_csr_write(adapter,
1085 RFE_ADDR_FILT_HI(i), data);
1086 } else {
1087 u32 bitnum = (ether_crc(ETH_ALEN, ha->addr) >>
1088 23) & 0x1FF;
1089 hash_table[bitnum / 32] |= (1 << (bitnum % 32));
1090 rfctl |= RFE_CTL_MCAST_HASH_;
1091 }
1092 i++;
1093 }
1094 }
1095
1096 lan743x_dp_write(adapter, DP_SEL_RFE_RAM,
1097 DP_SEL_VHF_VLAN_LEN,
1098 DP_SEL_VHF_HASH_LEN, hash_table);
1099 lan743x_csr_write(adapter, RFE_CTL, rfctl);
1100}
1101
1102static int lan743x_dmac_init(struct lan743x_adapter *adapter)
1103{
1104 u32 data = 0;
1105
1106 lan743x_csr_write(adapter, DMAC_CMD, DMAC_CMD_SWR_);
1107 lan743x_csr_wait_for_bit(adapter, DMAC_CMD, DMAC_CMD_SWR_,
1108 0, 1000, 20000, 100);
1109 switch (DEFAULT_DMA_DESCRIPTOR_SPACING) {
1110 case DMA_DESCRIPTOR_SPACING_16:
1111 data = DMAC_CFG_MAX_DSPACE_16_;
1112 break;
1113 case DMA_DESCRIPTOR_SPACING_32:
1114 data = DMAC_CFG_MAX_DSPACE_32_;
1115 break;
1116 case DMA_DESCRIPTOR_SPACING_64:
1117 data = DMAC_CFG_MAX_DSPACE_64_;
1118 break;
1119 case DMA_DESCRIPTOR_SPACING_128:
1120 data = DMAC_CFG_MAX_DSPACE_128_;
1121 break;
1122 default:
1123 return -EPERM;
1124 }
1125 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0))
1126 data |= DMAC_CFG_COAL_EN_;
1127 data |= DMAC_CFG_CH_ARB_SEL_RX_HIGH_;
1128 data |= DMAC_CFG_MAX_READ_REQ_SET_(6);
1129 lan743x_csr_write(adapter, DMAC_CFG, data);
1130 data = DMAC_COAL_CFG_TIMER_LIMIT_SET_(1);
1131 data |= DMAC_COAL_CFG_TIMER_TX_START_;
1132 data |= DMAC_COAL_CFG_FLUSH_INTS_;
1133 data |= DMAC_COAL_CFG_INT_EXIT_COAL_;
1134 data |= DMAC_COAL_CFG_CSR_EXIT_COAL_;
1135 data |= DMAC_COAL_CFG_TX_THRES_SET_(0x0A);
1136 data |= DMAC_COAL_CFG_RX_THRES_SET_(0x0C);
1137 lan743x_csr_write(adapter, DMAC_COAL_CFG, data);
1138 data = DMAC_OBFF_TX_THRES_SET_(0x08);
1139 data |= DMAC_OBFF_RX_THRES_SET_(0x0A);
1140 lan743x_csr_write(adapter, DMAC_OBFF_CFG, data);
1141 return 0;
1142}
1143
1144static int lan743x_dmac_tx_get_state(struct lan743x_adapter *adapter,
1145 int tx_channel)
1146{
1147 u32 dmac_cmd = 0;
1148
1149 dmac_cmd = lan743x_csr_read(adapter, DMAC_CMD);
1150 return DMAC_CHANNEL_STATE_SET((dmac_cmd &
1151 DMAC_CMD_START_T_(tx_channel)),
1152 (dmac_cmd &
1153 DMAC_CMD_STOP_T_(tx_channel)));
1154}
1155
1156static int lan743x_dmac_tx_wait_till_stopped(struct lan743x_adapter *adapter,
1157 int tx_channel)
1158{
1159 int timeout = 100;
1160 int result = 0;
1161
1162 while (timeout &&
1163 ((result = lan743x_dmac_tx_get_state(adapter, tx_channel)) ==
1164 DMAC_CHANNEL_STATE_STOP_PENDING)) {
1165 usleep_range(1000, 20000);
1166 timeout--;
1167 }
1168 if (result == DMAC_CHANNEL_STATE_STOP_PENDING)
1169 result = -ENODEV;
1170 return result;
1171}
1172
1173static int lan743x_dmac_rx_get_state(struct lan743x_adapter *adapter,
1174 int rx_channel)
1175{
1176 u32 dmac_cmd = 0;
1177
1178 dmac_cmd = lan743x_csr_read(adapter, DMAC_CMD);
1179 return DMAC_CHANNEL_STATE_SET((dmac_cmd &
1180 DMAC_CMD_START_R_(rx_channel)),
1181 (dmac_cmd &
1182 DMAC_CMD_STOP_R_(rx_channel)));
1183}
1184
1185static int lan743x_dmac_rx_wait_till_stopped(struct lan743x_adapter *adapter,
1186 int rx_channel)
1187{
1188 int timeout = 100;
1189 int result = 0;
1190
1191 while (timeout &&
1192 ((result = lan743x_dmac_rx_get_state(adapter, rx_channel)) ==
1193 DMAC_CHANNEL_STATE_STOP_PENDING)) {
1194 usleep_range(1000, 20000);
1195 timeout--;
1196 }
1197 if (result == DMAC_CHANNEL_STATE_STOP_PENDING)
1198 result = -ENODEV;
1199 return result;
1200}
1201
1202static void lan743x_tx_release_desc(struct lan743x_tx *tx,
1203 int descriptor_index, bool cleanup)
1204{
1205 struct lan743x_tx_buffer_info *buffer_info = NULL;
1206 struct lan743x_tx_descriptor *descriptor = NULL;
1207 u32 descriptor_type = 0;
1208
1209 descriptor = &tx->ring_cpu_ptr[descriptor_index];
1210 buffer_info = &tx->buffer_info[descriptor_index];
1211 if (!(buffer_info->flags & TX_BUFFER_INFO_FLAG_ACTIVE))
1212 goto done;
1213
1214 descriptor_type = (descriptor->data0) &
1215 TX_DESC_DATA0_DTYPE_MASK_;
1216 if (descriptor_type == TX_DESC_DATA0_DTYPE_DATA_)
1217 goto clean_up_data_descriptor;
1218 else
1219 goto clear_active;
1220
1221clean_up_data_descriptor:
1222 if (buffer_info->dma_ptr) {
1223 if (buffer_info->flags &
1224 TX_BUFFER_INFO_FLAG_SKB_FRAGMENT) {
1225 dma_unmap_page(&tx->adapter->pdev->dev,
1226 buffer_info->dma_ptr,
1227 buffer_info->buffer_length,
1228 DMA_TO_DEVICE);
1229 } else {
1230 dma_unmap_single(&tx->adapter->pdev->dev,
1231 buffer_info->dma_ptr,
1232 buffer_info->buffer_length,
1233 DMA_TO_DEVICE);
1234 }
1235 buffer_info->dma_ptr = 0;
1236 buffer_info->buffer_length = 0;
1237 }
1238 if (buffer_info->skb) {
1239 dev_kfree_skb(buffer_info->skb);
1240 buffer_info->skb = NULL;
1241 }
1242
1243clear_active:
1244 buffer_info->flags &= ~TX_BUFFER_INFO_FLAG_ACTIVE;
1245
1246done:
1247 memset(buffer_info, 0, sizeof(*buffer_info));
1248 memset(descriptor, 0, sizeof(*descriptor));
1249}
1250
1251static int lan743x_tx_next_index(struct lan743x_tx *tx, int index)
1252{
1253 return ((++index) % tx->ring_size);
1254}
1255
1256static void lan743x_tx_release_completed_descriptors(struct lan743x_tx *tx)
1257{
1258 while ((*tx->head_cpu_ptr) != (tx->last_head)) {
1259 lan743x_tx_release_desc(tx, tx->last_head, false);
1260 tx->last_head = lan743x_tx_next_index(tx, tx->last_head);
1261 }
1262}
1263
1264static void lan743x_tx_release_all_descriptors(struct lan743x_tx *tx)
1265{
1266 u32 original_head = 0;
1267
1268 original_head = tx->last_head;
1269 do {
1270 lan743x_tx_release_desc(tx, tx->last_head, true);
1271 tx->last_head = lan743x_tx_next_index(tx, tx->last_head);
1272 } while (tx->last_head != original_head);
1273 memset(tx->ring_cpu_ptr, 0,
1274 sizeof(*tx->ring_cpu_ptr) * (tx->ring_size));
1275 memset(tx->buffer_info, 0,
1276 sizeof(*tx->buffer_info) * (tx->ring_size));
1277}
1278
1279static int lan743x_tx_get_desc_cnt(struct lan743x_tx *tx,
1280 struct sk_buff *skb)
1281{
1282 int result = 1; /* 1 for the main skb buffer */
1283 int nr_frags = 0;
1284
1285 if (skb_is_gso(skb))
1286 result++; /* requires an extension descriptor */
1287 nr_frags = skb_shinfo(skb)->nr_frags;
1288 result += nr_frags; /* 1 for each fragment buffer */
1289 return result;
1290}
1291
1292static int lan743x_tx_get_avail_desc(struct lan743x_tx *tx)
1293{
1294 int last_head = tx->last_head;
1295 int last_tail = tx->last_tail;
1296
1297 if (last_tail >= last_head)
1298 return tx->ring_size - last_tail + last_head - 1;
1299 else
1300 return last_head - last_tail - 1;
1301}
1302
1303static int lan743x_tx_frame_start(struct lan743x_tx *tx,
1304 unsigned char *first_buffer,
1305 unsigned int first_buffer_length,
1306 unsigned int frame_length,
1307 bool check_sum)
1308{
1309 /* called only from within lan743x_tx_xmit_frame.
1310 * assuming tx->ring_lock has already been acquired.
1311 */
1312 struct lan743x_tx_descriptor *tx_descriptor = NULL;
1313 struct lan743x_tx_buffer_info *buffer_info = NULL;
1314 struct lan743x_adapter *adapter = tx->adapter;
1315 struct device *dev = &adapter->pdev->dev;
1316 dma_addr_t dma_ptr;
1317
1318 tx->frame_flags |= TX_FRAME_FLAG_IN_PROGRESS;
1319 tx->frame_first = tx->last_tail;
1320 tx->frame_tail = tx->frame_first;
1321
1322 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail];
1323 buffer_info = &tx->buffer_info[tx->frame_tail];
1324 dma_ptr = dma_map_single(dev, first_buffer, first_buffer_length,
1325 DMA_TO_DEVICE);
1326 if (dma_mapping_error(dev, dma_ptr))
1327 return -ENOMEM;
1328
1329 tx_descriptor->data1 = DMA_ADDR_LOW32(dma_ptr);
1330 tx_descriptor->data2 = DMA_ADDR_HIGH32(dma_ptr);
1331 tx_descriptor->data3 = (frame_length << 16) &
1332 TX_DESC_DATA3_FRAME_LENGTH_MSS_MASK_;
1333
1334 buffer_info->skb = NULL;
1335 buffer_info->dma_ptr = dma_ptr;
1336 buffer_info->buffer_length = first_buffer_length;
1337 buffer_info->flags |= TX_BUFFER_INFO_FLAG_ACTIVE;
1338
1339 tx->frame_data0 = (first_buffer_length &
1340 TX_DESC_DATA0_BUF_LENGTH_MASK_) |
1341 TX_DESC_DATA0_DTYPE_DATA_ |
1342 TX_DESC_DATA0_FS_ |
1343 TX_DESC_DATA0_FCS_;
1344
1345 if (check_sum)
1346 tx->frame_data0 |= TX_DESC_DATA0_ICE_ |
1347 TX_DESC_DATA0_IPE_ |
1348 TX_DESC_DATA0_TPE_;
1349
1350 /* data0 will be programmed in one of other frame assembler functions */
1351 return 0;
1352}
1353
1354static void lan743x_tx_frame_add_lso(struct lan743x_tx *tx,
1355 unsigned int frame_length)
1356{
1357 /* called only from within lan743x_tx_xmit_frame.
1358 * assuming tx->ring_lock has already been acquired.
1359 */
1360 struct lan743x_tx_descriptor *tx_descriptor = NULL;
1361 struct lan743x_tx_buffer_info *buffer_info = NULL;
1362
1363 /* wrap up previous descriptor */
1364 tx->frame_data0 |= TX_DESC_DATA0_EXT_;
1365 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail];
1366 tx_descriptor->data0 = tx->frame_data0;
1367
1368 /* move to next descriptor */
1369 tx->frame_tail = lan743x_tx_next_index(tx, tx->frame_tail);
1370 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail];
1371 buffer_info = &tx->buffer_info[tx->frame_tail];
1372
1373 /* add extension descriptor */
1374 tx_descriptor->data1 = 0;
1375 tx_descriptor->data2 = 0;
1376 tx_descriptor->data3 = 0;
1377
1378 buffer_info->skb = NULL;
1379 buffer_info->dma_ptr = 0;
1380 buffer_info->buffer_length = 0;
1381 buffer_info->flags |= TX_BUFFER_INFO_FLAG_ACTIVE;
1382
1383 tx->frame_data0 = (frame_length & TX_DESC_DATA0_EXT_PAY_LENGTH_MASK_) |
1384 TX_DESC_DATA0_DTYPE_EXT_ |
1385 TX_DESC_DATA0_EXT_LSO_;
1386
1387 /* data0 will be programmed in one of other frame assembler functions */
1388}
1389
1390static int lan743x_tx_frame_add_fragment(struct lan743x_tx *tx,
1391 const struct skb_frag_struct *fragment,
1392 unsigned int frame_length)
1393{
1394 /* called only from within lan743x_tx_xmit_frame
1395 * assuming tx->ring_lock has already been acquired
1396 */
1397 struct lan743x_tx_descriptor *tx_descriptor = NULL;
1398 struct lan743x_tx_buffer_info *buffer_info = NULL;
1399 struct lan743x_adapter *adapter = tx->adapter;
1400 struct device *dev = &adapter->pdev->dev;
1401 unsigned int fragment_length = 0;
1402 dma_addr_t dma_ptr;
1403
1404 fragment_length = skb_frag_size(fragment);
1405 if (!fragment_length)
1406 return 0;
1407
1408 /* wrap up previous descriptor */
1409 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail];
1410 tx_descriptor->data0 = tx->frame_data0;
1411
1412 /* move to next descriptor */
1413 tx->frame_tail = lan743x_tx_next_index(tx, tx->frame_tail);
1414 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail];
1415 buffer_info = &tx->buffer_info[tx->frame_tail];
1416 dma_ptr = skb_frag_dma_map(dev, fragment,
1417 0, fragment_length,
1418 DMA_TO_DEVICE);
1419 if (dma_mapping_error(dev, dma_ptr)) {
1420 int desc_index;
1421
1422 /* cleanup all previously setup descriptors */
1423 desc_index = tx->frame_first;
1424 while (desc_index != tx->frame_tail) {
1425 lan743x_tx_release_desc(tx, desc_index, true);
1426 desc_index = lan743x_tx_next_index(tx, desc_index);
1427 }
1428 dma_wmb();
1429 tx->frame_flags &= ~TX_FRAME_FLAG_IN_PROGRESS;
1430 tx->frame_first = 0;
1431 tx->frame_data0 = 0;
1432 tx->frame_tail = 0;
1433 return -ENOMEM;
1434 }
1435
1436 tx_descriptor->data1 = DMA_ADDR_LOW32(dma_ptr);
1437 tx_descriptor->data2 = DMA_ADDR_HIGH32(dma_ptr);
1438 tx_descriptor->data3 = (frame_length << 16) &
1439 TX_DESC_DATA3_FRAME_LENGTH_MSS_MASK_;
1440
1441 buffer_info->skb = NULL;
1442 buffer_info->dma_ptr = dma_ptr;
1443 buffer_info->buffer_length = fragment_length;
1444 buffer_info->flags |= TX_BUFFER_INFO_FLAG_ACTIVE;
1445 buffer_info->flags |= TX_BUFFER_INFO_FLAG_SKB_FRAGMENT;
1446
1447 tx->frame_data0 = (fragment_length & TX_DESC_DATA0_BUF_LENGTH_MASK_) |
1448 TX_DESC_DATA0_DTYPE_DATA_ |
1449 TX_DESC_DATA0_FCS_;
1450
1451 /* data0 will be programmed in one of other frame assembler functions */
1452 return 0;
1453}
1454
1455static void lan743x_tx_frame_end(struct lan743x_tx *tx,
1456 struct sk_buff *skb,
1457 bool ignore_sync)
1458{
1459 /* called only from within lan743x_tx_xmit_frame
1460 * assuming tx->ring_lock has already been acquired
1461 */
1462 struct lan743x_tx_descriptor *tx_descriptor = NULL;
1463 struct lan743x_tx_buffer_info *buffer_info = NULL;
1464 struct lan743x_adapter *adapter = tx->adapter;
1465 u32 tx_tail_flags = 0;
1466
1467 /* wrap up previous descriptor */
1468 tx->frame_data0 |= TX_DESC_DATA0_LS_;
1469 tx->frame_data0 |= TX_DESC_DATA0_IOC_;
1470
1471 tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail];
1472 buffer_info = &tx->buffer_info[tx->frame_tail];
1473 buffer_info->skb = skb;
1474 if (ignore_sync)
1475 buffer_info->flags |= TX_BUFFER_INFO_FLAG_IGNORE_SYNC;
1476
1477 tx_descriptor->data0 = tx->frame_data0;
1478 tx->frame_tail = lan743x_tx_next_index(tx, tx->frame_tail);
1479 tx->last_tail = tx->frame_tail;
1480
1481 dma_wmb();
1482
1483 if (tx->vector_flags & LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_SET)
1484 tx_tail_flags |= TX_TAIL_SET_TOP_INT_VEC_EN_;
1485 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_SET)
1486 tx_tail_flags |= TX_TAIL_SET_DMAC_INT_EN_ |
1487 TX_TAIL_SET_TOP_INT_EN_;
1488
1489 lan743x_csr_write(adapter, TX_TAIL(tx->channel_number),
1490 tx_tail_flags | tx->frame_tail);
1491 tx->frame_flags &= ~TX_FRAME_FLAG_IN_PROGRESS;
1492}
1493
1494static netdev_tx_t lan743x_tx_xmit_frame(struct lan743x_tx *tx,
1495 struct sk_buff *skb)
1496{
1497 int required_number_of_descriptors = 0;
1498 unsigned int start_frame_length = 0;
1499 unsigned int frame_length = 0;
1500 unsigned int head_length = 0;
1501 unsigned long irq_flags = 0;
1502 bool ignore_sync = false;
1503 int nr_frags = 0;
1504 bool gso = false;
1505 int j;
1506
1507 required_number_of_descriptors = lan743x_tx_get_desc_cnt(tx, skb);
1508
1509 spin_lock_irqsave(&tx->ring_lock, irq_flags);
1510 if (required_number_of_descriptors >
1511 lan743x_tx_get_avail_desc(tx)) {
1512 if (required_number_of_descriptors > (tx->ring_size - 1)) {
1513 dev_kfree_skb(skb);
1514 } else {
1515 /* save to overflow buffer */
1516 tx->overflow_skb = skb;
1517 netif_stop_queue(tx->adapter->netdev);
1518 }
1519 goto unlock;
1520 }
1521
1522 /* space available, transmit skb */
1523 head_length = skb_headlen(skb);
1524 frame_length = skb_pagelen(skb);
1525 nr_frags = skb_shinfo(skb)->nr_frags;
1526 start_frame_length = frame_length;
1527 gso = skb_is_gso(skb);
1528 if (gso) {
1529 start_frame_length = max(skb_shinfo(skb)->gso_size,
1530 (unsigned short)8);
1531 }
1532
1533 if (lan743x_tx_frame_start(tx,
1534 skb->data, head_length,
1535 start_frame_length,
1536 skb->ip_summed == CHECKSUM_PARTIAL)) {
1537 dev_kfree_skb(skb);
1538 goto unlock;
1539 }
1540
1541 if (gso)
1542 lan743x_tx_frame_add_lso(tx, frame_length);
1543
1544 if (nr_frags <= 0)
1545 goto finish;
1546
1547 for (j = 0; j < nr_frags; j++) {
1548 const struct skb_frag_struct *frag;
1549
1550 frag = &(skb_shinfo(skb)->frags[j]);
1551 if (lan743x_tx_frame_add_fragment(tx, frag, frame_length)) {
1552 /* upon error no need to call
1553 * lan743x_tx_frame_end
1554 * frame assembler clean up was performed inside
1555 * lan743x_tx_frame_add_fragment
1556 */
1557 dev_kfree_skb(skb);
1558 goto unlock;
1559 }
1560 }
1561
1562finish:
1563 lan743x_tx_frame_end(tx, skb, ignore_sync);
1564
1565unlock:
1566 spin_unlock_irqrestore(&tx->ring_lock, irq_flags);
1567 return NETDEV_TX_OK;
1568}
1569
1570static int lan743x_tx_napi_poll(struct napi_struct *napi, int weight)
1571{
1572 struct lan743x_tx *tx = container_of(napi, struct lan743x_tx, napi);
1573 struct lan743x_adapter *adapter = tx->adapter;
1574 bool start_transmitter = false;
1575 unsigned long irq_flags = 0;
1576 u32 ioc_bit = 0;
1577 u32 int_sts = 0;
1578
Bryan Whitehead23f07032018-03-05 14:23:30 -05001579 ioc_bit = DMAC_INT_BIT_TX_IOC_(tx->channel_number);
1580 int_sts = lan743x_csr_read(adapter, DMAC_INT_STS);
1581 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_W2C)
1582 lan743x_csr_write(adapter, DMAC_INT_STS, ioc_bit);
1583 spin_lock_irqsave(&tx->ring_lock, irq_flags);
1584
1585 /* clean up tx ring */
1586 lan743x_tx_release_completed_descriptors(tx);
1587 if (netif_queue_stopped(adapter->netdev)) {
1588 if (tx->overflow_skb) {
1589 if (lan743x_tx_get_desc_cnt(tx, tx->overflow_skb) <=
1590 lan743x_tx_get_avail_desc(tx))
1591 start_transmitter = true;
1592 } else {
1593 netif_wake_queue(adapter->netdev);
1594 }
1595 }
1596 spin_unlock_irqrestore(&tx->ring_lock, irq_flags);
1597
1598 if (start_transmitter) {
1599 /* space is now available, transmit overflow skb */
1600 lan743x_tx_xmit_frame(tx, tx->overflow_skb);
1601 tx->overflow_skb = NULL;
1602 netif_wake_queue(adapter->netdev);
1603 }
1604
1605 if (!napi_complete_done(napi, weight))
1606 goto done;
1607
1608 /* enable isr */
1609 lan743x_csr_write(adapter, INT_EN_SET,
1610 INT_BIT_DMA_TX_(tx->channel_number));
1611 lan743x_csr_read(adapter, INT_STS);
1612
1613done:
1614 return weight;
1615}
1616
1617static void lan743x_tx_ring_cleanup(struct lan743x_tx *tx)
1618{
1619 if (tx->head_cpu_ptr) {
1620 pci_free_consistent(tx->adapter->pdev,
1621 sizeof(*tx->head_cpu_ptr),
1622 (void *)(tx->head_cpu_ptr),
1623 tx->head_dma_ptr);
1624 tx->head_cpu_ptr = NULL;
1625 tx->head_dma_ptr = 0;
1626 }
1627 kfree(tx->buffer_info);
1628 tx->buffer_info = NULL;
1629
1630 if (tx->ring_cpu_ptr) {
1631 pci_free_consistent(tx->adapter->pdev,
1632 tx->ring_allocation_size,
1633 tx->ring_cpu_ptr,
1634 tx->ring_dma_ptr);
1635 tx->ring_allocation_size = 0;
1636 tx->ring_cpu_ptr = NULL;
1637 tx->ring_dma_ptr = 0;
1638 }
1639 tx->ring_size = 0;
1640}
1641
1642static int lan743x_tx_ring_init(struct lan743x_tx *tx)
1643{
1644 size_t ring_allocation_size = 0;
1645 void *cpu_ptr = NULL;
1646 dma_addr_t dma_ptr;
1647 int ret = -ENOMEM;
1648
1649 tx->ring_size = LAN743X_TX_RING_SIZE;
1650 if (tx->ring_size & ~TX_CFG_B_TX_RING_LEN_MASK_) {
1651 ret = -EINVAL;
1652 goto cleanup;
1653 }
1654 ring_allocation_size = ALIGN(tx->ring_size *
1655 sizeof(struct lan743x_tx_descriptor),
1656 PAGE_SIZE);
1657 dma_ptr = 0;
1658 cpu_ptr = pci_zalloc_consistent(tx->adapter->pdev,
1659 ring_allocation_size, &dma_ptr);
1660 if (!cpu_ptr) {
1661 ret = -ENOMEM;
1662 goto cleanup;
1663 }
1664
1665 tx->ring_allocation_size = ring_allocation_size;
1666 tx->ring_cpu_ptr = (struct lan743x_tx_descriptor *)cpu_ptr;
1667 tx->ring_dma_ptr = dma_ptr;
1668
1669 cpu_ptr = kcalloc(tx->ring_size, sizeof(*tx->buffer_info), GFP_KERNEL);
1670 if (!cpu_ptr) {
1671 ret = -ENOMEM;
1672 goto cleanup;
1673 }
1674 tx->buffer_info = (struct lan743x_tx_buffer_info *)cpu_ptr;
1675 dma_ptr = 0;
1676 cpu_ptr = pci_zalloc_consistent(tx->adapter->pdev,
1677 sizeof(*tx->head_cpu_ptr), &dma_ptr);
1678 if (!cpu_ptr) {
1679 ret = -ENOMEM;
1680 goto cleanup;
1681 }
1682
1683 tx->head_cpu_ptr = cpu_ptr;
1684 tx->head_dma_ptr = dma_ptr;
1685 if (tx->head_dma_ptr & 0x3) {
1686 ret = -ENOMEM;
1687 goto cleanup;
1688 }
1689
1690 return 0;
1691
1692cleanup:
1693 lan743x_tx_ring_cleanup(tx);
1694 return ret;
1695}
1696
1697static void lan743x_tx_close(struct lan743x_tx *tx)
1698{
1699 struct lan743x_adapter *adapter = tx->adapter;
1700
1701 lan743x_csr_write(adapter,
1702 DMAC_CMD,
1703 DMAC_CMD_STOP_T_(tx->channel_number));
1704 lan743x_dmac_tx_wait_till_stopped(adapter, tx->channel_number);
1705
1706 lan743x_csr_write(adapter,
1707 DMAC_INT_EN_CLR,
1708 DMAC_INT_BIT_TX_IOC_(tx->channel_number));
1709 lan743x_csr_write(adapter, INT_EN_CLR,
1710 INT_BIT_DMA_TX_(tx->channel_number));
1711 napi_disable(&tx->napi);
1712 netif_napi_del(&tx->napi);
1713
1714 lan743x_csr_write(adapter, FCT_TX_CTL,
1715 FCT_TX_CTL_DIS_(tx->channel_number));
1716 lan743x_csr_wait_for_bit(adapter, FCT_TX_CTL,
1717 FCT_TX_CTL_EN_(tx->channel_number),
1718 0, 1000, 20000, 100);
1719
1720 lan743x_tx_release_all_descriptors(tx);
1721
1722 if (tx->overflow_skb) {
1723 dev_kfree_skb(tx->overflow_skb);
1724 tx->overflow_skb = NULL;
1725 }
1726
1727 lan743x_tx_ring_cleanup(tx);
1728}
1729
1730static int lan743x_tx_open(struct lan743x_tx *tx)
1731{
1732 struct lan743x_adapter *adapter = NULL;
1733 u32 data = 0;
1734 int ret;
1735
1736 adapter = tx->adapter;
1737 ret = lan743x_tx_ring_init(tx);
1738 if (ret)
1739 return ret;
1740
1741 /* initialize fifo */
1742 lan743x_csr_write(adapter, FCT_TX_CTL,
1743 FCT_TX_CTL_RESET_(tx->channel_number));
1744 lan743x_csr_wait_for_bit(adapter, FCT_TX_CTL,
1745 FCT_TX_CTL_RESET_(tx->channel_number),
1746 0, 1000, 20000, 100);
1747
1748 /* enable fifo */
1749 lan743x_csr_write(adapter, FCT_TX_CTL,
1750 FCT_TX_CTL_EN_(tx->channel_number));
1751
1752 /* reset tx channel */
1753 lan743x_csr_write(adapter, DMAC_CMD,
1754 DMAC_CMD_TX_SWR_(tx->channel_number));
1755 lan743x_csr_wait_for_bit(adapter, DMAC_CMD,
1756 DMAC_CMD_TX_SWR_(tx->channel_number),
1757 0, 1000, 20000, 100);
1758
1759 /* Write TX_BASE_ADDR */
1760 lan743x_csr_write(adapter,
1761 TX_BASE_ADDRH(tx->channel_number),
1762 DMA_ADDR_HIGH32(tx->ring_dma_ptr));
1763 lan743x_csr_write(adapter,
1764 TX_BASE_ADDRL(tx->channel_number),
1765 DMA_ADDR_LOW32(tx->ring_dma_ptr));
1766
1767 /* Write TX_CFG_B */
1768 data = lan743x_csr_read(adapter, TX_CFG_B(tx->channel_number));
1769 data &= ~TX_CFG_B_TX_RING_LEN_MASK_;
1770 data |= ((tx->ring_size) & TX_CFG_B_TX_RING_LEN_MASK_);
1771 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0))
1772 data |= TX_CFG_B_TDMABL_512_;
1773 lan743x_csr_write(adapter, TX_CFG_B(tx->channel_number), data);
1774
1775 /* Write TX_CFG_A */
1776 data = TX_CFG_A_TX_TMR_HPWB_SEL_IOC_ | TX_CFG_A_TX_HP_WB_EN_;
1777 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) {
1778 data |= TX_CFG_A_TX_HP_WB_ON_INT_TMR_;
1779 data |= TX_CFG_A_TX_PF_THRES_SET_(0x10);
1780 data |= TX_CFG_A_TX_PF_PRI_THRES_SET_(0x04);
1781 data |= TX_CFG_A_TX_HP_WB_THRES_SET_(0x07);
1782 }
1783 lan743x_csr_write(adapter, TX_CFG_A(tx->channel_number), data);
1784
1785 /* Write TX_HEAD_WRITEBACK_ADDR */
1786 lan743x_csr_write(adapter,
1787 TX_HEAD_WRITEBACK_ADDRH(tx->channel_number),
1788 DMA_ADDR_HIGH32(tx->head_dma_ptr));
1789 lan743x_csr_write(adapter,
1790 TX_HEAD_WRITEBACK_ADDRL(tx->channel_number),
1791 DMA_ADDR_LOW32(tx->head_dma_ptr));
1792
1793 /* set last head */
1794 tx->last_head = lan743x_csr_read(adapter, TX_HEAD(tx->channel_number));
1795
1796 /* write TX_TAIL */
1797 tx->last_tail = 0;
1798 lan743x_csr_write(adapter, TX_TAIL(tx->channel_number),
1799 (u32)(tx->last_tail));
1800 tx->vector_flags = lan743x_intr_get_vector_flags(adapter,
1801 INT_BIT_DMA_TX_
1802 (tx->channel_number));
1803 netif_napi_add(adapter->netdev,
1804 &tx->napi, lan743x_tx_napi_poll,
1805 tx->ring_size - 1);
1806 napi_enable(&tx->napi);
1807
1808 data = 0;
1809 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_CLEAR)
1810 data |= TX_CFG_C_TX_TOP_INT_EN_AUTO_CLR_;
1811 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_AUTO_CLEAR)
1812 data |= TX_CFG_C_TX_DMA_INT_STS_AUTO_CLR_;
1813 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_R2C)
1814 data |= TX_CFG_C_TX_INT_STS_R2C_MODE_MASK_;
1815 if (tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_R2C)
1816 data |= TX_CFG_C_TX_INT_EN_R2C_;
1817 lan743x_csr_write(adapter, TX_CFG_C(tx->channel_number), data);
1818
1819 if (!(tx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_SET))
1820 lan743x_csr_write(adapter, INT_EN_SET,
1821 INT_BIT_DMA_TX_(tx->channel_number));
1822 lan743x_csr_write(adapter, DMAC_INT_EN_SET,
1823 DMAC_INT_BIT_TX_IOC_(tx->channel_number));
1824
1825 /* start dmac channel */
1826 lan743x_csr_write(adapter, DMAC_CMD,
1827 DMAC_CMD_START_T_(tx->channel_number));
1828 return 0;
1829}
1830
1831static int lan743x_rx_next_index(struct lan743x_rx *rx, int index)
1832{
1833 return ((++index) % rx->ring_size);
1834}
1835
1836static int lan743x_rx_allocate_ring_element(struct lan743x_rx *rx, int index)
1837{
1838 struct lan743x_rx_buffer_info *buffer_info;
1839 struct lan743x_rx_descriptor *descriptor;
1840 int length = 0;
1841
1842 length = (LAN743X_MAX_FRAME_SIZE + ETH_HLEN + 4 + RX_HEAD_PADDING);
1843 descriptor = &rx->ring_cpu_ptr[index];
1844 buffer_info = &rx->buffer_info[index];
1845 buffer_info->skb = __netdev_alloc_skb(rx->adapter->netdev,
1846 length,
1847 GFP_ATOMIC | GFP_DMA);
1848 if (!(buffer_info->skb))
1849 return -ENOMEM;
1850 buffer_info->dma_ptr = dma_map_single(&rx->adapter->pdev->dev,
1851 buffer_info->skb->data,
1852 length,
1853 DMA_FROM_DEVICE);
1854 if (dma_mapping_error(&rx->adapter->pdev->dev,
1855 buffer_info->dma_ptr)) {
1856 buffer_info->dma_ptr = 0;
1857 return -ENOMEM;
1858 }
1859
1860 buffer_info->buffer_length = length;
1861 descriptor->data1 = DMA_ADDR_LOW32(buffer_info->dma_ptr);
1862 descriptor->data2 = DMA_ADDR_HIGH32(buffer_info->dma_ptr);
1863 descriptor->data3 = 0;
1864 descriptor->data0 = (RX_DESC_DATA0_OWN_ |
1865 (length & RX_DESC_DATA0_BUF_LENGTH_MASK_));
1866 skb_reserve(buffer_info->skb, RX_HEAD_PADDING);
1867
1868 return 0;
1869}
1870
1871static void lan743x_rx_reuse_ring_element(struct lan743x_rx *rx, int index)
1872{
1873 struct lan743x_rx_buffer_info *buffer_info;
1874 struct lan743x_rx_descriptor *descriptor;
1875
1876 descriptor = &rx->ring_cpu_ptr[index];
1877 buffer_info = &rx->buffer_info[index];
1878
1879 descriptor->data1 = DMA_ADDR_LOW32(buffer_info->dma_ptr);
1880 descriptor->data2 = DMA_ADDR_HIGH32(buffer_info->dma_ptr);
1881 descriptor->data3 = 0;
1882 descriptor->data0 = (RX_DESC_DATA0_OWN_ |
1883 ((buffer_info->buffer_length) &
1884 RX_DESC_DATA0_BUF_LENGTH_MASK_));
1885}
1886
1887static void lan743x_rx_release_ring_element(struct lan743x_rx *rx, int index)
1888{
1889 struct lan743x_rx_buffer_info *buffer_info;
1890 struct lan743x_rx_descriptor *descriptor;
1891
1892 descriptor = &rx->ring_cpu_ptr[index];
1893 buffer_info = &rx->buffer_info[index];
1894
1895 memset(descriptor, 0, sizeof(*descriptor));
1896
1897 if (buffer_info->dma_ptr) {
1898 dma_unmap_single(&rx->adapter->pdev->dev,
1899 buffer_info->dma_ptr,
1900 buffer_info->buffer_length,
1901 DMA_FROM_DEVICE);
1902 buffer_info->dma_ptr = 0;
1903 }
1904
1905 if (buffer_info->skb) {
1906 dev_kfree_skb(buffer_info->skb);
1907 buffer_info->skb = NULL;
1908 }
1909
1910 memset(buffer_info, 0, sizeof(*buffer_info));
1911}
1912
1913static int lan743x_rx_process_packet(struct lan743x_rx *rx)
1914{
1915 struct skb_shared_hwtstamps *hwtstamps = NULL;
1916 int result = RX_PROCESS_RESULT_NOTHING_TO_DO;
1917 struct lan743x_rx_buffer_info *buffer_info;
1918 struct lan743x_rx_descriptor *descriptor;
1919 int current_head_index = -1;
1920 int extension_index = -1;
1921 int first_index = -1;
1922 int last_index = -1;
1923
1924 current_head_index = *rx->head_cpu_ptr;
1925 if (current_head_index < 0 || current_head_index >= rx->ring_size)
1926 goto done;
1927
1928 if (rx->last_head < 0 || rx->last_head >= rx->ring_size)
1929 goto done;
1930
1931 if (rx->last_head != current_head_index) {
1932 descriptor = &rx->ring_cpu_ptr[rx->last_head];
1933 if (descriptor->data0 & RX_DESC_DATA0_OWN_)
1934 goto done;
1935
1936 if (!(descriptor->data0 & RX_DESC_DATA0_FS_))
1937 goto done;
1938
1939 first_index = rx->last_head;
1940 if (descriptor->data0 & RX_DESC_DATA0_LS_) {
1941 last_index = rx->last_head;
1942 } else {
1943 int index;
1944
1945 index = lan743x_rx_next_index(rx, first_index);
1946 while (index != current_head_index) {
1947 descriptor = &rx->ring_cpu_ptr[index];
1948 if (descriptor->data0 & RX_DESC_DATA0_OWN_)
1949 goto done;
1950
1951 if (descriptor->data0 & RX_DESC_DATA0_LS_) {
1952 last_index = index;
1953 break;
1954 }
1955 index = lan743x_rx_next_index(rx, index);
1956 }
1957 }
1958 if (last_index >= 0) {
1959 descriptor = &rx->ring_cpu_ptr[last_index];
1960 if (descriptor->data0 & RX_DESC_DATA0_EXT_) {
1961 /* extension is expected to follow */
1962 int index = lan743x_rx_next_index(rx,
1963 last_index);
1964 if (index != current_head_index) {
1965 descriptor = &rx->ring_cpu_ptr[index];
1966 if (descriptor->data0 &
1967 RX_DESC_DATA0_OWN_) {
1968 goto done;
1969 }
1970 if (descriptor->data0 &
1971 RX_DESC_DATA0_EXT_) {
1972 extension_index = index;
1973 } else {
1974 goto done;
1975 }
1976 } else {
1977 /* extension is not yet available */
1978 /* prevent processing of this packet */
1979 first_index = -1;
1980 last_index = -1;
1981 }
1982 }
1983 }
1984 }
1985 if (first_index >= 0 && last_index >= 0) {
1986 int real_last_index = last_index;
1987 struct sk_buff *skb = NULL;
1988 u32 ts_sec = 0;
1989 u32 ts_nsec = 0;
1990
1991 /* packet is available */
1992 if (first_index == last_index) {
1993 /* single buffer packet */
1994 int packet_length;
1995
1996 buffer_info = &rx->buffer_info[first_index];
1997 skb = buffer_info->skb;
1998 descriptor = &rx->ring_cpu_ptr[first_index];
1999
2000 /* unmap from dma */
2001 if (buffer_info->dma_ptr) {
2002 dma_unmap_single(&rx->adapter->pdev->dev,
2003 buffer_info->dma_ptr,
2004 buffer_info->buffer_length,
2005 DMA_FROM_DEVICE);
2006 buffer_info->dma_ptr = 0;
2007 buffer_info->buffer_length = 0;
2008 }
2009 buffer_info->skb = NULL;
2010 packet_length = RX_DESC_DATA0_FRAME_LENGTH_GET_
2011 (descriptor->data0);
2012 skb_put(skb, packet_length - 4);
2013 skb->protocol = eth_type_trans(skb,
2014 rx->adapter->netdev);
2015 lan743x_rx_allocate_ring_element(rx, first_index);
2016 } else {
2017 int index = first_index;
2018
2019 /* multi buffer packet not supported */
2020 /* this should not happen since
2021 * buffers are allocated to be at least jumbo size
2022 */
2023
2024 /* clean up buffers */
2025 if (first_index <= last_index) {
2026 while ((index >= first_index) &&
2027 (index <= last_index)) {
2028 lan743x_rx_release_ring_element(rx,
2029 index);
2030 lan743x_rx_allocate_ring_element(rx,
2031 index);
2032 index = lan743x_rx_next_index(rx,
2033 index);
2034 }
2035 } else {
2036 while ((index >= first_index) ||
2037 (index <= last_index)) {
2038 lan743x_rx_release_ring_element(rx,
2039 index);
2040 lan743x_rx_allocate_ring_element(rx,
2041 index);
2042 index = lan743x_rx_next_index(rx,
2043 index);
2044 }
2045 }
2046 }
2047
2048 if (extension_index >= 0) {
2049 descriptor = &rx->ring_cpu_ptr[extension_index];
2050 buffer_info = &rx->buffer_info[extension_index];
2051
2052 ts_sec = descriptor->data1;
2053 ts_nsec = (descriptor->data2 &
2054 RX_DESC_DATA2_TS_NS_MASK_);
2055 lan743x_rx_reuse_ring_element(rx, extension_index);
2056 real_last_index = extension_index;
2057 }
2058
2059 if (!skb) {
2060 result = RX_PROCESS_RESULT_PACKET_DROPPED;
2061 goto move_forward;
2062 }
2063
2064 if (extension_index < 0)
2065 goto pass_packet_to_os;
2066 hwtstamps = skb_hwtstamps(skb);
2067 if (hwtstamps)
2068 hwtstamps->hwtstamp = ktime_set(ts_sec, ts_nsec);
2069
2070pass_packet_to_os:
2071 /* pass packet to OS */
2072 napi_gro_receive(&rx->napi, skb);
2073 result = RX_PROCESS_RESULT_PACKET_RECEIVED;
2074
2075move_forward:
2076 /* push tail and head forward */
2077 rx->last_tail = real_last_index;
2078 rx->last_head = lan743x_rx_next_index(rx, real_last_index);
2079 }
2080done:
2081 return result;
2082}
2083
2084static int lan743x_rx_napi_poll(struct napi_struct *napi, int weight)
2085{
2086 struct lan743x_rx *rx = container_of(napi, struct lan743x_rx, napi);
2087 struct lan743x_adapter *adapter = rx->adapter;
2088 u32 rx_tail_flags = 0;
2089 int count;
2090
2091 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_W2C) {
2092 /* clear int status bit before reading packet */
2093 lan743x_csr_write(adapter, DMAC_INT_STS,
2094 DMAC_INT_BIT_RXFRM_(rx->channel_number));
2095 }
2096 count = 0;
2097 while (count < weight) {
2098 int rx_process_result = -1;
2099
2100 rx_process_result = lan743x_rx_process_packet(rx);
2101 if (rx_process_result == RX_PROCESS_RESULT_PACKET_RECEIVED) {
2102 count++;
2103 } else if (rx_process_result ==
2104 RX_PROCESS_RESULT_NOTHING_TO_DO) {
2105 break;
2106 } else if (rx_process_result ==
2107 RX_PROCESS_RESULT_PACKET_DROPPED) {
2108 continue;
2109 }
2110 }
2111 rx->frame_count += count;
2112 if (count == weight)
2113 goto done;
2114
2115 if (!napi_complete_done(napi, count))
2116 goto done;
2117
2118 if (rx->vector_flags & LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_SET)
2119 rx_tail_flags |= RX_TAIL_SET_TOP_INT_VEC_EN_;
2120 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_SET) {
2121 rx_tail_flags |= RX_TAIL_SET_TOP_INT_EN_;
2122 } else {
2123 lan743x_csr_write(adapter, INT_EN_SET,
2124 INT_BIT_DMA_RX_(rx->channel_number));
2125 }
2126
2127 /* update RX_TAIL */
2128 lan743x_csr_write(adapter, RX_TAIL(rx->channel_number),
2129 rx_tail_flags | rx->last_tail);
2130done:
2131 return count;
2132}
2133
2134static void lan743x_rx_ring_cleanup(struct lan743x_rx *rx)
2135{
2136 if (rx->buffer_info && rx->ring_cpu_ptr) {
2137 int index;
2138
2139 for (index = 0; index < rx->ring_size; index++)
2140 lan743x_rx_release_ring_element(rx, index);
2141 }
2142
2143 if (rx->head_cpu_ptr) {
2144 pci_free_consistent(rx->adapter->pdev,
2145 sizeof(*rx->head_cpu_ptr),
2146 rx->head_cpu_ptr,
2147 rx->head_dma_ptr);
2148 rx->head_cpu_ptr = NULL;
2149 rx->head_dma_ptr = 0;
2150 }
2151
2152 kfree(rx->buffer_info);
2153 rx->buffer_info = NULL;
2154
2155 if (rx->ring_cpu_ptr) {
2156 pci_free_consistent(rx->adapter->pdev,
2157 rx->ring_allocation_size,
2158 rx->ring_cpu_ptr,
2159 rx->ring_dma_ptr);
2160 rx->ring_allocation_size = 0;
2161 rx->ring_cpu_ptr = NULL;
2162 rx->ring_dma_ptr = 0;
2163 }
2164
2165 rx->ring_size = 0;
2166 rx->last_head = 0;
2167}
2168
2169static int lan743x_rx_ring_init(struct lan743x_rx *rx)
2170{
2171 size_t ring_allocation_size = 0;
2172 dma_addr_t dma_ptr = 0;
2173 void *cpu_ptr = NULL;
2174 int ret = -ENOMEM;
2175 int index = 0;
2176
2177 rx->ring_size = LAN743X_RX_RING_SIZE;
2178 if (rx->ring_size <= 1) {
2179 ret = -EINVAL;
2180 goto cleanup;
2181 }
2182 if (rx->ring_size & ~RX_CFG_B_RX_RING_LEN_MASK_) {
2183 ret = -EINVAL;
2184 goto cleanup;
2185 }
2186 ring_allocation_size = ALIGN(rx->ring_size *
2187 sizeof(struct lan743x_rx_descriptor),
2188 PAGE_SIZE);
2189 dma_ptr = 0;
2190 cpu_ptr = pci_zalloc_consistent(rx->adapter->pdev,
2191 ring_allocation_size, &dma_ptr);
2192 if (!cpu_ptr) {
2193 ret = -ENOMEM;
2194 goto cleanup;
2195 }
2196 rx->ring_allocation_size = ring_allocation_size;
2197 rx->ring_cpu_ptr = (struct lan743x_rx_descriptor *)cpu_ptr;
2198 rx->ring_dma_ptr = dma_ptr;
2199
2200 cpu_ptr = kcalloc(rx->ring_size, sizeof(*rx->buffer_info),
2201 GFP_KERNEL);
2202 if (!cpu_ptr) {
2203 ret = -ENOMEM;
2204 goto cleanup;
2205 }
2206 rx->buffer_info = (struct lan743x_rx_buffer_info *)cpu_ptr;
2207 dma_ptr = 0;
2208 cpu_ptr = pci_zalloc_consistent(rx->adapter->pdev,
2209 sizeof(*rx->head_cpu_ptr), &dma_ptr);
2210 if (!cpu_ptr) {
2211 ret = -ENOMEM;
2212 goto cleanup;
2213 }
2214
2215 rx->head_cpu_ptr = cpu_ptr;
2216 rx->head_dma_ptr = dma_ptr;
2217 if (rx->head_dma_ptr & 0x3) {
2218 ret = -ENOMEM;
2219 goto cleanup;
2220 }
2221
2222 rx->last_head = 0;
2223 for (index = 0; index < rx->ring_size; index++) {
2224 ret = lan743x_rx_allocate_ring_element(rx, index);
2225 if (ret)
2226 goto cleanup;
2227 }
2228 return 0;
2229
2230cleanup:
2231 lan743x_rx_ring_cleanup(rx);
2232 return ret;
2233}
2234
2235static void lan743x_rx_close(struct lan743x_rx *rx)
2236{
2237 struct lan743x_adapter *adapter = rx->adapter;
2238
2239 lan743x_csr_write(adapter, FCT_RX_CTL,
2240 FCT_RX_CTL_DIS_(rx->channel_number));
2241 lan743x_csr_wait_for_bit(adapter, FCT_RX_CTL,
2242 FCT_RX_CTL_EN_(rx->channel_number),
2243 0, 1000, 20000, 100);
2244
2245 lan743x_csr_write(adapter, DMAC_CMD,
2246 DMAC_CMD_STOP_R_(rx->channel_number));
2247 lan743x_dmac_rx_wait_till_stopped(adapter, rx->channel_number);
2248
2249 lan743x_csr_write(adapter, DMAC_INT_EN_CLR,
2250 DMAC_INT_BIT_RXFRM_(rx->channel_number));
2251 lan743x_csr_write(adapter, INT_EN_CLR,
2252 INT_BIT_DMA_RX_(rx->channel_number));
2253 napi_disable(&rx->napi);
2254
2255 netif_napi_del(&rx->napi);
2256
2257 lan743x_rx_ring_cleanup(rx);
2258}
2259
2260static int lan743x_rx_open(struct lan743x_rx *rx)
2261{
2262 struct lan743x_adapter *adapter = rx->adapter;
2263 u32 data = 0;
2264 int ret;
2265
2266 rx->frame_count = 0;
2267 ret = lan743x_rx_ring_init(rx);
2268 if (ret)
2269 goto return_error;
2270
2271 netif_napi_add(adapter->netdev,
2272 &rx->napi, lan743x_rx_napi_poll,
2273 rx->ring_size - 1);
2274
2275 lan743x_csr_write(adapter, DMAC_CMD,
2276 DMAC_CMD_RX_SWR_(rx->channel_number));
2277 lan743x_csr_wait_for_bit(adapter, DMAC_CMD,
2278 DMAC_CMD_RX_SWR_(rx->channel_number),
2279 0, 1000, 20000, 100);
2280
2281 /* set ring base address */
2282 lan743x_csr_write(adapter,
2283 RX_BASE_ADDRH(rx->channel_number),
2284 DMA_ADDR_HIGH32(rx->ring_dma_ptr));
2285 lan743x_csr_write(adapter,
2286 RX_BASE_ADDRL(rx->channel_number),
2287 DMA_ADDR_LOW32(rx->ring_dma_ptr));
2288
2289 /* set rx write back address */
2290 lan743x_csr_write(adapter,
2291 RX_HEAD_WRITEBACK_ADDRH(rx->channel_number),
2292 DMA_ADDR_HIGH32(rx->head_dma_ptr));
2293 lan743x_csr_write(adapter,
2294 RX_HEAD_WRITEBACK_ADDRL(rx->channel_number),
2295 DMA_ADDR_LOW32(rx->head_dma_ptr));
2296 data = RX_CFG_A_RX_HP_WB_EN_;
2297 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) {
2298 data |= (RX_CFG_A_RX_WB_ON_INT_TMR_ |
2299 RX_CFG_A_RX_WB_THRES_SET_(0x7) |
2300 RX_CFG_A_RX_PF_THRES_SET_(16) |
2301 RX_CFG_A_RX_PF_PRI_THRES_SET_(4));
2302 }
2303
2304 /* set RX_CFG_A */
2305 lan743x_csr_write(adapter,
2306 RX_CFG_A(rx->channel_number), data);
2307
2308 /* set RX_CFG_B */
2309 data = lan743x_csr_read(adapter, RX_CFG_B(rx->channel_number));
2310 data &= ~RX_CFG_B_RX_PAD_MASK_;
2311 if (!RX_HEAD_PADDING)
2312 data |= RX_CFG_B_RX_PAD_0_;
2313 else
2314 data |= RX_CFG_B_RX_PAD_2_;
2315 data &= ~RX_CFG_B_RX_RING_LEN_MASK_;
2316 data |= ((rx->ring_size) & RX_CFG_B_RX_RING_LEN_MASK_);
2317 data |= RX_CFG_B_TS_ALL_RX_;
2318 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0))
2319 data |= RX_CFG_B_RDMABL_512_;
2320
2321 lan743x_csr_write(adapter, RX_CFG_B(rx->channel_number), data);
2322 rx->vector_flags = lan743x_intr_get_vector_flags(adapter,
2323 INT_BIT_DMA_RX_
2324 (rx->channel_number));
2325
2326 /* set RX_CFG_C */
2327 data = 0;
2328 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_CLEAR)
2329 data |= RX_CFG_C_RX_TOP_INT_EN_AUTO_CLR_;
2330 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_AUTO_CLEAR)
2331 data |= RX_CFG_C_RX_DMA_INT_STS_AUTO_CLR_;
2332 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_R2C)
2333 data |= RX_CFG_C_RX_INT_STS_R2C_MODE_MASK_;
2334 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_R2C)
2335 data |= RX_CFG_C_RX_INT_EN_R2C_;
2336 lan743x_csr_write(adapter, RX_CFG_C(rx->channel_number), data);
2337
2338 rx->last_tail = ((u32)(rx->ring_size - 1));
2339 lan743x_csr_write(adapter, RX_TAIL(rx->channel_number),
2340 rx->last_tail);
2341 rx->last_head = lan743x_csr_read(adapter, RX_HEAD(rx->channel_number));
2342 if (rx->last_head) {
2343 ret = -EIO;
2344 goto napi_delete;
2345 }
2346
2347 napi_enable(&rx->napi);
2348
2349 lan743x_csr_write(adapter, INT_EN_SET,
2350 INT_BIT_DMA_RX_(rx->channel_number));
2351 lan743x_csr_write(adapter, DMAC_INT_STS,
2352 DMAC_INT_BIT_RXFRM_(rx->channel_number));
2353 lan743x_csr_write(adapter, DMAC_INT_EN_SET,
2354 DMAC_INT_BIT_RXFRM_(rx->channel_number));
2355 lan743x_csr_write(adapter, DMAC_CMD,
2356 DMAC_CMD_START_R_(rx->channel_number));
2357
2358 /* initialize fifo */
2359 lan743x_csr_write(adapter, FCT_RX_CTL,
2360 FCT_RX_CTL_RESET_(rx->channel_number));
2361 lan743x_csr_wait_for_bit(adapter, FCT_RX_CTL,
2362 FCT_RX_CTL_RESET_(rx->channel_number),
2363 0, 1000, 20000, 100);
2364 lan743x_csr_write(adapter, FCT_FLOW(rx->channel_number),
2365 FCT_FLOW_CTL_REQ_EN_ |
2366 FCT_FLOW_CTL_ON_THRESHOLD_SET_(0x2A) |
2367 FCT_FLOW_CTL_OFF_THRESHOLD_SET_(0xA));
2368
2369 /* enable fifo */
2370 lan743x_csr_write(adapter, FCT_RX_CTL,
2371 FCT_RX_CTL_EN_(rx->channel_number));
2372 return 0;
2373
2374napi_delete:
2375 netif_napi_del(&rx->napi);
2376 lan743x_rx_ring_cleanup(rx);
2377
2378return_error:
2379 return ret;
2380}
2381
2382static int lan743x_netdev_close(struct net_device *netdev)
2383{
2384 struct lan743x_adapter *adapter = netdev_priv(netdev);
2385 int index;
2386
2387 lan743x_tx_close(&adapter->tx[0]);
2388
2389 for (index = 0; index < LAN743X_USED_RX_CHANNELS; index++)
2390 lan743x_rx_close(&adapter->rx[index]);
2391
2392 lan743x_phy_close(adapter);
2393
2394 lan743x_mac_close(adapter);
2395
2396 lan743x_intr_close(adapter);
2397
2398 return 0;
2399}
2400
2401static int lan743x_netdev_open(struct net_device *netdev)
2402{
2403 struct lan743x_adapter *adapter = netdev_priv(netdev);
2404 int index;
2405 int ret;
2406
2407 ret = lan743x_intr_open(adapter);
2408 if (ret)
2409 goto return_error;
2410
2411 ret = lan743x_mac_open(adapter);
2412 if (ret)
2413 goto close_intr;
2414
2415 ret = lan743x_phy_open(adapter);
2416 if (ret)
2417 goto close_mac;
2418
2419 for (index = 0; index < LAN743X_USED_RX_CHANNELS; index++) {
2420 ret = lan743x_rx_open(&adapter->rx[index]);
2421 if (ret)
2422 goto close_rx;
2423 }
2424
2425 ret = lan743x_tx_open(&adapter->tx[0]);
2426 if (ret)
2427 goto close_rx;
2428
2429 return 0;
2430
2431close_rx:
2432 for (index = 0; index < LAN743X_USED_RX_CHANNELS; index++) {
2433 if (adapter->rx[index].ring_cpu_ptr)
2434 lan743x_rx_close(&adapter->rx[index]);
2435 }
2436 lan743x_phy_close(adapter);
2437
2438close_mac:
2439 lan743x_mac_close(adapter);
2440
2441close_intr:
2442 lan743x_intr_close(adapter);
2443
2444return_error:
2445 netif_warn(adapter, ifup, adapter->netdev,
2446 "Error opening LAN743x\n");
2447 return ret;
2448}
2449
2450static netdev_tx_t lan743x_netdev_xmit_frame(struct sk_buff *skb,
2451 struct net_device *netdev)
2452{
2453 struct lan743x_adapter *adapter = netdev_priv(netdev);
2454
2455 return lan743x_tx_xmit_frame(&adapter->tx[0], skb);
2456}
2457
2458static int lan743x_netdev_ioctl(struct net_device *netdev,
2459 struct ifreq *ifr, int cmd)
2460{
2461 if (!netif_running(netdev))
2462 return -EINVAL;
2463 return phy_mii_ioctl(netdev->phydev, ifr, cmd);
2464}
2465
2466static void lan743x_netdev_set_multicast(struct net_device *netdev)
2467{
2468 struct lan743x_adapter *adapter = netdev_priv(netdev);
2469
2470 lan743x_rfe_set_multicast(adapter);
2471}
2472
2473static int lan743x_netdev_change_mtu(struct net_device *netdev, int new_mtu)
2474{
2475 struct lan743x_adapter *adapter = netdev_priv(netdev);
2476 int ret = 0;
2477
2478 ret = lan743x_mac_set_mtu(adapter, new_mtu);
2479 if (!ret)
2480 netdev->mtu = new_mtu;
2481 return ret;
2482}
2483
2484static void lan743x_netdev_get_stats64(struct net_device *netdev,
2485 struct rtnl_link_stats64 *stats)
2486{
2487 struct lan743x_adapter *adapter = netdev_priv(netdev);
2488
2489 stats->rx_packets = lan743x_csr_read(adapter, STAT_RX_TOTAL_FRAMES);
2490 stats->tx_packets = lan743x_csr_read(adapter, STAT_TX_TOTAL_FRAMES);
2491 stats->rx_bytes = lan743x_csr_read(adapter,
2492 STAT_RX_UNICAST_BYTE_COUNT) +
2493 lan743x_csr_read(adapter,
2494 STAT_RX_BROADCAST_BYTE_COUNT) +
2495 lan743x_csr_read(adapter,
2496 STAT_RX_MULTICAST_BYTE_COUNT);
2497 stats->tx_bytes = lan743x_csr_read(adapter,
2498 STAT_TX_UNICAST_BYTE_COUNT) +
2499 lan743x_csr_read(adapter,
2500 STAT_TX_BROADCAST_BYTE_COUNT) +
2501 lan743x_csr_read(adapter,
2502 STAT_TX_MULTICAST_BYTE_COUNT);
2503 stats->rx_errors = lan743x_csr_read(adapter, STAT_RX_FCS_ERRORS) +
2504 lan743x_csr_read(adapter,
2505 STAT_RX_ALIGNMENT_ERRORS) +
2506 lan743x_csr_read(adapter, STAT_RX_JABBER_ERRORS) +
2507 lan743x_csr_read(adapter,
2508 STAT_RX_UNDERSIZE_FRAME_ERRORS) +
2509 lan743x_csr_read(adapter,
2510 STAT_RX_OVERSIZE_FRAME_ERRORS);
2511 stats->tx_errors = lan743x_csr_read(adapter, STAT_TX_FCS_ERRORS) +
2512 lan743x_csr_read(adapter,
2513 STAT_TX_EXCESS_DEFERRAL_ERRORS) +
2514 lan743x_csr_read(adapter, STAT_TX_CARRIER_ERRORS);
2515 stats->rx_dropped = lan743x_csr_read(adapter,
2516 STAT_RX_DROPPED_FRAMES);
2517 stats->tx_dropped = lan743x_csr_read(adapter,
2518 STAT_TX_EXCESSIVE_COLLISION);
2519 stats->multicast = lan743x_csr_read(adapter,
2520 STAT_RX_MULTICAST_FRAMES) +
2521 lan743x_csr_read(adapter,
2522 STAT_TX_MULTICAST_FRAMES);
2523 stats->collisions = lan743x_csr_read(adapter,
2524 STAT_TX_SINGLE_COLLISIONS) +
2525 lan743x_csr_read(adapter,
2526 STAT_TX_MULTIPLE_COLLISIONS) +
2527 lan743x_csr_read(adapter,
2528 STAT_TX_LATE_COLLISIONS);
2529}
2530
2531static int lan743x_netdev_set_mac_address(struct net_device *netdev,
2532 void *addr)
2533{
2534 struct lan743x_adapter *adapter = netdev_priv(netdev);
2535 struct sockaddr *sock_addr = addr;
2536 int ret;
2537
2538 ret = eth_prepare_mac_addr_change(netdev, sock_addr);
2539 if (ret)
2540 return ret;
2541 ether_addr_copy(netdev->dev_addr, sock_addr->sa_data);
2542 lan743x_mac_set_address(adapter, sock_addr->sa_data);
2543 lan743x_rfe_update_mac_address(adapter);
2544 return 0;
2545}
2546
2547static const struct net_device_ops lan743x_netdev_ops = {
2548 .ndo_open = lan743x_netdev_open,
2549 .ndo_stop = lan743x_netdev_close,
2550 .ndo_start_xmit = lan743x_netdev_xmit_frame,
2551 .ndo_do_ioctl = lan743x_netdev_ioctl,
2552 .ndo_set_rx_mode = lan743x_netdev_set_multicast,
2553 .ndo_change_mtu = lan743x_netdev_change_mtu,
2554 .ndo_get_stats64 = lan743x_netdev_get_stats64,
2555 .ndo_set_mac_address = lan743x_netdev_set_mac_address,
2556};
2557
2558static void lan743x_hardware_cleanup(struct lan743x_adapter *adapter)
2559{
2560 lan743x_csr_write(adapter, INT_EN_CLR, 0xFFFFFFFF);
2561}
2562
2563static void lan743x_mdiobus_cleanup(struct lan743x_adapter *adapter)
2564{
2565 mdiobus_unregister(adapter->mdiobus);
2566}
2567
2568static void lan743x_full_cleanup(struct lan743x_adapter *adapter)
2569{
2570 unregister_netdev(adapter->netdev);
2571
2572 lan743x_mdiobus_cleanup(adapter);
2573 lan743x_hardware_cleanup(adapter);
2574 lan743x_pci_cleanup(adapter);
2575}
2576
2577static int lan743x_hardware_init(struct lan743x_adapter *adapter,
2578 struct pci_dev *pdev)
2579{
2580 struct lan743x_tx *tx;
2581 int index;
2582 int ret;
2583
2584 adapter->intr.irq = adapter->pdev->irq;
2585 lan743x_csr_write(adapter, INT_EN_CLR, 0xFFFFFFFF);
2586 mutex_init(&adapter->dp_lock);
2587 ret = lan743x_mac_init(adapter);
2588 if (ret)
2589 return ret;
2590
2591 ret = lan743x_phy_init(adapter);
2592 if (ret)
2593 return ret;
2594
2595 lan743x_rfe_update_mac_address(adapter);
2596
2597 ret = lan743x_dmac_init(adapter);
2598 if (ret)
2599 return ret;
2600
2601 for (index = 0; index < LAN743X_USED_RX_CHANNELS; index++) {
2602 adapter->rx[index].adapter = adapter;
2603 adapter->rx[index].channel_number = index;
2604 }
2605
2606 tx = &adapter->tx[0];
2607 tx->adapter = adapter;
2608 tx->channel_number = 0;
2609 spin_lock_init(&tx->ring_lock);
2610 return 0;
2611}
2612
2613static int lan743x_mdiobus_init(struct lan743x_adapter *adapter)
2614{
2615 int ret;
2616
2617 adapter->mdiobus = devm_mdiobus_alloc(&adapter->pdev->dev);
2618 if (!(adapter->mdiobus)) {
2619 ret = -ENOMEM;
2620 goto return_error;
2621 }
2622
2623 adapter->mdiobus->priv = (void *)adapter;
2624 adapter->mdiobus->read = lan743x_mdiobus_read;
2625 adapter->mdiobus->write = lan743x_mdiobus_write;
2626 adapter->mdiobus->name = "lan743x-mdiobus";
2627 snprintf(adapter->mdiobus->id, MII_BUS_ID_SIZE,
2628 "pci-%s", pci_name(adapter->pdev));
2629
2630 /* set to internal PHY id */
2631 adapter->mdiobus->phy_mask = ~(u32)BIT(1);
2632
2633 /* register mdiobus */
2634 ret = mdiobus_register(adapter->mdiobus);
2635 if (ret < 0)
2636 goto return_error;
2637 return 0;
2638
2639return_error:
2640 return ret;
2641}
2642
2643/* lan743x_pcidev_probe - Device Initialization Routine
2644 * @pdev: PCI device information struct
2645 * @id: entry in lan743x_pci_tbl
2646 *
2647 * Returns 0 on success, negative on failure
2648 *
2649 * initializes an adapter identified by a pci_dev structure.
2650 * The OS initialization, configuring of the adapter private structure,
2651 * and a hardware reset occur.
2652 **/
2653static int lan743x_pcidev_probe(struct pci_dev *pdev,
2654 const struct pci_device_id *id)
2655{
2656 struct lan743x_adapter *adapter = NULL;
2657 struct net_device *netdev = NULL;
2658 int ret = -ENODEV;
2659
2660 netdev = devm_alloc_etherdev(&pdev->dev,
2661 sizeof(struct lan743x_adapter));
2662 if (!netdev)
2663 goto return_error;
2664
2665 SET_NETDEV_DEV(netdev, &pdev->dev);
2666 pci_set_drvdata(pdev, netdev);
2667 adapter = netdev_priv(netdev);
2668 adapter->netdev = netdev;
2669 adapter->msg_enable = NETIF_MSG_DRV | NETIF_MSG_PROBE |
2670 NETIF_MSG_LINK | NETIF_MSG_IFUP |
2671 NETIF_MSG_IFDOWN | NETIF_MSG_TX_QUEUED;
2672 netdev->max_mtu = LAN743X_MAX_FRAME_SIZE;
2673
2674 ret = lan743x_pci_init(adapter, pdev);
2675 if (ret)
2676 goto return_error;
2677
2678 ret = lan743x_csr_init(adapter);
2679 if (ret)
2680 goto cleanup_pci;
2681
2682 ret = lan743x_hardware_init(adapter, pdev);
2683 if (ret)
2684 goto cleanup_pci;
2685
2686 ret = lan743x_mdiobus_init(adapter);
2687 if (ret)
2688 goto cleanup_hardware;
2689
2690 adapter->netdev->netdev_ops = &lan743x_netdev_ops;
2691 adapter->netdev->features = NETIF_F_SG | NETIF_F_TSO | NETIF_F_HW_CSUM;
2692 adapter->netdev->hw_features = adapter->netdev->features;
2693
2694 /* carrier off reporting is important to ethtool even BEFORE open */
2695 netif_carrier_off(netdev);
2696
2697 ret = register_netdev(adapter->netdev);
2698 if (ret < 0)
2699 goto cleanup_mdiobus;
2700 return 0;
2701
2702cleanup_mdiobus:
2703 lan743x_mdiobus_cleanup(adapter);
2704
2705cleanup_hardware:
2706 lan743x_hardware_cleanup(adapter);
2707
2708cleanup_pci:
2709 lan743x_pci_cleanup(adapter);
2710
2711return_error:
2712 pr_warn("Initialization failed\n");
2713 return ret;
2714}
2715
2716/**
2717 * lan743x_pcidev_remove - Device Removal Routine
2718 * @pdev: PCI device information struct
2719 *
2720 * this is called by the PCI subsystem to alert the driver
2721 * that it should release a PCI device. This could be caused by a
2722 * Hot-Plug event, or because the driver is going to be removed from
2723 * memory.
2724 **/
2725static void lan743x_pcidev_remove(struct pci_dev *pdev)
2726{
2727 struct net_device *netdev = pci_get_drvdata(pdev);
2728 struct lan743x_adapter *adapter = netdev_priv(netdev);
2729
2730 lan743x_full_cleanup(adapter);
2731}
2732
2733static void lan743x_pcidev_shutdown(struct pci_dev *pdev)
2734{
2735 struct net_device *netdev = pci_get_drvdata(pdev);
2736 struct lan743x_adapter *adapter = netdev_priv(netdev);
2737
2738 rtnl_lock();
2739 netif_device_detach(netdev);
2740
2741 /* close netdev when netdev is at running state.
2742 * For instance, it is true when system goes to sleep by pm-suspend
2743 * However, it is false when system goes to sleep by suspend GUI menu
2744 */
2745 if (netif_running(netdev))
2746 lan743x_netdev_close(netdev);
2747 rtnl_unlock();
2748
2749 /* clean up lan743x portion */
2750 lan743x_hardware_cleanup(adapter);
2751}
2752
2753static const struct pci_device_id lan743x_pcidev_tbl[] = {
2754 { PCI_DEVICE(PCI_VENDOR_ID_SMSC, PCI_DEVICE_ID_SMSC_LAN7430) },
2755 { 0, }
2756};
2757
2758static struct pci_driver lan743x_pcidev_driver = {
2759 .name = DRIVER_NAME,
2760 .id_table = lan743x_pcidev_tbl,
2761 .probe = lan743x_pcidev_probe,
2762 .remove = lan743x_pcidev_remove,
2763 .shutdown = lan743x_pcidev_shutdown,
2764};
2765
2766module_pci_driver(lan743x_pcidev_driver);
2767
2768MODULE_AUTHOR(DRIVER_AUTHOR);
2769MODULE_DESCRIPTION(DRIVER_DESC);
2770MODULE_LICENSE("GPL");