linux/drivers/mmc/host
Chunyan Zhang 18e762e3b7 mmc: sdhci: add support for using external DMA devices
Some standard SD host controllers can support both external dma
controllers as well as ADMA/SDMA in which the SD host controller
acts as DMA master. TI's omap controller is the case as an example.

Currently the generic SDHCI code supports ADMA/SDMA integrated in
the host controller but does not have any support for external DMA
controllers implemented using dmaengine, meaning that custom code is
needed for any systems that use an external DMA controller with SDHCI.

Fixes by Faiz Abbas <faiz_abbas@ti.com>:
1. Map scatterlists before dmaengine_prep_slave_sg()
2. Use dma_async() functions inside of the send_command() path and call
terminate_sync() in non-atomic context in case of an error.

Signed-off-by: Chunyan Zhang <zhang.chunyan@linaro.org>
Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Link: https://lore.kernel.org/r/20200116105154.7685-4-faiz_abbas@ti.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
2020-01-20 10:36:11 +01:00
..
Kconfig mmc: sdhci: add support for using external DMA devices 2020-01-20 10:36:11 +01:00
Makefile mmc: Add Actions Semi Owl SoCs SD/MMC driver 2019-11-13 16:10:16 +01: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: Use devm_platform_ioremap_resource() 2019-11-13 16:10:16 +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 mmc: cavium: Add scatter-gather DMA support 2017-04-24 21:42:10 +02:00
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: Commit descriptors before setting the doorbell 2019-10-21 13:38:23 +02:00
cqhci.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 284 2019-06-05 17:36:37 +02: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 License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
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
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: convert to devm_platform_ioremap_resource 2019-12-18 14:46:06 +01:00
mmc_spi.c mmc: core: Remove mmc_gpiod_request_*(invert_gpio) 2019-12-18 13:37:07 +01:00
mmci.c mmc: mmci: Use dma_request_chan() instead dma_request_slave_channel() 2019-12-19 08:19:42 +01:00
mmci.h mmc: mmci: Support any block sizes for ux500v2 and qcom variant 2019-12-18 14:55:11 +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: stm32: make sdmmc_idma_validate_data static 2019-11-13 16:10:16 +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: mtk-sd: convert to devm_platform_ioremap_resource 2019-12-18 14:55:11 +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.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
omap_hsmmc.c mmc: omap_hsmmc: Convert to pinctrl_select_default_state() 2019-12-16 13:00:41 +01: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 License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
renesas_sdhi.h mmc: renesas_sdhi: use recent tap values for HS400 2019-12-16 12:29:36 +01:00
renesas_sdhi_core.c mmc: renesas_sdhi: use recent tap values for HS400 2019-12-16 12:29:36 +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
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: 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-acpi.c mmc: core: Remove mmc_gpiod_request_*(invert_gpio) 2019-12-18 13:37:07 +01: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: override spec version 2019-09-11 15:58:39 +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: core: Remove mmc_gpiod_request_*(invert_gpio) 2019-12-18 13:37:07 +01:00
sdhci-esdhc.h mmc: sdhci-of-esdhc: fix up erratum A-008171 workaround 2019-11-13 16:10:16 +01:00
sdhci-iproc.c mmc: sdhci-iproc: fix spurious interrupts on Multiblock reads with bcm2711 2019-10-09 11:05:50 +02:00
sdhci-milbeaut.c mmc: sdhci-milbeaut: convert to devm_platform_ioremap_resource 2019-12-18 14:46:06 +01:00
sdhci-msm.c mmc: sdhci-msm: convert to devm_platform_ioremap_resource 2019-12-18 14:54:53 +01:00
sdhci-of-arasan.c mmc: sdhci-of-arasan: Add support for ZynqMP Platform Tap Delays Setup 2019-11-20 13:55:55 +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: fix memleak on clk_get failure 2020-01-16 12:37:39 +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 clock setting for different controller versions 2020-01-16 11:50:18 +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: Fix Tuning procedure for temperatures < -20C 2019-10-21 13:37:49 +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 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: host: sdhci-pci: Add Genesys Logic GL975x support 2019-09-27 20:48:20 +02:00
sdhci-pci-o2micro.c Merge branch 'fixes' into next 2019-09-11 15:59:01 +02:00
sdhci-pci.h mmc: sdhci-pci: Add support for Intel JSL 2019-11-13 16:10:16 +01: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 mmc: Remove dev_err() usage after platform_get_irq() 2019-09-11 15:58:39 +02: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-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: 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 mmc: tegra: Implement ->set_dma_mask() 2019-09-27 20:30:13 +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: add support for using external DMA devices 2020-01-20 10:36:11 +01:00
sdhci.h mmc: sdhci: add support for using external DMA devices 2020-01-20 10:36:11 +01:00
sdhci_am654.c Merge branch 'fixes' into next 2020-01-16 12:37:26 +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
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.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: Avoid boilerplate code in ->runtime_suspend() 2019-11-13 11:41:50 +01:00
tmio_mmc_core.c mmc: tmio: convert to devm_platform_ioremap_resource 2019-12-18 14:46:06 +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 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
vub300.c mmc: vub300: Drop redundant host ops ->init_card() 2019-11-13 16:10:16 +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