diff options
Diffstat (limited to 'target/linux/brcm47xx/patches-3.2/0036-bcma-add-the-core-unit-number.patch')
| -rw-r--r-- | target/linux/brcm47xx/patches-3.2/0036-bcma-add-the-core-unit-number.patch | 61 | 
1 files changed, 61 insertions, 0 deletions
| diff --git a/target/linux/brcm47xx/patches-3.2/0036-bcma-add-the-core-unit-number.patch b/target/linux/brcm47xx/patches-3.2/0036-bcma-add-the-core-unit-number.patch new file mode 100644 index 000000000..2c41a3008 --- /dev/null +++ b/target/linux/brcm47xx/patches-3.2/0036-bcma-add-the-core-unit-number.patch @@ -0,0 +1,61 @@ +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) +@@ -407,6 +418,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; +@@ -426,6 +438,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 addr1; | 
