* [PATCH v4] arm-soc: Add support for Sigma Designs Tango4 platforms
@ 2015-10-19 15:43 Marc Gonzalez
2015-10-20 16:35 ` [PATCH v5] " Marc Gonzalez
2015-10-23 16:03 ` [PATCH v6] " Marc Gonzalez
0 siblings, 2 replies; 5+ messages in thread
From: Marc Gonzalez @ 2015-10-19 15:43 UTC (permalink / raw)
To: linux-arm-kernel
Support Tango4 platforms (single and dual core SoCs) built around the
ARM Cortex-A9 MPCore.
Tango4 is not to be confused with Tango3, which was built around the
MIPS 74kf.
Signed-off-by: Marc Gonzalez <marc_gonzalez@sigmadesigns.com>
---
Changes in v4
add memory node, cpus node, l2cc node
rewrite clkgen node, as requested by clk maintainers
not sure about pmu node
---
arch/arm/Kconfig | 2 +
arch/arm/Makefile | 1 +
arch/arm/boot/dts/Makefile | 2 +
arch/arm/boot/dts/tango4-vantage-1172.dts | 18 ++++
arch/arm/boot/dts/tango4.dtsi | 134 ++++++++++++++++++++++++++++++
arch/arm/mach-tangox/Kconfig | 12 +++
arch/arm/mach-tangox/Makefile | 1 +
arch/arm/mach-tangox/setup.c | 7 ++
8 files changed, 177 insertions(+)
create mode 100644 arch/arm/boot/dts/tango4-vantage-1172.dts
create mode 100644 arch/arm/boot/dts/tango4.dtsi
create mode 100644 arch/arm/mach-tangox/Kconfig
create mode 100644 arch/arm/mach-tangox/Makefile
create mode 100644 arch/arm/mach-tangox/setup.c
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 774dc59650c5..d8f0c31f521f 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -934,6 +934,8 @@ source "arch/arm/mach-sunxi/Kconfig"
source "arch/arm/mach-prima2/Kconfig"
+source "arch/arm/mach-tangox/Kconfig"
+
source "arch/arm/mach-tegra/Kconfig"
source "arch/arm/mach-u300/Kconfig"
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 7451b447cc2d..7fcb4c63cdf7 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -203,6 +203,7 @@ machine-$(CONFIG_ARCH_SOCFPGA) += socfpga
machine-$(CONFIG_ARCH_STI) += sti
machine-$(CONFIG_ARCH_STM32) += stm32
machine-$(CONFIG_ARCH_SUNXI) += sunxi
+machine-$(CONFIG_ARCH_TANGOX) += tangox
machine-$(CONFIG_ARCH_TEGRA) += tegra
machine-$(CONFIG_ARCH_U300) += u300
machine-$(CONFIG_ARCH_U8500) += ux500
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 246473a244f6..2499295051d5 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -605,6 +605,8 @@ dtb-$(CONFIG_MACH_SUN8I) += \
dtb-$(CONFIG_MACH_SUN9I) += \
sun9i-a80-optimus.dtb \
sun9i-a80-cubieboard4.dtb
+dtb-$(CONFIG_ARCH_TANGOX) += \
+ tango4-vantage-1172.dtb
dtb-$(CONFIG_ARCH_TEGRA_2x_SOC) += \
tegra20-harmony.dtb \
tegra20-iris-512.dtb \
diff --git a/arch/arm/boot/dts/tango4-vantage-1172.dts b/arch/arm/boot/dts/tango4-vantage-1172.dts
new file mode 100644
index 000000000000..00c9d7e69f80
--- /dev/null
+++ b/arch/arm/boot/dts/tango4-vantage-1172.dts
@@ -0,0 +1,18 @@
+/dts-v1/;
+
+#include "tango4.dtsi"
+
+/ {
+ model = "Sigma Designs SMP8758 Vantage-1172 dev board";
+ compatible = "sigma,vantage-1172", "sigma,smp8758", "sigma,tango4";
+
+ memory at 80000000 {
+ device_type = "memory";
+ reg = <0x80000000 0x80000000>; /* 2 GB */
+ };
+};
+
+ð0 {
+ phy-connection-type = "rgmii";
+ max-speed = <1000>;
+};
diff --git a/arch/arm/boot/dts/tango4.dtsi b/arch/arm/boot/dts/tango4.dtsi
new file mode 100644
index 000000000000..d0b5a51d36be
--- /dev/null
+++ b/arch/arm/boot/dts/tango4.dtsi
@@ -0,0 +1,134 @@
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+/ {
+ compatible = "sigma,tango4";
+
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ clocks {
+ ranges;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ xtal: xtal {
+ compatible = "fixed-clock";
+ clock-frequency = <27000000>;
+ #clock-cells = <0>;
+ };
+
+ clkgen: clkgen at 10000 {
+ compatible = "sigma,tango4-clkgen";
+ reg = <0x10000 0x30>;
+ clocks = <&xtal>;
+ clock-output-names = "cpuclk", "sysclk";
+ #clock-cells = <1>;
+ };
+ };
+
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cpu at 0 {
+ compatible = "arm,cortex-a9";
+ device_type = "cpu";
+ reg = <0>;
+ };
+ cpu at 1 {
+ compatible = "arm,cortex-a9";
+ device_type = "cpu";
+ reg = <1>;
+ };
+ };
+
+ gic: gic at 20001000 {
+ compatible = "arm,cortex-a9-gic";
+ interrupt-controller;
+ #interrupt-cells = <3>;
+ reg = <0x20001000 0x1000>, <0x20000100 0x0100>;
+ };
+
+ l2cc: l2-cache-controller at 20100000 {
+ compatible = "arm,pl310-cache";
+ reg = <0x20100000 0x1000>;
+ cache-level = <2>;
+ cache-unified;
+ };
+
+ periphclk: periphclk {
+ compatible = "fixed-factor-clock";
+ clocks = <&clkgen 0>;
+ clock-mult = <1>;
+ clock-div = <2>;
+ #clock-cells = <0>;
+ };
+
+ twd-timer at 20000600 {
+ compatible = "arm,cortex-a9-twd-timer";
+ reg = <0x20000600 0x10>;
+ interrupts = <GIC_PPI 13 0xf04>;
+ interrupt-parent = <&gic>;
+ clocks = <&periphclk>;
+ always-on;
+ };
+
+ soc {
+ compatible = "simple-bus";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges;
+
+ tick-counter at 10048 {
+ compatible = "sigma,tick-counter";
+ reg = <0x10048 0x4>;
+ clocks = <&xtal>;
+ };
+
+ uart: serial at 10700 {
+ compatible = "ralink,rt2880-uart";
+ reg = <0x10700 0x30>;
+ clock-frequency = <7372800>;
+ reg-shift = <2>;
+ };
+
+ eth0: ethernet at 26000 {
+ compatible = "sigma,tango-emac";
+ reg = <0x26000 0x800>;
+ interrupts = <38 4>;
+ interrupt-parent = <&irq0>;
+ mac-address = [ 00 16 e8 02 08 42 ];
+ clocks = <&clkgen 1>;
+ };
+
+ interrupt-controller at 6e000 {
+ compatible = "sigma,tango-intc";
+ reg = <0x6e000 0x400>;
+ ranges = <0 0x6e000 0x400>;
+ interrupt-parent = <&gic>;
+ interrupt-controller;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ irq0: irq0 at 6e000 {
+ reg = <0x000 0x100>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
+ };
+
+ irq1: irq1 at 6e100 {
+ reg = <0x100 0x100>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
+ };
+
+ irq2: irq2 at 6e300 {
+ reg = <0x300 0x100>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
+ };
+ };
+ };
+};
diff --git a/arch/arm/mach-tangox/Kconfig b/arch/arm/mach-tangox/Kconfig
new file mode 100644
index 000000000000..4d04952ed00f
--- /dev/null
+++ b/arch/arm/mach-tangox/Kconfig
@@ -0,0 +1,12 @@
+# Tango3 was based on MIPS 74kf. Tango4 is based on ARM Cortex-A9 MPCore.
+
+config ARCH_TANGOX
+ bool "Sigma Designs Tango4 (SMP87xx)" if ARCH_MULTI_V7
+ select ARCH_HAS_HOLES_MEMORYMODEL
+ select ARM_ERRATA_754322
+ select ARM_ERRATA_764369 if SMP
+ select ARM_GIC
+ select CLKSRC_TANGO_XTAL
+ select GENERIC_IRQ_CHIP
+ select HAVE_ARM_SCU
+ select HAVE_ARM_TWD
diff --git a/arch/arm/mach-tangox/Makefile b/arch/arm/mach-tangox/Makefile
new file mode 100644
index 000000000000..2b9dba458932
--- /dev/null
+++ b/arch/arm/mach-tangox/Makefile
@@ -0,0 +1 @@
+obj-y += setup.o
diff --git a/arch/arm/mach-tangox/setup.c b/arch/arm/mach-tangox/setup.c
new file mode 100644
index 000000000000..46ae91e49f81
--- /dev/null
+++ b/arch/arm/mach-tangox/setup.c
@@ -0,0 +1,7 @@
+#include <asm/mach/arch.h>
+
+static const char *tango_dt_compat[] = { "sigma,tango4", NULL };
+
+DT_MACHINE_START(TANGO_DT, "Sigma Tango DT")
+ .dt_compat = tango_dt_compat,
+MACHINE_END
--
2.4.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v5] arm-soc: Add support for Sigma Designs Tango4 platforms
2015-10-19 15:43 [PATCH v4] arm-soc: Add support for Sigma Designs Tango4 platforms Marc Gonzalez
@ 2015-10-20 16:35 ` Marc Gonzalez
2015-10-21 9:59 ` Marc Gonzalez
2015-10-23 16:03 ` [PATCH v6] " Marc Gonzalez
1 sibling, 1 reply; 5+ messages in thread
From: Marc Gonzalez @ 2015-10-20 16:35 UTC (permalink / raw)
To: linux-arm-kernel
Support Tango4 platforms (single and dual core SoCs) built around the
ARM Cortex-A9 MPCore.
Tango4 is not to be confused with Tango3, which was built around the
MIPS 74kf.
Signed-off-by: Marc Gonzalez <marc_gonzalez@sigmadesigns.com>
---
Changes in v5
drop mac-address property from eth0 node
tentatively add pmu node (not looking good)
hw perfevents: failed to probe PMU!
hw perfevents: failed to register PMU devices!
Changes in v4
add memory node, cpus node, l2cc node
rewrite clkgen node, as requested by clk maintainers
not sure about pmu node
---
arch/arm/Kconfig | 2 +
arch/arm/Makefile | 1 +
arch/arm/boot/dts/Makefile | 2 +
arch/arm/boot/dts/tango4-vantage-1172.dts | 18 ++++
arch/arm/boot/dts/tango4.dtsi | 140 ++++++++++++++++++++++++++++++
arch/arm/mach-tangox/Kconfig | 12 +++
arch/arm/mach-tangox/Makefile | 1 +
arch/arm/mach-tangox/setup.c | 7 ++
8 files changed, 183 insertions(+)
create mode 100644 arch/arm/boot/dts/tango4-vantage-1172.dts
create mode 100644 arch/arm/boot/dts/tango4.dtsi
create mode 100644 arch/arm/mach-tangox/Kconfig
create mode 100644 arch/arm/mach-tangox/Makefile
create mode 100644 arch/arm/mach-tangox/setup.c
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 774dc59650c5..d8f0c31f521f 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -934,6 +934,8 @@ source "arch/arm/mach-sunxi/Kconfig"
source "arch/arm/mach-prima2/Kconfig"
+source "arch/arm/mach-tangox/Kconfig"
+
source "arch/arm/mach-tegra/Kconfig"
source "arch/arm/mach-u300/Kconfig"
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 7451b447cc2d..7fcb4c63cdf7 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -203,6 +203,7 @@ machine-$(CONFIG_ARCH_SOCFPGA) += socfpga
machine-$(CONFIG_ARCH_STI) += sti
machine-$(CONFIG_ARCH_STM32) += stm32
machine-$(CONFIG_ARCH_SUNXI) += sunxi
+machine-$(CONFIG_ARCH_TANGOX) += tangox
machine-$(CONFIG_ARCH_TEGRA) += tegra
machine-$(CONFIG_ARCH_U300) += u300
machine-$(CONFIG_ARCH_U8500) += ux500
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 246473a244f6..2499295051d5 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -605,6 +605,8 @@ dtb-$(CONFIG_MACH_SUN8I) += \
dtb-$(CONFIG_MACH_SUN9I) += \
sun9i-a80-optimus.dtb \
sun9i-a80-cubieboard4.dtb
+dtb-$(CONFIG_ARCH_TANGOX) += \
+ tango4-vantage-1172.dtb
dtb-$(CONFIG_ARCH_TEGRA_2x_SOC) += \
tegra20-harmony.dtb \
tegra20-iris-512.dtb \
diff --git a/arch/arm/boot/dts/tango4-vantage-1172.dts b/arch/arm/boot/dts/tango4-vantage-1172.dts
new file mode 100644
index 000000000000..00c9d7e69f80
--- /dev/null
+++ b/arch/arm/boot/dts/tango4-vantage-1172.dts
@@ -0,0 +1,18 @@
+/dts-v1/;
+
+#include "tango4.dtsi"
+
+/ {
+ model = "Sigma Designs SMP8758 Vantage-1172 dev board";
+ compatible = "sigma,vantage-1172", "sigma,smp8758", "sigma,tango4";
+
+ memory at 80000000 {
+ device_type = "memory";
+ reg = <0x80000000 0x80000000>; /* 2 GB */
+ };
+};
+
+ð0 {
+ phy-connection-type = "rgmii";
+ max-speed = <1000>;
+};
diff --git a/arch/arm/boot/dts/tango4.dtsi b/arch/arm/boot/dts/tango4.dtsi
new file mode 100644
index 000000000000..af856b40228b
--- /dev/null
+++ b/arch/arm/boot/dts/tango4.dtsi
@@ -0,0 +1,140 @@
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+/ {
+ compatible = "sigma,tango4";
+
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ clocks {
+ ranges;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ xtal: xtal {
+ compatible = "fixed-clock";
+ clock-frequency = <27000000>;
+ #clock-cells = <0>;
+ };
+
+ clkgen: clkgen at 10000 {
+ compatible = "sigma,tango4-clkgen";
+ reg = <0x10000 0x40>;
+ clocks = <&xtal>;
+ clock-output-names = "cpuclk", "sysclk";
+ #clock-cells = <1>;
+ };
+ };
+
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cpu at 0 {
+ compatible = "arm,cortex-a9";
+ device_type = "cpu";
+ reg = <0>;
+ };
+ cpu at 1 {
+ compatible = "arm,cortex-a9";
+ device_type = "cpu";
+ reg = <1>;
+ };
+ };
+
+ gic: gic at 20001000 {
+ compatible = "arm,cortex-a9-gic";
+ interrupt-controller;
+ #interrupt-cells = <3>;
+ reg = <0x20001000 0x1000>, <0x20000100 0x0100>;
+ };
+
+ l2cc: l2-cache-controller at 20100000 {
+ compatible = "arm,pl310-cache";
+ reg = <0x20100000 0x1000>;
+ cache-level = <2>;
+ cache-unified;
+ };
+
+ periphclk: periphclk {
+ compatible = "fixed-factor-clock";
+ clocks = <&clkgen 0>;
+ clock-mult = <1>;
+ clock-div = <2>;
+ #clock-cells = <0>;
+ };
+
+ twd-timer at 20000600 {
+ compatible = "arm,cortex-a9-twd-timer";
+ reg = <0x20000600 0x10>;
+ interrupts = <GIC_PPI 13 0xf04>;
+ interrupt-parent = <&gic>;
+ clocks = <&periphclk>;
+ always-on;
+ };
+
+ pmu {
+ compatible = "arm,cortex-a9-pmu";
+ interrupts =
+ <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
+ };
+
+ soc {
+ compatible = "simple-bus";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges;
+
+ tick-counter at 10048 {
+ compatible = "sigma,tick-counter";
+ reg = <0x10048 0x4>;
+ clocks = <&xtal>;
+ };
+
+ uart: serial at 10700 {
+ compatible = "ralink,rt2880-uart";
+ reg = <0x10700 0x30>;
+ clock-frequency = <7372800>;
+ reg-shift = <2>;
+ };
+
+ eth0: ethernet at 26000 {
+ compatible = "sigma,tango-emac";
+ reg = <0x26000 0x800>;
+ interrupts = <38 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-parent = <&irq0>;
+ clocks = <&clkgen 1>;
+ };
+
+ interrupt-controller at 6e000 {
+ compatible = "sigma,tango-intc";
+ reg = <0x6e000 0x400>;
+ ranges = <0 0x6e000 0x400>;
+ interrupt-parent = <&gic>;
+ interrupt-controller;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ irq0: irq0 at 6e000 {
+ reg = <0x000 0x100>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
+ };
+
+ irq1: irq1 at 6e100 {
+ reg = <0x100 0x100>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
+ };
+
+ irq2: irq2 at 6e300 {
+ reg = <0x300 0x100>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
+ };
+ };
+ };
+};
diff --git a/arch/arm/mach-tangox/Kconfig b/arch/arm/mach-tangox/Kconfig
new file mode 100644
index 000000000000..4d04952ed00f
--- /dev/null
+++ b/arch/arm/mach-tangox/Kconfig
@@ -0,0 +1,12 @@
+# Tango3 was based on MIPS 74kf. Tango4 is based on ARM Cortex-A9 MPCore.
+
+config ARCH_TANGOX
+ bool "Sigma Designs Tango4 (SMP87xx)" if ARCH_MULTI_V7
+ select ARCH_HAS_HOLES_MEMORYMODEL
+ select ARM_ERRATA_754322
+ select ARM_ERRATA_764369 if SMP
+ select ARM_GIC
+ select CLKSRC_TANGO_XTAL
+ select GENERIC_IRQ_CHIP
+ select HAVE_ARM_SCU
+ select HAVE_ARM_TWD
diff --git a/arch/arm/mach-tangox/Makefile b/arch/arm/mach-tangox/Makefile
new file mode 100644
index 000000000000..2b9dba458932
--- /dev/null
+++ b/arch/arm/mach-tangox/Makefile
@@ -0,0 +1 @@
+obj-y += setup.o
diff --git a/arch/arm/mach-tangox/setup.c b/arch/arm/mach-tangox/setup.c
new file mode 100644
index 000000000000..46ae91e49f81
--- /dev/null
+++ b/arch/arm/mach-tangox/setup.c
@@ -0,0 +1,7 @@
+#include <asm/mach/arch.h>
+
+static const char *tango_dt_compat[] = { "sigma,tango4", NULL };
+
+DT_MACHINE_START(TANGO_DT, "Sigma Tango DT")
+ .dt_compat = tango_dt_compat,
+MACHINE_END
--
2.4.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v5] arm-soc: Add support for Sigma Designs Tango4 platforms
2015-10-20 16:35 ` [PATCH v5] " Marc Gonzalez
@ 2015-10-21 9:59 ` Marc Gonzalez
0 siblings, 0 replies; 5+ messages in thread
From: Marc Gonzalez @ 2015-10-21 9:59 UTC (permalink / raw)
To: linux-arm-kernel
On 20/10/2015 18:35, Marc Gonzalez wrote:
> Changes in v5
> drop mac-address property from eth0 node
> tentatively add pmu node (not looking good)
> hw perfevents: failed to probe PMU!
> hw perfevents: failed to register PMU devices!
<Taking a closer look>
armv7_a9_pmu_init() eventually calls generic_exec_single()
which fails this test:
if ((unsigned)cpu >= nr_cpu_ids || !cpu_online(cpu))
because cpu = 4 and nr_cpu_ids = 2
/* Any online will do: smp_call_function_single handles nr_cpu_ids. */
cpu = cpumask_any_and(mask, cpu_online_mask);
nr_cpu_ids starts out as 4 (CONFIG_NR_CPUS=4) but setup_nr_cpu_ids()
drops it to 2 (the actual number of cores).
<confused> I thought NR_CPUS was just the maximum number of CPUs.
Is it expected that armv7_a9_pmu_init() would fail as it does for me?
Regards.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v6] arm-soc: Add support for Sigma Designs Tango4 platforms
2015-10-19 15:43 [PATCH v4] arm-soc: Add support for Sigma Designs Tango4 platforms Marc Gonzalez
2015-10-20 16:35 ` [PATCH v5] " Marc Gonzalez
@ 2015-10-23 16:03 ` Marc Gonzalez
2015-10-27 17:12 ` Marc Gonzalez
1 sibling, 1 reply; 5+ messages in thread
From: Marc Gonzalez @ 2015-10-23 16:03 UTC (permalink / raw)
To: linux-arm-kernel
Support Tango4 platforms (single and dual core SoCs) built around the
ARM Cortex-A9 MPCore. (Tango4 is not to be confused with Tango3, which
was built around the MIPS 74kf.)
Signed-off-by: Marc Gonzalez <marc_gonzalez@sigmadesigns.com>
---
Changes in v6
Move cpus and pmu nodes to SoC-specific dtsi
Add more compatible strings for eth and intc
Credit Mans for the initial DT
Changes in v5
drop mac-address property from eth0 node
tentatively add pmu node (not looking good)
Changes in v4
add memory node, cpus node, l2cc node
rewrite clkgen node, as requested by clk maintainers
---
arch/arm/Kconfig | 2 +
arch/arm/Makefile | 1 +
arch/arm/boot/dts/Makefile | 2 +
arch/arm/boot/dts/tango4-common.dtsi | 121 ++++++++++++++++++++++++++++++
arch/arm/boot/dts/tango4-smp8758.dtsi | 31 ++++++++
arch/arm/boot/dts/tango4-vantage-1172.dts | 19 +++++
arch/arm/mach-tangox/Kconfig | 12 +++
arch/arm/mach-tangox/Makefile | 1 +
arch/arm/mach-tangox/setup.c | 7 ++
9 files changed, 196 insertions(+)
create mode 100644 arch/arm/boot/dts/tango4-common.dtsi
create mode 100644 arch/arm/boot/dts/tango4-smp8758.dtsi
create mode 100644 arch/arm/boot/dts/tango4-vantage-1172.dts
create mode 100644 arch/arm/mach-tangox/Kconfig
create mode 100644 arch/arm/mach-tangox/Makefile
create mode 100644 arch/arm/mach-tangox/setup.c
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 1c5021002fe4..94a1a0277c94 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -934,6 +934,8 @@ source "arch/arm/mach-sunxi/Kconfig"
source "arch/arm/mach-prima2/Kconfig"
+source "arch/arm/mach-tangox/Kconfig"
+
source "arch/arm/mach-tegra/Kconfig"
source "arch/arm/mach-u300/Kconfig"
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 7451b447cc2d..7fcb4c63cdf7 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -203,6 +203,7 @@ machine-$(CONFIG_ARCH_SOCFPGA) += socfpga
machine-$(CONFIG_ARCH_STI) += sti
machine-$(CONFIG_ARCH_STM32) += stm32
machine-$(CONFIG_ARCH_SUNXI) += sunxi
+machine-$(CONFIG_ARCH_TANGOX) += tangox
machine-$(CONFIG_ARCH_TEGRA) += tegra
machine-$(CONFIG_ARCH_U300) += u300
machine-$(CONFIG_ARCH_U8500) += ux500
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 246473a244f6..2499295051d5 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -605,6 +605,8 @@ dtb-$(CONFIG_MACH_SUN8I) += \
dtb-$(CONFIG_MACH_SUN9I) += \
sun9i-a80-optimus.dtb \
sun9i-a80-cubieboard4.dtb
+dtb-$(CONFIG_ARCH_TANGOX) += \
+ tango4-vantage-1172.dtb
dtb-$(CONFIG_ARCH_TEGRA_2x_SOC) += \
tegra20-harmony.dtb \
tegra20-iris-512.dtb \
diff --git a/arch/arm/boot/dts/tango4-common.dtsi b/arch/arm/boot/dts/tango4-common.dtsi
new file mode 100644
index 000000000000..594d7b2a110a
--- /dev/null
+++ b/arch/arm/boot/dts/tango4-common.dtsi
@@ -0,0 +1,121 @@
+/*
+ * Derived from Mans Rullgard's Tango3 DT
+ * https://github.com/mansr/linux-tangox
+ */
+
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ clocks {
+ ranges;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ xtal: xtal {
+ compatible = "fixed-clock";
+ clock-frequency = <27000000>;
+ #clock-cells = <0>;
+ };
+
+ clkgen: clkgen at 10000 {
+ compatible = "sigma,tango4-clkgen";
+ reg = <0x10000 0x40>;
+ clocks = <&xtal>;
+ clock-output-names = "cpuclk", "sysclk";
+ #clock-cells = <1>;
+ };
+ };
+
+ gic: interrupt-controller at 20001000 {
+ compatible = "arm,cortex-a9-gic";
+ interrupt-controller;
+ #interrupt-cells = <3>;
+ reg = <0x20001000 0x1000>, <0x20000100 0x0100>;
+ };
+
+ l2cc: l2-cache-controller at 20100000 {
+ compatible = "arm,pl310-cache";
+ reg = <0x20100000 0x1000>;
+ cache-level = <2>;
+ cache-unified;
+ };
+
+ periphclk: periphclk {
+ compatible = "fixed-factor-clock";
+ clocks = <&clkgen 0>;
+ clock-mult = <1>;
+ clock-div = <2>;
+ #clock-cells = <0>;
+ };
+
+ twd-timer at 20000600 {
+ compatible = "arm,cortex-a9-twd-timer";
+ reg = <0x20000600 0x10>;
+ interrupts = <GIC_PPI 13 0xf04>;
+ interrupt-parent = <&gic>;
+ clocks = <&periphclk>;
+ always-on;
+ };
+
+ soc {
+ compatible = "simple-bus";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges;
+
+ tick-counter at 10048 {
+ compatible = "sigma,tick-counter";
+ reg = <0x10048 0x4>;
+ clocks = <&xtal>;
+ };
+
+ uart: serial at 10700 {
+ compatible = "ralink,rt2880-uart";
+ reg = <0x10700 0x30>;
+ clock-frequency = <7372800>;
+ reg-shift = <2>;
+ };
+
+ eth0: ethernet at 26000 {
+ compatible = "sigma,tango4-ethernet", "sigma,smp8640-ethernet", "aurora,nb8800";
+ reg = <0x26000 0x800>;
+ interrupts = <38 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-parent = <&irq0>;
+ clocks = <&clkgen 1>;
+ };
+
+ interrupt-controller at 6e000 {
+ compatible = "sigma,tango4-intc", "sigma,smp8640-intc";
+ reg = <0x6e000 0x400>;
+ ranges = <0 0x6e000 0x400>;
+ interrupt-parent = <&gic>;
+ interrupt-controller;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ irq0: irq0 at 6e000 {
+ reg = <0x000 0x100>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
+ };
+
+ irq1: irq1 at 6e100 {
+ reg = <0x100 0x100>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
+ };
+
+ irq2: irq2 at 6e300 {
+ reg = <0x300 0x100>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
+ };
+ };
+ };
+};
diff --git a/arch/arm/boot/dts/tango4-smp8758.dtsi b/arch/arm/boot/dts/tango4-smp8758.dtsi
new file mode 100644
index 000000000000..94c3e05f7d4c
--- /dev/null
+++ b/arch/arm/boot/dts/tango4-smp8758.dtsi
@@ -0,0 +1,31 @@
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+/ {
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu0: cpu at 0 {
+ compatible = "arm,cortex-a9";
+ next-level-cache = <&l2cc>;
+ device_type = "cpu";
+ reg = <0>;
+ };
+
+ cpu1: cpu at 1 {
+ compatible = "arm,cortex-a9";
+ next-level-cache = <&l2cc>;
+ device_type = "cpu";
+ reg = <1>;
+ };
+ };
+
+ pmu {
+ compatible = "arm,cortex-a9-pmu";
+ interrupt-affinity = <&cpu0>, <&cpu1>;
+ interrupt-parent = <&gic>;
+ interrupts =
+ <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
+ };
+};
diff --git a/arch/arm/boot/dts/tango4-vantage-1172.dts b/arch/arm/boot/dts/tango4-vantage-1172.dts
new file mode 100644
index 000000000000..c3f98e85e334
--- /dev/null
+++ b/arch/arm/boot/dts/tango4-vantage-1172.dts
@@ -0,0 +1,19 @@
+/dts-v1/;
+
+#include "tango4-smp8758.dtsi"
+#include "tango4-common.dtsi"
+
+/ {
+ model = "Sigma Designs SMP8758 Vantage-1172 dev board";
+ compatible = "sigma,vantage-1172", "sigma,smp8758", "sigma,tango4";
+
+ memory at 80000000 {
+ device_type = "memory";
+ reg = <0x80000000 0x80000000>; /* 2 GB */
+ };
+};
+
+ð0 {
+ phy-connection-type = "rgmii";
+ max-speed = <1000>;
+};
diff --git a/arch/arm/mach-tangox/Kconfig b/arch/arm/mach-tangox/Kconfig
new file mode 100644
index 000000000000..4d04952ed00f
--- /dev/null
+++ b/arch/arm/mach-tangox/Kconfig
@@ -0,0 +1,12 @@
+# Tango3 was based on MIPS 74kf. Tango4 is based on ARM Cortex-A9 MPCore.
+
+config ARCH_TANGOX
+ bool "Sigma Designs Tango4 (SMP87xx)" if ARCH_MULTI_V7
+ select ARCH_HAS_HOLES_MEMORYMODEL
+ select ARM_ERRATA_754322
+ select ARM_ERRATA_764369 if SMP
+ select ARM_GIC
+ select CLKSRC_TANGO_XTAL
+ select GENERIC_IRQ_CHIP
+ select HAVE_ARM_SCU
+ select HAVE_ARM_TWD
diff --git a/arch/arm/mach-tangox/Makefile b/arch/arm/mach-tangox/Makefile
new file mode 100644
index 000000000000..2b9dba458932
--- /dev/null
+++ b/arch/arm/mach-tangox/Makefile
@@ -0,0 +1 @@
+obj-y += setup.o
diff --git a/arch/arm/mach-tangox/setup.c b/arch/arm/mach-tangox/setup.c
new file mode 100644
index 000000000000..46ae91e49f81
--- /dev/null
+++ b/arch/arm/mach-tangox/setup.c
@@ -0,0 +1,7 @@
+#include <asm/mach/arch.h>
+
+static const char *tango_dt_compat[] = { "sigma,tango4", NULL };
+
+DT_MACHINE_START(TANGO_DT, "Sigma Tango DT")
+ .dt_compat = tango_dt_compat,
+MACHINE_END
--
2.4.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v6] arm-soc: Add support for Sigma Designs Tango4 platforms
2015-10-23 16:03 ` [PATCH v6] " Marc Gonzalez
@ 2015-10-27 17:12 ` Marc Gonzalez
0 siblings, 0 replies; 5+ messages in thread
From: Marc Gonzalez @ 2015-10-27 17:12 UTC (permalink / raw)
To: linux-arm-kernel
I've made some additional changes, which I'm not 100% sure about.
I suppose this should be considered a RFC.
Changes in v7
Toggle L2 cache via smc
Move peripheral devices compatible strings to board DTS
(because it contains the chip number, while common is generic)
Add UART IRQ
Patch follows.
Regards.
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 1c5021002fe4..d8f0c31f521f 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -934,6 +934,8 @@ source "arch/arm/mach-sunxi/Kconfig"
source "arch/arm/mach-prima2/Kconfig"
+source "arch/arm/mach-tangox/Kconfig"
+
source "arch/arm/mach-tegra/Kconfig"
source "arch/arm/mach-u300/Kconfig"
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 7451b447cc2d..7fcb4c63cdf7 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -203,6 +203,7 @@ machine-$(CONFIG_ARCH_SOCFPGA) += socfpga
machine-$(CONFIG_ARCH_STI) += sti
machine-$(CONFIG_ARCH_STM32) += stm32
machine-$(CONFIG_ARCH_SUNXI) += sunxi
+machine-$(CONFIG_ARCH_TANGOX) += tangox
machine-$(CONFIG_ARCH_TEGRA) += tegra
machine-$(CONFIG_ARCH_U300) += u300
machine-$(CONFIG_ARCH_U8500) += ux500
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 246473a244f6..2499295051d5 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -605,6 +605,8 @@ dtb-$(CONFIG_MACH_SUN8I) += \
dtb-$(CONFIG_MACH_SUN9I) += \
sun9i-a80-optimus.dtb \
sun9i-a80-cubieboard4.dtb
+dtb-$(CONFIG_ARCH_TANGOX) += \
+ tango4-vantage-1172.dtb
dtb-$(CONFIG_ARCH_TEGRA_2x_SOC) += \
tegra20-harmony.dtb \
tegra20-iris-512.dtb \
diff --git a/arch/arm/boot/dts/tango4-common.dtsi b/arch/arm/boot/dts/tango4-common.dtsi
new file mode 100644
index 000000000000..90e9a6e736ae
--- /dev/null
+++ b/arch/arm/boot/dts/tango4-common.dtsi
@@ -0,0 +1,121 @@
+/*
+ * Derived from Mans Rullgard's Tango3 DT
+ * https://github.com/mansr/linux-tangox
+ */
+
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ clocks {
+ ranges;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ xtal: xtal {
+ compatible = "fixed-clock";
+ clock-frequency = <27000000>;
+ #clock-cells = <0>;
+ };
+
+ clkgen: clkgen at 10000 {
+ compatible = "sigma,tango4-clkgen";
+ reg = <0x10000 0x40>;
+ clocks = <&xtal>;
+ clock-output-names = "cpuclk", "sysclk";
+ #clock-cells = <1>;
+ };
+ };
+
+ gic: interrupt-controller at 20001000 {
+ compatible = "arm,cortex-a9-gic";
+ interrupt-controller;
+ #interrupt-cells = <3>;
+ reg = <0x20001000 0x1000>, <0x20000100 0x0100>;
+ };
+
+ l2cc: l2-cache-controller at 20100000 {
+ compatible = "arm,pl310-cache";
+ reg = <0x20100000 0x1000>;
+ cache-level = <2>;
+ cache-unified;
+ };
+
+ periphclk: periphclk {
+ compatible = "fixed-factor-clock";
+ clocks = <&clkgen 0>;
+ clock-mult = <1>;
+ clock-div = <2>;
+ #clock-cells = <0>;
+ };
+
+ twd-timer at 20000600 {
+ compatible = "arm,cortex-a9-twd-timer";
+ reg = <0x20000600 0x10>;
+ interrupts = <GIC_PPI 13 0xf04>;
+ interrupt-parent = <&gic>;
+ clocks = <&periphclk>;
+ always-on;
+ };
+
+ soc {
+ compatible = "simple-bus";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges;
+
+ tick-counter at 10048 {
+ compatible = "sigma,tick-counter";
+ reg = <0x10048 0x4>;
+ clocks = <&xtal>;
+ };
+
+ uart: serial at 10700 {
+ compatible = "ralink,rt2880-uart";
+ reg = <0x10700 0x30>;
+ interrupts = <1 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-parent = <&irq0>;
+ clock-frequency = <7372800>;
+ reg-shift = <2>;
+ };
+
+ eth0: ethernet at 26000 {
+ reg = <0x26000 0x800>;
+ interrupts = <38 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-parent = <&irq0>;
+ clocks = <&clkgen 1>;
+ };
+
+ intc: interrupt-controller at 6e000 {
+ reg = <0x6e000 0x400>;
+ ranges = <0 0x6e000 0x400>;
+ interrupt-parent = <&gic>;
+ interrupt-controller;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ irq0: irq0 at 6e000 {
+ reg = <0x000 0x100>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
+ };
+
+ irq1: irq1 at 6e100 {
+ reg = <0x100 0x100>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
+ };
+
+ irq2: irq2 at 6e300 {
+ reg = <0x300 0x100>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
+ };
+ };
+ };
+};
diff --git a/arch/arm/boot/dts/tango4-smp8758.dtsi b/arch/arm/boot/dts/tango4-smp8758.dtsi
new file mode 100644
index 000000000000..94c3e05f7d4c
--- /dev/null
+++ b/arch/arm/boot/dts/tango4-smp8758.dtsi
@@ -0,0 +1,31 @@
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+/ {
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu0: cpu at 0 {
+ compatible = "arm,cortex-a9";
+ next-level-cache = <&l2cc>;
+ device_type = "cpu";
+ reg = <0>;
+ };
+
+ cpu1: cpu at 1 {
+ compatible = "arm,cortex-a9";
+ next-level-cache = <&l2cc>;
+ device_type = "cpu";
+ reg = <1>;
+ };
+ };
+
+ pmu {
+ compatible = "arm,cortex-a9-pmu";
+ interrupt-affinity = <&cpu0>, <&cpu1>;
+ interrupt-parent = <&gic>;
+ interrupts =
+ <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
+ };
+};
diff --git a/arch/arm/boot/dts/tango4-vantage-1172.dts b/arch/arm/boot/dts/tango4-vantage-1172.dts
new file mode 100644
index 000000000000..772f27c360ed
--- /dev/null
+++ b/arch/arm/boot/dts/tango4-vantage-1172.dts
@@ -0,0 +1,24 @@
+/dts-v1/;
+
+#include "tango4-smp8758.dtsi"
+#include "tango4-common.dtsi"
+
+/ {
+ model = "Sigma Designs SMP8758 Vantage-1172 dev board";
+ compatible = "sigma,vantage-1172", "sigma,smp8758", "sigma,tango4";
+
+ memory at 80000000 {
+ device_type = "memory";
+ reg = <0x80000000 0x80000000>; /* 2 GB */
+ };
+};
+
+ð0 {
+ compatible = "sigma,smp8758-ethernet", "sigma,smp8910-ethernet", "sigma,smp8642-ethernet", "aurora,nb8800";
+ phy-connection-type = "rgmii";
+ max-speed = <1000>;
+};
+
+&intc {
+ compatible = "sigma,smp8758-intc", "sigma,smp8642-intc";
+};
diff --git a/arch/arm/mach-tangox/Kconfig b/arch/arm/mach-tangox/Kconfig
new file mode 100644
index 000000000000..2432a51f8b43
--- /dev/null
+++ b/arch/arm/mach-tangox/Kconfig
@@ -0,0 +1,10 @@
+config ARCH_TANGOX
+ bool "Sigma Designs Tango4 (SMP87xx)" if ARCH_MULTI_V7
+ select ARCH_HAS_HOLES_MEMORYMODEL
+ select ARM_ERRATA_754322
+ select ARM_ERRATA_764369 if SMP
+ select ARM_GIC
+ select CLKSRC_TANGO_XTAL
+ select GENERIC_IRQ_CHIP
+ select HAVE_ARM_SCU
+ select HAVE_ARM_TWD
diff --git a/arch/arm/mach-tangox/Makefile b/arch/arm/mach-tangox/Makefile
new file mode 100644
index 000000000000..0d7e2b5976e3
--- /dev/null
+++ b/arch/arm/mach-tangox/Makefile
@@ -0,0 +1,2 @@
+asflags-y += -mcpu=cortex-a9
+obj-y += setup.o smc.o
diff --git a/arch/arm/mach-tangox/setup.c b/arch/arm/mach-tangox/setup.c
new file mode 100644
index 000000000000..044eb974172a
--- /dev/null
+++ b/arch/arm/mach-tangox/setup.c
@@ -0,0 +1,18 @@
+#include <asm/mach/arch.h>
+#include <asm/hardware/cache-l2x0.h>
+
+static void tango_l2c_write(unsigned long val, unsigned int reg)
+{
+ void tango_set_l2_control(unsigned int val);
+ pr_info("%s: reg=0x%x val=0x%lx\n", __func__, reg, val);
+ if (reg == L2X0_CTRL)
+ tango_set_l2_control(val);
+}
+
+static const char *tango_dt_compat[] = { "sigma,tango4", NULL };
+
+DT_MACHINE_START(TANGO_DT, "Sigma Tango DT")
+ .dt_compat = tango_dt_compat,
+ .l2c_aux_mask = ~0,
+ .l2c_write_sec = tango_l2c_write,
+MACHINE_END
diff --git a/arch/arm/mach-tangox/smc.S b/arch/arm/mach-tangox/smc.S
new file mode 100644
index 000000000000..1527d23cffc5
--- /dev/null
+++ b/arch/arm/mach-tangox/smc.S
@@ -0,0 +1,14 @@
+#include <linux/linkage.h>
+
+#define SMC_SET_L2_CONTROL 0x102
+
+/*
+ * Have Armor write r0 to l2_control.
+ */
+ENTRY(tango_set_l2_control)
+ push {lr}
+ movw ip, #SMC_SET_L2_CONTROL
+ dsb
+ smc #0
+ pop {pc}
+ENDPROC(tango_set_l2_control)
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-10-27 17:12 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-19 15:43 [PATCH v4] arm-soc: Add support for Sigma Designs Tango4 platforms Marc Gonzalez
2015-10-20 16:35 ` [PATCH v5] " Marc Gonzalez
2015-10-21 9:59 ` Marc Gonzalez
2015-10-23 16:03 ` [PATCH v6] " Marc Gonzalez
2015-10-27 17:12 ` Marc Gonzalez
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).