
Hi Grygorii,
On 2/15/21 10:04 PM, gr embeter wrote:
Hello Jaehoon,
On Sun, 14 Feb 2021 at 23:08 Jaehoon Chung jh80.chung@samsung.com wrote:
Dear Grygorii,
On 2/12/21 7:32 PM, grygorii tertychnyi wrote:
This patch allows to determine active boot partition in boot script:
if mmc partboot ${mmcdev} 2; then echo "booted from eMMC boot1 partition" fi
I don't know what purpose this patch has.
With an eMMC as a boot source I have two boot partitions, i.e. “boot1” and “boot2”, with two different versions of U-Boot on each partition.
I also have two different kernels located on eMMC “user” partition, let’s say “image1” and “image2”.
So, I want to boot “image1” kernel if it is U-boot from “boot1” partition is booted now, and to boot “image2” kernel if it is U-boot from “boot2” partition is booted.
It is easy to do it manually. I just added possibility to do it with U-boot script now, because “mmc partconf ...” does not let you check the current boot partition with hush.
Hope, I explained the purpose.
I remembered. Because i feel to see similar patch to use bootpart. At that time, i also asked same question. Sorry for not remembered yours.
https://patchwork.ozlabs.org/project/uboot/patch/20201212074633.891704-1-gre...
Best Regards, Jaehoon Chung
Signed-off-by: Grygorii Tertychnyi <
grygorii.tertychnyi@leica-geosystems.com>
cmd/mmc.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+)
diff --git a/cmd/mmc.c b/cmd/mmc.c index 1529a3e05ddd..010d6ab9aa19 100644 --- a/cmd/mmc.c +++ b/cmd/mmc.c @@ -771,6 +771,41 @@ static int do_mmc_boot_resize(struct cmd_tbl
*cmdtp, int flag,
return CMD_RET_SUCCESS;
}
+static int do_mmc_partboot(struct cmd_tbl *cmdtp, int flag,
int argc, char *const argv[])
+{
int dev;
struct mmc *mmc;
u8 part_args, part_emmc;
if (argc != 3)
return CMD_RET_USAGE;
dev = simple_strtoul(argv[1], NULL, 10);
mmc = init_mmc_device(dev, false);
if (!mmc)
return CMD_RET_FAILURE;
if (IS_SD(mmc)) {
puts("PARTITION_CONFIG only exists on eMMC\n");
return CMD_RET_FAILURE;
}
if (mmc->part_config == MMCPART_NOAVAILABLE) {
printf("No part_config info for ver. 0x%x\n",
mmc->version);
return CMD_RET_FAILURE;
}
part_emmc = EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config);
part_args = simple_strtoul(argv[2], NULL, 10);
if (part_emmc == part_args)
return CMD_RET_SUCCESS;
else
return CMD_RET_FAILURE;
+}
static int mmc_partconf_print(struct mmc *mmc) { u8 ack, access, part; @@ -953,6 +988,7 @@ static struct cmd_tbl cmd_mmc[] = { #ifdef CONFIG_SUPPORT_EMMC_BOOT U_BOOT_CMD_MKENT(bootbus, 5, 0, do_mmc_bootbus, "", ""), U_BOOT_CMD_MKENT(bootpart-resize, 4, 0, do_mmc_boot_resize, "",
""),
U_BOOT_CMD_MKENT(partboot, 3, 0, do_mmc_partboot, "", ""),
partboot can be confused. how about changing more clear name, like mmc_bootpart_check?
U_BOOT_CMD_MKENT(partconf, 5, 0, do_mmc_partconf, "", ""), U_BOOT_CMD_MKENT(rst-function, 3, 0, do_mmc_rst_func, "", ""),
#endif @@ -1021,6 +1057,9 @@ U_BOOT_CMD( " - Set the BOOT_BUS_WIDTH field of the specified device\n" "mmc bootpart-resize <dev> <boot part size MB> <RPMB part size
MB>\n"
" - Change sizes of boot and RPMB partitions of specified device\n"
"mmc partboot dev boot_partition\n"
why it needs to pass "boot_partition"? And use more clear usage..with optional or mandatory. <> - mandatory [] - optional
mmc partboot <dev>
" - Return success if the given boot_partition value matches
BOOT_PARTITION_ENABLE\n"
" bit field of the specified device\n" "mmc partconf dev [boot_ack boot_partition partition_access]\n" " - Show or change the bits of the PARTITION_CONFIG field of the
specified device\n"
"mmc rst-function dev value\n"