From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Date: Tue, 13 Nov 2018 13:14:57 +0100 Subject: [U-Boot] [PATCH v2 1/5] mtd: Use default mtdparts/mtids when not defined in the environment In-Reply-To: <20181113123449.1f0fd144@bbrezillon> References: <20181112082809.7035-1-boris.brezillon@bootlin.com> <20181113123449.1f0fd144@bbrezillon> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 11/13/2018 12:34 PM, Boris Brezillon wrote: > On Tue, 13 Nov 2018 12:01:06 +0100 > Marek Vasut 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 >>> Signed-off-by: Boris Brezillon >>> Tested-by: Stefan Roese >>> --- >>> 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