mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
smegw01: Enable EMMC boot from multiple partitions
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>
This commit is contained in:
parent
52726d24d6
commit
31c6c79a01
3 changed files with 20 additions and 4 deletions
|
@ -17,6 +17,7 @@
|
||||||
#include <asm/arch/crm_regs.h>
|
#include <asm/arch/crm_regs.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/bootm.h>
|
#include <asm/bootm.h>
|
||||||
|
#include <mmc.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
@ -93,3 +94,12 @@ int board_late_init(void)
|
||||||
|
|
||||||
return 0;
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ CONFIG_CMD_MEMTEST=y
|
||||||
CONFIG_CMD_UNZIP=y
|
CONFIG_CMD_UNZIP=y
|
||||||
CONFIG_CMD_DFU=y
|
CONFIG_CMD_DFU=y
|
||||||
CONFIG_CMD_GPIO=y
|
CONFIG_CMD_GPIO=y
|
||||||
|
CONFIG_CMD_GPT=y
|
||||||
CONFIG_CMD_MMC=y
|
CONFIG_CMD_MMC=y
|
||||||
CONFIG_CMD_PART=y
|
CONFIG_CMD_PART=y
|
||||||
CONFIG_CMD_DHCP=y
|
CONFIG_CMD_DHCP=y
|
||||||
|
@ -44,6 +45,7 @@ CONFIG_OF_CONTROL=y
|
||||||
CONFIG_ENV_OVERWRITE=y
|
CONFIG_ENV_OVERWRITE=y
|
||||||
CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
|
CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
|
||||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||||
|
CONFIG_SYS_MMC_ENV_DEV=1
|
||||||
CONFIG_NET_RANDOM_ETHADDR=y
|
CONFIG_NET_RANDOM_ETHADDR=y
|
||||||
CONFIG_BOUNCE_BUFFER=y
|
CONFIG_BOUNCE_BUFFER=y
|
||||||
CONFIG_BOOTCOUNT_LIMIT=y
|
CONFIG_BOOTCOUNT_LIMIT=y
|
||||||
|
|
|
@ -32,17 +32,21 @@
|
||||||
"mmcpart=1\0" \
|
"mmcpart=1\0" \
|
||||||
"mmcpart_committed=1\0" \
|
"mmcpart_committed=1\0" \
|
||||||
"mmcargs=setenv bootargs console=${console},${baudrate} " \
|
"mmcargs=setenv bootargs console=${console},${baudrate} " \
|
||||||
"root=/dev/mmcblk0p${mmcpart_committed} rootwait rw " \
|
"root=/dev/mmcblk${mmcdev}p${gpt_partition_entry} rootwait rw " \
|
||||||
__stringify(EXTRA_BOOTPARAMS) "\0" \
|
__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 " \
|
"commit_mmc=if test \"${ustate}\" = 1 -a \"${mmcpart}\" != \"${mmcpart_committed}\"; then " \
|
||||||
"setenv mmcpart_committed ${mmcpart};" \
|
"setenv mmcpart_committed ${mmcpart};" \
|
||||||
"saveenv;" \
|
"saveenv;" \
|
||||||
"fi;\0" \
|
"fi;\0" \
|
||||||
"bootlimit=3\0" \
|
"bootlimit=3\0" \
|
||||||
"loadimage=load mmc ${mmcdev}:${mmcpart_committed} ${loadaddr} boot/${image}\0" \
|
"loadimage=load mmc ${mmcdev}#rootfs-${mmcpart_committed} ${loadaddr} boot/${image}\0" \
|
||||||
"loadfdt=load mmc ${mmcdev}:${mmcpart_committed} ${fdt_addr} boot/${fdtfile}\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 ...; " \
|
"mmcboot=echo Booting from mmc ...; " \
|
||||||
"run commit_mmc; " \
|
"run commit_mmc; " \
|
||||||
|
"run loadpart; " \
|
||||||
|
"run loadbootpart; " \
|
||||||
"run mmcargs; " \
|
"run mmcargs; " \
|
||||||
"if run loadfdt; then " \
|
"if run loadfdt; then " \
|
||||||
"if bootz ${loadaddr} - ${fdt_addr}; then " \
|
"if bootz ${loadaddr} - ${fdt_addr}; then " \
|
||||||
|
|
Loading…
Reference in a new issue