MIPS: Octeon: device_tree_init: don't fill mac if already set
authorAaro Koskinen <aaro.koskinen@iki.fi>
Tue, 23 Feb 2016 22:52:06 +0000 (00:52 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Fri, 13 May 2016 12:01:42 +0000 (14:01 +0200)
Don't fill MAC address if it's already set. This allows DTB to
override the bootinfo.

Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Acked-by: David Daney <david.daney@cavium.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/12589/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/cavium-octeon/octeon-platform.c

index a7d9f07b745d6006141128fce7fc274f6a978075..7aeafedff94edce4bd38017eb31e8432abe233fb 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/i2c.h>
 #include <linux/usb.h>
 #include <linux/dma-mapping.h>
+#include <linux/etherdevice.h>
 #include <linux/module.h>
 #include <linux/mutex.h>
 #include <linux/slab.h>
@@ -525,10 +526,17 @@ static void __init octeon_fdt_set_phy(int eth, int phy_addr)
 
 static void __init octeon_fdt_set_mac_addr(int n, u64 *pmac)
 {
+       const u8 *old_mac;
+       int old_len;
        u8 new_mac[6];
        u64 mac = *pmac;
        int r;
 
+       old_mac = fdt_getprop(initial_boot_params, n, "local-mac-address",
+                             &old_len);
+       if (!old_mac || old_len != 6 || is_valid_ether_addr(old_mac))
+               return;
+
        new_mac[0] = (mac >> 40) & 0xff;
        new_mac[1] = (mac >> 32) & 0xff;
        new_mac[2] = (mac >> 24) & 0xff;