[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