
Hi
On 3/18/20 9:22 AM, Patrick Delaunay wrote:
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
Patrice
board/st/common/Kconfig | 57 ++++++++++++++++++ board/st/common/stm32mp_mtdparts.c | 93 +++++++++++++++--------------- include/configs/stm32mp1.h | 22 ------- 3 files changed, 104 insertions(+), 68 deletions(-)
diff --git a/board/st/common/Kconfig b/board/st/common/Kconfig index 08df845982..015ba40939 100644 --- a/board/st/common/Kconfig +++ b/board/st/common/Kconfig @@ -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" diff --git a/board/st/common/stm32mp_mtdparts.c b/board/st/common/stm32mp_mtdparts.c index d77e075864..d4c0a7db9f 100644 --- a/board/st/common/stm32mp_mtdparts.c +++ b/board/st/common/stm32mp_mtdparts.c @@ -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;
- /* 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);
- /* 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);
- 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;
diff --git a/include/configs/stm32mp1.h b/include/configs/stm32mp1.h index a9631d2a92..a80741f6a2 100644 --- a/include/configs/stm32mp1.h +++ b/include/configs/stm32mp1.h @@ -149,27 +149,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
@@ -188,7 +167,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"