Commit f384b3dd authored by Hauke Mehrtens's avatar Hauke Mehrtens Committed by John W. Linville

MIPS: BCM47XX: provide sprom to bcma bus

On SoCs the sprom is often stored in nvram in the flashchip. This patch
registers a sprom fallback callback handler in bcma and provides the
sprom needed for this device.
Signed-off-by: default avatarHauke Mehrtens <>
Signed-off-by: default avatarJohn W. Linville <>
parent 019eee2e
......@@ -3,7 +3,7 @@
* Copyright (C) 2006 Felix Fietkau <>
* Copyright (C) 2006 Michael Buesch <>
* Copyright (C) 2010 Waldemar Brodkorb <>
* Copyright (C) 2010-2011 Hauke Mehrtens <>
* Copyright (C) 2010-2012 Hauke Mehrtens <>
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
......@@ -85,7 +85,7 @@ static void bcm47xx_machine_halt(void)
static int bcm47xx_get_sprom(struct ssb_bus *bus, struct ssb_sprom *out)
static int bcm47xx_get_sprom_ssb(struct ssb_bus *bus, struct ssb_sprom *out)
char prefix[10];
......@@ -102,7 +102,7 @@ static int bcm47xx_get_sprom(struct ssb_bus *bus, struct ssb_sprom *out)
static int bcm47xx_get_invariants(struct ssb_bus *bus,
struct ssb_init_invariants *iv)
struct ssb_init_invariants *iv)
char buf[20];
......@@ -132,7 +132,7 @@ static void __init bcm47xx_register_ssb(void)
char buf[100];
struct ssb_mipscore *mcore;
err = ssb_arch_register_fallback_sprom(&bcm47xx_get_sprom);
err = ssb_arch_register_fallback_sprom(&bcm47xx_get_sprom_ssb);
if (err)
printk(KERN_WARNING "bcm47xx: someone else already registered"
" a ssb SPROM callback handler (err %d)\n", err);
......@@ -159,10 +159,41 @@ static void __init bcm47xx_register_ssb(void)
static int bcm47xx_get_sprom_bcma(struct bcma_bus *bus, struct ssb_sprom *out)
char prefix[10];
struct bcma_device *core;
switch (bus->hosttype) {
snprintf(prefix, sizeof(prefix), "pci/%u/%u/",
bus->host_pci->bus->number + 1,
bcm47xx_fill_sprom(out, prefix);
return 0;
bcm47xx_fill_sprom_ethernet(out, NULL);
core = bcma_find_core(bus, BCMA_CORE_80211);
if (core) {
snprintf(prefix, sizeof(prefix), "sb/%u/",
bcm47xx_fill_sprom(out, prefix);
return 0;
pr_warn("bcm47xx: unable to fill SPROM for given bustype.\n");
return -EINVAL;
static void __init bcm47xx_register_bcma(void)
int err;
err = bcma_arch_register_fallback_sprom(&bcm47xx_get_sprom_bcma);
if (err)
pr_warn("bcm47xx: someone else already registered a bcma SPROM callback handler (err %d)\n", err);
err = bcma_host_soc_register(&bcm47xx_bus.bcma);
if (err)
panic("Failed to initialize BCMA bus (err %d)", err);
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment