The eMMC standard describes the concept of boot partitions, consisting
of two storage areas separate from the main user data partition.
The Allwinner BootROM supports loading SPL/Boot0 from such a boot
partition, if that is configured in the eMMC device [1].

To load U-Boot proper along with the SPL from there, currently this
requires to enable CONFIG_SUPPORT_EMMC_BOOT, and this means that this
build won't boot from the normal eMMC user partition anymore.
Also the raw MMC sector offset needs to be adjusted manually, preventing
a boot from an SD card.

This series introduces automatic detection of eMMC boot partition boot.
Patch 3/5 automates the raw MMC sector offset decision, allowing such
a build to also boot from an SD card.
Unfortunately the BootROM does not mark an eMMC boot partition boot
differently from the normal eMMC user data partition boot, so patch 4/5
introduces a function that repeats the BootROM algorithm, so that the SPL
comes to the same conclusion as the BootROM. This allows to build one
single image that boots from everywhere: eMMC user data, eMMC boot,
SD card, SPI flash.
Patch 1/5 contains a bugfix that's needed in a later patch, patch 2/5
extends the generic spl_mmc_boot_mode() interface to make 4/5 feasible.

Without enabling CONFIG_SUPPORT_EMMC_BOOT, the AArch64 SPL grows by
92 bytes, ARMv7 grows by 36 bytes. With enabling the feature, the size
goes up by 444 bytes (AArch64) and 260 bytes (ARMv7).
Even for AArch64 this is still 4.5 KB below the SPL limit, so patch 5/5
enables this new mechanism for some boards I could test this on.

Please have a look and test this if you have a board with eMMC.
I put installation instructions into the linux-sunxi Wiki:
http://linux-sunxi.org/Bootable_eMMC

Cheers,
Andre

[1] http://linux-sunxi.org/Bootable_eMMC#The_BROM_implementation_details

Andre Przywara (5):
  sunxi: Fix is_boot0_magic macro
  spl: mmc: extend spl_mmc_boot_mode() to take mmc argument
  sunxi: Simplify eMMC boot partition booting
  sunxi: eMMC: Add automatic boot detection
  sunxi: defconfig: enable eMMC boot partition support

 arch/arm/include/asm/arch-sunxi/spl.h      |  2 +-
 arch/arm/mach-imx/spl.c                    |  2 +-
 arch/arm/mach-k3/am6_init.c                |  2 +-
 arch/arm/mach-k3/j721e_init.c              |  2 +-
 arch/arm/mach-omap2/boot-common.c          |  2 +-
 arch/arm/mach-rockchip/spl.c               |  2 +-
 arch/arm/mach-socfpga/spl_a10.c            |  2 +-
 arch/arm/mach-socfpga/spl_agilex.c         |  2 +-
 arch/arm/mach-socfpga/spl_gen5.c           |  2 +-
 arch/arm/mach-socfpga/spl_s10.c            |  2 +-
 arch/arm/mach-stm32mp/spl.c                |  2 +-
 arch/arm/mach-sunxi/board.c                | 94 +++++++++++++++++++++-
 arch/arm/mach-uniphier/mmc-boot-mode.c     |  5 +-
 common/spl/spl_mmc.c                       |  4 +-
 configs/bananapi_m64_defconfig             |  1 +
 configs/emlid_neutis_n5_devboard_defconfig |  1 +
 configs/pine64-lts_defconfig               |  1 +
 configs/pine_h64_defconfig                 |  1 +
 include/spl.h                              |  3 +-
 19 files changed, 113 insertions(+), 19 deletions(-)

-- 
2.17.5

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/linux-sunxi/20201108131409.14320-1-andre.przywara%40arm.com.

Reply via email to