OSDN Git Service

sfc_ef100: don't call efx_reset_down()/up() on EF100
authorEdward Cree <ecree@solarflare.com>
Mon, 27 Jul 2020 11:56:40 +0000 (12:56 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 27 Jul 2020 19:26:55 +0000 (12:26 -0700)
We handle everything ourselves in ef100_reset(), rather than relying on
 the generic down/up routines.

Signed-off-by: Edward Cree <ecree@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/sfc/efx_common.c

index 5667694..26b05ec 100644 (file)
@@ -814,14 +814,18 @@ fail:
  */
 int efx_reset(struct efx_nic *efx, enum reset_type method)
 {
+       int rc, rc2 = 0;
        bool disabled;
-       int rc, rc2;
 
        netif_info(efx, drv, efx->net_dev, "resetting (%s)\n",
                   RESET_TYPE(method));
 
        efx_device_detach_sync(efx);
-       efx_reset_down(efx, method);
+       /* efx_reset_down() grabs locks that prevent recovery on EF100.
+        * EF100 reset is handled in the efx_nic_type callback below.
+        */
+       if (efx_nic_rev(efx) != EFX_REV_EF100)
+               efx_reset_down(efx, method);
 
        rc = efx->type->reset(efx, method);
        if (rc) {
@@ -849,7 +853,8 @@ out:
        disabled = rc ||
                method == RESET_TYPE_DISABLE ||
                method == RESET_TYPE_RECOVER_OR_DISABLE;
-       rc2 = efx_reset_up(efx, method, !disabled);
+       if (efx_nic_rev(efx) != EFX_REV_EF100)
+               rc2 = efx_reset_up(efx, method, !disabled);
        if (rc2) {
                disabled = true;
                if (!rc)