mirror of
https://github.com/smaeul/u-boot.git
synced 2025-10-17 22:28:17 +01:00
board: stm32mp1: move board_get_mtdparts in st common directory
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>
This commit is contained in:
parent
2d68365da1
commit
939ba160aa
@ -8,3 +8,4 @@ obj-y += ../../st/stm32mp1/spl.o
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
obj-y += ../../st/stm32mp1/board.o board.o
|
obj-y += ../../st/stm32mp1/board.o board.o
|
||||||
|
obj-$(CONFIG_SYS_MTDPARTS_RUNTIME) += ../../st/common/stm32mp_mtdparts.o
|
||||||
|
@ -655,95 +655,6 @@ enum env_location env_get_location(enum env_operation op, int prio)
|
|||||||
#endif
|
#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)
|
#if defined(CONFIG_OF_BOARD_SETUP)
|
||||||
int ft_board_setup(void *blob, bd_t *bd)
|
int ft_board_setup(void *blob, bd_t *bd)
|
||||||
{
|
{
|
||||||
|
@ -4,3 +4,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
obj-$(CONFIG_CMD_STBOARD) += cmd_stboard.o
|
obj-$(CONFIG_CMD_STBOARD) += cmd_stboard.o
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_ARCH_STM32MP),y)
|
||||||
|
obj-$(CONFIG_SYS_MTDPARTS_RUNTIME) += stm32mp_mtdparts.o
|
||||||
|
endif
|
||||||
|
115
board/st/common/stm32mp_mtdparts.c
Normal file
115
board/st/common/stm32mp_mtdparts.c
Normal file
@ -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);
|
||||||
|
}
|
@ -828,108 +828,6 @@ const char *env_ext4_get_dev_part(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#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)
|
#if defined(CONFIG_OF_BOARD_SETUP)
|
||||||
int ft_board_setup(void *blob, bd_t *bd)
|
int ft_board_setup(void *blob, bd_t *bd)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user