summaryrefslogtreecommitdiffstats
path: root/target/linux/brcm47xx/patches-3.2/195-bcma-add-support-for-sprom-not-found-on-the-device.patch
diff options
context:
space:
mode:
authorhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-03-27 17:07:28 +0000
committerhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>2012-03-27 17:07:28 +0000
commit550b5a8a069a9c83c2b6f8b8733548116bc20cd3 (patch)
treee73f2ed0fef750255755dd6e2466d5dc95a72d5b /target/linux/brcm47xx/patches-3.2/195-bcma-add-support-for-sprom-not-found-on-the-device.patch
parent82d90cbeb1d2373f69e162396db380a12f096d1b (diff)
brcm47xx: update sprom patches like they are in the mainline kernel
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31093 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/brcm47xx/patches-3.2/195-bcma-add-support-for-sprom-not-found-on-the-device.patch')
-rw-r--r--target/linux/brcm47xx/patches-3.2/195-bcma-add-support-for-sprom-not-found-on-the-device.patch137
1 files changed, 0 insertions, 137 deletions
diff --git a/target/linux/brcm47xx/patches-3.2/195-bcma-add-support-for-sprom-not-found-on-the-device.patch b/target/linux/brcm47xx/patches-3.2/195-bcma-add-support-for-sprom-not-found-on-the-device.patch
deleted file mode 100644
index 6991576d2..000000000
--- a/target/linux/brcm47xx/patches-3.2/195-bcma-add-support-for-sprom-not-found-on-the-device.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-From 332b8f6ca7da3197c631928b6bd1e7fdca87e109 Mon Sep 17 00:00:00 2001
-From: Hauke Mehrtens <hauke@hauke-m.de>
-Date: Sat, 18 Feb 2012 01:16:35 +0100
-Subject: [PATCH 195/202] bcma: add support for sprom not found on the device.
-
-On SoCs the sprom is stored in the nvram in a special partition on the
-flash chip. The nvram contains the sprom for the main bus, but
-sometimes also for a pci devices using bcma. This patch makes it
-possible for the arch code to register a function to fetch the needed
-sprom from the nvram and provide it to the bcma code.
-
-Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
----
- drivers/bcma/sprom.c | 80 ++++++++++++++++++++++++++++++++++++++++----
- include/linux/bcma/bcma.h | 6 +++
- 2 files changed, 78 insertions(+), 8 deletions(-)
-
---- a/drivers/bcma/sprom.c
-+++ b/drivers/bcma/sprom.c
-@@ -16,6 +16,49 @@
-
- #define SPOFF(offset) ((offset) / sizeof(u16))
-
-+static int(*get_fallback_sprom)(struct bcma_bus *dev, struct ssb_sprom *out);
-+
-+/**
-+ * ssb_arch_register_fallback_sprom - Registers a method providing a
-+ * fallback SPROM if no SPROM is found.
-+ *
-+ * @sprom_callback: The callback function.
-+ *
-+ * With this function the architecture implementation may register a
-+ * callback handler which fills the SPROM data structure. The fallback is
-+ * only used for PCI based SSB devices, where no valid SPROM can be found
-+ * in the shadow registers.
-+ *
-+ * This function is useful for weird architectures that have a half-assed
-+ * SSB device hardwired to their PCI bus.
-+ *
-+ * Note that it does only work with PCI attached SSB devices. PCMCIA
-+ * devices currently don't use this fallback.
-+ * Architectures must provide the SPROM for native SSB devices anyway, so
-+ * the fallback also isn't used for native devices.
-+ *
-+ * This function is available for architecture code, only. So it is not
-+ * exported.
-+ */
-+int bcma_arch_register_fallback_sprom(int (*sprom_callback)(struct bcma_bus *bus,
-+ struct ssb_sprom *out))
-+{
-+ if (get_fallback_sprom)
-+ return -EEXIST;
-+ get_fallback_sprom = sprom_callback;
-+
-+ return 0;
-+}
-+
-+static int bcma_fill_sprom_with_fallback(struct bcma_bus *bus,
-+ struct ssb_sprom *out)
-+{
-+ if (!get_fallback_sprom)
-+ return -ENOENT;
-+
-+ return get_fallback_sprom(bus, out);
-+}
-+
- /**************************************************
- * R/W ops.
- **************************************************/
-@@ -205,23 +248,44 @@ static void bcma_sprom_extract_r8(struct
- SSB_SROM8_FEM_ANTSWLUT) >> SSB_SROM8_FEM_ANTSWLUT_SHIFT;
- }
-
-+static bool bcma_is_sprom_available(struct bcma_bus *bus)
-+{
-+ u32 sromctrl;
-+
-+ if (!(bus->drv_cc.capabilities & BCMA_CC_CAP_SPROM))
-+ return false;
-+
-+ if (bus->drv_cc.core->id.rev >= 32) {
-+ sromctrl = bcma_read32(bus->drv_cc.core, BCMA_CC_SROM_CONTROL);
-+ if (!(sromctrl & BCMA_CC_SROM_CONTROL_PRESENT))
-+ return false;
-+ }
-+ return true;
-+}
-+
- int bcma_sprom_get(struct bcma_bus *bus)
- {
- u16 offset;
- u16 *sprom;
-- u32 sromctrl;
- int err = 0;
-
- if (!bus->drv_cc.core)
- return -EOPNOTSUPP;
-
-- if (!(bus->drv_cc.capabilities & BCMA_CC_CAP_SPROM))
-- return -ENOENT;
--
-- if (bus->drv_cc.core->id.rev >= 32) {
-- sromctrl = bcma_read32(bus->drv_cc.core, BCMA_CC_SROM_CONTROL);
-- if (!(sromctrl & BCMA_CC_SROM_CONTROL_PRESENT))
-- return -ENOENT;
-+ if (!bcma_is_sprom_available(bus)) {
-+ /*
-+ * Maybe there is no SPROM on the device?
-+ * Now we ask the arch code if there is some sprom
-+ * available for this device in some other storage
-+ */
-+ err = bcma_fill_sprom_with_fallback(bus, &bus->sprom);
-+ if (err) {
-+ pr_warn("Using fallback SPROM failed (err %d)\n", err);
-+ } else {
-+ pr_debug("Using SPROM revision %d provided by"
-+ " platform.\n", bus->sprom.revision);
-+ return 0;
-+ }
- }
-
- sprom = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16),
---- a/include/linux/bcma/bcma.h
-+++ b/include/linux/bcma/bcma.h
-@@ -177,6 +177,12 @@ int __bcma_driver_register(struct bcma_d
-
- extern void bcma_driver_unregister(struct bcma_driver *drv);
-
-+/* Set a fallback SPROM.
-+ * See kdoc at the function definition for complete documentation. */
-+extern int bcma_arch_register_fallback_sprom(
-+ int (*sprom_callback)(struct bcma_bus *bus,
-+ struct ssb_sprom *out));
-+
- struct bcma_bus {
- /* The MMIO area. */
- void __iomem *mmio;