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 <jo...@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]; >