diff options
| -rw-r--r-- | drivers/net/ethernet/sfc/efx.c | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/sfc/enum.h | 6 | ||||
| -rw-r--r-- | drivers/net/ethernet/sfc/falcon.c | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/sfc/farch.c | 6 | ||||
| -rw-r--r-- | drivers/net/ethernet/sfc/mcdi.c | 8 |
5 files changed, 15 insertions, 11 deletions
diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c index 9fe375f1710a..efad5f73e1ce 100644 --- a/drivers/net/ethernet/sfc/efx.c +++ b/drivers/net/ethernet/sfc/efx.c | |||
| @@ -80,8 +80,7 @@ const char *const efx_reset_type_names[] = { | |||
| 80 | [RESET_TYPE_TX_WATCHDOG] = "TX_WATCHDOG", | 80 | [RESET_TYPE_TX_WATCHDOG] = "TX_WATCHDOG", |
| 81 | [RESET_TYPE_INT_ERROR] = "INT_ERROR", | 81 | [RESET_TYPE_INT_ERROR] = "INT_ERROR", |
| 82 | [RESET_TYPE_RX_RECOVERY] = "RX_RECOVERY", | 82 | [RESET_TYPE_RX_RECOVERY] = "RX_RECOVERY", |
| 83 | [RESET_TYPE_RX_DESC_FETCH] = "RX_DESC_FETCH", | 83 | [RESET_TYPE_DMA_ERROR] = "DMA_ERROR", |
| 84 | [RESET_TYPE_TX_DESC_FETCH] = "TX_DESC_FETCH", | ||
| 85 | [RESET_TYPE_TX_SKIP] = "TX_SKIP", | 84 | [RESET_TYPE_TX_SKIP] = "TX_SKIP", |
| 86 | [RESET_TYPE_MC_FAILURE] = "MC_FAILURE", | 85 | [RESET_TYPE_MC_FAILURE] = "MC_FAILURE", |
| 87 | }; | 86 | }; |
diff --git a/drivers/net/ethernet/sfc/enum.h b/drivers/net/ethernet/sfc/enum.h index ab8fb5889e55..8665921d7170 100644 --- a/drivers/net/ethernet/sfc/enum.h +++ b/drivers/net/ethernet/sfc/enum.h | |||
| @@ -147,8 +147,7 @@ enum efx_loopback_mode { | |||
| 147 | * @RESET_TYPE_TX_WATCHDOG: reset due to TX watchdog | 147 | * @RESET_TYPE_TX_WATCHDOG: reset due to TX watchdog |
| 148 | * @RESET_TYPE_INT_ERROR: reset due to internal error | 148 | * @RESET_TYPE_INT_ERROR: reset due to internal error |
| 149 | * @RESET_TYPE_RX_RECOVERY: reset to recover from RX datapath errors | 149 | * @RESET_TYPE_RX_RECOVERY: reset to recover from RX datapath errors |
| 150 | * @RESET_TYPE_RX_DESC_FETCH: pcie error during rx descriptor fetch | 150 | * @RESET_TYPE_DMA_ERROR: DMA error |
| 151 | * @RESET_TYPE_TX_DESC_FETCH: pcie error during tx descriptor fetch | ||
| 152 | * @RESET_TYPE_TX_SKIP: hardware completed empty tx descriptors | 151 | * @RESET_TYPE_TX_SKIP: hardware completed empty tx descriptors |
| 153 | * @RESET_TYPE_MC_FAILURE: MC reboot/assertion | 152 | * @RESET_TYPE_MC_FAILURE: MC reboot/assertion |
| 154 | */ | 153 | */ |
| @@ -163,8 +162,7 @@ enum reset_type { | |||
| 163 | RESET_TYPE_TX_WATCHDOG, | 162 | RESET_TYPE_TX_WATCHDOG, |
| 164 | RESET_TYPE_INT_ERROR, | 163 | RESET_TYPE_INT_ERROR, |
| 165 | RESET_TYPE_RX_RECOVERY, | 164 | RESET_TYPE_RX_RECOVERY, |
| 166 | RESET_TYPE_RX_DESC_FETCH, | 165 | RESET_TYPE_DMA_ERROR, |
| 167 | RESET_TYPE_TX_DESC_FETCH, | ||
| 168 | RESET_TYPE_TX_SKIP, | 166 | RESET_TYPE_TX_SKIP, |
| 169 | RESET_TYPE_MC_FAILURE, | 167 | RESET_TYPE_MC_FAILURE, |
| 170 | RESET_TYPE_MAX, | 168 | RESET_TYPE_MAX, |
diff --git a/drivers/net/ethernet/sfc/falcon.c b/drivers/net/ethernet/sfc/falcon.c index 0be1f3711c89..1140b832d541 100644 --- a/drivers/net/ethernet/sfc/falcon.c +++ b/drivers/net/ethernet/sfc/falcon.c | |||
| @@ -1893,8 +1893,7 @@ static enum reset_type falcon_map_reset_reason(enum reset_type reason) | |||
| 1893 | { | 1893 | { |
| 1894 | switch (reason) { | 1894 | switch (reason) { |
| 1895 | case RESET_TYPE_RX_RECOVERY: | 1895 | case RESET_TYPE_RX_RECOVERY: |
| 1896 | case RESET_TYPE_RX_DESC_FETCH: | 1896 | case RESET_TYPE_DMA_ERROR: |
| 1897 | case RESET_TYPE_TX_DESC_FETCH: | ||
| 1898 | case RESET_TYPE_TX_SKIP: | 1897 | case RESET_TYPE_TX_SKIP: |
| 1899 | /* These can occasionally occur due to hardware bugs. | 1898 | /* These can occasionally occur due to hardware bugs. |
| 1900 | * We try to reset without disrupting the link. | 1899 | * We try to reset without disrupting the link. |
diff --git a/drivers/net/ethernet/sfc/farch.c b/drivers/net/ethernet/sfc/farch.c index b6af8f4cc704..d21483dfea40 100644 --- a/drivers/net/ethernet/sfc/farch.c +++ b/drivers/net/ethernet/sfc/farch.c | |||
| @@ -832,7 +832,7 @@ efx_farch_handle_tx_event(struct efx_channel *channel, efx_qword_t *event) | |||
| 832 | efx_farch_notify_tx_desc(tx_queue); | 832 | efx_farch_notify_tx_desc(tx_queue); |
| 833 | netif_tx_unlock(efx->net_dev); | 833 | netif_tx_unlock(efx->net_dev); |
| 834 | } else if (EFX_QWORD_FIELD(*event, FSF_AZ_TX_EV_PKT_ERR)) { | 834 | } else if (EFX_QWORD_FIELD(*event, FSF_AZ_TX_EV_PKT_ERR)) { |
| 835 | efx_schedule_reset(efx, RESET_TYPE_TX_DESC_FETCH); | 835 | efx_schedule_reset(efx, RESET_TYPE_DMA_ERROR); |
| 836 | } else { | 836 | } else { |
| 837 | netif_err(efx, tx_err, efx->net_dev, | 837 | netif_err(efx, tx_err, efx->net_dev, |
| 838 | "channel %d unexpected TX event " | 838 | "channel %d unexpected TX event " |
| @@ -1217,7 +1217,7 @@ efx_farch_handle_driver_event(struct efx_channel *channel, efx_qword_t *event) | |||
| 1217 | "RX DMA Q %d reports descriptor fetch error." | 1217 | "RX DMA Q %d reports descriptor fetch error." |
| 1218 | " RX Q %d is disabled.\n", ev_sub_data, | 1218 | " RX Q %d is disabled.\n", ev_sub_data, |
| 1219 | ev_sub_data); | 1219 | ev_sub_data); |
| 1220 | efx_schedule_reset(efx, RESET_TYPE_RX_DESC_FETCH); | 1220 | efx_schedule_reset(efx, RESET_TYPE_DMA_ERROR); |
| 1221 | } else | 1221 | } else |
| 1222 | efx_sriov_desc_fetch_err(efx, ev_sub_data); | 1222 | efx_sriov_desc_fetch_err(efx, ev_sub_data); |
| 1223 | break; | 1223 | break; |
| @@ -1227,7 +1227,7 @@ efx_farch_handle_driver_event(struct efx_channel *channel, efx_qword_t *event) | |||
| 1227 | "TX DMA Q %d reports descriptor fetch error." | 1227 | "TX DMA Q %d reports descriptor fetch error." |
| 1228 | " TX Q %d is disabled.\n", ev_sub_data, | 1228 | " TX Q %d is disabled.\n", ev_sub_data, |
| 1229 | ev_sub_data); | 1229 | ev_sub_data); |
| 1230 | efx_schedule_reset(efx, RESET_TYPE_TX_DESC_FETCH); | 1230 | efx_schedule_reset(efx, RESET_TYPE_DMA_ERROR); |
| 1231 | } else | 1231 | } else |
| 1232 | efx_sriov_desc_fetch_err(efx, ev_sub_data); | 1232 | efx_sriov_desc_fetch_err(efx, ev_sub_data); |
| 1233 | break; | 1233 | break; |
diff --git a/drivers/net/ethernet/sfc/mcdi.c b/drivers/net/ethernet/sfc/mcdi.c index ff90ebf51dbd..381063484ee4 100644 --- a/drivers/net/ethernet/sfc/mcdi.c +++ b/drivers/net/ethernet/sfc/mcdi.c | |||
| @@ -587,6 +587,14 @@ void efx_mcdi_process_event(struct efx_channel *channel, | |||
| 587 | efx_ptp_event(efx, event); | 587 | efx_ptp_event(efx, event); |
| 588 | break; | 588 | break; |
| 589 | 589 | ||
| 590 | case MCDI_EVENT_CODE_TX_ERR: | ||
| 591 | case MCDI_EVENT_CODE_RX_ERR: | ||
| 592 | netif_err(efx, hw, efx->net_dev, | ||
| 593 | "%s DMA error (event: "EFX_QWORD_FMT")\n", | ||
| 594 | code == MCDI_EVENT_CODE_TX_ERR ? "TX" : "RX", | ||
| 595 | EFX_QWORD_VAL(*event)); | ||
| 596 | efx_schedule_reset(efx, RESET_TYPE_DMA_ERROR); | ||
| 597 | break; | ||
| 590 | default: | 598 | default: |
| 591 | netif_err(efx, hw, efx->net_dev, "Unknown MCDI event 0x%x\n", | 599 | netif_err(efx, hw, efx->net_dev, "Unknown MCDI event 0x%x\n", |
| 592 | code); | 600 | code); |
