[PATCH] arm: dts: rockchip: Fix eMMC write on RK3528
    Tianling Shen 
    cnsztl at gmail.com
       
    Thu Oct 30 19:12:10 CET 2025
    
    
  
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`:
```
=> boot
Scanning for bootflows in all bootdevs
Seq  Method       State   Uclass    Part  Name                      Filename
---  -----------  ------  --------  ----  ------------------------ 
----------------
Scanning global bootmeth 'efi_mgr':
  ** fs_devread read error - block
  ** fs_devread read error - block
Card did not respond to voltage select! : -110
Cannot persist EFI variables without system partition
   0  efi_mgr      ready   (none)       0  <NULL>
** Booting bootflow '<NULL>' with efi_mgr
Loading Boot0000 'mmc 0' failed
EFI boot manager: Cannot load any image
Boot failed (err=-14)
Scanning bootdev 'mmc at ffc30000.bootdev':
Card did not respond to voltage select! : -110
Card did not respond to voltage select! : -110
Card did not respond to voltage select! : -110
Card did not respond to voltage select! : -110
Scanning bootdev 'mmc at ffbf0000.bootdev':
  ** fs_devread read error - block
  ** fs_devread read error - block
  ** fs_devread read error - block
Unknown uclass 'nvme' in label
Unknown uclass 'scsi' in label
No USB controllers found
Scanning bootdev 'ethernet at ffbe0000.bootdev':
ethernet at ffbe0000 Waiting for PHY auto negotiation to complete..user 
interrupt!
phy_startup() failed: -4
FAILED: -4
BOOTP broadcast 1
=> mmc read $loadaddr 0x40 0x4000
MMC read: dev # 0, block # 64, count 16384 ... 0 blocks read: ERROR
=> mmc erase 0x40 0x4000
MMC erase: dev # 0, block # 64, count 16384 ... mmc erase failed
0 blocks erased: ERROR
=> mmc part
Partition Map for mmc device 0  --   Partition Type: DOS
Part	Start Sector	Num Sectors	UUID		Type
** Can't read partition table on 0:0 **
```
By checking the mmc information:
```
=> mmc info
Device: mmc at ffbf0000
Manufacturer ID: ef
OEM: 0
Name: TLi16G
Bus Speed: 200000000
Mode: HS200 (200MHz)
Rd Block Len: 512
MMC version 5.1
High Capacity: Yes
Capacity: 14.7 GiB
Bus Width: 4-bit
Erase Group Size: 512 KiB
HC WP Group Size: 128 MiB
User Capacity: 14.7 GiB WRREL
Boot Capacity: 4 MiB ENH
RPMB Capacity: 4 MiB ENH
```
I found the bus width is not corrent, and no "Boot area X is not write 
protected" tip.
This is the working `mmc info` output:
```
Device: mmc at ffbf0000
Manufacturer ID: ef
OEM: 0
Name: TLi16G
Bus Speed: 200000000
Mode: HS200 (200MHz)
Rd Block Len: 512
MMC version 5.1
High Capacity: Yes
Capacity: 14.7 GiB
Bus Width: 8-bit
Erase Group Size: 512 KiB
HC WP Group Size: 128 MiB
User Capacity: 14.7 GiB WRREL
Boot Capacity: 4 MiB ENH
RPMB Capacity: 4 MiB ENH
Boot area 0 is not write protected
Boot area 1 is not write protected
```
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?
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
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