mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-04-21 12:27:27 +03:00
brcm47xx: update bcma and ssb to master-2011-07-21
* add new patches for bcm4716 SoC * add support for serial flash on bcma bus git-svn-id: svn://svn.openwrt.org/openwrt/trunk@27723 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
@@ -1,44 +1,50 @@
|
||||
From a807b2fb233af60028ed38ba237953bcffdf33e9 Mon Sep 17 00:00:00 2001
|
||||
From 22573303ad477fa07c948a9944e9c18fea9af724 Mon Sep 17 00:00:00 2001
|
||||
From: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
Date: Sat, 18 Jun 2011 14:31:53 +0200
|
||||
Subject: [PATCH 04/14] bcma: add SOC bus
|
||||
Subject: [PATCH 04/22] bcma: add SOC bus
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This patch adds support for using bcma on an embedded bus. An embedded
|
||||
system like the bcm4716 could register this bus and it searches for the
|
||||
bcma cores then.
|
||||
This patch adds support for using bcma on a Broadcom SoC as the system
|
||||
bus. An SoC like the bcm4716 could register this bus and use it to
|
||||
searches for the bcma cores and register the devices on this bus.
|
||||
|
||||
BCMA_HOSTTYPE_NONE was intended for SoCs at first but BCMA_HOSTTYPE_SOC
|
||||
is a better name.
|
||||
|
||||
Acked-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
---
|
||||
drivers/bcma/Kconfig | 5 +
|
||||
drivers/bcma/Kconfig | 4 +
|
||||
drivers/bcma/Makefile | 1 +
|
||||
drivers/bcma/host_soc.c | 178 +++++++++++++++++++++++++++++++++++++++++
|
||||
drivers/bcma/main.c | 1 +
|
||||
drivers/bcma/scan.c | 24 +++++-
|
||||
include/linux/bcma/bcma.h | 4 +
|
||||
drivers/bcma/host_soc.c | 183 +++++++++++++++++++++++++++++++++++++++++
|
||||
drivers/bcma/main.c | 6 +-
|
||||
drivers/bcma/scan.c | 42 ++++++++-
|
||||
include/linux/bcma/bcma.h | 5 +-
|
||||
include/linux/bcma/bcma_soc.h | 16 ++++
|
||||
7 files changed, 227 insertions(+), 2 deletions(-)
|
||||
7 files changed, 250 insertions(+), 7 deletions(-)
|
||||
create mode 100644 drivers/bcma/host_soc.c
|
||||
create mode 100644 include/linux/bcma/bcma_soc.h
|
||||
|
||||
--- a/drivers/bcma/Kconfig
|
||||
+++ b/drivers/bcma/Kconfig
|
||||
@@ -27,6 +27,11 @@ config BCMA_HOST_PCI
|
||||
bool "Support for BCMA on PCI-host bus"
|
||||
depends on BCMA_HOST_PCI_POSSIBLE
|
||||
@@ -34,6 +34,10 @@ config BCMA_DRIVER_PCI_HOSTMODE
|
||||
help
|
||||
PCI core hostmode operation (external PCI bus).
|
||||
|
||||
+config BCMA_HOST_SOC
|
||||
+ bool
|
||||
+ depends on BCMA && MIPS
|
||||
+ default n
|
||||
+
|
||||
config BCMA_DEBUG
|
||||
bool "BCMA debugging"
|
||||
depends on BCMA
|
||||
--- a/drivers/bcma/Makefile
|
||||
+++ b/drivers/bcma/Makefile
|
||||
@@ -2,6 +2,7 @@ bcma-y += main.o scan.o core.o sprom
|
||||
bcma-y += driver_chipcommon.o driver_chipcommon_pmu.o
|
||||
@@ -3,6 +3,7 @@ bcma-y += driver_chipcommon.o driver
|
||||
bcma-y += driver_pci.o
|
||||
bcma-$(CONFIG_BCMA_DRIVER_PCI_HOSTMODE) += driver_pci_host.o
|
||||
bcma-$(CONFIG_BCMA_HOST_PCI) += host_pci.o
|
||||
+bcma-$(CONFIG_BCMA_HOST_SOC) += host_soc.o
|
||||
obj-$(CONFIG_BCMA) += bcma.o
|
||||
@@ -46,7 +52,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
ccflags-$(CONFIG_BCMA_DEBUG) := -DDEBUG
|
||||
--- /dev/null
|
||||
+++ b/drivers/bcma/host_soc.c
|
||||
@@ -0,0 +1,178 @@
|
||||
@@ -0,0 +1,183 @@
|
||||
+/*
|
||||
+ * Broadcom specific AMBA
|
||||
+ * System on Chip (SoC) Host
|
||||
@@ -210,11 +216,12 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
+int __init bcma_host_soc_register(struct bcma_soc *soc)
|
||||
+{
|
||||
+ struct bcma_bus *bus = &soc->bus;
|
||||
+ int err;
|
||||
+
|
||||
+ /* iomap only first core. We have to read some register on this core
|
||||
+ * to scan the bus.
|
||||
+ */
|
||||
+ bus->mmio = ioremap(BCMA_ADDR_BASE, BCMA_CORE_SIZE * 1);
|
||||
+ bus->mmio = ioremap_nocache(BCMA_ADDR_BASE, BCMA_CORE_SIZE * 1);
|
||||
+ if (!bus->mmio)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
@@ -223,13 +230,30 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
+ bus->ops = &bcma_host_soc_ops;
|
||||
+
|
||||
+ /* Register */
|
||||
+ return bcma_bus_early_register(bus, &soc->core_cc, &soc->core_mips);
|
||||
+ err = bcma_bus_early_register(bus, &soc->core_cc, &soc->core_mips);
|
||||
+ if (err)
|
||||
+ iounmap(bus->mmio);
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
--- a/drivers/bcma/main.c
|
||||
+++ b/drivers/bcma/main.c
|
||||
@@ -95,6 +95,7 @@ static int bcma_register_cores(struct bc
|
||||
@@ -66,6 +66,10 @@ static struct bcma_device *bcma_find_cor
|
||||
static void bcma_release_core_dev(struct device *dev)
|
||||
{
|
||||
struct bcma_device *core = container_of(dev, struct bcma_device, dev);
|
||||
+ if (core->io_addr)
|
||||
+ iounmap(core->io_addr);
|
||||
+ if (core->io_wrap)
|
||||
+ iounmap(core->io_wrap);
|
||||
kfree(core);
|
||||
}
|
||||
|
||||
@@ -93,8 +97,8 @@ static int bcma_register_cores(struct bc
|
||||
core->dma_dev = &bus->host_pci->dev;
|
||||
core->irq = bus->host_pci->irq;
|
||||
break;
|
||||
case BCMA_HOSTTYPE_NONE:
|
||||
- case BCMA_HOSTTYPE_NONE:
|
||||
case BCMA_HOSTTYPE_SDIO:
|
||||
+ case BCMA_HOSTTYPE_SOC:
|
||||
break;
|
||||
@@ -237,62 +261,99 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
|
||||
--- a/drivers/bcma/scan.c
|
||||
+++ b/drivers/bcma/scan.c
|
||||
@@ -337,6 +337,14 @@ static int bcma_get_next_core(struct bcm
|
||||
@@ -337,6 +337,16 @@ static int bcma_get_next_core(struct bcm
|
||||
}
|
||||
}
|
||||
}
|
||||
+ if (bus->hosttype == BCMA_HOSTTYPE_SOC) {
|
||||
+ core->io_addr = ioremap(core->addr, BCMA_CORE_SIZE);
|
||||
+ core->io_addr = ioremap_nocache(core->addr, BCMA_CORE_SIZE);
|
||||
+ if (!core->io_addr)
|
||||
+ return -ENOMEM;
|
||||
+ core->io_wrap = ioremap(core->wrap, BCMA_CORE_SIZE);
|
||||
+ if (!core->io_wrap)
|
||||
+ core->io_wrap = ioremap_nocache(core->wrap, BCMA_CORE_SIZE);
|
||||
+ if (!core->io_wrap) {
|
||||
+ iounmap(core->io_addr);
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+ }
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -369,7 +377,13 @@ int bcma_bus_scan(struct bcma_bus *bus)
|
||||
@@ -369,7 +379,14 @@ int bcma_bus_scan(struct bcma_bus *bus)
|
||||
bcma_init_bus(bus);
|
||||
|
||||
erombase = bcma_scan_read32(bus, 0, BCMA_CC_EROM);
|
||||
- eromptr = bus->mmio;
|
||||
+ if (bus->hosttype == BCMA_HOSTTYPE_SOC) {
|
||||
+ eromptr = ioremap(erombase, BCMA_CORE_SIZE);
|
||||
+ eromptr = ioremap_nocache(erombase, BCMA_CORE_SIZE);
|
||||
+ if (!eromptr)
|
||||
+ return -ENOMEM;
|
||||
+ } else
|
||||
+ } else {
|
||||
+ eromptr = bus->mmio;
|
||||
+ }
|
||||
+
|
||||
eromend = eromptr + BCMA_CORE_SIZE / sizeof(u32);
|
||||
|
||||
bcma_scan_switch_core(bus, erombase);
|
||||
@@ -417,7 +431,13 @@ int __init bcma_bus_scan_early(struct bc
|
||||
int err, core_num = 0;
|
||||
@@ -404,6 +421,9 @@ int bcma_bus_scan(struct bcma_bus *bus)
|
||||
list_add(&core->list, &bus->cores);
|
||||
}
|
||||
|
||||
+ if (bus->hosttype == BCMA_HOSTTYPE_SOC)
|
||||
+ iounmap(eromptr);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -414,10 +434,18 @@ int __init bcma_bus_scan_early(struct bc
|
||||
u32 erombase;
|
||||
u32 __iomem *eromptr, *eromend;
|
||||
|
||||
- int err, core_num = 0;
|
||||
+ int err = -ENODEV;
|
||||
+ int core_num = 0;
|
||||
|
||||
erombase = bcma_scan_read32(bus, 0, BCMA_CC_EROM);
|
||||
- eromptr = bus->mmio;
|
||||
+ if (bus->hosttype == BCMA_HOSTTYPE_SOC) {
|
||||
+ eromptr = ioremap(erombase, BCMA_CORE_SIZE);
|
||||
+ eromptr = ioremap_nocache(erombase, BCMA_CORE_SIZE);
|
||||
+ if (!eromptr)
|
||||
+ return -ENOMEM;
|
||||
+ } else
|
||||
+ } else {
|
||||
+ eromptr = bus->mmio;
|
||||
+ }
|
||||
+
|
||||
eromend = eromptr + BCMA_CORE_SIZE / sizeof(u32);
|
||||
|
||||
bcma_scan_switch_core(bus, erombase);
|
||||
@@ -447,8 +475,12 @@ int __init bcma_bus_scan_early(struct bc
|
||||
core->id.class);
|
||||
|
||||
list_add(&core->list, &bus->cores);
|
||||
- return 0;
|
||||
+ err = 0;
|
||||
+ break;
|
||||
}
|
||||
|
||||
- return -ENODEV;
|
||||
+ if (bus->hosttype == BCMA_HOSTTYPE_SOC)
|
||||
+ iounmap(eromptr);
|
||||
+
|
||||
+ return err;
|
||||
}
|
||||
--- a/include/linux/bcma/bcma.h
|
||||
+++ b/include/linux/bcma/bcma.h
|
||||
@@ -17,6 +17,7 @@ enum bcma_hosttype {
|
||||
BCMA_HOSTTYPE_NONE,
|
||||
@@ -14,9 +14,9 @@ struct bcma_device;
|
||||
struct bcma_bus;
|
||||
|
||||
enum bcma_hosttype {
|
||||
- BCMA_HOSTTYPE_NONE,
|
||||
BCMA_HOSTTYPE_PCI,
|
||||
BCMA_HOSTTYPE_SDIO,
|
||||
+ BCMA_HOSTTYPE_SOC,
|
||||
};
|
||||
|
||||
struct bcma_chipinfo {
|
||||
@@ -133,6 +134,9 @@ struct bcma_device {
|
||||
@@ -138,6 +138,9 @@ struct bcma_device {
|
||||
u32 addr;
|
||||
u32 wrap;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user