sfc: Fix test for MDIO read failure
Commit 27dd2caca4
changed
mdio_clause45_check_mmds() to read both DEVS0 and DEVS1 registers and
to combine their values into an unsigned 32-bit mask. This made the
following test for a negative (failure) value useless. Fix it to
check whether either read failed.
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
22ef02c23a
commit
7b065f91fa
@@ -125,24 +125,25 @@ int mdio_clause45_wait_reset_mmds(struct efx_nic *efx,
|
|||||||
int mdio_clause45_check_mmds(struct efx_nic *efx,
|
int mdio_clause45_check_mmds(struct efx_nic *efx,
|
||||||
unsigned int mmd_mask, unsigned int fatal_mask)
|
unsigned int mmd_mask, unsigned int fatal_mask)
|
||||||
{
|
{
|
||||||
|
int mmd = 0, probe_mmd, devs0, devs1;
|
||||||
u32 devices;
|
u32 devices;
|
||||||
int mmd = 0, probe_mmd;
|
|
||||||
|
|
||||||
/* Historically we have probed the PHYXS to find out what devices are
|
/* Historically we have probed the PHYXS to find out what devices are
|
||||||
* present,but that doesn't work so well if the PHYXS isn't expected
|
* present,but that doesn't work so well if the PHYXS isn't expected
|
||||||
* to exist, if so just find the first item in the list supplied. */
|
* to exist, if so just find the first item in the list supplied. */
|
||||||
probe_mmd = (mmd_mask & MDIO_MMDREG_DEVS_PHYXS) ? MDIO_MMD_PHYXS :
|
probe_mmd = (mmd_mask & MDIO_MMDREG_DEVS_PHYXS) ? MDIO_MMD_PHYXS :
|
||||||
__ffs(mmd_mask);
|
__ffs(mmd_mask);
|
||||||
devices = (mdio_clause45_read(efx, efx->mii.phy_id,
|
|
||||||
probe_mmd, MDIO_MMDREG_DEVS0) |
|
|
||||||
mdio_clause45_read(efx, efx->mii.phy_id,
|
|
||||||
probe_mmd, MDIO_MMDREG_DEVS1) << 16);
|
|
||||||
|
|
||||||
/* Check all the expected MMDs are present */
|
/* Check all the expected MMDs are present */
|
||||||
if (devices < 0) {
|
devs0 = mdio_clause45_read(efx, efx->mii.phy_id,
|
||||||
|
probe_mmd, MDIO_MMDREG_DEVS0);
|
||||||
|
devs1 = mdio_clause45_read(efx, efx->mii.phy_id,
|
||||||
|
probe_mmd, MDIO_MMDREG_DEVS1);
|
||||||
|
if (devs0 < 0 || devs1 < 0) {
|
||||||
EFX_ERR(efx, "failed to read devices present\n");
|
EFX_ERR(efx, "failed to read devices present\n");
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
devices = devs0 | (devs1 << 16);
|
||||||
if ((devices & mmd_mask) != mmd_mask) {
|
if ((devices & mmd_mask) != mmd_mask) {
|
||||||
EFX_ERR(efx, "required MMDs not present: got %x, "
|
EFX_ERR(efx, "required MMDs not present: got %x, "
|
||||||
"wanted %x\n", devices, mmd_mask);
|
"wanted %x\n", devices, mmd_mask);
|
||||||
|
Reference in New Issue
Block a user