[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