Sean, All On Sun, Oct 29, 2023 at 4:49 AM Sean Anderson <sean...@gmail.com> wrote: > > 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 <sean...@gmail.com> > --- > > drivers/mtd/nand/raw/nand.c | 40 ++++++++++++++++++++++++++++++------- > include/nand.h | 1 + > 2 files changed, 34 insertions(+), 7 deletions(-) > > diff --git a/drivers/mtd/nand/raw/nand.c b/drivers/mtd/nand/raw/nand.c > index 80017b3dddd..4c18861aa25 100644 > --- a/drivers/mtd/nand/raw/nand.c > +++ b/drivers/mtd/nand/raw/nand.c > @@ -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); > diff --git a/include/nand.h b/include/nand.h > index fc584f5ef7a..220ffa202ef 100644 > --- a/include/nand.h > +++ b/include/nand.h > @@ -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); > > -- > 2.37.1 >
Reviewed-by: Dario Binacchi <dario.binac...@amarulasolutions.com> Thanks and regards, Dario -- Dario Binacchi Senior Embedded Linux Developer dario.binac...@amarulasolutions.com __________________________________ Amarula Solutions SRL Via Le Canevare 30, 31100 Treviso, Veneto, IT T. +39 042 243 5310 i...@amarulasolutions.com www.amarulasolutions.com