|
@@ -180,17 +180,12 @@ bool mdio_clause45_links_ok(struct efx_nic *efx, unsigned int mmd_mask)
|
|
|
return false;
|
|
|
else if (efx_phy_mode_disabled(efx->phy_mode))
|
|
|
return false;
|
|
|
- else if (efx->loopback_mode == LOOPBACK_PHYXS) {
|
|
|
+ else if (efx->loopback_mode == LOOPBACK_PHYXS)
|
|
|
mmd_mask &= ~(MDIO_MMDREG_DEVS_PHYXS |
|
|
|
MDIO_MMDREG_DEVS_PCS |
|
|
|
MDIO_MMDREG_DEVS_PMAPMD |
|
|
|
MDIO_MMDREG_DEVS_AN);
|
|
|
- if (!mmd_mask) {
|
|
|
- reg = mdio_clause45_read(efx, phy_id, MDIO_MMD_PHYXS,
|
|
|
- MDIO_PHYXS_STATUS2);
|
|
|
- return !(reg & (1 << MDIO_PHYXS_STATUS2_RX_FAULT_LBN));
|
|
|
- }
|
|
|
- } else if (efx->loopback_mode == LOOPBACK_PCS)
|
|
|
+ else if (efx->loopback_mode == LOOPBACK_PCS)
|
|
|
mmd_mask &= ~(MDIO_MMDREG_DEVS_PCS |
|
|
|
MDIO_MMDREG_DEVS_PMAPMD |
|
|
|
MDIO_MMDREG_DEVS_AN);
|
|
@@ -198,6 +193,13 @@ bool mdio_clause45_links_ok(struct efx_nic *efx, unsigned int mmd_mask)
|
|
|
mmd_mask &= ~(MDIO_MMDREG_DEVS_PMAPMD |
|
|
|
MDIO_MMDREG_DEVS_AN);
|
|
|
|
|
|
+ if (!mmd_mask) {
|
|
|
+ /* Use presence of XGMII faults in leui of link state */
|
|
|
+ reg = mdio_clause45_read(efx, phy_id, MDIO_MMD_PHYXS,
|
|
|
+ MDIO_PHYXS_STATUS2);
|
|
|
+ return !(reg & (1 << MDIO_PHYXS_STATUS2_RX_FAULT_LBN));
|
|
|
+ }
|
|
|
+
|
|
|
while (mmd_mask) {
|
|
|
if (mmd_mask & 1) {
|
|
|
/* Double reads because link state is latched, and a
|