From a9215205081ddf159ae656d082f92abee540338b Mon Sep 17 00:00:00 2001 From: hauke Date: Thu, 5 May 2011 14:05:21 +0000 Subject: brcm47xx: when detecting a ssb pci device without an own sprom write the sprom data from the platform device to the correct pointer. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@26829 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../500-ssb-add-callback-for-sprom.patch | 36 +++++++--------------- 1 file changed, 11 insertions(+), 25 deletions(-) (limited to 'target/linux/brcm63xx/patches-2.6.37/500-ssb-add-callback-for-sprom.patch') diff --git a/target/linux/brcm63xx/patches-2.6.37/500-ssb-add-callback-for-sprom.patch b/target/linux/brcm63xx/patches-2.6.37/500-ssb-add-callback-for-sprom.patch index 7e153a1ef..6c241622a 100644 --- a/target/linux/brcm63xx/patches-2.6.37/500-ssb-add-callback-for-sprom.patch +++ b/target/linux/brcm63xx/patches-2.6.37/500-ssb-add-callback-for-sprom.patch @@ -1,18 +1,3 @@ -From 62a518124cff3970d99f7ccdab457f4289e3b982 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens -Date: Sat, 30 Apr 2011 15:42:30 +0200 -Subject: [PATCH 1/4] ssb: add callback for sprom - - -Signed-off-by: Hauke Mehrtens ---- - arch/mips/bcm63xx/boards/board_bcm963xx.c | 16 ++++++++++++++-- - drivers/ssb/pci.c | 13 ++++++++----- - drivers/ssb/sprom.c | 26 +++++++++++++++----------- - drivers/ssb/ssb_private.h | 2 +- - include/linux/ssb/ssb.h | 3 ++- - 5 files changed, 40 insertions(+), 20 deletions(-) - --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c @@ -1927,6 +1927,17 @@ static struct ssb_sprom bcm63xx_sprom = @@ -20,10 +5,10 @@ Signed-off-by: Hauke Mehrtens .boardflags_hi = 0x0000, }; + -+int bcm63xx_get_fallback_sprom(struct ssb_bus *bus) ++int bcm63xx_get_fallback_sprom(struct ssb_bus *bus, struct ssb_sprom *out) +{ + if (bus->bustype == SSB_BUSTYPE_PCI) { -+ memcpy(&bus->sprom, &bcm63xx_sprom, sizeof(struct ssb_sprom)); ++ memcpy(out, &bcm63xx_sprom, sizeof(struct ssb_sprom)); + return 0; + } else { + printk(KERN_ERR PFX "unable to fill SPROM for given bustype.\n"); @@ -65,7 +50,7 @@ Signed-off-by: Hauke Mehrtens - memcpy(sprom, fallback, sizeof(*sprom)); + * Now we ask the arch code if there is some sprom + * avaliable for this device in some other storage */ -+ err = ssb_fill_sprom_with_fallback(bus); ++ err = ssb_fill_sprom_with_fallback(bus, sprom); + if (err) { + ssb_printk(KERN_WARNING PFX "WARNING: Using" + " fallback SPROM failed (err %d)\n", @@ -81,7 +66,7 @@ Signed-off-by: Hauke Mehrtens -static const struct ssb_sprom *fallback_sprom; -+static int(*get_fallback_sprom)(struct ssb_bus *dev); ++static int(*get_fallback_sprom)(struct ssb_bus *dev, struct ssb_sprom *out); static int sprom2hex(const u16 *sprom, char *buf, size_t buf_len, @@ -110,7 +95,7 @@ Signed-off-by: Hauke Mehrtens * This function is available for architecture code, only. So it is not exported. */ -int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom) -+int ssb_arch_register_fallback_sprom(int (*sprom_callback)(struct ssb_bus *bus)) ++int ssb_arch_register_fallback_sprom(int (*sprom_callback)(struct ssb_bus *bus, struct ssb_sprom *out)) { - if (fallback_sprom) + if (get_fallback_sprom) @@ -122,13 +107,13 @@ Signed-off-by: Hauke Mehrtens } -const struct ssb_sprom *ssb_get_fallback_sprom(void) -+int ssb_fill_sprom_with_fallback(struct ssb_bus *bus) ++int ssb_fill_sprom_with_fallback(struct ssb_bus *bus, struct ssb_sprom *out) { - return fallback_sprom; + if (!get_fallback_sprom) + return -ENOENT; + -+ return get_fallback_sprom(bus); ++ return get_fallback_sprom(bus, out); } /* http://bcm-v4.sipsolutions.net/802.11/IsSpromAvailable */ @@ -139,19 +124,20 @@ Signed-off-by: Hauke Mehrtens int (*sprom_check_crc)(const u16 *sprom, size_t size), int (*sprom_write)(struct ssb_bus *bus, const u16 *sprom)); -extern const struct ssb_sprom *ssb_get_fallback_sprom(void); -+extern int ssb_fill_sprom_with_fallback(struct ssb_bus *bus); ++extern int ssb_fill_sprom_with_fallback(struct ssb_bus *bus, struct ssb_sprom *out); /* core.c */ --- a/include/linux/ssb/ssb.h +++ b/include/linux/ssb/ssb.h -@@ -404,7 +404,8 @@ extern bool ssb_is_sprom_available(struc +@@ -404,7 +404,9 @@ extern bool ssb_is_sprom_available(struc /* Set a fallback SPROM. * See kdoc at the function definition for complete documentation. */ -extern int ssb_arch_set_fallback_sprom(const struct ssb_sprom *sprom); +extern int ssb_arch_register_fallback_sprom( -+ int (*sprom_callback)(struct ssb_bus *bus)); ++ int (*sprom_callback)(struct ssb_bus *bus, ++ struct ssb_sprom *out)); /* Suspend a SSB bus. * Call this from the parent bus suspend routine. */ -- cgit v1.2.3