On 2/15/19 10:34 AM, Paul Kocialkowski wrote: > Hi, > > On Fri, 2019-02-15 at 09:38 -0800, Florian Fainelli wrote: >> On 2/15/19 8:32 AM, 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. >>> >>> Fixes: f411a6160bd4 ("net: phy: Add gmiitorgmii converter support") >>> Signed-off-by: Paul Kocialkowski <paul.kocialkow...@bootlin.com> >>> --- >>> Added Fixes tag and net label for resend. >> >> You would want to use phy_read_status() which encapsulates that check as >> well as checks that the phy_drv pointer is not NULL. > > Well, this driver is a bit different and our priv->phy_drv != phydev- >> drv, so we can't use the helper directly. I should probably have > mentionned it in the commit message, sorry! > > As I was mentionning to Andrew in the initial submission of this patch, > 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.
Yes, my bad, you should still consider checking priv->phy_drv though, if someone unbinds the PHY driver on either side, you are toast. > > Cheers and thanks for the review, > > Paul > >>> 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); >>> + if (priv->phy_drv->read_status) >>> + err = priv->phy_drv->read_status(phydev); >>> + else >>> + err = genphy_read_status(phydev); >>> if (err < 0) >>> return err; >>> >>> >> >> -- Florian