[U-Boot] [PATCH 0/6] Migrate BOUNCE_BUFFER

A number of MMC drivers uses BOUNCE_BUFFER for their DMA buffers. This moves it into Kconfig and performs a step-by-step migration for the affected boards/drivers.
In doing so, it turns out that a few boards/configs enabled CONFIG_BOUNCE_BUFFER in their config headers without an apparent need. The migration (using moveconfig) for those boards is kept in a separate patch, so it can be more easily reviewed by the affected parties to make a determination whether it is actually needed.
Given that BOUNCE_BUFFER only controls whether the bounce_buffer_* functions are build and linked, this configuration option could be entirely removed and the utility functions built unconditionally. For platforms that don't make use of these functions, the linker will then remove the unused symbols.
I'll leave the final decision if this would be a better implementation (or if this should be done in a two-stage process) to someone else... END.
Philipp Tomsich (6): Kconfig: Migrate BOUNCE_BUFFER mmc: dw_mmc: depend on BOUNCE_BUFFER mmc: mxsmmc: select BOUNCE_BUFFER unconditionally mmc: tegra: select BOUNCE_BUFFER unconditionally arc: select BOUNCE_BUFFER for CMD_NAND on AXS10x Kconfig: migrate BOUNCE_BUFFER (final moveconfig)
arch/arc/Kconfig | 2 ++ common/Kconfig | 8 ++++++++ configs/bcm911360_entphn-ns_defconfig | 1 + configs/bcm911360_entphn_defconfig | 1 + configs/bcm911360k_defconfig | 1 + configs/bcm958300k-ns_defconfig | 1 + configs/bcm958300k_defconfig | 1 + configs/bcm958305k_defconfig | 1 + configs/bcm958622hr_defconfig | 1 + configs/socfpga_arria10_defconfig | 1 + drivers/mmc/Kconfig | 3 +++ include/configs/axs10x.h | 5 ----- include/configs/bcm_ep_board.h | 3 --- include/configs/emsdp.h | 3 --- include/configs/exynos-common.h | 3 --- include/configs/hikey.h | 3 --- include/configs/hsdk.h | 5 ----- include/configs/iot_devkit.h | 3 --- include/configs/mx6_common.h | 1 - include/configs/mx7_common.h | 1 - include/configs/mx7ulp_evk.h | 1 - include/configs/mxs.h | 5 ----- include/configs/poplar.h | 3 --- include/configs/rk3036_common.h | 2 -- include/configs/rk3128_common.h | 3 --- include/configs/rk3188_common.h | 3 --- include/configs/rk322x_common.h | 3 --- include/configs/rk3288_common.h | 3 --- include/configs/rk3328_common.h | 3 --- include/configs/rk3368_common.h | 2 -- include/configs/rk3399_common.h | 1 - include/configs/socfpga_common.h | 1 - include/configs/socfpga_stratix10_socdk.h | 1 - include/configs/tegra-common.h | 3 --- scripts/config_whitelist.txt | 1 - 35 files changed, 21 insertions(+), 62 deletions(-)

The bounce buffer is used by a few drivers (most of the MMC drivers) to overcome limitations in their respective DMA implementation.
This moves the configuration to Kconfig and makes it user-selectable (even though it will be a required feature to make those drivers work): the expected usage is for drivers depending on this to 'select' it unconditionally from their respective Kconfig.
Signed-off-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com
---
common/Kconfig | 8 ++++++++ scripts/config_whitelist.txt | 1 - 2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/common/Kconfig b/common/Kconfig index 57bd16d..f45e066 100644 --- a/common/Kconfig +++ b/common/Kconfig @@ -645,6 +645,14 @@ config DISPLAY_BOARDINFO_LATE the relocation phase. The board function checkboard() is called to do this.
+config BOUNCE_BUFFER + bool "Include bounce buffer API" + help + Some peripherals support DMA from a subset of physically + addressable memory only. To support such peripherals, the + bounce buffer API uses a temporary buffer: it copies data + to/from DMA regions while managing cache operations. + menu "Start-up hooks"
config ARCH_EARLY_INIT_R diff --git a/scripts/config_whitelist.txt b/scripts/config_whitelist.txt index b3f525f..2151d65 100644 --- a/scripts/config_whitelist.txt +++ b/scripts/config_whitelist.txt @@ -169,7 +169,6 @@ CONFIG_BOOT_OS_NET CONFIG_BOOT_PARAMS_ADDR CONFIG_BOOT_RETRY_MIN CONFIG_BOOT_RETRY_TIME -CONFIG_BOUNCE_BUFFER CONFIG_BPTR_VIRT_ADDR CONFIG_BS_ADDR_DEVICE CONFIG_BS_ADDR_RAM

Hi Philipp,
-----Original Message----- From: Philipp Tomsich [mailto:philipp.tomsich@theobroma-systems.com] Sent: Friday, November 30, 2018 2:40 PM To: u-boot@lists.denx.de Cc: Tom Rini trini@konsulko.com; Philipp Tomsich philipp.tomsich@theobroma-systems.com; Mario Six mario.six@gdsys.cc; Michal Simek michal.simek@xilinx.com; Simon Glass sjg@chromium.org; Masahiro Yamada yamada.masahiro@socionext.com; Alexey Brodkin alexey.brodkin@synopsys.com; Alex Kiernan alex.kiernan@gmail.com; Eric Nelson eric@nelint.com; Marek Vasut marek.vasut@gmail.com; Jörg Krause joerg.krause@embedded.rocks; Adam Ford aford173@gmail.com; Stephen Warren swarren@nvidia.com; Angelo Dureghello angelo@sysam.it; Tuomas Tynkkynen tuomas.tynkkynen@iki.fi; Eugeniu Rosca roscaeugeniu@gmail.com Subject: [PATCH 1/6] Kconfig: Migrate BOUNCE_BUFFER
The bounce buffer is used by a few drivers (most of the MMC drivers) to overcome limitations in their respective DMA implementation.
This moves the configuration to Kconfig and makes it user-selectable (even though it will be a required feature to make those drivers work): the expected usage is for drivers depending on this to 'select' it unconditionally from their respective Kconfig.
Signed-off-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com
common/Kconfig | 8 ++++++++ scripts/config_whitelist.txt | 1 - 2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/common/Kconfig b/common/Kconfig index 57bd16d..f45e066 100644 --- a/common/Kconfig +++ b/common/Kconfig @@ -645,6 +645,14 @@ config DISPLAY_BOARDINFO_LATE the relocation phase. The board function checkboard() is called to do this.
+config BOUNCE_BUFFER
- bool "Include bounce buffer API"
- help
Some peripherals support DMA from a subset of physically
addressable memory only. To support such peripherals, the
bounce buffer API uses a temporary buffer: it copies data
to/from DMA regions while managing cache operations.
IIRC I decided to use bounce buffer just to make sure data we pass to the DMA is properly aligned. Not sure though if that's a valid use-case for it but if it is IMHO it worth mentioning here in this help message.
-Alexey

The driver for the dw_mmc depends on the bounce buffer utility functions. Unconditionally select BOUNCE_BUFFER, when DW_MMC is enabled.
Includes the migration (moveconfig with manual postprocessing of config-headers to drop unused comments) for the boards using DW_MMC.
Signed-off-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com ---
drivers/mmc/Kconfig | 1 + include/configs/emsdp.h | 3 --- include/configs/exynos-common.h | 3 --- include/configs/hikey.h | 3 --- include/configs/hsdk.h | 5 ----- include/configs/iot_devkit.h | 3 --- include/configs/poplar.h | 3 --- include/configs/rk3036_common.h | 2 -- include/configs/rk3128_common.h | 3 --- include/configs/rk3188_common.h | 3 --- include/configs/rk322x_common.h | 3 --- include/configs/rk3288_common.h | 3 --- include/configs/rk3328_common.h | 3 --- include/configs/rk3368_common.h | 2 -- include/configs/rk3399_common.h | 1 - 15 files changed, 1 insertion(+), 40 deletions(-)
diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig index fbd1396..65d43a5 100644 --- a/drivers/mmc/Kconfig +++ b/drivers/mmc/Kconfig @@ -178,6 +178,7 @@ config MMC_DAVINCI
config MMC_DW bool "Synopsys DesignWare Memory Card Interface" + select BOUNCE_BUFFER help This selects support for the Synopsys DesignWare Mobile Storage IP block, this provides host support for SD and MMC interfaces, in both diff --git a/include/configs/emsdp.h b/include/configs/emsdp.h index 385d59e..23c71f4 100644 --- a/include/configs/emsdp.h +++ b/include/configs/emsdp.h @@ -18,9 +18,6 @@ #define CONFIG_SYS_MALLOC_LEN SZ_64K #define CONFIG_SYS_LOAD_ADDR CONFIG_SYS_SDRAM_BASE
-/* Required by DW MMC driver */ -#define CONFIG_BOUNCE_BUFFER - /* * Environment */ diff --git a/include/configs/exynos-common.h b/include/configs/exynos-common.h index f3f194f..752acc5 100644 --- a/include/configs/exynos-common.h +++ b/include/configs/exynos-common.h @@ -34,9 +34,6 @@
/* select serial console configuration */
-/* SD/MMC configuration */ -#define CONFIG_BOUNCE_BUFFER - /* PWM */ #define CONFIG_PWM
diff --git a/include/configs/hikey.h b/include/configs/hikey.h index 1376d61..6d9e6eb 100644 --- a/include/configs/hikey.h +++ b/include/configs/hikey.h @@ -53,9 +53,6 @@
#define CONFIG_HIKEY_GPIO
-/* SD/MMC configuration */ -#define CONFIG_BOUNCE_BUFFER - /* Command line configuration */
/* BOOTP options */ diff --git a/include/configs/hsdk.h b/include/configs/hsdk.h index cdf4fdd..2ec2fd1 100644 --- a/include/configs/hsdk.h +++ b/include/configs/hsdk.h @@ -116,11 +116,6 @@ setenv core_iccm_3 0x6; setenv core_dccm_3 0x6;\0" #define CONFIG_BOOTFILE "uImage" #define CONFIG_LOADADDR CONFIG_SYS_LOAD_ADDR
-/* - * Misc utility configuration - */ -#define CONFIG_BOUNCE_BUFFER - /* Cli configuration */ #define CONFIG_SYS_CBSIZE SZ_2K
diff --git a/include/configs/iot_devkit.h b/include/configs/iot_devkit.h index 4ffe114..cd1309d 100644 --- a/include/configs/iot_devkit.h +++ b/include/configs/iot_devkit.h @@ -71,9 +71,6 @@ CONFIG_SYS_MALLOC_LEN - \ CONFIG_ENV_SIZE
-/* Required by DW MMC driver */ -#define CONFIG_BOUNCE_BUFFER - /* * Environment */ diff --git a/include/configs/poplar.h b/include/configs/poplar.h index 0a12600..a7a77ec 100644 --- a/include/configs/poplar.h +++ b/include/configs/poplar.h @@ -26,9 +26,6 @@ /* USB configuration */ #define CONFIG_USB_MAX_CONTROLLER_COUNT 2
-/* SD/MMC */ -#define CONFIG_BOUNCE_BUFFER - /***************************************************************************** * Initial environment variables *****************************************************************************/ diff --git a/include/configs/rk3036_common.h b/include/configs/rk3036_common.h index d4e5406..1a6aeb7 100644 --- a/include/configs/rk3036_common.h +++ b/include/configs/rk3036_common.h @@ -25,8 +25,6 @@ #define CONFIG_ROCKCHIP_CHIP_TAG "RK30"
/* MMC/SD IP block */ -#define CONFIG_BOUNCE_BUFFER - #define CONFIG_SYS_SDRAM_BASE 0x60000000 #define SDRAM_BANK_SIZE (512UL << 20UL) #define SDRAM_MAX_SIZE (CONFIG_NR_DRAM_BANKS * SDRAM_BANK_SIZE) diff --git a/include/configs/rk3128_common.h b/include/configs/rk3128_common.h index 3e9e642..f4f64ed 100644 --- a/include/configs/rk3128_common.h +++ b/include/configs/rk3128_common.h @@ -23,9 +23,6 @@
#define CONFIG_SYS_BOOTM_LEN (64 << 20) /* 64M */
-/* MMC/SD IP block */ -#define CONFIG_BOUNCE_BUFFER - /* RAW SD card / eMMC locations. */ #define CONFIG_SYS_SPI_U_BOOT_OFFS (128 << 10)
diff --git a/include/configs/rk3188_common.h b/include/configs/rk3188_common.h index d1837d5..612d643 100644 --- a/include/configs/rk3188_common.h +++ b/include/configs/rk3188_common.h @@ -33,9 +33,6 @@
#define CONFIG_SPL_STACK 0x10087fff
-/* MMC/SD IP block */ -#define CONFIG_BOUNCE_BUFFER - #define CONFIG_SYS_SDRAM_BASE 0x60000000 #define SDRAM_BANK_SIZE (2UL << 30) #define SDRAM_MAX_SIZE 0x80000000 diff --git a/include/configs/rk322x_common.h b/include/configs/rk322x_common.h index 176bd0c..e72aa8d 100644 --- a/include/configs/rk322x_common.h +++ b/include/configs/rk322x_common.h @@ -25,9 +25,6 @@ #define CONFIG_ROCKCHIP_MAX_INIT_SIZE (28 << 10) #define CONFIG_ROCKCHIP_CHIP_TAG "RK32"
-/* MMC/SD IP block */ -#define CONFIG_BOUNCE_BUFFER - #define CONFIG_SYS_SDRAM_BASE 0x60000000 #define SDRAM_BANK_SIZE (512UL << 20UL) #define SDRAM_MAX_SIZE 0x80000000 diff --git a/include/configs/rk3288_common.h b/include/configs/rk3288_common.h index 5388b13..01f297b 100644 --- a/include/configs/rk3288_common.h +++ b/include/configs/rk3288_common.h @@ -29,9 +29,6 @@ # define CONFIG_SPL_TEXT_BASE 0xff704000 #endif
-/* MMC/SD IP block */ -#define CONFIG_BOUNCE_BUFFER - /* RAW SD card / eMMC locations. */ #define CONFIG_SYS_SPI_U_BOOT_OFFS (128 << 10)
diff --git a/include/configs/rk3328_common.h b/include/configs/rk3328_common.h index 9174c67..4afa186 100644 --- a/include/configs/rk3328_common.h +++ b/include/configs/rk3328_common.h @@ -19,9 +19,6 @@
#define CONFIG_SYS_BOOTM_LEN (64 << 20) /* 64M */
-/* MMC/SD IP block */ -#define CONFIG_BOUNCE_BUFFER - /* RAW SD card / eMMC locations. */ #define CONFIG_SYS_SPI_U_BOOT_OFFS (128 << 10)
diff --git a/include/configs/rk3368_common.h b/include/configs/rk3368_common.h index 6638491..88c1af0 100644 --- a/include/configs/rk3368_common.h +++ b/include/configs/rk3368_common.h @@ -32,8 +32,6 @@ #define CONFIG_SPL_BSS_START_ADDR 0x400000 #define CONFIG_SPL_BSS_MAX_SIZE 0x20000
-#define CONFIG_BOUNCE_BUFFER - #ifndef CONFIG_SPL_BUILD #define ENV_MEM_LAYOUT_SETTINGS \ "scriptaddr=0x00500000\0" \ diff --git a/include/configs/rk3399_common.h b/include/configs/rk3399_common.h index eeda070..9a4da39 100644 --- a/include/configs/rk3399_common.h +++ b/include/configs/rk3399_common.h @@ -28,7 +28,6 @@ #define CONFIG_SYS_BOOTM_LEN (64 << 20) /* 64M */
/* MMC/SD IP block */ -#define CONFIG_BOUNCE_BUFFER #define CONFIG_ROCKCHIP_SDHCI_MAX_FREQ 200000000
/* RAW SD card / eMMC locations. */

On Fri, Nov 30, 2018 at 9:41 AM Philipp Tomsich philipp.tomsich@theobroma-systems.com wrote:
The driver for the dw_mmc depends on the bounce buffer utility functions. Unconditionally select BOUNCE_BUFFER, when DW_MMC is enabled.
Includes the migration (moveconfig with manual postprocessing of config-headers to drop unused comments) for the boards using DW_MMC.
Signed-off-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com
Reviewed-by: Otavio Salvador otavio@ossystems.com.br

The driver for the mxsmmc depends on the bounce buffer utility functions. Unconditionally select BOUNCE_BUFFER, when this driver is enabled.
Includes the migration (moveconfig with manual postprocessing of config-headers to drop unused comments) for the boards using mxsmmc.
Signed-off-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com ---
drivers/mmc/Kconfig | 1 + include/configs/mx6_common.h | 1 - include/configs/mx7_common.h | 1 - include/configs/mx7ulp_evk.h | 1 - include/configs/mxs.h | 5 ----- 5 files changed, 1 insertion(+), 8 deletions(-)
diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig index 65d43a5..e16dd6a 100644 --- a/drivers/mmc/Kconfig +++ b/drivers/mmc/Kconfig @@ -240,6 +240,7 @@ config MMC_MXC config MMC_MXS bool "Freescale MXS Multimedia Card Interface support" depends on MX23 || MX28 || MX6 || MX7 + select BOUNCE_BUFFER select APBH_DMA select APBH_DMA_BURST if ARCH_MX6 || ARCH_MX7 select APBH_DMA_BURST8 if ARCH_MX6 || ARCH_MX7 diff --git a/include/configs/mx6_common.h b/include/configs/mx6_common.h index 1b2961f..cdc8833 100644 --- a/include/configs/mx6_common.h +++ b/include/configs/mx6_common.h @@ -55,7 +55,6 @@ #define CONFIG_SYS_MAXARGS 32
/* MMC */ -#define CONFIG_BOUNCE_BUFFER #define CONFIG_FSL_USDHC
/* Fuses */ diff --git a/include/configs/mx7_common.h b/include/configs/mx7_common.h index b0b7e1e..a895c93 100644 --- a/include/configs/mx7_common.h +++ b/include/configs/mx7_common.h @@ -40,7 +40,6 @@ #define CONFIG_MXC_UART
/* MMC */ -#define CONFIG_BOUNCE_BUFFER #define CONFIG_FSL_USDHC
/* Fuses */ diff --git a/include/configs/mx7ulp_evk.h b/include/configs/mx7ulp_evk.h index 3d32ff1..b8dcaa1 100644 --- a/include/configs/mx7ulp_evk.h +++ b/include/configs/mx7ulp_evk.h @@ -27,7 +27,6 @@ #define IRAM_BASE_ADDR OCRAM_0_BASE #define IOMUXC_BASE_ADDR IOMUXC1_RBASE
-#define CONFIG_BOUNCE_BUFFER #define CONFIG_FSL_USDHC #define CONFIG_SUPPORT_EMMC_BOOT /* eMMC specific */
diff --git a/include/configs/mxs.h b/include/configs/mxs.h index 9e59e7a..20719c9 100644 --- a/include/configs/mxs.h +++ b/include/configs/mxs.h @@ -124,11 +124,6 @@ #define CONFIG_VIDEO_MXS #endif
-/* MMC */ -#ifdef CONFIG_CMD_MMC -#define CONFIG_BOUNCE_BUFFER -#endif - /* NAND */ #ifdef CONFIG_CMD_NAND #define CONFIG_SYS_MAX_NAND_DEVICE 1

On Fri, Nov 30, 2018 at 9:43 AM Philipp Tomsich philipp.tomsich@theobroma-systems.com wrote:
The driver for the mxsmmc depends on the bounce buffer utility functions. Unconditionally select BOUNCE_BUFFER, when this driver is enabled.
Includes the migration (moveconfig with manual postprocessing of config-headers to drop unused comments) for the boards using mxsmmc.
Signed-off-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com
Reviewed-by: Fabio Estevam festevam@gmail.com

The driver for the SDHCI_TEGRA depends on the bounce buffer utility functions. Unconditionally select BOUNCE_BUFFER, when this driver is enabled.
Includes the migration (moveconfig with manual postprocessing of config-headers to drop unused comments) for the boards using SDHCI_TEGRA.
Signed-off-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com ---
drivers/mmc/Kconfig | 1 + include/configs/tegra-common.h | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig index e16dd6a..eb2e9bc 100644 --- a/drivers/mmc/Kconfig +++ b/drivers/mmc/Kconfig @@ -531,6 +531,7 @@ config MMC_SDHCI_TANGIER config MMC_SDHCI_TEGRA bool "SDHCI platform support for the Tegra SD/MMC Controller" depends on TEGRA + select BOUNCE_BUFFER default y help This selects the Tegra SD/MMC controller. If you have a Tegra diff --git a/include/configs/tegra-common.h b/include/configs/tegra-common.h index 4d249dd..d37e2d7 100644 --- a/include/configs/tegra-common.h +++ b/include/configs/tegra-common.h @@ -88,7 +88,4 @@ #define CONFIG_SYS_SPL_MALLOC_SIZE 0x00010000 #endif
-/* Misc utility code */ -#define CONFIG_BOUNCE_BUFFER - #endif /* _TEGRA_COMMON_H_ */

The NAND driver of AXS10x depends on the availability of the bounce buffer. As the NAND driver is gated by CMD_NAND only, we need to select BOUNCE_BUFFER conditionally (on CMD_NAND) for TARGET_AXS101 and TARGET_AXS103.
This change also contains the modification to configs/axs10x.h to avoid redefining BOUNCE_BUFFER there.
Signed-off-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com ---
arch/arc/Kconfig | 2 ++ include/configs/axs10x.h | 5 ----- 2 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig index fa6b344..50369d5 100644 --- a/arch/arc/Kconfig +++ b/arch/arc/Kconfig @@ -146,9 +146,11 @@ config TARGET_NSIM
config TARGET_AXS101 bool "Support Synopsys Designware SDP board AXS101" + select BOUNCE_BUFFER if CMD_NAND
config TARGET_AXS103 bool "Support Synopsys Designware SDP board AXS103" + select BOUNCE_BUFFER if CMD_NAND
config TARGET_EMSDP bool "Synopsys EM Software Development Platform" diff --git a/include/configs/axs10x.h b/include/configs/axs10x.h index 1b2966f..bd1c902 100644 --- a/include/configs/axs10x.h +++ b/include/configs/axs10x.h @@ -82,9 +82,4 @@ * Console configuration */
-/* - * Misc utility configuration - */ -#define CONFIG_BOUNCE_BUFFER - #endif /* _CONFIG_AXS10X_H_ */

There's a few boards that seem to have BOUNCE_BUFFER as a purely elective option: at least I could not find a driver that actually depends on it for these.
As a final migration step, these boards have BOUNCE_BUFFER moved from their header files into the corresponding defconfig using moveconfig.
Signed-off-by: Philipp Tomsich philipp.tomsich@theobroma-systems.com ---
configs/bcm911360_entphn-ns_defconfig | 1 + configs/bcm911360_entphn_defconfig | 1 + configs/bcm911360k_defconfig | 1 + configs/bcm958300k-ns_defconfig | 1 + configs/bcm958300k_defconfig | 1 + configs/bcm958305k_defconfig | 1 + configs/bcm958622hr_defconfig | 1 + configs/socfpga_arria10_defconfig | 1 + include/configs/bcm_ep_board.h | 3 --- include/configs/socfpga_common.h | 1 - include/configs/socfpga_stratix10_socdk.h | 1 - 11 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/configs/bcm911360_entphn-ns_defconfig b/configs/bcm911360_entphn-ns_defconfig index 7e4920f..be8a90e 100644 --- a/configs/bcm911360_entphn-ns_defconfig +++ b/configs/bcm911360_entphn-ns_defconfig @@ -6,6 +6,7 @@ CONFIG_SYS_EXTRA_OPTIONS="SYS_SDRAM_SIZE=0x20000000,ARMV7_NONSEC" CONFIG_VERSION_VARIABLE=y # CONFIG_DISPLAY_CPUINFO is not set # CONFIG_DISPLAY_BOARDINFO is not set +CONFIG_BOUNCE_BUFFER=y CONFIG_HUSH_PARSER=y # CONFIG_AUTOBOOT is not set CONFIG_CMD_BOOTZ=y diff --git a/configs/bcm911360_entphn_defconfig b/configs/bcm911360_entphn_defconfig index a7c6475..ba81847 100644 --- a/configs/bcm911360_entphn_defconfig +++ b/configs/bcm911360_entphn_defconfig @@ -6,6 +6,7 @@ CONFIG_SYS_EXTRA_OPTIONS="SYS_SDRAM_SIZE=0x20000000" CONFIG_VERSION_VARIABLE=y # CONFIG_DISPLAY_CPUINFO is not set # CONFIG_DISPLAY_BOARDINFO is not set +CONFIG_BOUNCE_BUFFER=y CONFIG_HUSH_PARSER=y # CONFIG_AUTOBOOT is not set CONFIG_CMD_BOOTZ=y diff --git a/configs/bcm911360k_defconfig b/configs/bcm911360k_defconfig index 349f2b8..132234c 100644 --- a/configs/bcm911360k_defconfig +++ b/configs/bcm911360k_defconfig @@ -6,6 +6,7 @@ CONFIG_SYS_EXTRA_OPTIONS="SYS_SDRAM_SIZE=0x40000000" CONFIG_VERSION_VARIABLE=y # CONFIG_DISPLAY_CPUINFO is not set # CONFIG_DISPLAY_BOARDINFO is not set +CONFIG_BOUNCE_BUFFER=y CONFIG_HUSH_PARSER=y # CONFIG_AUTOBOOT is not set CONFIG_CMD_BOOTZ=y diff --git a/configs/bcm958300k-ns_defconfig b/configs/bcm958300k-ns_defconfig index fd0da02..d95ef15 100644 --- a/configs/bcm958300k-ns_defconfig +++ b/configs/bcm958300k-ns_defconfig @@ -6,6 +6,7 @@ CONFIG_SYS_EXTRA_OPTIONS="SYS_SDRAM_SIZE=0x40000000,ARMV7_NONSEC" CONFIG_VERSION_VARIABLE=y # CONFIG_DISPLAY_CPUINFO is not set # CONFIG_DISPLAY_BOARDINFO is not set +CONFIG_BOUNCE_BUFFER=y CONFIG_HUSH_PARSER=y # CONFIG_AUTOBOOT is not set CONFIG_CMD_BOOTZ=y diff --git a/configs/bcm958300k_defconfig b/configs/bcm958300k_defconfig index 349f2b8..132234c 100644 --- a/configs/bcm958300k_defconfig +++ b/configs/bcm958300k_defconfig @@ -6,6 +6,7 @@ CONFIG_SYS_EXTRA_OPTIONS="SYS_SDRAM_SIZE=0x40000000" CONFIG_VERSION_VARIABLE=y # CONFIG_DISPLAY_CPUINFO is not set # CONFIG_DISPLAY_BOARDINFO is not set +CONFIG_BOUNCE_BUFFER=y CONFIG_HUSH_PARSER=y # CONFIG_AUTOBOOT is not set CONFIG_CMD_BOOTZ=y diff --git a/configs/bcm958305k_defconfig b/configs/bcm958305k_defconfig index 349f2b8..132234c 100644 --- a/configs/bcm958305k_defconfig +++ b/configs/bcm958305k_defconfig @@ -6,6 +6,7 @@ CONFIG_SYS_EXTRA_OPTIONS="SYS_SDRAM_SIZE=0x40000000" CONFIG_VERSION_VARIABLE=y # CONFIG_DISPLAY_CPUINFO is not set # CONFIG_DISPLAY_BOARDINFO is not set +CONFIG_BOUNCE_BUFFER=y CONFIG_HUSH_PARSER=y # CONFIG_AUTOBOOT is not set CONFIG_CMD_BOOTZ=y diff --git a/configs/bcm958622hr_defconfig b/configs/bcm958622hr_defconfig index 74d9f25..d5cb7f6 100644 --- a/configs/bcm958622hr_defconfig +++ b/configs/bcm958622hr_defconfig @@ -6,6 +6,7 @@ CONFIG_SYS_EXTRA_OPTIONS="SYS_SDRAM_SIZE=0x01000000" CONFIG_VERSION_VARIABLE=y # CONFIG_DISPLAY_CPUINFO is not set # CONFIG_DISPLAY_BOARDINFO is not set +CONFIG_BOUNCE_BUFFER=y CONFIG_HUSH_PARSER=y # CONFIG_AUTOBOOT is not set CONFIG_CMD_BOOTZ=y diff --git a/configs/socfpga_arria10_defconfig b/configs/socfpga_arria10_defconfig index 6ebda81..f321a0a 100644 --- a/configs/socfpga_arria10_defconfig +++ b/configs/socfpga_arria10_defconfig @@ -12,6 +12,7 @@ CONFIG_BOOTARGS="console=ttyS0,115200" # CONFIG_USE_BOOTCOMMAND is not set CONFIG_DEFAULT_FDT_FILE="socfpga_arria10_socdk_sdmmc.dtb" CONFIG_DISPLAY_BOARDINFO_LATE=y +CONFIG_BOUNCE_BUFFER=y CONFIG_SPL_FPGA_SUPPORT=y CONFIG_SPL_SPI_LOAD=y CONFIG_CMD_ASKENV=y diff --git a/include/configs/bcm_ep_board.h b/include/configs/bcm_ep_board.h index 0586c53a..09a5804 100644 --- a/include/configs/bcm_ep_board.h +++ b/include/configs/bcm_ep_board.h @@ -55,7 +55,4 @@
/* Enable Time Command */
-/* Misc utility code */ -#define CONFIG_BOUNCE_BUFFER - #endif /* __BCM_EP_BOARD_H */ diff --git a/include/configs/socfpga_common.h b/include/configs/socfpga_common.h index bd8f5c8..3b32dd2 100644 --- a/include/configs/socfpga_common.h +++ b/include/configs/socfpga_common.h @@ -121,7 +121,6 @@ * MMC Driver */ #ifdef CONFIG_CMD_MMC -#define CONFIG_BOUNCE_BUFFER /* FIXME */ /* using smaller max blk cnt to avoid flooding the limited stack we have */ #define CONFIG_SYS_MMC_MAX_BLK_COUNT 256 /* FIXME -- SPL only? */ diff --git a/include/configs/socfpga_stratix10_socdk.h b/include/configs/socfpga_stratix10_socdk.h index e190b3d..f9319a2 100644 --- a/include/configs/socfpga_stratix10_socdk.h +++ b/include/configs/socfpga_stratix10_socdk.h @@ -154,7 +154,6 @@ unsigned int cm_get_qspi_controller_clk_hz(void); * SDMMC configurations */ #ifdef CONFIG_CMD_MMC -#define CONFIG_BOUNCE_BUFFER #define CONFIG_SYS_MMC_MAX_BLK_COUNT 256 #endif /*

[cut down CC list as gmail won't let me send to that many people :-( ]
Am 30.11.2018 um 12:39 schrieb Philipp Tomsich:
A number of MMC drivers uses BOUNCE_BUFFER for their DMA buffers. This moves it into Kconfig and performs a step-by-step migration for the affected boards/drivers.
In doing so, it turns out that a few boards/configs enabled CONFIG_BOUNCE_BUFFER in their config headers without an apparent need. The migration (using moveconfig) for those boards is kept in a separate patch, so it can be more easily reviewed by the affected parties to make a determination whether it is actually needed.
Given that BOUNCE_BUFFER only controls whether the bounce_buffer_* functions are build and linked, this configuration option could be entirely removed and the utility functions built unconditionally. For platforms that don't make use of these functions, the linker will then remove the unused symbols.
I'll leave the final decision if this would be a better implementation (or if this should be done in a two-stage process) to someone else... END.
I think this is a good idea, but I get build errors after applying patch 2/6 since CONFIG_BOUNCE_BUFFER is now enabled via Kconfig and defined as 1 while at the same time it is just defined (but to nothing) in socfpga_common.h.
Can you change or reorder this series so that every commit compiles?
Regards,
Simon
Philipp Tomsich (6): Kconfig: Migrate BOUNCE_BUFFER mmc: dw_mmc: depend on BOUNCE_BUFFER mmc: mxsmmc: select BOUNCE_BUFFER unconditionally mmc: tegra: select BOUNCE_BUFFER unconditionally arc: select BOUNCE_BUFFER for CMD_NAND on AXS10x Kconfig: migrate BOUNCE_BUFFER (final moveconfig)
arch/arc/Kconfig | 2 ++ common/Kconfig | 8 ++++++++ configs/bcm911360_entphn-ns_defconfig | 1 + configs/bcm911360_entphn_defconfig | 1 + configs/bcm911360k_defconfig | 1 + configs/bcm958300k-ns_defconfig | 1 + configs/bcm958300k_defconfig | 1 + configs/bcm958305k_defconfig | 1 + configs/bcm958622hr_defconfig | 1 + configs/socfpga_arria10_defconfig | 1 + drivers/mmc/Kconfig | 3 +++ include/configs/axs10x.h | 5 ----- include/configs/bcm_ep_board.h | 3 --- include/configs/emsdp.h | 3 --- include/configs/exynos-common.h | 3 --- include/configs/hikey.h | 3 --- include/configs/hsdk.h | 5 ----- include/configs/iot_devkit.h | 3 --- include/configs/mx6_common.h | 1 - include/configs/mx7_common.h | 1 - include/configs/mx7ulp_evk.h | 1 - include/configs/mxs.h | 5 ----- include/configs/poplar.h | 3 --- include/configs/rk3036_common.h | 2 -- include/configs/rk3128_common.h | 3 --- include/configs/rk3188_common.h | 3 --- include/configs/rk322x_common.h | 3 --- include/configs/rk3288_common.h | 3 --- include/configs/rk3328_common.h | 3 --- include/configs/rk3368_common.h | 2 -- include/configs/rk3399_common.h | 1 - include/configs/socfpga_common.h | 1 - include/configs/socfpga_stratix10_socdk.h | 1 - include/configs/tegra-common.h | 3 --- scripts/config_whitelist.txt | 1 - 35 files changed, 21 insertions(+), 62 deletions(-)

Simon,
On 30.11.2018, at 14:55, Simon Goldschmidt simon.k.r.goldschmidt@gmail.com wrote:
[cut down CC list as gmail won't let me send to that many people :-( ]
Sometimes I wonder if patman will at some point get a feature to avoid those endless CC lists for changes like this one.
Am 30.11.2018 um 12:39 schrieb Philipp Tomsich:
A number of MMC drivers uses BOUNCE_BUFFER for their DMA buffers. This moves it into Kconfig and performs a step-by-step migration for the affected boards/drivers.
In doing so, it turns out that a few boards/configs enabled CONFIG_BOUNCE_BUFFER in their config headers without an apparent need. The migration (using moveconfig) for those boards is kept in a separate patch, so it can be more easily reviewed by the affected parties to make a determination whether it is actually needed.
Given that BOUNCE_BUFFER only controls whether the bounce_buffer_* functions are build and linked, this configuration option could be entirely removed and the utility functions built unconditionally. For platforms that don't make use of these functions, the linker will then remove the unused symbols.
I'll leave the final decision if this would be a better implementation (or if this should be done in a two-stage process) to someone else... END.
I think this is a good idea, but I get build errors after applying patch 2/6 since CONFIG_BOUNCE_BUFFER is now enabled via Kconfig and defined as 1 while at the same time it is just defined (but to nothing) in socfpga_common.h.
This is a problem of having multiple individual patches for a moveconfig-style change. You need the final patch (6/6) in addition to (1/6) for socfpga.
Can you change or reorder this series so that every commit compiles?
There’s a couple options (none of they appeal to me): 1. I lump everything together into one big change. 2. I have a complete moveconfig (i.e. polluting all defconfig files) in the first patch and the individual changes to the MMC drivers then remove the defconfig entries for their platforms. 3. We skip this part of the conversion and directly skip forward to having bounce-buffer always included and leave the cleanup to the linker…
I’m happy to change this to any of the 3 options (although I’ll probably need a shower afterwards to feel less dirty, if we go with option #1 …)
Philipp.

Tom,
On 30.11.2018, at 15:13, Philipp Tomsich philipp.tomsich@theobroma-systems.com wrote:
Simon,
On 30.11.2018, at 14:55, Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com mailto:simon.k.r.goldschmidt@gmail.com> wrote:
[cut down CC list as gmail won't let me send to that many people :-( ]
Sometimes I wonder if patman will at some point get a feature to avoid those endless CC lists for changes like this one.
Am 30.11.2018 um 12:39 schrieb Philipp Tomsich:
A number of MMC drivers uses BOUNCE_BUFFER for their DMA buffers. This moves it into Kconfig and performs a step-by-step migration for the affected boards/drivers.
In doing so, it turns out that a few boards/configs enabled CONFIG_BOUNCE_BUFFER in their config headers without an apparent need. The migration (using moveconfig) for those boards is kept in a separate patch, so it can be more easily reviewed by the affected parties to make a determination whether it is actually needed.
Given that BOUNCE_BUFFER only controls whether the bounce_buffer_* functions are build and linked, this configuration option could be entirely removed and the utility functions built unconditionally. For platforms that don't make use of these functions, the linker will then remove the unused symbols.
I'll leave the final decision if this would be a better implementation (or if this should be done in a two-stage process) to someone else... END.
I think this is a good idea, but I get build errors after applying patch 2/6 since CONFIG_BOUNCE_BUFFER is now enabled via Kconfig and defined as 1 while at the same time it is just defined (but to nothing) in socfpga_common.h.
This is a problem of having multiple individual patches for a moveconfig-style change. You need the final patch (6/6) in addition to (1/6) for socfpga.
Can you change or reorder this series so that every commit compiles?
There’s a couple options (none of they appeal to me):
- I lump everything together into one big change.
- I have a complete moveconfig (i.e. polluting all defconfig files) in the first patch and the individual changes to the MMC drivers then remove the defconfig entries for their platforms.
- We skip this part of the conversion and directly skip forward to having bounce-buffer always included and leave the cleanup to the linker…
I’m happy to change this to any of the 3 options (although I’ll probably need a shower afterwards to feel less dirty, if we go with option #1 …)
I now tried option #2, but that leads to the final patch being subsumed into the first one (i.e. the maintainers of socfpga and the bcm* ports don’t get a chance to say “we confirm that this is not needed, just drop patch 6/6”).
So this boils down to whether Tom is ok with this being a series that has failures if not fully applied (i.e. patch 1/1 leaving loose ends that the follow-on patches address on a per-MMC-controller and per-platform basis)… …or if we skip the conversion and trust the linker to do the right thing.
Thanks, Philipp.

On Fri, Nov 30, 2018 at 04:30:53PM +0100, Philipp Tomsich wrote:
Tom,
On 30.11.2018, at 15:13, Philipp Tomsich philipp.tomsich@theobroma-systems.com wrote:
Simon,
On 30.11.2018, at 14:55, Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com mailto:simon.k.r.goldschmidt@gmail.com> wrote:
[cut down CC list as gmail won't let me send to that many people :-( ]
Sometimes I wonder if patman will at some point get a feature to avoid those endless CC lists for changes like this one.
Am 30.11.2018 um 12:39 schrieb Philipp Tomsich:
A number of MMC drivers uses BOUNCE_BUFFER for their DMA buffers. This moves it into Kconfig and performs a step-by-step migration for the affected boards/drivers.
In doing so, it turns out that a few boards/configs enabled CONFIG_BOUNCE_BUFFER in their config headers without an apparent need. The migration (using moveconfig) for those boards is kept in a separate patch, so it can be more easily reviewed by the affected parties to make a determination whether it is actually needed.
Given that BOUNCE_BUFFER only controls whether the bounce_buffer_* functions are build and linked, this configuration option could be entirely removed and the utility functions built unconditionally. For platforms that don't make use of these functions, the linker will then remove the unused symbols.
I'll leave the final decision if this would be a better implementation (or if this should be done in a two-stage process) to someone else... END.
I think this is a good idea, but I get build errors after applying patch 2/6 since CONFIG_BOUNCE_BUFFER is now enabled via Kconfig and defined as 1 while at the same time it is just defined (but to nothing) in socfpga_common.h.
This is a problem of having multiple individual patches for a moveconfig-style change. You need the final patch (6/6) in addition to (1/6) for socfpga.
Can you change or reorder this series so that every commit compiles?
There’s a couple options (none of they appeal to me):
- I lump everything together into one big change.
- I have a complete moveconfig (i.e. polluting all defconfig files) in the first patch and the individual changes to the MMC drivers then remove the defconfig entries for their platforms.
- We skip this part of the conversion and directly skip forward to having bounce-buffer always included and leave the cleanup to the linker…
I’m happy to change this to any of the 3 options (although I’ll probably need a shower afterwards to feel less dirty, if we go with option #1 …)
I now tried option #2, but that leads to the final patch being subsumed into the first one (i.e. the maintainers of socfpga and the bcm* ports don’t get a chance to say “we confirm that this is not needed, just drop patch 6/6”).
So this boils down to whether Tom is ok with this being a series that has failures if not fully applied (i.e. patch 1/1 leaving loose ends that the follow-on patches address on a per-MMC-controller and per-platform basis)… …or if we skip the conversion and trust the linker to do the right thing.
So, what I was thinking I would do here at first was see if we see any size changes with this series, and if none, then see what happens if we drop these "enabling but doesn't look used" cases, and see what's going on. It wouldn't be the first case where it turns out we have something enabled and then being discarded as unused and people didn't realize it.

Sorry for the broken format in the last mail. Seems like thunderbird broke my setup after upgrading to v60...
Am 30.11.2018 um 16:30 schrieb Philipp Tomsich:
Tom,
On 30.11.2018, at 15:13, Philipp Tomsich <philipp.tomsich@theobroma-systems.com mailto:philipp.tomsich@theobroma-systems.com> wrote:
Simon,
On 30.11.2018, at 14:55, Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com mailto:simon.k.r.goldschmidt@gmail.com> wrote:
[cut down CC list as gmail won't let me send to that many people :-( ]
Sometimes I wonder if patman will at some point get a feature to avoid those endless CC lists for changes like this one.
Am 30.11.2018 um 12:39 schrieb Philipp Tomsich:
A number of MMC drivers uses BOUNCE_BUFFER for their DMA buffers. This moves it into Kconfig and performs a step-by-step migration for the affected boards/drivers.
In doing so, it turns out that a few boards/configs enabled CONFIG_BOUNCE_BUFFER in their config headers without an apparent need. The migration (using moveconfig) for those boards is kept in a separate patch, so it can be more easily reviewed by the affected parties to make a determination whether it is actually needed.
Given that BOUNCE_BUFFER only controls whether the bounce_buffer_* functions are build and linked, this configuration option could be entirely removed and the utility functions built unconditionally. For platforms that don't make use of these functions, the linker will then remove the unused symbols.
I'll leave the final decision if this would be a better implementation (or if this should be done in a two-stage process) to someone else... END.
I think this is a good idea, but I get build errors after applying patch 2/6 since CONFIG_BOUNCE_BUFFER is now enabled via Kconfig and defined as 1 while at the same time it is just defined (but to nothing) in socfpga_common.h.
This is a problem of having multiple individual patches for a moveconfig-style change. You need the final patch (6/6) in addition to (1/6) for socfpga.
Can you change or reorder this series so that every commit compiles?
There’s a couple options (none of they appeal to me): 1.I lump everything together into one big change. 2.I have a complete moveconfig (i.e. polluting all defconfig files) in the first patch and the individual changes to the MMC drivers then remove the defconfig entries for their platforms. 3.We skip this part of the conversion and directly skip forward to having bounce-buffer always included and leave the cleanup to the linker…
I’m happy to change this to any of the 3 options (although I’ll probably need a shower afterwards to feel less dirty, if we go with option #1 …)
I now tried option #2, but that leads to the final patch being subsumed into the first one (i.e. the maintainers of socfpga and the bcm* ports don’t get a chance to say “we confirm that this is not needed, just drop patch 6/6”).
So this boils down to whether Tom is ok with this being a series that has failures if not fully applied (i.e. patch 1/1 leaving loose ends that the follow-on patches address on a per-MMC-controller and per-platform basis)… …or if we skip the conversion and trust the linker to do the right thing.
Ok, in that case, I'll leave it up to Tom or others to decide.
Simon
participants (6)
-
Alexey Brodkin
-
Fabio Estevam
-
Otavio Salvador
-
Philipp Tomsich
-
Simon Goldschmidt
-
Tom Rini