Fix reading sprom from nvram without a prefix
The bcma based SoCs with a ieee80211 core on the SoC and an other connected via PCIe or USB store the sprom for the SoC with a sb/1/ prefix. The SoC with just one wifi core do not use prefixes. The BCM4706 do not use a prefix for the SoC part at all, because the prefix is the path to the ieee80211 core and there is non on the BCM4706. SVN-Revision: 33597
This commit is contained in:
parent
4d5c75a54e
commit
c9feffc332
5 changed files with 1189 additions and 2 deletions
|
@ -0,0 +1,81 @@
|
|||
--- a/arch/mips/bcm47xx/sprom.c
|
||||
+++ b/arch/mips/bcm47xx/sprom.c
|
||||
@@ -164,10 +164,6 @@ static void nvram_read_alpha2(const char
|
||||
static void bcm47xx_fill_sprom_r1234589(struct ssb_sprom *sprom,
|
||||
const char *prefix)
|
||||
{
|
||||
- nvram_read_u16(prefix, NULL, "boardrev", &sprom->board_rev, 0);
|
||||
- if (!sprom->board_rev)
|
||||
- nvram_read_u16(NULL, NULL, "boardrev", &sprom->board_rev, 0);
|
||||
- nvram_read_u16(prefix, NULL, "boardnum", &sprom->board_num, 0);
|
||||
nvram_read_u8(prefix, NULL, "ledbh0", &sprom->gpio0, 0xff);
|
||||
nvram_read_u8(prefix, NULL, "ledbh1", &sprom->gpio1, 0xff);
|
||||
nvram_read_u8(prefix, NULL, "ledbh2", &sprom->gpio2, 0xff);
|
||||
@@ -214,13 +210,6 @@ static void bcm47xx_fill_sprom_r2389(str
|
||||
nvram_read_u8(prefix, NULL, "pa1himaxpwr", &sprom->maxpwr_ah, 0);
|
||||
}
|
||||
|
||||
-static void bcm47xx_fill_sprom_r2(struct ssb_sprom *sprom, const char *prefix)
|
||||
-{
|
||||
- nvram_read_u32_2(prefix, "boardflags", &sprom->boardflags_lo,
|
||||
- &sprom->boardflags_hi);
|
||||
- nvram_read_u16(prefix, NULL, "boardtype", &sprom->board_type, 0);
|
||||
-}
|
||||
-
|
||||
static void bcm47xx_fill_sprom_r389(struct ssb_sprom *sprom, const char *prefix)
|
||||
{
|
||||
nvram_read_u8(prefix, NULL, "bxa2g", &sprom->bxa2g, 0);
|
||||
@@ -241,9 +230,6 @@ static void bcm47xx_fill_sprom_r389(stru
|
||||
|
||||
static void bcm47xx_fill_sprom_r3(struct ssb_sprom *sprom, const char *prefix)
|
||||
{
|
||||
- nvram_read_u32_2(prefix, "boardflags", &sprom->boardflags_lo,
|
||||
- &sprom->boardflags_hi);
|
||||
- nvram_read_u16(prefix, NULL, "boardtype", &sprom->board_type, 0);
|
||||
nvram_read_u8(prefix, NULL, "regrev", &sprom->regrev, 0);
|
||||
nvram_read_leddc(prefix, "leddc", &sprom->leddc_on_time,
|
||||
&sprom->leddc_off_time);
|
||||
@@ -252,11 +238,6 @@ static void bcm47xx_fill_sprom_r3(struct
|
||||
static void bcm47xx_fill_sprom_r4589(struct ssb_sprom *sprom,
|
||||
const char *prefix)
|
||||
{
|
||||
- nvram_read_u32_2(prefix, "boardflags", &sprom->boardflags_lo,
|
||||
- &sprom->boardflags_hi);
|
||||
- nvram_read_u32_2(prefix, "boardflags2", &sprom->boardflags2_lo,
|
||||
- &sprom->boardflags2_hi);
|
||||
- nvram_read_u16(prefix, NULL, "boardtype", &sprom->board_type, 0);
|
||||
nvram_read_u8(prefix, NULL, "regrev", &sprom->regrev, 0);
|
||||
nvram_read_s8(prefix, NULL, "ag2", &sprom->antenna_gain.a2, 0);
|
||||
nvram_read_s8(prefix, NULL, "ag3", &sprom->antenna_gain.a3, 0);
|
||||
@@ -555,9 +536,23 @@ void bcm47xx_fill_sprom_ethernet(struct
|
||||
nvram_read_macaddr(prefix, "il0macaddr", &sprom->il0mac);
|
||||
}
|
||||
|
||||
+static void bcm47xx_fill_board_data(struct ssb_sprom *sprom, const char *prefix)
|
||||
+{
|
||||
+ nvram_read_u16(prefix, NULL, "boardrev", &sprom->board_rev, 0);
|
||||
+ if (!sprom->board_rev)
|
||||
+ nvram_read_u16(NULL, NULL, "boardrev", &sprom->board_rev, 0);
|
||||
+ nvram_read_u16(prefix, NULL, "boardnum", &sprom->board_num, 0);
|
||||
+ nvram_read_u16(prefix, NULL, "boardtype", &sprom->board_type, 0);
|
||||
+ nvram_read_u32_2(prefix, "boardflags", &sprom->boardflags_lo,
|
||||
+ &sprom->boardflags_hi);
|
||||
+ nvram_read_u32_2(prefix, "boardflags2", &sprom->boardflags2_lo,
|
||||
+ &sprom->boardflags2_hi);
|
||||
+}
|
||||
+
|
||||
void bcm47xx_fill_sprom(struct ssb_sprom *sprom, const char *prefix)
|
||||
{
|
||||
bcm47xx_fill_sprom_ethernet(sprom, prefix);
|
||||
+ bcm47xx_fill_board_data(sprom, prefix);
|
||||
|
||||
nvram_read_u8(prefix, NULL, "sromrev", &sprom->revision, 0);
|
||||
|
||||
@@ -571,7 +566,6 @@ void bcm47xx_fill_sprom(struct ssb_sprom
|
||||
bcm47xx_fill_sprom_r1234589(sprom, prefix);
|
||||
bcm47xx_fill_sprom_r12389(sprom, prefix);
|
||||
bcm47xx_fill_sprom_r2389(sprom, prefix);
|
||||
- bcm47xx_fill_sprom_r2(sprom, prefix);
|
||||
break;
|
||||
case 3:
|
||||
bcm47xx_fill_sprom_r1234589(sprom, prefix);
|
|
@ -0,0 +1,11 @@
|
|||
--- a/arch/mips/bcm47xx/setup.c
|
||||
+++ b/arch/mips/bcm47xx/setup.c
|
||||
@@ -258,6 +258,8 @@ static int bcm47xx_get_sprom_bcma(struct
|
||||
snprintf(prefix, sizeof(prefix), "sb/%u/",
|
||||
core->core_index);
|
||||
bcm47xx_fill_sprom(out, prefix);
|
||||
+ } else {
|
||||
+ bcm47xx_fill_sprom(out, NULL);
|
||||
}
|
||||
return 0;
|
||||
default:
|
File diff suppressed because it is too large
Load diff
|
@ -33,7 +33,7 @@
|
|||
+EXPORT_SYMBOL(nvram_get);
|
||||
--- a/arch/mips/bcm47xx/setup.c
|
||||
+++ b/arch/mips/bcm47xx/setup.c
|
||||
@@ -380,3 +380,20 @@ static int __init bcm47xx_register_flash
|
||||
@@ -381,3 +381,20 @@ static int __init bcm47xx_register_flash
|
||||
return -1;
|
||||
}
|
||||
fs_initcall(bcm47xx_register_flash);
|
||||
|
|
|
@ -276,7 +276,7 @@
|
|||
+EXPORT_SYMBOL(gpio_set_value);
|
||||
--- a/arch/mips/bcm47xx/setup.c
|
||||
+++ b/arch/mips/bcm47xx/setup.c
|
||||
@@ -345,6 +345,8 @@ void __init plat_mem_setup(void)
|
||||
@@ -346,6 +346,8 @@ void __init plat_mem_setup(void)
|
||||
_machine_restart = bcm47xx_machine_restart;
|
||||
_machine_halt = bcm47xx_machine_halt;
|
||||
pm_power_off = bcm47xx_machine_halt;
|
||||
|
|
Loading…
Reference in a new issue