Skip to content

Commit

Permalink
sfc: Stop masking out XGMII faults over reconfigures
Browse files Browse the repository at this point in the history
The aim of this code was to avoid a spurious XGMII fault over a MAC
reconfigure. It's less relevant now that the PHY reconfigure isn't
called from the MAC reconfigure.

After applying this patch, our link stress test passed 48 hours of
testing without ever resetting the PHY.

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Steve Hodgson authored and David S. Miller committed Apr 28, 2010
1 parent 6369545 commit ef524f2
Showing 1 changed file with 5 additions and 15 deletions.
20 changes: 5 additions & 15 deletions drivers/net/sfc/falcon_xmac.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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, &reg, 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, &reg, FR_AB_XM_MGT_INT_MASK);
efx_reado(efx, &reg, FR_AB_XM_MGT_INT_MSK);
}

static bool falcon_xgxs_link_ok(struct efx_nic *efx)
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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 = {
Expand Down

0 comments on commit ef524f2

Please sign in to comment.