On Sun, Nov 8, 2020 at 1:14 PM Andre Przywara <andre.przyw...@arm.com> wrote: > > 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
It would probably be good to put that link in the local Allwinner docs so it's easier for people to find. Peter > 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 >