linux/drivers/mmc/host
Stephan Gerhold e6f9e590b7 mmc: sdhci-msm: Disable broken 64-bit DMA on MSM8916
While SDHCI claims to support 64-bit DMA on MSM8916 it does not seem to
be properly functional. It is not immediately obvious because SDHCI is
usually used with IOMMU bypassed on this SoC, and all physical memory
has 32-bit addresses. But when trying to enable the IOMMU it quickly
fails with an error such as the following:

  arm-smmu 1e00000.iommu: Unhandled context fault:
    fsr=0x402, iova=0xfffff200, fsynr=0xe0000, cbfrsynra=0x140, cb=3
  mmc1: ADMA error: 0x02000000
  mmc1: sdhci: ============ SDHCI REGISTER DUMP ===========
  mmc1: sdhci: Sys addr:  0x00000000 | Version:  0x00002e02
  mmc1: sdhci: Blk size:  0x00000008 | Blk cnt:  0x00000000
  mmc1: sdhci: Argument:  0x00000000 | Trn mode: 0x00000013
  mmc1: sdhci: Present:   0x03f80206 | Host ctl: 0x00000019
  mmc1: sdhci: Power:     0x0000000f | Blk gap:  0x00000000
  mmc1: sdhci: Wake-up:   0x00000000 | Clock:    0x00000007
  mmc1: sdhci: Timeout:   0x0000000a | Int stat: 0x00000001
  mmc1: sdhci: Int enab:  0x03ff900b | Sig enab: 0x03ff100b
  mmc1: sdhci: ACmd stat: 0x00000000 | Slot int: 0x00000000
  mmc1: sdhci: Caps:      0x322dc8b2 | Caps_1:   0x00008007
  mmc1: sdhci: Cmd:       0x0000333a | Max curr: 0x00000000
  mmc1: sdhci: Resp[0]:   0x00000920 | Resp[1]:  0x5b590000
  mmc1: sdhci: Resp[2]:   0xe6487f80 | Resp[3]:  0x0a404094
  mmc1: sdhci: Host ctl2: 0x00000008
  mmc1: sdhci: ADMA Err:  0x00000001 | ADMA Ptr: 0x0000000ffffff224
  mmc1: sdhci_msm: ----------- VENDOR REGISTER DUMP -----------
  mmc1: sdhci_msm: DLL sts: 0x00000000 | DLL cfg:  0x60006400 | DLL cfg2: 0x00000000
  mmc1: sdhci_msm: DLL cfg3: 0x00000000 | DLL usr ctl:  0x00000000 | DDR cfg: 0x00000000
  mmc1: sdhci_msm: Vndr func: 0x00018a9c | Vndr func2 : 0xf88018a8 Vndr func3: 0x00000000
  mmc1: sdhci: ============================================
  mmc1: sdhci: fffffffff200: DMA 0x0000ffffffffe100, LEN 0x0008, Attr=0x21
  mmc1: sdhci: fffffffff20c: DMA 0x0000000000000000, LEN 0x0000, Attr=0x03

Looking closely it's obvious that only the 32-bit part of the address
(0xfffff200) arrives at the SMMU, the higher 16-bit (0xffff...) get
lost somewhere. This might not be a limitation of the SDHCI itself but
perhaps the bus/interconnect it is connected to, or even the connection
to the SMMU.

Work around this by setting SDHCI_QUIRK2_BROKEN_64_BIT_DMA to avoid
using 64-bit addresses.

Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20230518-msm8916-64bit-v1-1-5694b0f35211@gerhold.net
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
2023-06-12 16:06:23 +02:00
..
alcor.c mmc: alcor: fix return value check of mmc_add_host() 2022-12-07 13:22:34 +01:00
atmel-mci.c mmc: atmel-mci: fix race between stop command and start of next command 2023-01-27 11:35:17 +01:00
au1xmmc.c mmc: au1xmmc: Replace kmap_atomic() with kmap_local_page() 2022-12-07 13:22:33 +01:00
bcm2835.c mmc: bcm2835: Replace kmap_atomic() with kmap_local_page() 2022-12-07 13:22:32 +01:00
cavium-octeon.c mmc: cavium-octeon: Add of_node_put() when breaking out of loop 2022-07-21 18:02:55 +02:00
cavium-thunderx.c mmc: cavium-thunderx: Add of_node_put() when breaking out of loop 2022-07-21 18:03:08 +02:00
cavium.c mmc: cavium: Use '"%s...", __func__' to print function name 2021-03-30 11:42:06 +02:00
cavium.h
cb710-mmc.c mmc: cb710: Use new tasklet API 2021-02-15 10:43:23 +01: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 blk-crypto: rename blk_keyslot_manager to blk_crypto_profile 2021-10-21 10:49:32 -06:00
cqhci-crypto.h mmc: core: Store pointer to bio_crypt_ctx in mmc_request 2021-08-24 10:15:32 +02:00
cqhci.h mmc: cqhci: add cqhci_host_ops::program_key 2021-02-01 12:02:33 +01:00
davinci_mmc.c mmc: davinci_mmc: Handle error for clk_enable 2022-03-15 10:29:53 +01:00
dw_mmc-bluefield.c
dw_mmc-exynos.c mmc: dw_mmc: exynos: Obviously always return success in remove callback 2022-07-12 12:25:37 +02:00
dw_mmc-exynos.h
dw_mmc-hi3798cv200.c mmc: dw_mmc: hi3789cv200: Obviously always return success in remove callback 2022-07-12 12:25:37 +02:00
dw_mmc-k3.c mmc: dw_mmc-k3: use the correct HiSilicon copyright 2021-03-31 14:47:53 +02:00
dw_mmc-pci.c
dw_mmc-pltfm.c mmc: dw_mmc-pltfm: Use devm_platform_get_and_ioremap_resource() 2023-03-23 11:54:13 +01:00
dw_mmc-pltfm.h
dw_mmc-rockchip.c mmc: dw_mmc: rockchip: Obviously always return success in remove callback 2022-07-12 12:25:38 +02:00
dw_mmc-starfive.c mmc: dw_mmc-starfive: Fix initialization of prev_err 2023-03-09 15:33:51 +01: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: Use devm_platform_get_and_ioremap_resource() 2023-03-23 11:54:35 +01:00
Kconfig mmc: sdhci-cadence: Add AMD Pensando Elba SoC support 2023-04-17 11:45:43 +02:00
litex_mmc.c mmc: litex_mmc: ensure host->irq == 0 if polling 2022-12-07 13:22:35 +01:00
Makefile MMC core: 2023-02-27 09:47:26 -08:00
meson-gx-mmc.c mmc: meson-gx: use new helpers mmc_regulator_enable/disable_vqmmc 2023-03-23 11:38:34 +01: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: Fix error check for dma_map_sg 2022-09-14 11:53:47 +02:00
meson-mx-sdhc.h
meson-mx-sdio.c mmc: meson-mx-sdio: add IRQ check 2021-12-21 13:22:34 +01: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: stm32: use a buffer for unaligned DMA requests 2022-04-26 14:05:18 +02:00
mmci.c mmc: Use of_property_read_bool() for boolean properties 2023-03-23 11:30:20 +01:00
mmci.h
moxart-mmc.c mmc: moxart: set maximum request/block/segment sizes 2023-02-15 13:24:03 +01:00
mtk-sd.c mmc: Avoid open coding by using mmc_op_tuning() 2022-12-07 13:29:13 +01:00
mvsdio.c
mvsdio.h
mxcmmc.c mmc: mxcmmc: fix return value check of mmc_add_host() 2022-12-07 13:22:34 +01:00
mxs-mmc.c mmc: mxs-mmc: disable regulator on error and in the remove function 2021-10-19 13:02:58 +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: Use of_property_read_bool() for boolean properties 2023-03-23 11:30:20 +01:00
omap.c mmc: omap: Use devm_platform_get_and_ioremap_resource() 2023-03-23 11:55:13 +01:00
owl-mmc.c mmc: owl-mmc: Use devm_platform_get_and_ioremap_resource() 2023-03-23 11:56:06 +01:00
pxamci.c mmc: pxamci: fix return value check of mmc_add_host() 2022-12-07 13:22:34 +01:00
pxamci.h
renesas_sdhi_core.c mmc: renesas_sdhi: use new convenience macro from MMC core 2022-12-07 13:22:37 +01:00
renesas_sdhi_internal_dmac.c mmc: renesas_sdhi: remove R-Car H3 ES1.* handling 2023-03-23 11:30:20 +01:00
renesas_sdhi_sys_dmac.c mmc: tmio: remove 'alignment_shift' from platform data 2022-12-07 13:22:37 +01:00
renesas_sdhi.h mmc: renesas_sdhi: use plain numbers for end_flags 2022-12-07 13:28:22 +01:00
rtsx_pci_sdmmc.c mmc: rtsx_pci: fix return value check of mmc_add_host() 2022-12-07 13:22:34 +01:00
rtsx_usb_sdmmc.c mmc: rtsx_usb_sdmmc: fix return value check of mmc_add_host() 2022-12-07 13:22:34 +01:00
sdhci_am654.c mmc: sdhci_am654: Add support for PM suspend/resume 2023-04-04 13:50:08 +02:00
sdhci_f_sdh30.c mmc: f-sdh30: Add quirks for broken timeout clock capability 2022-12-07 13:22:36 +01: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: Remove duplicate words in comments 2022-12-07 13:22:34 +01:00
sdhci-bcm-kona.c mmc: Remove duplicate words in comments 2022-12-07 13:22:34 +01:00
sdhci-brcmstb.c mmc: sdhci-brcmstb: Use devm_platform_get_and_ioremap_resource() 2023-02-15 13:24:03 +01:00
sdhci-cadence.c mmc: sdhci-cadence: Fix an error handling path in sdhci_cdns_probe() 2023-05-09 11:16:15 +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
sdhci-esdhc-imx.c mmc: sdhci-esdhc-imx: make "no-mmc-hs400" works 2023-05-09 11:55:02 +02:00
sdhci-esdhc-mcf.c mmc: sdhci: replace mmc->parent with mmc_dev() for consistency 2021-03-30 11:42:07 +02:00
sdhci-esdhc.h
sdhci-iproc.c mmc: sdhci-iproc: Replace SDHCI_QUIRK_MISSING_CAPS 2023-01-23 15:51:38 +01:00
sdhci-milbeaut.c
sdhci-msm.c mmc: sdhci-msm: Disable broken 64-bit DMA on MSM8916 2023-06-12 16:06:23 +02:00
sdhci-of-arasan.c mmc: sdhci-of-arasan: Skip setting clock delay for 400KHz 2023-04-17 09:46:53 +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: Use devm_platform_get_and_ioremap_resource() 2023-03-23 11:56:41 +01:00
sdhci-of-at91.c mmc: sdhci-of-at91: fix set_uhs_signaling rewriting of MC1R 2022-07-12 12:42:37 +02:00
sdhci-of-dwcmshc.c mmc: sdhci-of-dwcmshc: properly determine max clock on Rockchip 2023-03-23 11:30:20 +01:00
sdhci-of-esdhc.c mmc: sdhci-of-esdhc: fix quirk to ignore command inhibit for data 2023-03-24 16:48:01 +01:00
sdhci-of-hlwd.c
sdhci-of-sparx5.c
sdhci-omap.c mmc: Remove duplicate words in comments 2022-12-07 13:22:34 +01:00
sdhci-pci-arasan.c
sdhci-pci-core.c mmc: sdhci-pci: Replace SDHCI_QUIRK_MISSING_CAPS for Ricoh controller 2023-01-23 15:51:38 +01:00
sdhci-pci-dwc-mshc.c
sdhci-pci-gli.c mmc: sdhci-*: Convert drivers to new sdhci_and_cqhci_reset() 2022-12-07 13:22:33 +01:00
sdhci-pci-o2micro.c mmc: sdhci-pci-o2micro: Fix SDR50 mode timing issue 2023-03-23 11:30:20 +01:00
sdhci-pci.h mmc: sdhci-pci: Add PCI ID for Intel ADL 2021-12-14 21:35:25 +01:00
sdhci-pic32.c mmc: sdhci-pic32: Make pic32_sdhci_probe_platform() void 2020-11-16 11:59:30 +01:00
sdhci-pltfm.c mmc: sdhci: drop useless sdhci_get_compatibility() !OF stub 2023-03-23 11:48:57 +01:00
sdhci-pltfm.h mmc: sdhci-pltfm: Fix linking err for sdhci-brcmstb 2021-02-01 11:13:09 +01:00
sdhci-pxav2.c mmc: Use of_property_read_bool() for boolean properties 2023-03-23 11:30:20 +01:00
sdhci-pxav3.c mmc: sdhci-pxav3: Replace SDHCI_QUIRK_MISSING_CAPS 2023-01-23 15:51:38 +01:00
sdhci-s3c.c mmc: Use of_property_read_bool() for boolean properties 2023-03-23 11:30:20 +01:00
sdhci-spear.c
sdhci-sprd.c mmc: sdhci-sprd: Replace SDHCI_QUIRK_MISSING_CAPS 2023-01-23 15:51:38 +01:00
sdhci-st.c mmc: sdhci-st: Obviously always return success in remove callback 2022-07-12 12:25:38 +02:00
sdhci-tegra.c mmc: sdhci-tegra: Issue CMD and DAT resets together 2022-12-07 13:30:25 +01:00
sdhci-xenon-phy.c mmc: sdhci-xenon: switch to device_* API 2020-12-11 10:08:37 +01:00
sdhci-xenon.c Revert "mmc: sdhci-xenon: fix annoying 1.8V regulator warning" 2022-04-04 12:17:46 +02:00
sdhci-xenon.h mmc: sdhci-xenon: switch to device_* API 2020-12-11 10:08:37 +01:00
sdhci.c mmc: sdhci: Remove SDHCI_QUIRK_MISSING_CAPS 2023-01-23 15:51:38 +01:00
sdhci.h mmc: sdhci: Remove SDHCI_QUIRK_MISSING_CAPS 2023-01-23 15:51:38 +01: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: move platform_data header to proper location 2022-04-26 14:05:21 +02:00
sunplus-mmc.c mmc: Remove unneeded semicolon 2022-12-07 13:29:13 +01:00
sunxi-mmc.c mmc: sunxi-mmc: Fix clock refcount imbalance during unbind 2023-01-02 15:57:36 +01: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: Add control to switch UHS speed 2023-01-27 11:55:50 +01:00
usdhi6rol0.c mmc: usdhi6rol0: Use devm_platform_get_and_ioremap_resource() 2023-03-23 11:57:04 +01:00
ushc.c
via-sdmmc.c mmc: via-sdmmc: fix return value check of mmc_add_host() 2022-12-07 13:22:35 +01:00
vub300.c mmc: vub300: fix invalid response handling 2023-05-24 14:30:51 +02:00
wbsd.c mmc: wbsd: fix return value check of mmc_add_host() 2022-12-07 13:22:35 +01:00
wbsd.h
wmt-sdmmc.c mmc: Use of_property_read_bool() for boolean properties 2023-03-23 11:30:20 +01:00