net: macb: implement live mac addr change
authorRoman Gushchin <roman.gushchin@linux.dev>
Fri, 4 Nov 2022 20:48:37 +0000 (13:48 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 8 Nov 2022 02:26:23 +0000 (18:26 -0800)
Implement live mac addr change for the macb ethernet driver.

Signed-off-by: Roman Gushchin <roman.gushchin@linux.dev>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Link: https://lore.kernel.org/r/20221104204837.614459-1-roman.gushchin@linux.dev
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/cadence/macb_main.c

index 5d61881..95667b9 100644 (file)
@@ -2946,6 +2946,18 @@ static int macb_change_mtu(struct net_device *dev, int new_mtu)
        return 0;
 }
 
+static int macb_set_mac_addr(struct net_device *dev, void *addr)
+{
+       int err;
+
+       err = eth_mac_addr(dev, addr);
+       if (err < 0)
+               return err;
+
+       macb_set_hwaddr(netdev_priv(dev));
+       return 0;
+}
+
 static void gem_update_stats(struct macb *bp)
 {
        struct macb_queue *queue;
@@ -3785,7 +3797,7 @@ static const struct net_device_ops macb_netdev_ops = {
        .ndo_eth_ioctl          = macb_ioctl,
        .ndo_validate_addr      = eth_validate_addr,
        .ndo_change_mtu         = macb_change_mtu,
-       .ndo_set_mac_address    = eth_mac_addr,
+       .ndo_set_mac_address    = macb_set_mac_addr,
 #ifdef CONFIG_NET_POLL_CONTROLLER
        .ndo_poll_controller    = macb_poll_controller,
 #endif
@@ -4048,6 +4060,8 @@ static int macb_init(struct platform_device *pdev)
                dev->ethtool_ops = &macb_ethtool_ops;
        }
 
+       dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
+
        /* Set features */
        dev->hw_features = NETIF_F_SG;