Message ID | 20200323025633.6069-9-zhengdejin5@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series | introduce read_poll_timeout | expand |
On 3/22/2020 7:56 PM, Dejin Zheng wrote: > use phy_read_poll_timeout() to replace the poll codes for > simplify the code in phy_poll_reset() function. > > Reviewed-by: Andrew Lunn <andrew@lunn.ch> > Signed-off-by: Dejin Zheng <zhengdejin5@gmail.com> > --- > v5 -> v6: > - add some check for keep the code more similar. > v4 -> v5: > - it can add msleep before call phy_read_poll_timeout() > to keep the code more similar. so add it. > v3 -> v4: > - drop it. > v2 -> v3: > - adapt to it after modifying the parameter order of the > newly added function > v1 -> v2: > - remove the handle of phy_read()'s return error. > > drivers/net/phy/phy_device.c | 17 ++++++----------- > 1 file changed, 6 insertions(+), 11 deletions(-) > > diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c > index a585faf8b844..eb1b177a9878 100644 > --- a/drivers/net/phy/phy_device.c > +++ b/drivers/net/phy/phy_device.c > @@ -1059,18 +1059,13 @@ EXPORT_SYMBOL(phy_disconnect); > static int phy_poll_reset(struct phy_device *phydev) > { > /* Poll until the reset bit clears (50ms per retry == 0.6 sec) */ > - unsigned int retries = 12; > - int ret; > - > - do { > - msleep(50); > - ret = phy_read(phydev, MII_BMCR); > - if (ret < 0) > - return ret; > - } while (ret & BMCR_RESET && --retries); > - if (ret & BMCR_RESET) > - return -ETIMEDOUT; > + int ret, val; > > + msleep(50); > + ret = phy_read_poll_timeout(phydev, MII_BMCR, val, !(val & BMCR_RESET), > + 50000, 550000); > + if (ret) > + return ret; You may consider creating a special variant of phy_read_poll_timeout() which sleeps before checking the condition, since there are at least two occurrences of this here and within marvell10g.c?
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index a585faf8b844..eb1b177a9878 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -1059,18 +1059,13 @@ EXPORT_SYMBOL(phy_disconnect); static int phy_poll_reset(struct phy_device *phydev) { /* Poll until the reset bit clears (50ms per retry == 0.6 sec) */ - unsigned int retries = 12; - int ret; - - do { - msleep(50); - ret = phy_read(phydev, MII_BMCR); - if (ret < 0) - return ret; - } while (ret & BMCR_RESET && --retries); - if (ret & BMCR_RESET) - return -ETIMEDOUT; + int ret, val; + msleep(50); + ret = phy_read_poll_timeout(phydev, MII_BMCR, val, !(val & BMCR_RESET), + 50000, 550000); + if (ret) + return ret; /* Some chips (smsc911x) may still need up to another 1ms after the * BMCR_RESET bit is cleared before they are usable. */