summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/cmd_ubi.c11
-rw-r--r--drivers/mtd/ubi/build.c1
-rw-r--r--include/ubi_uboot.h1
3 files changed, 13 insertions, 0 deletions
diff --git a/common/cmd_ubi.c b/common/cmd_ubi.c
index 8446765878..495d71ec0a 100644
--- a/common/cmd_ubi.c
+++ b/common/cmd_ubi.c
@@ -31,6 +31,7 @@
/* Private own data */
static struct ubi_device *ubi;
static char buffer[80];
+static int ubi_initialized;
struct selected_dev {
char dev_name[32]; /* NAND/OneNAND etc */
@@ -428,6 +429,8 @@ static int ubi_dev_scan(struct mtd_info *info, char *ubidev)
return err;
}
+ ubi_initialized = 1;
+
return 0;
}
@@ -464,6 +467,14 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
ubi_dev.nr = 0;
/*
+ * Call ubi_exit() before re-initializing the UBI subsystem
+ */
+ if (ubi_initialized) {
+ ubi_exit();
+ del_mtd_partitions(ubi_dev.mtd_info);
+ }
+
+ /*
* Check for nand|onenand selection
*/
#if defined(CONFIG_CMD_NAND)
diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
index 17cabb2ae9..bdf75c98a1 100644
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -1059,6 +1059,7 @@ void __exit ubi_exit(void)
misc_deregister(&ubi_ctrl_cdev);
class_remove_file(ubi_class, &ubi_version);
class_destroy(ubi_class);
+ mtd_devs = 0;
}
module_exit(ubi_exit);
diff --git a/include/ubi_uboot.h b/include/ubi_uboot.h
index 295f2c0ffc..095dfc1b20 100644
--- a/include/ubi_uboot.h
+++ b/include/ubi_uboot.h
@@ -211,6 +211,7 @@ static inline long IS_ERR(const void *ptr)
/* functions */
extern int ubi_mtd_param_parse(const char *val, struct kernel_param *kp);
extern int ubi_init(void);
+extern void ubi_exit(void);
extern struct ubi_device *ubi_devices[];
OpenPOWER on IntegriCloud