Skip to content
Snippets Groups Projects
Commit 163b24d0 authored by Hauke Mehrtens's avatar Hauke Mehrtens
Browse files

brcm47xx: fill the whole sprom with data

SVN-Revision: 22385
parent ad126a54
No related branches found
No related tags found
No related merge requests found
From f382c623892dad1c6a9ebc0e12d01fd45ee50db8 Mon Sep 17 00:00:00 2001 From fbdfca0b2489ad94c6a3bc90b47adfd5c8179a89 Mon Sep 17 00:00:00 2001
From: Hauke Mehrtens <hauke@hauke-m.de> From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Sun, 18 Jul 2010 13:34:32 +0200 Date: Sun, 18 Jul 2010 13:34:32 +0200
Subject: [PATCH 2/5] MIPS: BCM47xx: Fill more values into ssb sprom Subject: [PATCH 2/5] MIPS: BCM47xx: Fill values for b43 into ssb sprom
Most of the values are stored in the nvram and not in the CFE. At first Most of the values are stored in the nvram and not in the CFE. At first
the nvram should be read and if there is no value it should look into the nvram should be read and if there is no value it should look into
...@@ -10,15 +10,20 @@ drivers needs them. ...@@ -10,15 +10,20 @@ drivers needs them.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
--- ---
arch/mips/bcm47xx/setup.c | 130 +++++++++++++++++++++++++++++++++----------- arch/mips/bcm47xx/setup.c | 131 +++++++++++++++++++++++++++++++++-----------
1 files changed, 97 insertions(+), 33 deletions(-) 1 files changed, 98 insertions(+), 33 deletions(-)
--- a/arch/mips/bcm47xx/setup.c --- a/arch/mips/bcm47xx/setup.c
+++ b/arch/mips/bcm47xx/setup.c +++ b/arch/mips/bcm47xx/setup.c
@@ -74,6 +74,94 @@ static void str2eaddr(char *str, char *d @@ -74,6 +74,95 @@ static void str2eaddr(char *str, char *d
} }
} }
+#define READ_FROM_NVRAM(_outvar, name, buf) \
+ if (nvram_getenv(name, buf, sizeof(buf)) >= 0 || \
+ cfe_getenv(name, buf, sizeof(buf)) >= 0) \
+ sprom->_outvar = simple_strtoul(buf, NULL, 0);
+
+static void bcm47xx_fill_sprom(struct ssb_sprom *sprom) +static void bcm47xx_fill_sprom(struct ssb_sprom *sprom)
+{ +{
+ char buf[100]; + char buf[100];
...@@ -26,7 +31,8 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> ...@@ -26,7 +31,8 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+ +
+ memset(sprom, 0, sizeof(struct ssb_sprom)); + memset(sprom, 0, sizeof(struct ssb_sprom));
+ +
+ sprom->revision = 3; + sprom->revision = 1; /* Fallback: Old hardware does not define this. */
+ READ_FROM_NVRAM(revision, "sromrev", buf);
+ if (nvram_getenv("il0macaddr", buf, sizeof(buf)) >= 0 || + if (nvram_getenv("il0macaddr", buf, sizeof(buf)) >= 0 ||
+ cfe_getenv("il0macaddr", buf, sizeof(buf)) >= 0) + cfe_getenv("il0macaddr", buf, sizeof(buf)) >= 0)
+ str2eaddr(buf, sprom->il0mac); + str2eaddr(buf, sprom->il0mac);
...@@ -36,60 +42,55 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> ...@@ -36,60 +42,55 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+ if (nvram_getenv("et1macaddr", buf, sizeof(buf)) >= 0 || + if (nvram_getenv("et1macaddr", buf, sizeof(buf)) >= 0 ||
+ cfe_getenv("et1macaddr", buf, sizeof(buf)) >= 0) + cfe_getenv("et1macaddr", buf, sizeof(buf)) >= 0)
+ str2eaddr(buf, sprom->et1mac); + str2eaddr(buf, sprom->et1mac);
+ if (nvram_getenv("et0phyaddr", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(et0phyaddr, "et0phyaddr", buf);
+ cfe_getenv("et0phyaddr", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(et1phyaddr, "et1phyaddr", buf);
+ sprom->et0phyaddr = simple_strtoul(buf, NULL, 0); + READ_FROM_NVRAM(et0mdcport, "et0mdcport", buf);
+ if (nvram_getenv("et1phyaddr", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(et1mdcport, "et1mdcport", buf);
+ cfe_getenv("et1phyaddr", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(board_rev, "boardrev", buf);
+ sprom->et1phyaddr = simple_strtoul(buf, NULL, 0); + READ_FROM_NVRAM(country_code, "ccode", buf);
+ if (nvram_getenv("et0mdcport", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(ant_available_a, "aa5g", buf);
+ cfe_getenv("et0mdcport", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(ant_available_bg, "aa2g", buf);
+ sprom->et0mdcport = !!simple_strtoul(buf, NULL, 10); + READ_FROM_NVRAM(pa0b0, "pa0b0", buf);
+ if (nvram_getenv("et1mdcport", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(pa0b1, "pa0b1", buf);
+ cfe_getenv("et1mdcport", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(pa0b2, "pa0b2", buf);
+ sprom->et1mdcport = !!simple_strtoul(buf, NULL, 10); + READ_FROM_NVRAM(pa1b0, "pa1b0", buf);
+ if (nvram_getenv("pa0b0", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(pa1b1, "pa1b1", buf);
+ cfe_getenv("pa0b0", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(pa1b2, "pa1b2", buf);
+ sprom->pa0b0 = simple_strtoul(buf, NULL, 0); + READ_FROM_NVRAM(pa1lob0, "pa1lob0", buf);
+ if (nvram_getenv("pa0b1", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(pa1lob2, "pa1lob1", buf);
+ cfe_getenv("pa0b1", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(pa1lob1, "pa1lob2", buf);
+ sprom->pa0b1 = simple_strtoul(buf, NULL, 0); + READ_FROM_NVRAM(pa1hib0, "pa1hib0", buf);
+ if (nvram_getenv("pa0b2", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(pa1hib2, "pa1hib1", buf);
+ cfe_getenv("pa0b2", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(pa1hib1, "pa1hib2", buf);
+ sprom->pa0b2 = simple_strtoul(buf, NULL, 0); + READ_FROM_NVRAM(gpio0, "wl0gpio0", buf);
+ if (nvram_getenv("pa1b0", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(gpio1, "wl0gpio1", buf);
+ cfe_getenv("pa1b0", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(gpio2, "wl0gpio2", buf);
+ sprom->pa1b0 = simple_strtoul(buf, NULL, 0); + READ_FROM_NVRAM(gpio3, "wl0gpio3", buf);
+ if (nvram_getenv("pa1b1", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(maxpwr_bg, "pa0maxpwr", buf);
+ cfe_getenv("pa1b1", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(maxpwr_al, "pa1lomaxpwr", buf);
+ sprom->pa1b1 = simple_strtoul(buf, NULL, 0); + READ_FROM_NVRAM(maxpwr_a, "pa1maxpwr", buf);
+ if (nvram_getenv("pa1b2", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(maxpwr_ah, "pa1himaxpwr", buf);
+ cfe_getenv("pa1b2", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(itssi_a, "pa1itssit", buf);
+ sprom->pa1b2 = simple_strtoul(buf, NULL, 0); + READ_FROM_NVRAM(itssi_bg, "pa0itssit", buf);
+ if (nvram_getenv("wl0gpio0", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(tri2g, "tri2g", buf);
+ cfe_getenv("wl0gpio0", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(tri5gl, "tri5gl", buf);
+ sprom->gpio0 = simple_strtoul(buf, NULL, 0); + READ_FROM_NVRAM(tri5g, "tri5g", buf);
+ if (nvram_getenv("wl0gpio1", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(tri5gh, "tri5gh", buf);
+ cfe_getenv("wl0gpio1", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(rxpo2g, "rxpo2g", buf);
+ sprom->gpio1 = simple_strtoul(buf, NULL, 0); + READ_FROM_NVRAM(rxpo5g, "rxpo5g", buf);
+ if (nvram_getenv("wl0gpio2", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(rssisav2g, "rssisav2g", buf);
+ cfe_getenv("wl0gpio2", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(rssismc2g, "rssismc2g", buf);
+ sprom->gpio2 = simple_strtoul(buf, NULL, 0); + READ_FROM_NVRAM(rssismf2g, "rssismf2g", buf);
+ if (nvram_getenv("wl0gpio3", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(bxa2g, "bxa2g", buf);
+ cfe_getenv("wl0gpio3", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(rssisav5g, "rssisav5g", buf);
+ sprom->gpio3 = simple_strtoul(buf, NULL, 0); + READ_FROM_NVRAM(rssismc5g, "rssismc5g", buf);
+ if (nvram_getenv("pa0maxpwr", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(rssismf5g, "rssismf5g", buf);
+ cfe_getenv("pa0maxpwr", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(bxa5g, "bxa5g", buf);
+ sprom->maxpwr_bg = simple_strtoul(buf, NULL, 0); + READ_FROM_NVRAM(cck2gpo, "cck2gpo", buf);
+ if (nvram_getenv("pa1maxpwr", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(ofdm2gpo, "ofdm2gpo", buf);
+ cfe_getenv("pa1maxpwr", buf, sizeof(buf)) >= 0) + READ_FROM_NVRAM(ofdm5glpo, "ofdm5glpo", buf);
+ sprom->maxpwr_a = simple_strtoul(buf, NULL, 0); + READ_FROM_NVRAM(ofdm5gpo, "ofdm5gpo", buf);
+ if (nvram_getenv("pa0itssit", buf, sizeof(buf)) >= 0 || + READ_FROM_NVRAM(ofdm5ghpo, "ofdm5ghpo", buf);
+ cfe_getenv("pa0itssit", buf, sizeof(buf)) >= 0)
+ sprom->itssi_bg = simple_strtoul(buf, NULL, 0);
+ if (nvram_getenv("pa1itssit", buf, sizeof(buf)) >= 0 ||
+ cfe_getenv("pa1itssit", buf, sizeof(buf)) >= 0)
+ sprom->itssi_a = simple_strtoul(buf, NULL, 0);
+ +
+ if (nvram_getenv("boardflags", buf, sizeof(buf)) >= 0 || + if (nvram_getenv("boardflags", buf, sizeof(buf)) >= 0 ||
+ cfe_getenv("boardflags", buf, sizeof(buf)) >= 0) + cfe_getenv("boardflags", buf, sizeof(buf)) >= 0)
...@@ -110,7 +111,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> ...@@ -110,7 +111,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
static int bcm47xx_get_invariants(struct ssb_bus *bus, static int bcm47xx_get_invariants(struct ssb_bus *bus,
struct ssb_init_invariants *iv) struct ssb_init_invariants *iv)
{ {
@@ -82,43 +170,19 @@ static int bcm47xx_get_invariants(struct @@ -82,43 +171,19 @@ static int bcm47xx_get_invariants(struct
/* Fill boardinfo structure */ /* Fill boardinfo structure */
memset(&(iv->boardinfo), 0 , sizeof(struct ssb_boardinfo)); memset(&(iv->boardinfo), 0 , sizeof(struct ssb_boardinfo));
......
From 3902bba103634d3256dac557020d7974f0d08aff Mon Sep 17 00:00:00 2001 From a41121d789e236fd637ab49beb5ce7b48763613a Mon Sep 17 00:00:00 2001
From: Hauke Mehrtens <hauke@hauke-m.de> From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Sun, 18 Jul 2010 14:59:24 +0200 Date: Sun, 18 Jul 2010 14:59:24 +0200
Subject: [PATCH 4/5] MIPS: BCM47xx: Setup and register serial early Subject: [PATCH 4/5] MIPS: BCM47xx: Setup and register serial early
...@@ -33,7 +33,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> ...@@ -33,7 +33,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
#include <asm/bootinfo.h> #include <asm/bootinfo.h>
#include <asm/reboot.h> #include <asm/reboot.h>
#include <asm/time.h> #include <asm/time.h>
@@ -189,12 +191,45 @@ static int bcm47xx_get_invariants(struct @@ -190,12 +192,45 @@ static int bcm47xx_get_invariants(struct
void __init plat_mem_setup(void) void __init plat_mem_setup(void)
{ {
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
+EXPORT_SYMBOL(nvram_get); +EXPORT_SYMBOL(nvram_get);
--- a/arch/mips/bcm47xx/setup.c --- a/arch/mips/bcm47xx/setup.c
+++ b/arch/mips/bcm47xx/setup.c +++ b/arch/mips/bcm47xx/setup.c
@@ -235,3 +235,20 @@ void __init plat_mem_setup(void) @@ -236,3 +236,20 @@ void __init plat_mem_setup(void)
_machine_halt = bcm47xx_machine_halt; _machine_halt = bcm47xx_machine_halt;
pm_power_off = bcm47xx_machine_halt; pm_power_off = bcm47xx_machine_halt;
} }
......
From 3902bba103634d3256dac557020d7974f0d08aff Mon Sep 17 00:00:00 2001 From a41121d789e236fd637ab49beb5ce7b48763613a Mon Sep 17 00:00:00 2001
From: Hauke Mehrtens <hauke@hauke-m.de> From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Sun, 18 Jul 2010 14:59:24 +0200 Date: Sun, 18 Jul 2010 14:59:24 +0200
Subject: [PATCH 4/5] MIPS: BCM47xx: Setup and register serial early Subject: [PATCH 4/5] MIPS: BCM47xx: Setup and register serial early
...@@ -33,7 +33,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> ...@@ -33,7 +33,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
#include <asm/bootinfo.h> #include <asm/bootinfo.h>
#include <asm/reboot.h> #include <asm/reboot.h>
#include <asm/time.h> #include <asm/time.h>
@@ -189,12 +191,45 @@ static int bcm47xx_get_invariants(struct @@ -190,12 +192,45 @@ static int bcm47xx_get_invariants(struct
void __init plat_mem_setup(void) void __init plat_mem_setup(void)
{ {
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
+EXPORT_SYMBOL(nvram_get); +EXPORT_SYMBOL(nvram_get);
--- a/arch/mips/bcm47xx/setup.c --- a/arch/mips/bcm47xx/setup.c
+++ b/arch/mips/bcm47xx/setup.c +++ b/arch/mips/bcm47xx/setup.c
@@ -235,3 +235,20 @@ void __init plat_mem_setup(void) @@ -236,3 +236,20 @@ void __init plat_mem_setup(void)
_machine_halt = bcm47xx_machine_halt; _machine_halt = bcm47xx_machine_halt;
pm_power_off = bcm47xx_machine_halt; pm_power_off = bcm47xx_machine_halt;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment