diff options
Diffstat (limited to 'target/linux/brcm47xx/patches-3.14/145-MIPS-BCM47XX-fixup-broken-MAC-addresses-in-nvram.patch')
-rw-r--r-- | target/linux/brcm47xx/patches-3.14/145-MIPS-BCM47XX-fixup-broken-MAC-addresses-in-nvram.patch | 95 |
1 files changed, 0 insertions, 95 deletions
diff --git a/target/linux/brcm47xx/patches-3.14/145-MIPS-BCM47XX-fixup-broken-MAC-addresses-in-nvram.patch b/target/linux/brcm47xx/patches-3.14/145-MIPS-BCM47XX-fixup-broken-MAC-addresses-in-nvram.patch deleted file mode 100644 index 3e99a3b..0000000 --- a/target/linux/brcm47xx/patches-3.14/145-MIPS-BCM47XX-fixup-broken-MAC-addresses-in-nvram.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 103c0bf3ff46486466bc9138d70c25133d516003 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Tue, 29 Jul 2014 00:08:01 +0200 -Subject: [PATCH] MIPS: BCM47XX: fixup broken MAC addresses in nvram - -The address prefix 00:90:4C is used by Broadcom in their initial -configuration. When a mac address with the prefix 00:90:4C is used all -devices from the same series are sharing the same mac address. To -prevent mac address collisions we replace them with a mac address based -on the base address. To generate such addresses we take the main mac -address from et0macaddr and increase it by two for the first wifi -device and by 3 for the second one. This matches the printed mac -address on the device. The main mac address increased by one is used as -wan address by the vendor code. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> -Cc: zajec5@gmail.com -Cc: linux-mips@linux-mips.org -Patchwork: https://patchwork.linux-mips.org/patch/7489/ -Signed-off-by: Ralf Baechle <ralf@linux-mips.org> ---- - arch/mips/bcm47xx/sprom.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 48 insertions(+) - ---- a/arch/mips/bcm47xx/sprom.c -+++ b/arch/mips/bcm47xx/sprom.c -@@ -28,6 +28,8 @@ - - #include <bcm47xx.h> - #include <bcm47xx_nvram.h> -+#include <linux/if_ether.h> -+#include <linux/etherdevice.h> - - static void create_key(const char *prefix, const char *postfix, - const char *name, char *buf, int len) -@@ -631,6 +633,33 @@ static void bcm47xx_fill_sprom_path_r45( - } - } - -+static bool bcm47xx_is_valid_mac(u8 *mac) -+{ -+ return mac && !(mac[0] == 0x00 && mac[1] == 0x90 && mac[2] == 0x4c); -+} -+ -+static int bcm47xx_increase_mac_addr(u8 *mac, u8 num) -+{ -+ u8 *oui = mac + ETH_ALEN/2 - 1; -+ u8 *p = mac + ETH_ALEN - 1; -+ -+ do { -+ (*p) += num; -+ if (*p > num) -+ break; -+ p--; -+ num = 1; -+ } while (p != oui); -+ -+ if (p == oui) { -+ pr_err("unable to fetch mac address\n"); -+ return -ENOENT; -+ } -+ return 0; -+} -+ -+static int mac_addr_used = 2; -+ - static void bcm47xx_fill_sprom_ethernet(struct ssb_sprom *sprom, - const char *prefix, bool fallback) - { -@@ -648,6 +677,25 @@ static void bcm47xx_fill_sprom_ethernet( - - nvram_read_macaddr(prefix, "macaddr", sprom->il0mac, fallback); - nvram_read_macaddr(prefix, "il0macaddr", sprom->il0mac, fallback); -+ -+ /* The address prefix 00:90:4C is used by Broadcom in their initial -+ configuration. When a mac address with the prefix 00:90:4C is used -+ all devices from the same series are sharing the same mac address. -+ To prevent mac address collisions we replace them with a mac address -+ based on the base address. */ -+ if (!bcm47xx_is_valid_mac(sprom->il0mac)) { -+ u8 mac[6]; -+ -+ nvram_read_macaddr(NULL, "et0macaddr", mac, false); -+ if (bcm47xx_is_valid_mac(mac)) { -+ int err = bcm47xx_increase_mac_addr(mac, mac_addr_used); -+ -+ if (!err) { -+ ether_addr_copy(sprom->il0mac, mac); -+ mac_addr_used++; -+ } -+ } -+ } - } - - static void bcm47xx_fill_board_data(struct ssb_sprom *sprom, const char *prefix, |