diff options
author | Nathan Hintz <nlhintz@hotmail.com> | 2012-05-05 00:56:32 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-05-16 12:46:03 -0400 |
commit | 5fe2e0711dd9286e46f60f21c8cd580242cf8f89 (patch) | |
tree | 140900aaf93cd7b8c5d6d3c21e18dd81defb1d70 /arch/mips | |
parent | 82a7c2bb5f57fd9f610f9e6d7c532033bebfa0cc (diff) |
bcma: Move initialization of SPROM to prevent overwrite
The first thing bcm47xx_fill_sprom does is initialize (zero fill) the SPROM. For
BCMA SOC, this wipes out any values previously read by bcm47xx_fill_sprom_ethernet
(see arch/mips/bcm47xx/setup.c - bcm47xx_get_sprom_bcma). Move the initialization
of SPROM so it is called prior to filling in any values.
Signed-off-by: Nathan Hintz <nlhintz@hotmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'arch/mips')
-rw-r--r-- | arch/mips/bcm47xx/setup.c | 4 | ||||
-rw-r--r-- | arch/mips/bcm47xx/sprom.c | 2 |
2 files changed, 4 insertions, 2 deletions
diff --git a/arch/mips/bcm47xx/setup.c b/arch/mips/bcm47xx/setup.c index 9ef46d2a5110..95bf4d7bac21 100644 --- a/arch/mips/bcm47xx/setup.c +++ b/arch/mips/bcm47xx/setup.c | |||
@@ -90,6 +90,7 @@ static int bcm47xx_get_sprom_ssb(struct ssb_bus *bus, struct ssb_sprom *out) | |||
90 | char prefix[10]; | 90 | char prefix[10]; |
91 | 91 | ||
92 | if (bus->bustype == SSB_BUSTYPE_PCI) { | 92 | if (bus->bustype == SSB_BUSTYPE_PCI) { |
93 | memset(out, 0, sizeof(struct ssb_sprom)); | ||
93 | snprintf(prefix, sizeof(prefix), "pci/%u/%u/", | 94 | snprintf(prefix, sizeof(prefix), "pci/%u/%u/", |
94 | bus->host_pci->bus->number + 1, | 95 | bus->host_pci->bus->number + 1, |
95 | PCI_SLOT(bus->host_pci->devfn)); | 96 | PCI_SLOT(bus->host_pci->devfn)); |
@@ -111,6 +112,7 @@ static int bcm47xx_get_invariants(struct ssb_bus *bus, | |||
111 | 112 | ||
112 | bcm47xx_fill_ssb_boardinfo(&iv->boardinfo, NULL); | 113 | bcm47xx_fill_ssb_boardinfo(&iv->boardinfo, NULL); |
113 | 114 | ||
115 | memset(&iv->sprom, 0, sizeof(struct ssb_sprom)); | ||
114 | bcm47xx_fill_sprom(&iv->sprom, NULL); | 116 | bcm47xx_fill_sprom(&iv->sprom, NULL); |
115 | 117 | ||
116 | if (nvram_getenv("cardbus", buf, sizeof(buf)) >= 0) | 118 | if (nvram_getenv("cardbus", buf, sizeof(buf)) >= 0) |
@@ -159,12 +161,14 @@ static int bcm47xx_get_sprom_bcma(struct bcma_bus *bus, struct ssb_sprom *out) | |||
159 | 161 | ||
160 | switch (bus->hosttype) { | 162 | switch (bus->hosttype) { |
161 | case BCMA_HOSTTYPE_PCI: | 163 | case BCMA_HOSTTYPE_PCI: |
164 | memset(out, 0, sizeof(struct ssb_sprom)); | ||
162 | snprintf(prefix, sizeof(prefix), "pci/%u/%u/", | 165 | snprintf(prefix, sizeof(prefix), "pci/%u/%u/", |
163 | bus->host_pci->bus->number + 1, | 166 | bus->host_pci->bus->number + 1, |
164 | PCI_SLOT(bus->host_pci->devfn)); | 167 | PCI_SLOT(bus->host_pci->devfn)); |
165 | bcm47xx_fill_sprom(out, prefix); | 168 | bcm47xx_fill_sprom(out, prefix); |
166 | return 0; | 169 | return 0; |
167 | case BCMA_HOSTTYPE_SOC: | 170 | case BCMA_HOSTTYPE_SOC: |
171 | memset(out, 0, sizeof(struct ssb_sprom)); | ||
168 | bcm47xx_fill_sprom_ethernet(out, NULL); | 172 | bcm47xx_fill_sprom_ethernet(out, NULL); |
169 | core = bcma_find_core(bus, BCMA_CORE_80211); | 173 | core = bcma_find_core(bus, BCMA_CORE_80211); |
170 | if (core) { | 174 | if (core) { |
diff --git a/arch/mips/bcm47xx/sprom.c b/arch/mips/bcm47xx/sprom.c index 17282e0d7835..d3a889745e20 100644 --- a/arch/mips/bcm47xx/sprom.c +++ b/arch/mips/bcm47xx/sprom.c | |||
@@ -557,8 +557,6 @@ void bcm47xx_fill_sprom_ethernet(struct ssb_sprom *sprom, const char *prefix) | |||
557 | 557 | ||
558 | void bcm47xx_fill_sprom(struct ssb_sprom *sprom, const char *prefix) | 558 | void bcm47xx_fill_sprom(struct ssb_sprom *sprom, const char *prefix) |
559 | { | 559 | { |
560 | memset(sprom, 0, sizeof(struct ssb_sprom)); | ||
561 | |||
562 | bcm47xx_fill_sprom_ethernet(sprom, prefix); | 560 | bcm47xx_fill_sprom_ethernet(sprom, prefix); |
563 | 561 | ||
564 | nvram_read_u8(prefix, NULL, "sromrev", &sprom->revision, 0); | 562 | nvram_read_u8(prefix, NULL, "sromrev", &sprom->revision, 0); |