]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
mmc: mmc_spi: Read R2 response for send status command - CMD13
authorPragnesh Patel <pragnesh.patel@sifive.com>
Mon, 29 Jun 2020 09:47:27 +0000 (15:17 +0530)
committerPeng Fan <peng.fan@nxp.com>
Tue, 14 Jul 2020 08:19:44 +0000 (16:19 +0800)
Send status command (CMD13) will send R1 response under SD mode
but R2 response under SPI mode.

R2 response is 2 bytes long, so read 2 bytes for mmc SPI mode

Signed-off-by: Pragnesh Patel <pragnesh.patel@sifive.com>
Reviewed-by: Bin Meng <bin.meng@windriver.com>
Tested-by: Bin Meng <bin.meng@windriver.com>
drivers/mmc/mmc_spi.c

index 18d36878efaff130c7f9703de1b02f78b8ca12cb..ee56de36ec2406fd5067eb9d14cb01a31227afd3 100644 (file)
@@ -266,7 +266,7 @@ static int dm_mmc_spi_request(struct udevice *dev, struct mmc_cmd *cmd,
        u8 *resp = NULL;
        u32 resp_size = 0;
        bool resp_match = false;
-       u8 resp8 = 0, resp40[5] = { 0 }, resp_match_value = 0;
+       u8 resp8 = 0, resp16[2] = { 0 }, resp40[5] = { 0 }, resp_match_value = 0;
 
        dm_spi_claim_bus(dev);
 
@@ -291,6 +291,9 @@ static int dm_mmc_spi_request(struct udevice *dev, struct mmc_cmd *cmd,
                resp_size = sizeof(resp40);
                break;
        case MMC_CMD_SEND_STATUS:
+               resp = (u8 *)&resp16[0];
+               resp_size = sizeof(resp16);
+               break;
        case MMC_CMD_SET_BLOCKLEN:
        case MMC_CMD_SPI_CRC_ON_OFF:
        case MMC_CMD_STOP_TRANSMISSION:
@@ -335,8 +338,10 @@ static int dm_mmc_spi_request(struct udevice *dev, struct mmc_cmd *cmd,
                cmd->response[0] |= (uint)resp40[1] << 24;
                break;
        case MMC_CMD_SEND_STATUS:
-               cmd->response[0] = (resp8 & 0xff) ?
-                       MMC_STATUS_ERROR : MMC_STATUS_RDY_FOR_DATA;
+               if (resp16[0] || resp16[1])
+                       cmd->response[0] = MMC_STATUS_ERROR;
+               else
+                       cmd->response[0] = MMC_STATUS_RDY_FOR_DATA;
                break;
        case MMC_CMD_SEND_CID:
        case MMC_CMD_SEND_CSD: