From mboxrd@z Thu Jan 1 00:00:00 1970
From: Przemyslaw Marczak
Date: Tue, 17 Jun 2014 12:20:04 +0200
Subject: [U-Boot] [PATCH v2 04/11] drivers:dfu: new feature: separated
bootloader alt setting
In-Reply-To: <539F4B18.2040406@wwwdotorg.org>
References: <1402399510-8965-1-git-send-email-p.marczak@samsung.com>
<1402566394-23342-1-git-send-email-p.marczak@samsung.com>
<1402566394-23342-4-git-send-email-p.marczak@samsung.com>
<539F4B18.2040406@wwwdotorg.org>
Message-ID: <53A01654.1050407@samsung.com>
List-Id:
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
To: u-boot@lists.denx.de
Hello Stephen,
On 06/16/2014 09:52 PM, Stephen Warren wrote:
> On 06/12/2014 03:46 AM, Przemyslaw Marczak wrote:
>> This patch introduces new feature: initialization of the dfu
>> bootloader entity from a separate environmental variable which
>> can be set on a boot time.
>>
>> By default, DFU always check environmental variable: $dfu_alt_info.
>>
>> Changes:
>> - DFU will also look for environmental variable: $dfu_alt_bootloader
>> - if any of dfu_alt_* variable is properly defined, then function
>> dfu_init_env_entities() will return success.
>>
>> Use case:
>> Some devices can boot from various media type (SD, eMMC, NAND, etc.)
>> or some board configs are common for more than one board type.
>> In a such case, bootloader is probably placed on a different
>> devices or even offsets. So such DFU feature is welcome.
>
> Why should the "dfu" command look at different environment variables?
> Whatever code dynamically sets the value of $dfu_alt_bootloader should
> simply set $dfu_alt_info instead.
>
Dynamically setting of any entity cold be done at boot time, like this:
# int buf_len = strlen(alt_bootloader) + strlen(CONFIG_DFU_ALT) + 4;
# char *buf = memalign(1, buf_len);
#
# sprintf(buf, "%s; %s", alt_bootloader, CONFIG_DFU_ALT);
# setenv("dfu_alt_info", buf);
But overwriting the $dfu_alt_info on each boot is not a good idea.
If user modify the dfu entities - then it will be overwritten at next boot.
In the other side I can store entities as $dfu_alt_default
and change the above code to:
# char *alt_default = getenv("dfu_alt_default");
# if (!alt_default)
# alt_default = "";
#
# int buf_len = strlen(alt_bootloader) + strlen(alt_default) + 4;
# char *buf = memalign(1, buf_len);
#
# sprintf(buf, "%s; %s", alt_bootloader, alt_default);
# setenv("dfu_alt_info", buf);
But then, there is some mess in the environment because of duplicated
default alt_info.
Those both, above solutions takes more time than just one simple line:
# setenv("dfu_alt_bootlaoder", CONFIG_SOME_ALT_INFO);
like in this patch set.
Maybe better could be modification of the function
dfu_init_env_entities() to support parsing variables
in the $dfu_alt_info instead of hard coded env variables
names, e.g:
dfu_alt_info="${alt_info_boot}, ${alt_info_system},..."
dfu_alt_info could be set with default variables names in each board
config file in the CONFIG_EXTRA_ENV_SETTINGS and then just one proper
variable could be set at boot, and others from env - simple and fast.
And then in the dfu init code - entities are initialized from env
variables - if they exists, like in the loop code from this patch.
I need some solution to automatically set proper bootloader entities,
since one binary can be stored on SD and eMMC cards.
Thank you,
--
Przemyslaw Marczak
Samsung R&D Institute Poland
Samsung Electronics
p.marczak at samsung.com