[U-Boot] [PATCH v2 1/5] mtd: Use default mtdparts/mtids when not defined in the environment

Boris Brezillon boris.brezillon at bootlin.com
Tue Nov 13 11:34:49 UTC 2018


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


More information about the U-Boot mailing list