
This series has two parts: patches 1-7 perform refactors aimed at reducing the ifdef complexity of SPL mmc code (and some nand as well). This refactor also addresses a few design issues I noticed while working on the refactor.
Image size comparison for arm modules can be seen here: http://patchwork.ozlabs.org/patch/534387/ Since the changes in V2 are minimal, the V1 results should still be valid for the V2 as well.
The rest of the series introduces a new SPL feature that allows board code to define a list of boot devices that SPL will try before failing (instead of the only one device it attempts now). This feature is useful for implementing fallbacks, as well as reacting to bootROM sequences. For example:
On CM-FX6, if boot from the alternate boot device (MMC) fails, the bootROM proceeds to try boot from SPI flash. If the SPI flash boot is succesful, SPL will still try to load U-Boot from MMC, instead of from the actual boot device SPI flash), and probably fail and hang. The alternate boot feature makes it possible for SPL to follow the MMC boot attempt with boot from the SPI flash. The CM-FX6 based miniature PC Utilite depends on this capability for its SPI flash boot to work, since SPI flash boot is only attempted if MMC boot fails.
Finally, patch 13 makes SPL look at the specific BOOT_DEVICE_MMCx, and search for the correct mmc device, instead of always going for mmc0.
This series was compile tested for arm and powerpc (patches 1-12). Patch 13 compile tested for sunxi. Tested on CM-FX6.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com Cc: Hans de Goede hdegoede@redhat.com Cc: Pantelis Antoniou panto@antoniou-consulting.com Cc: Otavio Salvador otavio.salvador@ossystems.com.br
Changes in V4: - Rebased over current mainline. Rerun compile test for arm and powerpc - Fixed typo in a commit message - Moved announce_boot_device() code to after #ifndef BOOT_DEVICE_NONE - Replaced one puts with printf
Changes in V3: - Added documentation for spl_board_load_image(). - Reworked announce_boot_device() to make the code less repititive by utilizing a table of boot_device --> name.
Changes in V2: - Per request I went over the changes to see if they should cause documentation updates or board updates, but found none to be necessary. - Slight modification in patch 2 (and consequentially patch 8): removal of hang() in default switch case, and enclosing of default case in #ifdef LIBCONFIG to avoid compiler complaints if LIBCONFIG support not compiled in. - Patch 13 is a new patch which makes SPL look at the value of BOOT_DEVICE_MMCx instead of always working with mmc0. A hack in sunxi boards that attempted to circumvent this issue is thus removed. - Rebased over current mainline.
Nikita Kiryanov (13): spl: nand: remove code duplication spl: mmc: add break statements in spl_mmc_load_image() spl: mmc: refactor device location code to its own function spl: mmc: remove #ifdef CONFIG_SPL_OS_BOOT check spl: mmc: get rid of #ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION check spl: mmc: move fs boot into its own function spl: mmc: get rid of emmc boot code duplication spl: change return values of spl_*_load_image() common: spl: move image load to its own function spl: add support for alternative boot device spl: announce boot devices arm: mx6: cm-fx6: define fallback boot devices for spl spl: mmc: add support for BOOT_DEVICE_MMC2
arch/arm/cpu/armv7/sunxi/board.c | 14 +- arch/arm/include/asm/spl.h | 10 +- board/compulab/cm_fx6/spl.c | 19 +-- common/spl/spl.c | 194 +++++++++++++++++++------- common/spl/spl_ext.c | 6 + common/spl/spl_fat.c | 6 + common/spl/spl_mmc.c | 290 ++++++++++++++++++++++++--------------- common/spl/spl_nand.c | 47 ++++--- common/spl/spl_net.c | 9 +- common/spl/spl_nor.c | 6 +- common/spl/spl_onenand.c | 4 +- common/spl/spl_sata.c | 11 +- common/spl/spl_usb.c | 17 ++- common/spl/spl_ymodem.c | 5 +- drivers/mtd/spi/spi_spl_load.c | 17 ++- include/configs/cm_fx6.h | 1 - include/spl.h | 18 +-- 17 files changed, 446 insertions(+), 228 deletions(-)