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