Re: [PATCH] arm64: dts: ti: Add support for Siemens IOT2050 boards
From: Jan Kiszka <jan.kiszka@siemens.com>
Date: 2021-02-09 17:55:12
Also in:
linux-arm-kernel, lkml
On 09.02.21 15:44, Nishanth Menon wrote:
Jan, A few quick scan comments below, you might need to post based off 5.12-rc1 once available.. Also, I see a bit of warnings with dtbs_check, which probably needs a little more digging into (pcie insists to get a device_type property, etc..) you could use kernel_patch_verify or https://github.com/nmenon/kernel_patch_verify/blob/master/Dockerbuild.md it throws up a report like this https://pastebin.ubuntu.com/p/SdkZr432z3/
Ok, will have a look - is that checkpatch on steroids?
So, many of my comments below are just first pass parse of that log -> I usually do recommend building with W=2 and dtbs_check (with yamlint etc) to make sure things are a bit sane. Will be good to have additional eyes. On 11:21-20210209, Jan Kiszka wrote:quoted
From: Jan Kiszka <jan.kiszka@siemens.com> Add support for two Siemens SIMATIC IOT2050 variants, Basic and Advanced. They are based on the TI AM6528 and AM6548 SOCs. Based on original version by Le Jin.Might be good to add links to the boards as well (if available), for future reference.
Sure, though stability of links is not under my control. But I could additionally drop https://github.com/siemens/meta-iot2050 here.
quoted
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> ---Will be nice to see at least a pastebin link for a bootlog on the boards in the cover-letter / diffstat section with the v2 - for reference.
Sure.
quoted
.../devicetree/bindings/arm/ti/k3.yaml | 2 + arch/arm64/boot/dts/ti/Makefile | 4 + .../boot/dts/ti/k3-am65-iot2050-common.dtsi | 649 ++++++++++++++++++ .../boot/dts/ti/k3-am6528-iot2050-basic.dts | 56 ++ .../dts/ti/k3-am6548-iot2050-advanced.dts | 57 ++ 5 files changed, 768 insertions(+) create mode 100644 arch/arm64/boot/dts/ti/k3-am65-iot2050-common.dtsi create mode 100644 arch/arm64/boot/dts/ti/k3-am6528-iot2050-basic.dts create mode 100644 arch/arm64/boot/dts/ti/k3-am6548-iot2050-advanced.dtsdiff --git a/Documentation/devicetree/bindings/arm/ti/k3.yaml b/Documentation/devicetree/bindings/arm/ti/k3.yaml index c6e1c1e63e43..b1ab0cf4a2d6 100644 --- a/Documentation/devicetree/bindings/arm/ti/k3.yaml +++ b/Documentation/devicetree/bindings/arm/ti/k3.yaml@@ -23,6 +23,8 @@ properties: items: - enum: - ti,am654-evm + - siemens,iot2050-basic + - siemens,iot2050-advanced- In a separate patch, ./Documentation/devicetree/bindings/vendor-prefixes.yaml -> Could you make sure we add 'siemens' there? - and, lets move the bindings to it's own patch, since that is how Rob prefers to review in https://patchwork.ozlabs.org/project/devicetree-bindings/list/ Both of these patches will need Rob to ack. I think I should be able to pick the first one up as well to reduce dependency, but we can check with Rob in case there is a preference.
Ok.
quoted
- const: ti,am654 - description: K3 J721E SoCdiff --git a/arch/arm64/boot/dts/ti/Makefile b/arch/arm64/boot/dts/ti/Makefile index 65506f21ba30..928ea26ce250 100644 --- a/arch/arm64/boot/dts/ti/Makefile +++ b/arch/arm64/boot/dts/ti/Makefile@@ -8,6 +8,10 @@ dtb-$(CONFIG_ARCH_K3) += k3-am654-base-board.dtb- drop the EOL to club am65 dtbs close to each otherquoted
+dtb-$(CONFIG_ARCH_K3) += k3-am6528-iot2050-basic.dtb +- Drop this EOL as well. Something like this: dtb-$(CONFIG_ARCH_K3) += k3-am654-base-board.dtb dtb-$(CONFIG_ARCH_K3) += k3-am6528-iot2050-basic.dtb dtb-$(CONFIG_ARCH_K3) += k3-am6548-iot2050-advanced.dtb dtb-$(CONFIG_ARCH_K3) += k3-j721e-common-proc-board.dtbquoted
+dtb-$(CONFIG_ARCH_K3) += k3-am6548-iot2050-advanced.dtb + dtb-$(CONFIG_ARCH_K3) += k3-j721e-common-proc-board.dtb dtb-$(CONFIG_ARCH_K3) += k3-j7200-common-proc-board.dtbdiff --git a/arch/arm64/boot/dts/ti/k3-am65-iot2050-common.dtsi b/arch/arm64/boot/dts/ti/k3-am65-iot2050-common.dtsi new file mode 100644 index 000000000000..de05937dbb60 --- /dev/null +++ b/arch/arm64/boot/dts/ti/k3-am65-iot2050-common.dtsi@@ -0,0 +1,649 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) Siemens AG, 2018-2021 + *Optional: might be nice to add a oneliner comment for reuse scope..
You mean something like "Common bits for IOT2050 basic and advanced boards"?
quoted
+ * Authors: + * Le Jin [off-list ref] + * Jan Kiszka [off-list ref] + */ + +/dts-v1/; + +#include "k3-am654.dtsi" +#include <dt-bindings/phy/phy.h> + +/ { + aliases { + spi0 = &mcu_spi0; + }; + + chosen { + stdout-path = "serial3:115200n8"; + bootargs = "earlycon=ns16550a,mmio32,0x02800000";serial3 is main_uart1, did you mean 0x02810000 instead of 0x02800000 ?
Indeed, this is 0x02810000 here. We overwrote this in our image - will fix this occurrence.
quoted
+ }; + + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + secure_ddr: secure_ddr@9e800000 {"_" is not something we prefer for node names, so something like secure_ddr: secure-ddr@...
Yeah, should be no problem to rename.
quoted
+ reg = <0 0x9e800000 0 0x01800000>; /* for OP-TEE */ + alignment = <0x1000>; + no-map; + }; + + mcu_r5fss0_core0_dma_memory_region: r5f-dma-memory@a0000000 { + compatible = "shared-dma-pool"; + reg = <0 0xa0000000 0 0x100000>; + no-map; + }; + + mcu_r5fss0_core0_memory_region: r5f-memory@a0100000 { + compatible = "shared-dma-pool"; + reg = <0 0xa0100000 0 0xf00000>; + no-map; + }; + + mcu_r5fss0_core1_dma_memory_region: r5f-dma-memory@a1000000 { + compatible = "shared-dma-pool"; + reg = <0 0xa1000000 0 0x100000>; + no-map; + }; + + mcu_r5fss0_core1_memory_region: r5f-memory@a1100000 { + compatible = "shared-dma-pool"; + reg = <0 0xa1100000 0 0xf00000>; + no-map; + }; + + rtos_ipc_memory_region: ipc-memories@a2000000 { + reg = <0x00 0xa2000000 0x00 0x00200000>; + alignment = <0x1000>; + no-map; + }; + }; + + gpio_leds {just 'leds'?quoted
+ compatible = "gpio-leds"; + pinctrl-names = "default"; + pinctrl-0 = <&leds_pins_default>; + + status-led-red { + gpios = <&wkup_gpio0 32 GPIO_ACTIVE_HIGH>; + panic-indicator; + linux,default-trigger = "gpio"; + }; + + status-led-green { + gpios = <&wkup_gpio0 24 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "gpio"; + }; + + user-led1-red { + gpios = <&pcal9535_3 14 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "gpio"; + }; + + user-led1-green { + gpios = <&pcal9535_2 15 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "gpio"; + }; + + user-led2-red { + gpios = <&wkup_gpio0 17 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "gpio"; + }; + + user-led2-green { + gpios = <&wkup_gpio0 22 GPIO_ACTIVE_HIGH>; + linux,default-trigger = "gpio";are you sure this is "gpio" ? dtbs_check reports should be one of: ['backlight', 'default-on', 'heartbeat', 'disk-activity', 'ide-disk', 'timer', 'pattern']
Good point, never checked. None of them has a default trigger, in fact.
quoted
+ }; + }; + + dp_refclk: clock { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <19200000>; + }; +}; + +&wkup_pmx0 { + wkup_i2c0_pins_default: wkup_i2c0_pins_default {Here, and else where: wkup_i2c0_pins_default: wkup-i2c0-pins-default Prefer we dont use _ in node names (rest of the pinmux node names as well).quoted
+ pinctrl-single,pins = < + AM65X_WKUP_IOPAD(0x00e0, PIN_INPUT, 0) /* (AC7) WKUP_I2C0_SCL */ + AM65X_WKUP_IOPAD(0x00e4, PIN_INPUT, 0) /* (AD6) WKUP_I2C0_SDA */ + >; + }; + + mcu_i2c0_pins_default: mcu_i2c0_pins_default { + pinctrl-single,pins = < + AM65X_IOPAD(0x0070, PIN_INPUT, 5) /* (R25) I2C2_SDA */[... similar issues with '_' elsewhere.. ]quoted
+ >; + }; +}; + +&main_pmx1 { + main_i2c0_pins_default: main-i2c0-pins-default {these look fine..quoted
+ pinctrl-single,pins = < + AM65X_IOPAD(0x0000, PIN_INPUT, 0) /* (D20) I2C0_SCL */ + AM65X_IOPAD(0x0004, PIN_INPUT, 0) /* (C21) I2C0_SDA */ + >; + }; + + main_i2c1_pins_default: main-i2c1-pins-default { + pinctrl-single,pins = < + AM65X_IOPAD(0x0008, PIN_INPUT, 0) /* (B21) I2C1_SCL */ + AM65X_IOPAD(0x000c, PIN_INPUT, 0) /* (E21) I2C1_SDA */ + >; + }; + + ecap0_pins_default: ecap0-pins-default { + pinctrl-single,pins = < + AM65X_IOPAD(0x0010, PIN_INPUT, 0) /* (D21) ECAP0_IN_APWM_OUT */ + >; + }; +}; + +&wkup_uart0 { + /* Wakeup UART is used by System firmware */ + status = "disabled";In case of reservation for firmware usage: status = "reserved";
Ah, ok.
[...]quoted
+ +&wkup_gpio0 { + pinctrl-names = "default"; + pinctrl-0 = < + &arduino_io_d2_to_d3_pins_default + &arduino_i2c_aio_switch_pins_default + &arduino_io_oe_pins_default + &push_button_pins_default + &db9_com_mode_pins_default + >; + gpio-line-names = + "wkup_gpio0-base", "", "", "", "UART0-mode1", "UART0-mode0", + "UART0-enable", "UART0-terminate", "", "WIFI-disable", + "", "", "", "", "", "", "", "", "", "", + "", "A4A5-I2C-mux", "", "", "", "USER-button", "", "", "","IO0", + "IO1", "IO2", "", "IO3", "IO17-direction", + "A5", "IO16-direction", "IO15-direction", + "IO14-direction", "A3", + "", "IO18-direction", "A4", "A2", "A1", + "A0", "", "", "IO13", "IO11", + "IO12", "IO10";Any chance of intending this consistently?
There is in fact a plan behind this way: I intended every 10 entries, to ease counting the pins (and that proved to be valuable more than once already).
quoted
+}; + +&wkup_i2c0 { + pinctrl-names = "default"; + pinctrl-0 = <&wkup_i2c0_pins_default>; + clock-frequency = <400000>; +}; + +&mcu_i2c0 { + pinctrl-names = "default"; + pinctrl-0 = <&mcu_i2c0_pins_default>; + clock-frequency = <400000>; + + psu: tps62363@60 { + compatible = "ti,tps62363"; + reg = <0x60>; + regulator-name = "tps62363-vout"; + regulator-min-microvolt = <500000>; + regulator-max-microvolt = <1500000>; + regulator-boot-on; + /* ti,vsel0-gpio = <&gpio1 16 0>; */ + /* ti,vsel1-gpio = <&gpio1 17 0>; */Could you drop the commented out properties: above and later?
Sure, missed that. Will first check again where that came from.
quoted
+ ti,vsel0-state-high; + ti,vsel1-state-high; + /* ti,enable-pull-down; */ + /* ti,enable-force-pwm; */ + ti,enable-vout-discharge; + }; + + /*D4200*/Add a space prefix and postfix? (here and below) /* D4200 */quoted
+ pcal9535_1: gpio@20 { + compatible = "nxp,pcal9535"; + reg = <0x20>; + #gpio-cells = <2>; + gpio-controller; + gpio-line-names = + "A0-pull", "A1-pull", "A2-pull", "A3-pull", "A4-pull", + "A5-pull", "", "", + "IO14-enable", "IO15-enable", "IO16-enable", + "IO17-enable", "IO18-enable", "IO19-enable"; + }; + + /*D4201*/ + pcal9535_2: gpio@21 { + compatible = "nxp,pcal9535"; + reg = <0x21>; + #gpio-cells = <2>; + gpio-controller; + gpio-line-names = + "IO0-direction", "IO1-direction", "IO2-direction", + "IO3-direction", "IO4-direction", "IO5-direction", + "IO6-direction", "IO7-direction", + "IO8-direction", "IO9-direction", "IO10-direction", + "IO11-direction", "IO12-direction", "IO13-direction", + "IO19-direction"; + }; +[...]quoted
+ +&pcie1_rc { + pinctrl-names = "default"; + pinctrl-0 = <&minipcie_pins_default>; + + num-lanes = <1>; + phys = <&serdes1 PHY_TYPE_PCIE 0>; + phy-names = "pcie-phy0"; + reset-gpios = <&wkup_gpio0 27 GPIO_ACTIVE_HIGH>;schema seems to want a device_type, and there seems to be some warnings on serdes as well.. might be something to check up on..
Will try to understand. Maybe something changed between the BSP kernel where we are coming from and the final upstream bindings, and I missed that.
quoted
+}; + +&pcie1_ep { + status = "disabled"; +};diff --git a/arch/arm64/boot/dts/ti/k3-am6528-iot2050-basic.dts b/arch/arm64/boot/dts/ti/k3-am6528-iot2050-basic.dts new file mode 100644 index 000000000000..bb9ab4fdd74e --- /dev/null +++ b/arch/arm64/boot/dts/ti/k3-am6528-iot2050-basic.dts@@ -0,0 +1,56 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) Siemens AG, 2018-2021 + *Will be nice to explain the difference between basic and advanced dts. Are they two different boards? looks like the basic is using a part spin with a single cluster, perhaps? I guess links might help..
The main difference was mentioned in the commit message: AM6528 vs. AM6548 (dual-core, single-cluster vs. quad-core, dual-cluster). The Advanced also has 16G eMMC, 2 GB RAM (instead of 1) and exploits some security features (which leads to different external UART connectivity). Will add that to the respective dts file headers.
quoted
+ * Authors: + * Le Jin [off-list ref] + * Jan Kiszka [off-list ref] + */ + +/dts-v1/; + +#include "k3-am65-iot2050-common.dtsi" + +/ { + compatible = "siemens,iot2050-basic", "ti,am654"; + model = "SIMATIC IOT2050 Basic"; + + memory@80000000 { + device_type = "memory"; + /* 1G RAM */ + reg = <0x00000000 0x80000000 0x00000000 0x40000000>; + }; + + cpus { + cpu-map { + /delete-node/ cluster1; + }; + /delete-node/ cpu@100; + /delete-node/ cpu@101; + };Personally, I'd prefer this (handling efuse spins in board files or even overlays) instead of having to create 100s of dtsi per SoC for every permutation & combination of TI efused devices and handle these in board files. I do see examples of similar usage elsewhere in: $ git grep /delete-node/ arch/arm64/boot/dts/ But, if someone has a different opinion, feel free to pipe up with a reasonable way to prevent file explosion.quoted
+}; + +/* eMMC */ +&sdhci0 { + status = "disabled"; +}; + +&main_pmx0 { + main_uart0_pins_default: main_uart0_pins_default { + pinctrl-single,pins = < + AM65X_IOPAD(0x01e4, PIN_INPUT, 0) /* (AF11) UART0_RXD */ + AM65X_IOPAD(0x01e8, PIN_OUTPUT, 0) /* (AE11) UART0_TXD */ + AM65X_IOPAD(0x01ec, PIN_INPUT, 0) /* (AG11) UART0_CTSn */ + AM65X_IOPAD(0x01f0, PIN_OUTPUT, 0) /* (AD11) UART0_RTSn */ + AM65X_IOPAD(0x0188, PIN_INPUT, 1) /* (D25) UART0_DCDn */ + AM65X_IOPAD(0x018c, PIN_INPUT, 1) /* (B26) UART0_DSRn */ + AM65X_IOPAD(0x0190, PIN_OUTPUT, 1) /* (A24) UART0_DTRn */ + AM65X_IOPAD(0x0194, PIN_INPUT, 1) /* (E24) UART0_RIN */ + >; + }; +}; + +&main_uart0 { + pinctrl-names = "default"; + pinctrl-0 = <&main_uart0_pins_default>; +};diff --git a/arch/arm64/boot/dts/ti/k3-am6548-iot2050-advanced.dts b/arch/arm64/boot/dts/ti/k3-am6548-iot2050-advanced.dts new file mode 100644 index 000000000000..aa1ef081ef22 --- /dev/null +++ b/arch/arm64/boot/dts/ti/k3-am6548-iot2050-advanced.dts@@ -0,0 +1,57 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) Siemens AG, 2018-2021 + * + * Authors: + * Le Jin <le.jin@siemens.com> + * Jan Kiszka <jan.kiszk@siemens.com> + */ + +/dts-v1/; + +#include "k3-am65-iot2050-common.dtsi"[...]
Thanks for the review! Will come up with v2 soon, once all the points are resolved. Jan -- Siemens AG, T RDA IOT Corporate Competence Center Embedded Linux