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

