[U-Boot] [PATCH V4 00/13] SPL mmc refactor and alternate boot device feature

Nikita Kiryanov nikita at compulab.co.il
Sun Nov 8 16:11:41 CET 2015


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 at compulab.co.il>
Cc: Tom Rini <trini at konsulko.com>
Cc: Hans de Goede <hdegoede at redhat.com>
Cc: Pantelis Antoniou <panto at antoniou-consulting.com>
Cc: Otavio Salvador <otavio.salvador at 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(-)

-- 
1.9.1



More information about the U-Boot mailing list