Message ID | 20200712164815.1763532-1-olteanv@gmail.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net-next] net: phy: continue searching for C45 MMDs even if first returned ffff:ffff | expand |
On Sun, 12 Jul 2020 19:48:15 +0300 Vladimir Oltean wrote: > From: Vladimir Oltean <vladimir.oltean@nxp.com> > > At the time of introduction, in commit bdeced75b13f ("net: dsa: felix: > Add PCS operations for PHYLINK"), support for the Lynx PCS inside Felix > was relying, for USXGMII support, on the fact that get_phy_device() is > able to parse the Lynx PCS "device-in-package" registers for this C45 > MDIO device and identify it correctly. > [...] PHY folks, is this part of the larger PCS discussion or something you're happy to have applied in the current form?
On Thu, Jul 16, 2020 at 12:01:39PM -0700, Jakub Kicinski wrote: > On Sun, 12 Jul 2020 19:48:15 +0300 Vladimir Oltean wrote: > > From: Vladimir Oltean <vladimir.oltean@nxp.com> > > > > At the time of introduction, in commit bdeced75b13f ("net: dsa: felix: > > Add PCS operations for PHYLINK"), support for the Lynx PCS inside Felix > > was relying, for USXGMII support, on the fact that get_phy_device() is > > able to parse the Lynx PCS "device-in-package" registers for this C45 > > MDIO device and identify it correctly. > > [...] > > PHY folks, is this part of the larger PCS discussion or something > you're happy to have applied in the current form? Hi Jakub This seems fine, independent of the PCS discussions. Andrew
> Then the rest of the code just carried on thinking "ok, MMD 1 (PMA/PMD) > says that there are 31 devices in that package, each having a device id > of ffff:ffff, that's perfectly fine, let's go ahead and probe this PHY > device". With a device ID of ffff:ffff, what PHY driver was getting loaded? > - MDIO_DEVS1=0x008a, MDIO_DEVS2=0x0000, > - MDIO_DEVID1=0x0083, MDIO_DEVID2=0xe400 Now that we have valid IDs, is the same driver getting loaded? Do this ID adding somewhere? > Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Andrew
On Thu, Jul 16, 2020 at 10:12:10PM +0200, Andrew Lunn wrote: > > Then the rest of the code just carried on thinking "ok, MMD 1 (PMA/PMD) > > says that there are 31 devices in that package, each having a device id > > of ffff:ffff, that's perfectly fine, let's go ahead and probe this PHY > > device". > > With a device ID of ffff:ffff, what PHY driver was getting loaded? > You mean ffff:fffe. No PHY driver. I am driving this PCS locally from within drivers/net/dsa/ocelot/felix_vsc9959.c. I call get_phy_device at the address where I know a PCS is present, for the simple reason that I like an extra validation that my internal MDIO reads/writes are going somewhere. I've had situations in the past where the PCS was working because the bootloader had initialized it, however the internal MDIO reads/writes from Linux were broken. So, the fact that get_phy_device can read the PHY ID correctly is giving me some assurance. > > - MDIO_DEVS1=0x008a, MDIO_DEVS2=0x0000, > > - MDIO_DEVID1=0x0083, MDIO_DEVID2=0xe400 > > Now that we have valid IDs, is the same driver getting loaded? Do this > ID adding somewhere? > Not applicable, see above. > > Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> > > Reviewed-by: Andrew Lunn <andrew@lunn.ch> > > Andrew Thanks, -Vladimir
On Thu, Jul 16, 2020 at 11:51:37PM +0300, Vladimir Oltean wrote: > On Thu, Jul 16, 2020 at 10:12:10PM +0200, Andrew Lunn wrote: > > > Then the rest of the code just carried on thinking "ok, MMD 1 (PMA/PMD) > > > says that there are 31 devices in that package, each having a device id > > > of ffff:ffff, that's perfectly fine, let's go ahead and probe this PHY > > > device". > > > > With a device ID of ffff:ffff, what PHY driver was getting loaded? > > > > You mean ffff:fffe. Sorry, I was wrong to correct you here. ffff:fffe was the devices-in-package register, the phy id was ffff:ffff. Doesn't change the rest of the answer though. > No PHY driver. I am driving this PCS locally from within > drivers/net/dsa/ocelot/felix_vsc9959.c. I call get_phy_device at the > address where I know a PCS is present, for the simple reason that I like > an extra validation that my internal MDIO reads/writes are going > somewhere. I've had situations in the past where the PCS was working > because the bootloader had initialized it, however the internal MDIO > reads/writes from Linux were broken. So, the fact that get_phy_device > can read the PHY ID correctly is giving me some assurance. > > > > - MDIO_DEVS1=0x008a, MDIO_DEVS2=0x0000, > > > - MDIO_DEVID1=0x0083, MDIO_DEVID2=0xe400 > > > > Now that we have valid IDs, is the same driver getting loaded? Do this > > ID adding somewhere? > > > > Not applicable, see above. > > > > Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> > > > > Reviewed-by: Andrew Lunn <andrew@lunn.ch> > > > > Andrew > > Thanks, > -Vladimir
From: Vladimir Oltean <olteanv@gmail.com> Date: Sun, 12 Jul 2020 19:48:15 +0300 > From: Vladimir Oltean <vladimir.oltean@nxp.com> > > At the time of introduction, in commit bdeced75b13f ("net: dsa: felix: > Add PCS operations for PHYLINK"), support for the Lynx PCS inside Felix > was relying, for USXGMII support, on the fact that get_phy_device() is > able to parse the Lynx PCS "device-in-package" registers for this C45 > MDIO device and identify it correctly. ... > Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Applied to net-next, thanks.
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index cf3505e2f587..15e5bb25103f 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -734,7 +734,8 @@ static int get_phy_c45_ids(struct mii_bus *bus, int addr, /* Find first non-zero Devices In package. Device zero is reserved * for 802.3 c45 complied PHYs, so don't probe it at first. */ - for (i = 1; i < MDIO_MMD_NUM && devs_in_pkg == 0; i++) { + for (i = 1; i < MDIO_MMD_NUM && devs_in_pkg == 0 && + (devs_in_pkg & 0x1fffffff) == 0x1fffffff; i++) { if (i == MDIO_MMD_VEND1 || i == MDIO_MMD_VEND2) { /* Check that there is a device present at this * address before reading the devices-in-package