[Uboot-stm32] [PATCH 01/11] board: stm32mp1: move board_get_mtdparts in st common directory

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


Hi Patrick

On 3/18/20 9:22 AM, Patrick Delaunay wrote:
> Move the stm32mp1 common code board_get_mtdparts() in common directory,
> this patch reduce the maintenance effort on this generic part (not board
> dependent).
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay at st.com>
> ---

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

Patrice


>
>  board/dhelectronics/dh_stm32mp1/Makefile |   1 +
>  board/dhelectronics/dh_stm32mp1/board.c  |  89 ------------------
>  board/st/common/Makefile                 |   4 +
>  board/st/common/stm32mp_mtdparts.c       | 115 +++++++++++++++++++++++
>  board/st/stm32mp1/stm32mp1.c             | 102 --------------------
>  5 files changed, 120 insertions(+), 191 deletions(-)
>  create mode 100644 board/st/common/stm32mp_mtdparts.c
>
> diff --git a/board/dhelectronics/dh_stm32mp1/Makefile b/board/dhelectronics/dh_stm32mp1/Makefile
> index b42c4e4c04..c77a1e3a84 100644
> --- a/board/dhelectronics/dh_stm32mp1/Makefile
> +++ b/board/dhelectronics/dh_stm32mp1/Makefile
> @@ -8,3 +8,4 @@ obj-y += ../../st/stm32mp1/spl.o
>  endif
>  
>  obj-y += ../../st/stm32mp1/board.o board.o
> +obj-$(CONFIG_SYS_MTDPARTS_RUNTIME) += ../../st/common/stm32mp_mtdparts.o
> diff --git a/board/dhelectronics/dh_stm32mp1/board.c b/board/dhelectronics/dh_stm32mp1/board.c
> index b663696983..2baa36278c 100644
> --- a/board/dhelectronics/dh_stm32mp1/board.c
> +++ b/board/dhelectronics/dh_stm32mp1/board.c
> @@ -519,95 +519,6 @@ enum env_location env_get_location(enum env_operation op, int prio)
>  #endif
>  }
>  
> -#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[3 * 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));
> -
> -	/* probe all MTD devices */
> -	for (uclass_first_device(UCLASS_MTD, &dev);
> -	     dev;
> -	     uclass_next_device(&dev)) {
> -		pr_debug("mtd device = %s\n", dev->name);
> -	}
> -
> -	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
> -
>  #if defined(CONFIG_OF_BOARD_SETUP)
>  int ft_board_setup(void *blob, bd_t *bd)
>  {
> diff --git a/board/st/common/Makefile b/board/st/common/Makefile
> index 8553606b90..4bb8b49867 100644
> --- a/board/st/common/Makefile
> +++ b/board/st/common/Makefile
> @@ -4,3 +4,7 @@
>  #
>  
>  obj-$(CONFIG_CMD_STBOARD) += cmd_stboard.o
> +
> +ifeq ($(CONFIG_ARCH_STM32MP),y)
> +obj-$(CONFIG_SYS_MTDPARTS_RUNTIME) += stm32mp_mtdparts.o
> +endif
> diff --git a/board/st/common/stm32mp_mtdparts.c b/board/st/common/stm32mp_mtdparts.c
> new file mode 100644
> index 0000000000..d77e075864
> --- /dev/null
> +++ b/board/st/common/stm32mp_mtdparts.c
> @@ -0,0 +1,115 @@
> +// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
> +/*
> + * Copyright (C) 2020, STMicroelectronics - All Rights Reserved
> + */
> +
> +#include <common.h>
> +#include <dm.h>
> +#include <env.h>
> +#include <env_internal.h>
> +#include <mtd.h>
> +#include <mtd_node.h>
> +
> +#define MTDPARTS_LEN		256
> +#define MTDIDS_LEN		128
> +
> +/*
> + * Get a global data pointer
> + */
> +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>
> + */
> +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 mtd_info *mtd;
> +	struct udevice *dev;
> +	static char parts[3 * 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));
> +
> +	/* probe all MTD devices */
> +	for (uclass_first_device(UCLASS_MTD, &dev);
> +	     dev;
> +	     uclass_next_device(&dev)) {
> +		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);
> +		put_mtd_device(mtd);
> +	}
> +
> +	mtd = get_mtd_device_nm("spi-nand0");
> +	if (!IS_ERR_OR_NULL(mtd)) {
> +		board_get_mtdparts("spi-nand0", ids, parts);
> +		put_mtd_device(mtd);
> +	}
> +
> +	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);
> +}
> diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c
> index b9d852efa4..bbeeb15d7e 100644
> --- a/board/st/stm32mp1/stm32mp1.c
> +++ b/board/st/stm32mp1/stm32mp1.c
> @@ -828,108 +828,6 @@ const char *env_ext4_get_dev_part(void)
>  }
>  #endif
>  
> -#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 mtd_info *mtd;
> -	struct udevice *dev;
> -	static char parts[3 * 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));
> -
> -	/* probe all MTD devices */
> -	for (uclass_first_device(UCLASS_MTD, &dev);
> -	     dev;
> -	     uclass_next_device(&dev)) {
> -		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);
> -		put_mtd_device(mtd);
> -	}
> -
> -	mtd = get_mtd_device_nm("spi-nand0");
> -	if (!IS_ERR_OR_NULL(mtd)) {
> -		board_get_mtdparts("spi-nand0", ids, parts);
> -		put_mtd_device(mtd);
> -	}
> -
> -	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
> -
>  #if defined(CONFIG_OF_BOARD_SETUP)
>  int ft_board_setup(void *blob, bd_t *bd)
>  {


More information about the U-Boot mailing list