linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] dt-bindings: arm: realtek: Add RTD1195 and MeLE X1000
       [not found] <20191021021035.7032-1-afaerber@suse.de>
@ 2019-10-21  2:10 ` Andreas Färber
  2019-10-29 15:41   ` Rob Herring
  2019-10-21  2:10 ` [PATCH 2/3] ARM: Prepare Realtek RTD1195 Andreas Färber
  2019-10-21  2:10 ` [PATCH 3/3] ARM: dts: Prepare Realtek RTD1195 and MeLE X1000 Andreas Färber
  2 siblings, 1 reply; 9+ messages in thread
From: Andreas Färber @ 2019-10-21  2:10 UTC (permalink / raw)
  To: linux-realtek-soc
  Cc: linux-arm-kernel, Andreas Färber, Rob Herring, Mark Rutland,
	devicetree, linux-kernel

Add bindings for Realtek RTD1195 SoC and MeLE X1000 TV box.

Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 Documentation/devicetree/bindings/arm/realtek.yaml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/realtek.yaml b/Documentation/devicetree/bindings/arm/realtek.yaml
index ab59de17152d..091616880d25 100644
--- a/Documentation/devicetree/bindings/arm/realtek.yaml
+++ b/Documentation/devicetree/bindings/arm/realtek.yaml
@@ -14,6 +14,12 @@ properties:
     const: '/'
   compatible:
     oneOf:
+      # RTD1195 SoC based boards
+      - items:
+          - enum:
+              - mele,x1000 # MeLE X1000
+          - const: realtek,rtd1195
+
       # RTD1293 SoC based boards
       - items:
           - enum:
-- 
2.16.4


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/3] ARM: Prepare Realtek RTD1195
       [not found] <20191021021035.7032-1-afaerber@suse.de>
  2019-10-21  2:10 ` [PATCH 1/3] dt-bindings: arm: realtek: Add RTD1195 and MeLE X1000 Andreas Färber
@ 2019-10-21  2:10 ` Andreas Färber
  2019-10-21  2:10 ` [PATCH 3/3] ARM: dts: Prepare Realtek RTD1195 and MeLE X1000 Andreas Färber
  2 siblings, 0 replies; 9+ messages in thread
From: Andreas Färber @ 2019-10-21  2:10 UTC (permalink / raw)
  To: linux-realtek-soc
  Cc: linux-arm-kernel, Andreas Färber, Russell King, linux-kernel

Introduce ARCH_REALTEK Kconfig option also for 32-bit Arm.

Override the text offset to cope with boot ROM living up to 0xf4000.

Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 arch/arm/Kconfig              |  2 ++
 arch/arm/Makefile             |  1 +
 arch/arm/mach-realtek/Kconfig | 16 ++++++++++++++++
 3 files changed, 19 insertions(+)
 create mode 100644 arch/arm/mach-realtek/Kconfig

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 8a50efb559f3..ac0d1837253d 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -700,6 +700,8 @@ source "arch/arm/mach-qcom/Kconfig"
 
 source "arch/arm/mach-rda/Kconfig"
 
+source "arch/arm/mach-realtek/Kconfig"
+
 source "arch/arm/mach-realview/Kconfig"
 
 source "arch/arm/mach-rockchip/Kconfig"
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index db857d07114f..60c76380f380 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -148,6 +148,7 @@ head-y		:= arch/arm/kernel/head$(MMUEXT).o
 textofs-y	:= 0x00008000
 # We don't want the htc bootloader to corrupt kernel during resume
 textofs-$(CONFIG_PM_H1940)      := 0x00108000
+textofs-$(CONFIG_ARCH_REALTEK)  := 0x00108000
 # SA1111 DMA bug: we don't want the kernel to live in precious DMA-able memory
 ifeq ($(CONFIG_ARCH_SA1100),y)
 textofs-$(CONFIG_SA1111) := 0x00208000
diff --git a/arch/arm/mach-realtek/Kconfig b/arch/arm/mach-realtek/Kconfig
new file mode 100644
index 000000000000..67ae5f122acb
--- /dev/null
+++ b/arch/arm/mach-realtek/Kconfig
@@ -0,0 +1,16 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+menuconfig ARCH_REALTEK
+	bool "Realtek SoCs"
+	depends on ARCH_MULTI_V7
+	select ARM_AMBA
+	select ARM_GIC
+	select ARM_GLOBAL_TIMER
+	select CACHE_L2X0
+	select CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK
+	select COMMON_CLK
+	select GENERIC_IRQ_CHIP
+	select HAVE_ARM_SCU if SMP
+	select HAVE_ARM_TWD if SMP
+	select RESET_CONTROLLER
+	help
+	  This enables support for the Realtek RTD1195 SoC family.
-- 
2.16.4


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/3] ARM: dts: Prepare Realtek RTD1195 and MeLE X1000
       [not found] <20191021021035.7032-1-afaerber@suse.de>
  2019-10-21  2:10 ` [PATCH 1/3] dt-bindings: arm: realtek: Add RTD1195 and MeLE X1000 Andreas Färber
  2019-10-21  2:10 ` [PATCH 2/3] ARM: Prepare Realtek RTD1195 Andreas Färber
@ 2019-10-21  2:10 ` Andreas Färber
  2019-10-29 15:41   ` Rob Herring
  2 siblings, 1 reply; 9+ messages in thread
From: Andreas Färber @ 2019-10-21  2:10 UTC (permalink / raw)
  To: linux-realtek-soc
  Cc: linux-arm-kernel, Andreas Färber, Rob Herring, Mark Rutland,
	devicetree, linux-kernel

Add Device Trees for Realtek RTD1195 SoC and MeLE X1000 TV box.

Reuse the existing RTD1295 watchdog compatible for now.

Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 arch/arm/boot/dts/Makefile               |   2 +
 arch/arm/boot/dts/rtd1195-mele-x1000.dts |  30 ++++++++
 arch/arm/boot/dts/rtd1195.dtsi           | 128 +++++++++++++++++++++++++++++++
 3 files changed, 160 insertions(+)
 create mode 100644 arch/arm/boot/dts/rtd1195-mele-x1000.dts
 create mode 100644 arch/arm/boot/dts/rtd1195.dtsi

diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 73d33611c372..89a951485da8 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -858,6 +858,8 @@ dtb-$(CONFIG_ARCH_QCOM) += \
 dtb-$(CONFIG_ARCH_RDA) += \
 	rda8810pl-orangepi-2g-iot.dtb \
 	rda8810pl-orangepi-i96.dtb
+dtb-$(CONFIG_ARCH_REALTEK) += \
+	rtd1195-mele-x1000.dtb
 dtb-$(CONFIG_ARCH_REALVIEW) += \
 	arm-realview-pb1176.dtb \
 	arm-realview-pb11mp.dtb \
diff --git a/arch/arm/boot/dts/rtd1195-mele-x1000.dts b/arch/arm/boot/dts/rtd1195-mele-x1000.dts
new file mode 100644
index 000000000000..ce9a255950d3
--- /dev/null
+++ b/arch/arm/boot/dts/rtd1195-mele-x1000.dts
@@ -0,0 +1,30 @@
+// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
+/*
+ * Copyright (c) 2017 Andreas Färber
+ */
+
+/dts-v1/;
+
+#include "rtd1195.dtsi"
+
+/ {
+	compatible = "mele,x1000", "realtek,rtd1195";
+	model = "MeLE X1000";
+
+	aliases {
+		serial0 = &uart0;
+	};
+
+	chosen {
+		stdout-path = "serial0:115200n8";
+	};
+
+	memory {
+		device_type = "memory";
+		reg = <0x0 0x40000000>;
+	};
+};
+
+&uart0 {
+	status = "okay";
+};
diff --git a/arch/arm/boot/dts/rtd1195.dtsi b/arch/arm/boot/dts/rtd1195.dtsi
new file mode 100644
index 000000000000..475740c67d26
--- /dev/null
+++ b/arch/arm/boot/dts/rtd1195.dtsi
@@ -0,0 +1,128 @@
+// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
+/*
+ * Copyright (c) 2017 Andreas Färber
+ */
+
+/memreserve/ 0x00000000 0x0000c000; /* boot code */
+/memreserve/ 0x0000c000 0x000f4000;
+/memreserve/ 0x01b00000 0x00400000; /* audio */
+/memreserve/ 0x01ffe000 0x00004000; /* rpc ringbuf */
+/memreserve/ 0x10000000 0x00100000; /* secure */
+/memreserve/ 0x17fff000 0x00001000;
+/memreserve/ 0x18000000 0x00100000; /* rbus */
+/memreserve/ 0x18100000 0x01000000; /* nor */
+
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+/ {
+	compatible = "realtek,rtd1195";
+	interrupt-parent = <&gic>;
+	#address-cells = <1>;
+	#size-cells = <1>;
+
+	cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		cpu0: cpu@0 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a7";
+			reg = <0x0>;
+			clock-frequency = <1000000000>;
+		};
+
+		cpu1: cpu@1 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a7";
+			reg = <0x1>;
+			clock-frequency = <1000000000>;
+		};
+	};
+
+	reserved-memory {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges;
+
+		secure@10000000 {
+			reg = <0x10000000 0x100000>;
+			no-map;
+		};
+
+		rbus@18000000 {
+			reg = <0x18000000 0x100000>;
+			no-map;
+		};
+
+		nor@18100000 {
+			reg = <0x18100000 0x1000000>;
+			no-map;
+		};
+	};
+
+	arm-pmu {
+		compatible = "arm,cortex-a7-pmu";
+		interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-affinity = <&cpu0>, <&cpu1>;
+	};
+
+	timer {
+		compatible = "arm,armv7-timer";
+		interrupts = <GIC_PPI 13
+			(GIC_CPU_MASK_RAW(0xf) | IRQ_TYPE_LEVEL_LOW)>,
+			     <GIC_PPI 14
+			(GIC_CPU_MASK_RAW(0xf) | IRQ_TYPE_LEVEL_LOW)>,
+			     <GIC_PPI 11
+			(GIC_CPU_MASK_RAW(0xf) | IRQ_TYPE_LEVEL_LOW)>,
+			     <GIC_PPI 10
+			(GIC_CPU_MASK_RAW(0xf) | IRQ_TYPE_LEVEL_LOW)>;
+		clock-frequency = <27000000>;
+	};
+
+	osc27M: osc {
+		compatible = "fixed-clock";
+		clock-frequency = <27000000>;
+		#clock-cells = <0>;
+		clock-output-names = "osc27M";
+	};
+
+	soc {
+		compatible = "simple-bus";
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges;
+
+		wdt: watchdog@18007680 {
+			compatible = "realtek,rtd1295-watchdog";
+			reg = <0x18007680 0x100>;
+			clocks = <&osc27M>;
+		};
+
+		uart0: serial@18007800 {
+			compatible = "snps,dw-apb-uart";
+			reg = <0x18007800 0x400>;
+			reg-shift = <2>;
+			reg-io-width = <4>;
+			clock-frequency = <27000000>;
+			status = "disabled";
+		};
+
+		uart1: serial@1801b200 {
+			compatible = "snps,dw-apb-uart";
+			reg = <0x1801b200 0x100>;
+			reg-shift = <2>;
+			reg-io-width = <4>;
+			clock-frequency = <27000000>;
+			status = "disabled";
+		};
+
+		gic: interrupt-controller@ff011000 {
+			compatible = "arm,cortex-a7-gic";
+			reg = <0xff011000 0x1000>,
+			      <0xff012000 0x2000>;
+			interrupt-controller;
+			#interrupt-cells = <3>;
+		};
+	};
+};
-- 
2.16.4


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] ARM: dts: Prepare Realtek RTD1195 and MeLE X1000
  2019-10-21  2:10 ` [PATCH 3/3] ARM: dts: Prepare Realtek RTD1195 and MeLE X1000 Andreas Färber
@ 2019-10-29 15:41   ` Rob Herring
  2019-10-29 15:52     ` Andreas Färber
  0 siblings, 1 reply; 9+ messages in thread
From: Rob Herring @ 2019-10-29 15:41 UTC (permalink / raw)
  To: Andreas Färber
  Cc: linux-realtek-soc, linux-arm-kernel, Mark Rutland, devicetree,
	linux-kernel

On Mon, Oct 21, 2019 at 04:10:35AM +0200, Andreas Färber wrote:
> Add Device Trees for Realtek RTD1195 SoC and MeLE X1000 TV box.
> 
> Reuse the existing RTD1295 watchdog compatible for now.
> 
> Signed-off-by: Andreas Färber <afaerber@suse.de>
> ---
>  arch/arm/boot/dts/Makefile               |   2 +
>  arch/arm/boot/dts/rtd1195-mele-x1000.dts |  30 ++++++++
>  arch/arm/boot/dts/rtd1195.dtsi           | 128 +++++++++++++++++++++++++++++++
>  3 files changed, 160 insertions(+)
>  create mode 100644 arch/arm/boot/dts/rtd1195-mele-x1000.dts
>  create mode 100644 arch/arm/boot/dts/rtd1195.dtsi
> 
> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> index 73d33611c372..89a951485da8 100644
> --- a/arch/arm/boot/dts/Makefile
> +++ b/arch/arm/boot/dts/Makefile
> @@ -858,6 +858,8 @@ dtb-$(CONFIG_ARCH_QCOM) += \
>  dtb-$(CONFIG_ARCH_RDA) += \
>  	rda8810pl-orangepi-2g-iot.dtb \
>  	rda8810pl-orangepi-i96.dtb
> +dtb-$(CONFIG_ARCH_REALTEK) += \
> +	rtd1195-mele-x1000.dtb
>  dtb-$(CONFIG_ARCH_REALVIEW) += \
>  	arm-realview-pb1176.dtb \
>  	arm-realview-pb11mp.dtb \
> diff --git a/arch/arm/boot/dts/rtd1195-mele-x1000.dts b/arch/arm/boot/dts/rtd1195-mele-x1000.dts
> new file mode 100644
> index 000000000000..ce9a255950d3
> --- /dev/null
> +++ b/arch/arm/boot/dts/rtd1195-mele-x1000.dts
> @@ -0,0 +1,30 @@
> +// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
> +/*
> + * Copyright (c) 2017 Andreas Färber

2019?

> + */
> +
> +/dts-v1/;
> +
> +#include "rtd1195.dtsi"
> +
> +/ {
> +	compatible = "mele,x1000", "realtek,rtd1195";
> +	model = "MeLE X1000";
> +
> +	aliases {
> +		serial0 = &uart0;
> +	};
> +
> +	chosen {
> +		stdout-path = "serial0:115200n8";
> +	};
> +
> +	memory {

memory@0

> +		device_type = "memory";
> +		reg = <0x0 0x40000000>;
> +	};
> +};
> +
> +&uart0 {
> +	status = "okay";
> +};
> diff --git a/arch/arm/boot/dts/rtd1195.dtsi b/arch/arm/boot/dts/rtd1195.dtsi
> new file mode 100644
> index 000000000000..475740c67d26
> --- /dev/null
> +++ b/arch/arm/boot/dts/rtd1195.dtsi
> @@ -0,0 +1,128 @@
> +// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
> +/*
> + * Copyright (c) 2017 Andreas Färber
> + */
> +
> +/memreserve/ 0x00000000 0x0000c000; /* boot code */
> +/memreserve/ 0x0000c000 0x000f4000;
> +/memreserve/ 0x01b00000 0x00400000; /* audio */
> +/memreserve/ 0x01ffe000 0x00004000; /* rpc ringbuf */
> +/memreserve/ 0x10000000 0x00100000; /* secure */
> +/memreserve/ 0x17fff000 0x00001000;
> +/memreserve/ 0x18000000 0x00100000; /* rbus */
> +/memreserve/ 0x18100000 0x01000000; /* nor */

You shouldn't have the same entries here and in /reserved-memory. There 
was a time before /reserved-memory was fully supported, but we should be 
well past that now.

> +
> +#include <dt-bindings/interrupt-controller/arm-gic.h>
> +
> +/ {
> +	compatible = "realtek,rtd1195";
> +	interrupt-parent = <&gic>;
> +	#address-cells = <1>;
> +	#size-cells = <1>;
> +
> +	cpus {
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		cpu0: cpu@0 {
> +			device_type = "cpu";
> +			compatible = "arm,cortex-a7";
> +			reg = <0x0>;
> +			clock-frequency = <1000000000>;
> +		};
> +
> +		cpu1: cpu@1 {
> +			device_type = "cpu";
> +			compatible = "arm,cortex-a7";
> +			reg = <0x1>;
> +			clock-frequency = <1000000000>;
> +		};
> +	};
> +
> +	reserved-memory {
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +		ranges;
> +
> +		secure@10000000 {
> +			reg = <0x10000000 0x100000>;
> +			no-map;
> +		};
> +
> +		rbus@18000000 {
> +			reg = <0x18000000 0x100000>;
> +			no-map;

This doesn't look right as it overlaps the register space. 

> +		};
> +
> +		nor@18100000 {
> +			reg = <0x18100000 0x1000000>;
> +			no-map;
> +		};
> +	};
> +
> +	arm-pmu {
> +		compatible = "arm,cortex-a7-pmu";
> +		interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
> +			     <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
> +		interrupt-affinity = <&cpu0>, <&cpu1>;
> +	};
> +
> +	timer {
> +		compatible = "arm,armv7-timer";
> +		interrupts = <GIC_PPI 13
> +			(GIC_CPU_MASK_RAW(0xf) | IRQ_TYPE_LEVEL_LOW)>,
> +			     <GIC_PPI 14
> +			(GIC_CPU_MASK_RAW(0xf) | IRQ_TYPE_LEVEL_LOW)>,
> +			     <GIC_PPI 11
> +			(GIC_CPU_MASK_RAW(0xf) | IRQ_TYPE_LEVEL_LOW)>,
> +			     <GIC_PPI 10
> +			(GIC_CPU_MASK_RAW(0xf) | IRQ_TYPE_LEVEL_LOW)>;
> +		clock-frequency = <27000000>;
> +	};
> +
> +	osc27M: osc {
> +		compatible = "fixed-clock";
> +		clock-frequency = <27000000>;
> +		#clock-cells = <0>;
> +		clock-output-names = "osc27M";
> +	};
> +
> +	soc {
> +		compatible = "simple-bus";
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +		ranges;
> +
> +		wdt: watchdog@18007680 {
> +			compatible = "realtek,rtd1295-watchdog";
> +			reg = <0x18007680 0x100>;
> +			clocks = <&osc27M>;
> +		};
> +
> +		uart0: serial@18007800 {
> +			compatible = "snps,dw-apb-uart";
> +			reg = <0x18007800 0x400>;
> +			reg-shift = <2>;
> +			reg-io-width = <4>;
> +			clock-frequency = <27000000>;
> +			status = "disabled";
> +		};
> +
> +		uart1: serial@1801b200 {
> +			compatible = "snps,dw-apb-uart";
> +			reg = <0x1801b200 0x100>;
> +			reg-shift = <2>;
> +			reg-io-width = <4>;
> +			clock-frequency = <27000000>;
> +			status = "disabled";
> +		};
> +
> +		gic: interrupt-controller@ff011000 {
> +			compatible = "arm,cortex-a7-gic";
> +			reg = <0xff011000 0x1000>,
> +			      <0xff012000 0x2000>;
> +			interrupt-controller;
> +			#interrupt-cells = <3>;
> +		};
> +	};
> +};
> -- 
> 2.16.4
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/3] dt-bindings: arm: realtek: Add RTD1195 and MeLE X1000
  2019-10-21  2:10 ` [PATCH 1/3] dt-bindings: arm: realtek: Add RTD1195 and MeLE X1000 Andreas Färber
@ 2019-10-29 15:41   ` Rob Herring
  0 siblings, 0 replies; 9+ messages in thread
From: Rob Herring @ 2019-10-29 15:41 UTC (permalink / raw)
  To: Andreas Färber
  Cc: linux-realtek-soc, linux-arm-kernel, Andreas Färber,
	Mark Rutland, devicetree, linux-kernel

On Mon, 21 Oct 2019 04:10:33 +0200, =?UTF-8?q?Andreas=20F=C3=A4rber?= wrote:
> Add bindings for Realtek RTD1195 SoC and MeLE X1000 TV box.
> 
> Signed-off-by: Andreas Färber <afaerber@suse.de>
> ---
>  Documentation/devicetree/bindings/arm/realtek.yaml | 6 ++++++
>  1 file changed, 6 insertions(+)
> 

Reviewed-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] ARM: dts: Prepare Realtek RTD1195 and MeLE X1000
  2019-10-29 15:41   ` Rob Herring
@ 2019-10-29 15:52     ` Andreas Färber
  2019-10-29 20:40       ` Rob Herring
  0 siblings, 1 reply; 9+ messages in thread
From: Andreas Färber @ 2019-10-29 15:52 UTC (permalink / raw)
  To: Rob Herring
  Cc: linux-realtek-soc, linux-arm-kernel, Mark Rutland, devicetree,
	linux-kernel

Am 29.10.19 um 16:41 schrieb Rob Herring:
> On Mon, Oct 21, 2019 at 04:10:35AM +0200, Andreas Färber wrote:
>> Add Device Trees for Realtek RTD1195 SoC and MeLE X1000 TV box.
>>
>> Reuse the existing RTD1295 watchdog compatible for now.
>>
>> Signed-off-by: Andreas Färber <afaerber@suse.de>
>> ---
>>  arch/arm/boot/dts/Makefile               |   2 +
>>  arch/arm/boot/dts/rtd1195-mele-x1000.dts |  30 ++++++++
>>  arch/arm/boot/dts/rtd1195.dtsi           | 128 +++++++++++++++++++++++++++++++
>>  3 files changed, 160 insertions(+)
>>  create mode 100644 arch/arm/boot/dts/rtd1195-mele-x1000.dts
>>  create mode 100644 arch/arm/boot/dts/rtd1195.dtsi
>>
>> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
>> index 73d33611c372..89a951485da8 100644
>> --- a/arch/arm/boot/dts/Makefile
>> +++ b/arch/arm/boot/dts/Makefile
>> @@ -858,6 +858,8 @@ dtb-$(CONFIG_ARCH_QCOM) += \
>>  dtb-$(CONFIG_ARCH_RDA) += \
>>  	rda8810pl-orangepi-2g-iot.dtb \
>>  	rda8810pl-orangepi-i96.dtb
>> +dtb-$(CONFIG_ARCH_REALTEK) += \
>> +	rtd1195-mele-x1000.dtb
>>  dtb-$(CONFIG_ARCH_REALVIEW) += \
>>  	arm-realview-pb1176.dtb \
>>  	arm-realview-pb11mp.dtb \
>> diff --git a/arch/arm/boot/dts/rtd1195-mele-x1000.dts b/arch/arm/boot/dts/rtd1195-mele-x1000.dts
>> new file mode 100644
>> index 000000000000..ce9a255950d3
>> --- /dev/null
>> +++ b/arch/arm/boot/dts/rtd1195-mele-x1000.dts
>> @@ -0,0 +1,30 @@
>> +// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
>> +/*
>> + * Copyright (c) 2017 Andreas Färber
> 
> 2019?

Nope, I am flushing out old queues, and updating SPDX line does not
really warrant a copyright bump IMO. The changes below would though.

>> + */
>> +
>> +/dts-v1/;
>> +
>> +#include "rtd1195.dtsi"
>> +
>> +/ {
>> +	compatible = "mele,x1000", "realtek,rtd1195";
>> +	model = "MeLE X1000";
>> +
>> +	aliases {
>> +		serial0 = &uart0;
>> +	};
>> +
>> +	chosen {
>> +		stdout-path = "serial0:115200n8";
>> +	};
>> +
>> +	memory {
> 
> memory@0

Will test.

> 
>> +		device_type = "memory";
>> +		reg = <0x0 0x40000000>;
>> +	};
>> +};
>> +
>> +&uart0 {
>> +	status = "okay";
>> +};
>> diff --git a/arch/arm/boot/dts/rtd1195.dtsi b/arch/arm/boot/dts/rtd1195.dtsi
>> new file mode 100644
>> index 000000000000..475740c67d26
>> --- /dev/null
>> +++ b/arch/arm/boot/dts/rtd1195.dtsi
>> @@ -0,0 +1,128 @@
>> +// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
>> +/*
>> + * Copyright (c) 2017 Andreas Färber
>> + */
>> +
>> +/memreserve/ 0x00000000 0x0000c000; /* boot code */
>> +/memreserve/ 0x0000c000 0x000f4000;
>> +/memreserve/ 0x01b00000 0x00400000; /* audio */
>> +/memreserve/ 0x01ffe000 0x00004000; /* rpc ringbuf */
>> +/memreserve/ 0x10000000 0x00100000; /* secure */
>> +/memreserve/ 0x17fff000 0x00001000;
>> +/memreserve/ 0x18000000 0x00100000; /* rbus */
>> +/memreserve/ 0x18100000 0x01000000; /* nor */
> 
> You shouldn't have the same entries here and in /reserved-memory. There 
> was a time before /reserved-memory was fully supported, but we should be 
> well past that now.

I am dealing with a v2012.07 based downstream U-Boot that I do not have
sources for, so I wouldn't be so sure there... It will only respect
memreserve I think, whereas reserved-memory below is for the kernel, no?

>> +
>> +#include <dt-bindings/interrupt-controller/arm-gic.h>
>> +
>> +/ {
>> +	compatible = "realtek,rtd1195";
>> +	interrupt-parent = <&gic>;
>> +	#address-cells = <1>;
>> +	#size-cells = <1>;
>> +
>> +	cpus {
>> +		#address-cells = <1>;
>> +		#size-cells = <0>;
>> +
>> +		cpu0: cpu@0 {
>> +			device_type = "cpu";
>> +			compatible = "arm,cortex-a7";
>> +			reg = <0x0>;
>> +			clock-frequency = <1000000000>;
>> +		};
>> +
>> +		cpu1: cpu@1 {
>> +			device_type = "cpu";
>> +			compatible = "arm,cortex-a7";
>> +			reg = <0x1>;
>> +			clock-frequency = <1000000000>;
>> +		};
>> +	};
>> +
>> +	reserved-memory {
>> +		#address-cells = <1>;
>> +		#size-cells = <1>;
>> +		ranges;
>> +
>> +		secure@10000000 {
>> +			reg = <0x10000000 0x100000>;
>> +			no-map;
>> +		};
>> +
>> +		rbus@18000000 {
>> +			reg = <0x18000000 0x100000>;
>> +			no-map;
> 
> This doesn't look right as it overlaps the register space. 

Will try dropping it. James?

>> +		};
>> +
>> +		nor@18100000 {
>> +			reg = <0x18100000 0x1000000>;
>> +			no-map;
>> +		};

Same issue here, I guess?

Thanks,
Andreas

>> +	};
>> +
>> +	arm-pmu {
>> +		compatible = "arm,cortex-a7-pmu";
>> +		interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>,
>> +			     <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
>> +		interrupt-affinity = <&cpu0>, <&cpu1>;
>> +	};
>> +
>> +	timer {
>> +		compatible = "arm,armv7-timer";
>> +		interrupts = <GIC_PPI 13
>> +			(GIC_CPU_MASK_RAW(0xf) | IRQ_TYPE_LEVEL_LOW)>,
>> +			     <GIC_PPI 14
>> +			(GIC_CPU_MASK_RAW(0xf) | IRQ_TYPE_LEVEL_LOW)>,
>> +			     <GIC_PPI 11
>> +			(GIC_CPU_MASK_RAW(0xf) | IRQ_TYPE_LEVEL_LOW)>,
>> +			     <GIC_PPI 10
>> +			(GIC_CPU_MASK_RAW(0xf) | IRQ_TYPE_LEVEL_LOW)>;
>> +		clock-frequency = <27000000>;
>> +	};
>> +
>> +	osc27M: osc {
>> +		compatible = "fixed-clock";
>> +		clock-frequency = <27000000>;
>> +		#clock-cells = <0>;
>> +		clock-output-names = "osc27M";
>> +	};
>> +
>> +	soc {
>> +		compatible = "simple-bus";
>> +		#address-cells = <1>;
>> +		#size-cells = <1>;
>> +		ranges;
>> +
>> +		wdt: watchdog@18007680 {
>> +			compatible = "realtek,rtd1295-watchdog";
>> +			reg = <0x18007680 0x100>;
>> +			clocks = <&osc27M>;
>> +		};
>> +
>> +		uart0: serial@18007800 {
>> +			compatible = "snps,dw-apb-uart";
>> +			reg = <0x18007800 0x400>;
>> +			reg-shift = <2>;
>> +			reg-io-width = <4>;
>> +			clock-frequency = <27000000>;
>> +			status = "disabled";
>> +		};
>> +
>> +		uart1: serial@1801b200 {
>> +			compatible = "snps,dw-apb-uart";
>> +			reg = <0x1801b200 0x100>;
>> +			reg-shift = <2>;
>> +			reg-io-width = <4>;
>> +			clock-frequency = <27000000>;
>> +			status = "disabled";
>> +		};
>> +
>> +		gic: interrupt-controller@ff011000 {
>> +			compatible = "arm,cortex-a7-gic";
>> +			reg = <0xff011000 0x1000>,
>> +			      <0xff012000 0x2000>;
>> +			interrupt-controller;
>> +			#interrupt-cells = <3>;
>> +		};
>> +	};
>> +};
>> -- 
>> 2.16.4
>>


-- 
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer
HRB 36809 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] ARM: dts: Prepare Realtek RTD1195 and MeLE X1000
  2019-10-29 15:52     ` Andreas Färber
@ 2019-10-29 20:40       ` Rob Herring
  2019-10-30  3:49         ` Andreas Färber
  0 siblings, 1 reply; 9+ messages in thread
From: Rob Herring @ 2019-10-29 20:40 UTC (permalink / raw)
  To: Andreas Färber
  Cc: linux-realtek-soc,
	moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE,
	Mark Rutland, devicetree, linux-kernel

On Tue, Oct 29, 2019 at 10:52 AM Andreas Färber <afaerber@suse.de> wrote:
>
> Am 29.10.19 um 16:41 schrieb Rob Herring:
> > On Mon, Oct 21, 2019 at 04:10:35AM +0200, Andreas Färber wrote:
> >> Add Device Trees for Realtek RTD1195 SoC and MeLE X1000 TV box.
> >>
> >> Reuse the existing RTD1295 watchdog compatible for now.
> >>
> >> Signed-off-by: Andreas Färber <afaerber@suse.de>
> >> ---
> >>  arch/arm/boot/dts/Makefile               |   2 +
> >>  arch/arm/boot/dts/rtd1195-mele-x1000.dts |  30 ++++++++
> >>  arch/arm/boot/dts/rtd1195.dtsi           | 128 +++++++++++++++++++++++++++++++
> >>  3 files changed, 160 insertions(+)
> >>  create mode 100644 arch/arm/boot/dts/rtd1195-mele-x1000.dts
> >>  create mode 100644 arch/arm/boot/dts/rtd1195.dtsi
> >>
> >> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> >> index 73d33611c372..89a951485da8 100644
> >> --- a/arch/arm/boot/dts/Makefile
> >> +++ b/arch/arm/boot/dts/Makefile
> >> @@ -858,6 +858,8 @@ dtb-$(CONFIG_ARCH_QCOM) += \
> >>  dtb-$(CONFIG_ARCH_RDA) += \
> >>      rda8810pl-orangepi-2g-iot.dtb \
> >>      rda8810pl-orangepi-i96.dtb
> >> +dtb-$(CONFIG_ARCH_REALTEK) += \
> >> +    rtd1195-mele-x1000.dtb
> >>  dtb-$(CONFIG_ARCH_REALVIEW) += \
> >>      arm-realview-pb1176.dtb \
> >>      arm-realview-pb11mp.dtb \
> >> diff --git a/arch/arm/boot/dts/rtd1195-mele-x1000.dts b/arch/arm/boot/dts/rtd1195-mele-x1000.dts
> >> new file mode 100644
> >> index 000000000000..ce9a255950d3
> >> --- /dev/null
> >> +++ b/arch/arm/boot/dts/rtd1195-mele-x1000.dts
> >> @@ -0,0 +1,30 @@
> >> +// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
> >> +/*
> >> + * Copyright (c) 2017 Andreas Färber
> >
> > 2019?
>
> Nope, I am flushing out old queues, and updating SPDX line does not
> really warrant a copyright bump IMO. The changes below would though.
>
> >> + */
> >> +
> >> +/dts-v1/;
> >> +
> >> +#include "rtd1195.dtsi"
> >> +
> >> +/ {
> >> +    compatible = "mele,x1000", "realtek,rtd1195";
> >> +    model = "MeLE X1000";
> >> +
> >> +    aliases {
> >> +            serial0 = &uart0;
> >> +    };
> >> +
> >> +    chosen {
> >> +            stdout-path = "serial0:115200n8";
> >> +    };
> >> +
> >> +    memory {
> >
> > memory@0
>
> Will test.
>
> >
> >> +            device_type = "memory";
> >> +            reg = <0x0 0x40000000>;
> >> +    };
> >> +};
> >> +
> >> +&uart0 {
> >> +    status = "okay";
> >> +};
> >> diff --git a/arch/arm/boot/dts/rtd1195.dtsi b/arch/arm/boot/dts/rtd1195.dtsi
> >> new file mode 100644
> >> index 000000000000..475740c67d26
> >> --- /dev/null
> >> +++ b/arch/arm/boot/dts/rtd1195.dtsi
> >> @@ -0,0 +1,128 @@
> >> +// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
> >> +/*
> >> + * Copyright (c) 2017 Andreas Färber
> >> + */
> >> +
> >> +/memreserve/ 0x00000000 0x0000c000; /* boot code */
> >> +/memreserve/ 0x0000c000 0x000f4000;
> >> +/memreserve/ 0x01b00000 0x00400000; /* audio */
> >> +/memreserve/ 0x01ffe000 0x00004000; /* rpc ringbuf */
> >> +/memreserve/ 0x10000000 0x00100000; /* secure */
> >> +/memreserve/ 0x17fff000 0x00001000;
> >> +/memreserve/ 0x18000000 0x00100000; /* rbus */
> >> +/memreserve/ 0x18100000 0x01000000; /* nor */
> >
> > You shouldn't have the same entries here and in /reserved-memory. There
> > was a time before /reserved-memory was fully supported, but we should be
> > well past that now.
>
> I am dealing with a v2012.07 based downstream U-Boot that I do not have
> sources for, so I wouldn't be so sure there... It will only respect
> memreserve I think, whereas reserved-memory below is for the kernel, no?

Sigh... Well, that may be too old. :(

I could be wrong too and no one ever added /reserved-memory support
for u-boot. The intent was never that one was for u-boot and the other
for the kernel. The kernel handles both. reserved-memory was to
overcome the limitations of memreserve.

> >> +#include <dt-bindings/interrupt-controller/arm-gic.h>
> >> +
> >> +/ {
> >> +    compatible = "realtek,rtd1195";
> >> +    interrupt-parent = <&gic>;
> >> +    #address-cells = <1>;
> >> +    #size-cells = <1>;
> >> +
> >> +    cpus {
> >> +            #address-cells = <1>;
> >> +            #size-cells = <0>;
> >> +
> >> +            cpu0: cpu@0 {
> >> +                    device_type = "cpu";
> >> +                    compatible = "arm,cortex-a7";
> >> +                    reg = <0x0>;
> >> +                    clock-frequency = <1000000000>;
> >> +            };
> >> +
> >> +            cpu1: cpu@1 {
> >> +                    device_type = "cpu";
> >> +                    compatible = "arm,cortex-a7";
> >> +                    reg = <0x1>;
> >> +                    clock-frequency = <1000000000>;
> >> +            };
> >> +    };
> >> +
> >> +    reserved-memory {
> >> +            #address-cells = <1>;
> >> +            #size-cells = <1>;
> >> +            ranges;
> >> +
> >> +            secure@10000000 {
> >> +                    reg = <0x10000000 0x100000>;
> >> +                    no-map;
> >> +            };
> >> +
> >> +            rbus@18000000 {
> >> +                    reg = <0x18000000 0x100000>;
> >> +                    no-map;
> >
> > This doesn't look right as it overlaps the register space.
>
> Will try dropping it. James?
>
> >> +            };
> >> +
> >> +            nor@18100000 {
> >> +                    reg = <0x18100000 0x1000000>;
> >> +                    no-map;
> >> +            };
>
> Same issue here, I guess?

Yes.

Rob

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] ARM: dts: Prepare Realtek RTD1195 and MeLE X1000
  2019-10-29 20:40       ` Rob Herring
@ 2019-10-30  3:49         ` Andreas Färber
  2019-10-30 14:01           ` Rob Herring
  0 siblings, 1 reply; 9+ messages in thread
From: Andreas Färber @ 2019-10-30  3:49 UTC (permalink / raw)
  To: Rob Herring
  Cc: linux-realtek-soc, LAKML, Mark Rutland, devicetree, linux-kernel

Am 29.10.19 um 21:40 schrieb Rob Herring:
> On Tue, Oct 29, 2019 at 10:52 AM Andreas Färber <afaerber@suse.de> wrote:
>> Am 29.10.19 um 16:41 schrieb Rob Herring:
>>> On Mon, Oct 21, 2019 at 04:10:35AM +0200, Andreas Färber wrote:
>>>> Add Device Trees for Realtek RTD1195 SoC and MeLE X1000 TV box.
>>>>
>>>> Reuse the existing RTD1295 watchdog compatible for now.
>>>>
>>>> Signed-off-by: Andreas Färber <afaerber@suse.de>
>>>> ---
>>>>  arch/arm/boot/dts/Makefile               |   2 +
>>>>  arch/arm/boot/dts/rtd1195-mele-x1000.dts |  30 ++++++++
>>>>  arch/arm/boot/dts/rtd1195.dtsi           | 128 +++++++++++++++++++++++++++++++
>>>>  3 files changed, 160 insertions(+)
>>>>  create mode 100644 arch/arm/boot/dts/rtd1195-mele-x1000.dts
>>>>  create mode 100644 arch/arm/boot/dts/rtd1195.dtsi
>>>>
>>>> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
>>>> index 73d33611c372..89a951485da8 100644
>>>> --- a/arch/arm/boot/dts/Makefile
>>>> +++ b/arch/arm/boot/dts/Makefile
>>>> @@ -858,6 +858,8 @@ dtb-$(CONFIG_ARCH_QCOM) += \
>>>>  dtb-$(CONFIG_ARCH_RDA) += \
>>>>      rda8810pl-orangepi-2g-iot.dtb \
>>>>      rda8810pl-orangepi-i96.dtb
>>>> +dtb-$(CONFIG_ARCH_REALTEK) += \
>>>> +    rtd1195-mele-x1000.dtb
>>>>  dtb-$(CONFIG_ARCH_REALVIEW) += \
>>>>      arm-realview-pb1176.dtb \
>>>>      arm-realview-pb11mp.dtb \
>>>> diff --git a/arch/arm/boot/dts/rtd1195-mele-x1000.dts b/arch/arm/boot/dts/rtd1195-mele-x1000.dts
>>>> new file mode 100644
>>>> index 000000000000..ce9a255950d3
>>>> --- /dev/null
>>>> +++ b/arch/arm/boot/dts/rtd1195-mele-x1000.dts
>>>> @@ -0,0 +1,30 @@
>>>> +// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
>>>> +/*
>>>> + * Copyright (c) 2017 Andreas Färber
>>>
>>> 2019?
>>
>> Nope, I am flushing out old queues, and updating SPDX line does not
>> really warrant a copyright bump IMO. The changes below would though.

Updated here, but not yet for the .dtsi.

>>>> + */
>>>> +
>>>> +/dts-v1/;
>>>> +
>>>> +#include "rtd1195.dtsi"
>>>> +
>>>> +/ {
>>>> +    compatible = "mele,x1000", "realtek,rtd1195";
>>>> +    model = "MeLE X1000";
>>>> +
>>>> +    aliases {
>>>> +            serial0 = &uart0;
>>>> +    };
>>>> +
>>>> +    chosen {
>>>> +            stdout-path = "serial0:115200n8";
>>>> +    };
>>>> +
>>>> +    memory {
>>>
>>> memory@0
>>
>> Will test.

Fixed. (No duplicate node from U-Boot.)

>>>> +            device_type = "memory";
>>>> +            reg = <0x0 0x40000000>;
>>>> +    };
>>>> +};
>>>> +
>>>> +&uart0 {
>>>> +    status = "okay";
>>>> +};
>>>> diff --git a/arch/arm/boot/dts/rtd1195.dtsi b/arch/arm/boot/dts/rtd1195.dtsi
>>>> new file mode 100644
>>>> index 000000000000..475740c67d26
>>>> --- /dev/null
>>>> +++ b/arch/arm/boot/dts/rtd1195.dtsi
>>>> @@ -0,0 +1,128 @@
>>>> +// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
>>>> +/*
>>>> + * Copyright (c) 2017 Andreas Färber
>>>> + */
>>>> +
>>>> +/memreserve/ 0x00000000 0x0000c000; /* boot code */
>>>> +/memreserve/ 0x0000c000 0x000f4000;
>>>> +/memreserve/ 0x01b00000 0x00400000; /* audio */
>>>> +/memreserve/ 0x01ffe000 0x00004000; /* rpc ringbuf */
>>>> +/memreserve/ 0x10000000 0x00100000; /* secure */
>>>> +/memreserve/ 0x17fff000 0x00001000;
>>>> +/memreserve/ 0x18000000 0x00100000; /* rbus */
>>>> +/memreserve/ 0x18100000 0x01000000; /* nor */
>>>
>>> You shouldn't have the same entries here and in /reserved-memory. There
>>> was a time before /reserved-memory was fully supported, but we should be
>>> well past that now.
>>
>> I am dealing with a v2012.07 based downstream U-Boot that I do not have
>> sources for, so I wouldn't be so sure there... It will only respect
>> memreserve I think, whereas reserved-memory below is for the kernel, no?
> 
> Sigh... Well, that may be too old. :(
> 
> I could be wrong too and no one ever added /reserved-memory support
> for u-boot. The intent was never that one was for u-boot and the other
> for the kernel. The kernel handles both. reserved-memory was to
> overcome the limitations of memreserve.

What I meant was that some versions of U-Boot process and print
memreserve regions _before_ booting into the kernel, i.e. we don't want
U-Boot's bootX commands to write data into the reserved regions.
/reserved-memory allows the kernel/bootloader to associate memory
regions with drivers via memory-region node references and to steer
whether or not the reserved memory remains mapped.

>>>> +#include <dt-bindings/interrupt-controller/arm-gic.h>
>>>> +
>>>> +/ {
>>>> +    compatible = "realtek,rtd1195";
>>>> +    interrupt-parent = <&gic>;
>>>> +    #address-cells = <1>;
>>>> +    #size-cells = <1>;
>>>> +
>>>> +    cpus {
>>>> +            #address-cells = <1>;
>>>> +            #size-cells = <0>;
>>>> +
>>>> +            cpu0: cpu@0 {
>>>> +                    device_type = "cpu";
>>>> +                    compatible = "arm,cortex-a7";
>>>> +                    reg = <0x0>;
>>>> +                    clock-frequency = <1000000000>;
>>>> +            };
>>>> +
>>>> +            cpu1: cpu@1 {
>>>> +                    device_type = "cpu";
>>>> +                    compatible = "arm,cortex-a7";
>>>> +                    reg = <0x1>;
>>>> +                    clock-frequency = <1000000000>;
>>>> +            };
>>>> +    };
>>>> +
>>>> +    reserved-memory {
>>>> +            #address-cells = <1>;
>>>> +            #size-cells = <1>;
>>>> +            ranges;
>>>> +
>>>> +            secure@10000000 {
>>>> +                    reg = <0x10000000 0x100000>;
>>>> +                    no-map;
>>>> +            };
>>>> +
>>>> +            rbus@18000000 {
>>>> +                    reg = <0x18000000 0x100000>;
>>>> +                    no-map;
>>>
>>> This doesn't look right as it overlaps the register space.
>>
>> Will try dropping it. James?

My testing (with irqchip patches) shows that leaving the memreserve in
place and dropping this node leads to the following error:

[    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[    0.000000] ------------[ cut here ]------------
[    0.000000] WARNING: CPU: 0 PID: 0 at arch/arm/mm/ioremap.c:304
__arm_ioremap_pfn_caller+0x1e4/0x208
[    0.000000] Modules linked in:
[    0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted
5.4.0-rc5-next-20191029+ #152
[    0.000000] Hardware name: Generic DT based system
[    0.000000] [<c022f468>] (unwind_backtrace) from [<c022bca0>]
(show_stack+0x10/0x14)
[    0.000000] [<c022bca0>] (show_stack) from [<c08ab7c0>]
(dump_stack+0x78/0x8c)
[    0.000000] [<c08ab7c0>] (dump_stack) from [<c023e344>]
(__warn+0xbc/0xd8)
[    0.000000] [<c023e344>] (__warn) from [<c023e3c4>]
(warn_slowpath_fmt+0x64/0xc4)
[    0.000000] [<c023e3c4>] (warn_slowpath_fmt) from [<c02359c8>]
(__arm_ioremap_pfn_caller+0x1e4/0x208)
[    0.000000] [<c02359c8>] (__arm_ioremap_pfn_caller) from [<c0235a88>]
(ioremap+0x20/0x28)
[    0.000000] [<c0235a88>] (ioremap) from [<c0739318>] (of_iomap+0x40/0x64)
[    0.000000] [<c0739318>] (of_iomap) from [<c0e199c8>]
(rtd119x_irq_mux_init+0x3c/0x134)
[    0.000000] [<c0e199c8>] (rtd119x_irq_mux_init) from [<c0e21e48>]
(of_irq_init+0x194/0x2b4)
[    0.000000] [<c0e21e48>] (of_irq_init) from [<c0e029f4>]
(init_IRQ+0x24/0x78)
[    0.000000] [<c0e029f4>] (init_IRQ) from [<c0e00c00>]
(start_kernel+0x29c/0x488)
[    0.000000] [<c0e00c00>] (start_kernel) from [<00000000>] (0x0)
[    0.000000] random: get_random_bytes called from
print_oops_end_marker+0x24/0x4c with crng_init=0
[    0.000000] ---[ end trace 0000000000000000 ]---
[    0.000000] 8<--- cut here ---
[    0.000000] Unable to handle kernel NULL pointer dereference at
virtual address 00000040
[    0.000000] pgd = (ptrval)
[    0.000000] [00000040] *pgd=80000000104003, *pmd=00000000
[    0.000000] Internal error: Oops: a06 [#1] PREEMPT SMP ARM
[    0.000000] Modules linked in:
[    0.000000] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G        W
 5.4.0-rc5-next-20191029+ #152
[    0.000000] Hardware name: Generic DT based system
[    0.000000] PC is at rtd119x_irq_mux_init+0x94/0x134
[    0.000000] LR is at 0x0
[    0.000000] pc : [<c0e19a20>]    lr : [<00000000>]    psr: a00000d3
[    0.000000] sp : c1001f38  ip : eb001d80  fp : c0bdb7d0
[    0.000000] r10: 00000100  r9 : 00000122  r8 : 00000000
[    0.000000] r7 : c0a4dd8c  r6 : ef5f8fbc  r5 : eb001d40  r4 : 00000040
[    0.000000] r3 : 00000004  r2 : 00000000  r1 : 00000000  r0 : 00000040
[    0.000000] Flags: NzCv  IRQs off  FIQs off  Mode SVC_32  ISA ARM
Segment user
[    0.000000] Control: 30c5387d  Table: 00103000  DAC: fffffffd
[    0.000000] Process swapper/0 (pid: 0, stack limit = 0x(ptrval))
[    0.000000] Stack: (0xc1001f38 to 0xc1002000)
[    0.000000] 1f20:
   00000122 00000100
[    0.000000] 1f40: eb001cc0 ef5f9a20 c1001f64 c1001f6c eb001d00
c0e21e48 c105b2ec c0284348
[    0.000000] 1f60: 00000000 eb001d00 eb001d00 c1001f6c c1001f6c
c1003e50 00000001 c0e32a30
[    0.000000] 1f80: c1003e40 c10617dc c1035d80 ffffffff cccccccd
00000001 c0e32a40 c0e029f4
[    0.000000] 1fa0: cccccccd c0e00c00 ffffffff ffffffff 00000000
c0e00584 00000000 ef5f7e00
[    0.000000] 1fc0: 00000000 c0e32a40 00000000 c1003e50 00000000
c0e00330 00000000 30c0387d
[    0.000000] 1fe0: 0000138a 01ff2000 410fc075 30c5387d 00000000
00000000 00000000 00000000
[    0.000000] [<c0e19a20>] (rtd119x_irq_mux_init) from [<c0e21e48>]
(of_irq_init+0x194/0x2b4)
[    0.000000] [<c0e21e48>] (of_irq_init) from [<c0e029f4>]
(init_IRQ+0x24/0x78)
[    0.000000] [<c0e029f4>] (init_IRQ) from [<c0e00c00>]
(start_kernel+0x29c/0x488)
[    0.000000] [<c0e00c00>] (start_kernel) from [<00000000>] (0x0)
[    0.000000] Code: e5853004 e5970008 e0844000 e5854008 (e5848000)
[    0.000000] ---[ end trace f68728a0d3053b52 ]---
[    0.000000] Kernel panic - not syncing: Attempted to kill the idle task!
[    0.000000] ---[ end Kernel panic - not syncing: Attempted to kill
the idle task! ]---

This appears to be in part a bug in my error handling of of_iomap - it
returns NULL, not PTR_ERR(). But even with that fixed I get fatal errors
at some point.

The workaround I have is a custom mach-realtek machine_desc with .map_io
assigning explicit .virtual addresses and MT_DEVICE for these ranges. I
also experimented with .reserve removing three memblocks, so we have a
puzzle of four places messing with the same memory regions and some
combinations working in the end, unclear why exactly.

>>>> +            };
>>>> +
>>>> +            nor@18100000 {
>>>> +                    reg = <0x18100000 0x1000000>;
>>>> +                    no-map;
>>>> +            };
>>
>> Same issue here, I guess?
> 
> Yes.

I fear the only conclusion right now would be to defer RTD1195 to v5.6
so that at least RTD129x parts can progress for v5.5? Unless we can
agree on a subset to at least showcase initial earlycon output and allow
us to add nodes, such as reset controllers, as we add/enable drivers.

Regards,
Andreas

-- 
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer
HRB 36809 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] ARM: dts: Prepare Realtek RTD1195 and MeLE X1000
  2019-10-30  3:49         ` Andreas Färber
@ 2019-10-30 14:01           ` Rob Herring
  0 siblings, 0 replies; 9+ messages in thread
From: Rob Herring @ 2019-10-30 14:01 UTC (permalink / raw)
  To: Andreas Färber
  Cc: linux-realtek-soc, LAKML, Mark Rutland, devicetree, linux-kernel

On Tue, Oct 29, 2019 at 10:49 PM Andreas Färber <afaerber@suse.de> wrote:
>
> Am 29.10.19 um 21:40 schrieb Rob Herring:
> > On Tue, Oct 29, 2019 at 10:52 AM Andreas Färber <afaerber@suse.de> wrote:
> >> Am 29.10.19 um 16:41 schrieb Rob Herring:
> >>> On Mon, Oct 21, 2019 at 04:10:35AM +0200, Andreas Färber wrote:
> >>>> Add Device Trees for Realtek RTD1195 SoC and MeLE X1000 TV box.
> >>>>
> >>>> Reuse the existing RTD1295 watchdog compatible for now.
> >>>>
> >>>> Signed-off-by: Andreas Färber <afaerber@suse.de>
> >>>> ---
> >>>>  arch/arm/boot/dts/Makefile               |   2 +
> >>>>  arch/arm/boot/dts/rtd1195-mele-x1000.dts |  30 ++++++++
> >>>>  arch/arm/boot/dts/rtd1195.dtsi           | 128 +++++++++++++++++++++++++++++++
> >>>>  3 files changed, 160 insertions(+)
> >>>>  create mode 100644 arch/arm/boot/dts/rtd1195-mele-x1000.dts
> >>>>  create mode 100644 arch/arm/boot/dts/rtd1195.dtsi
> >>>>
> >>>> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> >>>> index 73d33611c372..89a951485da8 100644
> >>>> --- a/arch/arm/boot/dts/Makefile
> >>>> +++ b/arch/arm/boot/dts/Makefile
> >>>> @@ -858,6 +858,8 @@ dtb-$(CONFIG_ARCH_QCOM) += \
> >>>>  dtb-$(CONFIG_ARCH_RDA) += \
> >>>>      rda8810pl-orangepi-2g-iot.dtb \
> >>>>      rda8810pl-orangepi-i96.dtb
> >>>> +dtb-$(CONFIG_ARCH_REALTEK) += \
> >>>> +    rtd1195-mele-x1000.dtb
> >>>>  dtb-$(CONFIG_ARCH_REALVIEW) += \
> >>>>      arm-realview-pb1176.dtb \
> >>>>      arm-realview-pb11mp.dtb \
> >>>> diff --git a/arch/arm/boot/dts/rtd1195-mele-x1000.dts b/arch/arm/boot/dts/rtd1195-mele-x1000.dts
> >>>> new file mode 100644
> >>>> index 000000000000..ce9a255950d3
> >>>> --- /dev/null
> >>>> +++ b/arch/arm/boot/dts/rtd1195-mele-x1000.dts
> >>>> @@ -0,0 +1,30 @@
> >>>> +// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
> >>>> +/*
> >>>> + * Copyright (c) 2017 Andreas Färber
> >>>
> >>> 2019?
> >>
> >> Nope, I am flushing out old queues, and updating SPDX line does not
> >> really warrant a copyright bump IMO. The changes below would though.
>
> Updated here, but not yet for the .dtsi.
>
> >>>> + */
> >>>> +
> >>>> +/dts-v1/;
> >>>> +
> >>>> +#include "rtd1195.dtsi"
> >>>> +
> >>>> +/ {
> >>>> +    compatible = "mele,x1000", "realtek,rtd1195";
> >>>> +    model = "MeLE X1000";
> >>>> +
> >>>> +    aliases {
> >>>> +            serial0 = &uart0;
> >>>> +    };
> >>>> +
> >>>> +    chosen {
> >>>> +            stdout-path = "serial0:115200n8";
> >>>> +    };
> >>>> +
> >>>> +    memory {
> >>>
> >>> memory@0
> >>
> >> Will test.
>
> Fixed. (No duplicate node from U-Boot.)
>
> >>>> +            device_type = "memory";
> >>>> +            reg = <0x0 0x40000000>;
> >>>> +    };
> >>>> +};
> >>>> +
> >>>> +&uart0 {
> >>>> +    status = "okay";
> >>>> +};
> >>>> diff --git a/arch/arm/boot/dts/rtd1195.dtsi b/arch/arm/boot/dts/rtd1195.dtsi
> >>>> new file mode 100644
> >>>> index 000000000000..475740c67d26
> >>>> --- /dev/null
> >>>> +++ b/arch/arm/boot/dts/rtd1195.dtsi
> >>>> @@ -0,0 +1,128 @@
> >>>> +// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
> >>>> +/*
> >>>> + * Copyright (c) 2017 Andreas Färber
> >>>> + */
> >>>> +
> >>>> +/memreserve/ 0x00000000 0x0000c000; /* boot code */
> >>>> +/memreserve/ 0x0000c000 0x000f4000;
> >>>> +/memreserve/ 0x01b00000 0x00400000; /* audio */
> >>>> +/memreserve/ 0x01ffe000 0x00004000; /* rpc ringbuf */
> >>>> +/memreserve/ 0x10000000 0x00100000; /* secure */
> >>>> +/memreserve/ 0x17fff000 0x00001000;
> >>>> +/memreserve/ 0x18000000 0x00100000; /* rbus */
> >>>> +/memreserve/ 0x18100000 0x01000000; /* nor */
> >>>
> >>> You shouldn't have the same entries here and in /reserved-memory. There
> >>> was a time before /reserved-memory was fully supported, but we should be
> >>> well past that now.
> >>
> >> I am dealing with a v2012.07 based downstream U-Boot that I do not have
> >> sources for, so I wouldn't be so sure there... It will only respect
> >> memreserve I think, whereas reserved-memory below is for the kernel, no?
> >
> > Sigh... Well, that may be too old. :(
> >
> > I could be wrong too and no one ever added /reserved-memory support
> > for u-boot. The intent was never that one was for u-boot and the other
> > for the kernel. The kernel handles both. reserved-memory was to
> > overcome the limitations of memreserve.
>
> What I meant was that some versions of U-Boot process and print
> memreserve regions _before_ booting into the kernel, i.e. we don't want
> U-Boot's bootX commands to write data into the reserved regions.
> /reserved-memory allows the kernel/bootloader to associate memory
> regions with drivers via memory-region node references and to steer
> whether or not the reserved memory remains mapped.
>
> >>>> +#include <dt-bindings/interrupt-controller/arm-gic.h>
> >>>> +
> >>>> +/ {
> >>>> +    compatible = "realtek,rtd1195";
> >>>> +    interrupt-parent = <&gic>;
> >>>> +    #address-cells = <1>;
> >>>> +    #size-cells = <1>;
> >>>> +
> >>>> +    cpus {
> >>>> +            #address-cells = <1>;
> >>>> +            #size-cells = <0>;
> >>>> +
> >>>> +            cpu0: cpu@0 {
> >>>> +                    device_type = "cpu";
> >>>> +                    compatible = "arm,cortex-a7";
> >>>> +                    reg = <0x0>;
> >>>> +                    clock-frequency = <1000000000>;
> >>>> +            };
> >>>> +
> >>>> +            cpu1: cpu@1 {
> >>>> +                    device_type = "cpu";
> >>>> +                    compatible = "arm,cortex-a7";
> >>>> +                    reg = <0x1>;
> >>>> +                    clock-frequency = <1000000000>;
> >>>> +            };
> >>>> +    };
> >>>> +
> >>>> +    reserved-memory {
> >>>> +            #address-cells = <1>;
> >>>> +            #size-cells = <1>;
> >>>> +            ranges;
> >>>> +
> >>>> +            secure@10000000 {
> >>>> +                    reg = <0x10000000 0x100000>;
> >>>> +                    no-map;
> >>>> +            };
> >>>> +
> >>>> +            rbus@18000000 {
> >>>> +                    reg = <0x18000000 0x100000>;
> >>>> +                    no-map;
> >>>
> >>> This doesn't look right as it overlaps the register space.
> >>
> >> Will try dropping it. James?
>
> My testing (with irqchip patches) shows that leaving the memreserve in
> place and dropping this node leads to the following error:
>
> [    0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
> [    0.000000] ------------[ cut here ]------------
> [    0.000000] WARNING: CPU: 0 PID: 0 at arch/arm/mm/ioremap.c:304
> __arm_ioremap_pfn_caller+0x1e4/0x208
> [    0.000000] Modules linked in:
> [    0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted
> 5.4.0-rc5-next-20191029+ #152
> [    0.000000] Hardware name: Generic DT based system
> [    0.000000] [<c022f468>] (unwind_backtrace) from [<c022bca0>]
> (show_stack+0x10/0x14)
> [    0.000000] [<c022bca0>] (show_stack) from [<c08ab7c0>]
> (dump_stack+0x78/0x8c)
> [    0.000000] [<c08ab7c0>] (dump_stack) from [<c023e344>]
> (__warn+0xbc/0xd8)
> [    0.000000] [<c023e344>] (__warn) from [<c023e3c4>]
> (warn_slowpath_fmt+0x64/0xc4)
> [    0.000000] [<c023e3c4>] (warn_slowpath_fmt) from [<c02359c8>]
> (__arm_ioremap_pfn_caller+0x1e4/0x208)
> [    0.000000] [<c02359c8>] (__arm_ioremap_pfn_caller) from [<c0235a88>]
> (ioremap+0x20/0x28)
> [    0.000000] [<c0235a88>] (ioremap) from [<c0739318>] (of_iomap+0x40/0x64)
> [    0.000000] [<c0739318>] (of_iomap) from [<c0e199c8>]
> (rtd119x_irq_mux_init+0x3c/0x134)
> [    0.000000] [<c0e199c8>] (rtd119x_irq_mux_init) from [<c0e21e48>]
> (of_irq_init+0x194/0x2b4)
> [    0.000000] [<c0e21e48>] (of_irq_init) from [<c0e029f4>]
> (init_IRQ+0x24/0x78)
> [    0.000000] [<c0e029f4>] (init_IRQ) from [<c0e00c00>]
> (start_kernel+0x29c/0x488)
> [    0.000000] [<c0e00c00>] (start_kernel) from [<00000000>] (0x0)
> [    0.000000] random: get_random_bytes called from
> print_oops_end_marker+0x24/0x4c with crng_init=0
> [    0.000000] ---[ end trace 0000000000000000 ]---
> [    0.000000] 8<--- cut here ---
> [    0.000000] Unable to handle kernel NULL pointer dereference at
> virtual address 00000040
> [    0.000000] pgd = (ptrval)
> [    0.000000] [00000040] *pgd=80000000104003, *pmd=00000000
> [    0.000000] Internal error: Oops: a06 [#1] PREEMPT SMP ARM
> [    0.000000] Modules linked in:
> [    0.000000] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G        W
>  5.4.0-rc5-next-20191029+ #152
> [    0.000000] Hardware name: Generic DT based system
> [    0.000000] PC is at rtd119x_irq_mux_init+0x94/0x134
> [    0.000000] LR is at 0x0
> [    0.000000] pc : [<c0e19a20>]    lr : [<00000000>]    psr: a00000d3
> [    0.000000] sp : c1001f38  ip : eb001d80  fp : c0bdb7d0
> [    0.000000] r10: 00000100  r9 : 00000122  r8 : 00000000
> [    0.000000] r7 : c0a4dd8c  r6 : ef5f8fbc  r5 : eb001d40  r4 : 00000040
> [    0.000000] r3 : 00000004  r2 : 00000000  r1 : 00000000  r0 : 00000040
> [    0.000000] Flags: NzCv  IRQs off  FIQs off  Mode SVC_32  ISA ARM
> Segment user
> [    0.000000] Control: 30c5387d  Table: 00103000  DAC: fffffffd
> [    0.000000] Process swapper/0 (pid: 0, stack limit = 0x(ptrval))
> [    0.000000] Stack: (0xc1001f38 to 0xc1002000)
> [    0.000000] 1f20:
>    00000122 00000100
> [    0.000000] 1f40: eb001cc0 ef5f9a20 c1001f64 c1001f6c eb001d00
> c0e21e48 c105b2ec c0284348
> [    0.000000] 1f60: 00000000 eb001d00 eb001d00 c1001f6c c1001f6c
> c1003e50 00000001 c0e32a30
> [    0.000000] 1f80: c1003e40 c10617dc c1035d80 ffffffff cccccccd
> 00000001 c0e32a40 c0e029f4
> [    0.000000] 1fa0: cccccccd c0e00c00 ffffffff ffffffff 00000000
> c0e00584 00000000 ef5f7e00
> [    0.000000] 1fc0: 00000000 c0e32a40 00000000 c1003e50 00000000
> c0e00330 00000000 30c0387d
> [    0.000000] 1fe0: 0000138a 01ff2000 410fc075 30c5387d 00000000
> 00000000 00000000 00000000
> [    0.000000] [<c0e19a20>] (rtd119x_irq_mux_init) from [<c0e21e48>]
> (of_irq_init+0x194/0x2b4)
> [    0.000000] [<c0e21e48>] (of_irq_init) from [<c0e029f4>]
> (init_IRQ+0x24/0x78)
> [    0.000000] [<c0e029f4>] (init_IRQ) from [<c0e00c00>]
> (start_kernel+0x29c/0x488)
> [    0.000000] [<c0e00c00>] (start_kernel) from [<00000000>] (0x0)
> [    0.000000] Code: e5853004 e5970008 e0844000 e5854008 (e5848000)
> [    0.000000] ---[ end trace f68728a0d3053b52 ]---
> [    0.000000] Kernel panic - not syncing: Attempted to kill the idle task!
> [    0.000000] ---[ end Kernel panic - not syncing: Attempted to kill
> the idle task! ]---
>
> This appears to be in part a bug in my error handling of of_iomap - it
> returns NULL, not PTR_ERR(). But even with that fixed I get fatal errors
> at some point.
>
> The workaround I have is a custom mach-realtek machine_desc with .map_io
> assigning explicit .virtual addresses and MT_DEVICE for these ranges. I
> also experimented with .reserve removing three memblocks, so we have a
> puzzle of four places messing with the same memory regions and some
> combinations working in the end, unclear why exactly.

The problem is the memory node range is overlapping with with
peripheral space. Using reserved regions is not the way to fix that.
The memory node should be fixed. Unfortunately, u-boot probably
overwrites whatever you put in the dts (at least it used to) and if
you can't change u-boot, then a fixup in .reserve should be the right
fix.

Rob

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2019-10-30 14:01 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20191021021035.7032-1-afaerber@suse.de>
2019-10-21  2:10 ` [PATCH 1/3] dt-bindings: arm: realtek: Add RTD1195 and MeLE X1000 Andreas Färber
2019-10-29 15:41   ` Rob Herring
2019-10-21  2:10 ` [PATCH 2/3] ARM: Prepare Realtek RTD1195 Andreas Färber
2019-10-21  2:10 ` [PATCH 3/3] ARM: dts: Prepare Realtek RTD1195 and MeLE X1000 Andreas Färber
2019-10-29 15:41   ` Rob Herring
2019-10-29 15:52     ` Andreas Färber
2019-10-29 20:40       ` Rob Herring
2019-10-30  3:49         ` Andreas Färber
2019-10-30 14:01           ` Rob Herring

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).