On 03/03/2023 00:16, Marek Vasut wrote: > Add support for DH electronics i.MX8M Plus DHCOM SoM on PDK3 carrier board. > Currently supported are serial console, EQoS and FEC ethernets, eMMC, SD, > SPI NOR, CAN, M.2 E-Key or M.2 M-Key PCIe, USB . > > Signed-off-by: Marek Vasut <marex@xxxxxxx> > --- > Cc: Fabio Estevam <festevam@xxxxxxxxx> > Cc: Frieder Schrempf <frieder.schrempf@xxxxxxxxxx> > Cc: Krzysztof Kozlowski <krzysztof.kozlowski+dt@xxxxxxxxxx> > Cc: Li Yang <leoyang.li@xxxxxxx> > Cc: Marcel Ziswiler <marcel.ziswiler@xxxxxxxxxxx> > Cc: Marek Vasut <marex@xxxxxxx> > Cc: Matthias Schiffer <matthias.schiffer@xxxxxxxxxxxx> > Cc: Max Krummenacher <max.krummenacher@xxxxxxxxxxx> > Cc: NXP Linux Team <linux-imx@xxxxxxx> > Cc: Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx> > Cc: Rob Herring <robh+dt@xxxxxxxxxx> > Cc: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> > Cc: Shawn Guo <shawnguo@xxxxxxxxxx> > Cc: Stefan Wahren <stefan.wahren@xxxxxxxx> > Cc: devicetree@xxxxxxxxxxxxxxx > Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx > --- > arch/arm64/boot/dts/freescale/Makefile | 1 + > .../boot/dts/freescale/imx8mp-dhcom-pdk3.dts | 321 ++++++++++++++++++ > 2 files changed, 322 insertions(+) > create mode 100644 arch/arm64/boot/dts/freescale/imx8mp-dhcom-pdk3.dts > > diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile > index 198fff3731ae4..f90b126afbaad 100644 > --- a/arch/arm64/boot/dts/freescale/Makefile > +++ b/arch/arm64/boot/dts/freescale/Makefile > @@ -91,6 +91,7 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mn-venice-gw7902.dtb > dtb-$(CONFIG_ARCH_MXC) += imx8mp-beacon-kit.dtb > dtb-$(CONFIG_ARCH_MXC) += imx8mp-debix-model-a.dtb > dtb-$(CONFIG_ARCH_MXC) += imx8mp-dhcom-pdk2.dtb > +dtb-$(CONFIG_ARCH_MXC) += imx8mp-dhcom-pdk3.dtb > dtb-$(CONFIG_ARCH_MXC) += imx8mp-evk.dtb > dtb-$(CONFIG_ARCH_MXC) += imx8mp-icore-mx8mp-edimm2.2.dtb > dtb-$(CONFIG_ARCH_MXC) += imx8mp-msc-sm2s-ep1.dtb > diff --git a/arch/arm64/boot/dts/freescale/imx8mp-dhcom-pdk3.dts b/arch/arm64/boot/dts/freescale/imx8mp-dhcom-pdk3.dts > new file mode 100644 > index 0000000000000..c5f0607f43bcc > --- /dev/null > +++ b/arch/arm64/boot/dts/freescale/imx8mp-dhcom-pdk3.dts > @@ -0,0 +1,321 @@ > +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) > +/* > + * Copyright (C) 2023 Marek Vasut <marex@xxxxxxx> Isn't having personal copyrights with a company/work email a bit contradicting itself? > + * > + * DHCOM iMX8MP variant: > + * DHCM-iMX8ML8-C160-R409-F1638-SPI16-GE-CAN2-SD-RTC-WBTA-ADC-T-RGB-CSI2-HS-I-01D2 > + * DHCOM PCB number: 660-100 or newer > + * PDK3 PCB number: 669-100 or newer > + */ > + > +/dts-v1/; > + > +#include <dt-bindings/leds/common.h> > +#include <dt-bindings/phy/phy-imx8-pcie.h> > +#include "imx8mp-dhcom-som.dtsi" > + > +/ { > + model = "DH electronics i.MX8M Plus DHCOM Premium Developer Kit (3)"; > + compatible = "dh,imx8mp-dhcom-pdk3", "dh,imx8mp-dhcom-som", > + "fsl,imx8mp"; > + > + chosen { > + stdout-path = &uart1; > + }; > + > + clk_ext_audio_codec: clock-codec { > + #clock-cells = <0>; > + clock-frequency = <24000000>; > + compatible = "fixed-clock"; > + }; > + > + clk_xtal25: clk-xtal25 { Keep same prefix, so either clock or clk (preferably clock to match further usage) > + compatible = "fixed-clock"; > + #clock-cells = <0>; > + clock-frequency = <25000000>; > + }; > + > + connector { > + compatible = "usb-c-connector"; > + label = "USB-C"; > + data-role = "dual"; > + > + ports { > + #address-cells = <1>; > + #size-cells = <0>; > + > + port@0 { > + reg = <0>; > + > + usb_c_0_hs_ep: endpoint { > + remote-endpoint = <&dwc3_0_hs_ep>; > + }; > + }; > + > + port@1 { > + reg = <1>; > + > + usb_c_0_ss_ep: endpoint { > + remote-endpoint = <&ptn5150_in_ep>; > + }; > + }; > + }; > + }; > + > + gpio-keys { > + compatible = "gpio-keys"; > + > + button-0 { > + gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; /* GPIO A */ > + label = "TA1-GPIO-A"; > + linux,code = <KEY_A>; > + pinctrl-0 = <&pinctrl_dhcom_a>; > + pinctrl-names = "default"; > + wakeup-source; > + }; > + > + button-1 { > + gpios = <&gpio1 8 GPIO_ACTIVE_LOW>; /* GPIO B */ > + label = "TA2-GPIO-B"; > + linux,code = <KEY_B>; > + pinctrl-0 = <&pinctrl_dhcom_b>; > + pinctrl-names = "default"; > + wakeup-source; > + }; > + > + button-2 { > + gpios = <&gpio5 2 GPIO_ACTIVE_LOW>; /* GPIO C */ > + label = "TA3-GPIO-C"; > + linux,code = <KEY_C>; > + pinctrl-0 = <&pinctrl_dhcom_c>; > + pinctrl-names = "default"; > + wakeup-source; > + }; > + > + button-3 { > + gpios = <&gpio5 22 GPIO_ACTIVE_LOW>; /* GPIO E */ > + label = "TA4-GPIO-E"; > + linux,code = <KEY_E>; > + pinctrl-0 = <&pinctrl_dhcom_e>; > + pinctrl-names = "default"; > + wakeup-source; > + }; > + }; > + > + led { > + compatible = "gpio-leds"; > + > + led-0 { > + color = <LED_COLOR_ID_GREEN>; > + default-state = "off"; > + function = LED_FUNCTION_INDICATOR; > + function-enumerator = <0>; > + gpios = <&gpio4 27 GPIO_ACTIVE_HIGH>; /* GPIO D */ > + pinctrl-0 = <&pinctrl_dhcom_d>; > + pinctrl-names = "default"; > + }; > + > + led-1 { > + color = <LED_COLOR_ID_GREEN>; > + default-state = "off"; > + function = LED_FUNCTION_INDICATOR; > + function-enumerator = <1>; > + gpios = <&gpio5 23 GPIO_ACTIVE_HIGH>; /* GPIO F */ > + pinctrl-0 = <&pinctrl_dhcom_f>; > + pinctrl-names = "default"; > + }; > + > + led-2 { > + color = <LED_COLOR_ID_GREEN>; > + default-state = "off"; > + function = LED_FUNCTION_INDICATOR; > + function-enumerator = <2>; > + gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>; /* GPIO G */ > + pinctrl-0 = <&pinctrl_dhcom_g>; > + pinctrl-names = "default"; > + }; > + > + led-3 { > + color = <LED_COLOR_ID_GREEN>; > + default-state = "off"; > + function = LED_FUNCTION_INDICATOR; > + function-enumerator = <3>; > + gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>; /* GPIO I */ > + pinctrl-0 = <&pinctrl_dhcom_i>; > + pinctrl-names = "default"; > + }; > + }; > + > + reg_avdd: regulator-avdd { /* AUDIO_VDD */ > + compatible = "regulator-fixed"; > + regulator-always-on; > + regulator-min-microvolt = <3300000>; > + regulator-max-microvolt = <3300000>; > + regulator-name = "AUDIO_VDD"; > + }; > +}; > + > +&i2c5 { > + i2cmux@70 { i2c-mux@ > + compatible = "nxp,pca9540"; > + reg = <0x70>; > + #address-cells = <1>; > + #size-cells = <0>; > + > + i2cmuxed0: i2c@0 { > + #address-cells = <1>; > + #size-cells = <0>; > + reg = <0>; > + > + typec@3d { > + compatible = "nxp,ptn5150"; > + reg = <0x3d>; > + interrupt-parent = <&gpio4>; > + interrupts = <25 IRQ_TYPE_EDGE_FALLING>; > + pinctrl-names = "default"; > + pinctrl-0 = <&pinctrl_ptn5150>; > + status = "okay"; okay is by default for new nodes > + > + ports { > + #address-cells = <1>; > + #size-cells = <0>; > + > + port@0 { > + reg = <0>; > + > + ptn5150_in_ep: endpoint { > + remote-endpoint = <&usb_c_0_ss_ep>; > + }; > + }; > + > + port@1 { > + reg = <1>; > + > + ptn5150_out_ep: endpoint { > + remote-endpoint = <&dwc3_0_ss_ep>; > + }; > + }; > + }; > + }; > + > + power-sensor@40 { > + compatible = "ti,ina238"; > + reg = <0x40>; > + shunt-resistor = <20000>; /* 0.02 R */ > + ti,shunt-gain = <1>; /* Drop cca. 40mV */ > + }; > + > + eeprom_board: eeprom@54 { > + compatible = "atmel,24c04"; > + pagesize = <16>; > + reg = <0x54>; > + }; > + > + pcieclk: clk@6b { clock@ > + compatible = "skyworks,si52144"; > + reg = <0x6b>; > + clocks = <&clk_xtal25>; > + #clock-cells = <1>; > + }; > + }; > + > + i2cmuxed1: i2c@1 { /* HDMI DDC I2C */ > + #address-cells = <1>; > + #size-cells = <0>; > + reg = <1>; > + }; > + }; > +}; > + > +ðphy0g { > + reg = <7>; > +}; > + > +&fec { /* Second ethernet */ > + pinctrl-0 = <&pinctrl_fec_rgmii>; > + phy-handle = <ðphypdk>; > + phy-mode = "rgmii-id"; > + > + mdio { > + ethphypdk: ethernet-phy@7 { /* Micrel KSZ9131RNXI */ > + compatible = "ethernet-phy-id0022.1642", > + "ethernet-phy-ieee802.3-c22"; > + interrupt-parent = <&gpio4>; > + interrupts = <3 IRQ_TYPE_LEVEL_LOW>; > + pinctrl-0 = <&pinctrl_ethphy1>; > + pinctrl-names = "default"; > + reg = <7>; > + reset-assert-us = <1000>; > + /* RESET_N signal rise time ~100ms */ > + reset-deassert-us = <120000>; > + reset-gpios = <&gpio4 2 GPIO_ACTIVE_LOW>; > + status = "okay"; okay is by default for new nodes > + }; > + }; > +}; > + > +&flexcan1 { > + status = "okay"; > +}; Best regards, Krzysztof