2021-05-25 05:57:29

by Wong Vee Khee

[permalink] [raw]
Subject: [RFC net-next 1/2] net: phy: allow mdio bus to probe for c45 devices before c22

Some MAC controllers that is able to pair with external PHY devices
such as the Synopsys MAC Controller (STMMAC) support both Clause-22 and
Clause-45 access.

When paired with PHY devices that only accessible via Clause-45, such as
the Marvell 88E2110, any attempts to access the PHY devices via
Clause-22 will get a PHY ID of all zeroes.

To fix this, we introduce MDIOBUS_C45_C22 which the MAC controller will
try with Clause-45 access before going to Clause-22.

Signed-off-by: Wong Vee Khee <[email protected]>
---
include/linux/phy.h | 1 +
1 file changed, 1 insertion(+)

diff --git a/include/linux/phy.h b/include/linux/phy.h
index 60d2b26026a2..9b0e2c76e19b 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -368,6 +368,7 @@ struct mii_bus {
MDIOBUS_C22,
MDIOBUS_C45,
MDIOBUS_C22_C45,
+ MDIOBUS_C45_C22,
} probe_capabilities;

/** @shared_lock: protect access to the shared element */
--
2.25.1


2021-05-25 08:53:24

by Russell King (Oracle)

[permalink] [raw]
Subject: Re: [RFC net-next 1/2] net: phy: allow mdio bus to probe for c45 devices before c22

On Tue, May 25, 2021 at 01:58:39PM +0800, Wong Vee Khee wrote:
> Some MAC controllers that is able to pair with external PHY devices
> such as the Synopsys MAC Controller (STMMAC) support both Clause-22 and
> Clause-45 access.
>
> When paired with PHY devices that only accessible via Clause-45, such as
> the Marvell 88E2110, any attempts to access the PHY devices via
> Clause-22 will get a PHY ID of all zeroes.
>
> To fix this, we introduce MDIOBUS_C45_C22 which the MAC controller will
> try with Clause-45 access before going to Clause-22.
>
> Signed-off-by: Wong Vee Khee <[email protected]>
> ---
> include/linux/phy.h | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/include/linux/phy.h b/include/linux/phy.h
> index 60d2b26026a2..9b0e2c76e19b 100644
> --- a/include/linux/phy.h
> +++ b/include/linux/phy.h
> @@ -368,6 +368,7 @@ struct mii_bus {
> MDIOBUS_C22,
> MDIOBUS_C45,
> MDIOBUS_C22_C45,
> + MDIOBUS_C45_C22,
> } probe_capabilities;
>
> /** @shared_lock: protect access to the shared element */

The new definition doesn't seem to be used anywhere, so this patch
merely adds the definition. It doesn't do what it says in the subject
line. Any driver that sets the capabilities to MDIOBUS_C45_C22 will
end up not doing any probing of the PHY.

--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!

2021-06-01 10:54:06

by Wong Vee Khee

[permalink] [raw]
Subject: Re: [RFC net-next 1/2] net: phy: allow mdio bus to probe for c45 devices before c22

On Tue, May 25, 2021 at 09:31:17AM +0100, Russell King (Oracle) wrote:
> On Tue, May 25, 2021 at 01:58:39PM +0800, Wong Vee Khee wrote:
> > Some MAC controllers that is able to pair with external PHY devices
> > such as the Synopsys MAC Controller (STMMAC) support both Clause-22 and
> > Clause-45 access.
> >
> > When paired with PHY devices that only accessible via Clause-45, such as
> > the Marvell 88E2110, any attempts to access the PHY devices via
> > Clause-22 will get a PHY ID of all zeroes.
> >
> > To fix this, we introduce MDIOBUS_C45_C22 which the MAC controller will
> > try with Clause-45 access before going to Clause-22.
> >
> > Signed-off-by: Wong Vee Khee <[email protected]>
> > ---
> > include/linux/phy.h | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/include/linux/phy.h b/include/linux/phy.h
> > index 60d2b26026a2..9b0e2c76e19b 100644
> > --- a/include/linux/phy.h
> > +++ b/include/linux/phy.h
> > @@ -368,6 +368,7 @@ struct mii_bus {
> > MDIOBUS_C22,
> > MDIOBUS_C45,
> > MDIOBUS_C22_C45,
> > + MDIOBUS_C45_C22,
> > } probe_capabilities;
> >
> > /** @shared_lock: protect access to the shared element */
>
> The new definition doesn't seem to be used anywhere, so this patch
> merely adds the definition. It doesn't do what it says in the subject
> line. Any driver that sets the capabilities to MDIOBUS_C45_C22 will
> end up not doing any probing of the PHY.
>

You are right. I left out the required changes in drivers/net/mdio_bus.c:-

diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index 6045ad3def12..fbf9b8f1f47c 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -684,6 +684,11 @@ struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr)
if (IS_ERR(phydev))
phydev = get_phy_device(bus, addr, true);
break;
+ case MDIOBUS_C45_C22:
+ phydev = get_phy_device(bus, addr, true);
+ if (IS_ERR(phydev))
+ phydev = get_phy_device(bus, addr, false);
+ break;
}

if (IS_ERR(phydev))


VK