On Northstar (ARM arch) we will use MTD subsystem to access NVRAM and
SPROM. To get access to flash device we need to register these cores
first.

Signed-off-by: Rafał Miłecki <[email protected]>
---
 drivers/bcma/main.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c
index 9a86352..297a2d4 100644
--- a/drivers/bcma/main.c
+++ b/drivers/bcma/main.c
@@ -120,6 +120,17 @@ static void bcma_release_core_dev(struct device *dev)
        kfree(core);
 }
 
+static bool bcma_is_core_needed_early(u16 core_id)
+{
+       switch (core_id) {
+       case BCMA_CORE_NS_NAND:
+       case BCMA_CORE_NS_QSPI:
+               return true;
+       }
+
+       return false;
+}
+
 static void bcma_register_core(struct bcma_bus *bus, struct bcma_device *core)
 {
        int err;
@@ -170,6 +181,10 @@ static int bcma_register_devices(struct bcma_bus *bus)
                        continue;
                }
 
+               /* Early cores were already registered */
+               if (bcma_is_core_needed_early(core->id.id))
+                       continue;
+
                /* Only first GMAC core on BCM4706 is connected and working */
                if (core->id.id == BCMA_CORE_4706_MAC_GBIT &&
                    core->core_unit > 0)
@@ -252,6 +267,12 @@ int bcma_bus_register(struct bcma_bus *bus)
                bcma_core_chipcommon_early_init(&bus->drv_cc);
        }
 
+       /* Cores providing flash access go before SPROM init */
+       list_for_each_entry(core, &bus->cores, list) {
+               if (bcma_is_core_needed_early(core->id.id))
+                       bcma_register_core(bus, core);
+       }
+
        /* Try to get SPROM */
        err = bcma_sprom_get(bus);
        if (err == -ENOENT) {
-- 
1.8.4.5

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to