diff options
Diffstat (limited to 'target/linux/bcm53xx/patches-3.10/122-bcma-add-arm-support.patch')
-rw-r--r-- | target/linux/bcm53xx/patches-3.10/122-bcma-add-arm-support.patch | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/target/linux/bcm53xx/patches-3.10/122-bcma-add-arm-support.patch b/target/linux/bcm53xx/patches-3.10/122-bcma-add-arm-support.patch new file mode 100644 index 0000000000..1ce2013739 --- /dev/null +++ b/target/linux/bcm53xx/patches-3.10/122-bcma-add-arm-support.patch @@ -0,0 +1,156 @@ +bcma: add arm support + + +Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> +--- + drivers/bcma/Kconfig | 9 +++++ + drivers/bcma/Makefile | 1 + + drivers/bcma/driver_arm.c | 61 ++++++++++++++++++++++++++++++++++ + drivers/bcma/main.c | 7 ++++ + include/linux/bcma/bcma.h | 2 ++ + include/linux/bcma/bcma_driver_arm.h | 20 +++++++++++ + 6 files changed, 100 insertions(+) + create mode 100644 drivers/bcma/driver_arm.c + create mode 100644 include/linux/bcma/bcma_driver_arm.h + +--- a/drivers/bcma/Kconfig ++++ b/drivers/bcma/Kconfig +@@ -54,6 +54,15 @@ config BCMA_DRIVER_MIPS + + If unsure, say N + ++config BCMA_DRIVER_ARM ++ bool "BCMA Broadcom ARM core driver" ++ depends on BCMA && ARM ++ help ++ Driver for the Broadcom MIPS core attached to Broadcom specific ++ Advanced Microcontroller Bus. ++ ++ If unsure, say N ++ + config BCMA_SFLASH + bool + depends on BCMA_DRIVER_MIPS +--- a/drivers/bcma/Makefile ++++ b/drivers/bcma/Makefile +@@ -5,6 +5,7 @@ bcma-$(CONFIG_BCMA_NFLASH) += driver_ch + bcma-y += driver_pci.o + bcma-$(CONFIG_BCMA_DRIVER_PCI_HOSTMODE) += driver_pci_host.o + bcma-$(CONFIG_BCMA_DRIVER_MIPS) += driver_mips.o ++bcma-$(CONFIG_BCMA_DRIVER_ARM) += driver_arm.o + bcma-$(CONFIG_BCMA_DRIVER_GMAC_CMN) += driver_gmac_cmn.o + bcma-$(CONFIG_BCMA_DRIVER_GPIO) += driver_gpio.o + bcma-$(CONFIG_BCMA_HOST_PCI) += host_pci.o +--- /dev/null ++++ b/drivers/bcma/driver_arm.c +@@ -0,0 +1,53 @@ ++/* ++ * Broadcom specific AMBA ++ * Broadcom MIPS32 74K core driver ++ * ++ * Copyright 2009, Broadcom Corporation ++ * Copyright 2006, 2007, Michael Buesch <mb@bu3sch.de> ++ * Copyright 2010, Bernhard Loos <bernhardloos@googlemail.com> ++ * Copyright 2011, Hauke Mehrtens <hauke@hauke-m.de> ++ * ++ * Licensed under the GNU/GPL. See COPYING for details. ++ */ ++ ++#include "bcma_private.h" ++ ++#include <linux/bcma/bcma.h> ++ ++static void bcma_core_mips_set_irq_name(struct bcma_bus *bus, unsigned int irq, ++ u16 coreid, u8 unit) ++{ ++ struct bcma_device *core; ++ ++ core = bcma_find_core_unit(bus, coreid, unit); ++ if (!core) { ++ bcma_warn(bus, ++ "Can not find core (id: 0x%x, unit %i) for IRQ configuration.\n", ++ coreid, unit); ++ return; ++ } ++ core->irq = irq; ++} ++ ++void bcma_core_arm_init(struct bcma_drv_arm *acore) ++{ ++ struct bcma_bus *bus; ++ struct bcma_device *core; ++ bus = acore->core->bus; ++ ++ if (acore->setup_done) ++ return; ++ ++ bcma_core_mips_set_irq_name(bus, 111, BCMA_CORE_USB20, 0); ++ ++ bcma_core_mips_set_irq_name(bus, 179, BCMA_CORE_MAC_GBIT, 0); ++ bcma_core_mips_set_irq_name(bus, 180, BCMA_CORE_MAC_GBIT, 1); ++ bcma_core_mips_set_irq_name(bus, 181, BCMA_CORE_MAC_GBIT, 2); ++ bcma_core_mips_set_irq_name(bus, 182, BCMA_CORE_MAC_GBIT, 3); ++ ++ bcma_core_mips_set_irq_name(bus, 112, BCMA_CORE_USB30, 0); ++ bcma_debug(bus, "IRQ reconfiguration done\n"); ++ ++ ++ acore->setup_done = true; ++} +--- a/drivers/bcma/main.c ++++ b/drivers/bcma/main.c +@@ -269,6 +269,13 @@ int bcma_bus_register(struct bcma_bus *b + bcma_core_mips_init(&bus->drv_mips); + } + ++ /* Init ARM core */ ++ core = bcma_find_core(bus, BCMA_CORE_ARMCA9); ++ if (core) { ++ bus->drv_arm.core = core; ++ bcma_core_arm_init(&bus->drv_arm); ++ } ++ + /* Init PCIE core */ + core = bcma_find_core_unit(bus, BCMA_CORE_PCIE, 0); + if (core) { +--- a/include/linux/bcma/bcma.h ++++ b/include/linux/bcma/bcma.h +@@ -7,6 +7,7 @@ + #include <linux/bcma/bcma_driver_chipcommon.h> + #include <linux/bcma/bcma_driver_pci.h> + #include <linux/bcma/bcma_driver_mips.h> ++#include <linux/bcma/bcma_driver_arm.h> + #include <linux/bcma/bcma_driver_gmac_cmn.h> + #include <linux/ssb/ssb.h> /* SPROM sharing */ + +@@ -334,6 +335,7 @@ struct bcma_bus { + struct bcma_drv_cc drv_cc; + struct bcma_drv_pci drv_pci[2]; + struct bcma_drv_mips drv_mips; ++ struct bcma_drv_arm drv_arm; + struct bcma_drv_gmac_cmn drv_gmac_cmn; + + /* We decided to share SPROM struct with SSB as long as we do not need +--- /dev/null ++++ b/include/linux/bcma/bcma_driver_arm.h +@@ -0,0 +1,20 @@ ++#ifndef LINUX_BCMA_DRIVER_ARM_H_ ++#define LINUX_BCMA_DRIVER_ARM_H_ ++ ++struct bcma_device; ++ ++struct bcma_drv_arm { ++ struct bcma_device *core; ++ u8 setup_done:1; ++ u8 early_setup_done:1; ++}; ++ ++#ifdef CONFIG_BCMA_DRIVER_ARM ++extern void bcma_core_arm_init(struct bcma_drv_arm *acore); ++ ++#else ++static inline void bcma_core_arm_init(struct bcma_drv_arm *acore) { } ++ ++#endif ++ ++#endif /* LINUX_BCMA_DRIVER_ARM_H_ */ |