[U-Boot] [PATCH v2 1/5] mtd: Use default mtdparts/mtids when not defined in the environment
Marek Vasut
marek.vasut at gmail.com
Tue Nov 13 12:14:57 UTC 2018
On 11/13/2018 12:34 PM, Boris Brezillon wrote:
> On Tue, 13 Nov 2018 12:01:06 +0100
> Marek Vasut <marek.vasut at gmail.com> wrote:
>
>> On 11/12/2018 09:28 AM, Boris Brezillon wrote:
>>> U-boot provides a mean to define default values for mtdids and mtdparts
>>> when they're not defined in the environment. Patch mtd_probe_devices()
>>> to use those default values when env_get("mtdparts") or
>>> env_get("mtdids") return NULL.
>>>
>>> This implementation is based on the logic found in cmd/mtdparts.c.
>>>
>>> Fixes: 5db66b3aee6f ("cmd: mtd: add 'mtd' command")
>>> Reported-by: Stefan Roese <sr at denx.de>
>>> Signed-off-by: Boris Brezillon <boris.brezillon at bootlin.com>
>>> Tested-by: Stefan Roese <sr at denx.de>
>>> ---
>>> Changes in v2:
>>> - none
>>> ---
>>> drivers/mtd/mtd_uboot.c | 62 +++++++++++++++++++++++++++++++++++++++--
>>> 1 file changed, 60 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/mtd/mtd_uboot.c b/drivers/mtd/mtd_uboot.c
>>> index 7d7a11c990d6..1d0a505754f2 100644
>>> --- a/drivers/mtd/mtd_uboot.c
>>> +++ b/drivers/mtd/mtd_uboot.c
>>> @@ -92,12 +92,70 @@ static void mtd_probe_uclass_mtd_devs(void) { }
>>> #endif
>>>
>>> #if defined(CONFIG_MTD_PARTITIONS)
>>> +extern void board_mtdparts_default(const char **mtdids,
>>> + const char **mtdparts);
>>> +
>>> +static const char *get_mtdids(void)
>>> +{
>>> + __maybe_unused const char *mtdparts = NULL;
>>> + const char *mtdids = env_get("mtdids");
>>> +
>>> + if (mtdids)
>>> + return mtdids;
>>> +
>>> +#if defined(CONFIG_SYS_MTDPARTS_RUNTIME)
>>> + board_mtdparts_default(&mtdids, &mtdparts);
>>> +#elif defined(MTDIDS_DEFAULT)
>>> + mtdids = MTDIDS_DEFAULT;
>>> +#elif defined(CONFIG_MTDIDS_DEFAULT)
>>> + mtdids = CONFIG_MTDIDS_DEFAULT;
>>> +#endif
>>> +
>>> + if (mtdids)
>>> + env_set("mtdids", mtdids);
>>> +
>>> + return mtdids;
>>> +}
>>> +
>>> +#define MTDPARTS_MAXLEN 512
>>> +
>>> +static const char *get_mtdparts(void)
>>> +{
>>> + __maybe_unused const char *mtdids = NULL;
>>> + static char tmp_parts[MTDPARTS_MAXLEN];
>>> + static bool use_defaults = true;
>>> + const char *mtdparts = NULL;
>>> +
>>> + if (gd->flags & GD_FLG_ENV_READY)
>>> + mtdparts = env_get("mtdparts");
>>> + else if (env_get_f("mtdparts", tmp_parts, sizeof(tmp_parts) != -1))
>> sizeof(tmp_parts) != -1 is always true, the parenthesis are misplaced.
>>
>> Also, include/common.h says that
>> * env_get_f() - Look up the value of an environment variable (early)
>> ...
>> * @return value of variable, or NULL if not found
>
> That's clearly not matching the implementation [1].
>
> [1]https://elixir.bootlin.com/u-boot/v2018.11-rc3/source/cmd/nvedit.c#L680
Another thing to fix ...
--
Best regards,
Marek Vasut
More information about the U-Boot
mailing list