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 000000000..495a0bff2 --- /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)  | 
