Merge tag 'sched-urgent-2020-08-15' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / drivers / net / ethernet / sfc / selftest.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /****************************************************************************
3  * Driver for Solarflare network controllers and boards
4  * Copyright 2005-2006 Fen Systems Ltd.
5  * Copyright 2006-2012 Solarflare Communications Inc.
6  */
7
8 #include <linux/netdevice.h>
9 #include <linux/module.h>
10 #include <linux/delay.h>
11 #include <linux/kernel_stat.h>
12 #include <linux/pci.h>
13 #include <linux/ethtool.h>
14 #include <linux/ip.h>
15 #include <linux/in.h>
16 #include <linux/udp.h>
17 #include <linux/rtnetlink.h>
18 #include <linux/slab.h>
19 #include "net_driver.h"
20 #include "efx.h"
21 #include "efx_common.h"
22 #include "efx_channels.h"
23 #include "nic.h"
24 #include "selftest.h"
25 #include "workarounds.h"
26
27 /* IRQ latency can be enormous because:
28  * - All IRQs may be disabled on a CPU for a *long* time by e.g. a
29  *   slow serial console or an old IDE driver doing error recovery
30  * - The PREEMPT_RT patches mostly deal with this, but also allow a
31  *   tasklet or normal task to be given higher priority than our IRQ
32  *   threads
33  * Try to avoid blaming the hardware for this.
34  */
35 #define IRQ_TIMEOUT HZ
36
37 /*
38  * Loopback test packet structure
39  *
40  * The self-test should stress every RSS vector, and unfortunately
41  * Falcon only performs RSS on TCP/UDP packets.
42  */
43 struct efx_loopback_payload {
44         struct ethhdr header;
45         struct iphdr ip;
46         struct udphdr udp;
47         __be16 iteration;
48         char msg[64];
49 } __packed;
50
51 /* Loopback test source MAC address */
52 static const u8 payload_source[ETH_ALEN] __aligned(2) = {
53         0x00, 0x0f, 0x53, 0x1b, 0x1b, 0x1b,
54 };
55
56 static const char payload_msg[] =
57         "Hello world! This is an Efx loopback test in progress!";
58
59 /* Interrupt mode names */
60 static const unsigned int efx_interrupt_mode_max = EFX_INT_MODE_MAX;
61 static const char *const efx_interrupt_mode_names[] = {
62         [EFX_INT_MODE_MSIX]   = "MSI-X",
63         [EFX_INT_MODE_MSI]    = "MSI",
64         [EFX_INT_MODE_LEGACY] = "legacy",
65 };
66 #define INT_MODE(efx) \
67         STRING_TABLE_LOOKUP(efx->interrupt_mode, efx_interrupt_mode)
68
69 /**
70  * efx_loopback_state - persistent state during a loopback selftest
71  * @flush:              Drop all packets in efx_loopback_rx_packet
72  * @packet_count:       Number of packets being used in this test
73  * @skbs:               An array of skbs transmitted
74  * @offload_csum:       Checksums are being offloaded
75  * @rx_good:            RX good packet count
76  * @rx_bad:             RX bad packet count
77  * @payload:            Payload used in tests
78  */
79 struct efx_loopback_state {
80         bool flush;
81         int packet_count;
82         struct sk_buff **skbs;
83         bool offload_csum;
84         atomic_t rx_good;
85         atomic_t rx_bad;
86         struct efx_loopback_payload payload;
87 };
88
89 /* How long to wait for all the packets to arrive (in ms) */
90 #define LOOPBACK_TIMEOUT_MS 1000
91
92 /**************************************************************************
93  *
94  * MII, NVRAM and register tests
95  *
96  **************************************************************************/
97
98 static int efx_test_phy_alive(struct efx_nic *efx, struct efx_self_tests *tests)
99 {
100         int rc = 0;
101
102         if (efx->phy_op->test_alive) {
103                 rc = efx->phy_op->test_alive(efx);
104                 tests->phy_alive = rc ? -1 : 1;
105         }
106
107         return rc;
108 }
109
110 static int efx_test_nvram(struct efx_nic *efx, struct efx_self_tests *tests)
111 {
112         int rc = 0;
113
114         if (efx->type->test_nvram) {
115                 rc = efx->type->test_nvram(efx);
116                 if (rc == -EPERM)
117                         rc = 0;
118                 else
119                         tests->nvram = rc ? -1 : 1;
120         }
121
122         return rc;
123 }
124
125 /**************************************************************************
126  *
127  * Interrupt and event queue testing
128  *
129  **************************************************************************/
130
131 /* Test generation and receipt of interrupts */
132 static int efx_test_interrupts(struct efx_nic *efx,
133                                struct efx_self_tests *tests)
134 {
135         unsigned long timeout, wait;
136         int cpu;
137         int rc;
138
139         netif_dbg(efx, drv, efx->net_dev, "testing interrupts\n");
140         tests->interrupt = -1;
141
142         rc = efx_nic_irq_test_start(efx);
143         if (rc == -ENOTSUPP) {
144                 netif_dbg(efx, drv, efx->net_dev,
145                           "direct interrupt testing not supported\n");
146                 tests->interrupt = 0;
147                 return 0;
148         }
149
150         timeout = jiffies + IRQ_TIMEOUT;
151         wait = 1;
152
153         /* Wait for arrival of test interrupt. */
154         netif_dbg(efx, drv, efx->net_dev, "waiting for test interrupt\n");
155         do {
156                 schedule_timeout_uninterruptible(wait);
157                 cpu = efx_nic_irq_test_irq_cpu(efx);
158                 if (cpu >= 0)
159                         goto success;
160                 wait *= 2;
161         } while (time_before(jiffies, timeout));
162
163         netif_err(efx, drv, efx->net_dev, "timed out waiting for interrupt\n");
164         return -ETIMEDOUT;
165
166  success:
167         netif_dbg(efx, drv, efx->net_dev, "%s test interrupt seen on CPU%d\n",
168                   INT_MODE(efx), cpu);
169         tests->interrupt = 1;
170         return 0;
171 }
172
173 /* Test generation and receipt of interrupting events */
174 static int efx_test_eventq_irq(struct efx_nic *efx,
175                                struct efx_self_tests *tests)
176 {
177         struct efx_channel *channel;
178         unsigned int read_ptr[EFX_MAX_CHANNELS];
179         unsigned long napi_ran = 0, dma_pend = 0, int_pend = 0;
180         unsigned long timeout, wait;
181
182         BUILD_BUG_ON(EFX_MAX_CHANNELS > BITS_PER_LONG);
183
184         efx_for_each_channel(channel, efx) {
185                 read_ptr[channel->channel] = channel->eventq_read_ptr;
186                 set_bit(channel->channel, &dma_pend);
187                 set_bit(channel->channel, &int_pend);
188                 efx_nic_event_test_start(channel);
189         }
190
191         timeout = jiffies + IRQ_TIMEOUT;
192         wait = 1;
193
194         /* Wait for arrival of interrupts.  NAPI processing may or may
195          * not complete in time, but we can cope in any case.
196          */
197         do {
198                 schedule_timeout_uninterruptible(wait);
199
200                 efx_for_each_channel(channel, efx) {
201                         efx_stop_eventq(channel);
202                         if (channel->eventq_read_ptr !=
203                             read_ptr[channel->channel]) {
204                                 set_bit(channel->channel, &napi_ran);
205                                 clear_bit(channel->channel, &dma_pend);
206                                 clear_bit(channel->channel, &int_pend);
207                         } else {
208                                 if (efx_nic_event_present(channel))
209                                         clear_bit(channel->channel, &dma_pend);
210                                 if (efx_nic_event_test_irq_cpu(channel) >= 0)
211                                         clear_bit(channel->channel, &int_pend);
212                         }
213                         efx_start_eventq(channel);
214                 }
215
216                 wait *= 2;
217         } while ((dma_pend || int_pend) && time_before(jiffies, timeout));
218
219         efx_for_each_channel(channel, efx) {
220                 bool dma_seen = !test_bit(channel->channel, &dma_pend);
221                 bool int_seen = !test_bit(channel->channel, &int_pend);
222
223                 tests->eventq_dma[channel->channel] = dma_seen ? 1 : -1;
224                 tests->eventq_int[channel->channel] = int_seen ? 1 : -1;
225
226                 if (dma_seen && int_seen) {
227                         netif_dbg(efx, drv, efx->net_dev,
228                                   "channel %d event queue passed (with%s NAPI)\n",
229                                   channel->channel,
230                                   test_bit(channel->channel, &napi_ran) ?
231                                   "" : "out");
232                 } else {
233                         /* Report failure and whether either interrupt or DMA
234                          * worked
235                          */
236                         netif_err(efx, drv, efx->net_dev,
237                                   "channel %d timed out waiting for event queue\n",
238                                   channel->channel);
239                         if (int_seen)
240                                 netif_err(efx, drv, efx->net_dev,
241                                           "channel %d saw interrupt "
242                                           "during event queue test\n",
243                                           channel->channel);
244                         if (dma_seen)
245                                 netif_err(efx, drv, efx->net_dev,
246                                           "channel %d event was generated, but "
247                                           "failed to trigger an interrupt\n",
248                                           channel->channel);
249                 }
250         }
251
252         return (dma_pend || int_pend) ? -ETIMEDOUT : 0;
253 }
254
255 static int efx_test_phy(struct efx_nic *efx, struct efx_self_tests *tests,
256                         unsigned flags)
257 {
258         int rc;
259
260         if (!efx->phy_op->run_tests)
261                 return 0;
262
263         mutex_lock(&efx->mac_lock);
264         rc = efx->phy_op->run_tests(efx, tests->phy_ext, flags);
265         mutex_unlock(&efx->mac_lock);
266         if (rc == -EPERM)
267                 rc = 0;
268         else
269                 netif_info(efx, drv, efx->net_dev,
270                            "%s phy selftest\n", rc ? "Failed" : "Passed");
271
272         return rc;
273 }
274
275 /**************************************************************************
276  *
277  * Loopback testing
278  * NB Only one loopback test can be executing concurrently.
279  *
280  **************************************************************************/
281
282 /* Loopback test RX callback
283  * This is called for each received packet during loopback testing.
284  */
285 void efx_loopback_rx_packet(struct efx_nic *efx,
286                             const char *buf_ptr, int pkt_len)
287 {
288         struct efx_loopback_state *state = efx->loopback_selftest;
289         struct efx_loopback_payload *received;
290         struct efx_loopback_payload *payload;
291
292         BUG_ON(!buf_ptr);
293
294         /* If we are just flushing, then drop the packet */
295         if ((state == NULL) || state->flush)
296                 return;
297
298         payload = &state->payload;
299
300         received = (struct efx_loopback_payload *) buf_ptr;
301         received->ip.saddr = payload->ip.saddr;
302         if (state->offload_csum)
303                 received->ip.check = payload->ip.check;
304
305         /* Check that header exists */
306         if (pkt_len < sizeof(received->header)) {
307                 netif_err(efx, drv, efx->net_dev,
308                           "saw runt RX packet (length %d) in %s loopback "
309                           "test\n", pkt_len, LOOPBACK_MODE(efx));
310                 goto err;
311         }
312
313         /* Check that the ethernet header exists */
314         if (memcmp(&received->header, &payload->header, ETH_HLEN) != 0) {
315                 netif_err(efx, drv, efx->net_dev,
316                           "saw non-loopback RX packet in %s loopback test\n",
317                           LOOPBACK_MODE(efx));
318                 goto err;
319         }
320
321         /* Check packet length */
322         if (pkt_len != sizeof(*payload)) {
323                 netif_err(efx, drv, efx->net_dev,
324                           "saw incorrect RX packet length %d (wanted %d) in "
325                           "%s loopback test\n", pkt_len, (int)sizeof(*payload),
326                           LOOPBACK_MODE(efx));
327                 goto err;
328         }
329
330         /* Check that IP header matches */
331         if (memcmp(&received->ip, &payload->ip, sizeof(payload->ip)) != 0) {
332                 netif_err(efx, drv, efx->net_dev,
333                           "saw corrupted IP header in %s loopback test\n",
334                           LOOPBACK_MODE(efx));
335                 goto err;
336         }
337
338         /* Check that msg and padding matches */
339         if (memcmp(&received->msg, &payload->msg, sizeof(received->msg)) != 0) {
340                 netif_err(efx, drv, efx->net_dev,
341                           "saw corrupted RX packet in %s loopback test\n",
342                           LOOPBACK_MODE(efx));
343                 goto err;
344         }
345
346         /* Check that iteration matches */
347         if (received->iteration != payload->iteration) {
348                 netif_err(efx, drv, efx->net_dev,
349                           "saw RX packet from iteration %d (wanted %d) in "
350                           "%s loopback test\n", ntohs(received->iteration),
351                           ntohs(payload->iteration), LOOPBACK_MODE(efx));
352                 goto err;
353         }
354
355         /* Increase correct RX count */
356         netif_vdbg(efx, drv, efx->net_dev,
357                    "got loopback RX in %s loopback test\n", LOOPBACK_MODE(efx));
358
359         atomic_inc(&state->rx_good);
360         return;
361
362  err:
363 #ifdef DEBUG
364         if (atomic_read(&state->rx_bad) == 0) {
365                 netif_err(efx, drv, efx->net_dev, "received packet:\n");
366                 print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 0x10, 1,
367                                buf_ptr, pkt_len, 0);
368                 netif_err(efx, drv, efx->net_dev, "expected packet:\n");
369                 print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 0x10, 1,
370                                &state->payload, sizeof(state->payload), 0);
371         }
372 #endif
373         atomic_inc(&state->rx_bad);
374 }
375
376 /* Initialise an efx_selftest_state for a new iteration */
377 static void efx_iterate_state(struct efx_nic *efx)
378 {
379         struct efx_loopback_state *state = efx->loopback_selftest;
380         struct net_device *net_dev = efx->net_dev;
381         struct efx_loopback_payload *payload = &state->payload;
382
383         /* Initialise the layerII header */
384         ether_addr_copy((u8 *)&payload->header.h_dest, net_dev->dev_addr);
385         ether_addr_copy((u8 *)&payload->header.h_source, payload_source);
386         payload->header.h_proto = htons(ETH_P_IP);
387
388         /* saddr set later and used as incrementing count */
389         payload->ip.daddr = htonl(INADDR_LOOPBACK);
390         payload->ip.ihl = 5;
391         payload->ip.check = (__force __sum16) htons(0xdead);
392         payload->ip.tot_len = htons(sizeof(*payload) - sizeof(struct ethhdr));
393         payload->ip.version = IPVERSION;
394         payload->ip.protocol = IPPROTO_UDP;
395
396         /* Initialise udp header */
397         payload->udp.source = 0;
398         payload->udp.len = htons(sizeof(*payload) - sizeof(struct ethhdr) -
399                                  sizeof(struct iphdr));
400         payload->udp.check = 0; /* checksum ignored */
401
402         /* Fill out payload */
403         payload->iteration = htons(ntohs(payload->iteration) + 1);
404         memcpy(&payload->msg, payload_msg, sizeof(payload_msg));
405
406         /* Fill out remaining state members */
407         atomic_set(&state->rx_good, 0);
408         atomic_set(&state->rx_bad, 0);
409         smp_wmb();
410 }
411
412 static int efx_begin_loopback(struct efx_tx_queue *tx_queue)
413 {
414         struct efx_nic *efx = tx_queue->efx;
415         struct efx_loopback_state *state = efx->loopback_selftest;
416         struct efx_loopback_payload *payload;
417         struct sk_buff *skb;
418         int i;
419         netdev_tx_t rc;
420
421         /* Transmit N copies of buffer */
422         for (i = 0; i < state->packet_count; i++) {
423                 /* Allocate an skb, holding an extra reference for
424                  * transmit completion counting */
425                 skb = alloc_skb(sizeof(state->payload), GFP_KERNEL);
426                 if (!skb)
427                         return -ENOMEM;
428                 state->skbs[i] = skb;
429                 skb_get(skb);
430
431                 /* Copy the payload in, incrementing the source address to
432                  * exercise the rss vectors */
433                 payload = skb_put(skb, sizeof(state->payload));
434                 memcpy(payload, &state->payload, sizeof(state->payload));
435                 payload->ip.saddr = htonl(INADDR_LOOPBACK | (i << 2));
436
437                 /* Ensure everything we've written is visible to the
438                  * interrupt handler. */
439                 smp_wmb();
440
441                 netif_tx_lock_bh(efx->net_dev);
442                 rc = efx_enqueue_skb(tx_queue, skb);
443                 netif_tx_unlock_bh(efx->net_dev);
444
445                 if (rc != NETDEV_TX_OK) {
446                         netif_err(efx, drv, efx->net_dev,
447                                   "TX queue %d could not transmit packet %d of "
448                                   "%d in %s loopback test\n", tx_queue->label,
449                                   i + 1, state->packet_count,
450                                   LOOPBACK_MODE(efx));
451
452                         /* Defer cleaning up the other skbs for the caller */
453                         kfree_skb(skb);
454                         return -EPIPE;
455                 }
456         }
457
458         return 0;
459 }
460
461 static int efx_poll_loopback(struct efx_nic *efx)
462 {
463         struct efx_loopback_state *state = efx->loopback_selftest;
464
465         return atomic_read(&state->rx_good) == state->packet_count;
466 }
467
468 static int efx_end_loopback(struct efx_tx_queue *tx_queue,
469                             struct efx_loopback_self_tests *lb_tests)
470 {
471         struct efx_nic *efx = tx_queue->efx;
472         struct efx_loopback_state *state = efx->loopback_selftest;
473         struct sk_buff *skb;
474         int tx_done = 0, rx_good, rx_bad;
475         int i, rc = 0;
476
477         netif_tx_lock_bh(efx->net_dev);
478
479         /* Count the number of tx completions, and decrement the refcnt. Any
480          * skbs not already completed will be free'd when the queue is flushed */
481         for (i = 0; i < state->packet_count; i++) {
482                 skb = state->skbs[i];
483                 if (skb && !skb_shared(skb))
484                         ++tx_done;
485                 dev_kfree_skb(skb);
486         }
487
488         netif_tx_unlock_bh(efx->net_dev);
489
490         /* Check TX completion and received packet counts */
491         rx_good = atomic_read(&state->rx_good);
492         rx_bad = atomic_read(&state->rx_bad);
493         if (tx_done != state->packet_count) {
494                 /* Don't free the skbs; they will be picked up on TX
495                  * overflow or channel teardown.
496                  */
497                 netif_err(efx, drv, efx->net_dev,
498                           "TX queue %d saw only %d out of an expected %d "
499                           "TX completion events in %s loopback test\n",
500                           tx_queue->label, tx_done, state->packet_count,
501                           LOOPBACK_MODE(efx));
502                 rc = -ETIMEDOUT;
503                 /* Allow to fall through so we see the RX errors as well */
504         }
505
506         /* We may always be up to a flush away from our desired packet total */
507         if (rx_good != state->packet_count) {
508                 netif_dbg(efx, drv, efx->net_dev,
509                           "TX queue %d saw only %d out of an expected %d "
510                           "received packets in %s loopback test\n",
511                           tx_queue->label, rx_good, state->packet_count,
512                           LOOPBACK_MODE(efx));
513                 rc = -ETIMEDOUT;
514                 /* Fall through */
515         }
516
517         /* Update loopback test structure */
518         lb_tests->tx_sent[tx_queue->label] += state->packet_count;
519         lb_tests->tx_done[tx_queue->label] += tx_done;
520         lb_tests->rx_good += rx_good;
521         lb_tests->rx_bad += rx_bad;
522
523         return rc;
524 }
525
526 static int
527 efx_test_loopback(struct efx_tx_queue *tx_queue,
528                   struct efx_loopback_self_tests *lb_tests)
529 {
530         struct efx_nic *efx = tx_queue->efx;
531         struct efx_loopback_state *state = efx->loopback_selftest;
532         int i, begin_rc, end_rc;
533
534         for (i = 0; i < 3; i++) {
535                 /* Determine how many packets to send */
536                 state->packet_count = efx->txq_entries / 3;
537                 state->packet_count = min(1 << (i << 2), state->packet_count);
538                 state->skbs = kcalloc(state->packet_count,
539                                       sizeof(state->skbs[0]), GFP_KERNEL);
540                 if (!state->skbs)
541                         return -ENOMEM;
542                 state->flush = false;
543
544                 netif_dbg(efx, drv, efx->net_dev,
545                           "TX queue %d (hw %d) testing %s loopback with %d packets\n",
546                           tx_queue->label, tx_queue->queue, LOOPBACK_MODE(efx),
547                           state->packet_count);
548
549                 efx_iterate_state(efx);
550                 begin_rc = efx_begin_loopback(tx_queue);
551
552                 /* This will normally complete very quickly, but be
553                  * prepared to wait much longer. */
554                 msleep(1);
555                 if (!efx_poll_loopback(efx)) {
556                         msleep(LOOPBACK_TIMEOUT_MS);
557                         efx_poll_loopback(efx);
558                 }
559
560                 end_rc = efx_end_loopback(tx_queue, lb_tests);
561                 kfree(state->skbs);
562
563                 if (begin_rc || end_rc) {
564                         /* Wait a while to ensure there are no packets
565                          * floating around after a failure. */
566                         schedule_timeout_uninterruptible(HZ / 10);
567                         return begin_rc ? begin_rc : end_rc;
568                 }
569         }
570
571         netif_dbg(efx, drv, efx->net_dev,
572                   "TX queue %d passed %s loopback test with a burst length "
573                   "of %d packets\n", tx_queue->label, LOOPBACK_MODE(efx),
574                   state->packet_count);
575
576         return 0;
577 }
578
579 /* Wait for link up. On Falcon, we would prefer to rely on efx_monitor, but
580  * any contention on the mac lock (via e.g. efx_mac_mcast_work) causes it
581  * to delay and retry. Therefore, it's safer to just poll directly. Wait
582  * for link up and any faults to dissipate. */
583 static int efx_wait_for_link(struct efx_nic *efx)
584 {
585         struct efx_link_state *link_state = &efx->link_state;
586         int count, link_up_count = 0;
587         bool link_up;
588
589         for (count = 0; count < 40; count++) {
590                 schedule_timeout_uninterruptible(HZ / 10);
591
592                 if (efx->type->monitor != NULL) {
593                         mutex_lock(&efx->mac_lock);
594                         efx->type->monitor(efx);
595                         mutex_unlock(&efx->mac_lock);
596                 }
597
598                 mutex_lock(&efx->mac_lock);
599                 link_up = link_state->up;
600                 if (link_up)
601                         link_up = !efx->type->check_mac_fault(efx);
602                 mutex_unlock(&efx->mac_lock);
603
604                 if (link_up) {
605                         if (++link_up_count == 2)
606                                 return 0;
607                 } else {
608                         link_up_count = 0;
609                 }
610         }
611
612         return -ETIMEDOUT;
613 }
614
615 static int efx_test_loopbacks(struct efx_nic *efx, struct efx_self_tests *tests,
616                               unsigned int loopback_modes)
617 {
618         enum efx_loopback_mode mode;
619         struct efx_loopback_state *state;
620         struct efx_channel *channel =
621                 efx_get_channel(efx, efx->tx_channel_offset);
622         struct efx_tx_queue *tx_queue;
623         int rc = 0;
624
625         /* Set the port loopback_selftest member. From this point on
626          * all received packets will be dropped. Mark the state as
627          * "flushing" so all inflight packets are dropped */
628         state = kzalloc(sizeof(*state), GFP_KERNEL);
629         if (state == NULL)
630                 return -ENOMEM;
631         BUG_ON(efx->loopback_selftest);
632         state->flush = true;
633         efx->loopback_selftest = state;
634
635         /* Test all supported loopback modes */
636         for (mode = LOOPBACK_NONE; mode <= LOOPBACK_TEST_MAX; mode++) {
637                 if (!(loopback_modes & (1 << mode)))
638                         continue;
639
640                 /* Move the port into the specified loopback mode. */
641                 state->flush = true;
642                 mutex_lock(&efx->mac_lock);
643                 efx->loopback_mode = mode;
644                 rc = __efx_reconfigure_port(efx);
645                 mutex_unlock(&efx->mac_lock);
646                 if (rc) {
647                         netif_err(efx, drv, efx->net_dev,
648                                   "unable to move into %s loopback\n",
649                                   LOOPBACK_MODE(efx));
650                         goto out;
651                 }
652
653                 rc = efx_wait_for_link(efx);
654                 if (rc) {
655                         netif_err(efx, drv, efx->net_dev,
656                                   "loopback %s never came up\n",
657                                   LOOPBACK_MODE(efx));
658                         goto out;
659                 }
660
661                 /* Test all enabled types of TX queue */
662                 efx_for_each_channel_tx_queue(tx_queue, channel) {
663                         state->offload_csum = (tx_queue->label &
664                                                EFX_TXQ_TYPE_OFFLOAD);
665                         rc = efx_test_loopback(tx_queue,
666                                                &tests->loopback[mode]);
667                         if (rc)
668                                 goto out;
669                 }
670         }
671
672  out:
673         /* Remove the flush. The caller will remove the loopback setting */
674         state->flush = true;
675         efx->loopback_selftest = NULL;
676         wmb();
677         kfree(state);
678
679         if (rc == -EPERM)
680                 rc = 0;
681
682         return rc;
683 }
684
685 /**************************************************************************
686  *
687  * Entry point
688  *
689  *************************************************************************/
690
691 int efx_selftest(struct efx_nic *efx, struct efx_self_tests *tests,
692                  unsigned flags)
693 {
694         enum efx_loopback_mode loopback_mode = efx->loopback_mode;
695         int phy_mode = efx->phy_mode;
696         int rc_test = 0, rc_reset, rc;
697
698         efx_selftest_async_cancel(efx);
699
700         /* Online (i.e. non-disruptive) testing
701          * This checks interrupt generation, event delivery and PHY presence. */
702
703         rc = efx_test_phy_alive(efx, tests);
704         if (rc && !rc_test)
705                 rc_test = rc;
706
707         rc = efx_test_nvram(efx, tests);
708         if (rc && !rc_test)
709                 rc_test = rc;
710
711         rc = efx_test_interrupts(efx, tests);
712         if (rc && !rc_test)
713                 rc_test = rc;
714
715         rc = efx_test_eventq_irq(efx, tests);
716         if (rc && !rc_test)
717                 rc_test = rc;
718
719         if (rc_test)
720                 return rc_test;
721
722         if (!(flags & ETH_TEST_FL_OFFLINE))
723                 return efx_test_phy(efx, tests, flags);
724
725         /* Offline (i.e. disruptive) testing
726          * This checks MAC and PHY loopback on the specified port. */
727
728         /* Detach the device so the kernel doesn't transmit during the
729          * loopback test and the watchdog timeout doesn't fire.
730          */
731         efx_device_detach_sync(efx);
732
733         if (efx->type->test_chip) {
734                 rc_reset = efx->type->test_chip(efx, tests);
735                 if (rc_reset) {
736                         netif_err(efx, hw, efx->net_dev,
737                                   "Unable to recover from chip test\n");
738                         efx_schedule_reset(efx, RESET_TYPE_DISABLE);
739                         return rc_reset;
740                 }
741
742                 if ((tests->memory < 0 || tests->registers < 0) && !rc_test)
743                         rc_test = -EIO;
744         }
745
746         /* Ensure that the phy is powered and out of loopback
747          * for the bist and loopback tests */
748         mutex_lock(&efx->mac_lock);
749         efx->phy_mode &= ~PHY_MODE_LOW_POWER;
750         efx->loopback_mode = LOOPBACK_NONE;
751         __efx_reconfigure_port(efx);
752         mutex_unlock(&efx->mac_lock);
753
754         rc = efx_test_phy(efx, tests, flags);
755         if (rc && !rc_test)
756                 rc_test = rc;
757
758         rc = efx_test_loopbacks(efx, tests, efx->loopback_modes);
759         if (rc && !rc_test)
760                 rc_test = rc;
761
762         /* restore the PHY to the previous state */
763         mutex_lock(&efx->mac_lock);
764         efx->phy_mode = phy_mode;
765         efx->loopback_mode = loopback_mode;
766         __efx_reconfigure_port(efx);
767         mutex_unlock(&efx->mac_lock);
768
769         efx_device_attach_if_not_resetting(efx);
770
771         return rc_test;
772 }
773
774 void efx_selftest_async_start(struct efx_nic *efx)
775 {
776         struct efx_channel *channel;
777
778         efx_for_each_channel(channel, efx)
779                 efx_nic_event_test_start(channel);
780         schedule_delayed_work(&efx->selftest_work, IRQ_TIMEOUT);
781 }
782
783 void efx_selftest_async_cancel(struct efx_nic *efx)
784 {
785         cancel_delayed_work_sync(&efx->selftest_work);
786 }
787
788 static void efx_selftest_async_work(struct work_struct *data)
789 {
790         struct efx_nic *efx = container_of(data, struct efx_nic,
791                                            selftest_work.work);
792         struct efx_channel *channel;
793         int cpu;
794
795         efx_for_each_channel(channel, efx) {
796                 cpu = efx_nic_event_test_irq_cpu(channel);
797                 if (cpu < 0)
798                         netif_err(efx, ifup, efx->net_dev,
799                                   "channel %d failed to trigger an interrupt\n",
800                                   channel->channel);
801                 else
802                         netif_dbg(efx, ifup, efx->net_dev,
803                                   "channel %d triggered interrupt on CPU %d\n",
804                                   channel->channel, cpu);
805         }
806 }
807
808 void efx_selftest_async_init(struct efx_nic *efx)
809 {
810         INIT_DELAYED_WORK(&efx->selftest_work, efx_selftest_async_work);
811 }