]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
smegw01: Enable EMMC boot from multiple partitions
authorEduard Strehlau <eduard@lionizers.com>
Wed, 26 Apr 2023 16:04:54 +0000 (13:04 -0300)
committerStefano Babic <sbabic@denx.de>
Tue, 2 May 2023 08:57:32 +0000 (10:57 +0200)
GPT Partition labels are used for determining the right
root filesystem to boot from.

The U-Boot environment is configured to reside in the eMMC hardware
boot partition we are currently booted from.

This should enable a dual copy approach for upgrading the bootloader.
One can overwrite the inactive hardware partition with new bootloader
and environment and afterwards switch the eMMC boot partition for an
atomic bootloader switch.

Signed-off-by: Eduard Strehlau <eduard@lionizers.com>
Signed-off-by: Fabio Estevam <festevam@denx.de>
board/storopack/smegw01/smegw01.c
configs/smegw01_defconfig
include/configs/smegw01.h

index e6bff80e5565956d5ddf0e93d37d85d99b6dc027..7d4de9326d6f1109ca4a27d2064e68c11b9b4a67 100644 (file)
@@ -17,6 +17,7 @@
 #include <asm/arch/crm_regs.h>
 #include <asm/setup.h>
 #include <asm/bootm.h>
+#include <mmc.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -93,3 +94,12 @@ int board_late_init(void)
 
        return 0;
 }
+
+uint board_mmc_get_env_part(struct mmc *mmc)
+{
+       uint part = EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config);
+
+       if (part == 7)
+               part = 0;
+       return part;
+}
index b3580d5d6e54c38624f12f1141042ec1549a6b28..54cf1cfc1f1bc94f21289b0ec87a759779a0d09c 100644 (file)
@@ -30,6 +30,7 @@ CONFIG_CMD_MEMTEST=y
 CONFIG_CMD_UNZIP=y
 CONFIG_CMD_DFU=y
 CONFIG_CMD_GPIO=y
+CONFIG_CMD_GPT=y
 CONFIG_CMD_MMC=y
 CONFIG_CMD_PART=y
 CONFIG_CMD_DHCP=y
@@ -44,6 +45,7 @@ CONFIG_OF_CONTROL=y
 CONFIG_ENV_OVERWRITE=y
 CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
 CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+CONFIG_SYS_MMC_ENV_DEV=1
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_BOUNCE_BUFFER=y
 CONFIG_BOOTCOUNT_LIMIT=y
index 277c828d0e07815cb2b8777ee3ab567101f4a75b..71f2d9c8e85cd43b0ed004eef4edb177ba4f8385 100644 (file)
        "mmcpart=1\0" \
        "mmcpart_committed=1\0" \
        "mmcargs=setenv bootargs console=${console},${baudrate} " \
-               "root=/dev/mmcblk0p${mmcpart_committed} rootwait rw " \
-               __stringify(EXTRA_BOOTPARAMS) "\0" \
+               "root=/dev/mmcblk${mmcdev}p${gpt_partition_entry} rootwait rw " \
+               __stringify(EXTRA_BOOTPARAMS) " SM_ROOT_DEV=${mmcdev} SM_ROOT_PART=${gpt_partition_entry} SM_BOOT_PART=${boot_part}\0" \
        "commit_mmc=if test \"${ustate}\" = 1 -a \"${mmcpart}\" != \"${mmcpart_committed}\"; then " \
                      "setenv mmcpart_committed ${mmcpart};" \
                                                                "saveenv;" \
                                                  "fi;\0" \
        "bootlimit=3\0" \
-       "loadimage=load mmc ${mmcdev}:${mmcpart_committed} ${loadaddr} boot/${image}\0" \
-       "loadfdt=load mmc ${mmcdev}:${mmcpart_committed} ${fdt_addr} boot/${fdtfile}\0" \
+       "loadimage=load mmc ${mmcdev}#rootfs-${mmcpart_committed} ${loadaddr} boot/${image}\0" \
+       "loadfdt=load mmc ${mmcdev}#rootfs-${mmcpart_committed} ${fdt_addr} boot/${fdtfile}\0" \
+       "loadpart=gpt setenv mmc ${mmcdev} rootfs-${mmcpart_committed}\0" \
+       "loadbootpart=mmc partconf 1 boot_part\0" \
        "mmcboot=echo Booting from mmc ...; " \
          "run commit_mmc; " \
+               "run loadpart; " \
+               "run loadbootpart; " \
                "run mmcargs; " \
                "if run loadfdt; then " \
                        "if bootz ${loadaddr} - ${fdt_addr}; then " \