arm64: dts: sophgo: add initial Milk-V Duo S board support

Adds initial arm64 support for the Milk-V Duo S board
[1] making it possible to boot Linux to the command line.

Link: https://milkv.io/duo-s [1]

Signed-off-by: Joshua Milas <josh.milas@gmail.com>
Link: https://milkv.io/duo-s [1]
Link: https://patch.msgid.link/20260615120324.1527881-2-josh.milas@gmail.com
Signed-off-by: Inochi Amaoto <inochiama@gmail.com> # Trim empty line
Signed-off-by: Chen Wang <chen.wang@linux.dev>
This commit is contained in:
Joshua Milas 2026-06-15 08:03:22 -04:00 committed by Inochi Amaoto
parent dc59e4fea9
commit d5e1ea5b05
No known key found for this signature in database
GPG Key ID: 9BC854A73E78BE50
2 changed files with 245 additions and 0 deletions

View File

@ -1,2 +1,3 @@
# SPDX-License-Identifier: GPL-2.0
dtb-$(CONFIG_ARCH_SOPHGO) += sg2000-milkv-duo-module-01-evb.dtb
dtb-$(CONFIG_ARCH_SOPHGO) += sg2000-milkv-duo-s.dtb

View File

@ -0,0 +1,244 @@
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/dts-v1/;
#include <dt-bindings/pinctrl/pinctrl-sg2000.h>
#include "sg2000.dtsi"
/ {
model = "Milk-V Duo S";
compatible = "milkv,duo-s", "sophgo,sg2000";
aliases {
i2c4 = &i2c4;
mmc0 = &sdhci0;
mmc1 = &emmc;
mmc2 = &sdhci1;
serial0 = &uart0;
serial4 = &uart4;
};
chosen {
stdout-path = "serial0:115200n8";
};
wifi_pwrseq: wifi-pwrseq {
compatible = "mmc-pwrseq-simple";
reset-gpios = <&porta 15 GPIO_ACTIVE_LOW>;
power-off-delay-us = <50000>;
post-power-on-delay-ms = <200>;
};
};
&osc {
clock-frequency = <25000000>;
};
&pinctrl {
emmc_cfg: emmc-cfg {
emmc-rstn-pins {
pinmux = <PINMUX(PIN_EMMC_RSTN, 0)>;
bias-pull-up;
drive-strength-microamp = <10800>;
power-source = <1800>;
};
emmc-clk-pins {
pinmux = <PINMUX(PIN_EMMC_CLK, 0)>;
bias-pull-up;
drive-strength-microamp = <10800>;
power-source = <1800>;
};
emmc-cmd-pins {
pinmux = <PINMUX(PIN_EMMC_CMD, 0)>;
bias-pull-up;
drive-strength-microamp = <10800>;
power-source = <1800>;
};
emmc-data-pins {
pinmux = <PINMUX(PIN_EMMC_DAT0, 0)>,
<PINMUX(PIN_EMMC_DAT1, 0)>,
<PINMUX(PIN_EMMC_DAT2, 0)>,
<PINMUX(PIN_EMMC_DAT3, 0)>;
bias-pull-up;
drive-strength-microamp = <10800>;
power-source = <1800>;
};
};
i2c4_cfg: i2c4-cfg {
i2c4-pins {
pinmux = <PINMUX(PIN_VIVO_D1, 7)>,
<PINMUX(PIN_VIVO_D0, 7)>;
bias-pull-up;
drive-strength-microamp = <4000>;
power-source = <1800>;
};
};
sdhci0_cfg: sdhci0-cfg {
sdhci0-cd-pins {
pinmux = <PINMUX(PIN_SD0_CD, 0)>;
bias-pull-up;
drive-strength-microamp = <10800>;
power-source = <3300>;
};
sdhci0-clk-pins {
pinmux = <PINMUX(PIN_SD0_CLK, 0)>;
bias-pull-up;
drive-strength-microamp = <16100>;
power-source = <3300>;
};
sdhci0-cmd-pins {
pinmux = <PINMUX(PIN_SD0_CMD, 0)>;
bias-pull-up;
drive-strength-microamp = <10800>;
power-source = <3300>;
};
sdhci0-data-pins {
pinmux = <PINMUX(PIN_SD0_D0, 0)>,
<PINMUX(PIN_SD0_D1, 0)>,
<PINMUX(PIN_SD0_D2, 0)>,
<PINMUX(PIN_SD0_D3, 0)>;
bias-pull-up;
drive-strength-microamp = <10800>;
power-source = <3300>;
};
};
sdhci1_cfg: sdhci1-cfg {
sdhci1-clk-pins {
pinmux = <PINMUX(PIN_MIPI_TXM4, 1)>;
bias-pull-up;
drive-strength-microamp = <10800>;
power-source = <1800>;
};
sdhci1-cmd-pins {
pinmux = <PINMUX(PIN_MIPI_TXP4, 1)>;
bias-pull-up;
drive-strength-microamp = <10800>;
power-source = <1800>;
};
sdhci1-data-pins {
pinmux = <PINMUX(PIN_MIPI_TXM3, 1)>,
<PINMUX(PIN_MIPI_TXP3, 1)>,
<PINMUX(PIN_MIPI_TXM2, 7)>,
<PINMUX(PIN_MIPI_TXP2, 7)>;
bias-pull-up;
drive-strength-microamp = <10800>;
power-source = <1800>;
};
};
uart0_cfg: uart0-cfg {
uart0-pins {
pinmux = <PINMUX(PIN_UART0_TX, 0)>,
<PINMUX(PIN_UART0_RX, 0)>;
bias-pull-up;
drive-strength-microamp = <10800>;
power-source = <3300>;
};
};
uart4_cfg: uart4-cfg {
uart4-data-pins {
pinmux = <PINMUX(PIN_UART2_TX, 5)>,
<PINMUX(PIN_UART2_RX, 5)>;
drive-strength-microamp = <10800>;
power-source = <3300>;
};
uart4-control-pins {
pinmux = <PINMUX(PIN_UART2_CTS, 5)>,
<PINMUX(PIN_UART2_RTS, 5)>;
bias-pull-up;
drive-strength-microamp = <10800>;
power-source = <3300>;
};
};
};
&dmac {
status = "okay";
};
&emmc {
bus-width = <4>;
no-1-8-v;
cap-mmc-hw-reset;
no-sd;
no-sdio;
non-removable;
pinctrl-0 = <&emmc_cfg>;
pinctrl-names = "default";
status = "okay";
};
&gmac0 {
status = "okay";
};
&i2c4 {
pinctrl-0 = <&i2c4_cfg>;
pinctrl-names = "default";
status = "okay";
};
&mdio {
status = "okay";
};
&saradc {
status = "okay";
};
&sdhci0 {
bus-width = <4>;
disable-wp;
no-1-8-v;
pinctrl-0 = <&sdhci0_cfg>;
pinctrl-names = "default";
status = "okay";
};
&sdhci1 {
bus-width = <4>;
cap-sdio-irq;
cap-sd-highspeed;
keep-power-in-suspend;
no-mmc;
no-sd;
non-removable;
max-frequency = <150000000>;
mmc-pwrseq = <&wifi_pwrseq>;
pinctrl-0 = <&sdhci1_cfg>;
pinctrl-names = "default";
sd-uhs-sdr50;
sd-uhs-sdr104;
status = "okay";
};
&uart0 {
pinctrl-0 = <&uart0_cfg>;
pinctrl-names = "default";
status = "okay";
};
&uart4 {
pinctrl-0 = <&uart4_cfg>;
pinctrl-names = "default";
uart-has-rtscts;
status = "okay";
};
&usb {
dr_mode = "host";
status = "okay";
};