ARM: BCM5301X: initial support for the BCM5301X/BCM470X SoCs with ARM CPU
authorHauke Mehrtens <hauke@hauke-m.de>
Mon, 3 Feb 2014 23:01:43 +0000 (00:01 +0100)
committerMatt Porter <mporter@linaro.org>
Thu, 6 Mar 2014 05:36:02 +0000 (00:36 -0500)
This patch adds support for the BCM5301X/BCM470X SoCs with an ARM CPUs.
Currently just booting to a shell is working and nothing else, no
Ethernet, wifi, flash, ...
I have some pending patches to make Ethernet work for this device.
Mostly device tree support for bcma is missing.

This SoC is used in small office and home router with Broadcom SoCs
it's internal name is Northstar. This code should support the BCM4707,
BCM4708, BCM4709, BCM53010, BCM53011 and BCM53012 SoC. It uses one or
two ARM Cortex A9 Cores, some highlights are 2 PCIe 2.0 controllers,
4 Gigabit Ethernet MACs and a USB 3.0 host controller.

This SoC uses a dual core CPU, but this is currently not implemented.
More information about this SoC can be found here:
http://www.anandtech.com/show/5925/broadcom-announces-bcm4708x-and-bcm5301x-socs-for-80211ac-routers

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Christian Daudt <bcm@fixthebug.org>
Signed-off-by: Matt Porter <mporter@linaro.org>
Documentation/devicetree/bindings/arm/bcm4708.txt [new file with mode: 0644]
MAINTAINERS
arch/arm/configs/multi_v7_defconfig
arch/arm/mach-bcm/Kconfig
arch/arm/mach-bcm/Makefile
arch/arm/mach-bcm/bcm_5301x.c [new file with mode: 0644]

diff --git a/Documentation/devicetree/bindings/arm/bcm4708.txt b/Documentation/devicetree/bindings/arm/bcm4708.txt
new file mode 100644 (file)
index 0000000..6b0f49f
--- /dev/null
@@ -0,0 +1,8 @@
+Broadcom BCM4708 device tree bindings
+-------------------------------------------
+
+Boards with the BCM4708 SoC shall have the following properties:
+
+Required root node property:
+
+compatible = "brcm,bcm4708";
index fb08dcececf148165c88179c29f28b39b07532b6..082eccdfbc4fcc93028dde5eaedd07bb24331656 100644 (file)
@@ -1880,6 +1880,14 @@ F:       arch/arm/boot/dts/bcm2835*
 F:     arch/arm/configs/bcm2835_defconfig
 F:     drivers/*/*bcm2835*
 
+BROADCOM BCM5301X ARM ARCHICTURE
+M:     Hauke Mehrtens <hauke@hauke-m.de>
+L:     linux-arm-kernel@lists.infradead.org
+S:     Maintained
+F:     arch/arm/mach-bcm/bcm_5301x.c
+F:     arch/arm/boot/dts/bcm5301x.dtsi
+F:     arch/arm/boot/dts/bcm470*
+
 BROADCOM TG3 GIGABIT ETHERNET DRIVER
 M:     Nithin Nayak Sujir <nsujir@broadcom.com>
 M:     Michael Chan <mchan@broadcom.com>
index ee6982976d661d0086ff9886851ec9948e4ee909..1b4821bc5c7a7dac82fee4fd64775aac607f6340 100644 (file)
@@ -11,6 +11,7 @@ CONFIG_ARCH_MVEBU=y
 CONFIG_MACH_ARMADA_370=y
 CONFIG_MACH_ARMADA_XP=y
 CONFIG_ARCH_BCM=y
+CONFIG_ARCH_BCM_5301X=y
 CONFIG_ARCH_BCM_MOBILE=y
 CONFIG_ARCH_BERLIN=y
 CONFIG_MACH_BERLIN_BG2=y
index 8dd5fbf2d0edd62bb9a9233fd1c237cbba6c968b..f2a2fb9909a1039040e4db6e9f2c5d9dbf116093 100644 (file)
@@ -31,6 +31,32 @@ config ARCH_BCM_MOBILE
          BCM11130, BCM11140, BCM11351, BCM28145 and
          BCM28155 variants.
 
+config ARCH_BCM_5301X
+       bool "Broadcom BCM470X / BCM5301X ARM SoC" if ARCH_MULTI_V7
+       depends on MMU
+       select ARM_GIC
+       select CACHE_L2X0
+       select HAVE_ARM_SCU if SMP
+       select HAVE_ARM_TWD if SMP
+       select HAVE_SMP
+       select COMMON_CLK
+       select GENERIC_CLOCKEVENTS
+       select ARM_GLOBAL_TIMER
+       select CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK
+       select MIGHT_HAVE_PCI
+       help
+         Support for Broadcom BCM470X and BCM5301X SoCs with ARM CPU cores.
+
+         This is a network SoC line mostly used in home routers and
+         wifi access points, it's internal name is Northstar.
+         This inclused the following SoC: BCM53010, BCM53011, BCM53012,
+         BCM53014, BCM53015, BCM53016, BCM53017, BCM53018, BCM4707,
+         BCM4708 and BCM4709.
+
+         Do not confuse this with the BCM4760 which is a totally
+         different SoC or with the older BCM47XX and BCM53XX based
+         network SoC using a MIPS CPU, they are supported by arch/mips/bcm47xx
+
 endmenu
 
 endif
index c2ccd5a0f77212ee4ba9389448bacba8ddc4faa6..01649132c9f215cdee2ad68afc7bc4e5e997c8df 100644 (file)
@@ -13,3 +13,4 @@
 obj-$(CONFIG_ARCH_BCM_MOBILE)  := board_bcm281xx.o bcm_kona_smc.o bcm_kona_smc_asm.o kona.o
 plus_sec := $(call as-instr,.arch_extension sec,+sec)
 AFLAGS_bcm_kona_smc_asm.o      :=-Wa,-march=armv7-a$(plus_sec)
+obj-$(CONFIG_ARCH_BCM_5301X)   += bcm_5301x.o
diff --git a/arch/arm/mach-bcm/bcm_5301x.c b/arch/arm/mach-bcm/bcm_5301x.c
new file mode 100644 (file)
index 0000000..ef9740a
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Broadcom BCM470X / BCM5301X ARM platform code.
+ *
+ * Copyright 2013 Hauke Mehrtens <hauke@hauke-m.de>
+ *
+ * Licensed under the GNU/GPL. See COPYING for details.
+ */
+#include <linux/of_platform.h>
+#include <asm/hardware/cache-l2x0.h>
+
+#include <asm/mach/arch.h>
+
+
+static void __init bcm5301x_dt_init(void)
+{
+       l2x0_of_init(0, ~0UL);
+       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+}
+
+static const char __initconst *bcm5301x_dt_compat[] = {
+       "brcm,bcm4708",
+       NULL,
+};
+
+DT_MACHINE_START(BCM5301X, "BCM5301X")
+       .init_machine   = bcm5301x_dt_init,
+       .dt_compat      = bcm5301x_dt_compat,
+MACHINE_END