nand: Allow reinitialization

NAND devices are destroyed in between unit tests. Provide a function to
reinitialize the subsystem at the beginning of each test.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
This commit is contained in:
Sean Anderson 2023-11-04 16:37:50 -04:00 committed by Tom Rini
parent c203482177
commit 333d43f6a3
2 changed files with 34 additions and 7 deletions

View file

@ -115,6 +115,8 @@ static void nand_init_chip(int i)
#endif
#ifdef CONFIG_MTD_CONCAT
struct mtd_info *concat_mtd;
static void create_mtd_concat(void)
{
struct mtd_info *nand_info_list[CONFIG_SYS_MAX_NAND_DEVICE];
@ -129,28 +131,40 @@ static void create_mtd_concat(void)
}
}
if (nand_devices_found > 1) {
struct mtd_info *mtd;
char c_mtd_name[16];
/*
* We detected multiple devices. Concatenate them together.
*/
sprintf(c_mtd_name, "nand%d", nand_devices_found);
mtd = mtd_concat_create(nand_info_list, nand_devices_found,
c_mtd_name);
concat_mtd = mtd_concat_create(nand_info_list,
nand_devices_found, c_mtd_name);
if (mtd == NULL)
if (!concat_mtd)
return;
nand_register(nand_devices_found, mtd);
nand_register(nand_devices_found, concat_mtd);
}
return;
}
static void destroy_mtd_concat(void)
{
if (!concat_mtd)
return;
mtd_concat_destroy(concat_mtd);
concat_mtd = NULL;
}
#else
static void create_mtd_concat(void)
{
}
static void destroy_mtd_concat(void)
{
}
#endif
unsigned long nand_size(void)
@ -158,10 +172,10 @@ unsigned long nand_size(void)
return total_nand_size;
}
static int initialized;
void nand_init(void)
{
static int initialized;
/*
* Avoid initializing NAND Flash multiple times,
* otherwise it will calculate a wrong total size.
@ -190,6 +204,18 @@ void nand_init(void)
create_mtd_concat();
}
void nand_reinit(void)
{
int i;
destroy_mtd_concat();
for (i = 0; i < CONFIG_SYS_MAX_NAND_DEVICE; i++)
assert(!nand_info[i]);
initialized = 0;
nand_init();
}
unsigned int nand_page_size(void)
{
struct mtd_info *mtd = get_nand_dev_by_index(nand_curr_device);

View file

@ -11,6 +11,7 @@
#include <config.h>
extern void nand_init(void);
void nand_reinit(void);
unsigned long nand_size(void);
unsigned int nand_page_size(void);