mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-05 02:23:31 +08:00
stm32mp1: move MTDPART configuration in Kconfig
This patch reduces the stm32mp1 environment size and builds dynamically the MTD partitions with information from defconfig (CONFIG_MTDPARTS_...). Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com> Reviewed-by: Patrice Chotard <patrice.chotard@st.com>
This commit is contained in:
parent
31325e1b8b
commit
28a28ba976
@ -6,6 +6,63 @@ config CMD_STBOARD
|
||||
This compile the stboard command to
|
||||
read and write the board in the OTP.
|
||||
|
||||
config MTDPARTS_NAND0_BOOT
|
||||
string "mtd boot partitions for nand0"
|
||||
default "2m(fsbl),2m(ssbl1),2m(ssbl2)"
|
||||
depends on SYS_MTDPARTS_RUNTIME && ARCH_STM32MP
|
||||
help
|
||||
This define the partitions of nand0 used to build mtparts dynamically
|
||||
for boot from nand0.
|
||||
Each partition need to be aligned with the device erase block size,
|
||||
512KB is the max size for the NAND supported by stm32mp1 platform.
|
||||
|
||||
config MTDPARTS_NAND0_TEE
|
||||
string "mtd tee partitions for nand0"
|
||||
default "512k(teeh),512k(teed),512k(teex)"
|
||||
depends on SYS_MTDPARTS_RUNTIME && ARCH_STM32MP
|
||||
help
|
||||
This define the tee partitions added in mtparts dynamically
|
||||
when tee is supported with boot from nand0.
|
||||
Each partition need to be aligned with the device erase block size,
|
||||
512KB is the max size for the NAND supported by stm32mp1 platform.
|
||||
|
||||
config MTDPARTS_NOR0_BOOT
|
||||
string "mtd boot partitions for nor0"
|
||||
default "256k(fsbl1),256k(fsbl2),2m(ssbl),512k(u-boot-env)"
|
||||
depends on SYS_MTDPARTS_RUNTIME && ARCH_STM32MP
|
||||
help
|
||||
This define the partitions of nand0 used to build mtparts dynamically
|
||||
for boot from nor0.
|
||||
Each partition need to be aligned with the device erase block size,
|
||||
with 256KB we support all the NOR.
|
||||
U-Boot env partition (512kB) use 2 erase block for redundancy.
|
||||
|
||||
config MTDPARTS_NOR0_TEE
|
||||
string "mtd tee partitions for nor0"
|
||||
default "256k(teeh),256k(teed),256k(teex)"
|
||||
depends on SYS_MTDPARTS_RUNTIME && ARCH_STM32MP
|
||||
help
|
||||
This define the tee partitions added in mtparts dynamically
|
||||
when tee is supported with boot from nor0.
|
||||
|
||||
config MTDPARTS_SPINAND0_BOOT
|
||||
string "mtd boot partitions for spi-nand0"
|
||||
default "2m(fsbl),2m(ssbl1),2m(ssbl2)"
|
||||
depends on SYS_MTDPARTS_RUNTIME && ARCH_STM32MP
|
||||
help
|
||||
This define the partitions of nand0 used to build mtparts dynamically
|
||||
for boot from spi-nand0,
|
||||
512KB is the max size for the NAND supported by stm32mp1 platform.
|
||||
|
||||
config MTDPARTS_SPINAND0_TEE
|
||||
string "mtd tee partitions for spi-nand0"
|
||||
default "512k(teeh),512k(teed),512k(teex)"
|
||||
depends on SYS_MTDPARTS_RUNTIME && ARCH_STM32MP
|
||||
help
|
||||
This define the tee partitions added in mtparts dynamically
|
||||
when tee is supported with boot from spi-nand0,
|
||||
512KB is the max size for the NAND supported by stm32mp1 platform.
|
||||
|
||||
config DFU_ALT_RAM0
|
||||
string "dfu for ram0"
|
||||
default "uImage ram 0xc2000000 0x2000000;devicetree.dtb ram 0xc4000000 0x100000;uramdisk.image.gz ram 0xc4400000 0x10000000"
|
||||
|
@ -19,54 +19,42 @@
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
/**
|
||||
* 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>
|
||||
* update the variables "mtdids" and "mtdparts" with boot, tee and user strings
|
||||
*/
|
||||
static void board_get_mtdparts(const char *dev,
|
||||
char *mtdids,
|
||||
char *mtdparts)
|
||||
char *mtdparts,
|
||||
const char *boot,
|
||||
const char *tee,
|
||||
const char *user)
|
||||
{
|
||||
char env_name[32] = "mtdparts_";
|
||||
char tmp_mtdparts[MTDPARTS_LEN];
|
||||
const char *tmp;
|
||||
/* mtdids: "<dev>=<dev>, ...." */
|
||||
if (mtdids[0] != '\0')
|
||||
strcat(mtdids, ",");
|
||||
strcat(mtdids, dev);
|
||||
strcat(mtdids, "=");
|
||||
strcat(mtdids, dev);
|
||||
|
||||
/* 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=");
|
||||
|
||||
/* 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);
|
||||
strncat(mtdparts, dev, MTDPARTS_LEN);
|
||||
strncat(mtdparts, ":", MTDPARTS_LEN);
|
||||
|
||||
if (boot) {
|
||||
strncat(mtdparts, boot, MTDPARTS_LEN);
|
||||
strncat(mtdparts, ",", MTDPARTS_LEN);
|
||||
}
|
||||
|
||||
if (CONFIG_IS_ENABLED(STM32MP1_OPTEE) && tee) {
|
||||
strncat(mtdparts, tee, MTDPARTS_LEN);
|
||||
strncat(mtdparts, ",", MTDPARTS_LEN);
|
||||
}
|
||||
|
||||
strncat(mtdparts, user, MTDPARTS_LEN);
|
||||
}
|
||||
|
||||
void board_mtdparts_default(const char **mtdids, const char **mtdparts)
|
||||
@ -76,6 +64,7 @@ void board_mtdparts_default(const char **mtdids, const char **mtdparts)
|
||||
static char parts[3 * MTDPARTS_LEN + 1];
|
||||
static char ids[MTDIDS_LEN + 1];
|
||||
static bool mtd_initialized;
|
||||
bool tee = false;
|
||||
|
||||
if (mtd_initialized) {
|
||||
*mtdids = ids;
|
||||
@ -83,6 +72,9 @@ void board_mtdparts_default(const char **mtdids, const char **mtdparts)
|
||||
return;
|
||||
}
|
||||
|
||||
if (CONFIG_IS_ENABLED(STM32MP1_OPTEE))
|
||||
tee = true;
|
||||
|
||||
memset(parts, 0, sizeof(parts));
|
||||
memset(ids, 0, sizeof(ids));
|
||||
|
||||
@ -95,18 +87,27 @@ void board_mtdparts_default(const char **mtdids, const char **mtdparts)
|
||||
|
||||
mtd = get_mtd_device_nm("nand0");
|
||||
if (!IS_ERR_OR_NULL(mtd)) {
|
||||
board_get_mtdparts("nand0", ids, parts);
|
||||
board_get_mtdparts("nand0", ids, parts,
|
||||
CONFIG_MTDPARTS_NAND0_BOOT,
|
||||
tee ? CONFIG_MTDPARTS_NAND0_TEE : NULL,
|
||||
"-(UBI)");
|
||||
put_mtd_device(mtd);
|
||||
}
|
||||
|
||||
mtd = get_mtd_device_nm("spi-nand0");
|
||||
if (!IS_ERR_OR_NULL(mtd)) {
|
||||
board_get_mtdparts("spi-nand0", ids, parts);
|
||||
board_get_mtdparts("spi-nand0", ids, parts,
|
||||
CONFIG_MTDPARTS_SPINAND0_BOOT,
|
||||
tee ? CONFIG_MTDPARTS_SPINAND0_TEE : NULL,
|
||||
"-(UBI)");
|
||||
put_mtd_device(mtd);
|
||||
}
|
||||
|
||||
if (!uclass_get_device(UCLASS_SPI_FLASH, 0, &dev))
|
||||
board_get_mtdparts("nor0", ids, parts);
|
||||
board_get_mtdparts("nor0", ids, parts,
|
||||
CONFIG_MTDPARTS_NOR0_BOOT,
|
||||
tee ? CONFIG_MTDPARTS_NOR0_TEE : NULL,
|
||||
"-(nor_user)");
|
||||
|
||||
mtd_initialized = true;
|
||||
*mtdids = ids;
|
||||
|
@ -144,27 +144,6 @@
|
||||
|
||||
#include <config_distro_bootcmd.h>
|
||||
|
||||
#ifdef CONFIG_STM32MP1_OPTEE
|
||||
/* with OPTEE: define specific MTD partitions = teeh, teed, teex */
|
||||
#define STM32MP_MTDPARTS \
|
||||
"mtdparts_nor0=256k(fsbl1),256k(fsbl2),2m(ssbl),256k(u-boot-env),256k(teeh),256k(teed),256k(teex),-(nor_user)\0" \
|
||||
"mtdparts_nand0=2m(fsbl),2m(ssbl1),2m(ssbl2),512k(teeh),512k(teed),512k(teex),-(UBI)\0" \
|
||||
"mtdparts_spi-nand0=2m(fsbl),2m(ssbl1),2m(ssbl2),"\
|
||||
"512k(teeh),512k(teed),512k(teex),-(UBI)\0"
|
||||
|
||||
#else /* CONFIG_STM32MP1_OPTEE */
|
||||
#define STM32MP_MTDPARTS \
|
||||
"mtdparts_nor0=256k(fsbl1),256k(fsbl2),2m(ssbl),256k(u-boot-env),-(nor_user)\0" \
|
||||
"mtdparts_nand0=2m(fsbl),2m(ssbl1),2m(ssbl2),-(UBI)\0" \
|
||||
"mtdparts_spi-nand0=2m(fsbl),2m(ssbl1),2m(ssbl2),-(UBI)\0"
|
||||
|
||||
#endif /* CONFIG_STM32MP1_OPTEE */
|
||||
|
||||
#ifndef CONFIG_SYS_MTDPARTS_RUNTIME
|
||||
#undef STM32MP_MTDPARTS
|
||||
#define STM32MP_MTDPARTS
|
||||
#endif
|
||||
|
||||
/*
|
||||
* memory layout for 32M uncompressed/compressed kernel,
|
||||
* 1M fdt, 1M script, 1M pxe and 1M for splashimage
|
||||
@ -183,7 +162,6 @@
|
||||
"env_check=if test $env_default -eq 1;"\
|
||||
" then env set env_default 0;env save;fi\0" \
|
||||
STM32MP_BOOTCMD \
|
||||
STM32MP_MTDPARTS \
|
||||
BOOTENV \
|
||||
"boot_net_usb_start=true\0"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user