kernel: mtdsplit: support Seama entity with UBI
authorRafał Miłecki <zajec5@gmail.com>
Mon, 1 Feb 2016 12:41:53 +0000 (12:41 +0000)
committerRafał Miłecki <zajec5@gmail.com>
Mon, 1 Feb 2016 12:41:53 +0000 (12:41 +0000)
Some D-Link routers (e.g. DIR-885L) have NAND and use Seama format. It
means OpenWrt will want to have UBI in Sseama entity and should be able
to detect it.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
SVN-Revision: 48600

target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit.h
target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_seama.c

index 42841ef54198c3f8e32d4c81ec4f7c9c34be72da..0b52f088c47061d8098806af361f3e5045aa0a48 100644 (file)
@@ -15,6 +15,7 @@
 
 #define KERNEL_PART_NAME       "kernel"
 #define ROOTFS_PART_NAME       "rootfs"
+#define UBI_PART_NAME          "ubi"
 
 #define ROOTFS_SPLIT_NAME      "rootfs_data"
 
index 228b8997ad7e09cd7c8a37638fbceb8750bdd816..f8ddee7ce0bf141c5fbc48b6161e062afea934ec 100644 (file)
@@ -36,6 +36,7 @@ static int mtdsplit_parse_seama(struct mtd_info *master,
        size_t hdr_len, retlen, kernel_ent_size;
        size_t rootfs_offset;
        struct mtd_partition *parts;
+       enum mtdsplit_part_type type;
        int err;
 
        hdr_len = sizeof(hdr);
@@ -56,7 +57,7 @@ static int mtdsplit_parse_seama(struct mtd_info *master,
                return -EINVAL;
 
        /* Check for the rootfs right after Seama entity with a kernel. */
-       err = mtd_check_rootfs_magic(master, kernel_ent_size, NULL);
+       err = mtd_check_rootfs_magic(master, kernel_ent_size, &type);
        if (!err) {
                rootfs_offset = kernel_ent_size;
        } else {
@@ -67,7 +68,7 @@ static int mtdsplit_parse_seama(struct mtd_info *master,
                 * Start the search from an arbitrary offset.
                 */
                err = mtd_find_rootfs_from(master, SEAMA_MIN_ROOTFS_OFFS,
-                                          master->size, &rootfs_offset, NULL);
+                                          master->size, &rootfs_offset, &type);
                if (err)
                        return err;
        }
@@ -80,7 +81,10 @@ static int mtdsplit_parse_seama(struct mtd_info *master,
        parts[0].offset = 0;
        parts[0].size = rootfs_offset;
 
-       parts[1].name = ROOTFS_PART_NAME;
+       if (type == MTDSPLIT_PART_TYPE_UBI)
+               parts[1].name = UBI_PART_NAME;
+       else
+               parts[1].name = ROOTFS_PART_NAME;
        parts[1].offset = rootfs_offset;
        parts[1].size = master->size - rootfs_offset;