|
@@ -0,0 +1,156 @@
|
|
|
|
|
+bcma: add arm support
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+Signed-off-by: Hauke Mehrtens <[email protected]>
|
|
|
|
|
+---
|
|
|
|
|
+ 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 <[email protected]>
|
|
|
|
|
++ * Copyright 2010, Bernhard Loos <[email protected]>
|
|
|
|
|
++ * Copyright 2011, Hauke Mehrtens <[email protected]>
|
|
|
|
|
++ *
|
|
|
|
|
++ * 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_ */
|