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 '[email protected]':
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 '[email protected]':
 ** 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 '[email protected]':
ethernet@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@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@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 <[email protected]>
---
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;

Reply via email to