diff mbox

[v3,5/5] ARM: dts: Alpine platform devicetree

Message ID 54cf5d8c.sl7aclyeuuh66jXt%tsahee@annapurnalabs.com (mailing list archive)
State New, archived
Headers show

Commit Message

Tsahee Zidenberg Feb. 2, 2015, 11:20 a.m. UTC
This patch introduces devicetree for the Alpine platform, and
for a development board based on the same platform.

Signed-off-by: Barak Wasserstrom <barak@annapurnalabs.com>
Signed-off-by: Tsahee Zidenberg <tsahee@annapurnalabs.com>
---
 arch/arm/boot/dts/Makefile      |   4 ++
 arch/arm/boot/dts/alpine-db.dts |  35 ++++++++++
 arch/arm/boot/dts/alpine.dtsi   | 141 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 180 insertions(+)
 create mode 100644 arch/arm/boot/dts/alpine-db.dts
 create mode 100644 arch/arm/boot/dts/alpine.dtsi

Comments

Mark Rutland Feb. 2, 2015, 1:40 p.m. UTC | #1
On Mon, Feb 02, 2015 at 11:20:44AM +0000, Tsahee Zidenberg wrote:
> This patch introduces devicetree for the Alpine platform, and
> for a development board based on the same platform.
> 
> Signed-off-by: Barak Wasserstrom <barak@annapurnalabs.com>
> Signed-off-by: Tsahee Zidenberg <tsahee@annapurnalabs.com>
> ---
>  arch/arm/boot/dts/Makefile      |   4 ++
>  arch/arm/boot/dts/alpine-db.dts |  35 ++++++++++
>  arch/arm/boot/dts/alpine.dtsi   | 141 ++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 180 insertions(+)
>  create mode 100644 arch/arm/boot/dts/alpine-db.dts
>  create mode 100644 arch/arm/boot/dts/alpine.dtsi

[...]

> +	soc {
> +		#address-cells = <2>;
> +		#size-cells = <2>;
> +		compatible = "simple-bus";
> +		interrupt-parent = <&gic>;
> +		ranges;
> +
> +		arch-timer {
> +			compatible = "arm,cortex-a15-timer",
> +				     "arm,armv7-timer";
> +			interrupts =
> +				<GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
> +				<GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
> +				<GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
> +				<GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
> +			clock-frequency = <0>; /* Filled by loader */

Your loader doesn't configure CNTFRQ?

> +		};
> +
> +		/* Interrupt Controller */
> +		gic: gic@fb001000 {
> +			compatible = "arm,cortex-a15-gic";
> +			#interrupt-cells = <3>;
> +			#size-cells = <0>;
> +			#address-cells = <0>;
> +			interrupt-controller;
> +			reg = <0x0 0xfb001000 0x0 0x1000>,
> +			      <0x0 0xfb002000 0x0 0x2000>,
> +			      <0x0 0xfb004000 0x0 0x1000>,
> +			      <0x0 0xfb006000 0x0 0x2000>;
> +			interrupts =
> +				<GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
> +		};
> +
> +		/* CPU Resume registers */
> +		cpu-resume@fbff5ec0 {
> +			compatible = "al,alpine-cpu-resume";
> +			reg = <0x0 0xfbff5ec0 0x0 0x30>;
> +		};
> +
> +		/* North Bridge Service Registers */
> +		sysfabric-service@fb070000 {
> +			compatible = "al,alpine-sysfabric-service", "syscon", "simple-bus";
> +			reg = <0x0 0xfb070000 0x0 0x10000>;
> +		};

That compatible list makes no sense whatsoever.

Why is "simple-bus" on the end?

Mark.
Tsahee Zidenberg Feb. 2, 2015, 3:27 p.m. UTC | #2
Thank you for your review!

On 2 February 2015 at 15:40, Mark Rutland <mark.rutland@arm.com> wrote:
> On Mon, Feb 02, 2015 at 11:20:44AM +0000, Tsahee Zidenberg wrote:
>> +             arch-timer {
>> +                     compatible = "arm,cortex-a15-timer",
>> +                                  "arm,armv7-timer";
>> +                     interrupts =
>> +                             <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
>> +                             <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
>> +                             <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
>> +                             <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
>> +                     clock-frequency = <0>; /* Filled by loader */
>
> Your loader doesn't configure CNTFRQ?
>

Not currently. setting CNTFRQ must be done in the firmware, to be
valid across all CPUs and through power-cycles. This isn't supported
on current firmware, which is used in currently available devices. I
will add this as a required feature from next-gen firmware.
clock-frequency property is read by linux-kernel before attempting to
read CNTFRQ.


>> +             /* North Bridge Service Registers */
>> +             sysfabric-service@fb070000 {
>> +                     compatible = "al,alpine-sysfabric-service", "syscon", "simple-bus";
>> +                     reg = <0x0 0xfb070000 0x0 0x10000>;
>> +             };
>
> That compatible list makes no sense whatsoever.
>
> Why is "simple-bus" on the end?
>

Nodes that are used with "syscon_regmap_lookup_by_compatible" appear
both with and without compatibility to "simple-bus" in the
device-trees.
examples with: "fsl,imx6q-anatop", "xlnx,zynq-slcr"
examples without: "fsl,imx6q-iomuxc-gpr", "rockchip,rk3066-pmu"
Both ways work, I'm not if there is reasoning behind this difference
in current device-trees or which is the better example to follow. I
have no problem working either way. Is there a consensus on this?

> Mark.
Mark Rutland Feb. 2, 2015, 3:41 p.m. UTC | #3
On Mon, Feb 02, 2015 at 03:27:48PM +0000, Tsahee Zidenberg wrote:
> Thank you for your review!
> 
> On 2 February 2015 at 15:40, Mark Rutland <mark.rutland@arm.com> wrote:
> > On Mon, Feb 02, 2015 at 11:20:44AM +0000, Tsahee Zidenberg wrote:
> >> +             arch-timer {
> >> +                     compatible = "arm,cortex-a15-timer",
> >> +                                  "arm,armv7-timer";
> >> +                     interrupts =
> >> +                             <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
> >> +                             <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
> >> +                             <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
> >> +                             <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
> >> +                     clock-frequency = <0>; /* Filled by loader */
> >
> > Your loader doesn't configure CNTFRQ?
> >
> 
> Not currently. setting CNTFRQ must be done in the firmware, to be
> valid across all CPUs and through power-cycles. This isn't supported
> on current firmware, which is used in currently available devices. I
> will add this as a required feature from next-gen firmware.
> clock-frequency property is read by linux-kernel before attempting to
> read CNTFRQ.

Ok.

The "clock-frequency" property is unfortunately a poor workaround for
CNTFRQ not being set, due to CNTFRQ being exposed to guests in the
presence of virtualisation (and potentially userspace were we to have a
VDSO).

> 
> 
> >> +             /* North Bridge Service Registers */
> >> +             sysfabric-service@fb070000 {
> >> +                     compatible = "al,alpine-sysfabric-service", "syscon", "simple-bus";
> >> +                     reg = <0x0 0xfb070000 0x0 0x10000>;
> >> +             };
> >
> > That compatible list makes no sense whatsoever.
> >
> > Why is "simple-bus" on the end?
> >
> 
> Nodes that are used with "syscon_regmap_lookup_by_compatible" appear
> both with and without compatibility to "simple-bus" in the
> device-trees.
> examples with: "fsl,imx6q-anatop", "xlnx,zynq-slcr"
> examples without: "fsl,imx6q-iomuxc-gpr", "rockchip,rk3066-pmu"
> Both ways work, I'm not if there is reasoning behind this difference
> in current device-trees or which is the better example to follow. I
> have no problem working either way. Is there a consensus on this?

The "simple-bus" entry is wrong, and should be removed.

In other cases it's also likely to be wrong, but I'd have to inspect
them to be sure.

Mark.
Tsahee Zidenberg Feb. 2, 2015, 4:04 p.m. UTC | #4
On 2 February 2015 at 17:41, Mark Rutland <mark.rutland@arm.com> wrote:

>> > Why is "simple-bus" on the end?
>> >
>>
>> Nodes that are used with "syscon_regmap_lookup_by_compatible" appear
>> both with and without compatibility to "simple-bus" in the
>> device-trees.
>> examples with: "fsl,imx6q-anatop", "xlnx,zynq-slcr"
>> examples without: "fsl,imx6q-iomuxc-gpr", "rockchip,rk3066-pmu"
>> Both ways work, I'm not if there is reasoning behind this difference
>> in current device-trees or which is the better example to follow. I
>> have no problem working either way. Is there a consensus on this?
>
> The "simple-bus" entry is wrong, and should be removed.
>
> In other cases it's also likely to be wrong, but I'd have to inspect
> them to be sure.
>
Will be fixed, then. Thank you!

Tsahee.
diff mbox

Patch

diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index a1c776b..024d107 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -2,6 +2,10 @@  ifeq ($(CONFIG_OF),y)
 
 dtb-$(CONFIG_MACH_ASM9260) += \
 	alphascale-asm9260-devkit.dtb
+
+dtb-$(CONFIG_ARCH_ALPINE) += \
+	alpine_db.dtb
+
 # Keep at91 dtb files sorted alphabetically for each SoC
 dtb-$(CONFIG_SOC_SAM_V4_V5) += \
 	at91rm9200ek.dtb \
diff --git a/arch/arm/boot/dts/alpine-db.dts b/arch/arm/boot/dts/alpine-db.dts
new file mode 100644
index 0000000..dfb5a08
--- /dev/null
+++ b/arch/arm/boot/dts/alpine-db.dts
@@ -0,0 +1,35 @@ 
+/*
+ * Copyright 2015 Annapurna Labs Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * Alternatively, redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   *   Redistributions of source code must retain the above copyright notice,
+ *       this list of conditions and the following disclaimer.
+ *
+ *   *   Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in
+ *       the documentation and/or other materials provided with the
+ *       distribution.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ */
+
+/dts-v1/;
+
+#include "alpine.dtsi"
+
+/ {
+	model = "Annapurna Labs Alpine Dev Board";
+	/* no need for anything outside SOC */
+};
+
diff --git a/arch/arm/boot/dts/alpine.dtsi b/arch/arm/boot/dts/alpine.dtsi
new file mode 100644
index 0000000..3cce55a
--- /dev/null
+++ b/arch/arm/boot/dts/alpine.dtsi
@@ -0,0 +1,141 @@ 
+/*
+ * Copyright 2015 Annapurna Labs Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * Alternatively, redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   *   Redistributions of source code must retain the above copyright notice,
+ *       this list of conditions and the following disclaimer.
+ *
+ *   *   Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in
+ *       the documentation and/or other materials provided with the
+ *       distribution.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ */
+
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include "skeleton64.dtsi"
+
+/ {
+	/* SOC compatibility */
+	compatible = "al,alpine";
+
+	/* CPU Configuration */
+	cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		enable-method = "al,alpine-smp";
+
+		cpu@0 {
+			compatible = "arm,cortex-a15";
+			device_type = "cpu";
+			reg = <0>;
+			clock-frequency = <0>; /* Filled by loader */
+		};
+
+		cpu@1 {
+			compatible = "arm,cortex-a15";
+			device_type = "cpu";
+			reg = <1>;
+			clock-frequency = <0>; /* Filled by loader */
+		};
+
+		cpu@2 {
+			compatible = "arm,cortex-a15";
+			device_type = "cpu";
+			reg = <2>;
+			clock-frequency = <0>; /* Filled by loader */
+		};
+
+		cpu@3 {
+			compatible = "arm,cortex-a15";
+			device_type = "cpu";
+			reg = <3>;
+			clock-frequency = <0>; /* Filled by loader */
+		};
+	};
+
+	soc {
+		#address-cells = <2>;
+		#size-cells = <2>;
+		compatible = "simple-bus";
+		interrupt-parent = <&gic>;
+		ranges;
+
+		arch-timer {
+			compatible = "arm,cortex-a15-timer",
+				     "arm,armv7-timer";
+			interrupts =
+				<GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
+				<GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
+				<GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
+				<GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
+			clock-frequency = <0>; /* Filled by loader */
+		};
+
+		/* Interrupt Controller */
+		gic: gic@fb001000 {
+			compatible = "arm,cortex-a15-gic";
+			#interrupt-cells = <3>;
+			#size-cells = <0>;
+			#address-cells = <0>;
+			interrupt-controller;
+			reg = <0x0 0xfb001000 0x0 0x1000>,
+			      <0x0 0xfb002000 0x0 0x2000>,
+			      <0x0 0xfb004000 0x0 0x1000>,
+			      <0x0 0xfb006000 0x0 0x2000>;
+			interrupts =
+				<GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
+		};
+
+		/* CPU Resume registers */
+		cpu-resume@fbff5ec0 {
+			compatible = "al,alpine-cpu-resume";
+			reg = <0x0 0xfbff5ec0 0x0 0x30>;
+		};
+
+		/* North Bridge Service Registers */
+		sysfabric-service@fb070000 {
+			compatible = "al,alpine-sysfabric-service", "syscon", "simple-bus";
+			reg = <0x0 0xfb070000 0x0 0x10000>;
+		};
+
+		/* Performance Monitor Unit */
+		pmu {
+			compatible = "arm,cortex-a15-pmu";
+			interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
+		};
+
+		uart0:uart@fd883000 {
+			compatible = "ns16550a";
+			reg = <0x0 0xfd883000 0x0 0x1000>;
+			clock-frequency = <0>; /* Filled by loader */
+			interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
+			reg-shift = <2>;
+			reg-io-width = <4>;
+		};
+
+		uart1:uart@0xfd884000 {
+			compatible = "ns16550a";
+			reg = <0x0 0xfd884000 0x0 0x1000>;
+			clock-frequency = <0>; /* Filled by loader */
+			interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
+			reg-shift = <2>;
+			reg-io-width = <4>;
+		};
+	};
+};