Re: [PATCH 1/1] riscv: dts: starfive: Milk-V Mars CM Lite broken-cd
From: Heinrich Schuchardt <hidden>
Date: 2026-02-05 07:50:07
Also in:
linux-riscv, lkml
On 2/5/26 00:16, E Shattow wrote:
Hi, I think the correct fix will be device tree overlays per-carrier board and not this one-size-fits-all workaround with the System-on-Module. Review below: On 2/4/26 08:38, Heinrich Schuchardt wrote:quoted
On 2/4/26 11:16, Heinrich Schuchardt wrote:quoted
The card detect GPIO depends on support by the base board. Detecting an SD-card did not work for me with a Milk-V Mars CM Lite mounted on an Waveshare CM4-IO-BASE-A board.The schematic of the Waveshare CM4-IO-BASE-A board is available at https://files.waveshare.com/upload/a/aa/CM4-IO-BASE-A_V4_SchDoc.pdf showing pin 76 is not connected. In https://forums.raspberrypi.com/viewtopic.php?t=291041 the Raspberry Foundation explicitly wrote that pin 76 should not be connected when using a compute module socket. E. Shattow pointed me to a board https://github.com/NabuCasa/yellow/releases/download/v1.3c/ Yellow_v1.3c_Schematic_git.8957b440adda.pdf that actually disregarded this advice and uses pin 76 actually as cd- gpio. This usage of GPIO 41 is a property of the specific base board and not of the Milk-V Mars CM and should be described in a device-tree overlay if needed. Best regards Heinrichquoted
According to [1] SD_SDIO0_CD_GPIO41 is connected to pin 76 reserved. The Raspberry Pi Compute Module 4 IO Board documentation marks that pin as reserved. The Raspberry Pi Compute Module 5 IO Board documentation marks the pin as VBAT. Remove the cd-gpios definition and add broken-cd. [1] https://github.com/milkv-mars/mars-files/blob/main/Mars- CM_Hardware_Schematices/Milk-V_Mars-CM_SCH_V1.0-2023-0905_Lite.pdf Signed-off-by: Heinrich Schuchardt <redacted> --- arch/riscv/boot/dts/starfive/jh7110-milkv-marscm-lite.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)diff --git a/arch/riscv/boot/dts/starfive/jh7110-milkv-marscm-lite.dtsb/arch/riscv/boot/dts/starfive/jh7110-milkv-marscm-lite.dts index 63aa94d65ab55..566b0bdc2800d 100644--- a/arch/riscv/boot/dts/starfive/jh7110-milkv-marscm-lite.dts +++ b/arch/riscv/boot/dts/starfive/jh7110-milkv-marscm-lite.dts@@ -13,7 +13,7 @@ / { &mmc0 { bus-width = <4>;+ /* Schematic signal SD_SDIO0_CD_GPIO41 to CM4 connector pin 76*/ + /* Raspberry Pi CM4 specification pin 76 reserved do not connect */quoted
quoted
- cd-gpios = <&sysgpio 41 GPIO_ACTIVE_LOW>; + broken-cd;All schematic documents for Mars CM Lite list this signal name as `SD_SDIO0_CD_GPIO41`.quoted
quoted
disable-wp; };The carrier board I have a schematic document for - Home Assistant Yellow PoE rev 1.3 - lists this as SD_DETECT, apparently ignoring the Raspberry Pi Foundation document about CM4 Compute IO specification that explicitly says do not connect this pin to anything. The carrier board I do not have a schematic document for - DFRobot Compute Module 4 IoT Router Board Mini - only has SD Card and is operational as-is. The compatibility issue for carrier boards that more strictly follow the Raspberry Pi CM4 IO specification may be better handled by device tree overlays. Though this is not convenient for users and requires more developer effort, overlays would be best to adopt dtbo per-carrier board to describe hardware accurately. What is needed to introduce overlays? - E
Device-tree overlays would have to be applied by the firmware, typically U-Boot. The firmware has no way to determine if it is running on an IO-board with or without a card detect switch. So the selection of an overlay will be a manual process. In many cases users will not know about the issue of card detect switches and if their board has one or not. The default value without any overlay should be one that allows to use the SD-card on all IO-boards, i.e. 'broken-cd'. This is also the value used be the board support package https://github.com/milkv-mars/mars-buildroot-sdk/blob/1fd6bac9f2efde47fbb8afd28d2903c49f893e3f/linux/arch/riscv/boot/dts/starfive/jh7110-milkv-mars-cm-sdcard.dts#L265 Best regards Heinrich