linux/drivers/mmc/host
Douglas Anderson b1ac62a7ac mmc: cqhci: Avoid false "cqhci: CQE stuck on" by not open-coding timeout loop
Open-coding a timeout loop invariably leads to errors with handling
the timeout properly in one corner case or another.  In the case of
cqhci we might report "CQE stuck on" even if it wasn't stuck on.
You'd just need this sequence of events to happen in cqhci_off():

1. Call ktime_get().
2. Something happens to interrupt the CPU for > 100 us (context switch
   or interrupt).
3. Check time and; set "timed_out" to true since > 100 us.
4. Read CQHCI_CTL.
5. Both "reg & CQHCI_HALT" and "timed_out" are true, so break.
6. Since "timed_out" is true, falsely print the error message.

Rather than fixing the polling loop, use readx_poll_timeout() like
many people do.  This has been time tested to handle the corner cases.

Fixes: a4080225f5 ("mmc: cqhci: support for command queue enabled host")
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20200413162717.1.Idece266f5c8793193b57a1ddb1066d030c6af8e0@changeid
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
2020-04-20 09:24:39 +02:00
..
alcor.c mmc: alcor: remove a redundant greater or equal to zero comparison 2019-07-10 13:17:30 +02:00
android-goldfish.c MMC core: 2019-07-11 18:11:21 -07:00
atmel-mci.c mmc: atmel-mci: Convert to pinctrl_select_default_state() 2019-12-16 13:00:41 +01:00
au1xmmc.c mmc: au1xmmc: switch to platform_get_irq 2019-12-18 14:55:11 +01:00
bcm2835.c mmc: bcm2835: Use dma_request_chan() instead dma_request_slave_channel() 2019-12-19 08:19:43 +01:00
cavium-octeon.c mmc: cavium-octeon: remove nonsense variable coercion 2020-03-27 13:26:25 +01:00
cavium-thunderx.c mmc: cavium: Add missed pci_release_regions 2019-12-18 12:55:11 +01:00
cavium.c mmc: cavium: Add the missing dma unmap when the dma has finished. 2019-08-06 18:59:14 +02:00
cavium.h
cb710-mmc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
cb710-mmc.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
cqhci.c mmc: cqhci: Avoid false "cqhci: CQE stuck on" by not open-coding timeout loop 2020-04-20 09:24:39 +02:00
cqhci.h mmc: cqhci: Add cqhci_deactivate() 2020-03-24 14:39:52 +01:00
davinci_mmc.c mmc: core: Remove mmc_gpiod_request_*(invert_gpio) 2019-12-18 13:37:07 +01:00
dw_mmc-bluefield.c mmc: dw_mmc-bluefield: : Fix the license information 2019-01-22 08:46:20 +01:00
dw_mmc-exynos.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
dw_mmc-exynos.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
dw_mmc-hi3798cv200.c mmc: dw_mmc: hi3798cv200: make array degrees static const, makes object smaller 2019-09-11 16:10:37 +02:00
dw_mmc-k3.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
dw_mmc-pci.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
dw_mmc-pltfm.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
dw_mmc-pltfm.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
dw_mmc-rockchip.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
dw_mmc-zx.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
dw_mmc-zx.h
dw_mmc.c mmc: dw_mmc: Use dma_request_chan() instead dma_request_slave_channel() 2019-12-19 08:19:42 +01:00
dw_mmc.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
jz4740_mmc.c mmc: jz4740: Convert to pinctrl_select_default_state() 2019-12-16 13:00:41 +01:00
Kconfig mmc: host: sdhci-sprd: Add software queue support 2020-03-24 14:35:39 +01:00
Makefile mmc: Add MMC host software queue support 2020-03-24 14:35:39 +01:00
meson-gx-mmc.c mmc: meson-gx: Convert to pinctrl_select_default_state() 2019-12-16 13:00:41 +01:00
meson-mx-sdio.c mmc: meson-mx-sdio: remove the broken ->card_busy() op 2020-04-20 09:24:39 +02:00
mmc_hsq.c mmc: host: hsq: Add missing MODULE_LICENSE() and MODULE_DESCRIPTION() 2020-03-24 14:35:40 +01:00
mmc_hsq.h mmc: Add MMC host software queue support 2020-03-24 14:35:39 +01:00
mmc_spi.c mmc: core: Remove mmc_gpiod_request_*(invert_gpio) 2019-12-18 13:37:07 +01:00
mmci_qcom_dml.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 284 2019-06-05 17:36:37 +02:00
mmci_stm32_sdmmc.c mmc: mmci_sdmmc: Fix clear busyd0end irq flag 2020-03-26 14:59:31 +01:00
mmci.c mmc: mmci: Add support for sdmmc variant revision 2.0 2020-03-24 14:35:40 +01:00
mmci.h mmc: mmci_sdmmc: Implement signal voltage callbacks 2020-03-24 14:35:40 +01:00
moxart-mmc.c mmc: moxart: Use dma_request_chan() directly for channel request 2019-11-14 16:28:56 +01:00
mtk-sd.c mmc: mediatek: fix SDIO irq issue 2020-03-27 13:21:30 +01:00
mvsdio.c mmc: mvsdio: convert to devm_platform_ioremap_resource 2019-12-18 14:55:11 +01:00
mvsdio.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
mxcmmc.c mmc: mxcmmc: Use dma_request_chan() instead dma_request_slave_channel() 2019-12-19 08:19:42 +01:00
mxs-mmc.c mmc: mxs: Use dma_request_chan() instead dma_request_slave_channel() 2019-12-19 08:19:42 +01:00
of_mmc_spi.c mmc: mmc_spi: Convert to use SPDX identifier 2019-04-15 11:55:54 +02:00
omap_hsmmc.c mmc: omap_hsmmc: Convert to pinctrl_select_default_state() 2019-12-16 13:00:41 +01:00
omap.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
owl-mmc.c mmc: owl-mmc: Use dma_request_chan() instead dma_request_slave_channel() 2019-12-19 08:19:42 +01:00
pxamci.c mmc: pxamci: Use dma_request_chan() instead dma_request_slave_channel() 2019-12-19 08:19:42 +01:00
pxamci.h
renesas_sdhi_core.c mmc: renesas_sdhi: simplify execute_tuning 2020-03-24 14:39:52 +01:00
renesas_sdhi_internal_dmac.c mmc: renesas_sdhi: use recent tap values for HS400 2019-12-16 12:29:36 +01:00
renesas_sdhi_sys_dmac.c mmc: renesas_sdhi_sys_dmac: Remove all R-Car Gen3 SoCs 2019-09-11 15:58:39 +02:00
renesas_sdhi.h mmc: renesas_sdhi: Use BITS_PER_LONG helper 2020-03-24 14:39:52 +01:00
rtsx_pci_sdmmc.c mmc: rtsx_pci: Fix support for speed-modes that relies on tuning 2020-03-18 11:55:02 +01:00
rtsx_usb_sdmmc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 234 2019-06-19 17:09:07 +02:00
s3cmci.c mmc: core: Remove mmc_gpiod_request_*(invert_gpio) 2019-12-18 13:37:07 +01:00
s3cmci.h MMC core: 2019-07-11 18:11:21 -07:00
sdhci_am654.c mmc: sdhci: am654: Use sdhci_set_power_and_voltage() 2020-03-24 14:39:53 +01:00
sdhci_f_sdh30.c mmc: sdhci_f_sdh30: convert to devm_platform_ioremap_resource 2019-12-18 14:46:06 +01:00
sdhci_f_sdh30.h mmc: sdhci-milbeaut: add Milbeaut SD controller driver 2019-11-13 16:10:16 +01:00
sdhci-acpi.c MMC core: 2020-03-31 16:13:09 -07:00
sdhci-bcm-kona.c mmc: sdhci-bcm-kona: Drop unused includes 2019-02-25 08:40:58 +01:00
sdhci-brcmstb.c mmc: sdhci-brcmstb: Fix incorrect switch to HS mode 2020-01-20 12:01:19 +01:00
sdhci-cadence.c mmc: Replace zero-length array with flexible-array member 2020-03-24 14:39:45 +01:00
sdhci-cns3xxx.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
sdhci-dove.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 176 2019-05-30 11:29:19 -07:00
sdhci-esdhc-imx.c MMC core: 2020-03-31 16:13:09 -07:00
sdhci-esdhc.h mmc: sdhci-esdhc-imx: optimize the clock setting 2020-03-24 14:35:41 +01:00
sdhci-iproc.c mmc: sdhci: iproc: Add custom set_power() callback for bcm2711 2020-03-24 14:39:53 +01:00
sdhci-milbeaut.c mmc: sdhci: milbeaut: Use sdhci_set_power_and_voltage() 2020-03-24 14:39:53 +01:00
sdhci-msm.c mmc: sdhci-msm: Deactivate CQE during SDHC reset 2020-03-24 14:39:52 +01:00
sdhci-of-arasan.c mmc: sdhci: arasan: Use sdhci_set_power_and_voltage() 2020-03-24 14:39:53 +01:00
sdhci-of-aspeed.c mmc: sdhci-of-aspeed: add inversion signal presence 2019-11-20 13:40:47 +01:00
sdhci-of-at91.c mmc: sdhci-of-at91: Display clock changes for debug purpose only 2020-03-24 14:39:53 +01:00
sdhci-of-dwcmshc.c mmc: sdhci-of-dwcmshc: solve 128MB DMA boundary limitation 2018-10-08 11:40:43 +02:00
sdhci-of-esdhc.c mmc: sdhci-of-esdhc: fix serious issue clock is always disabled 2020-01-20 12:10:36 +01:00
sdhci-of-hlwd.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
sdhci-omap.c mmc: sdhci-omap: Add Support for Suspend/Resume 2020-03-24 14:39:52 +01:00
sdhci-pci-arasan.c
sdhci-pci-core.c Merge branch 'fixes' into next 2019-12-18 14:44:24 +01:00
sdhci-pci-data.c treewide: Add SPDX license identifier for missed files 2019-05-21 10:50:45 +02:00
sdhci-pci-dwc-mshc.c mmc: sdhci-pci-dwc-mshc: synopsys dwc mshc support 2018-07-16 11:21:45 +02:00
sdhci-pci-gli.c mmc: sdhci-pci-gli: Enable MSI interrupt for GL975x 2020-03-04 15:41:22 +01:00
sdhci-pci-o2micro.c Merge branch 'fixes' into next 2019-09-11 15:59:01 +02:00
sdhci-pci.h mmc: Replace zero-length array with flexible-array member 2020-03-24 14:39:45 +01:00
sdhci-pic32.c
sdhci-pltfm.c mmc: Remove dev_err() usage after platform_get_irq() 2019-09-11 15:58:39 +02:00
sdhci-pltfm.h mmc: Replace zero-length array with flexible-array member 2020-03-24 14:39:45 +01:00
sdhci-pxav2.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 282 2019-06-05 17:36:37 +02:00
sdhci-pxav3.c mmc: sdhci-sprd: Fix the incorrect soft reset operation when runtime resuming 2019-08-06 18:59:14 +02:00
sdhci-s3c.c mmc: sdhci-s3c: convert to devm_platform_ioremap_resource 2019-12-18 14:46:06 +01:00
sdhci-sirf.c mmc: core: Remove mmc_gpiod_request_*(invert_gpio) 2019-12-18 13:37:07 +01:00
sdhci-spear.c mmc: sdhci-spear: convert to devm_platform_ioremap_resource 2019-12-18 14:46:06 +01:00
sdhci-sprd.c mmc: sdhci-sprd: Set the missing MMC_CAP_WAIT_WHILE_BUSY flag 2020-03-24 14:35:42 +01:00
sdhci-st.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
sdhci-tegra.c sdhci: tegra: Enable MMC_CAP_WAIT_WHILE_BUSY host capability 2020-03-24 14:39:52 +01:00
sdhci-xenon-phy.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 372 2019-06-05 17:37:10 +02:00
sdhci-xenon.c mmc: sdhci-sprd: Fix the incorrect soft reset operation when runtime resuming 2019-08-06 18:59:14 +02:00
sdhci-xenon.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 372 2019-06-05 17:37:10 +02:00
sdhci.c mmc: sdhci: use FIELD_GET for preset value bit masks 2020-03-24 14:39:53 +01:00
sdhci.h mmc: sdhci: use FIELD_GET for preset value bit masks 2020-03-24 14:39:53 +01:00
sdricoh_cs.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
sh_mmcif.c mmc: sh_mmcif: Use dma_request_chan() instead dma_request_slave_channel() 2019-12-19 08:19:42 +01:00
sunxi-mmc.c mmc: sunxi-mmc: convert to devm_platform_ioremap_resource 2019-12-18 14:46:06 +01:00
tifm_sd.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
tmio_mmc_core.c mmc: tmio: remove superfluous callback wrappers 2020-03-24 14:35:38 +01:00
tmio_mmc.c Revert "mmc: tmio: move runtime PM enablement to the driver implementations" 2019-09-13 13:48:35 +02:00
tmio_mmc.h mmc: tmio: factor out TAP usage 2020-03-24 14:35:38 +01:00
toshsd.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
toshsd.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
uniphier-sd.c mmc: uniphier-sd: Convert to pinctrl_select_default_state() 2019-12-16 13:00:41 +01:00
usdhi6rol0.c mmc: usdhi6rol0: Use dma_request_chan() instead dma_request_slave_channel() 2019-12-19 08:19:42 +01:00
ushc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
via-sdmmc.c remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
vub300.c mmc: vub300: Use scnprintf() for avoiding potential buffer overflow 2020-03-24 14:39:52 +01:00
wbsd.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
wbsd.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
wmt-sdmmc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00