sfc: Add EF10 support for TX/RX DMA error events handling.
Also, since we handle all DMA errors in the same way, merge RESET_TYPE_(RX|TX)_DESC_FETCH into RESET_TYPE_DMA_ERROR. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
This commit is contained in:
parent
977a5d5d32
commit
3de82b91ea
|
@ -80,8 +80,7 @@ const char *const efx_reset_type_names[] = {
|
|||
[RESET_TYPE_TX_WATCHDOG] = "TX_WATCHDOG",
|
||||
[RESET_TYPE_INT_ERROR] = "INT_ERROR",
|
||||
[RESET_TYPE_RX_RECOVERY] = "RX_RECOVERY",
|
||||
[RESET_TYPE_RX_DESC_FETCH] = "RX_DESC_FETCH",
|
||||
[RESET_TYPE_TX_DESC_FETCH] = "TX_DESC_FETCH",
|
||||
[RESET_TYPE_DMA_ERROR] = "DMA_ERROR",
|
||||
[RESET_TYPE_TX_SKIP] = "TX_SKIP",
|
||||
[RESET_TYPE_MC_FAILURE] = "MC_FAILURE",
|
||||
};
|
||||
|
|
|
@ -147,8 +147,7 @@ enum efx_loopback_mode {
|
|||
* @RESET_TYPE_TX_WATCHDOG: reset due to TX watchdog
|
||||
* @RESET_TYPE_INT_ERROR: reset due to internal error
|
||||
* @RESET_TYPE_RX_RECOVERY: reset to recover from RX datapath errors
|
||||
* @RESET_TYPE_RX_DESC_FETCH: pcie error during rx descriptor fetch
|
||||
* @RESET_TYPE_TX_DESC_FETCH: pcie error during tx descriptor fetch
|
||||
* @RESET_TYPE_DMA_ERROR: DMA error
|
||||
* @RESET_TYPE_TX_SKIP: hardware completed empty tx descriptors
|
||||
* @RESET_TYPE_MC_FAILURE: MC reboot/assertion
|
||||
*/
|
||||
|
@ -163,8 +162,7 @@ enum reset_type {
|
|||
RESET_TYPE_TX_WATCHDOG,
|
||||
RESET_TYPE_INT_ERROR,
|
||||
RESET_TYPE_RX_RECOVERY,
|
||||
RESET_TYPE_RX_DESC_FETCH,
|
||||
RESET_TYPE_TX_DESC_FETCH,
|
||||
RESET_TYPE_DMA_ERROR,
|
||||
RESET_TYPE_TX_SKIP,
|
||||
RESET_TYPE_MC_FAILURE,
|
||||
RESET_TYPE_MAX,
|
||||
|
|
|
@ -1893,8 +1893,7 @@ static enum reset_type falcon_map_reset_reason(enum reset_type reason)
|
|||
{
|
||||
switch (reason) {
|
||||
case RESET_TYPE_RX_RECOVERY:
|
||||
case RESET_TYPE_RX_DESC_FETCH:
|
||||
case RESET_TYPE_TX_DESC_FETCH:
|
||||
case RESET_TYPE_DMA_ERROR:
|
||||
case RESET_TYPE_TX_SKIP:
|
||||
/* These can occasionally occur due to hardware bugs.
|
||||
* We try to reset without disrupting the link.
|
||||
|
|
|
@ -832,7 +832,7 @@ efx_farch_handle_tx_event(struct efx_channel *channel, efx_qword_t *event)
|
|||
efx_farch_notify_tx_desc(tx_queue);
|
||||
netif_tx_unlock(efx->net_dev);
|
||||
} else if (EFX_QWORD_FIELD(*event, FSF_AZ_TX_EV_PKT_ERR)) {
|
||||
efx_schedule_reset(efx, RESET_TYPE_TX_DESC_FETCH);
|
||||
efx_schedule_reset(efx, RESET_TYPE_DMA_ERROR);
|
||||
} else {
|
||||
netif_err(efx, tx_err, efx->net_dev,
|
||||
"channel %d unexpected TX event "
|
||||
|
@ -1217,7 +1217,7 @@ efx_farch_handle_driver_event(struct efx_channel *channel, efx_qword_t *event)
|
|||
"RX DMA Q %d reports descriptor fetch error."
|
||||
" RX Q %d is disabled.\n", ev_sub_data,
|
||||
ev_sub_data);
|
||||
efx_schedule_reset(efx, RESET_TYPE_RX_DESC_FETCH);
|
||||
efx_schedule_reset(efx, RESET_TYPE_DMA_ERROR);
|
||||
} else
|
||||
efx_sriov_desc_fetch_err(efx, ev_sub_data);
|
||||
break;
|
||||
|
@ -1227,7 +1227,7 @@ efx_farch_handle_driver_event(struct efx_channel *channel, efx_qword_t *event)
|
|||
"TX DMA Q %d reports descriptor fetch error."
|
||||
" TX Q %d is disabled.\n", ev_sub_data,
|
||||
ev_sub_data);
|
||||
efx_schedule_reset(efx, RESET_TYPE_TX_DESC_FETCH);
|
||||
efx_schedule_reset(efx, RESET_TYPE_DMA_ERROR);
|
||||
} else
|
||||
efx_sriov_desc_fetch_err(efx, ev_sub_data);
|
||||
break;
|
||||
|
|
|
@ -587,6 +587,14 @@ void efx_mcdi_process_event(struct efx_channel *channel,
|
|||
efx_ptp_event(efx, event);
|
||||
break;
|
||||
|
||||
case MCDI_EVENT_CODE_TX_ERR:
|
||||
case MCDI_EVENT_CODE_RX_ERR:
|
||||
netif_err(efx, hw, efx->net_dev,
|
||||
"%s DMA error (event: "EFX_QWORD_FMT")\n",
|
||||
code == MCDI_EVENT_CODE_TX_ERR ? "TX" : "RX",
|
||||
EFX_QWORD_VAL(*event));
|
||||
efx_schedule_reset(efx, RESET_TYPE_DMA_ERROR);
|
||||
break;
|
||||
default:
|
||||
netif_err(efx, hw, efx->net_dev, "Unknown MCDI event 0x%x\n",
|
||||
code);
|
||||
|
|
Loading…
Reference in New Issue