[U-Boot] Problems with D-cache invalidation in Freescale eSDHC driver

mario.six at gdsys.cc mario.six at gdsys.cc
Fri Mar 18 09:16:48 CET 2016


Hello,

I've been working on a QorIQ P1022 board (controlcenterd) to run the  
newest U-Boot on it, and I encountered some strange behavior.

During boot, we get these error messages

"
ERROR: Cannot import environment: errno = 12

at common/env_common.c:221/env_import()
*** Warning - import failed, using default environment

ERROR: Environment import failed: errno = 12

at common/env_common.c:123/set_default_env()
## Can't malloc 9 bytes
"

After bisecting, I found out that the commit 4683b22 (mmc:fsl_esdhc  
invalidate dcache before read) apparently causes this. With the  
additional d-cache invalidations in place, malloc and free calls fail.

Now, after some experimenting, I found out that deactivating the  
d-cache invalidation when reading the first sector is enough; that is,  
if one replaces the first invalidation

"
if (data->flags & MMC_DATA_READ)
	check_and_invalidate_dcache_range(cmd, data);
"

with

"
if (data->flags & MMC_DATA_READ && (cmd->cmdidx !=  
MMC_CMD_READ_SINGLE_BLOCK || cmd->cmdarg != 0))
	check_and_invalidate_dcache_range(cmd, data);
"

in fsl_esdhc.c, it seems to work, but I have no idea why that is the case.

Any ideas would be greatly appreciated.

Best regards,
Mario




More information about the U-Boot mailing list