]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
net: dsa: probe master device
authorMichael Walle <michael@walle.cc>
Wed, 24 Feb 2021 16:40:40 +0000 (17:40 +0100)
committerPriyanka Jain <priyanka.jain@nxp.com>
Fri, 5 Mar 2021 04:55:42 +0000 (10:25 +0530)
DSA needs to have the master device probed first for MAC inheritance.
Until now, it only works by chance because the only user (LS1028A SoC)
will probe the master device first. The probe order is given by the PCI
device ordering, thus it works because the master device has a "smaller"
BDF then the switch device.

Explicitly probe the master device in dsa_port_probe().

Fixes: fc054d563bfb ("net: Introduce DSA class for Ethernet switches")
Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
net/dsa-uclass.c

index 88a8ea93520247d861b9dad5f7a4d1f00da1999c..7898f30e15020f68bddd43978ec858604513eaad 100644 (file)
@@ -272,6 +272,7 @@ static int dsa_port_probe(struct udevice *pdev)
        struct dsa_port_pdata *port_pdata;
        struct dsa_priv *dsa_priv;
        struct udevice *master;
+       int ret;
 
        port_pdata = dev_get_parent_plat(pdev);
        dsa_priv = dev_get_uclass_priv(dev);
@@ -284,6 +285,14 @@ static int dsa_port_probe(struct udevice *pdev)
        if (!master)
                return -ENODEV;
 
+       /*
+        * Probe the master device. We depend on the master device for proper
+        * operation and we also need it for MAC inheritance below.
+        */
+       ret = device_probe(master);
+       if (ret)
+               return ret;
+
        /*
         * Inherit port's hwaddr from the DSA master, unless the port already
         * has a unique MAC address specified in the environment.