mmc: sdhci: Fix SDHCI_QUIRK2_STOP_WITH_TC
authorAdrian Hunter <adrian.hunter@intel.com>
Wed, 5 Oct 2016 09:11:21 +0000 (12:11 +0300)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 10 Oct 2016 12:20:34 +0000 (14:20 +0200)
commitfc605f1d8060133596bb6083fc4b7b306d1d5931
tree3036ddd4e1667fc847ea8bea31cd22b712a79d2d
parent3f2d26643595973e835e8356ea90c7c15cb1b0f1
mmc: sdhci: Fix SDHCI_QUIRK2_STOP_WITH_TC

Multi-block data transfers can specify the number of blocks either using a
Set Block Count command (CMD23) or by sending a STOP command (CMD12) after
the required number of blocks has transferred. CMD23 is preferred, but some
cards don't support it. CMD12 with R1b response is used for writes, and
R1 response for reads.

Some SDHCI host controllers give a Transfer Complete (TC) interrupt for the
STOP command (CMD12) whether or not a R1b response has been specified. The
quirk SDHCI_QUIRK2_STOP_WITH_TC identifies those host controllers, but the
implementation only considers the case where the TC interrupt arrives at
the same time as the Command Complete (CC) interrupt. However,
occasionally TC arrives before CC. That is harmless, but does generate an
error message "Got data interrupt 0x00000002 even though no data operation
was in progress".

A simpler approach is to force R1b response onto all STOP commands, because
SDHCI will handle TC before CC in the general case, so do that.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci.c