diff --git a/drivers/net/phy/aquantia/aquantia_main.c b/drivers/net/phy/aquantia/aquantia_main.c index dce5def0dc5a..af04e429ae2a 100644 --- a/drivers/net/phy/aquantia/aquantia_main.c +++ b/drivers/net/phy/aquantia/aquantia_main.c @@ -124,6 +124,7 @@ /* Vendor specific 1, MDIO_MMD_VEND1 */ #define VEND1_GLOBAL_FW_ID 0x0020 #define VEND1_GLOBAL_FW_ID_MAJOR GENMASK(15, 8) +#define VEND1_GLOBAL_FW_ID_MASK GENMASK(15, 0) #define VEND1_GLOBAL_FW_ID_MINOR GENMASK(7, 0) #define VEND1_GLOBAL_GEN_STAT2 0xc831 @@ -688,7 +689,9 @@ static int aqr107_wait_reset_complete(struct phy_device *phydev) int val; return phy_read_mmd_poll_timeout(phydev, MDIO_MMD_VEND1, - VEND1_GLOBAL_FW_ID, val, val != 0, + VEND1_GLOBAL_FW_ID, val, + ((val & VEND1_GLOBAL_FW_ID_MASK) != 0 && + (val & VEND1_GLOBAL_FW_ID_MASK) != VEND1_GLOBAL_FW_ID_MASK), 20000, 2000000, false); } @@ -964,7 +967,7 @@ static int aqr107_suspend(struct phy_device *phydev) int err; if (priv->skip_lpm) - return 0; + return 0; err = phy_set_bits_mmd(phydev, MDIO_MMD_VEND1, MDIO_CTRL1, MDIO_CTRL1_LPOWER); @@ -980,7 +983,7 @@ static int aqr107_resume(struct phy_device *phydev) int err; if (priv->skip_lpm) - return 0; + return 0; err = phy_clear_bits_mmd(phydev, MDIO_MMD_VEND1, MDIO_CTRL1, MDIO_CTRL1_LPOWER);