linux-stable/drivers/mmc/host
Ulf Hansson aa86f1a388 mmc: tmio: Fixup runtime PM management during probe
The tmio_mmc_host_probe() calls pm_runtime_set_active() to update the
runtime PM status of the device, as to make it reflect the current status
of the HW. This works fine for most cases, but unfortunate not for all.
Especially, there is a generic problem when the device has a genpd attached
and that genpd have the ->start|stop() callbacks assigned.

More precisely, if the driver calls pm_runtime_set_active() during
->probe(), genpd does not get to invoke the ->start() callback for it,
which means the HW isn't really fully powered on. Furthermore, in the next
phase, when the device becomes runtime suspended, genpd will invoke the
->stop() callback for it, potentially leading to usage count imbalance
problems, depending on what's implemented behind the callbacks of course.

To fix this problem, convert to call pm_runtime_get_sync() from
tmio_mmc_host_probe() rather than pm_runtime_set_active(). Additionally, to
avoid bumping usage counters and unnecessary re-initializing the HW the
first time the tmio driver's ->runtime_resume() callback is called,
introduce a state flag to keeping track of this.

Cc: stable@vger.kernel.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Tested-by: Geert Uytterhoeven <geert@linux-m68k.org>
2019-09-13 13:49:04 +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 core: 2019-07-11 18:11:21 -07:00
au1xmmc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
bcm2835.c Revert "mmc: bcm2835: Terminate timeout work synchronously" 2019-09-11 15:57:21 +02:00
cavium-octeon.c
cavium-thunderx.c
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 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 284 2019-06-05 17:36:37 +02:00
cqhci.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 284 2019-06-05 17:36:37 +02:00
davinci_mmc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02: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: add MMC_CAP_CMD23 cap 2018-10-08 11:40:43 +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: Fix occasional hang after tuning on eMMC 2019-07-22 14:30:23 +02:00
dw_mmc.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
jz4740_mmc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 151 2019-05-30 11:26:28 -07:00
Kconfig mmc: sdhci_am654: Add dependency on MMC_SDHCI_AM654 2019-07-10 13:17:30 +02:00
Makefile mmc: sdhci_am654: Add Initial Support for AM654 SDHCI driver 2018-12-17 08:26:24 +01:00
meson-gx-mmc.c MMC core: 2019-07-11 18:11:21 -07:00
meson-mx-sdio.c mmc: meson-mx-sdio: Fix misuse of GENMASK macro 2019-07-22 15:09:23 +02:00
mmc_spi.c mmc: mmc_spi: Convert to use SPDX identifier 2019-04-15 11:55:54 +02:00
mmci.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
mmci.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02: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: stm32: define get_dctrl_cfg 2019-04-15 11:55:54 +02:00
moxart-mmc.c
mtk-sd.c mmc: mediatek: fix SDIO IRQ detection issue 2019-06-17 13:26:50 +02:00
mvsdio.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
mvsdio.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
mxcmmc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
mxs-mmc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 1 2019-05-21 11:28:39 +02:00
of_mmc_spi.c mmc: mmc_spi: Convert to use SPDX identifier 2019-04-15 11:55:54 +02:00
omap.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
omap_hsmmc.c mmc: omap_hsmmc: Use dev_get_drvdata() 2019-05-06 11:55:39 +02:00
pxamci.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
pxamci.h
renesas_sdhi.h mmc: renesas_sdhi: update copyright information 2019-04-15 11:55:54 +02:00
renesas_sdhi_core.c Revert "mmc: tmio: move runtime PM enablement to the driver implementations" 2019-09-13 13:48:35 +02:00
renesas_sdhi_internal_dmac.c mmc: renesas_sdhi: prevent overflow for max_req_size 2019-04-15 11:55:54 +02:00
renesas_sdhi_sys_dmac.c mmc: renesas_sdhi: prevent overflow for max_req_size 2019-04-15 11:55:54 +02:00
rtsx_pci_sdmmc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 17 2019-05-21 11:28:46 +02: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: 2019-07-11 18:11:21 -07:00
s3cmci.h MMC core: 2019-07-11 18:11:21 -07:00
sdhci-acpi.c mmc: sdhci-sprd: Fix the incorrect soft reset operation when runtime resuming 2019-08-06 18:59:14 +02:00
sdhci-bcm-kona.c mmc: sdhci-bcm-kona: Drop unused includes 2019-02-25 08:40:58 +01:00
sdhci-brcmstb.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
sdhci-cadence.c mmc: sdhci-cadence: enable v4_mode to fix ADMA 64-bit addressing 2019-08-30 09:17:53 +02: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: sdhci-sprd: Fix the incorrect soft reset operation when runtime resuming 2019-08-06 18:59:14 +02:00
sdhci-esdhc.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 178 2019-05-30 11:29:19 -07:00
sdhci-iproc.c mmc: sdhci-iproc: Set NO_HISPD bit to fix HS50 data hold time problem 2019-05-15 13:52:05 +02:00
sdhci-msm.c mmc: sdhci-msm: fix mutex while in spinlock 2019-07-10 13:17:30 +02:00
sdhci-of-arasan.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
sdhci-of-at91.c mmc: sdhci-of-at91: add quirk for broken HS200 2019-08-22 13:49:40 +02: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: use 1/2 periperhal clock for ls1028a 2019-06-17 13:33:54 +02: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 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 341 2019-06-05 17:37:07 +02:00
sdhci-pci-arasan.c mmc:host:sdhci-pci:Addition of Arasan PCI Controller with integrated phy. 2018-01-04 12:46:11 +01:00
sdhci-pci-core.c mmc: sdhci-sprd: Fix the incorrect soft reset operation when runtime resuming 2019-08-06 18:59:14 +02: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-o2micro.c Revert "mmc: sdhci: Remove unneeded quirk2 flag of O2 SD host controller" 2019-09-11 15:57:21 +02:00
sdhci-pci.h mmc: sdhci-pci: Add support for Intel EHL 2019-07-10 13:17:30 +02:00
sdhci-pic32.c mmc: sdhci-*: Don't emit error msg if sdhci_add_host() fails 2018-05-29 12:24:26 +02:00
sdhci-pltfm.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 176 2019-05-30 11:29:19 -07:00
sdhci-pltfm.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02: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-sprd: Fix the incorrect soft reset operation when runtime resuming 2019-08-06 18:59:14 +02:00
sdhci-sirf.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 4 2019-05-21 11:28:40 +02:00
sdhci-spear.c mmc: sdhci: spear: Use the slot GPIO descriptor 2018-10-08 11:40:43 +02:00
sdhci-sprd.c mmc: sdhci-sprd: clear the UHS-I modes read from registers 2019-08-30 09:17:53 +02:00
sdhci-st.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
sdhci-tegra.c Revert "mmc: sdhci-tegra: drop ->get_ro() implementation" 2019-08-21 14:48:30 +02: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-sprd: Fix the incorrect soft reset operation when runtime resuming 2019-08-06 18:59:14 +02:00
sdhci.h mmc: sdhci-sprd: Fix the incorrect soft reset operation when runtime resuming 2019-08-06 18:59:14 +02:00
sdhci_am654.c mmc: sdhci_am654: Make some symbols static 2019-07-10 13:17:30 +02:00
sdhci_f_sdh30.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 441 2019-06-05 17:37:17 +02: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: use SPDX identifier for Renesas drivers 2018-10-08 11:40:43 +02:00
sunxi-mmc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
tifm_sd.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02: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: Fixup runtime PM management during probe 2019-09-13 13:49:04 +02:00
tmio_mmc_core.c mmc: tmio: Fixup runtime PM management during probe 2019-09-13 13:49:04 +02: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 Revert "mmc: tmio: move runtime PM enablement to the driver implementations" 2019-09-13 13:48:35 +02:00
usdhi6rol0.c mmc: usdhi6rol0: mark expected switch fall-throughs 2019-05-06 12:33:03 +02:00
ushc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
via-sdmmc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
vub300.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 372 2019-06-05 17:37:10 +02: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