|
@@ -85,14 +85,14 @@ int falcon_reset_xaui(struct efx_nic *efx)
|
|
|
return -ETIMEDOUT;
|
|
|
}
|
|
|
|
|
|
-static void falcon_mask_status_intr(struct efx_nic *efx, bool enable)
|
|
|
+static void falcon_ack_status_intr(struct efx_nic *efx)
|
|
|
{
|
|
|
efx_oword_t reg;
|
|
|
|
|
|
if ((efx_nic_rev(efx) != EFX_REV_FALCON_B0) || LOOPBACK_INTERNAL(efx))
|
|
|
return;
|
|
|
|
|
|
- /* We expect xgmii faults if the wireside link is up */
|
|
|
+ /* We expect xgmii faults if the wireside link is down */
|
|
|
if (!EFX_WORKAROUND_5147(efx) || !efx->link_state.up)
|
|
|
return;
|
|
|
|
|
@@ -101,14 +101,7 @@ static void falcon_mask_status_intr(struct efx_nic *efx, bool enable)
|
|
|
if (efx->xmac_poll_required)
|
|
|
return;
|
|
|
|
|
|
- /* Flush the ISR */
|
|
|
- if (enable)
|
|
|
- efx_reado(efx, ®, FR_AB_XM_MGT_INT_MSK);
|
|
|
-
|
|
|
- EFX_POPULATE_OWORD_2(reg,
|
|
|
- FRF_AB_XM_MSK_RMTFLT, !enable,
|
|
|
- FRF_AB_XM_MSK_LCLFLT, !enable);
|
|
|
- efx_writeo(efx, ®, FR_AB_XM_MGT_INT_MASK);
|
|
|
+ efx_reado(efx, ®, FR_AB_XM_MGT_INT_MSK);
|
|
|
}
|
|
|
|
|
|
static bool falcon_xgxs_link_ok(struct efx_nic *efx)
|
|
@@ -283,15 +276,13 @@ static bool falcon_xmac_check_fault(struct efx_nic *efx)
|
|
|
|
|
|
static int falcon_reconfigure_xmac(struct efx_nic *efx)
|
|
|
{
|
|
|
- falcon_mask_status_intr(efx, false);
|
|
|
-
|
|
|
falcon_reconfigure_xgxs_core(efx);
|
|
|
falcon_reconfigure_xmac_core(efx);
|
|
|
|
|
|
falcon_reconfigure_mac_wrapper(efx);
|
|
|
|
|
|
efx->xmac_poll_required = !falcon_xmac_link_ok_retry(efx, 5);
|
|
|
- falcon_mask_status_intr(efx, true);
|
|
|
+ falcon_ack_status_intr(efx);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -362,9 +353,8 @@ void falcon_poll_xmac(struct efx_nic *efx)
|
|
|
!efx->xmac_poll_required)
|
|
|
return;
|
|
|
|
|
|
- falcon_mask_status_intr(efx, false);
|
|
|
efx->xmac_poll_required = !falcon_xmac_link_ok_retry(efx, 1);
|
|
|
- falcon_mask_status_intr(efx, true);
|
|
|
+ falcon_ack_status_intr(efx);
|
|
|
}
|
|
|
|
|
|
struct efx_mac_operations falcon_xmac_operations = {
|