summaryrefslogtreecommitdiffstats
path: root/target/linux/brcm47xx/patches-3.0/0003-bcma-add-functions-to-scan-cores-needed-on-SoCs.patch
diff options
context:
space:
mode:
authorhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>2011-12-19 23:33:03 +0000
committerhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>2011-12-19 23:33:03 +0000
commita604d7454cd81740bb3f2ada108e37284477c822 (patch)
tree2c691892f4e36354a69a84b539a774c4c546947f /target/linux/brcm47xx/patches-3.0/0003-bcma-add-functions-to-scan-cores-needed-on-SoCs.patch
parent84ddb1a86303e4ff6028720c877bd0d5f9ec9a2a (diff)
kernel: update bcma and ssb to version master-2011-12-16 from wireless-testing
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@29574 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/brcm47xx/patches-3.0/0003-bcma-add-functions-to-scan-cores-needed-on-SoCs.patch')
-rw-r--r--target/linux/brcm47xx/patches-3.0/0003-bcma-add-functions-to-scan-cores-needed-on-SoCs.patch321
1 files changed, 0 insertions, 321 deletions
diff --git a/target/linux/brcm47xx/patches-3.0/0003-bcma-add-functions-to-scan-cores-needed-on-SoCs.patch b/target/linux/brcm47xx/patches-3.0/0003-bcma-add-functions-to-scan-cores-needed-on-SoCs.patch
deleted file mode 100644
index 92cd65d39..000000000
--- a/target/linux/brcm47xx/patches-3.0/0003-bcma-add-functions-to-scan-cores-needed-on-SoCs.patch
+++ /dev/null
@@ -1,321 +0,0 @@
-From f3c07dd351161cb33f1c8e1ff55a65ae0cc6b661 Mon Sep 17 00:00:00 2001
-From: Hauke Mehrtens <hauke@hauke-m.de>
-Date: Sat, 18 Jun 2011 14:30:55 +0200
-Subject: [PATCH 03/26] bcma: add functions to scan cores needed on SoCs
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The chip common and mips core have to be setup early in the boot
-process to get the cpu clock.
-bcma_bus_early_register() gets pointers to some space to store the core
-data and searches for the chip common and mips core and initializes
-chip common. After that was done and the kernel is out of early boot we
-just have to run bcma_bus_register() and it will search for the other
-cores, initialize and register them.
-The cores are getting the same numbers as before.
-
-Acked-by: Rafał Miłecki <zajec5@gmail.com>
-Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
----
- drivers/bcma/bcma_private.h | 7 ++
- drivers/bcma/driver_chipcommon.c | 5 ++
- drivers/bcma/driver_pci.c | 5 ++
- drivers/bcma/main.c | 46 +++++++++++++
- drivers/bcma/scan.c | 95 +++++++++++++++++++++++++--
- include/linux/bcma/bcma.h | 1 +
- include/linux/bcma/bcma_driver_chipcommon.h | 1 +
- 7 files changed, 154 insertions(+), 6 deletions(-)
-
---- a/drivers/bcma/bcma_private.h
-+++ b/drivers/bcma/bcma_private.h
-@@ -15,9 +15,16 @@ struct bcma_bus;
- /* main.c */
- int bcma_bus_register(struct bcma_bus *bus);
- void bcma_bus_unregister(struct bcma_bus *bus);
-+int __init bcma_bus_early_register(struct bcma_bus *bus,
-+ struct bcma_device *core_cc,
-+ struct bcma_device *core_mips);
-
- /* scan.c */
- int bcma_bus_scan(struct bcma_bus *bus);
-+int __init bcma_bus_scan_early(struct bcma_bus *bus,
-+ struct bcma_device_id *match,
-+ struct bcma_device *core);
-+void bcma_init_bus(struct bcma_bus *bus);
-
- /* sprom.c */
- int bcma_sprom_get(struct bcma_bus *bus);
---- a/drivers/bcma/driver_chipcommon.c
-+++ b/drivers/bcma/driver_chipcommon.c
-@@ -26,6 +26,9 @@ void bcma_core_chipcommon_init(struct bc
- u32 leddc_on = 10;
- u32 leddc_off = 90;
-
-+ if (cc->setup_done)
-+ return;
-+
- if (cc->core->id.rev >= 11)
- cc->status = bcma_cc_read32(cc, BCMA_CC_CHIPSTAT);
- cc->capabilities = bcma_cc_read32(cc, BCMA_CC_CAP);
-@@ -52,6 +55,8 @@ void bcma_core_chipcommon_init(struct bc
- ((leddc_on << BCMA_CC_GPIOTIMER_ONTIME_SHIFT) |
- (leddc_off << BCMA_CC_GPIOTIMER_OFFTIME_SHIFT)));
- }
-+
-+ cc->setup_done = true;
- }
-
- /* Set chip watchdog reset timer to fire in 'ticks' backplane cycles */
---- a/drivers/bcma/driver_pci.c
-+++ b/drivers/bcma/driver_pci.c
-@@ -187,6 +187,9 @@ static bool bcma_core_pci_is_in_hostmode
-
- void bcma_core_pci_init(struct bcma_drv_pci *pc)
- {
-+ if (pc->setup_done)
-+ return;
-+
- if (bcma_core_pci_is_in_hostmode(pc)) {
- #ifdef CONFIG_BCMA_DRIVER_PCI_HOSTMODE
- bcma_core_pci_hostmode_init(pc);
-@@ -196,6 +199,8 @@ void bcma_core_pci_init(struct bcma_drv_
- } else {
- bcma_core_pci_clientmode_init(pc);
- }
-+
-+ pc->setup_done = true;
- }
-
- int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc, struct bcma_device *core,
---- a/drivers/bcma/main.c
-+++ b/drivers/bcma/main.c
-@@ -169,6 +169,52 @@ void bcma_bus_unregister(struct bcma_bus
- bcma_unregister_cores(bus);
- }
-
-+int __init bcma_bus_early_register(struct bcma_bus *bus,
-+ struct bcma_device *core_cc,
-+ struct bcma_device *core_mips)
-+{
-+ int err;
-+ struct bcma_device *core;
-+ struct bcma_device_id match;
-+
-+ bcma_init_bus(bus);
-+
-+ match.manuf = BCMA_MANUF_BCM;
-+ match.id = BCMA_CORE_CHIPCOMMON;
-+ match.class = BCMA_CL_SIM;
-+ match.rev = BCMA_ANY_REV;
-+
-+ /* Scan for chip common core */
-+ err = bcma_bus_scan_early(bus, &match, core_cc);
-+ if (err) {
-+ pr_err("Failed to scan for common core: %d\n", err);
-+ return -1;
-+ }
-+
-+ match.manuf = BCMA_MANUF_MIPS;
-+ match.id = BCMA_CORE_MIPS_74K;
-+ match.class = BCMA_CL_SIM;
-+ match.rev = BCMA_ANY_REV;
-+
-+ /* Scan for mips core */
-+ err = bcma_bus_scan_early(bus, &match, core_mips);
-+ if (err) {
-+ pr_err("Failed to scan for mips core: %d\n", err);
-+ return -1;
-+ }
-+
-+ /* Init CC core */
-+ core = bcma_find_core(bus, BCMA_CORE_CHIPCOMMON);
-+ if (core) {
-+ bus->drv_cc.core = core;
-+ bcma_core_chipcommon_init(&bus->drv_cc);
-+ }
-+
-+ pr_info("Early bus registered\n");
-+
-+ return 0;
-+}
-+
- int __bcma_driver_register(struct bcma_driver *drv, struct module *owner)
- {
- drv->drv.name = drv->name;
---- a/drivers/bcma/scan.c
-+++ b/drivers/bcma/scan.c
-@@ -200,7 +200,20 @@ static s32 bcma_erom_get_addr_desc(struc
- return addrl;
- }
-
-+static struct bcma_device *bcma_find_core_by_index(struct bcma_bus *bus,
-+ u16 index)
-+{
-+ struct bcma_device *core;
-+
-+ list_for_each_entry(core, &bus->cores, list) {
-+ if (core->core_index == index)
-+ return core;
-+ }
-+ return NULL;
-+}
-+
- static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr,
-+ struct bcma_device_id *match, int core_num,
- struct bcma_device *core)
- {
- s32 tmp;
-@@ -251,6 +264,21 @@ static int bcma_get_next_core(struct bcm
- return -ENXIO;
- }
-
-+ if (bcma_find_core_by_index(bus, core_num)) {
-+ bcma_erom_skip_component(bus, eromptr);
-+ return -ENODEV;
-+ }
-+
-+ if (match && ((match->manuf != BCMA_ANY_MANUF &&
-+ match->manuf != core->id.manuf) ||
-+ (match->id != BCMA_ANY_ID && match->id != core->id.id) ||
-+ (match->rev != BCMA_ANY_REV && match->rev != core->id.rev) ||
-+ (match->class != BCMA_ANY_CLASS && match->class != core->id.class)
-+ )) {
-+ bcma_erom_skip_component(bus, eromptr);
-+ return -ENODEV;
-+ }
-+
- /* get & parse master ports */
- for (i = 0; i < ports[0]; i++) {
- u32 mst_port_d = bcma_erom_get_mst_port(bus, eromptr);
-@@ -312,10 +340,13 @@ static int bcma_get_next_core(struct bcm
- return 0;
- }
-
--static void bcma_init_bus(struct bcma_bus *bus)
-+void bcma_init_bus(struct bcma_bus *bus)
- {
- s32 tmp;
-
-+ if (bus->init_done)
-+ return;
-+
- INIT_LIST_HEAD(&bus->cores);
- bus->nr_cores = 0;
-
-@@ -325,6 +356,7 @@ static void bcma_init_bus(struct bcma_bu
- bus->chipinfo.id = (tmp & BCMA_CC_ID_ID) >> BCMA_CC_ID_ID_SHIFT;
- bus->chipinfo.rev = (tmp & BCMA_CC_ID_REV) >> BCMA_CC_ID_REV_SHIFT;
- bus->chipinfo.pkg = (tmp & BCMA_CC_ID_PKG) >> BCMA_CC_ID_PKG_SHIFT;
-+ bus->init_done = true;
- }
-
- int bcma_bus_scan(struct bcma_bus *bus)
-@@ -332,7 +364,7 @@ int bcma_bus_scan(struct bcma_bus *bus)
- u32 erombase;
- u32 __iomem *eromptr, *eromend;
-
-- int err;
-+ int err, core_num = 0;
-
- bcma_init_bus(bus);
-
-@@ -349,23 +381,74 @@ int bcma_bus_scan(struct bcma_bus *bus)
- INIT_LIST_HEAD(&core->list);
- core->bus = bus;
-
-- err = bcma_get_next_core(bus, &eromptr, core);
-- if (err == -ENXIO)
-+ err = bcma_get_next_core(bus, &eromptr, NULL, core_num, core);
-+ if (err == -ENODEV) {
-+ core_num++;
-+ continue;
-+ } else if (err == -ENXIO)
- continue;
- else if (err == -ESPIPE)
- break;
- else if (err < 0)
- return err;
-
-+ core->core_index = core_num++;
-+ bus->nr_cores++;
-+
- pr_info("Core %d found: %s "
- "(manuf 0x%03X, id 0x%03X, rev 0x%02X, class 0x%X)\n",
-- bus->nr_cores, bcma_device_name(&core->id),
-+ core->core_index, bcma_device_name(&core->id),
- core->id.manuf, core->id.id, core->id.rev,
- core->id.class);
-
-- core->core_index = bus->nr_cores++;
- list_add(&core->list, &bus->cores);
- }
-
- return 0;
- }
-+
-+int __init bcma_bus_scan_early(struct bcma_bus *bus,
-+ struct bcma_device_id *match,
-+ struct bcma_device *core)
-+{
-+ u32 erombase;
-+ u32 __iomem *eromptr, *eromend;
-+
-+ int err, core_num = 0;
-+
-+ erombase = bcma_scan_read32(bus, 0, BCMA_CC_EROM);
-+ eromptr = bus->mmio;
-+ eromend = eromptr + BCMA_CORE_SIZE / sizeof(u32);
-+
-+ bcma_scan_switch_core(bus, erombase);
-+
-+ while (eromptr < eromend) {
-+ memset(core, 0, sizeof(*core));
-+ INIT_LIST_HEAD(&core->list);
-+ core->bus = bus;
-+
-+ err = bcma_get_next_core(bus, &eromptr, match, core_num, core);
-+ if (err == -ENODEV) {
-+ core_num++;
-+ continue;
-+ } else if (err == -ENXIO)
-+ continue;
-+ else if (err == -ESPIPE)
-+ break;
-+ else if (err < 0)
-+ return err;
-+
-+ core->core_index = core_num++;
-+ bus->nr_cores++;
-+ pr_info("Core %d found: %s "
-+ "(manuf 0x%03X, id 0x%03X, rev 0x%02X, class 0x%X)\n",
-+ core->core_index, bcma_device_name(&core->id),
-+ core->id.manuf, core->id.id, core->id.rev,
-+ core->id.class);
-+
-+ list_add(&core->list, &bus->cores);
-+ return 0;
-+ }
-+
-+ return -ENODEV;
-+}
---- a/include/linux/bcma/bcma.h
-+++ b/include/linux/bcma/bcma.h
-@@ -190,6 +190,7 @@ struct bcma_bus {
- struct bcma_device *mapped_core;
- struct list_head cores;
- u8 nr_cores;
-+ u8 init_done:1;
-
- struct bcma_drv_cc drv_cc;
- struct bcma_drv_pci drv_pci;
---- a/include/linux/bcma/bcma_driver_chipcommon.h
-+++ b/include/linux/bcma/bcma_driver_chipcommon.h
-@@ -252,6 +252,7 @@ struct bcma_drv_cc {
- u32 status;
- u32 capabilities;
- u32 capabilities_ext;
-+ u8 setup_done:1;
- /* Fast Powerup Delay constant */
- u16 fast_pwrup_delay;
- struct bcma_chipcommon_pmu pmu;