summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMarek Vasut <marex@denx.de>2018-11-06 23:42:11 +0100
committerTom Rini <trini@konsulko.com>2018-11-10 08:16:30 -0500
commit26cc40d8c4aaa8bd69055fb00d0737332661a879 (patch)
tree4852eb0280919a3cc29415cf8cd4a0c51e4c96a1 /drivers
parentfb3148a2302b18860a5141d2d8d500ff7d58c0b8 (diff)
downloadu-boot-26cc40d8c4aaa8bd69055fb00d0737332661a879.tar.gz
u-boot-26cc40d8c4aaa8bd69055fb00d0737332661a879.tar.bz2
u-boot-26cc40d8c4aaa8bd69055fb00d0737332661a879.zip
mmc: dw_mmc: Add RCRC handling
This patch adds check for command response CRC failure. The driver is currently ignoring CRC check failure on command resposes which have CRC atteched to it, which can be potentially dangerous. Even more grueling problem happens when the command response is followed by data transfer though, as in that case, the dwmci_data_transfer() function will spin until it reaches the 240s timeout. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Heiko Stuebner <heiko@sntech.de> Cc: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mmc/dw_mmc.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
index 3c702b3ed8..7544b84ab6 100644
--- a/drivers/mmc/dw_mmc.c
+++ b/drivers/mmc/dw_mmc.c
@@ -317,6 +317,10 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
} else if (mask & DWMCI_INTMSK_RE) {
debug("%s: Response Error.\n", __func__);
return -EIO;
+ } else if ((cmd->resp_type & MMC_RSP_CRC) &&
+ (mask & DWMCI_INTMSK_RCRC)) {
+ debug("%s: Response CRC Error.\n", __func__);
+ return -EIO;
}