Messages in this thread Patch in this message | | | From | Mark Brown <> | Date | Thu, 27 Jul 2023 22:52:18 +0100 | Subject | [PATCH] net: netsec: Ignore 'phy-mode' on SynQuacer in DT mode |
| |
As documented in acd7aaf51b20 ("netsec: ignore 'phy-mode' device property on ACPI systems") the SocioNext SynQuacer platform ships with firmware defining the PHY mode as RGMII even though the physical configuration of the PHY is for TX and RX commits. Since bbc4d71d63549bc ("net: phy: realtek: fix rtl8211e rx/tx delay config") this has caused misconfiguration of the PHY, rendering the network unusable.
This was worked around for ACPI by ignoring the phy-mode property but the system is also used with DT. Since the firmware used with DT is the same (the firmware interface is selectable in the firmware configuration) and the firmware configures the PHY prior to running the OS we can use the same workaround.
Limit this to the SynQuacer, though practically speaking this is the only currently known system using this device.
Fixes: 533dd11a12f6 ("net: socionext: Add Synquacer NetSec driver") Signed-off-by: Mark Brown <broonie@kernel.org> --- drivers/net/ethernet/socionext/netsec.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/socionext/netsec.c b/drivers/net/ethernet/socionext/netsec.c index 2d7347b71c41..ae4d336efaa4 100644 --- a/drivers/net/ethernet/socionext/netsec.c +++ b/drivers/net/ethernet/socionext/netsec.c @@ -1845,10 +1845,20 @@ static int netsec_of_probe(struct platform_device *pdev, { int err; - err = of_get_phy_mode(pdev->dev.of_node, &priv->phy_interface); - if (err) { - dev_err(&pdev->dev, "missing required property 'phy-mode'\n"); - return err; + if (of_machine_is_compatible("socionext,developer-box")) { + /* + * SynQuacer reports RGMII but is physically + * configured with TX and RX delays, since the + * firwmare configures the PHY prior to boot just + * ignore the configuration. + */ + priv->phy_interface = PHY_INTERFACE_MODE_NA; + } else { + err = of_get_phy_mode(pdev->dev.of_node, &priv->phy_interface); + if (err) { + dev_err(&pdev->dev, "missing required property 'phy-mode'\n"); + return err; + } } priv->phy_np = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0); --- base-commit: 6eaae198076080886b9e7d57f4ae06fa782f90ef change-id: 20230727-synquacer-net-e241f34baceb Best regards, -- Mark Brown <broonie@kernel.org>
| |