cpsw_eth_of_to_plat_switch() tries to parse ethernet-ports that are
marked disabled which breaks because phy-handle on some boards is not
set for disabled ports.

Skip disabled ports instead.

Fixes: 5bb7ae8921ee ("net: cpsw: Support new cpsw-switch DT bindings")
Signed-off-by: Markus Schneider-Pargmann (TI) <[email protected]>
---
 drivers/net/ti/cpsw.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ti/cpsw.c b/drivers/net/ti/cpsw.c
index 7a7cb83bd984..6b1f7764e0d3 100644
--- a/drivers/net/ti/cpsw.c
+++ b/drivers/net/ti/cpsw.c
@@ -1220,9 +1220,13 @@ static int cpsw_eth_of_to_plat_switch(struct udevice 
*dev,
        data->mac_control = GMII_EN;
 
        eth_ports_node = ofnode_find_subnode(dev_ofnode(dev), "ethernet-ports");
-       data->slaves = ofnode_get_child_count(eth_ports_node);
+
+       data->slaves = 0;
+       ofnode_for_each_subnode(subnode, eth_ports_node)
+               if (ofnode_is_enabled(subnode))
+                       data->slaves++;
        if (!data->slaves) {
-               pr_err("cpsw: No ethernet-ports defined\n");
+               pr_err("cpsw: No enabled ethernet-ports defined\n");
                return -EINVAL;
        }
 
@@ -1234,6 +1238,9 @@ static int cpsw_eth_of_to_plat_switch(struct udevice *dev,
                struct ofnode_phandle_args args;
                u32 port_id;
 
+               if (!ofnode_is_enabled(subnode))
+                       continue;
+
                ret = ofnode_read_u32(subnode, "reg", &port_id);
                if (ret || !port_id || port_id > data->slaves) {
                        pr_err("cpsw: invalid or missing reg in port node\n");

---
base-commit: d3e8597e46b635ec556a057bc42f0b0859654bdf
change-id: 
20260827-v2026-10-next-topic-am45-ofupstream-cpsw-fix-ports-c8c85066f569

Best regards,
--  
Markus Schneider-Pargmann (TI) <[email protected]>

Reply via email to