sfc: Fix mapping of reset reasons and flags to methods
There are certain hardware bugs that may occur on Falcon during normal operation, that require a reset to recover from. We try to minimise disruption by keeping the PHY running, following a reset sequence labelled as 'invisible'. Siena does not suffer from these hardware bugs, so we have not implemented an 'invisible' reset sequence. However, if a similar error does occur (due to a hardware fault or software bug) then the code shared with Falcon will wrongly assume that the PHY is not being reset. Since the mapping of reset reasons (internal) and flags (ethtool) to methods must differ significantly between NIC types, move it into per-NIC-type functions (replacing the insufficient reset_world_flags field). Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
This commit is contained in:
@@ -2183,26 +2183,16 @@ void efx_schedule_reset(struct efx_nic *efx, enum reset_type type)
|
||||
case RESET_TYPE_WORLD:
|
||||
case RESET_TYPE_DISABLE:
|
||||
method = type;
|
||||
netif_dbg(efx, drv, efx->net_dev, "scheduling %s reset\n",
|
||||
RESET_TYPE(method));
|
||||
break;
|
||||
case RESET_TYPE_RX_RECOVERY:
|
||||
case RESET_TYPE_RX_DESC_FETCH:
|
||||
case RESET_TYPE_TX_DESC_FETCH:
|
||||
case RESET_TYPE_TX_SKIP:
|
||||
method = RESET_TYPE_INVISIBLE;
|
||||
break;
|
||||
case RESET_TYPE_MC_FAILURE:
|
||||
default:
|
||||
method = RESET_TYPE_ALL;
|
||||
break;
|
||||
}
|
||||
|
||||
if (method != type)
|
||||
method = efx->type->map_reset_reason(type);
|
||||
netif_dbg(efx, drv, efx->net_dev,
|
||||
"scheduling %s reset for %s\n",
|
||||
RESET_TYPE(method), RESET_TYPE(type));
|
||||
else
|
||||
netif_dbg(efx, drv, efx->net_dev, "scheduling %s reset\n",
|
||||
RESET_TYPE(method));
|
||||
break;
|
||||
}
|
||||
|
||||
set_bit(method, &efx->reset_pending);
|
||||
|
||||
|
Reference in New Issue
Block a user