[U-Boot] [PATCH 0/2] Changes to Z-turn dts

From: Anton Gerasimov tossel@gmail.com
A device tree for MYIR Z-turn board was recently (almost) merged to Linux kernel and a few issues arised in the review process. The issues are fixed by the patches below. The dts is still not exactly the same as one in Linux because of 'u-boot,dm-pre-reloc' and qspi device, hope that's allright.
Anton Gerasimov (2): ARM: dts: zynq: Update dts for Z-turn board ARM: dts: zynq: Rename dts for Z-turn board
arch/arm/dts/Makefile | 2 +- .../dts/{zynq-zturn-myir.dts => zynq-zturn.dts} | 64 +++++----------------- 2 files changed, 14 insertions(+), 52 deletions(-) rename arch/arm/dts/{zynq-zturn-myir.dts => zynq-zturn.dts} (53%)

From: Anton Gerasimov tossel@gmail.com
Delete devices implemented in PL, stylistic changes.
Signed-off-by: Anton Gerasimov tossel@gmail.com --- arch/arm/dts/zynq-zturn-myir.dts | 64 ++++++++-------------------------------- 1 file changed, 13 insertions(+), 51 deletions(-)
diff --git a/arch/arm/dts/zynq-zturn-myir.dts b/arch/arm/dts/zynq-zturn-myir.dts index a5ecfcc1d7..b6661d0205 100644 --- a/arch/arm/dts/zynq-zturn-myir.dts +++ b/arch/arm/dts/zynq-zturn-myir.dts @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Copyright (C) 2015 Andrea Merello adnrea.merello@gmail.com * Copyright (C) 2017 Alexander Graf agraf@suse.de @@ -6,87 +7,49 @@ * Copyright (C) 2011 - 2014 Xilinx * Copyright (C) 2012 National Instruments Corp. * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ + /dts-v1/; /include/ "zynq-7000.dtsi"
/ { model = "Zynq Z-Turn MYIR Board"; - compatible = "xlnx,zynq-7000"; + compatible = "myir,zynq-zturn", "xlnx,zynq-7000";
aliases { ethernet0 = &gem0; serial0 = &uart1; serial1 = &uart0; - spi0 = &qspi; - mmc0 = &sdhci0; };
- memory { + memory@0 { device_type = "memory"; reg = <0x0 0x40000000>; };
chosen { - stdout-path = "serial0:115200n8"; + bootargs = "console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait"; };
gpio-leds { compatible = "gpio-leds"; - led_r { - label = "led_r"; - gpios = <&gpio0 0x72 0x1>; - default-state = "on"; - linux,default-trigger = "heartbeat"; - }; - - led_g { - label = "led_g"; - gpios = <&gpio0 0x73 0x1>; - default-state = "on"; - linux,default-trigger = "heartbeat"; - }; - - led_b { - label = "led_b"; - gpios = <&gpio0 0x74 0x1>; - default-state = "on"; - linux,default-trigger = "heartbeat"; - }; - - usr_led1 { - label = "usr_led1"; + usr-led1 { + label = "usr-led1"; gpios = <&gpio0 0x0 0x1>; default-state = "off"; - linux,default-trigger = "none"; };
- usr_led2 { - label = "usr_led2"; + usr-led2 { + label = "usr-led2"; gpios = <&gpio0 0x9 0x1>; default-state = "off"; - linux,default-trigger = "none"; }; };
- gpio-beep { - compatible = "gpio-beeper"; - label = "pl-beep"; - gpios = <&gpio0 0x75 0x0>; - }; - gpio-keys { compatible = "gpio-keys"; - #address-cells = <0x1>; - #size-cells = <0x0>; + #address-cells = <1>; + #size-cells = <0>; autorepeat; K1 { label = "K1"; @@ -100,7 +63,6 @@
&clkc { ps-clk-frequency = <33333333>; - fclk-enable = <0xf>; };
&qspi { @@ -152,8 +114,8 @@ reg = <0x49>; };
- adxl345@53 { - compatible = "adi,adxl34x", "adxl34x"; + accelerometer@53 { + compatible = "adi,adxl345", "adxl345"; reg = <0x53>; interrupt-parent = <&intc>; interrupts = <0x0 0x1e 0x4>;

On 13.03.18 21:35, tossel@gmail.com wrote:
From: Anton Gerasimov tossel@gmail.com
Delete devices implemented in PL, stylistic changes.
Signed-off-by: Anton Gerasimov tossel@gmail.com
arch/arm/dts/zynq-zturn-myir.dts | 64 ++++++++-------------------------------- 1 file changed, 13 insertions(+), 51 deletions(-)
diff --git a/arch/arm/dts/zynq-zturn-myir.dts b/arch/arm/dts/zynq-zturn-myir.dts index a5ecfcc1d7..b6661d0205 100644 --- a/arch/arm/dts/zynq-zturn-myir.dts +++ b/arch/arm/dts/zynq-zturn-myir.dts @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 /*
- Copyright (C) 2015 Andrea Merello adnrea.merello@gmail.com
- Copyright (C) 2017 Alexander Graf agraf@suse.de
@@ -6,87 +7,49 @@
- Copyright (C) 2011 - 2014 Xilinx
- Copyright (C) 2012 National Instruments Corp.
- This software is licensed under the terms of the GNU General Public
- License version 2, as published by the Free Software Foundation, and
- may be copied, distributed, and modified under those terms.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*/
- GNU General Public License for more details.
/dts-v1/; /include/ "zynq-7000.dtsi"
/ { model = "Zynq Z-Turn MYIR Board";
- compatible = "xlnx,zynq-7000";
- compatible = "myir,zynq-zturn", "xlnx,zynq-7000";
ack.
aliases { ethernet0 = &gem0; serial0 = &uart1; serial1 = &uart0;
spi0 = &qspi;
mmc0 = &sdhci0;
};
memory {
- memory@0 {
Why?
device_type = "memory"; reg = <0x0 0x40000000>;
};
chosen {
stdout-path = "serial0:115200n8";
Nack. By default graphical output is quite unusable on this board, so we want to output to serial.
If your Linux submitted device tree doesn't contain this part, please fix it there.
bootargs = "console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait";
This is even worse. Please don't prepopulate any bootargs, otherwise people may end up assuming that they're actually getting used.
};
gpio-leds { compatible = "gpio-leds";
led_r {
label = "led_r";
gpios = <&gpio0 0x72 0x1>;
default-state = "on";
linux,default-trigger = "heartbeat";
};
led_g {
label = "led_g";
gpios = <&gpio0 0x73 0x1>;
default-state = "on";
linux,default-trigger = "heartbeat";
};
led_b {
label = "led_b";
gpios = <&gpio0 0x74 0x1>;
default-state = "on";
linux,default-trigger = "heartbeat";
};
Why remove them? They're hard wired on the board, no?
usr_led1 {
label = "usr_led1";
usr-led1 {
label = "usr-led1"; gpios = <&gpio0 0x0 0x1>; default-state = "off";
linux,default-trigger = "none";
};
usr_led2 {
label = "usr_led2";
usr-led2 {
label = "usr-led2"; gpios = <&gpio0 0x9 0x1>; default-state = "off";
linux,default-trigger = "none";
}; };
gpio-beep {
compatible = "gpio-beeper";
label = "pl-beep";
gpios = <&gpio0 0x75 0x0>;
};
This one is in PL, so ack.
- gpio-keys { compatible = "gpio-keys";
#address-cells = <0x1>;
#size-cells = <0x0>;
#address-cells = <1>;
#size-cells = <0>;
ack
autorepeat; K1 { label = "K1";
@@ -100,7 +63,6 @@
&clkc { ps-clk-frequency = <33333333>;
- fclk-enable = <0xf>;
Why?
};
&qspi { @@ -152,8 +114,8 @@ reg = <0x49>; };
- adxl345@53 {
compatible = "adi,adxl34x", "adxl34x";
- accelerometer@53 {
compatible = "adi,adxl345", "adxl345";
You can't just remove compatibles. Device trees are supposed to be compatible with whatever used them before someone thought they want to prettify them, so in this case you'd have to add the concrete names in the list before the abstract ones:
compatible = "adi,adxl345", "adxl345", "adi,adxl34x", "adxl34x";
Alex
reg = <0x53>; interrupt-parent = <&intc>; interrupts = <0x0 0x1e 0x4>;

On 13.3.2018 22:21, Alexander Graf wrote:
On 13.03.18 21:35, tossel@gmail.com wrote:
From: Anton Gerasimov tossel@gmail.com
Delete devices implemented in PL, stylistic changes.
Signed-off-by: Anton Gerasimov tossel@gmail.com
arch/arm/dts/zynq-zturn-myir.dts | 64 ++++++++-------------------------------- 1 file changed, 13 insertions(+), 51 deletions(-)
diff --git a/arch/arm/dts/zynq-zturn-myir.dts b/arch/arm/dts/zynq-zturn-myir.dts index a5ecfcc1d7..b6661d0205 100644 --- a/arch/arm/dts/zynq-zturn-myir.dts +++ b/arch/arm/dts/zynq-zturn-myir.dts @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 /*
- Copyright (C) 2015 Andrea Merello adnrea.merello@gmail.com
- Copyright (C) 2017 Alexander Graf agraf@suse.de
@@ -6,87 +7,49 @@
- Copyright (C) 2011 - 2014 Xilinx
- Copyright (C) 2012 National Instruments Corp.
- This software is licensed under the terms of the GNU General Public
- License version 2, as published by the Free Software Foundation, and
- may be copied, distributed, and modified under those terms.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*/
- GNU General Public License for more details.
/dts-v1/; /include/ "zynq-7000.dtsi"
/ { model = "Zynq Z-Turn MYIR Board";
- compatible = "xlnx,zynq-7000";
- compatible = "myir,zynq-zturn", "xlnx,zynq-7000";
ack.
aliases { ethernet0 = &gem0; serial0 = &uart1; serial1 = &uart0;
spi0 = &qspi;
mmc0 = &sdhci0;
};
memory {
- memory@0 {
Why?
node with regs should have @number. DTC is checking that W=1.
device_type = "memory"; reg = <0x0 0x40000000>;
};
chosen {
stdout-path = "serial0:115200n8";
Nack. By default graphical output is quite unusable on this board, so we want to output to serial.
If your Linux submitted device tree doesn't contain this part, please fix it there.
bootargs = "console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait";
This is even worse. Please don't prepopulate any bootargs, otherwise people may end up assuming that they're actually getting used.
};
gpio-leds { compatible = "gpio-leds";
led_r {
label = "led_r";
gpios = <&gpio0 0x72 0x1>;
default-state = "on";
linux,default-trigger = "heartbeat";
};
led_g {
label = "led_g";
gpios = <&gpio0 0x73 0x1>;
default-state = "on";
linux,default-trigger = "heartbeat";
};
led_b {
label = "led_b";
gpios = <&gpio0 0x74 0x1>;
default-state = "on";
linux,default-trigger = "heartbeat";
};
Why remove them? They're hard wired on the board, no?
zynq has 54 MIO and all numbers above are routed via PL. It means this depends on PL.
usr_led1 {
label = "usr_led1";
usr-led1 {
label = "usr-led1"; gpios = <&gpio0 0x0 0x1>; default-state = "off";
linux,default-trigger = "none";
};
usr_led2 {
label = "usr_led2";
usr-led2 {
label = "usr-led2"; gpios = <&gpio0 0x9 0x1>; default-state = "off";
linux,default-trigger = "none";
}; };
gpio-beep {
compatible = "gpio-beeper";
label = "pl-beep";
gpios = <&gpio0 0x75 0x0>;
};
This one is in PL, so ack.
- gpio-keys { compatible = "gpio-keys";
#address-cells = <0x1>;
#size-cells = <0x0>;
#address-cells = <1>;
#size-cells = <0>;
ack
autorepeat; K1 { label = "K1";
@@ -100,7 +63,6 @@
&clkc { ps-clk-frequency = <33333333>;
- fclk-enable = <0xf>;
Why?
fclk-enable is enabling clocks for PL. It exactly means enable all 4 clocks to PL which is PL dependent that's why it shouldn't be here.
Thanks, MIchal

On 03/14/2018 02:05 PM, Michal Simek wrote:
On 13.3.2018 22:21, Alexander Graf wrote:
On 13.03.18 21:35, tossel@gmail.com wrote:
From: Anton Gerasimov tossel@gmail.com
Delete devices implemented in PL, stylistic changes.
Signed-off-by: Anton Gerasimov tossel@gmail.com
arch/arm/dts/zynq-zturn-myir.dts | 64 ++++++++-------------------------------- 1 file changed, 13 insertions(+), 51 deletions(-)
diff --git a/arch/arm/dts/zynq-zturn-myir.dts b/arch/arm/dts/zynq-zturn-myir.dts index a5ecfcc1d7..b6661d0205 100644 --- a/arch/arm/dts/zynq-zturn-myir.dts +++ b/arch/arm/dts/zynq-zturn-myir.dts @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0 /*
- Copyright (C) 2015 Andrea Merello adnrea.merello@gmail.com
- Copyright (C) 2017 Alexander Graf agraf@suse.de
@@ -6,87 +7,49 @@
- Copyright (C) 2011 - 2014 Xilinx
- Copyright (C) 2012 National Instruments Corp.
- This software is licensed under the terms of the GNU General Public
- License version 2, as published by the Free Software Foundation, and
- may be copied, distributed, and modified under those terms.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*/
- GNU General Public License for more details.
/dts-v1/; /include/ "zynq-7000.dtsi"
/ { model = "Zynq Z-Turn MYIR Board";
- compatible = "xlnx,zynq-7000";
- compatible = "myir,zynq-zturn", "xlnx,zynq-7000";
ack.
aliases { ethernet0 = &gem0; serial0 = &uart1; serial1 = &uart0;
spi0 = &qspi;
mmc0 = &sdhci0;
};
memory {
- memory@0 {
Why?
node with regs should have @number. DTC is checking that W=1.
device_type = "memory"; reg = <0x0 0x40000000>;
};
chosen {
stdout-path = "serial0:115200n8";
Nack. By default graphical output is quite unusable on this board, so we want to output to serial.
If your Linux submitted device tree doesn't contain this part, please fix it there.
bootargs = "console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait";
This is even worse. Please don't prepopulate any bootargs, otherwise people may end up assuming that they're actually getting used.
};
gpio-leds { compatible = "gpio-leds";
led_r {
label = "led_r";
gpios = <&gpio0 0x72 0x1>;
default-state = "on";
linux,default-trigger = "heartbeat";
};
led_g {
label = "led_g";
gpios = <&gpio0 0x73 0x1>;
default-state = "on";
linux,default-trigger = "heartbeat";
};
led_b {
label = "led_b";
gpios = <&gpio0 0x74 0x1>;
default-state = "on";
linux,default-trigger = "heartbeat";
};
Why remove them? They're hard wired on the board, no?
zynq has 54 MIO and all numbers above are routed via PL. It means this depends on PL.
usr_led1 {
label = "usr_led1";
usr-led1 {
label = "usr-led1"; gpios = <&gpio0 0x0 0x1>; default-state = "off";
linux,default-trigger = "none";
};
usr_led2 {
label = "usr_led2";
usr-led2 {
label = "usr-led2"; gpios = <&gpio0 0x9 0x1>; default-state = "off";
linux,default-trigger = "none";
}; };
gpio-beep {
compatible = "gpio-beeper";
label = "pl-beep";
gpios = <&gpio0 0x75 0x0>;
};
This one is in PL, so ack.
- gpio-keys { compatible = "gpio-keys";
#address-cells = <0x1>;
#size-cells = <0x0>;
#address-cells = <1>;
#size-cells = <0>;
ack
autorepeat; K1 { label = "K1";
@@ -100,7 +63,6 @@
&clkc { ps-clk-frequency = <33333333>;
- fclk-enable = <0xf>;
Why?
fclk-enable is enabling clocks for PL. It exactly means enable all 4 clocks to PL which is PL dependent that's why it shouldn't be here.
IIRC on my Z-Turn, I had to take a PL clock back into the PS as AXI reference clock. See "Connect clocks" here:
https://wiki.hackerspace.pl/projects:zturn-hackers:helloworld
So we need to have the PL clock enabled, no? Or is that only needed for PL AXI peripherals?
Alex

Hi Alexander,
device_type = "memory"; reg = <0x0 0x40000000>;
};
chosen {
stdout-path = "serial0:115200n8";
Nack. By default graphical output is quite unusable on this board, so we want to output to serial.
If your Linux submitted device tree doesn't contain this part, please fix it there.
bootargs = "console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait";
This is even worse. Please don't prepopulate any bootargs, otherwise people may end up assuming that they're actually getting used.
The older one is much cleaner I agree, thank you. I'll just need to test with both u-boot and linux.
};
gpio-leds { compatible = "gpio-leds";
led_r {
label = "led_r";
gpios = <&gpio0 0x72 0x1>;
default-state = "on";
linux,default-trigger = "heartbeat";
};
led_g {
label = "led_g";
gpios = <&gpio0 0x73 0x1>;
default-state = "on";
linux,default-trigger = "heartbeat";
};
led_b {
label = "led_b";
gpios = <&gpio0 0x74 0x1>;
default-state = "on";
linux,default-trigger = "heartbeat";
};
Why remove them? They're hard wired on the board, no?
No this RGB LED is connected to PL, that's for sure.
ps-clk-frequency = <33333333>;
- fclk-enable = <0xf>;
Why?
IIRC on my Z-Turn, I had to take a PL clock back into the PS as AXI reference clock. See "Connect clocks" here:
https://wiki.hackerspace.pl/projects:zturn-hackers:helloworld
So we need to have the PL clock enabled, no? Or is that only needed for PL AXI peripherals?
As far as I understand M_AXI_GPn connects AXI slaves implemented on PL to AXI and S_AXI_HPn provides access for AXI slaves in PS to PL slaves. So both involve PL and can be disconnected if PL is not clocked.
};
&qspi { @@ -152,8 +114,8 @@ reg = <0x49>; };
- adxl345@53 {
compatible = "adi,adxl34x", "adxl34x";
- accelerometer@53 {
compatible = "adi,adxl345", "adxl345";
You can't just remove compatibles. Device trees are supposed to be compatible with whatever used them before someone thought they want to prettify them, so in this case you'd have to add the concrete names in the list before the abstract ones:
compatible = "adi,adxl345", "adxl345", "adi,adxl34x", "adxl34x";
Yes sorry, I didn't realize that Linux kernel had both.
Best, Anton

On 14.3.2018 23:40, Anton Gerasimov wrote:
Hi Alexander,
device_type = "memory"; reg = <0x0 0x40000000>; }; chosen { - stdout-path = "serial0:115200n8";
Nack. By default graphical output is quite unusable on this board, so we want to output to serial.
If your Linux submitted device tree doesn't contain this part, please fix it there.
+ bootargs = "console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait";
This is even worse. Please don't prepopulate any bootargs, otherwise people may end up assuming that they're actually getting used.
The older one is much cleaner I agree, thank you. I'll just need to test with both u-boot and linux.
}; gpio-leds { compatible = "gpio-leds"; - led_r { - label = "led_r"; - gpios = <&gpio0 0x72 0x1>; - default-state = "on"; - linux,default-trigger = "heartbeat"; - };
- led_g { - label = "led_g"; - gpios = <&gpio0 0x73 0x1>; - default-state = "on"; - linux,default-trigger = "heartbeat"; - };
- led_b { - label = "led_b"; - gpios = <&gpio0 0x74 0x1>; - default-state = "on"; - linux,default-trigger = "heartbeat"; - };
Why remove them? They're hard wired on the board, no?
No this RGB LED is connected to PL, that's for sure.
ps-clk-frequency = <33333333>; - fclk-enable = <0xf>;
Why?
IIRC on my Z-Turn, I had to take a PL clock back into the PS as AXI reference clock. See "Connect clocks" here:
https://wiki.hackerspace.pl/projects:zturn-hackers:helloworld
So we need to have the PL clock enabled, no? Or is that only needed for PL AXI peripherals?
As far as I understand M_AXI_GPn connects AXI slaves implemented on PL to AXI and S_AXI_HPn provides access for AXI slaves in PS to PL slaves. So both involve PL and can be disconnected if PL is not clocked.
As you see that connection is done via PL. I am booting zynq boards without fclk-enable and without PL and they are booting properly. I have never had a time to investing what it is broken if you don't load bitstream. Definitely feel free to test. And as you see only one clk is used not all 4.
}; &qspi { @@ -152,8 +114,8 @@ reg = <0x49>; }; - adxl345@53 { - compatible = "adi,adxl34x", "adxl34x"; + accelerometer@53 { + compatible = "adi,adxl345", "adxl345";
You can't just remove compatibles. Device trees are supposed to be compatible with whatever used them before someone thought they want to prettify them, so in this case you'd have to add the concrete names in the list before the abstract ones:
compatible = "adi,adxl345", "adxl345", "adi,adxl34x", "adxl34x";
Yes sorry, I didn't realize that Linux kernel had both.
Ok. I think it will be good to sync these two dts with the kernel. It means can you please send new updated version for linux kernel too?
Thanks, Michal

From: Anton Gerasimov tossel@gmail.com
Makes naming in line with other Zynq boards.
Signed-off-by: Anton Gerasimov tossel@gmail.com --- arch/arm/dts/Makefile | 2 +- arch/arm/dts/{zynq-zturn-myir.dts => zynq-zturn.dts} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename arch/arm/dts/{zynq-zturn-myir.dts => zynq-zturn.dts} (100%)
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 20a4c37d48..83aa2f4df4 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -143,7 +143,7 @@ dtb-$(CONFIG_ARCH_ZYNQ) += \ zynq-zc770-xm012.dtb \ zynq-zc770-xm013.dtb \ zynq-zed.dtb \ - zynq-zturn-myir.dtb \ + zynq-zturn.dtb \ zynq-zybo.dtb dtb-$(CONFIG_ARCH_ZYNQMP) += \ zynqmp-ep108.dtb \ diff --git a/arch/arm/dts/zynq-zturn-myir.dts b/arch/arm/dts/zynq-zturn.dts similarity index 100% rename from arch/arm/dts/zynq-zturn-myir.dts rename to arch/arm/dts/zynq-zturn.dts
participants (4)
-
Alexander Graf
-
Anton Gerasimov
-
Michal Simek
-
tossel@gmail.com