[PATCH] arm: dts: rockchip: Fix eMMC write on RK3528

Tianling Shen cnsztl at gmail.com
Fri Oct 31 10:40:47 CET 2025


On 2025/10/31 3:41, Jonas Karlman wrote:
> Hi Tianling,
> 
> On 10/30/2025 7:12 PM, Tianling Shen wrote:
>> Hi Jonas,
>>
>> On 2025/6/14 6:43, Jonas Karlman wrote:
>>> Writing to eMMC on RK3528 is affected with the same or a similar issue
>>> as on RK3588, where eMMC must init to HS200 at least once to fully work.
>>>
>>> Trying to write u-boot-rockchip.bin to eMMC fails with:
>>>
>>>     => mmc write $fileaddr 40 5000
>>>     MMC write: dev # 0, block # 64, count 20480 ... mmc write failed
>>>     0 blocks written: ERROR
>>>
>>> For U-Boot to enable HS200 mode the mmc-hs200-1_8v prop must be defined
>>> in the device tree. Linux does not seem to be affected and is able to
>>> detect and use HS200 without this prop.
>>>
>>> Enable use of HS200 and fix eMMC write on RK3528 by adding the missing
>>> mmc-hs200-1_8v prop for affected boards:
>>>
>>>     => mmc write $fileaddr 40 5000
>>>     MMC write: dev # 0, block # 64, count 20480 ... 20480 blocks written: OK
>>>
>>
>> Sorry for the noise.
>>
>> I recently got an E20C board, and I ran into a very stange issue, the
>> U-Boot throw errors with any mmc r/w operation, like `boot` or `mmc erase`:
>>

<snip>

>>
>> I tried to use the generic-rk3528 configuration, and it seems to work.
>> After making some tests (about 50 times reboot/reset), I found the eMMC
>> works fine if `CONFIG_REGULATOR_PWM=y` is disabled.
>> This is a bit weird. Maybe disabling this option just hides the real issue?
> 
> Interesting information and thanks for testing!
> 
> Without REGULATOR_PWM=y the cpu and logic regulators will keep their reset
> init values instead of U-Boot trying to configure these pwm regulators.
> 
> The generic-rk3528 target does not include information about any of these
> regulators so they would keep using the reset init values.
> 
> There could be two issues related to this, first both the pwm regulator
> and rk pwm driver are not fully aligned with Linux and round values a
> little bit different. I have some local work-in-progress patches that I
> should complete and send out to fix this discrepancy.
> 
> The second issue could be that the logic regulator should be configured
> with a higher regulator-init-microvolt value so that U-Boot do not
> re-configure the regulator with a lower voltage than it has after reset.
> 
> Did your testing also include the "mmc: rockchip_sdhci: Set xx_TAP_VALUE
> for RK3528" [1] patch?

Thank you for the quick reply!

I tested this patch and it works like a charm (30 times soft reboot + 10 
times cold boot).

> 
>>
>> Here's the build information:
>> U-Boot commit: 4cad9faf8d28 ("MAINTAINERS: update my email address")
>> rkbin commit: 74213af1e952 ("rv1126b: bl31: update version to v1.07")
>> Build command:
>> make CROSS_COMPILE=aarch64-linux-musl-
>> BL31=../rkbin/bin/rk35/rk3528_bl31_v1.20.elf
>> ROCKCHIP_TPL=../rkbin/bin/rk35/rk3528_ddr_1056MHz_v1.11.bin
> 
> I will make some runtime test on my E20C using these as a base and see
> if I can replicate a similar issue.
> 
> I have also pushed my local pwm-regulator/rk-pwm relates patches to [2],
> they need some re-work before being ready to be sent out.

I have tested this patchset, and the eMMC works as well even without the 
rockchip_sdhci patch/commit applied.

I will make more tests these days and report then ;)
Many thanks again!

Thanks,
Tianling.

> 
> [1] https://lore.kernel.org/u-boot/20250714203410.1782783-1-jonas@kwiboo.se/
> [2] https://source.denx.de/u-boot/contributors/kwiboo/u-boot/-/commits/rk3528
> 
> Regards,
> Jonas
> 
>>
>> Any help will be greatly appreciated!
>>
>> Thanks,
>> Tianling.
>>
>>> Fixes: b112a44531cb ("board: rockchip: Add minimal generic RK3528 board")
>>> Fixes: ccbddf645310 ("board: rockchip: Add Radxa E20C")
>>> Signed-off-by: Jonas Karlman <jonas at kwiboo.se>
>>> ---
>>> Kever, Tom: Please consider this for the v2025.07 release as support for
>>> RK3528 was added in v2025.07-rc1.
>>> ---
>>>    arch/arm/dts/rk3528-generic.dts            | 1 +
>>>    arch/arm/dts/rk3528-radxa-e20c-u-boot.dtsi | 4 ++++
>>>    2 files changed, 5 insertions(+)
>>>
>>> diff --git a/arch/arm/dts/rk3528-generic.dts b/arch/arm/dts/rk3528-generic.dts
>>> index 792d3e04a4cb..3f6f0bed108d 100644
>>> --- a/arch/arm/dts/rk3528-generic.dts
>>> +++ b/arch/arm/dts/rk3528-generic.dts
>>> @@ -18,6 +18,7 @@
>>>    &sdhci {
>>>    	bus-width = <8>;
>>>    	cap-mmc-highspeed;
>>> +	mmc-hs200-1_8v;
>>>    	no-sd;
>>>    	no-sdio;
>>>    	non-removable;
>>> diff --git a/arch/arm/dts/rk3528-radxa-e20c-u-boot.dtsi b/arch/arm/dts/rk3528-radxa-e20c-u-boot.dtsi
>>> index 9c2f03a786cf..1372d8f1e38a 100644
>>> --- a/arch/arm/dts/rk3528-radxa-e20c-u-boot.dtsi
>>> +++ b/arch/arm/dts/rk3528-radxa-e20c-u-boot.dtsi
>>> @@ -2,6 +2,10 @@
>>>    
>>>    #include "rk3528-u-boot.dtsi"
>>>    
>>> +&sdhci {
>>> +	mmc-hs200-1_8v;
>>> +};
>>> +
>>>    &sdmmc {
>>>    	bus-width = <4>;
>>>    	cap-mmc-highspeed;
>>
> 



More information about the U-Boot mailing list