Hi again, On 2023-05-29 17:27, Jonas Karlman wrote: > Hi Eugen, > > On 2023-05-25 11:23, Eugen Hristev wrote: >> Hi Jonas, >> >> I tried some basic eMMC read/write commands, and in my setup with >> rock5b, it fails at single/multiple block read/write , even if >> sometimes, the initial read works fine. >> >> Here is some log : >> >> => mmc read 0x50000000 64 1 > [snip] >> MMC read: dev # 0, block # 100, count 1 ... >> 1 blocks read: OK >> => mmc write 0x50000000 64 1 >> MMC write: dev # 0, block # 100, count 1 ... > [snip] >> 0 blocks written: ERROR >> => mmc write 0x50000000 64 5 >> MMC write: dev # 0, block # 100, count 5 ... > [snip] >> 0 blocks written: ERROR >> => mmc read 0x50000000 64 5 >> MMC read: dev # 0, block # 100, count 5 ... > [snip] >> 0 blocks read: ERROR >> => mmc read 0x50000000 64 1 > [snip] >> MMC read: dev # 0, block # 100, count 1 ... >> 0 blocks read: ERROR >> => >> >> So now after this attempt, there is a timeout when reading too. >> >> Can you try to reproduce this on your setup as well ? > > I was able to reproduce similar issue on rk356x, did not test on rk3588 > yet. Also going to try similar write commands on the rk3399 (arasan) > compatible of the rk sdhci driver, guess both rk35xx (dwc) compatible is > affected.
I tested on rk3399 and there was no problem loading u-boot-rockchip.bin from SD-card and writing it to eMMC using the following commands: Load u-boot-rockchip.bin to @512 MiB DRAM from SD-card: => load mmc 1:1 20000000 u-boot-rockchip.bin 9264128 bytes read in 402 ms (22 MiB/s) Select eMMC device: => mmc dev 0 switch to partitions #0, OK mmc0(part 0) is current device Erase 12 MiB starting from sector 64: => mmc erase 40 6000 MMC erase: dev # 0, block # 64, count 24576 ... 24576 blocks erased: OK Write 12 MiB from @512 MiB DRAM to sector 64: => mmc write 20000000 40 6000 MMC write: dev # 0, block # 64, count 24576 ... 24576 blocks written: OK So something in controller or driver cause write issues on rk35xx. > > Something odd that I noticed was that write sometime reported OK when > a read command for same blocks was issued, e.g. something similar worked > in some of my testing: > > Select eMMC device to reset state: > => mmc dev 0 > > Read 256KiB (TPL+SPL) from sector 64 to @512 MiB DRAM: > => mmc read 20000000 40 200 > > Erase 256KiB from sector 64: > => mmc erase 40 200 > > Write 256KiB (TPL+SPL) from @512 MiB DRAM to sector 64: > => mmc write 20000000 40 200 Count param was in bytes in my prior mail, corrected to block count above. Regards, Jonas > > After something fails the use of "mmc dev 0" could be used to reset into > a working read state. Some retry/reset handling may be needed in driver > to fully support write commands. > > A quick peek at vendor u-boot: rk u-boot include some form of retry > logic for write and hardkernel u-boot implement some sort of sw reset. > > Regards, > Jonas > >> >> P.S. booting from eMMC works fine. When I am trying this, I am booting >> from the eMMC. >> >> Thanks ! >