On Sun, May 24, 2020 at 11:28:52PM -0500, Jeremy Linton wrote: > Hi, > > On 5/24/20 9:44 AM, Andrew Lunn wrote: > > > +++ b/include/linux/phy.h > > > @@ -275,6 +275,11 @@ struct mii_bus { > > > int reset_delay_us; > > > /* RESET GPIO descriptor pointer */ > > > struct gpio_desc *reset_gpiod; > > > + /* bus capabilities, used for probing */ > > > + enum { > > > + MDIOBUS_C22_ONLY = 0, > > > + MDIOBUS_C45_FIRST, > > > + } probe_capabilities; > > > }; > > > > > > I'm not so keen on _FIRST. It suggest _LAST would also be valid. But > > that then suggests this is not a bus property, but a PHY property, and > > some PHYs might need _FIRST and other phys need _LAST, and then you > > have a bus which has both sorts of PHY on it, and you have a problem. > > > > So i think it would be better to have > > > > enum { > > MDIOBUS_UNKNOWN = 0, > > MDIOBUS_C22, > > MDIOBUS_C45, > > MDIOBUS_C45_C22, > > } bus_capabilities; > > > > Describe just what the bus master can support. > > Yes, the naming is reasonable and I will update it in the next patch. I went > around a bit myself with this naming early on, and the problem I saw was > that a C45 capable master, can have C45 electrical phy's that only respond > to c22 requests (AFAIK).
If you have a master that can only generate clause 45 cycles, and someone is daft enough to connect a clause 22 only PHY to it, the result is hardware that doesn't work - there's no getting around that. The MDIO interface can't generate the appropriate cycles to access the clause 22 PHY. So, this is not something we need care about. > So the MDIOBUS_C45 (I think I was calling it > C45_ONLY) is an invalid selection. Not, that it wouldn't be helpful to have > a C45_ONLY case, but that the assumption is that you wouldn't try and probe > c22 registers, which I thought was a mistake. MDIOBUS_C45 means "I can generate clause 45 cycles". MDIOBUS_C22 means "I can generate clause 22 cycles". MDIOBUS_C45_C22 means "I can generate both clause 45 and clause 22 cycles." Notice carefully the values these end up with - MDIOBUS_C22 = BIT(0), MDIOBUS_C45 = BIT(1), MDIOBUS_C45_C22 = BIT(0) | BIT(1). I suspect that was no coincidence in Andrew's suggestion. -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTC for 0.8m (est. 1762m) line in suburbia: sync at 13.1Mbps down 424kbps up