diff options
author | Hauke Mehrtens <hauke@hauke-m.de> | 2013-07-12 13:46:27 +0000 |
---|---|---|
committer | Hauke Mehrtens <hauke@hauke-m.de> | 2013-07-12 13:46:27 +0000 |
commit | 9e9261a7182c82947f1bbd7f63aa6a93a783e02e (patch) | |
tree | 77b0578b21c88e818fb6fb4507ea7c4325654582 /target/linux/bcm53xx/patches-3.10/0008-bcm53xx-initial-support-for-the-BCM5301-BCM470X-SoC-.patch | |
parent | 92961e09178746996cba8fea04482d69a7e69201 (diff) | |
download | mtk-20170518-9e9261a7182c82947f1bbd7f63aa6a93a783e02e.zip mtk-20170518-9e9261a7182c82947f1bbd7f63aa6a93a783e02e.tar.gz mtk-20170518-9e9261a7182c82947f1bbd7f63aa6a93a783e02e.tar.bz2 |
bcm53xx: add initial support for ARM based BCM47XX and BCM53XX SoCs
This was only tested on a Netgear R6250, but it could also work on
other devices when the correct images are generated.
It is only possible to boot into a ram disk, no Ethernet, Wifi, flash,
USB is supported.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
SVN-Revision: 37268
Diffstat (limited to 'target/linux/bcm53xx/patches-3.10/0008-bcm53xx-initial-support-for-the-BCM5301-BCM470X-SoC-.patch')
-rw-r--r-- | target/linux/bcm53xx/patches-3.10/0008-bcm53xx-initial-support-for-the-BCM5301-BCM470X-SoC-.patch | 307 |
1 files changed, 307 insertions, 0 deletions
diff --git a/target/linux/bcm53xx/patches-3.10/0008-bcm53xx-initial-support-for-the-BCM5301-BCM470X-SoC-.patch b/target/linux/bcm53xx/patches-3.10/0008-bcm53xx-initial-support-for-the-BCM5301-BCM470X-SoC-.patch new file mode 100644 index 0000000..1273f41 --- /dev/null +++ b/target/linux/bcm53xx/patches-3.10/0008-bcm53xx-initial-support-for-the-BCM5301-BCM470X-SoC-.patch @@ -0,0 +1,307 @@ +From 6c55b7f2fe06eb01f4ca6dad35d54c6e2ecbff25 Mon Sep 17 00:00:00 2001 +From: Hauke Mehrtens <hauke@hauke-m.de> +Date: Sat, 29 Jun 2013 22:06:43 +0200 +Subject: [PATCH 08/17] bcm53xx: initial support for the BCM5301/BCM470X SoC + with ARM CPU + +This patch adds support for the BCM5301/BCM470X SoCs with an ARM CPU. +Currently just booting to a shell is working and nothing else, no +Ethernet, wifi, flash, ... + +Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> +--- + arch/arm/Kconfig | 2 + + arch/arm/Kconfig.debug | 5 ++ + arch/arm/Makefile | 1 + + arch/arm/boot/dts/Makefile | 1 + + arch/arm/boot/dts/bcm5301-netgear-r6250.dts | 20 +++++++ + arch/arm/boot/dts/bcm5301.dtsi | 83 +++++++++++++++++++++++++++ + arch/arm/include/debug/bcm53xx.S | 19 ++++++ + arch/arm/mach-bcm53xx/Kconfig | 15 +++++ + arch/arm/mach-bcm53xx/Makefile | 1 + + arch/arm/mach-bcm53xx/bcm53xx.c | 69 ++++++++++++++++++++++ + 10 files changed, 216 insertions(+) + create mode 100644 arch/arm/boot/dts/bcm5301-netgear-r6250.dts + create mode 100644 arch/arm/boot/dts/bcm5301.dtsi + create mode 100644 arch/arm/include/debug/bcm53xx.S + create mode 100644 arch/arm/mach-bcm53xx/Kconfig + create mode 100644 arch/arm/mach-bcm53xx/Makefile + create mode 100644 arch/arm/mach-bcm53xx/bcm53xx.c + +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -922,6 +922,8 @@ source "arch/arm/mach-bcm/Kconfig" + + source "arch/arm/mach-bcm2835/Kconfig" + ++source "arch/arm/mach-bcm53xx/Kconfig" ++ + source "arch/arm/mach-clps711x/Kconfig" + + source "arch/arm/mach-cns3xxx/Kconfig" +--- a/arch/arm/Kconfig.debug ++++ b/arch/arm/Kconfig.debug +@@ -93,6 +93,10 @@ choice + bool "Kernel low-level debugging on BCM2835 PL011 UART" + depends on ARCH_BCM2835 + ++ config DEBUG_BCM53XX ++ bool "Kernel low-level debugging on BCM53XX UART1" ++ depends on ARCH_BCM53XX ++ + config DEBUG_CLPS711X_UART1 + bool "Kernel low-level debugging messages via UART1" + depends on ARCH_CLPS711X +@@ -620,6 +624,7 @@ endchoice + config DEBUG_LL_INCLUDE + string + default "debug/bcm2835.S" if DEBUG_BCM2835 ++ default "debug/bcm53xx.S" if DEBUG_BCM53XX + default "debug/cns3xxx.S" if DEBUG_CNS3XXX + default "debug/exynos.S" if DEBUG_EXYNOS_UART + default "debug/highbank.S" if DEBUG_HIGHBANK_UART +--- a/arch/arm/Makefile ++++ b/arch/arm/Makefile +@@ -145,6 +145,7 @@ textofs-$(CONFIG_ARCH_MSM8960) := 0x0020 + machine-$(CONFIG_ARCH_AT91) += at91 + machine-$(CONFIG_ARCH_BCM) += bcm + machine-$(CONFIG_ARCH_BCM2835) += bcm2835 ++machine-$(CONFIG_ARCH_BCM53XX) += bcm53xx + machine-$(CONFIG_ARCH_CLPS711X) += clps711x + machine-$(CONFIG_ARCH_CNS3XXX) += cns3xxx + machine-$(CONFIG_ARCH_DAVINCI) += davinci +--- a/arch/arm/boot/dts/Makefile ++++ b/arch/arm/boot/dts/Makefile +@@ -209,6 +209,7 @@ dtb-$(CONFIG_ARCH_VT8500) += vt8500-bv07 + wm8650-mid.dtb \ + wm8850-w70v2.dtb + dtb-$(CONFIG_ARCH_ZYNQ) += zynq-zc702.dtb ++dtb-$(CONFIG_ARCH_BCM53XX) += bcm5301-netgear-r6250.dtb + + targets += dtbs + targets += $(dtb-y) +--- /dev/null ++++ b/arch/arm/boot/dts/bcm5301-netgear-r6250.dts +@@ -0,0 +1,20 @@ ++/* ++ * Broadcom BCM47XX / BCM53XX arm platform code. ++ * ++ * Copyright 2013 Hauke Mehrtens <hauke@hauke-m.de> ++ * ++ * Licensed under the GNU/GPL. See COPYING for details. ++ */ ++ ++/dts-v1/; ++ ++/include/ "bcm5301.dtsi" ++ ++/ { ++ model = "Netgear R6250 V1 (BCM4708)"; ++ compatible = "netgear,r6250v1", "brcm,bcm5301"; ++ ++ memory { ++ reg = <0x00000000 0x08000000>; ++ }; ++}; +--- /dev/null ++++ b/arch/arm/boot/dts/bcm5301.dtsi +@@ -0,0 +1,83 @@ ++/* ++ * Broadcom BCM47XX / BCM53XX ARM platform code. ++ * ++ * Copyright 2013 Hauke Mehrtens <hauke@hauke-m.de> ++ * ++ * Licensed under the GNU/GPL. See COPYING for details. ++ */ ++ ++/include/ "skeleton.dtsi" ++ ++/ { ++ compatible = "brcm,bcm5301"; ++ model = "BCM5301/BCM4707/BCM4708/BCM4709 SoC"; ++ interrupt-parent = <&gic>; ++ ++ chosen { ++ bootargs = "console=ttyS0,115200 earlyprintk debug vmalloc=64M"; ++ }; ++ ++ cpus { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ cpu@0 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a9"; ++ reg = <0>; ++ }; ++ cpu@1 { ++ device_type = "cpu"; ++ compatible = "arm,cortex-a9"; ++ reg = <1>; ++ }; ++ }; ++ ++ clocks { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ clk_periph: periph { ++ compatible = "fixed-clock"; ++ #clock-cells = <0>; ++ clock-frequency = <400000000>; ++ }; ++ }; ++ ++ uart@18000300 { ++ compatible = "ns16550"; ++ reg = <0x18000300 0x100>; ++ interrupts = <0 85 4>; ++ clock-frequency = <100000000>; ++ }; ++ ++ uart@18000400 { ++ compatible = "ns16550"; ++ reg = <0x18000400 0x100>; ++ interrupts = <0 85 4>; ++ clock-frequency = <100000000>; ++ }; ++ ++ gic: interrupt-controller@19021000 { ++ compatible = "arm,cortex-a9-gic"; ++ #interrupt-cells = <3>; ++ #address-cells = <0>; ++ interrupt-controller; ++ reg = <0x19021000 0x1000>, ++ <0x19020100 0x100>; ++ }; ++ ++ timer@19020200 { ++ compatible = "arm,cortex-a9-global-timer"; ++ reg = <0x19020200 0x100>; ++ interrupts = <1 11 0xf04>; ++ clocks = <&clk_periph>; ++ #clock-cells = <0>; ++ }; ++ ++ local-timer@19020200 { ++ compatible = "arm,cortex-a9-twd-timer"; ++ reg = <0x19020600 0x100>; ++ interrupts = <1 13 0xf04>; ++ }; ++}; +--- /dev/null ++++ b/arch/arm/include/debug/bcm53xx.S +@@ -0,0 +1,19 @@ ++/* ++ * Macros used for EARLY_PRINTK, in low-level UART debug console ++ * ++ * Copyright 2013 Hauke Mehrtens <hauke@hauke-m.de> ++ * ++ * Licensed under the GNU/GPL. See COPYING for details. ++ */ ++ ++#define BCM53XX_UART1_PHYS 0x18000300 ++#define BCM53XX_UART1_VIRT 0xf1000300 ++#define BCM53XX_UART1_SH 0 ++ ++ .macro addruart, rp, rv, tmp ++ ldr \rp, =BCM53XX_UART1_PHYS @ MMU off, Physical ++ ldr \rv, =BCM53XX_UART1_VIRT @ MMU on, Virtual ++ .endm ++ ++#define UART_SHIFT BCM53XX_UART1_SH ++#include <asm/hardware/debug-8250.S> +--- /dev/null ++++ b/arch/arm/mach-bcm53xx/Kconfig +@@ -0,0 +1,15 @@ ++config ARCH_BCM53XX ++ bool "Broadcom BCM47XX / BCM53XX ARM SoC" ++ select CPU_V7 ++ select ARM_GIC ++ select HAVE_ARM_SCU if SMP ++ select HAVE_ARM_TWD if LOCAL_TIMERS ++ select HAVE_SMP ++ select HAVE_CLK ++ select LOCAL_TIMERS if SMP ++ select GENERIC_TIME ++ select GENERIC_CLOCKEVENTS_BUILD ++ select GENERIC_CLOCKEVENTS ++ select ARM_GLOBAL_TIMER ++ help ++ Support for Broadcom BCM47XX and BCM53XX SoCs with ARM CPU cores. +--- /dev/null ++++ b/arch/arm/mach-bcm53xx/Makefile +@@ -0,0 +1 @@ ++obj-y += bcm53xx.o +--- /dev/null ++++ b/arch/arm/mach-bcm53xx/bcm53xx.c +@@ -0,0 +1,69 @@ ++/* ++ * Broadcom BCM47XX / BCM53XX ARM platform code. ++ * ++ * Copyright 2013 Hauke Mehrtens <hauke@hauke-m.de> ++ * ++ * Licensed under the GNU/GPL. See COPYING for details. ++ */ ++#include <linux/of_address.h> ++#include <linux/of_platform.h> ++#include <linux/irqchip.h> ++#include <linux/clocksource.h> ++#include <linux/clk-provider.h> ++ ++#include <asm/mach/arch.h> ++#include <asm/mach/map.h> ++#include <asm/smp_scu.h> ++#include <asm/signal.h> ++ ++static int bcm53xx_abort_handler(unsigned long addr, unsigned int fsr, ++ struct pt_regs *regs) ++{ ++ /* ++ * These happen for no good reason ++ * possibly left over from CFE ++ */ ++ pr_warn("External imprecise Data abort at addr=%#lx, fsr=%#x ignored.\n", ++ addr, fsr); ++ ++ /* Returning non-zero causes fault display and panic */ ++ return 0; ++} ++ ++static void bcm53xx_aborts_enable(void) ++{ ++ /* Install our hook */ ++ hook_fault_code(16 + 6, bcm53xx_abort_handler, SIGBUS, 0, ++ "imprecise external abort"); ++} ++ ++static void __init bcm53xx_timer_init(void) ++{ ++ of_clk_init(NULL); ++ clocksource_of_init(); ++} ++ ++void __init bcm53xx_map_io(void) ++{ ++ debug_ll_io_init(); ++ bcm53xx_aborts_enable(); ++} ++ ++static void __init bcm53xx_dt_init(void) ++{ ++ of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); ++} ++ ++static const char const *bcm53xx_dt_compat[] = { ++ "brcm,bcm5301", ++ "netgear,r6250v1", ++ NULL, ++}; ++ ++DT_MACHINE_START(BCM53XX, "BCM53XX") ++ .init_machine = bcm53xx_dt_init, ++ .map_io = bcm53xx_map_io, ++ .init_irq = irqchip_init, ++ .init_time = bcm53xx_timer_init, ++ .dt_compat = bcm53xx_dt_compat, ++MACHINE_END |