* [PATCH v6 1/3] arm64: dts: sophgo: add initial Milk-V Duo S board support
2026-06-15 12:03 [PATCH v6 0/3] Add initial Milk-V Duo S board support Joshua Milas
@ 2026-06-15 12:03 ` Joshua Milas
2026-06-15 12:20 ` sashiko-bot
2026-06-15 12:03 ` [PATCH v6 2/3] riscv64: dts: sophgo: add SG2000 dtsi Joshua Milas
2026-06-15 12:03 ` [PATCH v6 3/3] riscv64: dts: sophgo: add initial Milk-V Duo S board support Joshua Milas
2 siblings, 1 reply; 6+ messages in thread
From: Joshua Milas @ 2026-06-15 12:03 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, pjw, chen.wang, inochiama, palmer, aou,
alex, liujingqi, alexander.sverdlin, rabenda.cn, hanguidong02
Cc: josh.milas, linux-kernel, devicetree, linux-riscv, sophgo,
michael.opdenacker
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>
---
arch/arm64/boot/dts/sophgo/Makefile | 1 +
.../boot/dts/sophgo/sg2000-milkv-duo-s.dts | 245 ++++++++++++++++++
2 files changed, 246 insertions(+)
create mode 100644 arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts
diff --git a/arch/arm64/boot/dts/sophgo/Makefile b/arch/arm64/boot/dts/sophgo/Makefile
index 94f52cd7d994..68aace728223 100644
--- a/arch/arm64/boot/dts/sophgo/Makefile
+++ b/arch/arm64/boot/dts/sophgo/Makefile
@@ -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
diff --git a/arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts b/arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts
new file mode 100644
index 000000000000..f56bfddeacc4
--- /dev/null
+++ b/arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts
@@ -0,0 +1,245 @@
+// 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";
+};
+
--
2.54.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH v6 1/3] arm64: dts: sophgo: add initial Milk-V Duo S board support
2026-06-15 12:03 ` [PATCH v6 1/3] arm64: dts: sophgo: add " Joshua Milas
@ 2026-06-15 12:20 ` sashiko-bot
0 siblings, 0 replies; 6+ messages in thread
From: sashiko-bot @ 2026-06-15 12:20 UTC (permalink / raw)
To: Joshua Milas; +Cc: robh, conor+dt, devicetree
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The `no-1-8-v` property in the `&emmc` node artificially restricts eMMC performance, contradicting the 1.8V pinctrl pad configuration.
--
commit 16f792133b8071df278eace7bc1ca7b6e4b52d31
Author: Joshua Milas <josh.milas@gmail.com>
arm64: dts: sophgo: add initial Milk-V Duo S board support
Adds initial arm64 support for the Milk-V Duo S board making it possible
to boot Linux to the command line.
Link: https://milkv.io/duo-s [1]
> diff --git a/arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts b/arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts
> new file mode 100644
> index 0000000000000..f56bfddeacc40
> --- /dev/null
> +++ b/arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts
[ ... ]
> + 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 {
> + bus-width = <4>;
> + no-1-8-v;
[Severity: Medium]
The emmc node specifies no-1-8-v, but the emmc_cfg pinctrl configures the
eMMC pins for 1.8V logic using power-source = <1800>. Is the board
physically wired to operate the eMMC at 1.8V?
If the hardware supports 1.8V, is it possible that setting no-1-8-v
artificially restricts the eMMC from utilizing high-speed capabilities
like HS200 and HS400?
> + cap-mmc-hw-reset;
> + no-sd;
> + no-sdio;
> + non-removable;
> + pinctrl-0 = <&emmc_cfg>;
> + pinctrl-names = "default";
> + status = "okay";
> +};
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260615120324.1527881-1-josh.milas@gmail.com?part=1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v6 2/3] riscv64: dts: sophgo: add SG2000 dtsi
2026-06-15 12:03 [PATCH v6 0/3] Add initial Milk-V Duo S board support Joshua Milas
2026-06-15 12:03 ` [PATCH v6 1/3] arm64: dts: sophgo: add " Joshua Milas
@ 2026-06-15 12:03 ` Joshua Milas
2026-06-15 12:03 ` [PATCH v6 3/3] riscv64: dts: sophgo: add initial Milk-V Duo S board support Joshua Milas
2 siblings, 0 replies; 6+ messages in thread
From: Joshua Milas @ 2026-06-15 12:03 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, pjw, chen.wang, inochiama, palmer, aou,
alex, liujingqi, alexander.sverdlin, rabenda.cn, hanguidong02
Cc: josh.milas, linux-kernel, devicetree, linux-riscv, sophgo,
michael.opdenacker
Adds sg2000.dtsi on the RISCV side.
Signed-off-by: Joshua Milas <josh.milas@gmail.com>
Tested-by: Gui-Dong Han <hanguidong02@gmail.com>
Reviewed-by: Gui-Dong Han <hanguidong02@gmail.com>
---
arch/riscv/boot/dts/sophgo/sg2000.dtsi | 53 ++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
create mode 100644 arch/riscv/boot/dts/sophgo/sg2000.dtsi
diff --git a/arch/riscv/boot/dts/sophgo/sg2000.dtsi b/arch/riscv/boot/dts/sophgo/sg2000.dtsi
new file mode 100644
index 000000000000..38462769574f
--- /dev/null
+++ b/arch/riscv/boot/dts/sophgo/sg2000.dtsi
@@ -0,0 +1,53 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+
+#define SOC_PERIPHERAL_IRQ(nr) ((nr) + 16)
+
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/pinctrl/pinctrl-sg2000.h>
+#include "cv180x-cpus.dtsi"
+#include "cv180x.dtsi"
+#include "cv181x.dtsi"
+
+/ {
+ compatible = "sophgo,sg2000";
+
+ memory@80000000 {
+ device_type = "memory";
+ reg = <0x80000000 0x20000000>;
+ };
+
+ soc {
+ interrupt-parent = <&plic>;
+ dma-noncoherent;
+
+ pinctrl: pinctrl@3001000 {
+ compatible = "sophgo,sg2000-pinctrl";
+ reg = <0x03001000 0x1000>,
+ <0x05027000 0x1000>;
+ reg-names = "sys", "rtc";
+ };
+
+ clk: clock-controller@3002000 {
+ compatible = "sophgo,sg2000-clk";
+ reg = <0x03002000 0x1000>;
+ clocks = <&osc>;
+ #clock-cells = <1>;
+ };
+
+ plic: interrupt-controller@70000000 {
+ compatible = "sophgo,sg2000-plic", "thead,c900-plic";
+ reg = <0x70000000 0x4000000>;
+ interrupts-extended = <&cpu0_intc 11>, <&cpu0_intc 9>;
+ interrupt-controller;
+ #address-cells = <0>;
+ #interrupt-cells = <2>;
+ riscv,ndev = <101>;
+ };
+
+ clint: timer@74000000 {
+ compatible = "sophgo,sg2000-clint", "thead,c900-clint";
+ reg = <0x74000000 0x10000>;
+ interrupts-extended = <&cpu0_intc 3>, <&cpu0_intc 7>;
+ };
+ };
+};
--
2.54.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH v6 3/3] riscv64: dts: sophgo: add initial Milk-V Duo S board support
2026-06-15 12:03 [PATCH v6 0/3] Add initial Milk-V Duo S board support Joshua Milas
2026-06-15 12:03 ` [PATCH v6 1/3] arm64: dts: sophgo: add " Joshua Milas
2026-06-15 12:03 ` [PATCH v6 2/3] riscv64: dts: sophgo: add SG2000 dtsi Joshua Milas
@ 2026-06-15 12:03 ` Joshua Milas
2026-06-15 12:14 ` sashiko-bot
2 siblings, 1 reply; 6+ messages in thread
From: Joshua Milas @ 2026-06-15 12:03 UTC (permalink / raw)
To: robh, krzk+dt, conor+dt, pjw, chen.wang, inochiama, palmer, aou,
alex, liujingqi, alexander.sverdlin, rabenda.cn, hanguidong02
Cc: josh.milas, linux-kernel, devicetree, linux-riscv, sophgo,
michael.opdenacker
This adds initial riscv 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>
---
arch/riscv/boot/dts/sophgo/Makefile | 1 +
.../boot/dts/sophgo/sg2000-milkv-duo-s.dts | 245 ++++++++++++++++++
2 files changed, 246 insertions(+)
create mode 100644 arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts
diff --git a/arch/riscv/boot/dts/sophgo/Makefile b/arch/riscv/boot/dts/sophgo/Makefile
index 6f65526d4193..58cc6b70d8de 100644
--- a/arch/riscv/boot/dts/sophgo/Makefile
+++ b/arch/riscv/boot/dts/sophgo/Makefile
@@ -1,6 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
dtb-$(CONFIG_ARCH_SOPHGO) += cv1800b-milkv-duo.dtb
dtb-$(CONFIG_ARCH_SOPHGO) += cv1812h-huashan-pi.dtb
+dtb-$(CONFIG_ARCH_SOPHGO) += sg2000-milkv-duo-s.dtb
dtb-$(CONFIG_ARCH_SOPHGO) += sg2002-licheerv-nano-b.dtb
dtb-$(CONFIG_ARCH_SOPHGO) += sg2042-milkv-pioneer.dtb
dtb-$(CONFIG_ARCH_SOPHGO) += sg2042-evb-v1.dtb
diff --git a/arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts b/arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts
new file mode 100644
index 000000000000..f56bfddeacc4
--- /dev/null
+++ b/arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts
@@ -0,0 +1,245 @@
+// 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";
+};
+
--
2.54.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH v6 3/3] riscv64: dts: sophgo: add initial Milk-V Duo S board support
2026-06-15 12:03 ` [PATCH v6 3/3] riscv64: dts: sophgo: add initial Milk-V Duo S board support Joshua Milas
@ 2026-06-15 12:14 ` sashiko-bot
0 siblings, 0 replies; 6+ messages in thread
From: sashiko-bot @ 2026-06-15 12:14 UTC (permalink / raw)
To: Joshua Milas; +Cc: devicetree, robh, conor+dt
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] Contradictory eMMC voltage configuration artificially restricts eMMC speed capabilities
--
commit 9d652e59c7623b46a5dd7a0a5954061467e5aea7
Author: Joshua Milas <josh.milas@gmail.com>
riscv64: dts: sophgo: add initial Milk-V Duo S board support
This adds initial riscv support for the Milk-V Duo S board
making it possible to boot Linux to the command line.
Link: https://milkv.io/duo-s [1]
> diff --git a/arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts b/arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts
> new file mode 100644
> index 0000000000000..f56bfddeacc40
> --- /dev/null
> +++ b/arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts
[ ... ]
> +&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 {
> + bus-width = <4>;
> + no-1-8-v;
[Severity: Medium]
Is this contradictory eMMC voltage configuration intentional?
The pinctrl node emmc_cfg explicitly configures the eMMC pins to
operate at 1.8V (power-source = <1800>), but the &emmc node here
specifies the no-1-8-v property.
Since the hardware pads are physically configured for 1.8V, the interface
actually does support 1.8V signaling. Specifying no-1-8-v here artificially
restricts the eMMC to legacy, slower modes instead of negotiating
faster modes like HS200.
> + cap-mmc-hw-reset;
> + no-sd;
> + no-sdio;
> + non-removable;
> + pinctrl-0 = <&emmc_cfg>;
> + pinctrl-names = "default";
> + status = "okay";
> +};
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260615120324.1527881-1-josh.milas@gmail.com?part=3
^ permalink raw reply [flat|nested] 6+ messages in thread