Check for -EIO and 0xffff during initialization to prevent silent failures. Add error logging to gem_init_phy to report failures. --- drivers/net/ethernet/sun/sungem.c | 8 ++++++-- drivers/net/sungem_phy.c | 7 ++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/sun/sungem.c b/drivers/net/ethernet/sun/sungem.c index 8e69d917d..525aba527 100644 --- a/drivers/net/ethernet/sun/sungem.c +++ b/drivers/net/ethernet/sun/sungem.c @@ -1707,8 +1707,12 @@ static void gem_init_phy(struct gem *gp) sungem_phy_probe(&gp->phy_mii, gp->mii_phy_addr); /* Init PHY */ - if (gp->phy_mii.def && gp->phy_mii.def->ops->init) - gp->phy_mii.def->ops->init(&gp->phy_mii); + if (gp->phy_mii.def && gp->phy_mii.def->ops->init) { + int err = gp->phy_mii.def->ops->init(&gp->phy_mii); + + if (err) + netdev_err(gp->dev, "PHY init failed: %d\n", err); + } } else { gem_pcs_reset(gp); gem_pcs_reinit_adv(gp); diff --git a/drivers/net/sungem_phy.c b/drivers/net/sungem_phy.c index 44cbe1938..ec8800c93 100644 --- a/drivers/net/sungem_phy.c +++ b/drivers/net/sungem_phy.c @@ -296,7 +296,12 @@ static int bcm5411_init(struct mii_phy *phy) sungem_phy_write(phy, MII_BMCR, BMCR_RESET); sungem_phy_write(phy, MII_BMCR, 0x1340); - data = sungem_phy_read(phy, MII_BCM5400_GB_CONTROL); + val = sungem_phy_read(phy, MII_BCM5400_GB_CONTROL); + + if (val < 0 || val == 0xffff) + return -EIO; + + data = (u16)val; data |= MII_BCM5400_GB_CONTROL_FULLDUPLEXCAP; sungem_phy_write(phy, MII_BCM5400_GB_CONTROL, data); -- 2.43.0