forked from Openwrt/openwrt
50f7155d57
Move two accepted patches for the mt7530 DSA driver from pending to accepted. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
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
|
||
@@ -2484,7 +2484,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);
|