linux/drivers/mmc/host
Linus Walleij c3dccb74be mmc: core: Delete bounce buffer Kconfig option
This option is activated by all multiplatform configs and what
not so we almost always have it turned on, and the memory it
saves is negligible, even more so moving forward. The actual
bounce buffer only gets allocated only when used, the only
thing the ifdefs are saving is a little bit of code.

It is highly improper to have this as a Kconfig option that
get turned on by Kconfig, make this a pure runtime-thing and
let the host decide whether we use bounce buffers. We add a
new property "disable_bounce" to the host struct.

Notice that mmc_queue_calc_bouncesz() already disables the
bounce buffers if host->max_segs != 1, so any arch that has a
maximum number of segments higher than 1 will have bounce
buffers disabled.

The option CONFIG_MMC_BLOCK_BOUNCE is default y so the
majority of platforms in the kernel already have it on, and
it then gets turned off at runtime since most of these have
a host->max_segs > 1. The few exceptions that have
host->max_segs == 1 and still turn off the bounce buffering
are those that disable it in their defconfig.

Those are the following:

arch/arm/configs/colibri_pxa300_defconfig
arch/arm/configs/zeus_defconfig
- Uses MMC_PXA, drivers/mmc/host/pxamci.c
- Sets host->max_segs = NR_SG, which is 1
- This needs its bounce buffer deactivated so we set
  host->disable_bounce to true in the host driver

arch/arm/configs/davinci_all_defconfig
- Uses MMC_DAVINCI, drivers/mmc/host/davinci_mmc.c
- This driver sets host->max_segs to MAX_NR_SG, which is 16
- That means this driver anyways disabled bounce buffers
- No special action needed for this platform

arch/arm/configs/lpc32xx_defconfig
arch/arm/configs/nhk8815_defconfig
arch/arm/configs/u300_defconfig
- Uses MMC_ARMMMCI, drivers/mmc/host/mmci.[c|h]
- This driver by default sets host->max_segs to NR_SG,
  which is 128, unless a DMA engine is used, and in that case
  the number of segments are also > 1
- That means this driver already disables bounce buffers
- No special action needed for these platforms

arch/arm/configs/sama5_defconfig
- Uses MMC_SDHCI, MMC_SDHCI_PLTFM, MMC_SDHCI_OF_AT91, MMC_ATMELMCI
- Uses drivers/mmc/host/sdhci.c
- Normally sets host->max_segs to SDHCI_MAX_SEGS which is 128 and
  thus disables bounce buffers
- Sets host->max_segs to 1 if SDHCI_USE_SDMA is set
- SDHCI_USE_SDMA is only set by SDHCI on PCI adapers
- That means that for this platform bounce buffers are already
  disabled at runtime
- No special action needed for this platform

arch/blackfin/configs/CM-BF533_defconfig
arch/blackfin/configs/CM-BF537E_defconfig
- Uses MMC_SPI (a simple MMC card connected on SPI pins)
- Uses drivers/mmc/host/mmc_spi.c
- Sets host->max_segs to MMC_SPI_BLOCKSATONCE which is 128
- That means this platform already disables bounce buffers at
  runtime
- No special action needed for these platforms

arch/mips/configs/cavium_octeon_defconfig
- Uses MMC_CAVIUM_OCTEON, drivers/mmc/host/cavium.c
- Sets host->max_segs to 16 or 1
- Setting host->disable_bounce to be sure for the 1 case

arch/mips/configs/qi_lb60_defconfig
- Uses MMC_JZ4740, drivers/mmc/host/jz4740_mmc.c
- This sets host->max_segs to 128 so bounce buffers are
  already runtime disabled
- No action needed for this platform

It would be interesting to come up with a list of the platforms
that actually end up using bounce buffers. I have not been
able to infer such a list, but it occurs when
host->max_segs == 1 and the bounce buffering is not explicitly
disabled.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
2017-06-20 10:30:17 +02:00
..
android-goldfish.c mmc: use new core function mmc_get_dma_dir 2017-04-24 21:41:52 +02:00
atmel-mci.c mmc: atmel-mci: Remove AVR32 bits from the driver 2017-06-20 10:30:08 +02:00
au1xmmc.c mmc: host: drop owner assignment from platform_drivers 2014-10-20 16:20:56 +02:00
bcm2835.c mmc: bcm2835: Fix possible NULL ptr dereference in bcm2835_request 2017-04-24 21:41:53 +02:00
bfin_sdh.c mmc: bfin_sdh: remove the MMC_DATA_STREAM flag 2016-02-29 11:02:59 +01:00
cavium-octeon.c mmc: cavium: Fix probing race with regulator 2017-05-22 18:01:46 +02:00
cavium-thunderx.c mmc: cavium: Fix probing race with regulator 2017-05-22 18:01:46 +02:00
cavium.c mmc: core: Delete bounce buffer Kconfig option 2017-06-20 10:30:17 +02:00
cavium.h mmc: cavium: Add scatter-gather DMA support 2017-04-24 21:42:10 +02:00
cb710-mmc.c
cb710-mmc.h mmc: cb710: use to_platform_device() 2016-01-05 18:04:57 +01:00
davinci_mmc.c mmc: use new core function mmc_get_dma_dir 2017-04-24 21:41:52 +02:00
dw_mmc-exynos.c mmc: dw_mmc: Remove the public dw_mmc header file 2017-02-13 13:19:59 +01:00
dw_mmc-exynos.h mmc: dw_mmc: exynos: Support eMMC's HS400 mode 2015-03-23 14:13:28 +01:00
dw_mmc-k3.c mmc: dw_mmc: Remove the public dw_mmc header file 2017-02-13 13:19:59 +01:00
dw_mmc-pci.c mmc: dw_mmc: Remove the public dw_mmc header file 2017-02-13 13:19:59 +01:00
dw_mmc-pltfm.c mmc: dw_mmc: Remove the public dw_mmc header file 2017-02-13 13:19:59 +01:00
dw_mmc-pltfm.h
dw_mmc-rockchip.c mmc: dw_mmc: Remove the public dw_mmc header file 2017-02-13 13:19:59 +01:00
dw_mmc-zx.c mmc: dw_mmc: zx: Initial support for ZX mmc controller 2017-02-13 13:20:03 +01:00
dw_mmc-zx.h mmc: dw_mmc: zx: Initial support for ZX mmc controller 2017-02-13 13:20:03 +01:00
dw_mmc.c Revert "mmc: dw_mmc: Don't allow Runtime PM for SDIO cards" 2017-06-20 10:30:13 +02:00
dw_mmc.h mmc: dw_mmc: Add fifo watermark alignment property 2017-02-13 13:20:02 +01:00
jz4740_mmc.c mmc: use new core function mmc_get_dma_dir 2017-04-24 21:41:52 +02:00
Kconfig mmc: renesas-sdhi: rename sh_mobile_sdhi.c => renesas_sdhi_core.c 2017-06-20 10:30:15 +02:00
Makefile mmc: renesas-sdhi: rename sh_mobile_sdhi.c => renesas_sdhi_core.c 2017-06-20 10:30:15 +02:00
meson-gx-mmc.c mmc: meson-gx: work around broken SDIO with certain WiFi chips 2017-06-12 08:58:16 +02:00
mmc_spi.c mmc: use new core function mmc_get_dma_dir 2017-04-24 21:41:52 +02:00
mmci_qcom_dml.c scripts/spelling.txt: add "intialization" pattern and fix typo instances 2017-02-27 18:43:47 -08:00
mmci_qcom_dml.h mmc: mmci: Add qcom dml support to the driver. 2014-09-09 13:58:46 +02:00
mmci.c mmc: use new core function mmc_get_dma_dir 2017-04-24 21:41:52 +02:00
mmci.h mmc: core/mmci: restore pre/post_req behaviour 2017-02-13 13:20:52 +01:00
moxart-mmc.c mmc: use new core function mmc_get_dma_dir 2017-04-24 21:41:52 +02:00
mtk-sd.c mmc: use new core function mmc_get_dma_dir 2017-04-24 21:41:52 +02:00
mvsdio.c mmc: use new core function mmc_get_dma_dir 2017-04-24 21:41:52 +02:00
mvsdio.h
mxcmmc.c mmc: host: use the defined function to check whether card is removable 2016-07-25 10:34:21 +02:00
mxs-mmc.c mmc: mxs-mmc: Implement CMD23 support 2017-02-13 13:20:27 +01:00
of_mmc_spi.c mmc: of_mmc_spi: fix unused warning 2016-03-17 14:54:40 +01:00
omap_hsmmc.c mmc: host: omap_hsmmc: checking for NULL instead of IS_ERR() 2017-04-24 21:42:18 +02:00
omap.c mmc: omap: Don't use mmc_card_present() when validating for inserted card 2017-02-13 13:20:23 +01:00
pxamci.c mmc: core: Delete bounce buffer Kconfig option 2017-06-20 10:30:17 +02:00
pxamci.h
renesas_sdhi_core.c mmc: renesas-sdhi: make renesas_sdhi_sys_dmac main module file 2017-06-20 10:30:16 +02:00
renesas_sdhi_sys_dmac.c mmc: renesas-sdhi: make renesas_sdhi_sys_dmac main module file 2017-06-20 10:30:16 +02:00
renesas_sdhi.h mmc: renesas-sdhi: make renesas_sdhi_sys_dmac main module file 2017-06-20 10:30:16 +02:00
rtsx_pci_sdmmc.c mmc: use empty initializer list to zero-clear structures 2017-02-13 13:19:54 +01:00
rtsx_usb_sdmmc.c mmc: use empty initializer list to zero-clear structures 2017-02-13 13:19:54 +01:00
s3cmci.c mmc: host: s3cmci: allow probing from device tree 2017-04-24 21:41:59 +02:00
s3cmci.h mmc: s3cmci: Register cpufreq notifier only on S3C24xx 2016-07-25 10:34:46 +02:00
sdhci_f_sdh30.c mmc: sdhci-pltfm: Drop define for SDHCI_PLTFM_PMOPS 2016-07-29 11:29:04 +02:00
sdhci-acpi.c mmc: sdhci-acpi: Set MMC_CAP_AGGRESSIVE_PM for BYT-related Intel controllers 2017-04-24 21:41:57 +02:00
sdhci-bcm-kona.c mmc: sdhci-bcm-kona: fix error return code in sdhci_bcm_kona_probe() 2016-09-26 21:31:08 +02:00
sdhci-brcmstb.c mmc: sdhci: Let drivers decide whether to use mmc_retune_needed() with pm 2017-04-24 21:41:26 +02:00
sdhci-cadence.c mmc: sdhci-cadence: add parsing sdhci properties 2017-04-24 21:42:19 +02:00
sdhci-cns3xxx.c mmc: sdhci-pltfm: Drop define for SDHCI_PLTFM_PMOPS 2016-07-29 11:29:04 +02:00
sdhci-dove.c mmc: sdhci-pltfm: Drop define for SDHCI_PLTFM_PMOPS 2016-07-29 11:29:04 +02:00
sdhci-esdhc-imx.c mmc: sdhci-esdhc-imx: reset tuning circuit when power on mmc card 2017-04-24 21:42:28 +02:00
sdhci-esdhc.h mmc: sdhci-of-esdhc: add tuning support 2017-04-24 21:42:26 +02:00
sdhci-iproc.c mmc: sdhci-iproc: suppress spurious interrupt with Multiblock read 2017-05-22 18:18:04 +02:00
sdhci-msm.c mmc: sdhci: Do not use spin lock in set_ios paths 2017-04-24 21:41:29 +02:00
sdhci-of-arasan.c mmc: sdhci-of-arasan: Trivial print fix 2017-06-20 10:30:07 +02:00
sdhci-of-at91.c mmc: sdhci: Do not use spin lock in set_ios paths 2017-04-24 21:41:29 +02:00
sdhci-of-esdhc.c mmc: sdhci-of-esdhc: limit SD clock for ls1012a/ls1046a 2017-04-28 14:53:13 +02:00
sdhci-of-hlwd.c mmc: sdhci-pltfm: Drop define for SDHCI_PLTFM_PMOPS 2016-07-29 11:29:04 +02:00
sdhci-pci-core.c mmc: sdhci-pci: Allow for 3 bytes from Intel DSM 2017-04-24 21:42:24 +02:00
sdhci-pci-data.c mmc: sdhci-pci: Use ACPI DSM to get driver strength for some Intel devices 2017-04-24 21:41:28 +02:00
sdhci-pci-o2micro.c mmc: sdhci-pci: Let suspend/resume callbacks replace default callbacks 2017-04-24 21:41:38 +02:00
sdhci-pci-o2micro.h mmc: sdhci-pci: Make sdhci_pci_o2_fujin2_pci_init() static 2015-10-26 16:00:05 +01:00
sdhci-pci.h mmc: sdhci-pci: Add runtime suspend/resume callbacks 2017-04-24 21:41:39 +02:00
sdhci-pic32.c mmc: sdhci-pic32: remove owner assignment 2016-05-02 10:33:25 +02:00
sdhci-pltfm.c mmc: sdhci: Let drivers decide whether to use mmc_retune_needed() with pm 2017-04-24 21:41:26 +02:00
sdhci-pltfm.h mmc: sdhci: remove unneeded (void *) casts in sdhci_(pltfm_)priv() 2016-11-29 09:01:00 +01:00
sdhci-pxav2.c mmc: sdhci-pxav2: remove unnecessary platform_set_drvdata() call 2017-04-24 21:41:20 +02:00
sdhci-pxav3.c mmc: sdhci: Do not use spin lock in set_ios paths 2017-04-24 21:41:29 +02:00
sdhci-s3c.c mmc: sdhci: Do not use spin lock in set_ios paths 2017-04-24 21:41:29 +02:00
sdhci-sirf.c mmc: sdhci: Let drivers decide whether to use mmc_retune_needed() with pm 2017-04-24 21:41:26 +02:00
sdhci-spear.c mmc: sdhci: Let drivers decide whether to use mmc_retune_needed() with pm 2017-04-24 21:41:26 +02:00
sdhci-st.c mmc: sdhci: Let drivers decide whether to use mmc_retune_needed() with pm 2017-04-24 21:41:26 +02:00
sdhci-tegra.c mmc: tegra: Add Tegra186 support 2017-04-24 21:41:18 +02:00
sdhci-xenon-phy.c mmc: sdhci-xenon: kill xenon_clean_phy() 2017-05-19 08:58:21 +02:00
sdhci-xenon.c mmc: sdhci-xenon: kill xenon_clean_phy() 2017-05-19 08:58:21 +02:00
sdhci-xenon.h mmc: sdhci-xenon: kill xenon_clean_phy() 2017-05-19 08:58:21 +02:00
sdhci.c mmc: sdhci: Control the delay between tuning commands 2017-04-24 21:42:27 +02:00
sdhci.h mmc: sdhci: Control the delay between tuning commands 2017-04-24 21:42:27 +02:00
sdricoh_cs.c mmc: sdricoh_cs: remove redundant check if len is non-zero 2017-06-20 10:30:08 +02:00
sh_mmcif.c mmc: sh_mmcif: Remove unused clk_ctrl2_present from the platform data 2017-02-13 13:19:58 +01:00
sunxi-mmc.c mmc: use new core function mmc_get_dma_dir 2017-04-24 21:41:52 +02:00
tifm_sd.c mmc: Convert pr_warning to pr_warn 2014-09-24 10:13:09 +02:00
tmio_mmc_core.c mmc: tmio: rename tmio_mmc_{pio => core}.c 2017-06-20 10:30:14 +02:00
tmio_mmc.c mmc: renesas-sdhi, tmio: make dma more modular 2017-06-20 10:30:14 +02:00
tmio_mmc.h mmc: renesas-sdhi: rename tmio_mmc_dma.c => renesas_sdhi_sys_dmac.c 2017-06-20 10:30:15 +02:00
toshsd.c PM / Runtime: Move ignore_children flag under CONFIG_PM 2016-04-22 01:32:37 +02:00
toshsd.h mmc: add Toshiba PCI SD controller driver 2014-11-26 14:30:58 +01:00
usdhi6rol0.c mmc: usdhi6rol0: add pinctrl to set pin drive strength 2016-05-02 10:36:06 +02:00
ushc.c mmc: ushc: fix NULL-deref at probe 2017-03-16 15:31:27 +01:00
via-sdmmc.c mmc: host: Include interrupt.h in mmc host drivers that depends on it 2017-02-13 13:20:01 +01:00
vub300.c mmc: vub3000: add missing USB-descriptor endianness conversions 2017-06-20 10:30:09 +02:00
wbsd.c Annotate hardware config module parameters in drivers/mmc/host/ 2017-04-20 12:02:32 +01:00
wbsd.h
wmt-sdmmc.c mmc: host: Include interrupt.h in mmc host drivers that depends on it 2017-02-13 13:20:01 +01:00