diff mbox series

arm64: dts: rockchip: add workaround for microSD card detection on Radxa ROCK 3A

Message ID 20240903085551.568-1-naoki@radxa.com (mailing list archive)
State New
Headers show
Series arm64: dts: rockchip: add workaround for microSD card detection on Radxa ROCK 3A | expand

Commit Message

FUKAUMI Naoki Sept. 3, 2024, 8:55 a.m. UTC
Radxa ROCK 3A doesn't detect microSD card insertion/removal correctly.
it happens from Linux v5.19 to v6.11-rc6.

add workaround (broken-cd property) to make CD work.

Fixes: 22a442e6586c ("arm64: dts: rockchip: add basic dts for the radxa rock3 model a")
Signed-off-by: FUKAUMI Naoki <naoki@radxa.com>
---
 arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Heiko Stuebner Sept. 4, 2024, 6:32 p.m. UTC | #1
Hi,

Am Dienstag, 3. September 2024, 10:55:50 CEST schrieb FUKAUMI Naoki:
> Radxa ROCK 3A doesn't detect microSD card insertion/removal correctly.
> it happens from Linux v5.19 to v6.11-rc6.
> 
> add workaround (broken-cd property) to make CD work.
> 
> Fixes: 22a442e6586c ("arm64: dts: rockchip: add basic dts for the radxa rock3 model a")
> Signed-off-by: FUKAUMI Naoki <naoki@radxa.com>

before going for such drastic measures as broken-cd, can you describe how
you checked the card insert/removal ?


I.e. in the dts node below we have both cd-gpios as well as the sdmmc0_det
pinctrl which would set the pinfunc 1 ... the hw-based card detect and
possibly override the cd-gpios?

What happens if you just remove the sdmmc0_det and keep the cd-gpios
property? 

Also, what does cat /sys/kernel/debug/gpio report after that change
with inserted and removed cards?


Heiko

> ---
>  arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts b/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts
> index 59f1403b4fa5..89599258ef9c 100644
> --- a/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts
> +++ b/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts
> @@ -722,12 +722,12 @@ &sdhci {
>  };
>  
>  &sdmmc0 {
> +	broken-cd;
>  	bus-width = <4>;
>  	cap-sd-highspeed;
> -	cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>;
>  	disable-wp;
>  	pinctrl-names = "default";
> -	pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd &sdmmc0_det>;
> +	pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd>;
>  	sd-uhs-sdr50;
>  	vmmc-supply = <&vcc3v3_sd>;
>  	vqmmc-supply = <&vccio_sd>;
>
FUKAUMI Naoki Sept. 5, 2024, 8:49 a.m. UTC | #2
hi,

On 9/5/24 03:32, Heiko Stübner wrote:
> Hi,
> 
> Am Dienstag, 3. September 2024, 10:55:50 CEST schrieb FUKAUMI Naoki:
>> Radxa ROCK 3A doesn't detect microSD card insertion/removal correctly.
>> it happens from Linux v5.19 to v6.11-rc6.
>>
>> add workaround (broken-cd property) to make CD work.
>>
>> Fixes: 22a442e6586c ("arm64: dts: rockchip: add basic dts for the radxa rock3 model a")
>> Signed-off-by: FUKAUMI Naoki <naoki@radxa.com>
> 
> before going for such drastic measures as broken-cd, can you describe how
> you checked the card insert/removal ?

basically, dmesg.

> I.e. in the dts node below we have both cd-gpios as well as the sdmmc0_det
> pinctrl which would set the pinfunc 1 ... the hw-based card detect and
> possibly override the cd-gpios?
> 
> What happens if you just remove the sdmmc0_det and keep the cd-gpios
> property?

nothing is changed if pinfunc is 0 or 1 , i.e. CD is not working both 
configuration.

> Also, what does cat /sys/kernel/debug/gpio report after that change
> with inserted and removed cards?

it's always "hi".

$ sudo grep 'gpio-4 ' /sys/kernel/debug/gpio
  gpio-4   (                    |cd                  ) in  hi IRQ ACTIVE LOW

----

I forgot to explain about exception. only if microSD card is inserted 
before kernel boot, card is recognized and accessible.
in this case, gpio-4 is "lo" till card is removed.
when card is removed, gpio-4 goes "hi", dmesg shows "mmc1: card 1234 
removed".
after that, even if card is inserted again, gpio-4 never goes "lo", card 
is never detected.

btw, I usually put bootloader on microSD card. (kernel and userland are 
on USB-SSD)
this time, I tried "boot from SPI flash", but nothing is changed.


I understand this is very strange, I'm okay if this patch is rejected.
I want to know more information from other users to find out real solution.

Best regards,

--
FUKAUMI Naoki
Radxa Computer (Shenzhen) Co., Ltd.

> Heiko
> 
>> ---
>>   arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts b/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts
>> index 59f1403b4fa5..89599258ef9c 100644
>> --- a/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts
>> +++ b/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts
>> @@ -722,12 +722,12 @@ &sdhci {
>>   };
>>   
>>   &sdmmc0 {
>> +	broken-cd;
>>   	bus-width = <4>;
>>   	cap-sd-highspeed;
>> -	cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>;
>>   	disable-wp;
>>   	pinctrl-names = "default";
>> -	pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd &sdmmc0_det>;
>> +	pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd>;
>>   	sd-uhs-sdr50;
>>   	vmmc-supply = <&vcc3v3_sd>;
>>   	vqmmc-supply = <&vccio_sd>;
>>
> 
> 
> 
> 
>
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts b/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts
index 59f1403b4fa5..89599258ef9c 100644
--- a/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts
@@ -722,12 +722,12 @@  &sdhci {
 };
 
 &sdmmc0 {
+	broken-cd;
 	bus-width = <4>;
 	cap-sd-highspeed;
-	cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>;
 	disable-wp;
 	pinctrl-names = "default";
-	pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd &sdmmc0_det>;
+	pinctrl-0 = <&sdmmc0_bus4 &sdmmc0_clk &sdmmc0_cmd>;
 	sd-uhs-sdr50;
 	vmmc-supply = <&vcc3v3_sd>;
 	vqmmc-supply = <&vccio_sd>;