* [PATCH 0/2] arm64: dts: freescale: add i.MX937 FRDM board support
@ 2026-10-19 11:10 Joy Zou
2026-10-19 11:10 ` [PATCH 1/2] dt-bindings: arm: fsl: add i.MX937 FRDM board Joy Zou
2026-10-19 11:10 ` [PATCH 2/2] arm64: dts: freescale: add i.MX937 FRDM board support Joy Zou
0 siblings, 2 replies; 6+ messages in thread
From: Joy Zou @ 2026-10-19 11:10 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Frank Li, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
Ye Li, Peng Fan, Jacky Bai
Cc: devicetree, linux-kernel, imx, linux-arm-kernel, Joy Zou
The i.MX937 is a derivative of the i.MX952 SoC, so it reuses the i.MX952
device tree as its base.
This series adds the DT binding compatible string for the NXP i.MX937
FRDM board and the device tree support for the board.
Compared to the i.MX952, the i.MX937 drops the local dimming and ISP
blocks and runs its Cortex-A55 cores at a lower maximum frequency. The
PCAL6416 GPIO expander is at I2C address 0x21 on i.MX937 FRDM, unlike
0x20 on i.MX952 FRDM.
Signed-off-by: Joy Zou <joy.zou@oss.nxp.com>
---
Joy Zou (2):
dt-bindings: arm: fsl: add i.MX937 FRDM board
arm64: dts: freescale: add i.MX937 FRDM board support
Documentation/devicetree/bindings/arm/fsl.yaml | 7 ++
arch/arm64/boot/dts/freescale/Makefile | 1 +
arch/arm64/boot/dts/freescale/imx937-frdm.dts | 111 +++++++++++++++++++++++++
arch/arm64/boot/dts/freescale/imx937.dtsi | 12 +++
4 files changed, 131 insertions(+)
---
base-commit: 2efb7a11f1aa4d2dc285fe2680cca22cb9f72f64
change-id: 20261019-b4-imx937-frdm-84ae3d4b72c1
Best regards,
--
Joy Zou <joy.zou@oss.nxp.com>
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH 1/2] dt-bindings: arm: fsl: add i.MX937 FRDM board 2026-10-19 11:10 [PATCH 0/2] arm64: dts: freescale: add i.MX937 FRDM board support Joy Zou @ 2026-10-19 11:10 ` Joy Zou 2026-10-19 13:06 ` Marco Felsch 2026-10-20 7:56 ` Krzysztof Kozlowski 2026-10-19 11:10 ` [PATCH 2/2] arm64: dts: freescale: add i.MX937 FRDM board support Joy Zou 1 sibling, 2 replies; 6+ messages in thread From: Joy Zou @ 2026-10-19 11:10 UTC (permalink / raw) To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Frank Li, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, Ye Li, Peng Fan, Jacky Bai Cc: devicetree, linux-kernel, imx, linux-arm-kernel, Joy Zou Add DT compatible string for NXP i.MX937 FRDM board. Signed-off-by: Joy Zou <joy.zou@oss.nxp.com> --- Documentation/devicetree/bindings/arm/fsl.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Documentation/devicetree/bindings/arm/fsl.yaml b/Documentation/devicetree/bindings/arm/fsl.yaml index c8290a83205b..af10cac62f90 100644 --- a/Documentation/devicetree/bindings/arm/fsl.yaml +++ b/Documentation/devicetree/bindings/arm/fsl.yaml @@ -1570,6 +1570,13 @@ properties: - const: toradex,osm-imx93 - const: fsl,imx93 + - description: i.MX937 based Boards + items: + - enum: + - fsl,imx937-frdm # i.MX937 FRDM Board + - const: fsl,imx937 + - const: fsl,imx952 + - description: i.MX94 based Boards items: - enum: -- 2.34.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] dt-bindings: arm: fsl: add i.MX937 FRDM board 2026-10-19 11:10 ` [PATCH 1/2] dt-bindings: arm: fsl: add i.MX937 FRDM board Joy Zou @ 2026-10-19 13:06 ` Marco Felsch 2026-10-20 7:56 ` Krzysztof Kozlowski 1 sibling, 0 replies; 6+ messages in thread From: Marco Felsch @ 2026-10-19 13:06 UTC (permalink / raw) To: Joy Zou Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Frank Li, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, Ye Li, Peng Fan, Jacky Bai, devicetree, linux-kernel, linux-arm-kernel, imx Hi Joy, On 26-10-19 19:10, Joy Zou wrote: > Add DT compatible string for NXP i.MX937 FRDM board. > > Signed-off-by: Joy Zou <joy.zou@oss.nxp.com> > --- > Documentation/devicetree/bindings/arm/fsl.yaml | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/Documentation/devicetree/bindings/arm/fsl.yaml b/Documentation/devicetree/bindings/arm/fsl.yaml > index c8290a83205b..af10cac62f90 100644 > --- a/Documentation/devicetree/bindings/arm/fsl.yaml > +++ b/Documentation/devicetree/bindings/arm/fsl.yaml > @@ -1570,6 +1570,13 @@ properties: > - const: toradex,osm-imx93 > - const: fsl,imx93 > > + - description: i.MX937 based Boards > + items: > + - enum: > + - fsl,imx937-frdm # i.MX937 FRDM Board > + - const: fsl,imx937 > + - const: fsl,imx952 At least to me it seems odd that you specify two SoC compatibles here. Side note (obviously not something you could influence): NXP should really work on their product family names. If some i.mx95<foo> is compatible with i.mx95<bla> I would call it i.mx95<foo> and not i.mx93<foo>. Regards, Marco > + > - description: i.MX94 based Boards > items: > - enum: > > -- > 2.34.1 > > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] dt-bindings: arm: fsl: add i.MX937 FRDM board 2026-10-19 11:10 ` [PATCH 1/2] dt-bindings: arm: fsl: add i.MX937 FRDM board Joy Zou 2026-10-19 13:06 ` Marco Felsch @ 2026-10-20 7:56 ` Krzysztof Kozlowski 1 sibling, 0 replies; 6+ messages in thread From: Krzysztof Kozlowski @ 2026-10-20 7:56 UTC (permalink / raw) To: Joy Zou Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Frank Li, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, Ye Li, Peng Fan, Jacky Bai, devicetree, linux-kernel, imx, linux-arm-kernel On Mon, Oct 19, 2026 at 07:10:32PM +0800, Joy Zou wrote: > Add DT compatible string for NXP i.MX937 FRDM board. So where do you explain used imx952 here? Best regards, Krzysztof ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/2] arm64: dts: freescale: add i.MX937 FRDM board support 2026-10-19 11:10 [PATCH 0/2] arm64: dts: freescale: add i.MX937 FRDM board support Joy Zou 2026-10-19 11:10 ` [PATCH 1/2] dt-bindings: arm: fsl: add i.MX937 FRDM board Joy Zou @ 2026-10-19 11:10 ` Joy Zou 2026-10-19 11:16 ` sashiko-bot 1 sibling, 1 reply; 6+ messages in thread From: Joy Zou @ 2026-10-19 11:10 UTC (permalink / raw) To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Frank Li, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, Ye Li, Peng Fan, Jacky Bai Cc: devicetree, linux-kernel, imx, linux-arm-kernel, Joy Zou The i.MX937 is a derivative of the i.MX952 SoC, so it reuses the i.MX952 device tree as its base. Add imx937.dtsi based on imx952.dtsi and imx937-frdm.dts based on imx952-frdm.dtsi to support the NXP i.MX937 FRDM board. Compared to the i.MX952, the i.MX937 drops the local dimming and ISP blocks and runs its Cortex-A55 cores at a lower maximum frequency. The PCAL6416 GPIO expander is at I2C address 0x21 on i.MX937 FRDM, unlike 0x20 on i.MX952 FRDM, so disable the inherited node and add the expander at 0x21. Signed-off-by: Joy Zou <joy.zou@oss.nxp.com> --- arch/arm64/boot/dts/freescale/Makefile | 1 + arch/arm64/boot/dts/freescale/imx937-frdm.dts | 111 ++++++++++++++++++++++++++ arch/arm64/boot/dts/freescale/imx937.dtsi | 12 +++ 3 files changed, 124 insertions(+) diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile index a80cccf34eb5..5945969ada9c 100644 --- a/arch/arm64/boot/dts/freescale/Makefile +++ b/arch/arm64/boot/dts/freescale/Makefile @@ -944,6 +944,7 @@ dtb-$(CONFIG_ARCH_MXC) += imx93-tqma9352-mba93xxla-mini-ezurio-wlan.dtb dtb-$(CONFIG_ARCH_MXC) += imx93-tqma9352-mba93xxla-mini-lvds-tm070jvhg33.dtb dtb-$(CONFIG_ARCH_MXC) += imx93-var-dart-sonata.dtb dtb-$(CONFIG_ARCH_MXC) += imx93-var-som-symphony.dtb +dtb-$(CONFIG_ARCH_MXC) += imx937-frdm.dtb dtb-$(CONFIG_ARCH_MXC) += imx93w-evk.dtb dtb-$(CONFIG_ARCH_MXC) += imx93w-frdm.dtb dtb-$(CONFIG_ARCH_MXC) += imx943-evk.dtb diff --git a/arch/arm64/boot/dts/freescale/imx937-frdm.dts b/arch/arm64/boot/dts/freescale/imx937-frdm.dts new file mode 100644 index 000000000000..d6be48c81057 --- /dev/null +++ b/arch/arm64/boot/dts/freescale/imx937-frdm.dts @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright 2026 NXP + */ + +/dts-v1/; + +#include "imx937.dtsi" +#include "imx952-frdm.dtsi" + +/ { + model = "NXP i.MX937 FRDM board"; + compatible = "fsl,imx937-frdm", "fsl,imx937", "fsl,imx952"; + + can_mux: mux-controller-0 { + compatible = "gpio-mux"; + #mux-control-cells = <0>; + #mux-state-cells = <1>; + /* + * PCAL6416 (0x21) pin 4 selects the CAN/GPIO mux: + * low selects CAN, high selects GPIO. With GPIO_ACTIVE_HIGH, + * mux state 0 drives the pin low (CAN) and state 1 high (GPIO). + */ + mux-gpios = <&pcal6416_21 4 GPIO_ACTIVE_HIGH>; + }; + + can_mux_pinctrl: pinctrl-gpiomux { + compatible = "pinctrl-multiplexer"; + + can_fun: can-grp { + mux-states = <&can_mux 0>; + }; + + gpio_fun: gpio-grp { + mux-states = <&can_mux 1>; + }; + }; +}; + +/* Select CAN on the shared CAN/GPIO mux when FlexCAN is enabled. */ +&flexcan2 { + pinctrl-0 = <&pinctrl_flexcan2>, <&can_fun>; +}; + +/* + * The CAN transceiver silent-mode line is on the 0x21 PCAL6416 on + * i.MX937 FRDM (the inherited 0x20 expander is disabled below). + */ +&flexcan2_phy { + silent-gpios = <&pcal6416_21 6 GPIO_ACTIVE_HIGH>; +}; + +&flexcan3 { + pinctrl-0 = <&pinctrl_flexcan3>, <&can_fun>; +}; + +&flexcan3_phy { + silent-gpios = <&pcal6416_21 6 GPIO_ACTIVE_HIGH>; +}; + +&lpi2c2 { + pcal6416_21: gpio@21 { + compatible = "nxp,pcal6416"; + reg = <0x21>; + #interrupt-cells = <2>; + interrupt-controller; + interrupt-parent = <&gpio5>; + interrupts = <14 IRQ_TYPE_LEVEL_LOW>; + #gpio-cells = <2>; + gpio-controller; + pinctrl-0 = <&pinctrl_pcal6416>; + pinctrl-names = "default"; + vcc-supply = <®_3p3v>; + }; +}; + +/* + * The PCAL6416 GPIO expander is at address 0x21 on i.MX937 FRDM, + * unlike 0x20 on i.MX952 FRDM. Disable the inherited node. + */ +&pcal6416 { + status = "disabled"; +}; + +/* + * The 0x20 PCAL6416 inherited from imx952-frdm.dtsi is disabled above; + * re-point every consumer to the 0x21 expander (pcal6416_21). + */ +®_ext_3v3 { + gpio = <&pcal6416_21 13 GPIO_ACTIVE_HIGH>; +}; + +®_ext_5v { + gpio = <&pcal6416_21 12 GPIO_ACTIVE_HIGH>; +}; + +®_m2_pwr { + gpio = <&pcal6416_21 11 GPIO_ACTIVE_HIGH>; +}; + +®_usb_vbus { + gpio = <&pcal6416_21 15 GPIO_ACTIVE_HIGH>; +}; + +®_usdhc3_vmmc { + gpio = <&pcal6416_21 9 GPIO_ACTIVE_HIGH>; +}; + +&usdhc3_pwrseq { + reset-gpios = <&pcal6416_21 8 GPIO_ACTIVE_LOW>; +}; diff --git a/arch/arm64/boot/dts/freescale/imx937.dtsi b/arch/arm64/boot/dts/freescale/imx937.dtsi new file mode 100644 index 000000000000..7912a9c282d8 --- /dev/null +++ b/arch/arm64/boot/dts/freescale/imx937.dtsi @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: (GPL-2.0-only OR MIT) +/* + * Copyright 2026 NXP + */ + +#include "imx952.dtsi" + +&gpu_opp_table { + opp-1000000000 { + status = "disabled"; + }; +}; -- 2.34.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] arm64: dts: freescale: add i.MX937 FRDM board support 2026-10-19 11:10 ` [PATCH 2/2] arm64: dts: freescale: add i.MX937 FRDM board support Joy Zou @ 2026-10-19 11:16 ` sashiko-bot 0 siblings, 0 replies; 6+ messages in thread From: sashiko-bot @ 2026-10-19 11:16 UTC (permalink / raw) To: Joy Zou; +Cc: devicetree, imx, robh, conor+dt, Frank.Li Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider: - [High] arm64: dts: freescale: shared pinctrl-multiplexer on flexcan2/3 fails probe - [Medium] arm64: dts: freescale: mismatch between imx937.dtsi GPU OPP and commit message -- commit 27f9d906883e5428d8c5dbb12d877982379dd7f9 Author: Joy Zou <joy.zou@oss.nxp.com> arm64: dts: freescale: add i.MX937 FRDM board support This commit adds device tree support for the NXP i.MX937 SoC and i.MX937 FRDM board based on the i.MX952 device trees. > arm64: dts: freescale: add i.MX937 FRDM board support > > The i.MX937 is a derivative of the i.MX952 SoC, so it reuses the > i.MX952 device tree as its base. Add imx937.dtsi based on imx952.dtsi > and imx937-frdm.dts based on imx952-frdm.dtsi to support the NXP > i.MX937 FRDM board. > > Compared to the i.MX952, the i.MX937 drops the local dimming and ISP > blocks and runs its Cortex-A55 cores at a lower maximum frequency. > > The PCAL6416 GPIO expander is at I2C address 0x21 on i.MX937 FRDM, > unlike 0x20 on i.MX952 FRDM, so disable the inherited node and add > the expander at 0x21. > > Signed-off-by: Joy Zou <joy.zou@oss.nxp.com> > diff --git a/arch/arm64/boot/dts/freescale/imx937-frdm.dts b/arch/arm64/boot/dts/freescale/imx937-frdm.dts > new file mode 100644 > index 0000000000000..d6be48c810573 > --- /dev/null > +++ b/arch/arm64/boot/dts/freescale/imx937-frdm.dts > @@ -0,0 +1,111 @@ > +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) > +/* > + * Copyright 2026 NXP > + */ > + > +/dts-v1/; > + > +#include "imx937.dtsi" > +#include "imx952-frdm.dtsi" > + > +/ { > + model = "NXP i.MX937 FRDM board"; > + compatible = "fsl,imx937-frdm", "fsl,imx937", "fsl,imx952"; > + > + can_mux: mux-controller-0 { > + compatible = "gpio-mux"; > + #mux-control-cells = <0>; > + #mux-state-cells = <1>; > + /* > + * PCAL6416 (0x21) pin 4 selects the CAN/GPIO mux: > + * low selects CAN, high selects GPIO. With GPIO_ACTIVE_HIGH, > + * mux state 0 drives the pin low (CAN) and state 1 high (GPIO). > + */ > + mux-gpios = <&pcal6416_21 4 GPIO_ACTIVE_HIGH>; > + }; > + > + can_mux_pinctrl: pinctrl-gpiomux { > + compatible = "pinctrl-multiplexer"; > + > + can_fun: can-grp { > + mux-states = <&can_mux 0>; > + }; > + > + gpio_fun: gpio-grp { > + mux-states = <&can_mux 1>; > + }; > + }; > +}; > + > +/* Select CAN on the shared CAN/GPIO mux when FlexCAN is enabled. */ > +&flexcan2 { > + pinctrl-0 = <&pinctrl_flexcan2>, <&can_fun>; > +}; > + > +/* > + * The CAN transceiver silent-mode line is on the 0x21 PCAL6416 on > + * i.MX937 FRDM (the inherited 0x20 expander is disabled below). > + */ > +&flexcan2_phy { > + silent-gpios = <&pcal6416_21 6 GPIO_ACTIVE_HIGH>; > +}; > + > +&flexcan3 { > + pinctrl-0 = <&pinctrl_flexcan3>, <&can_fun>; > +}; [Severity: High] Will the second FlexCAN controller to probe fail with -EBUSY when both flexcan2 and flexcan3 reference <&can_fun> in pinctrl-0? Both flexcan2 and flexcan3 inherit status = "okay" from arch/arm64/boot/dts/freescale/imx952-frdm.dtsi: arch/arm64/boot/dts/freescale/imx952-frdm.dtsi: &flexcan2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_flexcan2>; phys = <&flexcan2_phy>; status = "okay"; }; &flexcan3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_flexcan3>; phys = <&flexcan3_phy>; status = "okay"; }; When the first FlexCAN device probes, the call chain really_probe() -> pinctrl_bind_pins() -> pinctrl_select_state() -> pinmux_enable_setting() -> mux_pinmux_set_mux() selects func->mux_state in drivers/pinctrl/pinctrl-generic-mux.c: drivers/pinctrl/pinctrl-generic-mux.c:mux_pinmux_set_mux() { ... ret = mux_state_try_select(func->mux_state); if (ret) return ret; ... } which calls mux_control_try_select_delay() in drivers/mux/core.c and acquires the exclusive binary semaphore mux->lock (initialized to 1 in mux_chip_alloc()): drivers/mux/core.c:mux_control_try_select_delay() { ... if (down_trylock(&mux->lock)) return -EBUSY; ... } Because mux->lock remains held until mux_pinmux_release_mux() calls mux_state_deselect(), when the second FlexCAN device probes and attempts to select the same <&can_fun> state backed by &can_mux, down_trylock(&mux->lock) fails with -EBUSY and aborts its probe. [ ... ] > diff --git a/arch/arm64/boot/dts/freescale/imx937.dtsi b/arch/arm64/boot/dts/freescale/imx937.dtsi > new file mode 100644 > index 0000000000000..7912a9c282d8c > --- /dev/null > +++ b/arch/arm64/boot/dts/freescale/imx937.dtsi > @@ -0,0 +1,12 @@ > +// SPDX-License-Identifier: (GPL-2.0-only OR MIT) > +/* > + * Copyright 2026 NXP > + */ > + > +#include "imx952.dtsi" > + > +&gpu_opp_table { > + opp-1000000000 { > + status = "disabled"; > + }; > +}; [Severity: Medium] Is disabling opp-1000000000 in &gpu_opp_table intentional here, or does the commit message mismatch the change in imx937.dtsi? The commit message states: "Compared to the i.MX952, the i.MX937 drops the local dimming and ISP blocks and runs its Cortex-A55 cores at a lower maximum frequency." However, the only change in arch/arm64/boot/dts/freescale/imx937.dtsi disables the 1.0 GHz operating point in &gpu_opp_table, which is the operating-points-v2 table for the Mali GPU (gpu@4d900000) in arch/arm64/boot/dts/freescale/imx952.dtsi: arch/arm64/boot/dts/freescale/imx952.dtsi: gpu_opp_table: opp-table { compatible = "operating-points-v2"; ... opp-1000000000 { opp-hz = /bits/ 64 <1000000000>; opp-microvolt = <920000>; }; }; while the Cortex-A55 cores in imx952.dtsi use SCMI performance domains (<&scmi_perf IMX952_PERF_A55>). If the i.MX937 reduces the maximum GPU frequency, should the commit message describe that instead (or was this meant to target the CPU frequency)? -- Sashiko AI review · https://sashiko.dev/#/patchset/20261019-b4-imx937-frdm-v1-0-76d949a61954@oss.nxp.com?part=2 ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-10-20 7:56 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-10-19 11:10 [PATCH 0/2] arm64: dts: freescale: add i.MX937 FRDM board support Joy Zou 2026-10-19 11:10 ` [PATCH 1/2] dt-bindings: arm: fsl: add i.MX937 FRDM board Joy Zou 2026-10-19 13:06 ` Marco Felsch 2026-10-20 7:56 ` Krzysztof Kozlowski 2026-10-19 11:10 ` [PATCH 2/2] arm64: dts: freescale: add i.MX937 FRDM board support Joy Zou 2026-10-19 11:16 ` sashiko-bot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox