aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2014-09-25 17:48:18 -0400
committerArnd Bergmann <arnd@arndb.de>2014-09-25 17:50:02 -0400
commite1e85e76ef327d4b013453ddd7b2c673aa304a71 (patch)
tree3fe22edbe9bf4d4ec6de24f7ad53f73ba23b21ac
parent57e33ff1dba139a70723e922c5838499610b60c1 (diff)
parente076e96227ef6b5b66cfdd79e75401bd2f6d532f (diff)
Merge tag 'bcm63138-v4' of http://github.com/brcm/linux into next/soc
Merge "ARM: BCM: Broadcom BCM63138 support" from Florian Fainelli: This patchset adds very minimal support for the BCM63138 SoC which is a xDSL SoC using a dual Cortex A9 CPU complex. * tag 'bcm63138-v4' of http://github.com/brcm/linux: MAINTAINERS: add entry for the Broadcom BCM63xx ARM SoCs ARM: BCM63XX: add BCM963138DVT Reference platform DTS ARM: BCM63XX: add BCM63138 minimal Device Tree ARM: BCM63XX: add low-level UART debug support ARM: BCM63XX: add basic support for the Broadcom BCM63138 DSL SoC Conflicts: arch/arm/Kconfig.debug Signed-off-by: Arnd Bergmann <arnd@arndb.de>
-rw-r--r--Documentation/devicetree/bindings/arm/bcm/bcm63138.txt9
-rw-r--r--MAINTAINERS8
-rw-r--r--arch/arm/Kconfig.debug18
-rw-r--r--arch/arm/boot/dts/Makefile1
-rw-r--r--arch/arm/boot/dts/bcm63138.dtsi134
-rw-r--r--arch/arm/boot/dts/bcm963138dvt.dts30
-rw-r--r--arch/arm/include/debug/bcm63xx.S33
-rw-r--r--arch/arm/mach-bcm/Kconfig17
-rw-r--r--arch/arm/mach-bcm/Makefile3
-rw-r--r--arch/arm/mach-bcm/bcm63xx.c27
10 files changed, 278 insertions, 2 deletions
diff --git a/Documentation/devicetree/bindings/arm/bcm/bcm63138.txt b/Documentation/devicetree/bindings/arm/bcm/bcm63138.txt
new file mode 100644
index 000000000000..bd49987a8812
--- /dev/null
+++ b/Documentation/devicetree/bindings/arm/bcm/bcm63138.txt
@@ -0,0 +1,9 @@
1Broadcom BCM63138 DSL System-on-a-Chip device tree bindings
2-----------------------------------------------------------
3
4Boards compatible with the BCM63138 DSL System-on-a-Chip should have the
5following properties:
6
7Required root node property:
8
9compatible: should be "brcm,bcm63138"
diff --git a/MAINTAINERS b/MAINTAINERS
index cf24bb56bab9..be403bcc8e5f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2033,6 +2033,14 @@ F: arch/arm/mach-bcm/bcm_5301x.c
2033F: arch/arm/boot/dts/bcm5301x.dtsi 2033F: arch/arm/boot/dts/bcm5301x.dtsi
2034F: arch/arm/boot/dts/bcm470* 2034F: arch/arm/boot/dts/bcm470*
2035 2035
2036BROADCOM BCM63XX ARM ARCHITECTURE
2037M: Florian Fainelli <f.fainelli@gmail.com>
2038L: linux-arm-kernel@lists.infradead.org
2039T: git git://git.github.com/brcm/linux.git
2040S: Maintained
2041F: arch/arm/mach-bcm/bcm63xx.c
2042F: arch/arm/include/debug/bcm63xx.S
2043
2036BROADCOM BCM7XXX ARM ARCHITECTURE 2044BROADCOM BCM7XXX ARM ARCHITECTURE
2037M: Marc Carino <marc.ceeeee@gmail.com> 2045M: Marc Carino <marc.ceeeee@gmail.com>
2038M: Brian Norris <computersforpeace@gmail.com> 2046M: Brian Norris <computersforpeace@gmail.com>
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
index 2dc9f6cd3c38..22ebff9d781d 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -122,6 +122,11 @@ choice
122 mobile SoCs in the Kona family of chips (e.g. bcm28155, 122 mobile SoCs in the Kona family of chips (e.g. bcm28155,
123 bcm11351, etc...) 123 bcm11351, etc...)
124 124
125 config DEBUG_BCM63XX
126 bool "Kernel low-level debugging on BCM63XX UART"
127 depends on ARCH_BCM_63XX
128 select DEBUG_UART_BCM63XX
129
125 config DEBUG_BERLIN_UART 130 config DEBUG_BERLIN_UART
126 bool "Marvell Berlin SoC Debug UART" 131 bool "Marvell Berlin SoC Debug UART"
127 depends on ARCH_BERLIN 132 depends on ARCH_BERLIN
@@ -1062,6 +1067,7 @@ config DEBUG_LL_INCLUDE
1062 default "debug/vf.S" if DEBUG_VF_UART 1067 default "debug/vf.S" if DEBUG_VF_UART
1063 default "debug/vt8500.S" if DEBUG_VT8500_UART0 1068 default "debug/vt8500.S" if DEBUG_VT8500_UART0
1064 default "debug/zynq.S" if DEBUG_ZYNQ_UART0 || DEBUG_ZYNQ_UART1 1069 default "debug/zynq.S" if DEBUG_ZYNQ_UART0 || DEBUG_ZYNQ_UART1
1070 default "debug/bcm63xx.S" if DEBUG_UART_BCM63XX
1065 default "mach/debug-macro.S" 1071 default "mach/debug-macro.S"
1066 1072
1067# Compatibility options for PL01x 1073# Compatibility options for PL01x
@@ -1081,6 +1087,10 @@ config DEBUG_UART_8250
1081 ARCH_IOP33X || ARCH_IXP4XX || \ 1087 ARCH_IOP33X || ARCH_IXP4XX || \
1082 ARCH_LPC32XX || ARCH_MV78XX0 || ARCH_ORION5X || ARCH_RPC 1088 ARCH_LPC32XX || ARCH_MV78XX0 || ARCH_ORION5X || ARCH_RPC
1083 1089
1090# Compatibility options for BCM63xx
1091config DEBUG_UART_BCM63XX
1092 def_bool ARCH_BCM_63XX
1093
1084config DEBUG_UART_PHYS 1094config DEBUG_UART_PHYS
1085 hex "Physical base address of debug UART" 1095 hex "Physical base address of debug UART"
1086 default 0x01c20000 if DEBUG_DAVINCI_DMx_UART0 1096 default 0x01c20000 if DEBUG_DAVINCI_DMx_UART0
@@ -1149,11 +1159,13 @@ config DEBUG_UART_PHYS
1149 default 0xffc02000 if DEBUG_SOCFPGA_UART 1159 default 0xffc02000 if DEBUG_SOCFPGA_UART
1150 default 0xffd82340 if ARCH_IOP13XX 1160 default 0xffd82340 if ARCH_IOP13XX
1151 default 0xfff36000 if DEBUG_HIGHBANK_UART 1161 default 0xfff36000 if DEBUG_HIGHBANK_UART
1162 default 0xfffe8600 if DEBUG_UART_BCM63XX
1152 default 0xfffff700 if ARCH_IOP33X 1163 default 0xfffff700 if ARCH_IOP33X
1153 depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \ 1164 depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \
1154 DEBUG_LL_UART_EFM32 || \ 1165 DEBUG_LL_UART_EFM32 || \
1155 DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_MESON_UARTAO || \ 1166 DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_MESON_UARTAO || \
1156 DEBUG_MSM_UART || DEBUG_QCOM_UARTDM || DEBUG_S3C24XX_UART 1167 DEBUG_MSM_UART || DEBUG_QCOM_UARTDM || DEBUG_S3C24XX_UART || \
1168 DEBUG_UART_BCM63XX
1157 1169
1158config DEBUG_UART_VIRT 1170config DEBUG_UART_VIRT
1159 hex "Virtual base address of debug UART" 1171 hex "Virtual base address of debug UART"
@@ -1186,6 +1198,7 @@ config DEBUG_UART_VIRT
1186 default 0xfa71e000 if DEBUG_QCOM_UARTDM 1198 default 0xfa71e000 if DEBUG_QCOM_UARTDM
1187 default 0xfb009000 if DEBUG_REALVIEW_STD_PORT 1199 default 0xfb009000 if DEBUG_REALVIEW_STD_PORT
1188 default 0xfb10c000 if DEBUG_REALVIEW_PB1176_PORT 1200 default 0xfb10c000 if DEBUG_REALVIEW_PB1176_PORT
1201 default 0xfcfe8600 if DEBUG_UART_BCM63XX
1189 default 0xfd000000 if ARCH_SPEAR3XX || ARCH_SPEAR6XX 1202 default 0xfd000000 if ARCH_SPEAR3XX || ARCH_SPEAR6XX
1190 default 0xfd000000 if ARCH_SPEAR13XX 1203 default 0xfd000000 if ARCH_SPEAR13XX
1191 default 0xfd012000 if ARCH_MV78XX0 1204 default 0xfd012000 if ARCH_MV78XX0
@@ -1224,7 +1237,8 @@ config DEBUG_UART_VIRT
1224 default DEBUG_UART_PHYS if !MMU 1237 default DEBUG_UART_PHYS if !MMU
1225 depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \ 1238 depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \
1226 DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_MESON_UARTAO || \ 1239 DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_MESON_UARTAO || \
1227 DEBUG_MSM_UART || DEBUG_QCOM_UARTDM || DEBUG_S3C24XX_UART 1240 DEBUG_MSM_UART || DEBUG_QCOM_UARTDM || DEBUG_S3C24XX_UART || \
1241 DEBUG_UART_BCM63XX
1228 1242
1229config DEBUG_UART_8250_SHIFT 1243config DEBUG_UART_8250_SHIFT
1230 int "Register offset shift for the 8250 debug UART" 1244 int "Register offset shift for the 8250 debug UART"
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 22aba8598ca7..1a471d7c61ce 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -53,6 +53,7 @@ dtb-$(CONFIG_ARCH_ATLAS6) += atlas6-evb.dtb
53dtb-$(CONFIG_ARCH_AXXIA) += axm5516-amarillo.dtb 53dtb-$(CONFIG_ARCH_AXXIA) += axm5516-amarillo.dtb
54dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb 54dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb
55dtb-$(CONFIG_ARCH_BCM_5301X) += bcm4708-netgear-r6250.dtb 55dtb-$(CONFIG_ARCH_BCM_5301X) += bcm4708-netgear-r6250.dtb
56dtb-$(CONFIG_ARCH_BCM_63XX) += bcm963138dvt.dtb
56dtb-$(CONFIG_ARCH_BCM_MOBILE) += bcm28155-ap.dtb \ 57dtb-$(CONFIG_ARCH_BCM_MOBILE) += bcm28155-ap.dtb \
57 bcm21664-garnet.dtb 58 bcm21664-garnet.dtb
58dtb-$(CONFIG_ARCH_BERLIN) += \ 59dtb-$(CONFIG_ARCH_BERLIN) += \
diff --git a/arch/arm/boot/dts/bcm63138.dtsi b/arch/arm/boot/dts/bcm63138.dtsi
new file mode 100644
index 000000000000..f3bb2dd6269e
--- /dev/null
+++ b/arch/arm/boot/dts/bcm63138.dtsi
@@ -0,0 +1,134 @@
1/*
2 * Broadcom BCM63138 DSL SoCs Device Tree
3 */
4
5#include <dt-bindings/interrupt-controller/arm-gic.h>
6#include <dt-bindings/interrupt-controller/irq.h>
7
8#include "skeleton.dtsi"
9
10/ {
11 compatible = "brcm,bcm63138";
12 model = "Broadcom BCM63138 DSL SoC";
13 interrupt-parent = <&gic>;
14
15 aliases {
16 uart0 = &serial0;
17 uart1 = &serial1;
18 };
19
20 cpus {
21 #address-cells = <1>;
22 #size-cells = <0>;
23
24 cpu@0 {
25 device_type = "cpu";
26 compatible = "arm,cortex-a9";
27 next-level-cache = <&L2>;
28 reg = <0>;
29 };
30
31 cpu@1 {
32 device_type = "cpu";
33 compatible = "arm,cortex-a9";
34 next-level-cache = <&L2>;
35 reg = <1>;
36 };
37 };
38
39 clocks {
40 #address-cells = <1>;
41 #size-cells = <0>;
42
43 arm_timer_clk: arm_timer_clk {
44 #clock-cells = <0>;
45 compatible = "fixed-clock";
46 clock-frequency = <500000000>;
47 };
48
49 periph_clk: periph_clk {
50 #clock-cells = <0>;
51 compatible = "fixed-clock";
52 clock-frequency = <50000000>;
53 clock-output-names = "periph";
54 };
55 };
56
57 /* ARM bus */
58 axi@80000000 {
59 compatible = "simple-bus";
60 ranges = <0 0x80000000 0x784000>;
61 #address-cells = <1>;
62 #size-cells = <1>;
63
64 L2: cache-controller@1d000 {
65 compatible = "arm,pl310-cache";
66 reg = <0x1d000 0x1000>;
67 cache-unified;
68 cache-level = <2>;
69 cache-sets = <16>;
70 cache-size = <0x80000>;
71 interrupts = <GIC_PPI 0 IRQ_TYPE_LEVEL_HIGH>;
72 };
73
74 scu: scu@1e000 {
75 compatible = "arm,cortex-a9-scu";
76 reg = <0x1e000 0x100>;
77 };
78
79 gic: interrupt-controller@1e100 {
80 compatible = "arm,cortex-a9-gic";
81 reg = <0x1f000 0x1000
82 0x1e100 0x100>;
83 #interrupt-cells = <3>;
84 #address-cells = <0>;
85 interrupt-controller;
86 };
87
88 global_timer: timer@1e200 {
89 compatible = "arm,cortex-a9-global-timer";
90 reg = <0x1e200 0x20>;
91 interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>;
92 clocks = <&arm_timer_clk>;
93 };
94
95 local_timer: local-timer@1e600 {
96 compatible = "arm,cortex-a9-twd-timer";
97 reg = <0x1e600 0x20>;
98 interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_HIGH>;
99 clocks = <&arm_timer_clk>;
100 };
101
102 twd_watchdog: watchdog@1e620 {
103 compatible = "arm,cortex-a9-twd-wdt";
104 reg = <0x1e620 0x20>;
105 interupts = <GIC_PPI 14 IRQ_TYPE_LEVEL_HIGH>;
106 };
107 };
108
109 /* Legacy UBUS base */
110 ubus@fffe8000 {
111 compatible = "simple-bus";
112 #address-cells = <1>;
113 #size-cells = <1>;
114 ranges = <0 0xfffe8000 0x8100>;
115
116 serial0: serial@600 {
117 compatible = "brcm,bcm6345-uart";
118 reg = <0x600 0x1b>;
119 interrupts = <GIC_SPI 32 0>;
120 clocks = <&periph_clk>;
121 clock-names = "periph";
122 status = "disabled";
123 };
124
125 serial1: serial@620 {
126 compatible = "brcm,bcm6345-uart";
127 reg = <0x620 0x1b>;
128 interrupts = <GIC_SPI 33 0>;
129 clocks = <&periph_clk>;
130 clock-names = "periph";
131 status = "disabled";
132 };
133 };
134};
diff --git a/arch/arm/boot/dts/bcm963138dvt.dts b/arch/arm/boot/dts/bcm963138dvt.dts
new file mode 100644
index 000000000000..69c93395ecd2
--- /dev/null
+++ b/arch/arm/boot/dts/bcm963138dvt.dts
@@ -0,0 +1,30 @@
1/*
2 * Broadcom BCM63138 Reference Board DTS
3 */
4
5/dts-v1/;
6
7#include "bcm63138.dtsi"
8
9/ {
10 compatible = "brcm,BCM963138DVT", "brcm,bcm63138";
11 model = "Broadcom BCM963138DVT";
12
13 chosen {
14 bootargs = "console=ttyS0,115200";
15 stdout-path = &serial0;
16 };
17
18 memory {
19 reg = <0x0 0x08000000>;
20 };
21
22};
23
24&serial0 {
25 status = "okay";
26};
27
28&serial1 {
29 status = "okay";
30};
diff --git a/arch/arm/include/debug/bcm63xx.S b/arch/arm/include/debug/bcm63xx.S
new file mode 100644
index 000000000000..e7164d570f44
--- /dev/null
+++ b/arch/arm/include/debug/bcm63xx.S
@@ -0,0 +1,33 @@
1/*
2 * Broadcom BCM63xx low-level UART debug
3 *
4 * Copyright (C) 2014 Broadcom Corporation
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#include <linux/serial_bcm63xx.h>
12
13 .macro addruart, rp, rv, tmp
14 ldr \rp, =CONFIG_DEBUG_UART_PHYS
15 ldr \rv, =CONFIG_DEBUG_UART_VIRT
16 .endm
17
18 .macro senduart, rd, rx
19 /* word access do not work */
20 strb \rd, [\rx, #UART_FIFO_REG]
21 .endm
22
23 .macro waituart, rd, rx
241001: ldr \rd, [\rx, #UART_IR_REG]
25 tst \rd, #(1 << UART_IR_TXEMPTY)
26 beq 1001b
27 .endm
28
29 .macro busyuart, rd, rx
301002: ldr \rd, [\rx, #UART_IR_REG]
31 tst \rd, #(1 << UART_IR_TXTRESH)
32 beq 1002b
33 .endm
diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig
index fc938005ad39..2abad742516d 100644
--- a/arch/arm/mach-bcm/Kconfig
+++ b/arch/arm/mach-bcm/Kconfig
@@ -99,6 +99,23 @@ config ARCH_BCM_5301X
99 different SoC or with the older BCM47XX and BCM53XX based 99 different SoC or with the older BCM47XX and BCM53XX based
100 network SoC using a MIPS CPU, they are supported by arch/mips/bcm47xx 100 network SoC using a MIPS CPU, they are supported by arch/mips/bcm47xx
101 101
102config ARCH_BCM_63XX
103 bool "Broadcom BCM63xx DSL SoC" if ARCH_MULTI_V7
104 depends on MMU
105 select ARM_ERRATA_754322
106 select ARM_ERRATA_764369 if SMP
107 select ARM_GIC
108 select ARM_GLOBAL_TIMER
109 select CACHE_L2X0
110 select HAVE_ARM_ARCH_TIMER
111 select HAVE_ARM_TWD if SMP
112 select HAVE_ARM_SCU if SMP
113 select HAVE_SMP
114 help
115 This enables support for systems based on Broadcom DSL SoCs.
116 It currently supports the 'BCM63XX' ARM-based family, which includes
117 the BCM63138 variant.
118
102config ARCH_BRCMSTB 119config ARCH_BRCMSTB
103 bool "Broadcom BCM7XXX based boards" if ARCH_MULTI_V7 120 bool "Broadcom BCM7XXX based boards" if ARCH_MULTI_V7
104 depends on MMU 121 depends on MMU
diff --git a/arch/arm/mach-bcm/Makefile b/arch/arm/mach-bcm/Makefile
index b19a39652545..300ae4b79ae6 100644
--- a/arch/arm/mach-bcm/Makefile
+++ b/arch/arm/mach-bcm/Makefile
@@ -34,6 +34,9 @@ obj-$(CONFIG_ARCH_BCM2835) += board_bcm2835.o
34# BCM5301X 34# BCM5301X
35obj-$(CONFIG_ARCH_BCM_5301X) += bcm_5301x.o 35obj-$(CONFIG_ARCH_BCM_5301X) += bcm_5301x.o
36 36
37# BCM63XXx
38obj-$(CONFIG_ARCH_BCM_63XX) := bcm63xx.o
39
37ifeq ($(CONFIG_ARCH_BRCMSTB),y) 40ifeq ($(CONFIG_ARCH_BRCMSTB),y)
38obj-y += brcmstb.o 41obj-y += brcmstb.o
39endif 42endif
diff --git a/arch/arm/mach-bcm/bcm63xx.c b/arch/arm/mach-bcm/bcm63xx.c
new file mode 100644
index 000000000000..c4c66ae51308
--- /dev/null
+++ b/arch/arm/mach-bcm/bcm63xx.c
@@ -0,0 +1,27 @@
1/*
2 * Copyright (C) 2014 Broadcom Corporation
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License as
6 * published by the Free Software Foundation version 2.
7 *
8 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
9 * kind, whether express or implied; without even the implied warranty
10 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#include <linux/of_platform.h>
15
16#include <asm/mach/arch.h>
17
18static const char * const bcm63xx_dt_compat[] = {
19 "brcm,bcm63138",
20 NULL
21};
22
23DT_MACHINE_START(BCM63XXX_DT, "BCM63xx DSL SoC")
24 .dt_compat = bcm63xx_dt_compat,
25 .l2c_aux_val = 0,
26 .l2c_aux_mask = ~0,
27MACHINE_END