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
	
	Block a user