summaryrefslogtreecommitdiff
path: root/target/linux/brcm47xx/patches-3.3/193-MIPS-BCM47xx-read-out-full-board-data.patch
diff options
context:
space:
mode:
authorhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-09-30 11:43:13 +0000
committerhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-09-30 11:43:13 +0000
commit43594d67bfa4fdd58d28ca27aebad6d68acd40f0 (patch)
tree3a1ebff504eabd745ffdaa8fb21aa222356ca27c /target/linux/brcm47xx/patches-3.3/193-MIPS-BCM47xx-read-out-full-board-data.patch
parentbdb7b30f11b15df7293ad939a885d8126e81c5a7 (diff)
[brcm47xx]: 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. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@33597 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/brcm47xx/patches-3.3/193-MIPS-BCM47xx-read-out-full-board-data.patch')
-rw-r--r--target/linux/brcm47xx/patches-3.3/193-MIPS-BCM47xx-read-out-full-board-data.patch81
1 files changed, 81 insertions, 0 deletions
diff --git a/target/linux/brcm47xx/patches-3.3/193-MIPS-BCM47xx-read-out-full-board-data.patch b/target/linux/brcm47xx/patches-3.3/193-MIPS-BCM47xx-read-out-full-board-data.patch
new file mode 100644
index 0000000000..bdfc348cc7
--- /dev/null
+++ b/target/linux/brcm47xx/patches-3.3/193-MIPS-BCM47xx-read-out-full-board-data.patch
@@ -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);