Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mmc: jz4740: don't wait for PRG_DONE after stop command with R1 response

As of commit bcc3e1726d ("mmc: block: Use R1 responses for stop cmds for
read requests"), stop commands for reads do not have MMC_RSP_BUSY set.
In this case we should not wait for a PRG_DONE IRQ after sending the
stop command: it will not get raised when the busy flag is not set,
causing the request to fail with a timeout.

Signed-off-by: Alex Smith <alex.smith@imgtec.com>
Cc: Lars-Peter Clausen <lars@metafoo.de>
Cc: Ulf Hansson <ulf.hansson@linaro.org>
Cc: Chris Ball <chris@printf.net>
Cc: James Hogan <james.hogan@imgtec.com>
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Chris Ball <chris@printf.net>

authored by

Alex Smith and committed by
Chris Ball
1acee84b c373eb48

+7 -4
+7 -4
drivers/mmc/host/jz4740_mmc.c
··· 515 515 516 516 jz4740_mmc_send_command(host, req->stop); 517 517 518 - timeout = jz4740_mmc_poll_irq(host, JZ_MMC_IRQ_PRG_DONE); 519 - if (timeout) { 520 - host->state = JZ4740_MMC_STATE_DONE; 521 - break; 518 + if (mmc_resp_type(req->stop) & MMC_RSP_BUSY) { 519 + timeout = jz4740_mmc_poll_irq(host, 520 + JZ_MMC_IRQ_PRG_DONE); 521 + if (timeout) { 522 + host->state = JZ4740_MMC_STATE_DONE; 523 + break; 524 + } 522 525 } 523 526 case JZ4740_MMC_STATE_DONE: 524 527 break;