mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 07:22:33 +00:00
46 lines
1.9 KiB
Diff
46 lines
1.9 KiB
Diff
|
From d8dcf5bd6d0eace9f7c1daa14b63b3925b09d033 Mon Sep 17 00:00:00 2001
|
|||
|
From: =?UTF-8?q?Ar=C4=B1n=C3=A7=20=C3=9CNAL?= <arinc.unal@arinc9.com>
|
|||
|
Date: Tue, 30 Apr 2024 08:01:33 +0300
|
|||
|
Subject: [PATCH] net: dsa: mt7530: detect PHY muxing when PHY is defined on
|
|||
|
switch MDIO bus
|
|||
|
MIME-Version: 1.0
|
|||
|
Content-Type: text/plain; charset=UTF-8
|
|||
|
Content-Transfer-Encoding: 8bit
|
|||
|
|
|||
|
Currently, the MT7530 DSA subdriver configures the MT7530 switch to provide
|
|||
|
direct access to switch PHYs, meaning, the switch PHYs listen on the MDIO
|
|||
|
bus the switch listens on. The PHY muxing feature makes use of this.
|
|||
|
|
|||
|
This is problematic as the PHY may be attached before the switch is
|
|||
|
initialised, in which case, the PHY will fail to be attached.
|
|||
|
|
|||
|
Since commit 91374ba537bd ("net: dsa: mt7530: support OF-based registration
|
|||
|
of switch MDIO bus"), we can describe the switch PHYs on the MDIO bus of
|
|||
|
the switch on the device tree. Extend the check to detect PHY muxing when
|
|||
|
the PHY is defined on the MDIO bus of the switch on the device tree.
|
|||
|
|
|||
|
When the PHY is described this way, the switch will be initialised first,
|
|||
|
then the switch MDIO bus will be registered. Only after these steps, the
|
|||
|
PHY will be attached.
|
|||
|
|
|||
|
Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
|
|||
|
Reviewed-by: Daniel Golle <daniel@makrotopia.org>
|
|||
|
Link: https://lore.kernel.org/r/20240430-b4-for-netnext-mt7530-use-switch-mdio-bus-for-phy-muxing-v2-1-9104d886d0db@arinc9.com
|
|||
|
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|||
|
---
|
|||
|
drivers/net/dsa/mt7530.c | 3 ++-
|
|||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
|||
|
|
|||
|
--- a/drivers/net/dsa/mt7530.c
|
|||
|
+++ b/drivers/net/dsa/mt7530.c
|
|||
|
@@ -2489,7 +2489,8 @@ mt7530_setup(struct dsa_switch *ds)
|
|||
|
if (!phy_node)
|
|||
|
continue;
|
|||
|
|
|||
|
- if (phy_node->parent == priv->dev->of_node->parent) {
|
|||
|
+ if (phy_node->parent == priv->dev->of_node->parent ||
|
|||
|
+ phy_node->parent->parent == priv->dev->of_node) {
|
|||
|
ret = of_get_phy_mode(mac_np, &interface);
|
|||
|
if (ret && ret != -ENODEV) {
|
|||
|
of_node_put(mac_np);
|