bcm63xx: make nvram checksum failures non fatal

fixes #12982.

Signed-off-by: Jonas Gorski <jogo@openwrt.org>

SVN-Revision: 35605
This commit is contained in:
Jonas Gorski 2013-02-15 12:23:49 +00:00
parent 162b8e23a5
commit 485e52e1d8
40 changed files with 188 additions and 152 deletions

View file

@ -1,49 +0,0 @@
From fb1e2c8a1073297f4674ca90c7d533de5187d158 Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
Date: Sat, 9 Feb 2013 12:09:53 +0100
Subject: [PATCH] MIPS: BCM63XX: handle huawei nvram layout
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Huawei uses a custom nvram layout, extending it with additional 32
byte field. This pushes also the checksum further, causing it to
always fail the check.
Add an additional crc check for handling this modified nvram layout
based on the different size.
Reported-by: Álvaro Fernández Rojas <noltari@gmail.com>
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
---
arch/mips/bcm63xx/nvram.c | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
--- a/arch/mips/bcm63xx/nvram.c
+++ b/arch/mips/bcm63xx/nvram.c
@@ -59,8 +59,24 @@ int __init bcm63xx_nvram_init(void *addr
crc = crc32_le(~0, (u8 *)&nvram, check_len);
- if (crc != expected_crc)
+ if (crc != expected_crc) {
+ /* huawei uses a modified nvram that is 32 bytes longer */
+ if (nvram.version == 2 && !strncmp(nvram.name, "HW5", 3)) {
+ check_len += 32;
+
+ /* restore old value */
+ nvram.checksum_old = expected_crc;
+ expected_crc = *(u32 *)&nvram.reserved3[28];
+ /* zero the checksum field */
+ memset(&nvram.reserved3[28], 0, 4);
+
+ crc = crc32_le(~0, (u8 *)&nvram, check_len);
+
+ if (crc == expected_crc)
+ return 0;
+ }
return -EINVAL;
+ }
return 0;
}

View file

@ -0,0 +1,67 @@
From 5e6669fe7487c58b123da1df5c2d95db43185264 Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
Date: Tue, 12 Feb 2013 22:00:10 +0100
Subject: [PATCH] MIPS: BCM63XX: make nvram checksum failure non fatal
Some vendors modify the nvram layout moving the checksum to a different
place or drop it entirely, so reduce the checksum failure to a warning.
Reported-by: Álvaro Fernández Rojas <noltari@gmail.com>
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
---
arch/mips/bcm63xx/boards/board_bcm963xx.c | 5 +----
arch/mips/bcm63xx/nvram.c | 7 +++----
arch/mips/include/asm/mach-bcm63xx/bcm63xx_nvram.h | 4 +---
3 files changed, 5 insertions(+), 11 deletions(-)
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -745,10 +745,7 @@ void __init board_prom_init(void)
strcpy(cfe_version, "unknown");
printk(KERN_INFO PFX "CFE version: %s\n", cfe_version);
- if (bcm63xx_nvram_init(boot_addr + BCM963XX_NVRAM_OFFSET)) {
- printk(KERN_ERR PFX "invalid nvram checksum\n");
- return;
- }
+ bcm63xx_nvram_init(boot_addr + BCM963XX_NVRAM_OFFSET);
board_name = bcm63xx_nvram_get_name();
/* find board by name */
--- a/arch/mips/bcm63xx/nvram.c
+++ b/arch/mips/bcm63xx/nvram.c
@@ -38,7 +38,7 @@ struct bcm963xx_nvram {
static struct bcm963xx_nvram nvram;
static int mac_addr_used;
-int __init bcm63xx_nvram_init(void *addr)
+void __init bcm63xx_nvram_init(void *addr)
{
unsigned int check_len;
u32 crc, expected_crc;
@@ -60,9 +60,8 @@ int __init bcm63xx_nvram_init(void *addr
crc = crc32_le(~0, (u8 *)&nvram, check_len);
if (crc != expected_crc)
- return -EINVAL;
-
- return 0;
+ pr_warn("nvram checksum invalid (expected %08x, actual %08x)\n",
+ expected_crc, crc);
}
u8 *bcm63xx_nvram_get_name(void)
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_nvram.h
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_nvram.h
@@ -9,10 +9,8 @@
*
* Initialized the local nvram copy from the target address and checks
* its checksum.
- *
- * Returns 0 on success.
*/
-int __init bcm63xx_nvram_init(void *nvram);
+void bcm63xx_nvram_init(void *nvram);
/**
* bcm63xx_nvram_get_name() - returns the board name according to nvram

View file

@ -53,7 +53,7 @@
};
static struct board_info __initdata board_FAST2404 = {
@@ -826,11 +851,23 @@ static struct platform_device bcm63xx_gp
@@ -823,11 +848,23 @@ static struct platform_device bcm63xx_gp
.dev.platform_data = &bcm63xx_led_data,
};
@ -77,7 +77,7 @@
if (board.has_uart0)
bcm63xx_uart_register(0);
@@ -876,5 +913,16 @@ int __init board_register_devices(void)
@@ -873,5 +910,16 @@ int __init board_register_devices(void)
platform_device_register(&bcm63xx_gpio_leds);

View file

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -867,6 +867,7 @@ static struct platform_device bcm63xx_gp
@@ -864,6 +864,7 @@ static struct platform_device bcm63xx_gp
int __init board_register_devices(void)
{
int button_count = 0;
@ -8,7 +8,7 @@
if (board.has_uart0)
bcm63xx_uart_register(0);
@@ -908,10 +909,16 @@ int __init board_register_devices(void)
@@ -905,10 +906,16 @@ int __init board_register_devices(void)
bcm63xx_flash_register();

View file

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -907,6 +907,9 @@ int __init board_register_devices(void)
@@ -904,6 +904,9 @@ int __init board_register_devices(void)
bcm63xx_spi_register();

View file

@ -8,7 +8,7 @@
#include <asm/addrspace.h>
#include <bcm63xx_board.h>
#include <bcm63xx_cpu.h>
@@ -910,6 +911,9 @@ int __init board_register_devices(void)
@@ -907,6 +908,9 @@ int __init board_register_devices(void)
if (board.num_devs)
platform_add_devices(board.devs, board.num_devs);

View file

@ -48,9 +48,9 @@
/*
* early init callback, read nvram data from flash and checksum it
*/
@@ -776,6 +805,11 @@ void __init board_prom_init(void)
return;
}
@@ -773,6 +802,11 @@ void __init board_prom_init(void)
bcm63xx_nvram_init(boot_addr + BCM963XX_NVRAM_OFFSET);
+ if (strcmp(cfe_version, "unknown") != 0) {
+ /* cfe present */

View file

@ -71,7 +71,7 @@ Subject: [PATCH 31/72] MIPS: BCM63XX: register ohci device.
#include <bcm63xx_dev_usb_usbd.h>
#include <board_bcm963xx.h>
@@ -926,6 +927,9 @@ int __init board_register_devices(void)
@@ -923,6 +924,9 @@ int __init board_register_devices(void)
if (board.has_usbd)
bcm63xx_usbd_register(&board.usbd);

View file

@ -52,7 +52,7 @@ Subject: [PATCH 33/72] MIPS: BCM63XX: register ehci device.
#include <bcm63xx_dev_usb_usbd.h>
#include <board_bcm963xx.h>
@@ -927,6 +928,9 @@ int __init board_register_devices(void)
@@ -924,6 +925,9 @@ int __init board_register_devices(void)
if (board.has_usbd)
bcm63xx_usbd_register(&board.usbd);

View file

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -862,6 +862,8 @@ void __init board_prom_init(void)
@@ -859,6 +859,8 @@ void __init board_prom_init(void)
if (BCMCPU_IS_6348())
val |= GPIO_MODE_6348_G3_EXT_MII |
GPIO_MODE_6348_G0_EXT_MII;

View file

@ -13,7 +13,7 @@ Subject: [PATCH 31/63] bcm63xx_enet: add support for bcm6368 internal ethernet s
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -930,6 +930,10 @@ int __init board_register_devices(void)
@@ -927,6 +927,10 @@ int __init board_register_devices(void)
if (board.has_usbd)
bcm63xx_usbd_register(&board.usbd);

View file

@ -36,7 +36,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
#include <bcm63xx_dev_pcmcia.h>
#include <bcm63xx_dev_spi.h>
#include <bcm63xx_dev_usb_ohci.h>
@@ -955,6 +956,7 @@ int __init board_register_devices(void)
@@ -952,6 +953,7 @@ int __init board_register_devices(void)
pr_err(PFX "failed to register fallback SPROM\n");
}
#endif

View file

@ -20,7 +20,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
static struct bcm963xx_nvram nvram;
static int mac_addr_used;
@@ -121,3 +123,12 @@ int bcm63xx_nvram_get_mac_address(u8 *ma
@@ -104,3 +106,12 @@ int bcm63xx_nvram_get_mac_address(u8 *ma
return 0;
}
EXPORT_SYMBOL(bcm63xx_nvram_get_mac_address);
@ -35,7 +35,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
+EXPORT_SYMBOL(bcm63xx_nvram_get_psi_size);
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_nvram.h
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_nvram.h
@@ -32,4 +32,6 @@ u8 *bcm63xx_nvram_get_name(void);
@@ -30,4 +30,6 @@ u8 *bcm63xx_nvram_get_name(void);
*/
int bcm63xx_nvram_get_mac_address(u8 *mac);

View file

@ -18,7 +18,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in board data
#include <uapi/linux/bcm963xx_tag.h>
@@ -910,6 +911,7 @@ int __init board_register_devices(void)
@@ -907,6 +908,7 @@ int __init board_register_devices(void)
{
int button_count = 0;
int led_count = 0;
@ -26,7 +26,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in board data
if (board.has_uart0)
bcm63xx_uart_register(0);
@@ -948,7 +950,8 @@ int __init board_register_devices(void)
@@ -945,7 +947,8 @@ int __init board_register_devices(void)
* do this after registering enet devices
*/
#ifdef CONFIG_SSB_PCIHOST
@ -36,7 +36,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in board data
memcpy(bcm63xx_sprom.et0mac, bcm63xx_sprom.il0mac, ETH_ALEN);
memcpy(bcm63xx_sprom.et1mac, bcm63xx_sprom.il0mac, ETH_ALEN);
if (ssb_arch_register_fallback_sprom(
@@ -990,5 +993,9 @@ int __init board_register_devices(void)
@@ -987,5 +990,9 @@ int __init board_register_devices(void)
platform_device_register(&bcm63xx_gpio_keys_device);
}

View file

@ -11,7 +11,7 @@ Subject: [PATCH 69/80] MIPS: BCM63XX: pass caldata info to flash
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -969,7 +969,7 @@ int __init board_register_devices(void)
@@ -966,7 +966,7 @@ int __init board_register_devices(void)
if (board.num_spis)
spi_register_board_info(board.spis, board.num_spis);

View file

@ -41,7 +41,7 @@ Subject: [PATCH] BCM63XX: add endian check for ath9k
return;
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -995,7 +995,8 @@ int __init board_register_devices(void)
@@ -992,7 +992,8 @@ int __init board_register_devices(void)
/* register any fixups */
for (i = 0; i < board.has_caldata; i++)

View file

@ -2,7 +2,7 @@ From: Álvaro Fernández Rojas <noltari@gmail.com>
Subject: BCM63XX: add led pin for ath9k
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -996,7 +996,7 @@ int __init board_register_devices(void)
@@ -993,7 +993,7 @@ int __init board_register_devices(void)
/* register any fixups */
for (i = 0; i < board.has_caldata; i++)
pci_enable_ath9k_fixup(board.caldata[i].slot, board.caldata[i].caldata_offset,

View file

@ -36,7 +36,7 @@ Subject: [PATCH 72/72] 446-BCM63XX-add-a-fixup-for-rt2x00-devices
#include <uapi/linux/bcm963xx_tag.h>
@@ -994,9 +995,19 @@ int __init board_register_devices(void)
@@ -991,9 +992,19 @@ int __init board_register_devices(void)
}
/* register any fixups */

View file

@ -88,8 +88,8 @@
+ if (boot_addr == (u8 *)0xbf800000) {
+ u8 *tmp_boot_addr = (u8*)0xbfc00000;
+
+ if (!bcm63xx_nvram_init(tmp_boot_addr + BCM963XX_NVRAM_OFFSET) &&
+ !strcmp(bcm63xx_nvram_get_name(), "V2500V_BB")) {
+ bcm63xx_nvram_init(tmp_boot_addr + BCM963XX_NVRAM_OFFSET);
+ if(!strcmp(bcm63xx_nvram_get_name(), "V2500V_BB")) {
+ printk(KERN_INFO PFX "V2500V: nvram bank 0\n");
+ boot_addr = tmp_boot_addr;
+ }

View file

@ -100,7 +100,7 @@ Subject: [PATCH 32/63] bcm63xx: add support for 96368MVWG board.
};
/*
@@ -2412,12 +2488,25 @@ void __init board_prom_init(void)
@@ -2409,12 +2485,25 @@ void __init board_prom_init(void)
bcm63xx_pci_enabled = 1;
if (BCMCPU_IS_6348())
val |= GPIO_MODE_6348_G2_PCI;

View file

@ -11,10 +11,10 @@
+char nvram_buf[NVRAM_SPACE];
+EXPORT_SYMBOL(nvram_buf);
+
int __init bcm63xx_nvram_init(void *addr)
void __init bcm63xx_nvram_init(void *addr)
{
unsigned int check_len;
@@ -47,6 +54,7 @@ int __init bcm63xx_nvram_init(void *addr
@@ -47,6 +54,7 @@ void __init bcm63xx_nvram_init(void *add
/* extract nvram data */
memcpy(&nvram, addr, sizeof(nvram));

View file

@ -1,49 +0,0 @@
From fb1e2c8a1073297f4674ca90c7d533de5187d158 Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
Date: Sat, 9 Feb 2013 12:09:53 +0100
Subject: [PATCH] MIPS: BCM63XX: handle huawei nvram layout
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Huawei uses a custom nvram layout, extending it with additional 32
byte field. This pushes also the checksum further, causing it to
always fail the check.
Add an additional crc check for handling this modified nvram layout
based on the different size.
Reported-by: Álvaro Fernández Rojas <noltari@gmail.com>
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
---
arch/mips/bcm63xx/nvram.c | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
--- a/arch/mips/bcm63xx/nvram.c
+++ b/arch/mips/bcm63xx/nvram.c
@@ -59,8 +59,24 @@ int __init bcm63xx_nvram_init(void *addr
crc = crc32_le(~0, (u8 *)&nvram, check_len);
- if (crc != expected_crc)
+ if (crc != expected_crc) {
+ /* huawei uses a modified nvram that is 32 bytes longer */
+ if (nvram.version == 2 && !strncmp(nvram.name, "HW5", 3)) {
+ check_len += 32;
+
+ /* restore old value */
+ nvram.checksum_old = expected_crc;
+ expected_crc = *(u32 *)&nvram.reserved3[28];
+ /* zero the checksum field */
+ memset(&nvram.reserved3[28], 0, 4);
+
+ crc = crc32_le(~0, (u8 *)&nvram, check_len);
+
+ if (crc == expected_crc)
+ return 0;
+ }
return -EINVAL;
+ }
return 0;
}

View file

@ -0,0 +1,67 @@
From 5e6669fe7487c58b123da1df5c2d95db43185264 Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
Date: Tue, 12 Feb 2013 22:00:10 +0100
Subject: [PATCH] MIPS: BCM63XX: make nvram checksum failure non fatal
Some vendors modify the nvram layout moving the checksum to a different
place or drop it entirely, so reduce the checksum failure to a warning.
Reported-by: Álvaro Fernández Rojas <noltari@gmail.com>
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
---
arch/mips/bcm63xx/boards/board_bcm963xx.c | 5 +----
arch/mips/bcm63xx/nvram.c | 7 +++----
arch/mips/include/asm/mach-bcm63xx/bcm63xx_nvram.h | 4 +---
3 files changed, 5 insertions(+), 11 deletions(-)
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -747,10 +747,7 @@ void __init board_prom_init(void)
strcpy(cfe_version, "unknown");
printk(KERN_INFO PFX "CFE version: %s\n", cfe_version);
- if (bcm63xx_nvram_init(boot_addr + BCM963XX_NVRAM_OFFSET)) {
- printk(KERN_ERR PFX "invalid nvram checksum\n");
- return;
- }
+ bcm63xx_nvram_init(boot_addr + BCM963XX_NVRAM_OFFSET);
board_name = bcm63xx_nvram_get_name();
/* find board by name */
--- a/arch/mips/bcm63xx/nvram.c
+++ b/arch/mips/bcm63xx/nvram.c
@@ -38,7 +38,7 @@ struct bcm963xx_nvram {
static struct bcm963xx_nvram nvram;
static int mac_addr_used;
-int __init bcm63xx_nvram_init(void *addr)
+void __init bcm63xx_nvram_init(void *addr)
{
unsigned int check_len;
u32 crc, expected_crc;
@@ -60,9 +60,8 @@ int __init bcm63xx_nvram_init(void *addr
crc = crc32_le(~0, (u8 *)&nvram, check_len);
if (crc != expected_crc)
- return -EINVAL;
-
- return 0;
+ pr_warn("nvram checksum invalid (expected %08x, actual %08x)\n",
+ expected_crc, crc);
}
u8 *bcm63xx_nvram_get_name(void)
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_nvram.h
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_nvram.h
@@ -9,10 +9,8 @@
*
* Initialized the local nvram copy from the target address and checks
* its checksum.
- *
- * Returns 0 on success.
*/
-int __init bcm63xx_nvram_init(void *nvram);
+void bcm63xx_nvram_init(void *nvram);
/**
* bcm63xx_nvram_get_name() - returns the board name according to nvram

View file

@ -53,7 +53,7 @@
};
static struct board_info __initdata board_FAST2404 = {
@@ -828,11 +853,23 @@ static struct platform_device bcm63xx_gp
@@ -825,11 +850,23 @@ static struct platform_device bcm63xx_gp
.dev.platform_data = &bcm63xx_led_data,
};
@ -77,7 +77,7 @@
if (board.has_uart0)
bcm63xx_uart_register(0);
@@ -884,5 +921,16 @@ int __init board_register_devices(void)
@@ -881,5 +918,16 @@ int __init board_register_devices(void)
platform_device_register(&bcm63xx_gpio_leds);

View file

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -869,6 +869,7 @@ static struct platform_device bcm63xx_gp
@@ -866,6 +866,7 @@ static struct platform_device bcm63xx_gp
int __init board_register_devices(void)
{
int button_count = 0;
@ -8,7 +8,7 @@
if (board.has_uart0)
bcm63xx_uart_register(0);
@@ -916,10 +917,16 @@ int __init board_register_devices(void)
@@ -913,10 +914,16 @@ int __init board_register_devices(void)
bcm63xx_flash_register();

View file

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -915,6 +915,9 @@ int __init board_register_devices(void)
@@ -912,6 +912,9 @@ int __init board_register_devices(void)
bcm63xx_spi_register();

View file

@ -8,7 +8,7 @@
#include <asm/addrspace.h>
#include <bcm63xx_board.h>
#include <bcm63xx_cpu.h>
@@ -918,6 +919,9 @@ int __init board_register_devices(void)
@@ -915,6 +916,9 @@ int __init board_register_devices(void)
if (board.num_devs)
platform_add_devices(board.devs, board.num_devs);

View file

@ -48,9 +48,9 @@
/*
* early init callback, read nvram data from flash and checksum it
*/
@@ -778,6 +807,11 @@ void __init board_prom_init(void)
return;
}
@@ -775,6 +804,11 @@ void __init board_prom_init(void)
bcm63xx_nvram_init(boot_addr + BCM963XX_NVRAM_OFFSET);
+ if (strcmp(cfe_version, "unknown") != 0) {
+ /* cfe present */

View file

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -862,6 +862,8 @@ void __init board_prom_init(void)
@@ -859,6 +859,8 @@ void __init board_prom_init(void)
if (BCMCPU_IS_6348())
val |= GPIO_MODE_6348_G3_EXT_MII |
GPIO_MODE_6348_G0_EXT_MII;

View file

@ -13,7 +13,7 @@ Subject: [PATCH 31/63] bcm63xx_enet: add support for bcm6368 internal ethernet s
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -930,6 +930,10 @@ int __init board_register_devices(void)
@@ -927,6 +927,10 @@ int __init board_register_devices(void)
if (board.has_usbd)
bcm63xx_usbd_register(&board.usbd);

View file

@ -37,7 +37,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
#include <bcm63xx_dev_pcmcia.h>
#include <bcm63xx_dev_spi.h>
#include <bcm63xx_dev_usb_ehci.h>
@@ -955,6 +956,7 @@ int __init board_register_devices(void)
@@ -952,6 +953,7 @@ int __init board_register_devices(void)
pr_err(PFX "failed to register fallback SPROM\n");
}
#endif

View file

@ -20,7 +20,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
static struct bcm963xx_nvram nvram;
static int mac_addr_used;
@@ -121,3 +123,12 @@ int bcm63xx_nvram_get_mac_address(u8 *ma
@@ -104,3 +106,12 @@ int bcm63xx_nvram_get_mac_address(u8 *ma
return 0;
}
EXPORT_SYMBOL(bcm63xx_nvram_get_mac_address);
@ -35,7 +35,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
+EXPORT_SYMBOL(bcm63xx_nvram_get_psi_size);
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_nvram.h
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_nvram.h
@@ -32,4 +32,6 @@ u8 *bcm63xx_nvram_get_name(void);
@@ -30,4 +30,6 @@ u8 *bcm63xx_nvram_get_name(void);
*/
int bcm63xx_nvram_get_mac_address(u8 *mac);

View file

@ -18,7 +18,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in board data
#include <uapi/linux/bcm963xx_tag.h>
@@ -910,6 +911,7 @@ int __init board_register_devices(void)
@@ -907,6 +908,7 @@ int __init board_register_devices(void)
{
int button_count = 0;
int led_count = 0;
@ -26,7 +26,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in board data
if (board.has_uart0)
bcm63xx_uart_register(0);
@@ -948,7 +950,8 @@ int __init board_register_devices(void)
@@ -945,7 +947,8 @@ int __init board_register_devices(void)
* do this after registering enet devices
*/
#ifdef CONFIG_SSB_PCIHOST
@ -36,7 +36,7 @@ Subject: [PATCH 58/72] BCM63XX: allow providing fixup data in board data
memcpy(bcm63xx_sprom.et0mac, bcm63xx_sprom.il0mac, ETH_ALEN);
memcpy(bcm63xx_sprom.et1mac, bcm63xx_sprom.il0mac, ETH_ALEN);
if (ssb_arch_register_fallback_sprom(
@@ -990,5 +993,9 @@ int __init board_register_devices(void)
@@ -987,5 +990,9 @@ int __init board_register_devices(void)
platform_device_register(&bcm63xx_gpio_keys_device);
}

View file

@ -11,7 +11,7 @@ Subject: [PATCH 69/80] MIPS: BCM63XX: pass caldata info to flash
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -969,7 +969,7 @@ int __init board_register_devices(void)
@@ -966,7 +966,7 @@ int __init board_register_devices(void)
if (board.num_spis)
spi_register_board_info(board.spis, board.num_spis);

View file

@ -39,7 +39,7 @@
return;
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -995,7 +995,8 @@ int __init board_register_devices(void)
@@ -992,7 +992,8 @@ int __init board_register_devices(void)
/* register any fixups */
for (i = 0; i < board.has_caldata; i++)

View file

@ -1,6 +1,6 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -996,7 +996,7 @@ int __init board_register_devices(void)
@@ -993,7 +993,7 @@ int __init board_register_devices(void)
/* register any fixups */
for (i = 0; i < board.has_caldata; i++)
pci_enable_ath9k_fixup(board.caldata[i].slot, board.caldata[i].caldata_offset,

View file

@ -36,7 +36,7 @@ Subject: [PATCH 72/72] 446-BCM63XX-add-a-fixup-for-rt2x00-devices
#include <uapi/linux/bcm963xx_tag.h>
@@ -994,9 +995,19 @@ int __init board_register_devices(void)
@@ -991,9 +992,19 @@ int __init board_register_devices(void)
}
/* register any fixups */

View file

@ -88,8 +88,8 @@
+ if (boot_addr == (u8 *)0xbf800000) {
+ u8 *tmp_boot_addr = (u8*)0xbfc00000;
+
+ if (!bcm63xx_nvram_init(tmp_boot_addr + BCM963XX_NVRAM_OFFSET) &&
+ !strcmp(bcm63xx_nvram_get_name(), "V2500V_BB")) {
+ bcm63xx_nvram_init(tmp_boot_addr + BCM963XX_NVRAM_OFFSET);
+ if (!strcmp(bcm63xx_nvram_get_name(), "V2500V_BB")) {
+ printk(KERN_INFO PFX "V2500V: nvram bank 0\n");
+ boot_addr = tmp_boot_addr;
+ }

View file

@ -100,7 +100,7 @@ Subject: [PATCH 32/63] bcm63xx: add support for 96368MVWG board.
};
/*
@@ -2412,12 +2488,25 @@ void __init board_prom_init(void)
@@ -2409,12 +2485,25 @@ void __init board_prom_init(void)
bcm63xx_pci_enabled = 1;
if (BCMCPU_IS_6348())
val |= GPIO_MODE_6348_G2_PCI;

View file

@ -11,10 +11,10 @@
+char nvram_buf[NVRAM_SPACE];
+EXPORT_SYMBOL(nvram_buf);
+
int __init bcm63xx_nvram_init(void *addr)
void __init bcm63xx_nvram_init(void *addr)
{
unsigned int check_len;
@@ -47,6 +54,7 @@ int __init bcm63xx_nvram_init(void *addr
@@ -47,6 +54,7 @@ void __init bcm63xx_nvram_init(void *add
/* extract nvram data */
memcpy(&nvram, addr, sizeof(nvram));