kernel: mtdsplit: support Seama entity with UBI
authorrmilecki <rmilecki@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Mon, 1 Feb 2016 12:41:53 +0000 (12:41 +0000)
committerrmilecki <rmilecki@3c298f89-4303-0410-b956-a3cf2f4a3e73>
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>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@48600 3c298f89-4303-0410-b956-a3cf2f4a3e73

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

index 42841ef..0b52f08 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 228b899..f8ddee7 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;