aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bcma
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2011-07-09 07:22:03 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-07-11 15:02:17 -0400
commit534e7a4566ca5fd3c0c92a655bcbaa6f9bd13042 (patch)
treed33ce90d22e75c305e8c1a1a1b4b0181379d16b7 /drivers/bcma
parentedcc3604805b37344d0569b61a34dbe22943ba9f (diff)
bcma: add check if sprom is available before accessing it.
The SoCs like the bcm4716 do not have a sprom on the bcma bus like a pcie device. It stores the values in some partition on flash memory. For ssb this informations are read out in the bcm47xx arch code, something like that should also be implemented for bcma. Without this patch bcma panics on SoCs. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/bcma')
-rw-r--r--drivers/bcma/main.c4
-rw-r--r--drivers/bcma/sprom.c3
2 files changed, 6 insertions, 1 deletions
diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c
index 08a14a3d667e..873e2e4ac55f 100644
--- a/drivers/bcma/main.c
+++ b/drivers/bcma/main.c
@@ -149,7 +149,9 @@ int bcma_bus_register(struct bcma_bus *bus)
149 149
150 /* Try to get SPROM */ 150 /* Try to get SPROM */
151 err = bcma_sprom_get(bus); 151 err = bcma_sprom_get(bus);
152 if (err) { 152 if (err == -ENOENT) {
153 pr_err("No SPROM available\n");
154 } else if (err) {
153 pr_err("Failed to get SPROM: %d\n", err); 155 pr_err("Failed to get SPROM: %d\n", err);
154 return -ENOENT; 156 return -ENOENT;
155 } 157 }
diff --git a/drivers/bcma/sprom.c b/drivers/bcma/sprom.c
index ffbb0e32e921..8e8d5cf32e12 100644
--- a/drivers/bcma/sprom.c
+++ b/drivers/bcma/sprom.c
@@ -143,6 +143,9 @@ int bcma_sprom_get(struct bcma_bus *bus)
143 if (!bus->drv_cc.core) 143 if (!bus->drv_cc.core)
144 return -EOPNOTSUPP; 144 return -EOPNOTSUPP;
145 145
146 if (!(bus->drv_cc.capabilities & BCMA_CC_CAP_SPROM))
147 return -ENOENT;
148
146 sprom = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16), 149 sprom = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16),
147 GFP_KERNEL); 150 GFP_KERNEL);
148 if (!sprom) 151 if (!sprom)