Messages in this thread | | | Subject | Re: [PATCH net] net: phy: Don't assume loopback is supported | From | Florian Fainelli <> | Date | Fri, 15 Mar 2019 15:48:41 -0700 |
| |
On 3/14/19 3:37 AM, Jose Abreu wrote: > Some PHYs may not support loopback mode so we need to check if register > is read-only. >
In that case it may be appropriate to have a specific PHY driver that implements a set_loopback() method returning -EOPNOTSUPP instead of changing the generic PHY implementation.
> Fixes: f0f9b4ed2338 ("net: phy: Add phy loopback support in net phy framework") > Signed-off-by: Jose Abreu <joabreu@synopsys.com> > Cc: Andrew Lunn <andrew@lunn.ch> > Cc: Florian Fainelli <f.fainelli@gmail.com> > Cc: "David S. Miller" <davem@davemloft.net> > Cc: Joao Pinto <joao.pinto@synopsys.com>
This looks fine anyway:
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
> --- > drivers/net/phy/phy_device.c | 20 ++++++++++++++++++-- > 1 file changed, 18 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c > index 49fdd1ee798e..a749639d98c3 100644 > --- a/drivers/net/phy/phy_device.c > +++ b/drivers/net/phy/phy_device.c > @@ -1918,8 +1918,24 @@ EXPORT_SYMBOL(genphy_resume); > > int genphy_loopback(struct phy_device *phydev, bool enable) > { > - return phy_modify(phydev, MII_BMCR, BMCR_LOOPBACK, > - enable ? BMCR_LOOPBACK : 0); > + int ret; > + > + ret = phy_modify(phydev, MII_BMCR, BMCR_LOOPBACK, > + enable ? BMCR_LOOPBACK : 0); > + if (ret < 0) > + return ret; > + > + ret = phy_read(phydev, MII_BMCR); > + if (ret < 0) > + return ret; > + > + if (enable) { > + if (ret & BMCR_LOOPBACK) > + return 0; > + return -EOPNOTSUPP; > + } > + > + return 0; > } > EXPORT_SYMBOL(genphy_loopback); > >
-- Florian
| |