1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-30 15:01:27 +02:00

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

View File

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