![Linus Walleij](/assets/img/avatar_default.png)
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>
83 lines
2.4 KiB
Plaintext
83 lines
2.4 KiB
Plaintext
#
|
|
# MMC core configuration
|
|
#
|
|
config PWRSEQ_EMMC
|
|
tristate "HW reset support for eMMC"
|
|
default y
|
|
depends on OF
|
|
help
|
|
This selects Hardware reset support aka pwrseq-emmc for eMMC
|
|
devices. By default this option is set to y.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called pwrseq_emmc.
|
|
|
|
config PWRSEQ_SD8787
|
|
tristate "HW reset support for SD8787 BT + Wifi module"
|
|
depends on OF && (MWIFIEX || BT_MRVL_SDIO)
|
|
help
|
|
This selects hardware reset support for the SD8787 BT + Wifi
|
|
module. By default this option is set to n.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called pwrseq_sd8787.
|
|
|
|
config PWRSEQ_SIMPLE
|
|
tristate "Simple HW reset support for MMC"
|
|
default y
|
|
depends on OF
|
|
help
|
|
This selects simple hardware reset support aka pwrseq-simple for MMC
|
|
devices. By default this option is set to y.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called pwrseq_simple.
|
|
|
|
config MMC_BLOCK
|
|
tristate "MMC block device driver"
|
|
depends on BLOCK
|
|
default y
|
|
help
|
|
Say Y here to enable the MMC block device driver support.
|
|
This provides a block device driver, which you can use to
|
|
mount the filesystem. Almost everyone wishing MMC support
|
|
should say Y or M here.
|
|
|
|
config MMC_BLOCK_MINORS
|
|
int "Number of minors per block device"
|
|
depends on MMC_BLOCK
|
|
range 4 256
|
|
default 8
|
|
help
|
|
Number of minors per block device. One is needed for every
|
|
partition on the disk (plus one for the whole disk).
|
|
|
|
Number of total MMC minors available is 256, so your number
|
|
of supported block devices will be limited to 256 divided
|
|
by this number.
|
|
|
|
Default is 8 to be backwards compatible with previous
|
|
hardwired device numbering.
|
|
|
|
If unsure, say 8 here.
|
|
|
|
config SDIO_UART
|
|
tristate "SDIO UART/GPS class support"
|
|
depends on TTY
|
|
help
|
|
SDIO function driver for SDIO cards that implements the UART
|
|
class, as well as the GPS class which appears like a UART.
|
|
|
|
config MMC_TEST
|
|
tristate "MMC host test driver"
|
|
help
|
|
Development driver that performs a series of reads and writes
|
|
to a memory card in order to expose certain well known bugs
|
|
in host controllers. The tests are executed by writing to the
|
|
"test" file in debugfs under each card. Note that whatever is
|
|
on your card will be overwritten by these tests.
|
|
|
|
This driver is only of interest to those developing or
|
|
testing a host driver. Most people should say N here.
|
|
|