* [PATCH v1 0/1] ARM: dts: draeger: Add devicetrees for Draeger's M48 board.
@ 2026-08-25 14:02 Petko Manolov
2026-08-25 14:02 ` [PATCH v1 1/1] ARM: dts: draeger: Add devicetree files for M48 Intel/Altera SoCFPGA Cyclone Petko Manolov
2026-08-25 14:02 ` [PATCH v1 1/1] ARM: dts: draeger: Add devicetree files for M48 on NXP i.MX6(Q) Petko Manolov
0 siblings, 2 replies; 5+ messages in thread
From: Petko Manolov @ 2026-08-25 14:02 UTC (permalink / raw)
To: linux-kernel; +Cc: devicetree, linux-arm-kernel, Petko Manolov
Adding the device trees for “Dräger M48 on NXP i.MX6 (Q) and Intel/Altera
SoCFPGA Cyclone V” board variant. It has both (the SoC and FPGA) on the same
carrier and they are cross-monitoring each other.
Petko Manolov (1):
ARM: dts: draeger: Add devicetree files for M48 on NXP i.MX6(Q)
arch/arm/boot/dts/nxp/imx/Makefile | 2 +
.../boot/dts/nxp/imx/imx6dl-draeger-m48.dts | 23 ++
.../boot/dts/nxp/imx/imx6q-draeger-m48.dts | 23 ++
.../boot/dts/nxp/imx/imx6qdl-draeger-m48.dtsi | 369 ++++++++++++++++++
.../boot/dts/nxp/imx/imx6qp-draeger-m48.dts | 78 ++++
5 files changed, 495 insertions(+)
create mode 100644 arch/arm/boot/dts/nxp/imx/imx6dl-draeger-m48.dts
create mode 100644 arch/arm/boot/dts/nxp/imx/imx6q-draeger-m48.dts
create mode 100644 arch/arm/boot/dts/nxp/imx/imx6qdl-draeger-m48.dtsi
create mode 100644 arch/arm/boot/dts/nxp/imx/imx6qp-draeger-m48.dts
--
2.47.3
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v1 1/1] ARM: dts: draeger: Add devicetree files for M48 Intel/Altera SoCFPGA Cyclone
2026-08-25 14:02 [PATCH v1 0/1] ARM: dts: draeger: Add devicetrees for Draeger's M48 board Petko Manolov
@ 2026-08-25 14:02 ` Petko Manolov
2026-08-25 14:16 ` sashiko-bot
2026-08-25 14:02 ` [PATCH v1 1/1] ARM: dts: draeger: Add devicetree files for M48 on NXP i.MX6(Q) Petko Manolov
1 sibling, 1 reply; 5+ messages in thread
From: Petko Manolov @ 2026-08-25 14:02 UTC (permalink / raw)
To: linux-kernel; +Cc: devicetree, linux-arm-kernel, Petko Manolov
Signed-off-by: Petko Manolov <petko.manolov@konsulko.com>
---
arch/arm/boot/dts/intel/socfpga/Makefile | 1 +
.../socfpga/socfpga_cyclone5_draeger_m48.dts | 132 ++++++++++++++++++
2 files changed, 133 insertions(+)
create mode 100644 arch/arm/boot/dts/intel/socfpga/socfpga_cyclone5_draeger_m48.dts
diff --git a/arch/arm/boot/dts/intel/socfpga/Makefile b/arch/arm/boot/dts/intel/socfpga/Makefile
index 8df0976da01c..cdcea11abdfa 100644
--- a/arch/arm/boot/dts/intel/socfpga/Makefile
+++ b/arch/arm/boot/dts/intel/socfpga/Makefile
@@ -11,6 +11,7 @@ dtb-$(CONFIG_ARCH_INTEL_SOCFPGA) += \
socfpga_arria10_mercury_aa1_st1_emmc.dtb \
socfpga_arria10_mercury_aa1_st1_qspi.dtb \
socfpga_arria10_mercury_aa1_st1_sdmmc.dtb \
+ socfpga_cyclone5_draeger_m48.dtb \
socfpga_cyclone5_mercury_sa1_pe1_emmc.dtb \
socfpga_cyclone5_mercury_sa1_pe1_qspi.dtb \
socfpga_cyclone5_mercury_sa1_pe1_sdmmc.dtb \
diff --git a/arch/arm/boot/dts/intel/socfpga/socfpga_cyclone5_draeger_m48.dts b/arch/arm/boot/dts/intel/socfpga/socfpga_cyclone5_draeger_m48.dts
new file mode 100644
index 000000000000..fd597f15c0d8
--- /dev/null
+++ b/arch/arm/boot/dts/intel/socfpga/socfpga_cyclone5_draeger_m48.dts
@@ -0,0 +1,132 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2020 Draeger and Licensors, info@draeger.com
+ */
+#include "socfpga_cyclone5.dtsi"
+
+/ {
+ model = "Draeger M48 Cyclone V SoC";
+ compatible = "draeger,M48/socfpga", "altr,socfpga-cyclone5", "altr,socfpga";
+
+ chosen {
+ bootargs = "earlyprintk";
+ stdout-path = "serial0:115200n8";
+ };
+
+ memory@0 {
+ name = "memory";
+ device_type = "memory";
+ reg = <0x0 0x40000000>;
+
+ /* 1GB */
+ };
+
+ aliases {
+ /* this allow the ethaddr uboot environmnet variable contents
+ * to be added to the gmac1 device tree blob.
+ */
+ ethernet0 = &gmac0;
+ };
+
+ soc {
+ gpio3: gpio@0xff202000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "snps,dw-apb-gpio";
+ reg = <0xff202000 0x20>;
+ status = "okay";
+
+ portd: gpio-controller@0 {
+ compatible = "snps,dw-apb-gpio-port";
+ gpio-controller;
+ #gpio-cells = <2>;
+ snps,nr-gpios = <2>;
+ reg = <0>;
+ bank-name = "SYNC_I";
+ };
+ };
+
+ gpio4: gpio@0xff202020 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "snps,dw-apb-gpio";
+ reg = <0xff202020 0x20>;
+ status = "okay";
+
+ porte: gpio-controller@0 {
+ compatible = "snps,dw-apb-gpio-port";
+ gpio-controller;
+ #gpio-cells = <2>;
+ snps,nr-gpios = <2>;
+ reg = <0>;
+ bank-name = "SYNC_O";
+ };
+ };
+ };
+};
+
+&gmac0 {
+ status = "okay";
+ phy-mode = "rgmii-id";
+ rxc-skew-ps = <1860>;
+ rxd0-skew-ps = <0>;
+ rxd1-skew-ps = <0>;
+ rxd2-skew-ps = <0>;
+ rxd3-skew-ps = <0>;
+ rxdv-skew-ps = <0>;
+ txc-skew-ps = <900>;
+ txd0-skew-ps = <0>;
+ txd1-skew-ps = <0>;
+ txd2-skew-ps = <0>;
+ txd3-skew-ps = <0>;
+ txen-skew-ps = <0>;
+};
+
+&gpio0 {
+ status = "okay";
+};
+
+&gpio1 {
+ status = "okay";
+};
+
+&gpio2 {
+ status = "okay";
+};
+
+&i2c0 {
+ status = "okay";
+ clock-frequency = <100000>;
+
+ eeprom_mac: eeprom@50 {
+ compatible = "atmel,24c08";
+ reg = <0x50>;
+ pagesize = <16>;
+ };
+};
+
+&mmc0 {
+ status = "okay";
+};
+
+&qspi {
+ status = "okay";
+
+ flash0: n25q00@0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "n25q00";
+ reg = <0>;
+
+ /* chip select */
+ spi-max-frequency = <100000000>;
+ m25p,fast-read;
+ cdns,page-size = <256>;
+ cdns,block-size = <16>;
+ cdns,read-delay = <4>;
+ cdns,tshsl-ns = <50>;
+ cdns,tsd2d-ns = <50>;
+ cdns,tchsh-ns = <4>;
+ cdns,tslch-ns = <4>;
+ };
+};
--
2.47.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v1 1/1] ARM: dts: draeger: Add devicetree files for M48 on NXP i.MX6(Q)
2026-08-25 14:02 [PATCH v1 0/1] ARM: dts: draeger: Add devicetrees for Draeger's M48 board Petko Manolov
2026-08-25 14:02 ` [PATCH v1 1/1] ARM: dts: draeger: Add devicetree files for M48 Intel/Altera SoCFPGA Cyclone Petko Manolov
@ 2026-08-25 14:02 ` Petko Manolov
2026-08-25 14:15 ` sashiko-bot
1 sibling, 1 reply; 5+ messages in thread
From: Petko Manolov @ 2026-08-25 14:02 UTC (permalink / raw)
To: linux-kernel; +Cc: devicetree, linux-arm-kernel, Petko Manolov
Signed-off-by: Petko Manolov <petko.manolov@konsulko.com>
---
arch/arm/boot/dts/nxp/imx/Makefile | 2 +
.../boot/dts/nxp/imx/imx6dl-draeger-m48.dts | 23 ++
.../boot/dts/nxp/imx/imx6q-draeger-m48.dts | 23 ++
.../boot/dts/nxp/imx/imx6qdl-draeger-m48.dtsi | 369 ++++++++++++++++++
.../boot/dts/nxp/imx/imx6qp-draeger-m48.dts | 78 ++++
5 files changed, 495 insertions(+)
create mode 100644 arch/arm/boot/dts/nxp/imx/imx6dl-draeger-m48.dts
create mode 100644 arch/arm/boot/dts/nxp/imx/imx6q-draeger-m48.dts
create mode 100644 arch/arm/boot/dts/nxp/imx/imx6qdl-draeger-m48.dtsi
create mode 100644 arch/arm/boot/dts/nxp/imx/imx6qp-draeger-m48.dts
diff --git a/arch/arm/boot/dts/nxp/imx/Makefile b/arch/arm/boot/dts/nxp/imx/Makefile
index 1a2539fa19b4..44b393256235 100644
--- a/arch/arm/boot/dts/nxp/imx/Makefile
+++ b/arch/arm/boot/dts/nxp/imx/Makefile
@@ -220,6 +220,8 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
imx6q-dmo-edmqmx6.dtb \
imx6q-dms-ba16.dtb \
imx6q-ds.dtb \
+ imx6q-draeger-m48.dtb \
+ imx6dl-draeger-m48.dtb \
imx6q-emcon-avari.dtb \
imx6q-evi.dtb \
imx6dl-b105pv2.dtb \
diff --git a/arch/arm/boot/dts/nxp/imx/imx6dl-draeger-m48.dts b/arch/arm/boot/dts/nxp/imx/imx6dl-draeger-m48.dts
new file mode 100644
index 000000000000..45809770d16f
--- /dev/null
+++ b/arch/arm/boot/dts/nxp/imx/imx6dl-draeger-m48.dts
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/*
+ * (C) Copyright 2020 Draeger and Licensors, info@draeger.com
+ * Based on work by Russell King
+ *
+ * Device Tree file for Drager M48 Board
+ */
+
+/dts-v1/;
+
+#include "imx6dl.dtsi"
+/* PAD config disabled in imx6qdl-draeger-m48.dtsi by setting value to 0x80000000
+ * PAD configuration register must not be 0, so it is set to 0xfff
+ */
+#define MX6QDL_PAD_CTL_GRP_DDR_TYPE_RGMII 0x768 0xfff 0x000 0x000C0000 0x0
+#define MX6QDL_PAD_CTL_GRP_RGMII_TERM 0x788 0xfff 0x000 0x00000200 0x0
+#include "imx6qdl-draeger-m48.dtsi"
+
+/ {
+ model = "Draeger M48 i.MX6 DualLite";
+ compatible = "draeger,imx6dl-m48", "fsl,imx6dl";
+};
diff --git a/arch/arm/boot/dts/nxp/imx/imx6q-draeger-m48.dts b/arch/arm/boot/dts/nxp/imx/imx6q-draeger-m48.dts
new file mode 100644
index 000000000000..1266b8451fa1
--- /dev/null
+++ b/arch/arm/boot/dts/nxp/imx/imx6q-draeger-m48.dts
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/*
+ * (C) Copyright 2020 Draeger and Licensors, info@draeger.com
+ *
+ * Device Tree file for Drager M48 Board
+ */
+
+/dts-v1/;
+
+#include "imx6q.dtsi"
+/* PAD config disabled in imx6qdl-draeger-m48.dtsi by setting value to 0x80000000
+ * PAD configuration register must not be 0, so it is set to 0xfff
+ */
+#define MX6QDL_PAD_CTL_GRP_DDR_TYPE_RGMII 0x790 0xfff 0x000 0x000C0000 0x0
+#define MX6QDL_PAD_CTL_GRP_RGMII_TERM 0x7ac 0xfff 0x000 0x00000200 0x0
+
+#include "imx6qdl-draeger-m48.dtsi"
+
+/ {
+ model = "Draeger M48 i.MX6 Quad";
+ compatible = "draeger,imx6q-m48", "fsl,imx6q";
+};
diff --git a/arch/arm/boot/dts/nxp/imx/imx6qdl-draeger-m48.dtsi b/arch/arm/boot/dts/nxp/imx/imx6qdl-draeger-m48.dtsi
new file mode 100644
index 000000000000..bcfe7b2556cb
--- /dev/null
+++ b/arch/arm/boot/dts/nxp/imx/imx6qdl-draeger-m48.dtsi
@@ -0,0 +1,369 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2020 Draeger and Licensors, info@draeger.com
+ * Based on work by Russell King
+ *
+ * Device Tree file for Drager M48 Board
+ */
+#include <dt-bindings/clock/imx6qdl-clock.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+&iomuxc {
+ m48 {
+ pinctrl_m48_uart1: m48-uart1 {
+ fsl,pins = <
+ MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA 0x1b010
+ MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA 0x1b010
+ >;
+ };
+
+ pinctrl_m48_hdmi: m48-hdmi {
+ fsl,pins = <
+ MX6QDL_PAD_EIM_D16__HDMI_TX_DDC_SDA 0x1b0b0
+ MX6QDL_PAD_EIM_EB2__HDMI_TX_DDC_SCL 0x1b0b0
+ >;
+ };
+
+ pinctrl_m48_lvds: m48-lvds {
+ fsl,pins = <
+ MX6QDL_PAD_EIM_A22__GPIO2_IO16 0x1b010 /* DISPLAY_EN */
+ MX6QDL_PAD_EIM_A20__GPIO2_IO18 0x1b010 /* BACKLIGHT_EN */
+ MX6QDL_PAD_EIM_A18__GPIO2_IO20 0x1b010 /* DISP0_CONTRAST */
+ >;
+ };
+
+ pinctrl_m48_i2c2: m48-i2c2 {
+ fsl,pins = <
+ MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b820
+ MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b820
+ >;
+ };
+
+ pinctrl_m48_i2c2_gpio: m48-i2c2_gpio {
+ fsl,pins = <
+ MX6QDL_PAD_KEY_COL3__GPIO4_IO12 0x1b820
+ MX6QDL_PAD_KEY_ROW3__GPIO4_IO13 0x1b820
+ >;
+#define GP_I2C2_SCL <&gpio4 12 GPIO_ACTIVE_HIGH>
+#define GP_I2C2_SDA <&gpio4 13 GPIO_ACTIVE_HIGH>
+ };
+
+ pinctrl_m48_i2c3: m48-i2c3 {
+ fsl,pins = <
+ MX6QDL_PAD_EIM_D17__I2C3_SCL 0x4001b820
+ MX6QDL_PAD_EIM_D18__I2C3_SDA 0x4001b820
+ >;
+ };
+
+ pinctrl_m48_i2c3_gpio: m48-i2c3_gpio {
+ fsl,pins = <
+ MX6QDL_PAD_EIM_D17__GPIO3_IO17 0x1b820
+ MX6QDL_PAD_EIM_D18__GPIO3_IO18 0x1b820
+ >;
+#define GP_I2C3_SCL <&gpio3 17 GPIO_ACTIVE_HIGH>
+#define GP_I2C3_SDA <&gpio3 18 GPIO_ACTIVE_HIGH>
+ };
+
+ pinctrl_m48_usdhc3: m48-usdhc3 {
+ fsl,pins = <
+ MX6QDL_PAD_SD3_CMD__SD3_CMD 0x1B060
+ MX6QDL_PAD_SD3_CLK__SD3_CLK 0x1B060
+ MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x1B060
+ MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x1B060
+ MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x1B060
+ MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x1B060
+ MX6QDL_PAD_NANDF_CS1__SD3_VSELECT 0x1B060
+ >;
+ };
+
+ pinctrl_m48_enet: enetgrp {
+ fsl,pins = <
+ MX6QDL_PAD_KEY_COL1__ENET_MDIO 0x1b0b0
+ MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
+ MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x13018
+ MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1B018
+ MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1B018
+ MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1B018
+ MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1B018
+ MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x13018
+ MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x1b0b0
+ MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x13030
+ MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x1B030
+ MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x1B030
+ MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1B030
+ MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1B030
+ MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x13030
+ MX6QDL_PAD_CTL_GRP_DDR_TYPE_RGMII 0x80000000
+ MX6QDL_PAD_CTL_GRP_RGMII_TERM 0x80000000
+ >;
+ };
+ };
+};
+
+&i2c2 {
+ clock-frequency = <100000>;
+ pinctrl-names = "default", "gpio";
+ pinctrl-0 = <&pinctrl_m48_i2c2>;
+ pinctrl-1 = <&pinctrl_m48_i2c2_gpio>;
+ scl-gpios = GP_I2C2_SCL;
+ sda-gpios = GP_I2C2_SDA;
+ status = "okay";
+
+ eeprom_mac: eeprom@50 {
+ compatible = "atmel,24c08";
+ reg = <0x50>;
+ pagesize = <16>;
+ };
+};
+
+&i2c3 {
+ pinctrl-names = "default", "gpio";
+ pinctrl-0 = <&pinctrl_m48_i2c3>;
+ pinctrl-1 = <&pinctrl_m48_i2c3_gpio>;
+ scl-gpios = GP_I2C3_SCL;
+ sda-gpios = GP_I2C3_SDA;
+ status = "okay";
+};
+
+&uart1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_m48_uart1>;
+ status = "okay";
+};
+
+&usdhc3 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_m48_usdhc3>;
+ non-removable;
+ fsl,wp-controller;
+ status = "okay";
+};
+
+&fec {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_m48_enet>;
+ phy-mode = "rgmii-id";
+ phy-handle = <ðphy>;
+ status = "okay";
+
+ mdio {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ethphy: ethernet-phy@0 {
+ reg = <0>;
+ rxc-skew-ps = <1380>;
+ rxd0-skew-ps = <0>;
+ rxd1-skew-ps = <0>;
+ rxd2-skew-ps = <0>;
+ rxd3-skew-ps = <0>;
+ rxdv-skew-ps = <0>;
+ txc-skew-ps = <1860>;
+ txd0-skew-ps = <0>;
+ txd1-skew-ps = <0>;
+ txd2-skew-ps = <0>;
+ txd3-skew-ps = <0>;
+ txen-skew-ps = <0>;
+ status = "okay";
+ };
+ };
+};
+
+&hdmi {
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_m48_hdmi>;
+
+ display-timings {
+ native-mode = <&hdmi0>;
+
+ hdmi0: hdmi {
+ clock-frequency = <65000000>;
+ hactive = <1024>;
+ vactive = <768>;
+ hback-porch = <220>;
+ hfront-porch = <40>;
+ vback-porch = <21>;
+ vfront-porch = <7>;
+ hsync-len = <60>;
+ vsync-len = <10>;
+ };
+
+ hdmi1: hdmi-1280x800-24@60 {
+ clock-frequency = <71000000>;
+ hactive = <1280>;
+ vactive = <800>;
+ hback-porch = <80>;
+ hfront-porch = <48>;
+ vback-porch = <14>;
+ vfront-porch = <3>;
+ hsync-len = <32>;
+ vsync-len = <6>;
+ };
+
+ hdmi2: hdmi-1366x768-32@60 {
+ clock-frequency = <72000000>;
+ hactive = <1366>;
+ vactive = <768>;
+ hback-porch = <80>;
+ hfront-porch = <48>;
+ vback-porch = <14>;
+ vfront-porch = <3>;
+ hsync-len = <32>;
+ vsync-len = <5>;
+ };
+ };
+};
+
+&ldb {
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_m48_lvds>;
+
+ lvds-channel@0 {
+ fsl,data-mapping = "spwg";
+ fsl,default-data-width = <24>;
+ status = "okay";
+
+ display-timings {
+ native-mode = <&timing0>;
+
+ timing0: 1920x1080-32@60 {
+ fsl,dual-channel;
+
+ /* LVDS split mode */
+ clock-frequency = <71190000>;
+
+ /* pixclk /2 */
+ hactive = <1920>;
+ vactive = <1080>;
+ hback-porch = <60>;
+
+ /* left * 2 */
+ hfront-porch = <60>;
+
+ /* right * 2 */
+ vback-porch = <30>;
+ vfront-porch = <3>;
+ hsync-len = <60>;
+
+ /* hsync * 2 */
+ vsync-len = <17>;
+ };
+
+ timing1: 1366x768-32@60 {
+ clock-frequency = <72000000>;
+ hactive = <1366>;
+ vactive = <768>;
+ hback-porch = <80>;
+ hfront-porch = <48>;
+ vback-porch = <14>;
+ vfront-porch = <3>;
+ hsync-len = <32>;
+ vsync-len = <5>;
+ };
+
+ timing2: 1280x800-24@60 {
+ fsl,data-width = <18>;
+ clock-frequency = <71000000>;
+ hactive = <1280>;
+ vactive = <800>;
+ hback-porch = <80>;
+ hfront-porch = <48>;
+ vback-porch = <14>;
+ vfront-porch = <3>;
+ hsync-len = <32>;
+ vsync-len = <6>;
+ };
+
+ timing3: Tianma_1280x800-24@60 {
+ fsl,data-width = <18>;
+ clock-frequency = <67254000>;
+ hactive = <1280>;
+ vactive = <800>;
+ hback-porch = <5>;
+ hfront-porch = <27>;
+ vback-porch = <2>;
+ vfront-porch = <26>;
+ hsync-len = <32>;
+ vsync-len = <6>;
+ };
+
+ timing4: 1024x768-24@60 {
+ fsl,data-width = <18>;
+ clock-frequency = <65000000>;
+ hactive = <1024>;
+ vactive = <768>;
+ hback-porch = <160>;
+ hfront-porch = <24>;
+ vback-porch = <29>;
+ vfront-porch = <3>;
+ hsync-len = <136>;
+ vsync-len = <6>;
+ };
+
+ timing5: 800x600-32@60 {
+ clock-frequency = <40000000>;
+ hactive = <800>;
+ vactive = <600>;
+ hback-porch = <120>;
+ hfront-porch = <40>;
+ vback-porch = <28>;
+ vfront-porch = <13>;
+ hsync-len = <80>;
+ vsync-len = <4>;
+ };
+
+ timing6: 800x480-32@60 {
+ clock-frequency = <25000000>;
+ hactive = <800>;
+ vactive = <480>;
+ hback-porch = <8>;
+ hfront-porch = <8>;
+ vback-porch = <8>;
+ vfront-porch = <8>;
+ hsync-len = <4>;
+ vsync-len = <4>;
+ };
+
+ timing7: 640x480-32@60 {
+ clock-frequency = <25175000>;
+ hactive = <640>;
+ vactive = <480>;
+ hback-porch = <48>;
+ hfront-porch = <16>;
+ vback-porch = <33>;
+ vfront-porch = <10>;
+ hsync-len = <96>;
+ vsync-len = <2>;
+ };
+ };
+ };
+};
+
+/ {
+ aliases {
+ mmc0 = &usdhc3;
+ mmc1 = &usdhc4;
+ eeprom_mac = &eeprom_mac;
+ };
+
+ /* Will be filled by the bootloader */
+ memory@10000000 {
+ device_type = "memory";
+ reg = <0x10000000 0x80000000>;
+ };
+
+ chosen {
+ stdout-path = &uart1;
+ };
+
+ config {
+ #ifdef LEGACY_BOOT
+ bootcmd = "startM48;errorMsg";
+ bootcmd = "startKernel;errorMsg";
+ #endif
+
+ };
+};
diff --git a/arch/arm/boot/dts/nxp/imx/imx6qp-draeger-m48.dts b/arch/arm/boot/dts/nxp/imx/imx6qp-draeger-m48.dts
new file mode 100644
index 000000000000..ab331596abd9
--- /dev/null
+++ b/arch/arm/boot/dts/nxp/imx/imx6qp-draeger-m48.dts
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2020 Draeger and Licensors, info@draeger.com
+ *
+ * Device Tree file for Drager M48 Board
+ */
+
+/dts-v1/;
+
+#include "imx6q.dtsi"
+/* PAD config disabled in imx6qdl-draeger-m48.dtsi by setting value to 0x80000000
+ * PAD configuration register must not be 0, so it is set to 0xfff
+ */
+#define MX6QDL_PAD_CTL_GRP_DDR_TYPE_RGMII 0x790 0xfff 0x000 0x000C0000 0x0
+#define MX6QDL_PAD_CTL_GRP_RGMII_TERM 0x7ac 0xfff 0x000 0x00000200 0x0
+#define IMX_PAD_SION 0x40000000 /* set SION */
+
+#include "imx6qdl-draeger-m48.dtsi"
+#include "imx6qdl-draeger-m48-u-boot.dtsi"
+
+/ {
+ model = "Draeger M48 i.MX6 Quad Plus";
+ compatible = "draeger,imx6qp-m48", "fsl,imx6qp";
+
+ vccq_sdhc3: regulator-vccq-sdhc3 {
+ compatible = "regulator-gpio";
+ regulator-name = "SDHC3 VccQ";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3300000>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_m48_regulatorvccq_sdhc3>;
+ gpios = <&gpio6 16 GPIO_ACTIVE_HIGH>;
+ gpios-states = <1>;
+ states = <3300000 0>, <1800000 1>;
+ };
+};
+
+&iomuxc {
+ m48 {
+ pinctrl_m48_usdhc3_100mhz: m48-usdhc3_100mhz {
+ fsl,pins = <
+ MX6QDL_PAD_SD3_CMD__SD3_CMD 0x1B0E9
+ MX6QDL_PAD_SD3_CLK__SD3_CLK 0x1B0E9
+ MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x1B0E9
+ MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x1B0E9
+ MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x1B0E9
+ MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x1B0E9
+ >;
+ };
+ pinctrl_m48_usdhc3_200mhz: m48-usdhc3_200mhz {
+ fsl,pins = <
+ MX6QDL_PAD_SD3_CMD__SD3_CMD 0x1B0E9
+ MX6QDL_PAD_SD3_CLK__SD3_CLK 0x1B0E9
+ MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x1B0E9
+ MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x1B0E9
+ MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x1B0E9
+ MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x1B0E9
+ >;
+ };
+
+ pinctrl_m48_regulatorvccq_sdhc3: m48-vccq-sdhc3 {
+ fsl,pins = <MX6QDL_PAD_NANDF_CS3__GPIO6_IO16 (0x1B0B0 | IMX_PAD_SION)>;
+ };
+ };
+};
+
+&usdhc3 {
+ compatible = "fsl,imx6qp-usdhc";
+ vqmmc-supply = <&vccq_sdhc3>;
+ pinctrl-names = "default", "state_100mhz", "state_200mhz";
+ pinctrl-0 = <&pinctrl_m48_usdhc3>;
+ pinctrl-1 = <&pinctrl_m48_usdhc3_100mhz>;
+ pinctrl-2 = <&pinctrl_m48_usdhc3_200mhz>;
+ sd-uhs-sdr12;
+ sd-uhs-sdr25;
+ sd-uhs-sdr50;
+ sd-uhs-ddr50;
+};
--
2.47.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v1 1/1] ARM: dts: draeger: Add devicetree files for M48 on NXP i.MX6(Q)
2026-08-25 14:02 ` [PATCH v1 1/1] ARM: dts: draeger: Add devicetree files for M48 on NXP i.MX6(Q) Petko Manolov
@ 2026-08-25 14:15 ` sashiko-bot
0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-08-25 14:15 UTC (permalink / raw)
To: Petko Manolov; +Cc: devicetree, robh, conor+dt
Thank you for your contribution! Sashiko AI review found 6 potential issue(s) to consider:
- [Critical] Masquerading IOMUXC group control registers as pinctrl pads causes a kernel heap buffer overflow during device tree parsing.
- [High] Alignment Fault (Data Abort) triggered by an unaligned device memory read if pin configurations are read via debugfs.
- [High] The `usdhc3` node in `imx6qp-draeger-m48.dts` overrides the `compatible` property with an unrecognized string, breaking SD/eMMC support.
- [Medium] Malformed `#ifdef` block containing duplicate `bootcmd` properties.
- [Medium] The newly added device tree file `imx6qp-draeger-m48.dts` is not integrated into the build system.
- [Medium] `imx6qp-draeger-m48.dts` includes a non-existent file, causing immediate compilation failure.
--
--- Patch [1]: [PATCH v1 1/1] ARM: dts: draeger: Add devicetree files for M48 on NXP i.MX6(Q) ---
commit 23a07509f15a20dcb81e207c5e98da8aa14ffeb4
Author: Petko Manolov <petko.manolov@konsulko.com>
ARM: dts: draeger: Add devicetree files for M48 on NXP i.MX6(Q)
This commit adds device tree definitions for the Draeger M48 board,
supporting i.MX6 DualLite, Quad, and Quad Plus variants. It introduces
the base DTSI file along with specific DTS files for each variant.
> diff --git a/arch/arm/boot/dts/nxp/imx/Makefile b/arch/arm/boot/dts/nxp/imx/Makefile
> index 1a2539fa19b44..44b3932562358 100644
> --- a/arch/arm/boot/dts/nxp/imx/Makefile
> +++ b/arch/arm/boot/dts/nxp/imx/Makefile
> @@ -220,6 +220,8 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
> imx6q-dmo-edmqmx6.dtb \
> imx6q-dms-ba16.dtb \
> imx6q-ds.dtb \
> + imx6q-draeger-m48.dtb \
> + imx6dl-draeger-m48.dtb \
[Severity: Medium]
Will this skip building the new imx6qp-draeger-m48.dts file?
It appears imx6qp-draeger-m48.dtb was omitted from the
dtb-$(CONFIG_SOC_IMX6Q) build list.
> imx6q-emcon-avari.dtb \
[ ... ]
> diff --git a/arch/arm/boot/dts/nxp/imx/imx6dl-draeger-m48.dts b/arch/arm/boot/dts/nxp/imx/imx6dl-draeger-m48.dts
> new file mode 100644
> index 0000000000000..45809770d16f3
> --- /dev/null
> +++ b/arch/arm/boot/dts/nxp/imx/imx6dl-draeger-m48.dts
[ ... ]
> +#include "imx6dl.dtsi"
> +/* PAD config disabled in imx6qdl-draeger-m48.dtsi by setting value to 0x80000000
> + * PAD configuration register must not be 0, so it is set to 0xfff
> + */
> +#define MX6QDL_PAD_CTL_GRP_DDR_TYPE_RGMII 0x768 0xfff 0x000 0x000C0000 0x0
> +#define MX6QDL_PAD_CTL_GRP_RGMII_TERM 0x788 0xfff 0x000 0x00000200 0x0
[Severity: High]
Will the unaligned conf_reg offset (0xfff) cause an Alignment Fault?
If the pinctrl state is later dumped via debugfs, imx_pinconf_get_mmio()
executes readl(ipctl->base + 0xfff). On ARMv7, non-4-byte-aligned accesses
to strongly-ordered IOMEM regions strictly trigger an Alignment Fault
hardware exception, which can crash the kernel.
> +#include "imx6qdl-draeger-m48.dtsi"
[ ... ]
> diff --git a/arch/arm/boot/dts/nxp/imx/imx6qdl-draeger-m48.dtsi b/arch/arm/boot/dts/nxp/imx/imx6qdl-draeger-m48.dtsi
> new file mode 100644
> index 0000000000000..bcfe7b2556cbd
> --- /dev/null
> +++ b/arch/arm/boot/dts/nxp/imx/imx6qdl-draeger-m48.dtsi
[ ... ]
> + pinctrl_m48_enet: enetgrp {
> + fsl,pins = <
> + MX6QDL_PAD_KEY_COL1__ENET_MDIO 0x1b0b0
[ ... ]
> + MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x13030
> + MX6QDL_PAD_CTL_GRP_DDR_TYPE_RGMII 0x80000000
> + MX6QDL_PAD_CTL_GRP_RGMII_TERM 0x80000000
> + >;
> + };
[Severity: Critical]
Does masquerading these IOMUXC group control registers as pinctrl pads cause
a kernel heap buffer overflow during device tree parsing?
The imx_pinctrl_parse_pin_mmio() driver derives an array index by dividing
the offset by 4. Since the driver allocates ipctl->pin_regs with 216
elements for i.MX6Q, injecting these large offsets (like 0x768 and 0x790)
results in array indices well past the 216-element heap allocation, leading
to an out-of-bounds write.
[ ... ]
> + config {
> + #ifdef LEGACY_BOOT
> + bootcmd = "startM48;errorMsg";
> + bootcmd = "startKernel;errorMsg";
> + #endif
> +
> + };
> +};
[Severity: Medium]
Is this #ifdef block missing an #else directive?
Since both bootcmd properties are inside the same branch, this will either
omit the intended default bootcmd entirely in a standard kernel build, or
fail to compile with a duplicate property error if LEGACY_BOOT is ever
defined.
> diff --git a/arch/arm/boot/dts/nxp/imx/imx6qp-draeger-m48.dts b/arch/arm/boot/dts/nxp/imx/imx6qp-draeger-m48.dts
> new file mode 100644
> index 0000000000000..ab331596abd98
> --- /dev/null
> +++ b/arch/arm/boot/dts/nxp/imx/imx6qp-draeger-m48.dts
[ ... ]
> +#include "imx6qdl-draeger-m48.dtsi"
> +#include "imx6qdl-draeger-m48-u-boot.dtsi"
[Severity: Medium]
Will this #include cause a compilation failure?
The file imx6qdl-draeger-m48-u-boot.dtsi does not appear to exist in the
Linux source tree.
[ ... ]
> +&usdhc3 {
> + compatible = "fsl,imx6qp-usdhc";
[Severity: High]
Does this unrecognized compatible string prevent the SD/eMMC driver from
binding?
The sdhci-esdhc-imx driver expects fsl,imx6q-usdhc, so using
fsl,imx6qp-usdhc will break storage on the Quad Plus variant.
> + vqmmc-supply = <&vccq_sdhc3>;
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260825140225.3968019-3-petko.manolov@konsulko.com?part=1
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v1 1/1] ARM: dts: draeger: Add devicetree files for M48 Intel/Altera SoCFPGA Cyclone
2026-08-25 14:02 ` [PATCH v1 1/1] ARM: dts: draeger: Add devicetree files for M48 Intel/Altera SoCFPGA Cyclone Petko Manolov
@ 2026-08-25 14:16 ` sashiko-bot
0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-08-25 14:16 UTC (permalink / raw)
To: Petko Manolov; +Cc: devicetree, robh, conor+dt
Thank you for your contribution! Sashiko AI review found 6 potential issue(s) to consider:
- [Low] Invalid and undocumented root compatible string.
- [Low] Leading `0x` in node unit-addresses.
- [Low] Undocumented transmit data skew properties (`txd*-skew-ps`) in GMAC node.
- [Low] Invalid and incomplete compatible string for SPI NOR flash.
- [Low] Usage of undocumented and obsolete properties (`cdns,page-size`, `cdns,block-size`, `m25p,fast-read`) in the SPI NOR flash node.
- [Low] Undocumented `bank-name` property in dw-apb-gpio port nodes.
--
--- Patch [1]: [PATCH v1 1/1] ARM: dts: draeger: Add devicetree files for M48 Intel/Altera SoCFPGA Cyclone ---
commit e3e6bb83ed93fbcc4abe100ece757b6cae933f06
Author: Petko Manolov <petko.manolov@konsulko.com>
ARM: dts: draeger: Add devicetree files for M48 Intel/Altera SoCFPGA Cyclone
This commit adds the DeviceTree source for the Draeger M48 Cyclone V SoC.
It configures basic SoC nodes, including memory, GPIO controllers, gigabit
ethernet, i2c eeprom, and QSPI flash.
> --- /dev/null
> +++ b/arch/arm/boot/dts/intel/socfpga/socfpga_cyclone5_draeger_m48.dts
> @@ -0,0 +1,132 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * (C) Copyright 2020 Draeger and Licensors, info@draeger.com
> + */
> +#include "socfpga_cyclone5.dtsi"
> +
> +/ {
> + model = "Draeger M48 Cyclone V SoC";
> + compatible = "draeger,M48/socfpga", "altr,socfpga-cyclone5", "altr,socfpga";
[Severity: Low]
Is this root compatible string correct? The DeviceTree specification does not
allow slashes in compatible strings, so "draeger,M48/socfpga" will trigger
warnings. Additionally, does the "draeger" vendor prefix need to be added
to vendor-prefixes.yaml, and this board compatible to the altera bindings?
[ ... ]
> + soc {
> + gpio3: gpio@0xff202000 {
[Severity: Low]
Should this unit-address omit the leading 0x? The DeviceTree specification
requires unit-addresses to be formatted as bare hex strings without the
0x prefix (e.g., gpio@ff202000).
> + #address-cells = <1>;
> + #size-cells = <0>;
> + compatible = "snps,dw-apb-gpio";
> + reg = <0xff202000 0x20>;
> + status = "okay";
> +
> + portd: gpio-controller@0 {
> + compatible = "snps,dw-apb-gpio-port";
> + gpio-controller;
> + #gpio-cells = <2>;
> + snps,nr-gpios = <2>;
> + reg = <0>;
> + bank-name = "SYNC_I";
[Severity: Low]
Is bank-name a valid property for these dw-apb-gpio port nodes? It does not
appear in the snps,dw-apb-gpio.yaml binding, which enforces
additionalProperties: false and will fail schema validation.
> + };
> + };
> +
> + gpio4: gpio@0xff202020 {
[Severity: Low]
Similarly, should this node be named gpio@ff202020 to avoid the leading 0x
validation warnings?
> + #address-cells = <1>;
> + #size-cells = <0>;
> + compatible = "snps,dw-apb-gpio";
> + reg = <0xff202020 0x20>;
> + status = "okay";
> +
> + porte: gpio-controller@0 {
> + compatible = "snps,dw-apb-gpio-port";
> + gpio-controller;
> + #gpio-cells = <2>;
> + snps,nr-gpios = <2>;
> + reg = <0>;
> + bank-name = "SYNC_O";
[Severity: Low]
Does this bank-name property also need to be removed or documented to pass
dtbs_check?
[ ... ]
> +&gmac0 {
> + status = "okay";
> + phy-mode = "rgmii-id";
> + rxc-skew-ps = <1860>;
> + rxd0-skew-ps = <0>;
> + rxd1-skew-ps = <0>;
> + rxd2-skew-ps = <0>;
> + rxd3-skew-ps = <0>;
> + rxdv-skew-ps = <0>;
> + txc-skew-ps = <900>;
> + txd0-skew-ps = <0>;
> + txd1-skew-ps = <0>;
> + txd2-skew-ps = <0>;
> + txd3-skew-ps = <0>;
[Severity: Low]
Are these txd0 through txd3 skew properties supported by the stmmac schema?
While RX skews and txc-skew-ps are documented, the txd[0-3]-skew-ps properties
are missing from altr,socfpga-stmmac.yaml, which will cause validation to fail
since unevaluatedProperties is set to false.
[ ... ]
> +&qspi {
> + status = "okay";
> +
> + flash0: n25q00@0 {
> + #address-cells = <1>;
> + #size-cells = <1>;
> + compatible = "n25q00";
[Severity: Low]
Could this compatible string be incomplete? Standard OF-based driver matching
and the mtd/jedec,spi-nor.yaml binding require a vendor prefix and the generic
fallback, such as "micron,n25q00", "jedec,spi-nor".
> + reg = <0>;
> +
> + /* chip select */
> + spi-max-frequency = <100000000>;
> + m25p,fast-read;
> + cdns,page-size = <256>;
> + cdns,block-size = <16>;
[Severity: Low]
Are these properties correct for modern Cadence QSPI bindings?
The cdns,page-size and cdns,block-size properties are undocumented, and
m25p,fast-read is an obsolete property not present in modern schemas. They
will trigger dtbs_check validation errors.
> + cdns,read-delay = <4>;
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260825140225.3968019-2-petko.manolov@konsulko.com?part=1
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-08-25 14:16 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-25 14:02 [PATCH v1 0/1] ARM: dts: draeger: Add devicetrees for Draeger's M48 board Petko Manolov
2026-08-25 14:02 ` [PATCH v1 1/1] ARM: dts: draeger: Add devicetree files for M48 Intel/Altera SoCFPGA Cyclone Petko Manolov
2026-08-25 14:16 ` sashiko-bot
2026-08-25 14:02 ` [PATCH v1 1/1] ARM: dts: draeger: Add devicetree files for M48 on NXP i.MX6(Q) Petko Manolov
2026-08-25 14:15 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox