diff options
Diffstat (limited to 'target/linux/brcm47xx/patches-2.6.39/033-bcm47xx-register-fallback-callback.patch')
-rw-r--r-- | target/linux/brcm47xx/patches-2.6.39/033-bcm47xx-register-fallback-callback.patch | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/target/linux/brcm47xx/patches-2.6.39/033-bcm47xx-register-fallback-callback.patch b/target/linux/brcm47xx/patches-2.6.39/033-bcm47xx-register-fallback-callback.patch new file mode 100644 index 0000000..495a0bf --- /dev/null +++ b/target/linux/brcm47xx/patches-2.6.39/033-bcm47xx-register-fallback-callback.patch @@ -0,0 +1,64 @@ +--- a/arch/mips/bcm47xx/nvram.c ++++ b/arch/mips/bcm47xx/nvram.c +@@ -3,6 +3,7 @@ + * + * Copyright (C) 2005 Broadcom Corporation + * Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org> ++ * Copyright (C) 2010-2011 Hauke Mehrtens <hauke@hauke-m.de> + * + * 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 +@@ -23,7 +24,7 @@ + static char nvram_buf[NVRAM_SPACE]; + + /* Probe for NVRAM header */ +-static void __init early_nvram_init(void) ++static void early_nvram_init(void) + { + struct ssb_mipscore *mcore = &ssb_bcm47xx.mipscore; + struct nvram_header *header; +--- a/arch/mips/bcm47xx/setup.c ++++ b/arch/mips/bcm47xx/setup.c +@@ -3,6 +3,7 @@ + * Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org> + * Copyright (C) 2006 Michael Buesch <mb@bu3sch.de> + * Copyright (C) 2010 Waldemar Brodkorb <wbx@openadk.org> ++ * Copyright (C) 2010-2011 Hauke Mehrtens <hauke@hauke-m.de> + * + * 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 +@@ -156,6 +157,22 @@ static void bcm47xx_fill_sprom(struct ss + } + } + ++int bcm47xx_get_sprom(struct ssb_bus *bus, struct ssb_sprom *out) ++{ ++ char prefix[10]; ++ ++ if (bus->bustype == SSB_BUSTYPE_PCI) { ++ snprintf(prefix, sizeof(prefix), "pci/%u/%u/", ++ bus->host_pci->bus->number + 1, ++ PCI_SLOT(bus->host_pci->devfn)); ++ bcm47xx_fill_sprom(out, prefix); ++ return 0; ++ } else { ++ printk(KERN_WARNING "bcm47xx: unable to fill SPROM for given bustype.\n"); ++ return -EINVAL; ++ } ++} ++ + static int bcm47xx_get_invariants(struct ssb_bus *bus, + struct ssb_init_invariants *iv) + { +@@ -212,6 +229,11 @@ void __init plat_mem_setup(void) + char buf[100]; + struct ssb_mipscore *mcore; + ++ err = ssb_arch_register_fallback_sprom(&bcm47xx_get_sprom); ++ if (err) ++ printk(KERN_WARNING "bcm47xx: someone else already registered" ++ " a ssb SPROM callback handler (err %d)\n", err); ++ + err = ssb_bus_ssbbus_register(&ssb_bcm47xx, SSB_ENUM_BASE, + bcm47xx_get_invariants); + if (err) |