[Uboot-stm32] [PATCH 04/11] stm32mp1: move MTDPART configuration in Kconfig
Patrice CHOTARD
patrice.chotard at st.com
Tue Apr 14 11:28:15 CEST 2020
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 at st.com>
> ---
Reviewed-by: Patrice Chotard <patrice.chotard at 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"
>
More information about the U-Boot
mailing list