[Uboot-stm32] [PATCH 10/11] board: stm32mp1: adapt MTD partition for BOOT from NOR or NAND

Patrice CHOTARD patrice.chotard at st.com
Tue Apr 14 11:28:57 CEST 2020


Hi

On 3/18/20 9:22 AM, Patrick Delaunay wrote:
> Dynamically adapt the MTD partitions in NAND and SPI-NAND when boot from
> NOR or NAND/SPI-NAND is detected.
>
> This patch avoids to define the save MTD partition name for NOR and NAND
> devices and issue with latest kernel: only the needed MTD partitions
> are defined.
>
> For boot from NOR
> 1/ bootloader (TF-A, U-Boot and OP-TE) in NOR
> 2/ one large UBI partition in NAND
>
> For boot from NAND
> 1/ bootloader (TF-A, U-Boot and OP-TE) in MTD raw partition
> 2/ one large UBI partition
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay at st.com>
>
> # Conflicts:
> #	board/st/common/stm32mp_mtdparts.c
> ---
>
>  board/st/common/stm32mp_mtdparts.c | 81 ++++++++++++++++++++++--------
>  1 file changed, 60 insertions(+), 21 deletions(-)
>
> diff --git a/board/st/common/stm32mp_mtdparts.c b/board/st/common/stm32mp_mtdparts.c
> index 2b6413be16..5028511077 100644
> --- a/board/st/common/stm32mp_mtdparts.c
> +++ b/board/st/common/stm32mp_mtdparts.c
> @@ -10,6 +10,7 @@
>  #include <mtd.h>
>  #include <mtd_node.h>
>  #include <tee.h>
> +#include <asm/arch/sys_proto.h>
>  
>  #define MTDPARTS_LEN		256
>  #define MTDIDS_LEN		128
> @@ -22,7 +23,7 @@ DECLARE_GLOBAL_DATA_PTR;
>  /**
>   * update the variables "mtdids" and "mtdparts" with boot, tee and user strings
>   */
> -static void board_get_mtdparts(const char *dev,
> +static void board_set_mtdparts(const char *dev,
>  			       char *mtdids,
>  			       char *mtdparts,
>  			       const char *boot,
> @@ -65,7 +66,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;
> +	bool tee, nor, nand, spinand;
>  
>  	if (mtd_initialized) {
>  		*mtdids = ids;
> @@ -73,6 +74,28 @@ void board_mtdparts_default(const char **mtdids, const char **mtdparts)
>  		return;
>  	}
>  
> +	tee = false;
> +	nor = false;
> +	nand = false;
> +	spinand = false;
> +
> +	switch (get_bootmode() & TAMP_BOOT_DEVICE_MASK) {
> +	case BOOT_SERIAL_UART:
> +	case BOOT_SERIAL_USB:
> +		break;
> +	case BOOT_FLASH_NAND:
> +		nand = true;
> +		break;
> +	case BOOT_FLASH_SPINAND:
> +		spinand = true;
> +		break;
> +	case BOOT_FLASH_NOR:
> +		nor = true;
> +		break;
> +	default:
> +		break;
> +	}
> +
>  	if (CONFIG_IS_ENABLED(OPTEE) &&
>  	    tee_find_device(NULL, NULL, NULL, NULL))
>  		tee = true;
> @@ -87,29 +110,45 @@ void board_mtdparts_default(const char **mtdids, const char **mtdparts)
>  		pr_debug("mtd device = %s\n", dev->name);
>  	}
>  
> -	mtd = get_mtd_device_nm("nand0");
> -	if (!IS_ERR_OR_NULL(mtd)) {
> -		board_get_mtdparts("nand0", ids, parts,
> -				   CONFIG_MTDPARTS_NAND0_BOOT,
> -				   tee ? CONFIG_MTDPARTS_NAND0_TEE : NULL,
> -				   "-(UBI)");
> -		put_mtd_device(mtd);
> +	if (nor || nand) {
> +		mtd = get_mtd_device_nm("nand0");
> +		if (!IS_ERR_OR_NULL(mtd)) {
> +			const char *mtd_boot = CONFIG_MTDPARTS_NAND0_BOOT;
> +			const char *mtd_tee = CONFIG_MTDPARTS_NAND0_TEE;
> +
> +			board_set_mtdparts("nand0", ids, parts,
> +					   !nor ? mtd_boot : NULL,
> +					   !nor && tee ? mtd_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,
> -				   CONFIG_MTDPARTS_SPINAND0_BOOT,
> -				   tee ? CONFIG_MTDPARTS_SPINAND0_TEE : NULL,
> -				   "-(UBI)");
> -		put_mtd_device(mtd);
> +	if (nor || spinand) {
> +		mtd = get_mtd_device_nm("spi-nand0");
> +		if (!IS_ERR_OR_NULL(mtd)) {
> +			const char *mtd_boot = CONFIG_MTDPARTS_SPINAND0_BOOT;
> +			const char *mtd_tee = CONFIG_MTDPARTS_SPINAND0_TEE;
> +
> +			board_set_mtdparts("spi-nand0", ids, parts,
> +					   !nor ? mtd_boot : NULL,
> +					   !nor && tee ? mtd_tee : NULL,
> +					   "-(UBI)");
> +			put_mtd_device(mtd);
> +		}
>  	}
>  
> -	if (!uclass_get_device(UCLASS_SPI_FLASH, 0, &dev))
> -		board_get_mtdparts("nor0", ids, parts,
> -				   CONFIG_MTDPARTS_NOR0_BOOT,
> -				   tee ? CONFIG_MTDPARTS_NOR0_TEE : NULL,
> -				   "-(nor_user)");
> +	if (nor) {
> +		if (!uclass_get_device(UCLASS_SPI_FLASH, 0, &dev)) {
> +			const char *mtd_boot = CONFIG_MTDPARTS_NOR0_BOOT;
> +			const char *mtd_tee = CONFIG_MTDPARTS_NOR0_TEE;
> +
> +			board_set_mtdparts("nor0", ids, parts,
> +					   mtd_boot,
> +					   tee ? mtd_tee : NULL,
> +					   "-(nor_user)");
> +		}
> +	}
>  
>  	mtd_initialized = true;
>  	*mtdids = ids;


Reviewed-by: Patrice Chotard <patrice.chotard at st.com>

Patrice


More information about the U-Boot mailing list