
-----Original Message----- From: Vladimir Oltean olteanv@gmail.com Sent: Monday, January 25, 2021 2:24 PM To: Tom Rini trini@konsulko.com; Joe Hershberger joe.hershberger@ni.com; Simon Glass sjg@chromium.org; Bin Meng bmeng.cn@gmail.com; u-boot@lists.denx.de Cc: Michael Walle michael@walle.cc; Alexandru Marginean alexandru.marginean@nxp.com; Claudiu Manoil claudiu.manoil@nxp.com Subject: [PATCH v4 2/7] net: phy: introduce fixed_phy_create for DSA CPU ports
From: Vladimir Oltean vladimir.oltean@nxp.com
The DSA (Distributed Switch Architecture) implementation has made a design decision when it got introduced to the Linux kernel in 2008. That was to hide away from the user the CPU-facing Ethernet MAC, since it does not make sense to register it as a struct net_device (UCLASS_ETH udevice for U-Boot), because that would never be beneficial for a user: they would not be able to use it for traffic, since conceptually, a packet delivered to the CPU port should loop back into the system.
Nonetheless, DSA has had numerous growing pains due to the lack of a struct net_device for the CPU port, but so far it has overcome them. It is unlikely at this stage of maturity that this aspect of it will change.
We would like U-Boot to present the same information as Linux, to be at parity in terms of number of interfaces, so that ethNaddr environment variables could directly be associated between U-Boot and Linux. Therefore, we would implicitly like U-Boot to hide the CPU port from the user as well.
But the paradox is that DSA still needs a struct phy_device to inform the driver of the parameters of the link that it should configure the CPU port to. The problem is that the phy_device is typically returned via a call to phy_connect, which needs an udevice to attach the PHY to, and to search its ofnode for the 'fixed-link' property. But we don't have an udevice to present for the CPU port.
Since 99% of DSA setups are MAC-to-MAC connections between the switch and the host Ethernet controller, the struct phy_device is going to be a fixed PHY. This simplifies things quite a bit. In U-Boot, a fixed PHY does not need an MDIO bus, and does not need an attached dev either. Basically, the phy_connect call doesn't do any connection, it just creates the fixed PHY.
The proposal of this patch is to introduce a new fixed_phy_create function which will take a single argument: the ofnode that holds this:
port@4 { reg = <4>; phy-mode = "internal";
fixed-link { speed = <2500>; full-duplex; };
};
and probe a fixed PHY driver using the information from this ofnode. DSA will probably be the only user of this function.
Signed-off-by: Vladimir Oltean vladimir.oltean@nxp.com
Reviewed-by: Claudiu Manoil claudiu.manoil@nxp.com