Message ID | 20231029034845.1169614-13-seanga2@gmail.com |
---|---|
State | Superseded |
Delegated to: | Dario Binacchi |
Headers | show |
Series | nand: Add sandbox tests | expand |
Sean, All On Sun, Oct 29, 2023 at 4:49 AM Sean Anderson <seanga2@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 <seanga2@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.binacchi@amarulasolutions.com> Thanks and regards, Dario
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);
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> --- drivers/mtd/nand/raw/nand.c | 40 ++++++++++++++++++++++++++++++------- include/nand.h | 1 + 2 files changed, 34 insertions(+), 7 deletions(-)