linux/drivers/mmc/host
Pablo Sun c7bb120c1c mmc: mtk-sd: Use readl_poll_timeout_atomic in msdc_reset_hw
Use atomic readl_poll_timeout_atomic, because msdc_reset_hw
may be invoked in IRQ handler in the following context:

  msdc_irq() -> msdc_cmd_done() -> msdc_reset_hw()

The following kernel BUG stack trace can be observed on
Genio 1200 EVK after initializing MSDC1 hardware during kernel boot:

[    1.187441] BUG: scheduling while atomic: swapper/0/0/0x00010002
[    1.189157] Modules linked in:
[    1.204633] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G        W         5.15.42-mtk+modified #1
[    1.205713] Hardware name: MediaTek Genio 1200 EVK-P1V2-EMMC (DT)
[    1.206484] Call trace:
[    1.206796]  dump_backtrace+0x0/0x1ac
[    1.207266]  show_stack+0x24/0x30
[    1.207692]  dump_stack_lvl+0x68/0x84
[    1.208162]  dump_stack+0x1c/0x38
[    1.208587]  __schedule_bug+0x68/0x80
[    1.209056]  __schedule+0x6ec/0x7c0
[    1.209502]  schedule+0x7c/0x110
[    1.209915]  schedule_hrtimeout_range_clock+0xc4/0x1f0
[    1.210569]  schedule_hrtimeout_range+0x20/0x30
[    1.211148]  usleep_range_state+0x84/0xc0
[    1.211661]  msdc_reset_hw+0xc8/0x1b0
[    1.212134]  msdc_cmd_done.isra.0+0x4ac/0x5f0
[    1.212693]  msdc_irq+0x104/0x2d4
[    1.213121]  __handle_irq_event_percpu+0x68/0x280
[    1.213725]  handle_irq_event+0x70/0x15c
[    1.214230]  handle_fasteoi_irq+0xb0/0x1a4
[    1.214755]  handle_domain_irq+0x6c/0x9c
[    1.215260]  gic_handle_irq+0xc4/0x180
[    1.215741]  call_on_irq_stack+0x2c/0x54
[    1.216245]  do_interrupt_handler+0x5c/0x70
[    1.216782]  el1_interrupt+0x30/0x80
[    1.217242]  el1h_64_irq_handler+0x1c/0x2c
[    1.217769]  el1h_64_irq+0x78/0x7c
[    1.218206]  cpuidle_enter_state+0xc8/0x600
[    1.218744]  cpuidle_enter+0x44/0x5c
[    1.219205]  do_idle+0x224/0x2d0
[    1.219624]  cpu_startup_entry+0x30/0x80
[    1.220129]  rest_init+0x108/0x134
[    1.220568]  arch_call_rest_init+0x1c/0x28
[    1.221094]  start_kernel+0x6c0/0x700
[    1.221564]  __primary_switched+0xc0/0xc8

Fixes: ffaea6ebfe ("mmc: mtk-sd: Use readl_poll_timeout instead of open-coded polling")
Signed-off-by: Pablo Sun <pablo.sun@mediatek.com>
Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioachino.delregno@collabora.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20230922095348.22182-1-pablo.sun@mediatek.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
2023-09-26 16:47:44 +02:00
..
alcor.c mmc: alcor: Convert to platform remove callback returning void 2023-08-15 12:45:06 +02:00
atmel-mci.c mmc: atmel-mci: Move card detect gpio polarity quirk to gpiolib 2023-08-25 13:40:21 +02:00
au1xmmc.c mmc: au1xmmc: Convert to platform remove callback returning void 2023-08-15 12:45:05 +02:00
bcm2835.c mmc: bcm2835: Convert to platform remove callback returning void 2023-08-15 12:45:03 +02:00
cavium-octeon.c mmc: cavium-octeon: Convert to platform remove callback returning void 2023-08-15 12:45:05 +02:00
cavium-thunderx.c mmc: Explicitly include correct DT includes 2023-08-09 13:21:48 +02:00
cavium.c
cavium.h
cb710-mmc.c mmc: cb710: Convert to platform remove callback returning void 2023-08-15 12:45:04 +02:00
cb710-mmc.h
cqhci-core.c mmc: cqhci: Capture eMMC and SD card errors 2022-07-12 12:25:35 +02:00
cqhci-crypto.c
cqhci-crypto.h
cqhci.h mmc: mtk-sd: reduce CIT for better performance 2023-06-12 15:20:08 +02:00
davinci_mmc.c mmc: davinci_mmc: Convert to platform remove callback returning void 2023-08-15 12:45:04 +02:00
dw_mmc-bluefield.c mmc: dw_mmc: Make dw_mci_pltfm_remove() return void 2023-06-12 15:16:18 +02:00
dw_mmc-exynos.c mmc: dw_mmc: exynos: Convert to platform remove callback returning void 2023-08-15 12:45:04 +02:00
dw_mmc-exynos.h
dw_mmc-hi3798cv200.c mmc: dw_mmc: hi3798cv200: Convert to platform remove callback returning void 2023-08-15 12:45:04 +02:00
dw_mmc-k3.c mmc: dw_mmc: Make dw_mci_pltfm_remove() return void 2023-06-12 15:16:18 +02:00
dw_mmc-pci.c
dw_mmc-pltfm.c mmc: dw_mmc: Make dw_mci_pltfm_remove() return void 2023-06-12 15:16:18 +02:00
dw_mmc-pltfm.h mmc: dw_mmc: Make dw_mci_pltfm_remove() return void 2023-06-12 15:16:18 +02:00
dw_mmc-rockchip.c mmc: dw_mmc: rockchip: Convert to platform remove callback returning void 2023-08-15 12:45:06 +02:00
dw_mmc-starfive.c mmc: dw_mmc: Make dw_mci_pltfm_remove() return void 2023-06-12 15:16:18 +02:00
dw_mmc.c MMC core: 2022-12-13 13:41:26 -08:00
dw_mmc.h mmc: dw_mmc: Support setting f_min from host drivers 2022-03-07 12:56:38 +01:00
jz4740_mmc.c mmc: jz4740: Convert to platform remove callback returning void 2023-08-15 12:45:03 +02:00
Kconfig mmc: au1xmmc: force non-modular build and remove symbol_get usage 2023-08-02 11:17:35 -07:00
litex_mmc.c mmc: litex_mmc: Convert to platform remove callback returning void 2023-08-15 12:45:03 +02:00
Makefile MMC core: 2023-02-27 09:47:26 -08:00
meson-gx-mmc.c mmc: meson-gx: Convert to platform remove callback returning void 2023-08-15 12:45:04 +02:00
meson-mx-sdhc-clkc.c mmc: meson-mx-sdhc: Drop unused MESON_SDHC_NUM_BUILTIN_CLKS macro 2021-12-20 11:19:01 +01:00
meson-mx-sdhc-mmc.c mmc: meson-mx-sdhc: Convert to platform remove callback returning void 2023-08-15 12:45:05 +02:00
meson-mx-sdhc.h
meson-mx-sdio.c mmc: meson-mx-sdio: Convert to platform remove callback returning void 2023-08-15 12:45:05 +02:00
mmc_hsq.c mmc: mmc-hsq: Use fifo to dispatch mmc_request 2022-12-07 13:29:14 +01:00
mmc_hsq.h mmc: mmc-hsq: Use fifo to dispatch mmc_request 2022-12-07 13:29:14 +01:00
mmc_spi.c mmc: mmc_spi: fix error handling in mmc_spi_probe() 2023-02-14 00:09:17 +01:00
mmci_qcom_dml.c
mmci_stm32_sdmmc.c mmc: mmci: Add support for SW busy-end timeouts 2023-06-22 11:06:37 +02:00
mmci.c mmc: mmci: Improve ux500 debug prints 2023-08-09 13:21:47 +02:00
mmci.h mmc: mmci: Add support for SW busy-end timeouts 2023-06-22 11:06:37 +02:00
moxart-mmc.c mmc: moxart: Convert to platform remove callback returning void 2023-08-15 12:45:05 +02:00
mtk-sd.c mmc: mtk-sd: Use readl_poll_timeout_atomic in msdc_reset_hw 2023-09-26 16:47:44 +02:00
mvsdio.c mmc: mvsdio: Convert to platform remove callback returning void 2023-08-15 12:48:20 +02:00
mvsdio.h
mxcmmc.c mmc: mxcmmc: Convert to platform remove callback returning void 2023-08-15 12:48:20 +02:00
mxs-mmc.c mmc: mxs-mmc: Convert to platform remove callback returning void 2023-08-15 12:45:05 +02:00
of_mmc_spi.c mmc: mmc_spi: parse speed mode options 2022-04-26 14:05:19 +02:00
omap_hsmmc.c mmc: omap_hsmmc: Convert to platform remove callback returning void 2023-08-15 12:45:04 +02:00
omap.c mmc: omap: Convert to platform remove callback returning void 2023-08-15 12:45:04 +02:00
owl-mmc.c mmc: owl: Convert to platform remove callback returning void 2023-08-15 12:45:06 +02:00
pxamci.c mmc: pxamci: Convert to platform remove callback returning void 2023-08-15 12:45:05 +02:00
pxamci.h
renesas_sdhi_core.c mmc: renesas_sdhi: Convert to platform remove callback returning void 2023-08-15 12:48:20 +02:00
renesas_sdhi_internal_dmac.c mmc: renesas_sdhi: Convert to platform remove callback returning void 2023-08-15 12:48:20 +02:00
renesas_sdhi_sys_dmac.c mmc: renesas_sdhi: Convert to platform remove callback returning void 2023-08-15 12:48:20 +02:00
renesas_sdhi.h mmc: renesas_sdhi: Convert to platform remove callback returning void 2023-08-15 12:48:20 +02:00
rtsx_pci_sdmmc.c mmc: rtsx_pci: Convert to platform remove callback returning void 2023-08-15 12:45:04 +02:00
rtsx_usb_sdmmc.c mmc: rtsx_usb_sdmmc: Convert to platform remove callback returning void 2023-08-15 12:45:05 +02:00
sdhci_am654.c mmc: sdhci_am654: Convert to platform remove callback returning void 2023-08-15 12:48:21 +02:00
sdhci_f_sdh30.c mmc: sdhci_f_sdh30: Use sdhci_pltfm_remove() 2023-08-15 13:35:27 +02:00
sdhci_f_sdh30.h mmc: f-sdh30: Add support for non-removable media 2022-12-07 13:22:36 +01:00
sdhci-acpi.c mmc: sdhci-acpi: Convert to platform remove callback returning void 2023-08-15 12:45:05 +02:00
sdhci-bcm-kona.c mmc: sdhci-bcm-kona: Use sdhci_pltfm_remove() 2023-08-15 13:35:11 +02:00
sdhci-brcmstb.c mmc: sdhci-brcmstb: Use sdhci_pltfm_remove() 2023-08-15 13:35:16 +02:00
sdhci-cadence.c mmc: sdhci-cadence: Use sdhci_pltfm_remove() 2023-08-15 13:35:20 +02:00
sdhci-cqhci.h mmc: cqhci: Provide helper for resetting both SDHCI and CQHCI 2022-11-07 13:28:47 +01:00
sdhci-dove.c mmc: sdhci-dove: Use sdhci_pltfm_remove() 2023-08-15 13:35:24 +02:00
sdhci-esdhc-imx.c mmc: sdhci-esdhc-imx: improve ESDHC_FLAG_ERR010450 2023-08-18 11:14:13 +02:00
sdhci-esdhc-mcf.c mmc: sdhci-esdhc-mcf: Convert to platform remove callback returning void 2023-08-15 12:45:06 +02:00
sdhci-esdhc.h
sdhci-iproc.c mmc: sdhci-iproc: Use sdhci_pltfm_remove() 2023-08-15 13:35:32 +02:00
sdhci-milbeaut.c mmc: sdhci: milbeaut: Convert to platform remove callback returning void 2023-08-15 12:45:04 +02:00
sdhci-msm.c mmc: sdhci-msm: Convert to platform remove callback returning void 2023-08-15 12:45:06 +02:00
sdhci-of-arasan.c mmc: sdhci-of-arasan: Use sdhci_pltfm_remove() 2023-08-15 13:35:35 +02:00
sdhci-of-aspeed-test.c mmc: sdhci-of-aspeed: test: Use kunit_test_suite() macro 2022-07-11 17:13:32 -06:00
sdhci-of-aspeed.c mmc: sdhci-of-aspeed: Convert to platform remove 2023-08-15 12:45:05 +02:00
sdhci-of-at91.c mmc: sdhci-of-at91: Use sdhci_pltfm_remove() 2023-08-15 13:35:39 +02:00
sdhci-of-dwcmshc.c mmc: sdhci-of-dwcmshc: Add runtime PM operations 2023-08-24 12:57:20 +02:00
sdhci-of-esdhc.c mmc: sdhci-of-esdhc: Use sdhci_pltfm_remove() 2023-08-15 13:35:42 +02:00
sdhci-of-hlwd.c mmc: sdhci-pltfm: Rename sdhci_pltfm_register() 2023-08-15 13:36:02 +02:00
sdhci-of-sparx5.c mmc: sdhci-of-sparx5: Use sdhci_pltfm_remove() 2023-08-15 13:35:48 +02:00
sdhci-omap.c mmc: sdhci-omap: Convert to platform remove callback returning void 2023-08-15 12:45:05 +02:00
sdhci-pci-arasan.c
sdhci-pci-core.c mmc: sdhci-pci-o2micro: add Bayhub new chip GG8 support for UHS-I 2023-08-11 12:30:54 +02:00
sdhci-pci-dwc-mshc.c
sdhci-pci-gli.c mmc: sdhci-pci-gli: fix LPM negotiation so x86/S0ix SoCs can suspend 2023-09-26 15:08:05 +02:00
sdhci-pci-o2micro.c mmc: sdhci-pci-o2micro: add Bayhub new chip GG8 support for express card 2023-08-11 12:30:54 +02:00
sdhci-pci.h mmc: sdhci-pci-o2micro: add Bayhub new chip GG8 support for UHS-I 2023-08-11 12:30:54 +02:00
sdhci-pic32.c mmc: sdhci-pic32: Convert to platform remove callback returning void 2023-08-15 12:45:04 +02:00
sdhci-pltfm.c mmc: sdhci-pltfm: Rename sdhci_pltfm_register() 2023-08-15 13:36:02 +02:00
sdhci-pltfm.h mmc: sdhci-pltfm: Rename sdhci_pltfm_register() 2023-08-15 13:36:02 +02:00
sdhci-pxav2.c mmc: sdhci-pxav2: Use sdhci_pltfm_remove() 2023-08-15 13:35:52 +02:00
sdhci-pxav3.c mmc: sdhci-pxav3: Convert to platform remove callback returning void 2023-08-15 12:45:04 +02:00
sdhci-s3c.c mmc: sdhci-s3c: Convert to platform remove callback returning void 2023-08-15 12:45:05 +02:00
sdhci-spear.c mmc: sdhci-spear: Convert to platform remove callback returning void 2023-08-15 12:48:20 +02:00
sdhci-sprd.c mmc: sdhci-sprd: Fix error code in sdhci_sprd_tuning() 2023-09-26 15:08:05 +02:00
sdhci-st.c mmc: sdhci-st: Use sdhci_pltfm_remove() 2023-08-15 13:35:56 +02:00
sdhci-tegra.c mmc: sdhci-tegra: Convert to platform remove callback returning void 2023-08-15 12:45:05 +02:00
sdhci-xenon-phy.c
sdhci-xenon.c mmc: xenon: Convert to platform remove callback returning void 2023-08-15 12:45:05 +02:00
sdhci-xenon.h
sdhci.c mmc: sdhci: fix DMA configure compatibility issue when 64bit DMA mode is used. 2023-06-12 15:19:47 +02:00
sdhci.h mmc: sdhci: Add VDD2 definition for power control register 2023-06-12 15:20:08 +02:00
sdricoh_cs.c mmc: sdricoh_cs: remove unused sdricoh_readw function 2023-03-24 16:48:01 +01:00
sh_mmcif.c mmc: sh_mmcif: Convert to platform remove callback returning void 2023-08-15 12:45:04 +02:00
sunplus-mmc.c mmc: sunplus-mmc: Convert to platform remove callback returning void 2023-08-15 12:48:20 +02:00
sunxi-mmc.c mmc: sunxi: Convert to platform remove callback returning void 2023-08-15 12:45:03 +02:00
tifm_sd.c mmc: tifm_sd: Replace kmap_atomic() with kmap_local_page() 2022-12-07 13:22:32 +01:00
tmio_mmc_core.c mmc: Use of_property_read_bool() for boolean properties 2023-03-23 11:30:20 +01:00
tmio_mmc.h mmc: tmio: remove tmio_mmc_k(un)map_atomic helpers 2022-12-07 13:22:36 +01:00
toshsd.c mmc: toshsd: fix return value check of mmc_add_host() 2022-12-07 13:22:34 +01:00
toshsd.h
uniphier-sd.c mmc: uniphier-sd: Convert to platform remove callback returning void 2023-08-15 12:48:21 +02:00
usdhi6rol0.c mmc: usdhi60rol0: Convert to platform remove callback returning void 2023-08-15 12:45:06 +02:00
ushc.c
via-sdmmc.c mmc: remove unnecessary set_drvdata() function 2023-08-09 15:44:17 +02:00
vub300.c mmc: vub300: fix invalid response handling 2023-05-24 14:30:51 +02:00
wbsd.c mmc: wbsd: Convert to platform remove callback returning void 2023-08-15 12:45:06 +02:00
wbsd.h
wmt-sdmmc.c mmc: wmt-sdmmc: Convert to platform remove callback returning void 2023-08-15 12:45:06 +02:00