Add ubi_part_from_mtd() which attaches UBI to a given struct mtd_info
directly, without going through the name-based lookup that ubi_part()
uses. This is useful for callers that already hold a reference to the
MTD device, e.g. after finding it via its device-tree node.

If the same MTD device is already attached, the function returns
immediately.

Declared in include/ubi_uboot.h alongside ubi_part().

Signed-off-by: Daniel Golle <[email protected]>
---
 cmd/ubi.c           | 23 +++++++++++++++++++++++
 include/ubi_uboot.h |  1 +
 2 files changed, 24 insertions(+)

diff --git a/cmd/ubi.c b/cmd/ubi.c
index ca7d657aa07..9f73c36aaa9 100644
--- a/cmd/ubi.c
+++ b/cmd/ubi.c
@@ -662,6 +662,29 @@ static int ubi_detach(void)
        return 0;
 }
 
+int ubi_part_from_mtd(struct mtd_info *mtd)
+{
+       int err;
+
+       if (ubi && ubi->mtd == mtd) {
+               printf("UBI partition '%s' already selected\n", mtd->name);
+               return 0;
+       }
+
+       ubi_detach();
+
+       err = ubi_dev_scan(mtd, NULL);
+       if (err) {
+               printf("UBI init error %d\n", err);
+               printf("Please check, if the correct MTD partition is used 
(size big enough?)\n");
+               return err;
+       }
+
+       ubi = ubi_devices[0];
+
+       return 0;
+}
+
 int ubi_part(char *part_name, const char *vid_header_offset)
 {
        struct mtd_info *mtd;
diff --git a/include/ubi_uboot.h b/include/ubi_uboot.h
index 92892704d0a..8f3fb007b0e 100644
--- a/include/ubi_uboot.h
+++ b/include/ubi_uboot.h
@@ -48,6 +48,7 @@ extern int ubi_mtd_param_parse(const char *val, struct 
kernel_param *kp);
 extern int ubi_init(void);
 extern void ubi_exit(void);
 extern int ubi_part(char *part_name, const char *vid_header_offset);
+int ubi_part_from_mtd(struct mtd_info *mtd);
 extern int ubi_volume_write(char *volume, void *buf, loff_t offset, size_t 
size);
 extern int ubi_volume_read(char *volume, char *buf, loff_t offset, size_t 
size);
 struct ubi_volume *ubi_find_volume(const char *volume);
-- 
2.53.0

Reply via email to