I am using evmAM572x board and SDK 03.00.00.04.
It seems to me that MMCSD driver invoked by MLO (no DMA, no interrupts) cannot perform multiple block reads. If it reads the SD card one block at a time - everything is fine, but attempt to read two blocks results in wrong data.
Seems like for MLO bootloader, the case of multiple block read is triggered by RPRC section aligned on sector border (512 bytes) and large enough (>= 2K). SBL_FileRead() reads file's content 1K per one f_read() call. And it results in two calls of disk_read() in FatFs, one sector each - unless the read is sector-aligned, in this case it is one disk_read() of two sectors. And disk_read() of two sectors yields wrong data; entire 1K buffer is populated with the last 32-bit word of two sectors read.
I looked into MMCSD_v1_read(), MMCSD_v1_transfer() and HSMMCSDCommandSend().
Reading multiple blocks is CMD18. According to processor's datasheet (spruhz6.pdf, page 6693), CMD_TYPE field in MMCHS_CMD register must be 0 for all commands, except CMD12 and CMD52. But MMCSD_v1_read() sets transaction flag MMCSD_CMDRSP_ABORT for CMD18 and MMCSD_v1_transfer() turns this flag into command type 3. I removed this flag, but it didn't help.
So, my MLO cannot perform multiple block reads. I tried two different SD cards. And it is likely that this MMCSD driver has the same problem with writes.