Re: [PATCH v9 4/4] net: phy: bcm-phy-lib: Implement BroadR-Reach link modes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 6/22/24 21:12, Andrew Lunn wrote:
On Fri, Jun 21, 2024 at 01:26:33PM +0200, Kamil Horák (2N) wrote:
Implement single-pair BroadR-Reach modes on bcm5481x PHY by Broadcom.
Create set of functions alternative to IEEE 802.3 to handle
configuration of these modes on compatible Broadcom PHYs.
What i've not seen anywhere is a link between BroadR-Reach and LRE.
Maybe you could explain the relationship here in the commit message?
And maybe also how LDS fits in.

Tried to extend it a bit... LRE should be for "Long Reach Ethernet" but Broadcom

only uses the acronym in the datasheets... LDS is "Long-Distance Signaling", really screwed

term for a link auto-negotiation...


+int bcm_setup_master_slave(struct phy_device *phydev)
This is missing the lre in the name.
Fixed.

+static int bcm54811_read_abilities(struct phy_device *phydev)
+{
+	int i, val, err;
+	u8 brr_mode;
+
+	for (i = 0; i < ARRAY_SIZE(bcm54811_linkmodes); i++)
+		linkmode_clear_bit(bcm54811_linkmodes[i], phydev->supported);
I think that needs a comment since it is not clear what is going on
here. What set these bits in supported?

This is an equivalent of genphy_read_abilities for an IEEE PHY, that is, it fills the phydev->supported bit array exactly

as genphy_read_abilities does. The genphy_read_abilities is even called if the PHY is not in BRR mode.

+
+	err = bcm5481x_get_brrmode(phydev, &brr_mode);
+	if (err)
+		return err;
+
+	if (brr_mode) {
I would expect the DT property to be here somewhere. If the DT
property is present, set phydev->supported to only the BRR modes,
otherwise set it to the standard baseT modes. That should then allow
the core to do most of the validation. This is based on my
understanding the coupling hardware makes the two modes mutually
exclusive?

From my point of view relying on DT property only would imply to validate the setting with what is read from the PHY on

all code locations where it is currently read by bcm5481x_get_brrmode. This is because the PHY can be reset externally

(at least by power-cycling it) and after reset, it is in IEEE mode. Thus, I chose to set the BRR mode on/off  upon initialization

and then read the setting from the chip when necessary.  The PHY can also be reset by writing bit 15 to register 0

in both IEEE and BRR modes (LRECR/BMCR).

The device I am developing on has no option for IEEE interface but in pure theory, kind of hardware plug-in would be

possible as I was told by our hardware team. However, not even the evaluation kit for bcm54811 can be switched

between BRR and IEEE hardware without at least soldering and desoldering some components on the PCB.


+	/* With BCM54811, BroadR-Reach implies no autoneg */
+	if (brr)
+		phydev->autoneg = 0;
So long as phydev->supported does not indicate autoneg, this should
not happen.

I also thought so but unfortunately our batch of bcm54811 indicates possible autoneg in its status register

 (LRESR_LDSABILITY) but refuses to negotiate. So this is rather a preparation for bcm54810 full support. Unlike bcm54811,

the bcm54810 should be aneg-capable but I cannot verify it without the hardware available. The information around

 it is rather fuzzy, we were told by Broadcom tech support that the 54811 should autonegotiate as well but

 the datasheets from the same source clearly indicates "no". Same for the bcm54811 evaluation kit,

there is no autoneg option available (only 10/100Mbit and master/slave).


In conclusion, the idea was to support as much as possible but with given hardware, only a subset could be verified

 - that is bcm54811 10 or 100 Mbit on one pair and forced master / slave selection. As for the other possibilities, I only

could test that the autoneg is probably not there or at least it does not function with identical hardware on both ends.

We also have a BRR switch and some media converters (BRR/Ethernet) from other manufacturer with bcm54811 to help

the development and all those are fixed setting only, no autoneg.



	Andrew


Kamil





[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux