Re: [PATCH v2 2/2] arm64: dts: freescale: add support for NXP i.MX93 FRDM

Peng Fan
2025-06-05T06:01:43Z

On Mon, May 26, 2025 at 01:02:36PM +0200, Fabian Pflug wrote:
>The FRDM i.MX 93 development board is a low-cost and compact development
>board featuring the i.MX93 applications processor.
>
>It features:
>- Dual Cortex-A55
>- 2 GB LPDDR4X / LPDDR4
>- 32 GB eMMC5.1
>- MicroSD slot
>- GbE RJ45 x 2
>- USB2.0 1x Type C, 1x Type A
>
>This file is based upon the one provided by nxp in their own kernel and
>yocto meta layer for the device, but adapted for mainline.
>
>Signed-off-by: Fabian Pflug <f.pflug@pengutronix.de>
>---
> arch/arm64/boot/dts/freescale/Makefile | 1 +
> arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts | 613 +++++++++++++++++++++
> 2 files changed, 614 insertions(+)
>
>diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
>index b6d3fe26d621234ab84353165d20af9d2536f839..c703fce2ebfd8074bd0c6ee76f3c6f9bbd9cf179 100644
>--- a/arch/arm64/boot/dts/freescale/Makefile
>+++ b/arch/arm64/boot/dts/freescale/Makefile
>@@ -295,6 +295,7 @@ imx93-9x9-qsb-i3c-dtbs += imx93-9x9-qsb.dtb imx93-9x9-qsb-i3c.dtbo
> dtb-$(CONFIG_ARCH_MXC) += imx93-9x9-qsb-i3c.dtb
>
> dtb-$(CONFIG_ARCH_MXC) += imx93-11x11-evk.dtb
>+dtb-$(CONFIG_ARCH_MXC) += imx93-11x11-frdm.dtb
> dtb-$(CONFIG_ARCH_MXC) += imx93-14x14-evk.dtb
> dtb-$(CONFIG_ARCH_MXC) += imx93-kontron-bl-osm-s.dtb
> dtb-$(CONFIG_ARCH_MXC) += imx93-phyboard-segin.dtb
>diff --git a/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts b/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts
>new file mode 100644
>index 0000000000000000000000000000000000000000..dc6348858024d833a450a6b5d2e54e4fefe9e9cd
>--- /dev/null
>+++ b/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts
>@@ -0,0 +1,613 @@
>+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
>+/dts-v1/;
>+
>+#include <dt-bindings/usb/pd.h>
>+#include "imx93.dtsi"
>+
>+/ {
>+ compatible = "fsl,imx93-11x11-frdm", "fsl,imx93";
>+ model = "NXP i.MX93 11X11 FRDM board";
>+
>+ aliases {
>+ mmc0 = &usdhc1; /* EMMC */
>+ mmc1 = &usdhc2; /* uSD */
>+ rtc0 = &pcf2131;
>+ serial0 = &lpuart1;
>+ };
>+
>+ chosen {
>+ stdout-path = &lpuart1;
>+ };
>+
>+ reg_vref_1v8: regulator-adc-vref {
>+ compatible = "regulator-fixed";
>+ regulator-min-microvolt = <1800000>;
>+ regulator-max-microvolt = <1800000>;
>+ regulator-name = "vref_1v8";
>+ };
>+
>+ reg_usdhc2_vmmc: regulator-usdhc2 {
>+ compatible = "regulator-fixed";
>+ off-on-delay-us = <12000>;
>+ pinctrl-0 = <&pinctrl_reg_usdhc2_vmmc>;
>+ pinctrl-names = "default";
>+ regulator-min-microvolt = <3300000>;
>+ regulator-max-microvolt = <3300000>;
>+ regulator-name = "VSD_3V3";
>+ gpio = <&gpio3 7 GPIO_ACTIVE_HIGH>;
>+ enable-active-high;
>+ };
>+
>+ reg_usdhc3_vmmc: regulator-usdhc3 {
>+ compatible = "regulator-fixed";
>+ regulator-min-microvolt = <3300000>;
>+ regulator-max-microvolt = <3300000>;
>+ regulator-name = "WLAN_EN";
>+ gpio = <&pcal6524 20 GPIO_ACTIVE_HIGH>;
>+ enable-active-high;
>+ /*
>+ * IW612 wifi chip needs more delay than other wifi chips to complete
>+ * the host interface initialization after power up, otherwise the
>+ * internal state of IW612 may be unstable, resulting in the failure of
>+ * the SDIO3.0 switch voltage.
>+ */
>+ startup-delay-us = <20000>;
>+ };
>+
>+ reserved-memory {
>+ ranges;
>+ #address-cells = <2>;
>+ #size-cells = <2>;
>+
>+ linux,cma {
>+ compatible = "shared-dma-pool";
>+ alloc-ranges = <0 0x80000000 0 0x30000000>;
>+ reusable;
>+ size = <0 0x10000000>;
>+ linux,cma-default;
>+ };
>+
>+ rsc_table: rsc-table@2021e000 {
>+ reg = <0 0x2021e000 0 0x1000>;
>+ no-map;
>+ };
>+
>+ vdev0vring0: vdev0vring0@a4000000 {
>+ reg = <0 0xa4000000 0 0x8000>;
>+ no-map;
>+ };
>+
>+ vdev0vring1: vdev0vring1@a4008000 {
>+ reg = <0 0xa4008000 0 0x8000>;
>+ no-map;
>+ };
>+
>+ vdev1vring0: vdev1vring0@a4010000 {
>+ reg = <0 0xa4010000 0 0x8000>;
>+ no-map;
>+ };
>+
>+ vdev1vring1: vdev1vring1@a4018000 {
>+ reg = <0 0xa4018000 0 0x8000>;
>+ no-map;
>+ };
>+
>+ vdevbuffer: vdevbuffer@a4020000 {
>+ compatible = "shared-dma-pool";
>+ reg = <0 0xa4020000 0 0x100000>;
>+ no-map;
>+ };
>+ };
>+
>+ usdhc3_pwrseq: usdhc3_pwrseq {
>+ compatible = "mmc-pwrseq-simple";
>+ reset-gpios = <&pcal6524 12 GPIO_ACTIVE_LOW>;
>+ };
>+};
>+
>+&adc1 {
>+ vref-supply = <&reg_vref_1v8>;
>+ status = "okay";
>+};
>+
>+&cm33 {
>+ mboxes = <&mu1 0 1>,
>+ <&mu1 1 1>,
>+ <&mu1 3 1>;
>+ mbox-names = "tx", "rx", "rxdb";
>+ memory-region = <&vdevbuffer>, <&vdev0vring0>, <&vdev0vring1>,
>+ <&vdev1vring0>, <&vdev1vring1>, <&rsc_table>;
>+ status = "okay";
>+};
>+
>+&eqos {
>+ phy-handle = <&ethphy1>;
>+ phy-mode = "rgmii-id";
>+ pinctrl-0 = <&pinctrl_eqos>;
>+ pinctrl-1 = <&pinctrl_eqos_sleep>;
>+ pinctrl-names = "default", "sleep";
>+ status = "okay";
>+
>+ mdio {
>+ compatible = "snps,dwmac-mdio";
>+ #address-cells = <1>;
>+ #size-cells = <0>;
>+ clock-frequency = <5000000>;
>+
>+ ethphy1: ethernet-phy@1 {
>+ reg = <1>;
>+ reset-assert-us = <10000>;
>+ reset-deassert-us = <80000>;
>+ reset-gpios = <&pcal6524 15 GPIO_ACTIVE_LOW>;
>+ };
>+ };
>+};
>+
>+&fec {
>+ phy-handle = <&ethphy2>;
>+ phy-mode = "rgmii-id";
>+ pinctrl-0 = <&pinctrl_fec>;
>+ pinctrl-1 = <&pinctrl_fec_sleep>;
>+ pinctrl-names = "default", "sleep";
>+ fsl,magic-packet;
>+ status = "okay";
>+
>+ mdio {
>+ #address-cells = <1>;
>+ #size-cells = <0>;
>+ clock-frequency = <5000000>;
>+
>+ ethphy2: ethernet-phy@2 {
>+ reg = <2>;
>+ eee-broken-1000t;
>+ reset-assert-us = <10000>;
>+ reset-deassert-us = <80000>;
>+ reset-gpios = <&pcal6524 16 GPIO_ACTIVE_LOW>;
>+ };
>+ };
>+};
>+
>+&lpi2c2 {
>+ clock-frequency = <400000>;
>+ pinctrl-0 = <&pinctrl_lpi2c2>;
>+ pinctrl-names = "default";
>+ status = "okay";
>+
>+ pcal6524: gpio@22 {
>+ compatible = "nxp,pcal6524";
>+ reg = <0x22>;
>+ #interrupt-cells = <2>;
>+ interrupt-controller;
>+ interrupt-parent = <&gpio3>;
>+ interrupts = <27 IRQ_TYPE_LEVEL_LOW>;
>+ #gpio-cells = <2>;
>+ gpio-controller;
>+ pinctrl-0 = <&pinctrl_pcal6524>;
>+ pinctrl-names = "default";
>+ };
>+
>+ pmic@25 {
>+ compatible = "nxp,pca9451a";
>+ reg = <0x25>;
>+ interrupt-parent = <&pcal6524>;
>+ interrupts = <11 IRQ_TYPE_EDGE_FALLING>;
>+
>+ regulators {
>+
>+ buck1: BUCK1 {
>+ regulator-name = "BUCK1";
>+ regulator-always-on;
>+ regulator-boot-on;
>+ regulator-min-microvolt = <650000>;
>+ regulator-max-microvolt = <2237500>;
>+ regulator-ramp-delay = <3125>;
>+ };
>+
>+ buck2: BUCK2 {
>+ regulator-name = "BUCK2";
>+ regulator-always-on;
>+ regulator-boot-on;
>+ regulator-min-microvolt = <600000>;
>+ regulator-max-microvolt = <2187500>;
>+ regulator-ramp-delay = <3125>;
>+ };
>+
>+ buck4: BUCK4 {
>+ regulator-name = "BUCK4";
>+ regulator-always-on;
>+ regulator-boot-on;
>+ regulator-min-microvolt = <600000>;
>+ regulator-max-microvolt = <3400000>;
>+ };
>+
>+ buck5: BUCK5 {
>+ regulator-name = "BUCK5";
>+ regulator-always-on;
>+ regulator-boot-on;
>+ regulator-min-microvolt = <600000>;
>+ regulator-max-microvolt = <3400000>;
>+ };
>+
>+ buck6: BUCK6 {
>+ regulator-name = "BUCK6";
>+ regulator-always-on;
>+ regulator-boot-on;
>+ regulator-min-microvolt = <600000>;
>+ regulator-max-microvolt = <3400000>;
>+ };
>+
>+ ldo1: LDO1 {
>+ regulator-name = "LDO1";
>+ regulator-always-on;
>+ regulator-boot-on;
>+ regulator-min-microvolt = <1600000>;
>+ regulator-max-microvolt = <3300000>;
>+ };
>+
>+ ldo4: LDO4 {
>+ regulator-name = "LDO4";
>+ regulator-always-on;
>+ regulator-boot-on;
>+ regulator-min-microvolt = <800000>;
>+ regulator-max-microvolt = <3300000>;
>+ };
>+
>+ ldo5: LDO5 {
>+ regulator-name = "LDO5";
>+ regulator-always-on;
>+ regulator-boot-on;
>+ regulator-min-microvolt = <1800000>;
>+ regulator-max-microvolt = <3300000>;
>+ };
>+ };
>+ };
>+
>+ eeprom: eeprom@50 {
>+ compatible = "atmel,24c256";
>+ reg = <0x50>;
>+ pagesize = <64>;
>+ };
>+};
>+
>+&lpi2c3 {
>+ #address-cells = <1>;
>+ #size-cells = <0>;
>+ clock-frequency = <400000>;
>+ pinctrl-0 = <&pinctrl_lpi2c3>;
>+ pinctrl-names = "default";
>+ status = "okay";
>+
>+ ptn5110: tcpc@50 {
>+ compatible = "nxp,ptn5110", "tcpci";
>+ reg = <0x50>;
>+ interrupt-parent = <&gpio3>;
>+ interrupts = <27 IRQ_TYPE_LEVEL_LOW>;
>+
>+ typec1_con: connector {
>+ compatible = "usb-c-connector";
>+ data-role = "dual";
>+ label = "USB-C";
>+ op-sink-microwatt = <15000000>;
>+ power-role = "dual";
>+ self-powered;
>+ sink-pdos = <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)
>+ PDO_VAR(5000, 20000, 3000)>;
>+ source-pdos = <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)>;
>+ try-power-role = "sink";
>+
>+ ports {
>+ #address-cells = <1>;
>+ #size-cells = <0>;
>+
>+ port@0 {
>+ reg = <0>;
>+
>+ typec1_dr_sw: endpoint {
>+ remote-endpoint = <&usb1_drd_sw>;
>+ };
>+ };
>+ };
>+ };
>+ };
>+
>+ pcf2131: rtc@53 {
>+ compatible = "nxp,pcf2131";
>+ reg = <0x53>;
>+ interrupt-parent = <&pcal6524>;
>+ interrupts = <1 IRQ_TYPE_EDGE_FALLING>;
>+ };
>+};
>+
>+&lpuart1 { /* console */
>+ pinctrl-0 = <&pinctrl_uart1>;
>+ pinctrl-names = "default";
>+ status = "okay";
>+};
>+
>+&usbotg1 {
>+ adp-disable;
>+ disable-over-current;
>+ dr_mode = "otg";
>+ hnp-disable;
>+ srp-disable;
>+ usb-role-switch;
>+ samsung,picophy-dc-vol-level-adjust = <7>;
>+ samsung,picophy-pre-emp-curr-control = <3>;
>+ status = "okay";
>+
>+ port {
>+
>+ usb1_drd_sw: endpoint {
>+ remote-endpoint = <&typec1_dr_sw>;
>+ };
>+ };
>+};
>+
>+&usbotg2 {
>+ disable-over-current;
>+ dr_mode = "host";
>+ samsung,picophy-dc-vol-level-adjust = <7>;
>+ samsung,picophy-pre-emp-curr-control = <3>;
>+ status = "okay";
>+};
>+
>+&usdhc1 {
>+ bus-width = <8>;
>+ non-removable;
>+ pinctrl-0 = <&pinctrl_usdhc1>;
>+ pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
>+ pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
>+ pinctrl-names = "default", "state_100mhz", "state_200mhz";
>+ status = "okay";
>+};
>+
>+&usdhc2 {
>+ bus-width = <4>;
>+ cd-gpios = <&gpio3 00 GPIO_ACTIVE_LOW>;
>+ no-mmc;
>+ no-sdio;
>+ pinctrl-0 = <&pinctrl_usdhc2>, <&pinctrl_usdhc2_gpio>;
>+ pinctrl-1 = <&pinctrl_usdhc2_100mhz>, <&pinctrl_usdhc2_gpio>;
>+ pinctrl-2 = <&pinctrl_usdhc2_200mhz>, <&pinctrl_usdhc2_gpio>;
>+ pinctrl-3 = <&pinctrl_usdhc2_sleep>, <&pinctrl_usdhc2_gpio_sleep>;
>+ pinctrl-names = "default", "state_100mhz", "state_200mhz", "sleep";
>+ vmmc-supply = <&reg_usdhc2_vmmc>;
>+ status = "okay";
>+};
>+
>+&wdog3 {
>+ status = "okay";

Is there a need to set WDOG_ANY to trigger pmic reset?

Regards,
Peng