mtd: Use default mtdparts/mtids when not defined in the environment
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: 5db66b3aee
("cmd: mtd: add 'mtd' command")
Reported-by: Stefan Roese <sr@denx.de>
Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
Tested-by: Stefan Roese <sr@denx.de>
Reviewed-by: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Jagan Teki <jagan@openedev.com>
This commit is contained in:
parent
c80cc3df3d
commit
5ffcd50612
@ -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)
|
||||
mtdparts = tmp_parts;
|
||||
|
||||
if (mtdparts || !use_defaults)
|
||||
return mtdparts;
|
||||
|
||||
#if defined(CONFIG_SYS_MTDPARTS_RUNTIME)
|
||||
board_mtdparts_default(&mtdids, &mtdparts);
|
||||
#elif defined(MTDPARTS_DEFAULT)
|
||||
mtdparts = MTDPARTS_DEFAULT;
|
||||
#elif defined(CONFIG_MTDPARTS_DEFAULT)
|
||||
mtdparts = CONFIG_MTDPARTS_DEFAULT;
|
||||
#endif
|
||||
|
||||
if (mtdparts)
|
||||
env_set("mtdparts", mtdparts);
|
||||
|
||||
use_defaults = false;
|
||||
|
||||
return mtdparts;
|
||||
}
|
||||
|
||||
int mtd_probe_devices(void)
|
||||
{
|
||||
static char *old_mtdparts;
|
||||
static char *old_mtdids;
|
||||
const char *mtdparts = env_get("mtdparts");
|
||||
const char *mtdids = env_get("mtdids");
|
||||
const char *mtdparts = get_mtdparts();
|
||||
const char *mtdids = get_mtdids();
|
||||
bool remaining_partitions = true;
|
||||
struct mtd_info *mtd;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user