[PATCH RFC 12/12] PoC: arm64: dts: imx93-11x11-frdm: add multiple vdevs

From: Francesco Valla

Date: Wed Sep 16 2026 - 18:00:58 EST


Add rings for multiple vdevs, as well as the required virtio nodes for
I2C, SPI and GPIO functionalities. On top of that, add example
peripherals using all of them.

NOTE: this is a Proof-Of-Concept, not meant to be integrated!

Signed-off-by: Francesco Valla <francesco@xxxxxxxx>
---
arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts | 128 +++++++++++++++++++--
1 file changed, 119 insertions(+), 9 deletions(-)

diff --git a/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts b/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts
index bd14ba28690c..dfa3b122ac5f 100644
--- a/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts
+++ b/arch/arm64/boot/dts/freescale/imx93-11x11-frdm.dts
@@ -53,6 +53,32 @@ button-k3 {
};
};

+ gpio-keys-virtio {
+ compatible = "gpio-keys-polled";
+ poll-interval = <100>;
+
+ button-v1 {
+ label = "Button V1";
+ linux,code = <BTN_3>;
+ gpios = <&v_gpio 23 GPIO_ACTIVE_LOW>;
+ };
+
+ button-v2 {
+ label = "Button V2";
+ linux,code = <BTN_4>;
+ gpios = <&v_gpio 24 GPIO_ACTIVE_LOW>;
+ };
+ };
+
+ leds {
+ compatible = "gpio-leds";
+
+ led {
+ gpios = <&v_gpio 18 GPIO_ACTIVE_HIGH>;
+ label = "LED V";
+ };
+ };
+
reg_usdhc2_vmmc: regulator-usdhc2 {
compatible = "regulator-fixed";
off-on-delay-us = <12000>;
@@ -89,11 +115,6 @@ linux,cma {
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;
@@ -105,12 +126,42 @@ vdev0vring1: vdev0vring1@a4008000 {
};

vdev1vring0: vdev1vring0@a4010000 {
- reg = <0 0xa4010000 0 0x8000>;
+ reg = <0 0xa4010000 0 0x1000>;
+ no-map;
+ };
+
+ vdev2vring0: vdev2vring0@a4011000 {
+ reg = <0 0xa4011000 0 0x2000>;
+ no-map;
+ };
+
+ vdev2vring1: vdev2vring1@a4013000 {
+ reg = <0 0xa4013000 0 0x2000>;
+ no-map;
+ };
+
+ vdev3vring0: vdev3vring0@a4015000 {
+ reg = <0 0xa4015000 0 0x2000>;
+ no-map;
+ };
+
+ vdev4vring0: vdev4vring0@a4017000 {
+ reg = <0 0xa4017000 0 0x4000>;
+ no-map;
+ };
+
+ vdev5vring0: vdev5vring0@a401B000 {
+ reg = <0 0xa401B000 0 0x2000>;
+ no-map;
+ };
+
+ vdev5vring1: vdev5vring1@a401D000 {
+ reg = <0 0xa401D000 0 0x2000>;
no-map;
};

- vdev1vring1: vdev1vring1@a4018000 {
- reg = <0 0xa4018000 0 0x8000>;
+ vdev5vring2: vdev5vring2@a401F000 {
+ reg = <0 0xa401F000 0 0x1000>;
no-map;
};

@@ -149,8 +200,67 @@ &cm33 {
<&mu1 3 1>;
mbox-names = "tx", "rx", "rxdb";
memory-region = <&vdevbuffer>, <&vdev0vring0>, <&vdev0vring1>,
- <&vdev1vring0>, <&vdev1vring1>, <&rsc_table>;
+ <&vdev1vring0>, <&vdev2vring0>, <&vdev2vring1>,
+ <&vdev3vring0>, <&vdev4vring0>,
+ <&vdev5vring0>, <&vdev5vring1>, <&vdev5vring2>;
status = "okay";
+
+ virtio {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ vdev@2 {
+ reg = <2>;
+
+ v_gpio: gpio {
+ compatible = "virtio,device29";
+ gpio-controller;
+ #gpio-cells = <2>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ };
+ };
+
+ vdev@3 {
+ reg = <3>;
+
+ i2c {
+ compatible = "virtio,device22";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ eeprom@50 {
+ compatible = "atmel,24c1025";
+ reg = <0x50>;
+ };
+ };
+ };
+
+ vdev@4 {
+ reg = <4>;
+
+ spi {
+ compatible = "virtio,device2d";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ sram@0 {
+ compatible = "microchip,mchp23k256";
+ reg = <0>;
+ spi-max-frequency = <20000000>;
+ };
+
+ lcd@1 {
+ compatible = "adafruit,yx240qv29", "ilitek,ili9341";
+ reg = <1>;
+ spi-max-frequency = <10000000>;
+ dc-gpios = <&v_gpio 21 GPIO_ACTIVE_HIGH>;
+ reset-gpios = <&v_gpio 20 GPIO_ACTIVE_HIGH>;
+ rotation = <90>;
+ };
+ };
+ };
+ };
};

&eqos {

--
2.55.0