Re: [PATCH v2] arm64: dts: imx8mp: Add device tree for Nitrogen8M Plus ENC Carrier Board
From: Krzysztof Kozlowski
Date: Thu Mar 27 2025 - 10:13:49 EST
On 27/03/2025 13:39, Martyn Welch wrote:
> Add support for Boundary Devices/Ezurio Nitrogen8M Plus ENC Carrier
> Board and it's SOM. Supported interfaces:
>
> - Serial Console
> - EQoS Ethernet
> - USB
> - eMMC
> - HDMI
>
> Signed-off-by: Martyn Welch <martyn.welch@xxxxxxxxxxxxx>
> ---
>
> Changes in v2:
> - Add missing entries to binding documents.
>
> .../devicetree/bindings/arm/fsl.yaml | 6 +
> arch/arm64/boot/dts/freescale/Makefile | 1 +
> .../imx8mp-nitrogen-enc-carrier-board.dts | 478 ++++++++++++++++++
> .../dts/freescale/imx8mp-nitrogen-som.dtsi | 415 +++++++++++++++
> 4 files changed, 900 insertions(+)
> create mode 100644 arch/arm64/boot/dts/freescale/imx8mp-nitrogen-enc-carrier-board.dts
> create mode 100644 arch/arm64/boot/dts/freescale/imx8mp-nitrogen-som.dtsi
>
> diff --git a/Documentation/devicetree/bindings/arm/fsl.yaml b/Documentation/devicetree/bindings/arm/fsl.yaml
> index 6e0dcf4307f1..de42f684c462 100644
> --- a/Documentation/devicetree/bindings/arm/fsl.yaml
> +++ b/Documentation/devicetree/bindings/arm/fsl.yaml
> @@ -1113,6 +1113,12 @@ properties:
> - const: avnet,sm2s-imx8mp # SM2S-IMX8PLUS SoM
> - const: fsl,imx8mp
>
> + - description: Boundary Device Nitrogen8M Plus ENC Carrier Board
> + items:
> + - const: boundary,imx8mp-nitrogen-enc-carrier-board
> + - const: boundary,imx8mp-nitrogen-som
> + - const: fsl,imx8mp
> +
> - description: Boundary Device Nitrogen8MP Universal SMARC Carrier Board
> items:
> - const: boundary,imx8mp-nitrogen-smarc-universal-board
That's a separate patch.
> diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
> index 42e6482a31cb..58b33708e4ee 100644
> --- a/arch/arm64/boot/dts/freescale/Makefile
> +++ b/arch/arm64/boot/dts/freescale/Makefile
> @@ -184,6 +184,7 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mp-kontron-dl.dtb
> dtb-$(CONFIG_ARCH_MXC) += imx8mp-kontron-smarc-eval-carrier.dtb
> dtb-$(CONFIG_ARCH_MXC) += imx8mp-msc-sm2s-ep1.dtb
> dtb-$(CONFIG_ARCH_MXC) += imx8mp-navqp.dtb
> +dtb-$(CONFIG_ARCH_MXC) += imx8mp-nitrogen-enc-carrier-board.dtb
> dtb-$(CONFIG_ARCH_MXC) += imx8mp-nitrogen-smarc-universal-board.dtb
> dtb-$(CONFIG_ARCH_MXC) += imx8mp-phyboard-pollux-rdk.dtb
> imx8mp-phyboard-pollux-rdk-no-eth-dtbs += imx8mp-phyboard-pollux-rdk.dtb imx8mp-phycore-no-eth.dtbo
> diff --git a/arch/arm64/boot/dts/freescale/imx8mp-nitrogen-enc-carrier-board.dts b/arch/arm64/boot/dts/freescale/imx8mp-nitrogen-enc-carrier-board.dts
> new file mode 100644
> index 000000000000..323e10b3bc58
> --- /dev/null
> +++ b/arch/arm64/boot/dts/freescale/imx8mp-nitrogen-enc-carrier-board.dts
> @@ -0,0 +1,478 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright 2020 Boundary Devices
> + * Copyright 2025 Collabora Ltd.
> + */
> +
> +/dts-v1/;
> +
> +#include "imx8mp-nitrogen-som.dtsi"
> +
> +/ {
> + model = "Boundary Devices Nitrogen8M Plus ENC Carrier Board";
> + compatible = "boundary,imx8mp-nitrogen-enc-carrier-board",
> + "boundary,imx8mp-nitrogen-som", "fsl,imx8mp";
> +
> + chosen {
> + stdout-path = &uart2;
> + };
> +
> + connector {
> + compatible = "usb-c-connector";
> + label = "USB-C";
> + data-role = "dual";
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 {
> + reg = <0>;
> + hs_ep: endpoint {
> + remote-endpoint = <&usb3_hs_ep>;
> + };
> + };
> +
> + port@1 {
> + reg = <1>;
> + ss_ep: endpoint {
> + remote-endpoint = <&hd3ss3220_in_ep>;
> + };
> + };
> + };
> + };
> +
> +
Just one blank line
> + hdmi-connector {
> + compatible = "hdmi-connector";
> + label = "hdmi";
> + type = "a";
...
> +
> +&hdmi_tx_phy {
> + status = "okay";
> +};
> +
> +&i2c2 {
> + pca9546: i2cmux9546@70 {
Node names should be generic. See also an explanation and list of
examples (not exhaustive) in DT specification:
https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html#generic-names-recommendation
> + compatible = "nxp,pca9546";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <0x70>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_i2c2_pca9546>;
> + reset-gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
> +
> + i2c2a: i2c2@0 {
Node names should be generic. See also an explanation and list of
examples (not exhaustive) in DT specification:
https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html#generic-names-recommendation
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <0>;
> + clock-frequency = <100000>;
> + };
> +
> + i2c2b: i2c2@1 {
> + /* J9 - camera*/
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <1>;
> + clock-frequency = <100000>;
> + };
> +
> + i2c2c: i2c2@2 {
> + /* J10 - camera */
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <2>;
> + clock-frequency = <100000>;
> + };
> +
> + i2c2d: i2c2@3 {
> + /* rtc, J11 mipi */
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <3>;
> + clock-frequency = <100000>;
> +
> + rtc@52 {
> + compatible = "microcrystal,rv3028";
> + reg = <0x52>;
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_rv3028>;
> + interrupts-extended = <&gpio1 4 IRQ_TYPE_LEVEL_LOW>;
> + wakeup-source;
> + };
> + };
> + };
> +};
> +
> +&i2c4 {
> + usb_mux: hd3ss3220@47 {
Node names should be generic. See also an explanation and list of
examples (not exhaustive) in DT specification:
https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html#generic-names-recommendation
...
> + pinctrl_reg_usb1_vbus: reg-usb1_vbusgrp {
No underscores in node names.
> + fsl,pins = <
> + MX8MP_IOMUXC_GPIO1_IO06__GPIO1_IO06 0x100
> + >;
> + };
> +
> + pinctrl_uart2: uart2grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_UART2_RXD__UART2_DCE_RX 0x140
> + MX8MP_IOMUXC_UART2_TXD__UART2_DCE_TX 0x140
> + >;
> + };
> +
> + pinctrl_uart3: uart3grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_ECSPI1_MOSI__UART3_DCE_TX 0x140
> + MX8MP_IOMUXC_ECSPI1_SCLK__UART3_DCE_RX 0x140
> + >;
> + };
> +
> + pinctrl_uart4: uart4grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_UART4_RXD__UART4_DCE_RX 0x140
> + MX8MP_IOMUXC_UART4_TXD__UART4_DCE_TX 0x140
> + >;
> + };
> +
> + pinctrl_usb3_0: usb3-0grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_GPIO1_IO13__USB1_OTG_OC 0x1c0
> + >;
> + };
> +
> + pinctrl_usb3_1: usb3-1grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_GPIO1_IO06__GPIO1_IO06 0x16
> + >;
> + };
> +
> + pinctrl_usdhc1: usdhc1grp {
> + fsl,pins = <
> + MX8MP_IOMUXC_GPIO1_IO03__USDHC1_VSELECT 0x116
> + MX8MP_IOMUXC_SD1_CLK__USDHC1_CLK 0x190
> + MX8MP_IOMUXC_SD1_CMD__USDHC1_CMD 0x1d0
> + MX8MP_IOMUXC_SD1_DATA0__USDHC1_DATA0 0x1d0
> + MX8MP_IOMUXC_SD1_DATA1__USDHC1_DATA1 0x1d0
> + MX8MP_IOMUXC_SD1_DATA2__USDHC1_DATA2 0x1d0
> + MX8MP_IOMUXC_SD1_DATA3__USDHC1_DATA3 0x1d0
> + >;
> + };
> +
> + pinctrl_usdhc1_100mhz: usdhc1grp-100mhz {
I don't think you tested this. We changed this long time ago, so it
means you just sent us something based on downstream or whatever old was
there.
Start from scratch from latest sources, so you won't repeat the same
mistakes we already fixed.
Best regards,
Krzysztof