
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@st.com
Reviewed-by: Patrice Chotard patrice.chotard@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) {