Add initial Milk-V Duo S board support
Subsystems (6)
v5 cover Add initial Milk-V Duo S board support
This adds an initial device tree for the Milk-V Duo S board with support for reading from the SD card and network over Ethernet. This is continued work from Michael Opdenacker's v6 series [1] on the ARM64 and RISCV side. It has been tested with ARM64 and RISCV64 to boot from an SD card, have networking, and read I2C slave devices over i2c4.
---
v5
- Fixes spaces at beginning of line in &usb node of DTS
v4: https://lore.kernel.org/sophgo/[email protected]/
- Rebased to latest sophogo/for-next
- Added usb node to arm64 and riscv DTS
- Removed sg200x link in commit messages
- Added missing change to v3 and removed link from v2
v3: https://lore.kernel.org/sophgo/[email protected]/
- Added sg2000 interrupt controller and timer to documentation
- Added sg2000.dtsi for RISCV and moved DTS over to use it
- remove devices from DTS's to match what is available in the default pinmux config. spi0-2, i2c0-3, uart1-4
- Added i2c4 and spi3 aliases
- Removed milkv,duo-s from sophgo,cv1812h in documentation
v2: https://lore.kernel.org/sophgo/[email protected]/
- Made new entry in docs to avoid DTC error
- "Milk-V DuoS" -> "Milk-V Duo S"
- Sorting of aliases
- Added uart*, emmc, mdio, gmac0, i2c*, spi*, dmac, saradc
to device tree matching what is available on the pinout
- Removal of 'no-mmc' and 'no-sdio' for sdhci0 as it works without
- Added riscv device tree
v1: https://lore.kernel.org/sophgo/[email protected]/
Joshua Milas (5):
dt-bindings: soc: sophgo: add Milk-V Duo S board compatibles
arm64: dts: sophgo: add initial Milk-V Duo S board support
dt-bindings: soc: sophgo: add sg2000 plic and clint documentation
riscv64: dts: sophgo: add SG2000 dtsi
riscv64: dts: sophgo: add initial Milk-V Duo S board support
.../sifive,plic-1.0.0.yaml | 1 + .../bindings/soc/sophgo/sophgo.yaml | 4 + .../bindings/timer/sifive,clint.yaml | 1 + arch/arm64/boot/dts/sophgo/Makefile | 1 + .../boot/dts/sophgo/sg2000-milkv-duo-s.dts | 85 +++++++++++++++++++ arch/riscv/boot/dts/sophgo/Makefile | 1 + .../boot/dts/sophgo/sg2000-milkv-duo-s.dts | 85 +++++++++++++++++++ arch/riscv/boot/dts/sophgo/sg2000.dtsi | 53 ++++++++++++ 8 files changed, 231 insertions(+) create mode 100644 arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts create mode 100644 arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts create mode 100644 arch/riscv/boot/dts/sophgo/sg2000.dtsi
base-commit: 9aa6068586a9b4cd34cf04f8dee72a7283ab4ae4
Signature · 1 line
2.53.0
PATCH RESEND v5 1/5 dt-bindings: soc: sophgo: add Milk-V Duo S board compatibles
Document the compatible strings for the Milk-V Duo S board [1] which uses the SOPHGO SG2000 SoC.
--- Documentation/devicetree/bindings/soc/sophgo/sophgo.yaml | 4 ++++ 1 file changed, 4 insertions(+)
Documentation/devicetree/bindings/soc/sophgo/sophgo.yaml +4 -0
@@ -31,6 +31,10 @@ properties: - milkv,duo-module-01-evb - const: milkv,duo-module-01 - const: sophgo,sg2000 + - items: + - enum: + - milkv,duo-s + - const: sophgo,sg2000 - items: - enum: - sipeed,licheerv-nano-b
Signature · 1 line
2.53.0
Re: [PATCH v5 RESEND 1/5] dt-bindings: soc: sophgo: add Milk-V Duo S board compatibles
Quoted 9 lines · Joshua Milas
Document the compatible strings for the Milk-V Duo S board [1] which uses the SOPHGO SG2000 SoC.
Link https://milkv.io/duo-s [1]Signed-off-by Joshua Milas <[email protected]>--- Documentation/devicetree/bindings/soc/sophgo/sophgo.yaml | 4 ++++ 1 file changed, 4 insertions(+)
Best regards,
Krzysztof
PATCH RESEND v5 2/5 arm64: dts: sophgo: add initial Milk-V Duo S board support
In reply to Joshua MilasAdds initial arm64 support for the Milk-V Duo S board
[1] making it possible to boot Linux to the command line.
--- arch/arm64/boot/dts/sophgo/Makefile | 1 + .../boot/dts/sophgo/sg2000-milkv-duo-s.dts | 85 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts
arch/arm64/boot/dts/sophgo/Makefile +1 -0
@@ -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
arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +85 -0
85 lines not on this page · raw message
Signature · 1 line
2.53.0
[email protected]
AI reviewRe: [PATCH v5 RESEND 2/5] arm64: dts: sophgo: add initial Milk-V Duo S board support
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Medium] The device tree enables several hardware peripherals (emmc, gmac0, i2c4, mdio, sdhci0, sdhci1…
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The device tree enables several hardware peripherals (emmc, gmac0, i2c4, mdio, sdhci0, sdhci1, spi3, uart0) without defining or assigning their required pinctrl configurations. --
commit 562d6189b640dfe9eda31b9948bcc49d22497758
Author: Joshua Milas <[email protected]>
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.
Quoted 5 lines
arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +0
-0
[ ... ]
arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts line 39
Quoted 13 lines
+&dmac {
arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +12
-0+ status = "okay"; +}; + +&emmc { + bus-width = <4>; + no-1-8-v; + cap-mmc-hw-reset; + no-sd; + no-sdio; + non-removable; + status = "okay"; +};
[Severity: Medium]
Should these hardware peripherals have their pinctrl configurations defined?
Several nodes are enabled here (emmc, gmac0, i2c4, mdio, sdhci0, sdhci1, spi3, uart0) without pinctrl-0 and pinctrl-names properties assigned.
Without these properties, the kernel will not initialize the pin multiplexing and relies entirely on the bootloader to have set up the pinmux correctly.
If the bootloader behavior changes, or if a driver attempts to manage power states by suspending and resuming the device, these peripherals might fail to function.
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=2
Inochi Amaoto
maintainerRe: [PATCH v5 RESEND 2/5] arm64: dts: sophgo: add initial Milk-V Duo S board support
In reply to Joshua MilasQuoted 31 lines · Joshua Milas
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 <[email protected]>--- arch/arm64/boot/dts/sophgo/Makefile | 1 + .../boot/dts/sophgo/sg2000-milkv-duo-s.dts | 85 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dtsarch/arm64/boot/dts/sophgo/Makefile +1
-0@@ -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.dtbarch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +5
-0@@ -0,0 +1,85 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) + +/dts-v1/; + +#include "sg2000.dtsi"
arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts line 15
Quoted 10 lines
arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +10
-0+ +/ { + model = "Milk-V Duo S"; + compatible = "milkv,duo-s", "sophgo,sg2000"; + + aliases { + i2c4 = &i2c4; + mmc0 = &sdhci0; + serial0 = &uart0; + spi3 = &spi3;
Apply the same change for the reply on v5.
Regards,
Inochi
Quoted 73 lines
arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +70
-0+ }; + + 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"; +}; + +&usb { + dr_mode = "host"; + status = "okay"; +}; +Signature · 1 line
2.53.0
PATCH RESEND v5 3/5 dt-bindings: soc: sophgo: add sg2000 plic and clint documentation
In reply to Joshua MilasDocument the compatible strings for the sg2000 interrupt controller and timer.
--- .../bindings/interrupt-controller/sifive,plic-1.0.0.yaml | 1 + Documentation/devicetree/bindings/timer/sifive,clint.yaml | 1 + 2 files changed, 2 insertions(+)
Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.0.0.yaml +1 -0
@@ -73,6 +73,7 @@ properties: - allwinner,sun20i-d1-plic - sophgo,cv1800b-plic - sophgo,cv1812h-plic + - sophgo,sg2000-plic - sophgo,sg2002-plic - sophgo,sg2042-plic - sophgo,sg2044-plic
Documentation/devicetree/bindings/timer/sifive,clint.yaml +1 -0
@@ -50,6 +50,7 @@ properties: - allwinner,sun20i-d1-clint - sophgo,cv1800b-clint - sophgo,cv1812h-clint + - sophgo,sg2000-clint - sophgo,sg2002-clint - thead,th1520-clint - const: thead,c900-clint
Signature · 1 line
2.53.0
Re: [PATCH v5 RESEND 3/5] dt-bindings: soc: sophgo: add sg2000 plic and clint documentation
Quoted 8 lines · Joshua Milas
Document the compatible strings for the sg2000 interrupt controller and timer.
Signed-off-by Joshua Milas <[email protected]>--- .../bindings/interrupt-controller/sifive,plic-1.0.0.yaml | 1 + Documentation/devicetree/bindings/timer/sifive,clint.yaml | 1 + 2 files changed, 2 insertions(+)
Best regards,
Krzysztof
PATCH RESEND v5 4/5 riscv64: dts: sophgo: add SG2000 dtsi
In reply to Joshua MilasAdds sg2000.dtsi on the RISCV side.
--- arch/riscv/boot/dts/sophgo/sg2000.dtsi | 53 ++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 arch/riscv/boot/dts/sophgo/sg2000.dtsi
arch/riscv/boot/dts/sophgo/sg2000.dtsi new file +53 -0
@@ -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 0x10000000>; + }; + + 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>; + }; + }; +};
Signature · 1 line
2.53.0
[email protected]
AI reviewRe: [PATCH v5 RESEND 4/5] riscv64: dts: sophgo: add SG2000 dtsi
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Medium] Incorrect memory size specification for SG2000 SoC (256 MiB instead of 512 MiB). --
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] Incorrect memory size specification for SG2000 SoC (256 MiB instead of 512 MiB). --
commit c5b4a9fd5a4e96c34400baa5e56b2ce675d91e7b
Author: Joshua Milas <[email protected]>
riscv64: dts: sophgo: add SG2000 dtsi
This commit introduces the device tree source include file for the Sophgo SG2000 SoC for the RISC-V architecture.
Quoted 4 lines
arch/riscv/boot/dts/sophgo/sg2000.dtsi new file +0
-0
[ ... ]
arch/riscv/boot/dts/sophgo/sg2000.dtsi line 16
Quoted 6 lines
arch/riscv/boot/dts/sophgo/sg2000.dtsi new file +6
-0+/ { + compatible = "sophgo,sg2000"; + + memory@80000000 { + device_type = "memory"; + reg = <0x80000000 0x10000000>;
[Severity: Medium]
Should this memory capacity be 512 MiB instead of 256 MiB? The SG2000 SoC is a System-in-Package that integrates 512 MiB of DRAM, and the ARM64 device tree for the same SoC specifies 0x20000000.
Setting this to 0x10000000 restricts the available RAM to 256 MiB unless it is explicitly overridden by a bootloader.
Quoted 1 line
arch/riscv/boot/dts/sophgo/sg2000.dtsi new file +1
-0+ };
[ ... ]
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=4
Re: [PATCH v5 RESEND 4/5] riscv64: dts: sophgo: add SG2000 dtsi
In reply to Joshua MilasHi Joshua,
Quoted 21 lines · Joshua Milas
Adds
sg2000.dtsion the RISCV side.Signed-off-by Joshua Milas <[email protected]>--- arch/riscv/boot/dts/sophgo/sg2000.dtsi | 53 ++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 arch/riscv/boot/dts/sophgo/sg2000.dtsiarch/riscv/boot/dts/sophgo/sg2000.dtsi new file +7
-0@@ -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"
arch/riscv/boot/dts/sophgo/sg2000.dtsi line 17
Quoted 10 lines
arch/riscv/boot/dts/sophgo/sg2000.dtsi new file +10
-0+#include "cv180x.dtsi" +#include "cv181x.dtsi" + +/ { + compatible = "sophgo,sg2000"; + + memory@80000000 { + device_type = "memory"; + reg = <0x80000000 0x10000000>; + };
I noticed that this describes 256 MiB of RAM. The Milk-V Duo documentation lists the SG2000-based Duo boards as having 512 MB of DRAM [1].
Is the 256 MiB size intentional here, or should the Duo S board DTS override it with the documented 512 MB DRAM size?
[1] https://milkv.io/docs/duo/overview
Quoted 36 lines
arch/riscv/boot/dts/sophgo/sg2000.dtsi new file +36
-0+ + 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>; + }; + }; +};
Signature · 2 lines
Best regards, Shuwei Wu
Re: [PATCH v5 RESEND 4/5] riscv64: dts: sophgo: add SG2000 dtsi
Hi Shuwei,
The 256 MB was not intentional and was a holdover from testing. I updated the DT to use 512 MB of RAM. The issue was only on the riscv side. This will be fixed in the next patch.
- Joshua Milas
PATCH RESEND v5 5/5 riscv64: dts: sophgo: add initial Milk-V Duo S board support
In reply to Joshua MilasThis adds initial riscv support for the Milk-V Duo S board
[1] making it possible to boot Linux to the command line.
--- arch/riscv/boot/dts/sophgo/Makefile | 1 + .../boot/dts/sophgo/sg2000-milkv-duo-s.dts | 85 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts
arch/riscv/boot/dts/sophgo/Makefile +1 -0
@@ -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
arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +85 -0
85 lines not on this page · raw message
Signature · 1 line
2.53.0
[email protected]
AI reviewRe: [PATCH v5 RESEND 5/5] riscv64: dts: sophgo: add initial Milk-V Duo S board support
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider: - [Medium] Missing `pinctrl-0` properties for enabled peripherals, relying unsafely on bootloader pin…
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] Missing pinctrl-0 properties for enabled peripherals, relying unsafely on bootloader pin multiplexing.
- [Medium] Unstable device enumeration due to incomplete MMC aliases.
--
commit 28d2e18610b4be21ce587f3639e449ae96302be3
Author: Joshua Milas <[email protected]>
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.
Quoted 9 lines
arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +3
-0@@ -0,0 +1,85 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) + +/dts-v1/;
arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts line 13
Quoted 10 lines
arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +10
-0+ +#include "sg2000.dtsi" + +/ { + model = "Milk-V Duo S"; + compatible = "milkv,duo-s", "sophgo,sg2000"; + + aliases { + i2c4 = &i2c4; + mmc0 = &sdhci0;
[Severity: Medium]
Will omitting aliases for the other enabled MMC controllers (&emmc and &sdhci1) cause unstable device enumeration?
The Linux MMC core relies on these aliases for stable block device numbering (/dev/mmcblkX). Without explicit aliases for all enabled controllers, their indices might be assigned dynamically based on asynchronous probe ordering, which could swap block device numbers unexpectedly across reboots.
Quoted 3 lines
arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +3
-0+ serial0 = &uart0; + spi3 = &spi3; + };
[ ... ]
arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts line 39
Quoted 9 lines
+&emmc {
arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +8
-0+ bus-width = <4>; + no-1-8-v; + cap-mmc-hw-reset; + no-sd; + no-sdio; + non-removable; + status = "okay"; +};
[Severity: Medium]
Do the peripherals enabled in this device tree, such as &emmc, &sdhci0, and &uart0, need pinctrl-0 properties to define their hardware pin states?
Relying entirely on the bootloader's initial pin multiplexing configuration can break power management features like suspend and resume, or impact system stability if the kernel needs to restore pin parameters dynamically.
[ ... ]
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=5
Inochi Amaoto
maintainerRe: [PATCH v5 RESEND 5/5] riscv64: dts: sophgo: add initial Milk-V Duo S board support
In reply to Joshua MilasQuoted 35 lines · Joshua Milas
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 <[email protected]>--- arch/riscv/boot/dts/sophgo/Makefile | 1 + .../boot/dts/sophgo/sg2000-milkv-duo-s.dts | 85 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dtsarch/riscv/boot/dts/sophgo/Makefile +1
-0@@ -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.dtbarch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +5
-0@@ -0,0 +1,85 @@ +// SPDX-License-Identifier: (GPL-2.0 OR MIT) + +/dts-v1/; + +#include "sg2000.dtsi"
arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts line 15
Quoted 10 lines
arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +10
-0+ +/ { + model = "Milk-V Duo S"; + compatible = "milkv,duo-s", "sophgo,sg2000"; + + aliases { + i2c4 = &i2c4; + mmc0 = &sdhci0; + serial0 = &uart0; + spi3 = &spi3;
Adding all the necessary aliases here.
arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts line 26
Quoted 11 lines
arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +11
-0+ }; + + chosen { + stdout-path = "serial0:115200n8"; + }; +}; + +&osc { + clock-frequency = <25000000>; +}; +
pinctrl is needed, ses sashiko's reply.
Quoted 62 lines
arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +59
-0+&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"; +}; + +&usb { + dr_mode = "host"; + status = "okay"; +}; +Signature · 1 line
2.53.0
Re: [PATCH v5 RESEND 5/5] riscv64: dts: sophgo: add initial Milk-V Duo S board support
In reply to Joshua MilasHi Joshua,
Quoted 105 lines · Joshua Milas
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 <[email protected]>--- arch/riscv/boot/dts/sophgo/Makefile | 1 + .../boot/dts/sophgo/sg2000-milkv-duo-s.dts | 85 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dtsarch/riscv/boot/dts/sophgo/Makefile +1
-0@@ -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.dtbarch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +75
-0@@ -0,0 +1,85 @@ +// 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"; +};
arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts line 85
Quoted 10 lines
arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts new file +10
-0+ +&uart0 { + status = "okay"; +}; + +&usb { + dr_mode = "host"; + status = "okay"; +}; +
I tested this series on a Milk-V Duo S board with a RISC-V mainline kernel.
The board boots successfully with sg2000-milkv-duo-s.dtb. UART works, the SD card is detected and readable, Ethernet works after enabling the MDIO mux options, and the DMA, USB host, I2C4, SPI3 and SARADC nodes all probe successfully.
One thing I noticed is that the Wi-Fi SDIO device is not enumerated with the mainline DT. The sdhci1 host itself probes:
mmc1: SDHCI controller on 4320000.mmc [4320000.mmc] using ADMA 64-bit
mmc1: Failed to initialize a non-removable card
and /sys/bus/sdio/devices remains empty.
With the vendor image on the same board, the Wi-Fi SDIO device is detected on the corresponding controller:
mmc1: SDHCI controller on 4320000.wifi-sd [4320000.wifi-sd] using ADMA 64-bit sdio vendor ID: 0xc8a1
sdio device ID: 0x0082
aicwf_sdio_chipmatch USE AIC8800D80
sdio ready
So it looks like the SDHCI host comes up, but the SDIO device behind it is not discovered. I may still be missing some config option.
Have you seen this issue on your side? If not, could you please share the relevant kernel config used for your testing?
Signature · 2 lines
Best regards, Shuwei Wu
Re: [PATCH v5 RESEND 5/5] riscv64: dts: sophgo: add initial Milk-V Duo S board support
Hi Shuwei,
Thanks for testing! I am seeing the same wifi issue on my end and have been looking into it so it may not be a config issue.
I was able to get the chip enumerated by adding some properties to the sdhci1 node and adding some quirks to the kernel source on reset. I was also not able to get the chip powered without manually toggling PORTA pin 15 in code. Then I tried using the aic8800 1.0.9 dkms module however it needs some changes because it is not updated for Linux 7.1. I did find some Milk-V Duo S AIC8800 drivers and will give it a shot soon.
Thanks again,
- Joshua Milas
Re: [PATCH v5 RESEND 5/5] riscv64: dts: sophgo: add initial Milk-V Duo S board support
Hi Shuwei,
I was able to get the wifi chip working. It requires the proper DT and an updated aic8800-milkv-duo-s driver [1] that has been updated to Linux 7.1. The next patch will cover the DT part.
[1] https://gitlab.com/DeepHorizons/aic8800-milkv-duo-s
Have a great day,
- Joshua Milas
Inochi Amaoto
maintainerQuoted 60 lines · Joshua Milas
This adds an initial device tree for the Milk-V Duo S board with support for reading from the SD card and network over Ethernet. This is continued work from Michael Opdenacker's v6 series [1] on the ARM64 and RISCV side. It has been tested with ARM64 and RISCV64 to boot from an SD card, have networking, and read I2C slave devices over i2c4.
---
v5
- Fixes spaces at beginning of line in &usb node of DTSv4: https://lore.kernel.org/sophgo/[email protected]/
- Rebased to latest sophogo/for-next
- Added usb node to arm64 and riscv DTS
- Removed sg200x link in commit messages
- Added missing change to v3 and removed link from v2v3: https://lore.kernel.org/sophgo/[email protected]/
- Added sg2000 interrupt controller and timer to documentation
- Addedsg2000.dtsifor RISCV and moved DTS over to use it
- remove devices from DTS's to match what is available in the default pinmux config. spi0-2, i2c0-3, uart1-4
- Added i2c4 and spi3 aliases
- Removed milkv,duo-s from sophgo,cv1812h in documentationv2: https://lore.kernel.org/sophgo/[email protected]/
- Made new entry in docs to avoid DTC error
- "Milk-V DuoS" -> "Milk-V Duo S"
- Sorting of aliases
- Added uart*, emmc, mdio, gmac0, i2c*, spi*, dmac, saradc
to device tree matching what is available on the pinout
- Removal of 'no-mmc' and 'no-sdio' for sdhci0 as it works without
- Added riscv device treev1: https://lore.kernel.org/sophgo/[email protected]/
Joshua Milas (5):
dt-bindings: soc: sophgo: add Milk-V Duo S board compatibles
arm64: dts: sophgo: add initial Milk-V Duo S board support
dt-bindings: soc: sophgo: add sg2000 plic and clint documentation
riscv64: dts: sophgo: add SG2000 dtsi
riscv64: dts: sophgo: add initial Milk-V Duo S board support.../sifive,plic-1.0.0.yaml | 1 + .../bindings/soc/sophgo/sophgo.yaml | 4 + .../bindings/timer/sifive,clint.yaml | 1 + arch/arm64/boot/dts/sophgo/Makefile | 1 + .../boot/dts/sophgo/sg2000-milkv-duo-s.dts | 85 +++++++++++++++++++ arch/riscv/boot/dts/sophgo/Makefile | 1 + .../boot/dts/sophgo/sg2000-milkv-duo-s.dts | 85 +++++++++++++++++++ arch/riscv/boot/dts/sophgo/sg2000.dtsi | 53 ++++++++++++ 8 files changed, 231 insertions(+) create mode 100644 arch/arm64/boot/dts/sophgo/sg2000-milkv-duo-s.dts create mode 100644 arch/riscv/boot/dts/sophgo/sg2000-milkv-duo-s.dts create mode 100644 arch/riscv/boot/dts/sophgo/sg2000.dtsi
Quoted 4 lines
base-commit:
9aa6068586a9b4cd34cf04f8dee72a7283ab4ae4Signature · 1 line
2.53.0
You resend drop all the tags, always send a new version with all tags applied in this case.
Regards,
Inochi
Hi Inochi,
Thanks for the feedback. The next patch will have a large change with the pinctrl, I believe I will have to drop the tags for that. For my reference would the tags be applied to the commits or the top level patch?
I have the pinctrl configs staged in my tree but I am having some issues.
1. spi3 conflicts with sdhci1 (wifi) when enabled since they share pins, I am not sure how the original DT had it working. Im assuming they had it enabled and the user controlled it through the pinmux program? We originally tried to enable only what the vendor had in their DT. Taking another look at the vendor DT spi3 is the only SPI enabled, so we probably should not choose a different spi node. Should we just disable spi3?
2. I am having trouble getting the card to enumerate with just the DT. I was able to get it enumerated with some kernel changes and I am trying to translate those changes into the DT.
3. I added at least one pinctrl config for each device. For the devices that have multiple selections, should I add all the configs?
Have a great day,
- Joshua Milas
Re: (subset) [PATCH v5 RESEND 0/5] Add initial Milk-V Duo S board support
In reply to Joshua MilasQuoted 8 lines · Joshua Milas
This adds an initial device tree for the Milk-V Duo S board with support for reading from the SD card and network over Ethernet. This is continued work from Michael Opdenacker's v6 series [1] on the ARM64 and RISCV side. It has been tested with ARM64 and RISCV64 to boot from an SD card, have networking, and read I2C slave devices over i2c4.
[...]
Applied to for-next, thanks!
[1/5] dt-bindings: soc: sophgo: add Milk-V Duo S board compatibles
https://github.com/sophgo/linux/commit/eeec80c3ce36ead24e2f53d88a24dac1e3de8041 [4/5] riscv64: dts: sophgo: add SG2000 dtsi https://github.com/sophgo/linux/commit/2145cd2f0082c11177b062e1ecbce121c3b50b43
Thanks,
Inochi
Inochi Amaoto
maintainerRe: (subset) [PATCH v5 RESEND 0/5] Add initial Milk-V Duo S board support
Quoted 12 lines · Inochi Amaoto
Quoted 8 lines · Joshua Milas
This adds an initial device tree for the Milk-V Duo S board with support for reading from the SD card and network over Ethernet. This is continued work from Michael Opdenacker's v6 series [1] on the ARM64 and RISCV side. It has been tested with ARM64 and RISCV64 to boot from an SD card, have networking, and read I2C slave devices over i2c4.
[...]
Applied to for-next, thanks!
Quoted 8 lines
[1/5] dt-bindings: soc: sophgo: add Milk-V Duo S board compatibles
https://github.com/sophgo/linux/commit/eeec80c3ce36ead24e2f53d88a24dac1e3de8041 [4/5] riscv64: dts: sophgo: add SG2000 dtsi https://github.com/sophgo/linux/commit/2145cd2f0082c11177b062e1ecbce121c3b50b43Thanks,
Inochi
Please ignore this, I apply the wrong patch, A new thanks will be sent after I fix this. Sorry for the noise.
Regards,
Inochi
Re: (subset) [PATCH v5 RESEND 0/5] Add initial Milk-V Duo S board support
In reply to Joshua MilasQuoted 8 lines · Joshua Milas
This adds an initial device tree for the Milk-V Duo S board with support for reading from the SD card and network over Ethernet. This is continued work from Michael Opdenacker's v6 series [1] on the ARM64 and RISCV side. It has been tested with ARM64 and RISCV64 to boot from an SD card, have networking, and read I2C slave devices over i2c4.
[...]
Applied to for-next, thanks!
[1/5] dt-bindings: soc: sophgo: add Milk-V Duo S board compatibles
https://github.com/sophgo/linux/commit/efe66eed43ef507a5b3784d988842d2e621806e1 [3/5] dt-bindings: soc: sophgo: add sg2000 plic and clint documentation https://github.com/sophgo/linux/commit/972e8823d93866bc39cf6270bd5ec26d055b9d6f
Thanks,
Inochi