* [PATCH v1 1/1] arm: draeger: Dräger M48 on NXP i.MX6(Q) and Intel/Altera SoCFPGA Cyclone V devicetree.
2026-08-19 15:30 [PATCH v1 0/1] arm: draeger: Add devicetrees for Draeger's M48 board Petko Manolov
@ 2026-08-19 15:30 ` Petko Manolov
2026-08-19 16:43 ` Fabio Estevam
0 siblings, 1 reply; 4+ messages in thread
From: Petko Manolov @ 2026-08-19 15:30 UTC (permalink / raw)
To: u-boot; +Cc: trini, festevam, uboot-imx, Petko Manolov
Signed-off-by: Petko Manolov <petko.manolov@konsulko.com>
---
arch/arm/dts/Makefile | 3 +
arch/arm/dts/imx6dl-draeger-m48.dts | 24 ++
arch/arm/dts/imx6q-draeger-m48.dts | 24 ++
arch/arm/dts/imx6qdl-draeger-m48-u-boot.dtsi | 20 +
arch/arm/dts/imx6qdl-draeger-m48.dtsi | 369 ++++++++++++++++++
arch/arm/dts/imx6qp-draeger-m48.dts | 78 ++++
.../socfpga_cyclone5_draeger_m48-u-boot.dtsi | 66 ++++
arch/arm/dts/socfpga_cyclone5_draeger_m48.dts | 132 +++++++
8 files changed, 716 insertions(+)
create mode 100644 arch/arm/dts/imx6dl-draeger-m48.dts
create mode 100644 arch/arm/dts/imx6q-draeger-m48.dts
create mode 100644 arch/arm/dts/imx6qdl-draeger-m48-u-boot.dtsi
create mode 100644 arch/arm/dts/imx6qdl-draeger-m48.dtsi
create mode 100644 arch/arm/dts/imx6qp-draeger-m48.dts
create mode 100644 arch/arm/dts/socfpga_cyclone5_draeger_m48-u-boot.dtsi
create mode 100644 arch/arm/dts/socfpga_cyclone5_draeger_m48.dts
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index 87cf9f436eb8..0b8a1eb33f1d 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -437,6 +437,7 @@ dtb-$(CONFIG_ARCH_SOCFPGA) += \
socfpga_cyclone5_vining_fpga.dtb \
socfpga_cyclone5_ac501soc.dtb \
socfpga_cyclone5_ac550soc.dtb \
+ socfpga_cyclone5_draeger_m48.dtb \
socfpga_n5x_socdk.dtb \
socfpga_stratix10_socdk.dtb
@@ -694,6 +695,7 @@ dtb-y += \
imx6dl-cubox-i.dtb \
imx6dl-cubox-i-emmc-som-v15.dtb \
imx6dl-cubox-i-som-v15.dtb \
+ imx6dl-draeger-m48.dtb \
imx6dl-gw51xx.dtb \
imx6dl-gw52xx.dtb \
imx6dl-gw53xx.dtb \
@@ -737,6 +739,7 @@ dtb-y += \
imx6q-cubox-i-emmc-som-v15.dtb \
imx6q-cubox-i-som-v15.dtb \
imx6q-display5.dtb \
+ imx6q-draeger-m48.dtb \
imx6q-gw51xx.dtb \
imx6q-gw52xx.dtb \
imx6q-gw53xx.dtb \
diff --git a/arch/arm/dts/imx6dl-draeger-m48.dts b/arch/arm/dts/imx6dl-draeger-m48.dts
new file mode 100644
index 000000000000..63c882269f03
--- /dev/null
+++ b/arch/arm/dts/imx6dl-draeger-m48.dts
@@ -0,0 +1,24 @@
+// 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"
+#include "imx6qdl-draeger-m48-u-boot.dtsi"
+
+/ {
+ model = "Draeger M48 i.MX6 DualLite";
+ compatible = "draeger,imx6dl-m48", "fsl,imx6dl";
+};
diff --git a/arch/arm/dts/imx6q-draeger-m48.dts b/arch/arm/dts/imx6q-draeger-m48.dts
new file mode 100644
index 000000000000..1daf6ccf2b84
--- /dev/null
+++ b/arch/arm/dts/imx6q-draeger-m48.dts
@@ -0,0 +1,24 @@
+// 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"
+#include "imx6qdl-draeger-m48-u-boot.dtsi"
+
+/ {
+ model = "Draeger M48 i.MX6 Quad";
+ compatible = "draeger,imx6q-m48", "fsl,imx6q";
+};
diff --git a/arch/arm/dts/imx6qdl-draeger-m48-u-boot.dtsi b/arch/arm/dts/imx6qdl-draeger-m48-u-boot.dtsi
new file mode 100644
index 000000000000..f7ed10df93ce
--- /dev/null
+++ b/arch/arm/dts/imx6qdl-draeger-m48-u-boot.dtsi
@@ -0,0 +1,20 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2026 Draeger and Licensors, info@draeger.com
+ *
+ * U-Boot specific device tree configuration for M48 board.
+ * Optimizes boot time by skipping redundant UART clock enable during
+ * pre-relocation (clocks already enabled by ROM/SPL).
+ */
+
+#include "imx6qdl-u-boot.dtsi"
+
+&uart1 {
+ /*
+ * UART clocks are already enabled by ROM/SPL on i.MX6.
+ * Skip explicit clock enable during pre-relocation to avoid expensive
+ * clock parent chain probing (IPG, AHB, PERIPH clocks) which adds
+ * ~20+ device probes and ~250ms boot time overhead.
+ */
+ u-boot,uart-clocks-pre-enabled;
+};
diff --git a/arch/arm/dts/imx6qdl-draeger-m48.dtsi b/arch/arm/dts/imx6qdl-draeger-m48.dtsi
new file mode 100644
index 000000000000..bcfe7b2556cb
--- /dev/null
+++ b/arch/arm/dts/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/dts/imx6qp-draeger-m48.dts b/arch/arm/dts/imx6qp-draeger-m48.dts
new file mode 100644
index 000000000000..ab331596abd9
--- /dev/null
+++ b/arch/arm/dts/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;
+};
diff --git a/arch/arm/dts/socfpga_cyclone5_draeger_m48-u-boot.dtsi b/arch/arm/dts/socfpga_cyclone5_draeger_m48-u-boot.dtsi
new file mode 100644
index 000000000000..0765d9d8d8fe
--- /dev/null
+++ b/arch/arm/dts/socfpga_cyclone5_draeger_m48-u-boot.dtsi
@@ -0,0 +1,66 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2020 Draeger and Licensors, info@draeger.com
+ */
+#include "socfpga-common-u-boot.dtsi"
+
+/ {
+ aliases {
+ spi0 = "/soc/spi@ff705000";
+ };
+
+ config {
+ #ifdef LEGACY_BOOT
+ bootcmd = "startM48;errorMsg";
+ bootcmd = "startKernel;errorMsg";
+ #endif
+
+ };
+};
+
+&watchdog0 {
+ status = "disabled";
+};
+
+&mmc {
+ bootph-all;
+};
+
+&qspi {
+ bootph-all;
+};
+
+&gpio0 {
+ status = "okay";
+ bootph-all;
+};
+
+&gpio1 {
+ status = "okay";
+ bootph-all;
+};
+
+&gpio2 {
+ status = "okay";
+ bootph-all;
+};
+
+&uart0 {
+ clock-frequency = <100000000>;
+ bootph-all;
+};
+
+&porta {
+ bank-name = "GPIO0_";
+ bootph-all;
+};
+
+&portb {
+ bank-name = "GPIO1_";
+ bootph-all;
+};
+
+&portc {
+ bank-name = "GPIO2_";
+ bootph-all;
+};
diff --git a/arch/arm/dts/socfpga_cyclone5_draeger_m48.dts b/arch/arm/dts/socfpga_cyclone5_draeger_m48.dts
new file mode 100644
index 000000000000..fd597f15c0d8
--- /dev/null
+++ b/arch/arm/dts/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] 4+ messages in thread