Browse Source

brcm63xx: provide a default sane MAC address for Cable Modem devices

Cable modem devices currently poke at some random location in RAM and
may end up having an invalid MAC address which is not suitable. Provide
a default one which is sane.

Signed-off-by: Florian Fainelli <[email protected]>

SVN-Revision: 36957
Florian Fainelli 12 years ago
parent
commit
a9d4bdee43
1 changed files with 26 additions and 0 deletions
  1. 26 0
      target/linux/brcm63xx/patches-3.9/426-hcs_mac_addr_pool.patch

+ 26 - 0
target/linux/brcm63xx/patches-3.9/426-hcs_mac_addr_pool.patch

@@ -0,0 +1,26 @@
+--- a/arch/mips/bcm63xx/nvram.c
++++ b/arch/mips/bcm63xx/nvram.c
+@@ -52,6 +52,7 @@ void __init bcm63xx_nvram_init(void *add
+ {
+ 	unsigned int check_len;
+ 	u32 crc, expected_crc;
++	u8 hcs_mac_addr[ETH_ALEN] = { 0x00, 0x10, 0x18, 0xff, 0xff, 0xff };
+ 
+ 	/* extract nvram data */
+ 	memcpy(&nvram, addr, sizeof(nvram));
+@@ -73,6 +74,15 @@ void __init bcm63xx_nvram_init(void *add
+ 	if (crc != expected_crc)
+ 		pr_warn("nvram checksum failed, contents may be invalid (expected %08x, got %08x)\n",
+ 			expected_crc, crc);
++
++	/* Cable modems have a different NVRAM which is embedded in the eCos
++	 * firmware and not easily extractible, give at least a MAC address
++	 * pool.
++	 */
++	if (BCMCPU_IS_3368()) {
++		memcpy(nvram.mac_addr_base, hcs_mac_addr, ETH_ALEN);
++		nvram.mac_addr_count = 2;
++	}
+ }
+ 
+ u8 *bcm63xx_nvram_get_name(void)