Both MMC and SD use index 8 for different commands, and expect different types of responses. MMC_CMD_SEND_EXT_CSD expects a data block of 512 bytes while SD_CMD_SEND_IF_COND expects an R7 response (R1 + 32 bits).
Differentiate them with the data parameter which tells us if the MMC driver expects a data block as a response. Signed-off-by: Martí Alonso <[email protected]> --- drivers/mmc/mmc_spi.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/drivers/mmc/mmc_spi.c b/drivers/mmc/mmc_spi.c index 53bf4f583243..f13ae8e6ebcd 100644 --- a/drivers/mmc/mmc_spi.c +++ b/drivers/mmc/mmc_spi.c @@ -339,11 +339,16 @@ static int dm_mmc_spi_request(struct udevice *dev, struct mmc_cmd *cmd, resp_size = sizeof(resp8); cmd->cmdarg = 0x40000000; break; - case SD_CMD_SEND_IF_COND: - resp = (u8 *)&resp40[0]; - resp_size = sizeof(resp40); - resp_match = true; - resp_match_value = R1_SPI_IDLE; + case SD_CMD_SEND_IF_COND: // Also MMC_CMD_SEND_EXT_CSD + if (data) { + resp = &resp8; + resp_size = sizeof(resp8); + } else { + resp = (u8 *)&resp40[0]; + resp_size = sizeof(resp40); + resp_match = true; + resp_match_value = R1_SPI_IDLE; + } break; case MMC_CMD_SPI_READ_OCR: resp = (u8 *)&resp40[0]; @@ -396,12 +401,16 @@ static int dm_mmc_spi_request(struct udevice *dev, struct mmc_cmd *cmd, case MMC_CMD_SEND_OP_COND: cmd->response[0] = (resp8 & R1_SPI_IDLE) ? 0 : OCR_BUSY; break; - case SD_CMD_SEND_IF_COND: + case SD_CMD_SEND_IF_COND: // Also MMC_CMD_SEND_EXT_CSD case MMC_CMD_SPI_READ_OCR: - cmd->response[0] = resp40[4]; - cmd->response[0] |= (uint)resp40[3] << 8; - cmd->response[0] |= (uint)resp40[2] << 16; - cmd->response[0] |= (uint)resp40[1] << 24; + if (data && cmd->cmdidx == MMC_CMD_SEND_EXT_CSD) { + cmd->response[0] = resp8; + } else { + cmd->response[0] = resp40[4]; + cmd->response[0] |= (uint)resp40[3] << 8; + cmd->response[0] |= (uint)resp40[2] << 16; + cmd->response[0] |= (uint)resp40[1] << 24; + } break; case MMC_CMD_SEND_STATUS: if (resp16[0] || resp16[1]) -- 2.43.0 base-commit: 5ca1a73c7d3064582498a8aa96c29e714402a6d3 branch: fix-mmc-no-sd

