net: dsa: enable master promisc mode if available and needed
authorTim Harvey <tharvey@gateworks.com>
Wed, 30 Jun 2021 23:50:07 +0000 (16:50 -0700)
committerStefano Babic <sbabic@denx.de>
Sat, 10 Jul 2021 16:12:41 +0000 (18:12 +0200)
If ports have their own unique MAC addrs and master has a set_promisc
function, call it so that packets will be received for ports.

Signed-off-by: Tim Harvey <tharvey@gateworks.com>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
net/dsa-uclass.c

index 7ea1cb6..694664d 100644 (file)
@@ -277,8 +277,15 @@ static int dsa_port_probe(struct udevice *pdev)
         * has a unique MAC address specified in the environment.
         */
        eth_env_get_enetaddr_by_index("eth", dev_seq(pdev), env_enetaddr);
-       if (!is_zero_ethaddr(env_enetaddr))
+       if (!is_zero_ethaddr(env_enetaddr)) {
+               /* individual port mac addrs require master to be promisc */
+               struct eth_ops *eth_ops = eth_get_ops(master);
+
+               if (eth_ops->set_promisc)
+                       eth_ops->set_promisc(master, 1);
+
                return 0;
+       }
 
        master_pdata = dev_get_plat(master);
        eth_pdata = dev_get_plat(pdev);