[PATCH] cmd: mmc: add mmc partboot

Jaehoon Chung jh80.chung at samsung.com
Tue Feb 16 00:30:59 CET 2021


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 at 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-grembeter@outlook.com/


> 
> 
> 
>>
>> Best Regards,
>> Jaehoon Chung
>>
>>>
>>> Signed-off-by: Grygorii Tertychnyi <
>> grygorii.tertychnyi at 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"
>>>
>>
>>
> 



More information about the U-Boot mailing list