r8152: Use MAC address from device tree if available
authorThierry Reding <treding@nvidia.com>
Thu, 14 May 2020 12:38:48 +0000 (14:38 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 14 May 2020 20:16:38 +0000 (13:16 -0700)
If a MAC address was passed via the device tree node for the r8152
device, use it and fall back to reading from EEPROM otherwise. This is
useful for devices where the r8152 EEPROM was not programmed with a
valid MAC address, or if users want to explicitly set a MAC address in
the bootloader and pass that to the kernel.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/r8152.c

index 8f8d9883d3634427c61f937a8965dea84fa8e565..1af72ec284caa20f174178da51e495c0de2de830 100644 (file)
@@ -1504,15 +1504,19 @@ static int determine_ethernet_addr(struct r8152 *tp, struct sockaddr *sa)
 
        sa->sa_family = dev->type;
 
-       if (tp->version == RTL_VER_01) {
-               ret = pla_ocp_read(tp, PLA_IDR, 8, sa->sa_data);
-       } else {
-               /* if device doesn't support MAC pass through this will
-                * be expected to be non-zero
-                */
-               ret = vendor_mac_passthru_addr_read(tp, sa);
-               if (ret < 0)
-                       ret = pla_ocp_read(tp, PLA_BACKUP, 8, sa->sa_data);
+       ret = eth_platform_get_mac_address(&dev->dev, sa->sa_data);
+       if (ret < 0) {
+               if (tp->version == RTL_VER_01) {
+                       ret = pla_ocp_read(tp, PLA_IDR, 8, sa->sa_data);
+               } else {
+                       /* if device doesn't support MAC pass through this will
+                        * be expected to be non-zero
+                        */
+                       ret = vendor_mac_passthru_addr_read(tp, sa);
+                       if (ret < 0)
+                               ret = pla_ocp_read(tp, PLA_BACKUP, 8,
+                                                  sa->sa_data);
+               }
        }
 
        if (ret < 0) {