bcm53xx: update patches
[openwrt.git] / target / linux / bcm53xx / patches-3.10 / 122-bcma-add-arm-support.patch
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 (file)
index 0000000..1ce2013
--- /dev/null
@@ -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_ */