summaryrefslogtreecommitdiff
path: root/drivers/mmc
diff options
context:
space:
mode:
authorTerry Lv <r65388@freescale.com>2010-12-29 10:42:50 +0800
committerTerry Lv <r65388@freescale.com>2010-12-29 10:42:50 +0800
commitb189ab8e686fe53e07101c3f7b65305f805151ad (patch)
tree24cee5a3464a220b8ea5326e2ad4a31c0a450a4c /drivers/mmc
parentfb98f374aa425699643cf784850b74e512a40e63 (diff)
downloadu-boot-imx-b189ab8e686fe53e07101c3f7b65305f805151ad.zip
u-boot-imx-b189ab8e686fe53e07101c3f7b65305f805151ad.tar.gz
u-boot-imx-b189ab8e686fe53e07101c3f7b65305f805151ad.tar.bz2
ENGR00136863-2: Fix mx53 CMD12 issue.
As in mx53 and lster socs, when using CMD12, cmdtype need to be set to ABORT, otherwise, next read command will hang. This is a software Software Restrictions in spec 29.7.8. For pre-defined multi-block read operation, i.e., The number of blocks to read has been defined by previous CMD23 for MMC, or pre-defined number of blocks in CMD53 for SDIO/SDCombo, or whatever multi-block read without abort command at card side, an abort command, either automatic or manual CMD12/CMD52, is still required by ESDHCV2 after the pre-defined number of blocks are done, to drive the internal state machine to idle mode. In this case, the card may not respond to this extra abort command and ESDHCV2 gets Response Timeout. It is recommended to manually send an abort command with RSPTYP[1:0] both bits cleared. Signed-off-by: Terry Lv <r65388@freescale.com>
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/imx_esdhc.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/mmc/imx_esdhc.c b/drivers/mmc/imx_esdhc.c
index c0eaa97..0dff3ca 100644
--- a/drivers/mmc/imx_esdhc.c
+++ b/drivers/mmc/imx_esdhc.c
@@ -104,6 +104,9 @@ uint esdhc_xfertyp(struct mmc_cmd *cmd, struct mmc_data *data)
else if (cmd->resp_type & MMC_RSP_PRESENT)
xfertyp |= XFERTYP_RSPTYP_48;
+ if (cmd->cmdidx == MMC_CMD_STOP_TRANSMISSION)
+ xfertyp |= XFERTYP_CMDTYP_ABORT;
+
return XFERTYP_CMD(cmd->cmdidx) | xfertyp;
}