net: rtl8169: Implement ->hwaddr_write() callback
authorThierry Reding <treding@nvidia.com>
Tue, 16 Apr 2019 16:20:29 +0000 (18:20 +0200)
committerJoe Hershberger <joe.hershberger@ni.com>
Tue, 14 May 2019 19:43:33 +0000 (14:43 -0500)
Implement this callback that allows the MAC address to be set for the
Ethernet card. This is necessary in order for the device to be able to
receive packets for the MAC address that U-Boot advertises.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
drivers/net/rtl8169.c

index a78f3d233f1af0b28b52b17b7ad0b755583a3885..27e27b34176b9db83fbb9cc5848924d96cb72ae1 100644 (file)
@@ -941,6 +941,23 @@ static void rtl_halt(struct eth_device *dev)
 }
 #endif
 
+#ifdef CONFIG_DM_ETH
+static int rtl8169_write_hwaddr(struct udevice *dev)
+{
+       struct eth_pdata *plat = dev_get_platdata(dev);
+       unsigned int i;
+
+       RTL_W8(Cfg9346, Cfg9346_Unlock);
+
+       for (i = 0; i < MAC_ADDR_LEN; i++)
+               RTL_W8(MAC0 + i, plat->enetaddr[i]);
+
+       RTL_W8(Cfg9346, Cfg9346_Lock);
+
+       return 0;
+}
+#endif
+
 /**************************************************************************
 INIT - Look for an adapter, this routine's visible to the outside
 ***************************************************************************/
@@ -1195,6 +1212,7 @@ static const struct eth_ops rtl8169_eth_ops = {
        .send   = rtl8169_eth_send,
        .recv   = rtl8169_eth_recv,
        .stop   = rtl8169_eth_stop,
+       .write_hwaddr = rtl8169_write_hwaddr,
 };
 
 static const struct udevice_id rtl8169_eth_ids[] = {