]> git.baikalelectronics.ru Git - kernel.git/commit
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)
commit33b9e88a094153f5c51302aa79daac50c8faf668
tree3036ddd4e1667fc847ea8bea31cd22b712a79d2d
parentdaed79f5196b43e64219cfba501cc6dea51f3614
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