mirror of https://github.com/hak5/openwrt.git
62 lines
1.8 KiB
Diff
62 lines
1.8 KiB
Diff
From 7b9116eeaf44c0d368b5eeaa06eb101465284596 Mon Sep 17 00:00:00 2001
|
|
From: Hauke Mehrtens <hauke@hauke-m.de>
|
|
Date: Wed, 11 Jan 2012 15:26:11 +0100
|
|
Subject: [PATCH 23/31] bcma: add the core unit number
|
|
|
|
Some SoCs have two pcie or gmac cores and we need to know the number of
|
|
the specific core on the bus. This is the case for the BCM4706.
|
|
|
|
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
|
---
|
|
drivers/bcma/scan.c | 14 ++++++++++++++
|
|
include/linux/bcma/bcma.h | 1 +
|
|
2 files changed, 15 insertions(+), 0 deletions(-)
|
|
|
|
--- a/drivers/bcma/scan.c
|
|
+++ b/drivers/bcma/scan.c
|
|
@@ -212,6 +212,17 @@ static struct bcma_device *bcma_find_cor
|
|
return NULL;
|
|
}
|
|
|
|
+static struct bcma_device *bcma_find_core_reverse(struct bcma_bus *bus, u16 coreid)
|
|
+{
|
|
+ struct bcma_device *core;
|
|
+
|
|
+ list_for_each_entry_reverse(core, &bus->cores, list) {
|
|
+ if (core->id.id == coreid)
|
|
+ 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)
|
|
@@ -392,6 +403,7 @@ int bcma_bus_scan(struct bcma_bus *bus)
|
|
bcma_scan_switch_core(bus, erombase);
|
|
|
|
while (eromptr < eromend) {
|
|
+ struct bcma_device *other_core;
|
|
struct bcma_device *core = kzalloc(sizeof(*core), GFP_KERNEL);
|
|
if (!core)
|
|
return -ENOMEM;
|
|
@@ -411,6 +423,8 @@ int bcma_bus_scan(struct bcma_bus *bus)
|
|
|
|
core->core_index = core_num++;
|
|
bus->nr_cores++;
|
|
+ other_core = bcma_find_core_reverse(bus, core->id.id);
|
|
+ core->core_unit = (other_core == NULL) ? 0 : other_core->core_unit + 1;
|
|
|
|
pr_info("Core %d found: %s "
|
|
"(manuf 0x%03X, id 0x%03X, rev 0x%02X, class 0x%X)\n",
|
|
--- a/include/linux/bcma/bcma.h
|
|
+++ b/include/linux/bcma/bcma.h
|
|
@@ -136,6 +136,7 @@ struct bcma_device {
|
|
bool dev_registered;
|
|
|
|
u8 core_index;
|
|
+ u8 core_unit;
|
|
|
|
u32 addr;
|
|
u32 wrap;
|