Re: Unsupported phy-connection-type sgmii-2500 in arch/powerpc/boot/dts/fsl/t1023rdb.dts
From: Pali Rohár <pali@kernel.org>
Date: 2021-06-19 20:35:38
Also in:
lkml, netdev
On Saturday 05 June 2021 01:34:55 Pali Rohár wrote:
On Friday 04 June 2021 21:47:26 Madalin Bucur wrote:quoted
quoted
-----Original Message----- From: Andrew Lunn <andrew@lunn.ch> Sent: 04 June 2021 23:24 To: Madalin Bucur <madalin.bucur@nxp.com> Cc: Russell King <linux@armlinux.org.uk>; Pali Rohár <pali@kernel.org>; Igal Liberman [off-list ref]; Shruti Kanetkar [off-list ref]; Emil Medve [off-list ref]; Scott Wood [off-list ref]; Rob Herring [off-list ref]; Michael Ellerman [off-list ref]; Benjamin Herrenschmidt [off-list ref]; netdev@vger.kernel.org; devicetree@vger.kernel.org; linux-kernel@vger.kernel.org; Camelia Alexandra Groza (OSS) [off-list ref] Subject: Re: Unsupported phy-connection-type sgmii-2500 in arch/powerpc/boot/dts/fsl/t1023rdb.dtsquoted
The "sgmii-2500" compatible in that device tree describes an SGMII HW block, overclocked at 2.5G. Without that overclocking, it's a plain Cisco (like) SGMII HW block. That's the reason you need to disable it's AN setting when overclocked. With the proper Reset Configuration Word, you could remove the overclocking and transform that into a plain"sgmii".quoted
Thus, the dts compatible describes the HW, as it is.It sounds like the hardware is capable of swapping between SGMII and 2500BaseX. What we have in DT in this case is not describing the hardware, but how we configure the hardware. It is one of the few places we abuse DT for configuration. AndrewThe actual selection of this mode of operation is performed by the so called Reset Configuration Word from the boot media, that aligned with the HW and board design. The need to name it something other than plain "sgmii" comes from the HW special need for AN to be disabled to operate. Actually, the weird/non-standard hardware is described by the device tree with a value that puts it in a class of its own. Instead of the overclocked SGMII denomination "sgmii-2500" it could have been named just as well "overclocked-nonstandard-2.5G-ethernet-no-autoneg-SGMII-hw-ip". One could try to change device trees to slip configuration details, but the backwards compatibility aspect renders this futile. Is there any option to say "sgmii" then "autoneg disabled"? MadalinMadalin, my understanding is that "sgmii-2500" mode is unknown and unsupported by kernel. List of known modes which can be specified in DTS file are defined in YAML schema for 'phy-connection-type' in file: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/net/ethernet-controller.yaml?h=v5.12#n55 And there is none "sgmii-2500", so some DTS schema validator could throw validation error for that DTS file. I'm not sure if somebody has written DTS schema validator with all those things (like there are JSON schema or OpenAPI validators in JavaScript / HTTP world). Plus also in linux/phy.h header file contains list of known Linux modes: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/phy.h?h=v5.12#n169 And based on all information in this email discussion, in my opinion the mode which HW supports matches Linux meaning of "2500base-x" key/string. So I would suggest to rename "sgmii-2500" in that DTS file to "2500base-x". Does it make sense?
Any opinion? Or should I send a patch?