mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-29 08:00:26 +09:00
stm32mp1: support dynamic MTDPARTS
This patch configure the default value for mtdids and mtparts dynamically according the presence of nor and nand in the board device tree Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com> Signed-off-by: Christophe Kerello <christophe.kerello@st.com> Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
This commit is contained in:
parent
c4a739ad50
commit
87471649a5
@ -504,3 +504,88 @@ void board_quiesce_devices(void)
|
||||
{
|
||||
setup_led(LEDST_OFF);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SYS_MTDPARTS_RUNTIME
|
||||
|
||||
#define MTDPARTS_LEN 256
|
||||
#define MTDIDS_LEN 128
|
||||
|
||||
/**
|
||||
* The mtdparts_nand0 and mtdparts_nor0 variable tends to be long.
|
||||
* If we need to access it before the env is relocated, then we need
|
||||
* to use our own stack buffer. gd->env_buf will be too small.
|
||||
*
|
||||
* @param buf temporary buffer pointer MTDPARTS_LEN long
|
||||
* @return mtdparts variable string, NULL if not found
|
||||
*/
|
||||
static const char *env_get_mtdparts(const char *str, char *buf)
|
||||
{
|
||||
if (gd->flags & GD_FLG_ENV_READY)
|
||||
return env_get(str);
|
||||
if (env_get_f(str, buf, MTDPARTS_LEN) != -1)
|
||||
return buf;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* update the variables "mtdids" and "mtdparts" with content of mtdparts_<dev>
|
||||
*/
|
||||
static void board_get_mtdparts(const char *dev,
|
||||
char *mtdids,
|
||||
char *mtdparts)
|
||||
{
|
||||
char env_name[32] = "mtdparts_";
|
||||
char tmp_mtdparts[MTDPARTS_LEN];
|
||||
const char *tmp;
|
||||
|
||||
/* name of env variable to read = mtdparts_<dev> */
|
||||
strcat(env_name, dev);
|
||||
tmp = env_get_mtdparts(env_name, tmp_mtdparts);
|
||||
if (tmp) {
|
||||
/* mtdids: "<dev>=<dev>, ...." */
|
||||
if (mtdids[0] != '\0')
|
||||
strcat(mtdids, ",");
|
||||
strcat(mtdids, dev);
|
||||
strcat(mtdids, "=");
|
||||
strcat(mtdids, dev);
|
||||
|
||||
/* mtdparts: "mtdparts=<dev>:<mtdparts_<dev>>;..." */
|
||||
if (mtdparts[0] != '\0')
|
||||
strncat(mtdparts, ";", MTDPARTS_LEN);
|
||||
else
|
||||
strcat(mtdparts, "mtdparts=");
|
||||
strncat(mtdparts, dev, MTDPARTS_LEN);
|
||||
strncat(mtdparts, ":", MTDPARTS_LEN);
|
||||
strncat(mtdparts, tmp, MTDPARTS_LEN);
|
||||
}
|
||||
}
|
||||
|
||||
void board_mtdparts_default(const char **mtdids, const char **mtdparts)
|
||||
{
|
||||
struct udevice *dev;
|
||||
static char parts[2 * MTDPARTS_LEN + 1];
|
||||
static char ids[MTDIDS_LEN + 1];
|
||||
static bool mtd_initialized;
|
||||
|
||||
if (mtd_initialized) {
|
||||
*mtdids = ids;
|
||||
*mtdparts = parts;
|
||||
return;
|
||||
}
|
||||
|
||||
memset(parts, 0, sizeof(parts));
|
||||
memset(ids, 0, sizeof(ids));
|
||||
|
||||
if (!uclass_get_device(UCLASS_MTD, 0, &dev))
|
||||
board_get_mtdparts("nand0", ids, parts);
|
||||
|
||||
if (!uclass_get_device(UCLASS_SPI_FLASH, 0, &dev))
|
||||
board_get_mtdparts("nor0", ids, parts);
|
||||
|
||||
mtd_initialized = true;
|
||||
*mtdids = ids;
|
||||
*mtdparts = parts;
|
||||
debug("%s:mtdids=%s & mtdparts=%s\n", __func__, ids, parts);
|
||||
}
|
||||
#endif
|
||||
|
@ -102,6 +102,14 @@
|
||||
|
||||
#include <config_distro_bootcmd.h>
|
||||
|
||||
#if defined(CONFIG_STM32_QSPI) || defined(CONFIG_NAND_STM32_FMC)
|
||||
#define CONFIG_SYS_MTDPARTS_RUNTIME
|
||||
#endif
|
||||
|
||||
#define STM32MP_MTDPARTS \
|
||||
"mtdparts_nor0=256k(fsbl1),256k(fsbl2),2m(ssbl),-(nor_user)\0" \
|
||||
"mtdparts_nand0=2m(fsbl),2m(ssbl1),2m(ssbl2),-(UBI)\0"
|
||||
|
||||
/*
|
||||
* memory layout for 32M uncompressed/compressed kernel,
|
||||
* 1M fdt, 1M script, 1M pxe and 1M for splashimage
|
||||
@ -117,6 +125,7 @@
|
||||
"fdt_high=0xffffffff\0" \
|
||||
"initrd_high=0xffffffff\0" \
|
||||
STM32MP_BOOTCMD \
|
||||
STM32MP_MTDPARTS \
|
||||
BOOTENV
|
||||
|
||||
#endif /* ifndef CONFIG_SPL_BUILD */
|
||||
|
Loading…
Reference in New Issue
Block a user