Message ID | 20190215161708.18645-1-paul.kocialkowski@bootlin.com (mailing list archive) |
---|---|
State | Mainlined, archived |
Commit | 197f9ab7f08ce4b9ece662f747c3991b2f0fbb57 |
Headers | show |
Series | net: phy: xgmiitorgmii: Support generic PHY status read | expand |
On Fri, Feb 15, 2019 at 05:17:08PM +0100, Paul Kocialkowski wrote: > Some PHY drivers like the generic one do not provide a read_status > callback on their own but rely on genphy_read_status being called > directly. > > With the current code, this results in a NULL function pointer call. > Call genphy_read_status instead when there is no specific callback. > > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> > --- > drivers/net/phy/xilinx_gmii2rgmii.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/phy/xilinx_gmii2rgmii.c b/drivers/net/phy/xilinx_gmii2rgmii.c > index 74a8782313cf..bd6084e315de 100644 > --- a/drivers/net/phy/xilinx_gmii2rgmii.c > +++ b/drivers/net/phy/xilinx_gmii2rgmii.c > @@ -44,7 +44,10 @@ static int xgmiitorgmii_read_status(struct phy_device *phydev) > u16 val = 0; > int err; > > - err = priv->phy_drv->read_status(phydev); Hi Paul How about using phy_read_status()? Andrew
Hi, On Fri, 2019-02-15 at 17:23 +0100, Andrew Lunn wrote: > On Fri, Feb 15, 2019 at 05:17:08PM +0100, Paul Kocialkowski wrote: > > Some PHY drivers like the generic one do not provide a read_status > > callback on their own but rely on genphy_read_status being called > > directly. > > > > With the current code, this results in a NULL function pointer call. > > Call genphy_read_status instead when there is no specific callback. > > > > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> > > --- > > drivers/net/phy/xilinx_gmii2rgmii.c | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/net/phy/xilinx_gmii2rgmii.c b/drivers/net/phy/xilinx_gmii2rgmii.c > > index 74a8782313cf..bd6084e315de 100644 > > --- a/drivers/net/phy/xilinx_gmii2rgmii.c > > +++ b/drivers/net/phy/xilinx_gmii2rgmii.c > > @@ -44,7 +44,10 @@ static int xgmiitorgmii_read_status(struct phy_device *phydev) > > u16 val = 0; > > int err; > > > > - err = priv->phy_drv->read_status(phydev); > > Hi Paul > > How about using phy_read_status()? Thanks fo rthe suggestion! Though I don't that would work here since our priv->phy_drv != phydev->drv, so it looks like we need to be breaking it down in the driver. I suppose this driver is a bit unusual since it represents a GMII to RGMII bridge, so it's not actually a PHY driver on its own -- it just sticks itself in between the actual PHY and the MAC. Cheers, Paul
> > How about using phy_read_status()? > > Thanks fo rthe suggestion! Though I don't that would work here since > our priv->phy_drv != phydev->drv, so it looks like we need to be > breaking it down in the driver. Ahm, yes. I forgot how this driver works. Andrew
From: Paul Kocialkowski <paul.kocialkowski@bootlin.com> Date: Fri, 15 Feb 2019 17:17:08 +0100 > Some PHY drivers like the generic one do not provide a read_status > callback on their own but rely on genphy_read_status being called > directly. > > With the current code, this results in a NULL function pointer call. > Call genphy_read_status instead when there is no specific callback. > > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> Applied, thanks. Unfortunately I only noticed your updated version with the Fixes tag after pushing this version out. I'll be more careful next time :)
diff --git a/drivers/net/phy/xilinx_gmii2rgmii.c b/drivers/net/phy/xilinx_gmii2rgmii.c index 74a8782313cf..bd6084e315de 100644 --- a/drivers/net/phy/xilinx_gmii2rgmii.c +++ b/drivers/net/phy/xilinx_gmii2rgmii.c @@ -44,7 +44,10 @@ static int xgmiitorgmii_read_status(struct phy_device *phydev) u16 val = 0; int err; - err = priv->phy_drv->read_status(phydev); + if (priv->phy_drv->read_status) + err = priv->phy_drv->read_status(phydev); + else + err = genphy_read_status(phydev); if (err < 0) return err;
Some PHY drivers like the generic one do not provide a read_status callback on their own but rely on genphy_read_status being called directly. With the current code, this results in a NULL function pointer call. Call genphy_read_status instead when there is no specific callback. Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> --- drivers/net/phy/xilinx_gmii2rgmii.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)