Message ID | 1437127639-48082-1-git-send-email-shh.xie@gmail.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: <shh.xie@gmail.com> Date: Fri, 17 Jul 2015 18:07:19 +0800 > From: Shaohui Xie <Shaohui.Xie@freescale.com> > > We store c45 PHY's id information in c45_ids, so it should be used to > check the matching between PHY driver and PHY device for c45 PHY. > > Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> -----Original Message----- > From: David Miller [mailto:davem@davemloft.net] > Sent: Tuesday, July 21, 2015 3:17 PM > To: shh.xie@gmail.com > Cc: netdev@vger.kernel.org; Xie Shaohui-B21989 > Subject: Re: [PATCH] net/mdio: fix mdio_bus_match for c45 PHY > > From: <shh.xie@gmail.com> > Date: Fri, 17 Jul 2015 18:07:19 +0800 > > > From: Shaohui Xie <Shaohui.Xie@freescale.com> > > > > We store c45 PHY's id information in c45_ids, so it should be used to > > check the matching between PHY driver and PHY device for c45 PHY. > > > > Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com> > > Applied, thanks. As mentioned, the patch was applied, but it does not merged, seems it was missed. Thanks. Shaohui -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c index 095ef3f..46a14cb 100644 --- a/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c @@ -421,6 +421,8 @@ static int mdio_bus_match(struct device *dev, struct device_driver *drv) { struct phy_device *phydev = to_phy_device(dev); struct phy_driver *phydrv = to_phy_driver(drv); + const int num_ids = ARRAY_SIZE(phydev->c45_ids.device_ids); + int i; if (of_driver_match_device(dev, drv)) return 1; @@ -428,8 +430,21 @@ static int mdio_bus_match(struct device *dev, struct device_driver *drv) if (phydrv->match_phy_device) return phydrv->match_phy_device(phydev); - return (phydrv->phy_id & phydrv->phy_id_mask) == - (phydev->phy_id & phydrv->phy_id_mask); + if (phydev->is_c45) { + for (i = 1; i < num_ids; i++) { + if (!(phydev->c45_ids.devices_in_package & (1 << i))) + continue; + + if ((phydrv->phy_id & phydrv->phy_id_mask) == + (phydev->c45_ids.device_ids[i] & + phydrv->phy_id_mask)) + return 1; + } + return 0; + } else { + return (phydrv->phy_id & phydrv->phy_id_mask) == + (phydev->phy_id & phydrv->phy_id_mask); + } } #ifdef CONFIG_PM