
Hi,
On 2024-04-03 02:00, Jaehoon Chung wrote:
Hi,
On 1/28/24 01:29, Jonas Karlman wrote:
The alignment hole caused by cmdidx in struct mmc_cmd cause strange issues together with the peephole2 optimization on Amlogic SoCs. Following was observed while working on SPL support for Amlogic SoCs.
sd_get_capabilities() normally issue a CMD55 followed by a CMD51. However, on at least Amlogic S905 (Cortex-A53) and S905X3 (Cortex-A55), CMD55 was instead followed by CMD8 (and a few reties) in SPL.
I read your RFC "https://patchwork.ozlabs.org/patch/1841495/
First, I will retry to reproduce your case with other compiler. After that, I will inform again about this patch.
Gentle ping, this patch has been on list for almost a year now.
Have you had any time to reproduce this or can this be merged as-is?
For some reason only Amlogic seem to be affected by this issue.
Regards, Jonas
Best Regards, Jaehoon Chung
Code from the call site:
cmd.cmdidx = SD_CMD_APP_SEND_SCR; // 51 ... data.blocksize = 8; ... err = mmc_send_cmd_retry(mmc, &cmd, &data, 3);
Running the code with MMC_TRACE enabled shows:
CMD_SEND:55 ARG 0x50480000 MMC_RSP_R1,5,6,7 0x00000920 CMD_SEND:8 ARG 0x00000000 RET -110
Removing the alignment hole by changing cmdidx from ushort to uint or building with -fno-peephole2 flag seem to resolve this issue.
CMD_SEND:55 ARG 0x50480000 MMC_RSP_R1,5,6,7 0x00000920 CMD_SEND:51 ARG 0x00000000 MMC_RSP_R1,5,6,7 0x00000920
Same issue was observed building U-Boot with gcc 8 - 13.
Remove this alignment hole by changing cmdidx from ushort to uint.
Signed-off-by: Jonas Karlman jonas@kwiboo.se
Changes in v2:
- Drop use of -fno-peephole2 flag
Link to RFC: https://patchwork.ozlabs.org/patch/1841495/
include/mmc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/mmc.h b/include/mmc.h index 1022db3ffa7c..031ea0fb3545 100644 --- a/include/mmc.h +++ b/include/mmc.h @@ -413,7 +413,7 @@ struct mmc_cid { };
struct mmc_cmd {
- ushort cmdidx;
- uint cmdidx; uint resp_type; uint cmdarg; uint response[4];