mirror of
https://github.com/adulau/aha.git
synced 2025-01-02 14:13:18 +00:00
sfc: Serialise tenxpress_special_reset() with statistics fetches
On some boards 10Xpress feeds a 156 MHz clock to the Falcon XMAC. MAC statistics DMA can fail while this clock is stopped during a PHY reset. From: Steve Hodgson <shodgson@solarflare.com> Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
parent
ef08af03ef
commit
c8fcc49c54
1 changed files with 10 additions and 5 deletions
|
@ -214,7 +214,10 @@ static int tenxpress_special_reset(struct efx_nic *efx)
|
|||
{
|
||||
int rc, reg;
|
||||
|
||||
EFX_TRACE(efx, "%s\n", __func__);
|
||||
/* The XGMAC clock is driven from the SFC7101/SFT9001 312MHz clock, so
|
||||
* a special software reset can glitch the XGMAC sufficiently for stats
|
||||
* requests to fail. Since we don't ofen special_reset, just lock. */
|
||||
spin_lock(&efx->stats_lock);
|
||||
|
||||
/* Initiate reset */
|
||||
reg = mdio_clause45_read(efx, efx->mii.phy_id,
|
||||
|
@ -223,20 +226,22 @@ static int tenxpress_special_reset(struct efx_nic *efx)
|
|||
mdio_clause45_write(efx, efx->mii.phy_id, MDIO_MMD_PMAPMD,
|
||||
PMA_PMD_EXT_CTRL_REG, reg);
|
||||
|
||||
msleep(200);
|
||||
mdelay(200);
|
||||
|
||||
/* Wait for the blocks to come out of reset */
|
||||
rc = mdio_clause45_wait_reset_mmds(efx,
|
||||
TENXPRESS_REQUIRED_DEVS);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
goto unlock;
|
||||
|
||||
/* Try and reconfigure the device */
|
||||
rc = tenxpress_init(efx);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
goto unlock;
|
||||
|
||||
return 0;
|
||||
unlock:
|
||||
spin_unlock(&efx->stats_lock);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void tenxpress_set_bad_lp(struct efx_nic *efx, bool bad_lp)
|
||||
|
|
Loading…
Reference in a new issue