linux/drivers/mmc/host
Al Cooper 7ce45e9506 mmc: sdhci: SD tuning is broken for some controllers
The SD Host Controller spec states that the SD Host Controller can
request that the driver send up to 40 CMD19's while doing tuning
and that the total time the card spends responding must be < 150ms.
The sdhci_execute_tuning() function in sdhci.c that loops through
sending the CMD19's has multiple bugs. First it sets a "timeout"
variable to 150 and a loop counter variable to 40. It then decrements
both variables by 1 at the end of each loop. It tries to handle
violations of the count and time by doing a break when BOTH variables
are equal to zero, which can never happen because they we set to
different values and decremented by 1 at the same time. The timeout
variable is not based on time at all and is totally useless.
The routine also considers a loop counter of zero to be an error
which means that any controller that requests the max of 40 CMD19s
will cause tuning to fail and be disabled.

I've fixed these issues by allowing up to 40 CMD19's and I've removed
any attempt to handle the 150ms time limit. Removing timeout checking
seems safe here because each CMD19 is timeout protected and the max
loop counters insures we don't loop forever. Adding timeout checking
would not be as simple as snapping the time at the loop start and
checking for 150ms to pass because the loop queues the CMD19's and
uses events to wait for completion so the time would include
all the normal scheduler latencies.

Signed-off-by: Al Cooper <alcooperx@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Chris Ball <chris@printf.net>
2014-05-22 08:40:46 -04:00
..
android-goldfish.c mmc: remove unnecessary platform_set_drvdata() 2013-05-26 14:23:23 -04:00
atmel-mci-regs.h mmc: atmel-mci: AP700x PDC is not connected to MCI 2012-10-03 10:05:23 -04:00
atmel-mci.c mmc: atmel: don't test host->data 2014-05-12 18:08:23 -04:00
au1xmmc.c mmc: au1xmmc: Move away from using deprecated APIs 2013-10-30 20:26:35 -04:00
bfin_sdh.c mmc: bfin_sdh: Move away from using deprecated APIs 2013-10-30 20:26:36 -04:00
cb710-mmc.c mmc: cb710: Move away from using deprecated APIs 2013-10-30 20:26:37 -04:00
cb710-mmc.h mmc: host: use platform_{get,set}_drvdata() 2013-06-27 11:13:02 -04:00
davinci_mmc.c mmc: davinci: Remove redundant of_match_ptr 2014-02-25 15:42:55 -05:00
dw_mmc-exynos.c mmc: dw_mmc: exynos: Staticize dw_mci_exynos_pmops 2014-05-12 18:04:30 -04:00
dw_mmc-k3.c mmc: dw_mmc: fix possible build error 2014-03-03 14:00:56 -05:00
dw_mmc-pci.c mmc: dw_mmc-pci: enable bus-mastering mode 2013-08-25 00:10:12 -04:00
dw_mmc-pltfm.c mmc: dw_mmc: Add support for SOCFPGA's platform specific implementation 2014-02-26 21:30:12 -05:00
dw_mmc-pltfm.h mmc: remove use of __devexit 2012-11-28 12:28:18 -08:00
dw_mmc.c mmc: dw_mmc: Don't print data errors 2014-05-22 08:33:31 -04:00
dw_mmc.h mmc: dw_mmc: remove dw_mci_of_cd_gpio/wp_gpio() 2014-05-12 18:04:34 -04:00
jz4740_mmc.c mmc: jz4740: don't wait for PRG_DONE after stop command with R1 response 2014-05-12 18:08:22 -04:00
Kconfig mmc: sunxi: Add driver for SD/MMC hosts found on Allwinner sunxi SoCs 2014-05-22 08:40:40 -04:00
Makefile mmc: sunxi: Add driver for SD/MMC hosts found on Allwinner sunxi SoCs 2014-05-22 08:40:40 -04:00
mmc_spi.c mmc: mmc_spi: Remove platform data .get_cd() and .get_ro() callbacks 2013-08-24 23:58:06 -04:00
mmci.c mmc: mmci: clarify DDR timing mode between SD-UHS and eMMC 2014-04-20 16:59:41 -04:00
mmci.h MMC highlights for 3.15: 2014-04-09 08:39:39 -07:00
moxart-mmc.c mmc: moxart: Add MOXA ART SD/MMC driver 2014-05-12 18:05:16 -04:00
msm_sdcc.c mmc: msm_sdcc: Move away from using deprecated APIs 2013-10-30 20:26:41 -04:00
msm_sdcc.h
mvsdio.c mmc: mvsdio: workaround for spurious irqs 2014-05-12 18:05:46 -04:00
mvsdio.h
mxcmmc.c mmc: mxcmmc: Use mmc_regulator_get_supply() API 2014-05-12 18:08:24 -04:00
mxs-mmc.c mmc: mxs: fix card detection function for broken card detect 2014-05-12 18:08:22 -04:00
of_mmc_spi.c mmc: mmc_spi: Support CD/RO GPIOs 2013-08-24 23:45:22 -04:00
omap.c mmc: omap: Use DIV_ROUND_UP instead of open coded 2014-05-22 08:33:31 -04:00
omap_hsmmc.c mmc: omap_hsmmc: split omap-dma header file 2014-05-22 08:40:44 -04:00
pxamci.c mmc: pxamci: Remove redundant suspend and resume callbacks 2013-10-30 20:28:29 -04:00
pxamci.h
rtsx_pci_sdmmc.c mmc: rtsx: add R1-no-CRC mmc command type handle 2014-04-22 07:06:40 -04:00
rtsx_usb_sdmmc.c mmc: rtsx: fix possible linking error if built-in 2014-05-12 18:08:23 -04:00
s3cmci.c ARM: s3c24xx: explicit dependency on <plat/gpio-cfg.h> 2014-01-14 15:24:54 +01:00
s3cmci.h
sdhci-acpi.c mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function 2014-05-22 08:33:11 -04:00
sdhci-bcm-kona.c mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function 2014-05-22 08:33:11 -04:00
sdhci-bcm2835.c mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function 2014-05-22 08:33:11 -04:00
sdhci-cns3xxx.c mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function 2014-05-22 08:33:11 -04:00
sdhci-dove.c mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function 2014-05-22 08:33:11 -04:00
sdhci-esdhc-imx.c mmc: sdhci-esdhc-imx: fix mmc ddr mode regression issue 2014-05-22 08:40:45 -04:00
sdhci-esdhc.h mmc: sdhci: convert sdhci_set_clock() into a library function 2014-05-22 07:26:32 -04:00
sdhci-msm.c mmc: sdhci-msm: Add platform_execute_tuning implementation 2014-03-26 21:27:39 -04:00
sdhci-of-arasan.c mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function 2014-05-22 08:33:11 -04:00
sdhci-of-esdhc.c mmc: sdhci-of-esdhc: remove platform_suspend/platform_resume callbacks 2014-05-22 08:33:27 -04:00
sdhci-of-hlwd.c mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function 2014-05-22 08:33:11 -04:00
sdhci-pci-data.c mmc: sdhci-pci: add platform data 2012-01-11 23:58:47 -05:00
sdhci-pci-o2micro.c mmc: sdhci-pci-o2micro: Add SeaBird SeaEagle SD3 support 2014-05-22 08:40:44 -04:00
sdhci-pci-o2micro.h mmc: sdhci-pci-o2micro: Add SeaBird SeaEagle SD3 support 2014-05-22 08:40:44 -04:00
sdhci-pci.c mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function 2014-05-22 08:33:11 -04:00
sdhci-pci.h mmc: sdhci-pci: Fix BYT sd card getting stuck in runtime suspend 2014-01-20 10:31:08 -05:00
sdhci-pltfm.c mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function 2014-05-22 08:33:11 -04:00
sdhci-pltfm.h mmc: sdhci-pltfm: export pltfm suspend/resume api 2014-01-13 12:48:06 -05:00
sdhci-pxav2.c mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function 2014-05-22 08:33:11 -04:00
sdhci-pxav3.c mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function 2014-05-22 08:33:11 -04:00
sdhci-s3c-regs.h mmc: sdhci-s3c: remove platform dependencies 2013-04-19 13:51:23 +02:00
sdhci-s3c.c mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function 2014-05-22 08:33:11 -04:00
sdhci-sirf.c mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function 2014-05-22 08:33:11 -04:00
sdhci-spear.c mmc: sdhci: convert sdhci_set_uhs_signaling() into a library function 2014-05-22 08:33:11 -04:00
sdhci-tegra.c mmc: sdhci-tegra: get rid of special PRESENT_STATE register handling 2014-05-22 08:33:28 -04:00
sdhci.c mmc: sdhci: SD tuning is broken for some controllers 2014-05-22 08:40:46 -04:00
sdhci.h mmc: sdhci: remove platform_suspend/platform_resume callbacks 2014-05-22 08:33:28 -04:00
sdricoh_cs.c mmc: sdricoh_cs: Move away from using deprecated APIs 2013-10-30 20:28:32 -04:00
sh_mmcif.c mmc: sh_mmcif: clarify DDR timing mode between SD-UHS and eMMC 2014-04-20 16:59:52 -04:00
sh_mobile_sdhi.c mmc: sdhi: update sh_mobile_sdhi_of_data for r8a7791 2014-02-22 13:06:23 -05:00
sunxi-mmc.c mmc: sunxi: Add driver for SD/MMC hosts found on Allwinner sunxi SoCs 2014-05-22 08:40:40 -04:00
tifm_sd.c mmc: tifm_sd: Move away from using deprecated APIs 2013-10-30 20:28:23 -04:00
tmio_mmc.c mmc: tmio_mmc: Convert from legacy to modern PM ops 2014-02-13 22:58:01 -05:00
tmio_mmc.h mmc: tmio: Adapt to proper PM configs for exported functions 2014-02-13 22:58:09 -05:00
tmio_mmc_dma.c mmc: tmio: bus_shift become tmio_mmc_data member 2014-01-13 12:48:23 -05:00
tmio_mmc_pio.c mmc: tmio: Adapt to proper PM configs for exported functions 2014-02-13 22:58:09 -05:00
ushc.c mmc: ushc: Fix incorrect parameter in sizeof 2014-02-25 15:42:20 -05:00
via-sdmmc.c mmc: via-sdmmc: Move away from using deprecated APIs 2013-10-30 20:28:36 -04:00
vub300.c mmc: vub300: Move away from using deprecated APIs 2013-10-30 20:26:43 -04:00
wbsd.c mmc: wbsd: Silence compiler warning 2013-11-08 14:32:03 -05:00
wbsd.h
wmt-sdmmc.c mmc: wmt-sdmmc: Use GFP_KERNEL instead of hard-coded value 2014-05-22 08:40:40 -04:00