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 <[email protected]>
---
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
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 <[email protected]>
> ---
> 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
>
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 <[email protected]>
>> ---
>> 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)
On Tue, Oct 29, 2019 at 10:52 AM Andreas Färber <[email protected]> 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 <[email protected]>
> >> ---
> >> 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
Am 29.10.19 um 21:40 schrieb Rob Herring:
> On Tue, Oct 29, 2019 at 10:52 AM Andreas Färber <[email protected]> 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 <[email protected]>
>>>> ---
>>>> 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)
On Tue, Oct 29, 2019 at 10:49 PM Andreas Färber <[email protected]> wrote:
>
> Am 29.10.19 um 21:40 schrieb Rob Herring:
> > On Tue, Oct 29, 2019 at 10:52 AM Andreas Färber <[email protected]> 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 <[email protected]>
> >>>> ---
> >>>> 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