From: mingming lee Date: Tue, 31 Dec 2019 03:29:25 +0000 (+0800) Subject: mmc: mtk-sd: fix hang when data read quickly X-Git-Tag: v2020.10~413^2~18 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fb80eaa9d8c15840bbceb4b8152c3759a84ae39e;p=platform%2Fkernel%2Fu-boot.git mmc: mtk-sd: fix hang when data read quickly For CMD21 tuning data, the 128/64 bytes data may coming in very short time, before msdc_start_data(), the read data has already come, in this case, clear MSDC_INT will cause the interrupt disappear and lead to the thread hang. the solution is just clear all interrupts before command was sent. Signed-off-by: mingming lee --- diff --git a/drivers/mmc/mtk-sd.c b/drivers/mmc/mtk-sd.c index 2341373..b036587 100644 --- a/drivers/mmc/mtk-sd.c +++ b/drivers/mmc/mtk-sd.c @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -531,6 +530,7 @@ static int msdc_start_command(struct msdc_host *host, struct mmc_cmd *cmd, blocks = data->blocks; writel(CMD_INTS_MASK, &host->base->msdc_int); + writel(DATA_INTS_MASK, &host->base->msdc_int); writel(blocks, &host->base->sdc_blk_num); writel(cmd->cmdarg, &host->base->sdc_arg); writel(rawcmd, &host->base->sdc_cmd); @@ -677,13 +677,9 @@ static int msdc_start_data(struct msdc_host *host, struct mmc_data *data) u32 size; int ret; - WATCHDOG_RESET(); - if (data->flags == MMC_DATA_WRITE) host->last_data_write = 1; - writel(DATA_INTS_MASK, &host->base->msdc_int); - size = data->blocks * data->blocksize; if (data->flags == MMC_DATA_WRITE)