[PATCH v3 2/5] arm64: dts: sophgo: add initial Milk-V Duo S board support

Michael Opdenacker michael.opdenacker at rootcommit.com
Wed Oct 29 05:35:43 PDT 2025


Hi Joshua

Many thanks for this update! I'd love to have this board supported in 
mainline, and when this happens, I'll add it to Yocto's meta-riscv layer 
to make it easy to use.

On 10/29/25 01:10, Joshua Milas wrote:
> 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 at gmail.com>
> ---
>   arch/arm64/boot/dts/sophgo/Makefile           |  1 +
>   .../boot/dts/sophgo/sg2000-milkv-duo-s.dts    | 80 +++++++++++++++++++
>   2 files changed, 81 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 94f52cd7d994b..68aace728223a 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 0000000000000..174c194e1301d
> --- /dev/null
> +++ b/arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts
> @@ -0,0 +1,80 @@
> +// SPDX-License-Identifier: (GPL-2.0 OR MIT)
> +
> +/dts-v1/;
> +
> +#include "sg2000.dtsi"
> +
> +/ {
> +	model = "Milk-V Duo S";
> +	compatible = "milkv,duo-s", "sophgo,sg2000";
> +
> +	aliases {
> +		i2c4 = &i2c4;
> +		mmc0 = &sdhci0;
> +		serial0 = &uart0;
> +		spi3 = &spi3;
> +	};
> +
> +	chosen {
> +		stdout-path = "serial0:115200n8";
> +	};
> +};
> +
> +&osc {
> +	clock-frequency = <25000000>;
> +};
> +
> +&dmac {
> +	status = "okay";
> +};
> +
> +&emmc {
> +	bus-width = <4>;
> +	no-1-8-v;
> +	cap-mmc-hw-reset;
> +	no-sd;
> +	no-sdio;
> +	non-removable;
> +	status = "okay";
> +};
> +
> +&gmac0 {
> +	status = "okay";
> +};
> +
> +&i2c4 {
> +	status = "okay";
> +};
> +
> +&mdio {
> +	status = "okay";
> +};
> +
> +&saradc {
> +	status = "okay";
> +};
> +
> +&sdhci0 {
> +	bus-width = <4>;
> +	no-1-8-v;
> +	disable-wp;
> +	status = "okay";
> +};
> +
> +&sdhci1 {
> +	bus-width = <4>;
> +	cap-sdio-irq;
> +	no-mmc;
> +	no-sd;
> +	non-removable;
> +	status = "okay";
> +};
> +
> +&spi3 {
> +	status = "okay";
> +};
> +
> +&uart0 {
> +	status = "okay";
> +};
> +


I managed to boot the board and run tests:

Tested successfully:

  * uart0: boot console
  * mmc0 (sdhci0?): root filesystem

Issues

  *

    eth0:

    ifconfig eth0 172.24.0.2
    [ 48.893725] stmmaceth 4070000.ethernet eth0: Register
    MEM_TYPE_PAGE_POOL RxQ-0
    [ 48.903077] stmmaceth 4070000.ethernet eth0: cannot attach to PHY
    (error: -ENODEV)
    ifconfig: SIOCSIFFLAGS: No such device

    I believe I have all drivers enabled though...

  * emmc:

    [ 2.730194] mmc2: Failed to initialize a non-removable card
    [ 2.764843] mmc1: Failed to initialize a non-removable card

    I tested with a board that has an eMMC

  * i2c4: detected by "i2cdetect -l"
    but no devices found by "i2cdetect -r 4"
    I tried both pins 3/4 and pins 50/48, with two different devices
    connected to the bus.
    Which pins did you use? I could check the SoC pin muxing, but your
    answer will save me time :D

Would you mind sharing your defconfig file ("make savedefconfig") via a 
private message or through a link (to avoid sending the entire file to 
the list)?
Thanks again
Cheers
Michael.


-- 
Michael Opdenacker
Root Commit
Yocto Project and OpenEmbedded Training course - Learn by doing:
https://rootcommit.com/training/yocto/




More information about the linux-riscv mailing list