summaryrefslogtreecommitdiff
path: root/target/linux/brcm63xx/patches-3.9
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm63xx/patches-3.9')
-rw-r--r--target/linux/brcm63xx/patches-3.9/426-hcs_mac_addr_pool.patch26
1 files changed, 26 insertions, 0 deletions
diff --git a/target/linux/brcm63xx/patches-3.9/426-hcs_mac_addr_pool.patch b/target/linux/brcm63xx/patches-3.9/426-hcs_mac_addr_pool.patch
new file mode 100644
index 0000000..6354fe6
--- /dev/null
+++ b/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)