#define ML_MAGIC2                      0x26594131
 #define TRX_MAGIC                      0x30524448
 #define SQSH_MAGIC                     0x71736873      /* shsq */
+#define UBI_EC_MAGIC                   0x23494255      /* UBI# */
 
 struct trx_header {
        uint32_t magic;
        uint32_t offset[3];
 } __packed;
 
-static void bcm47xxpart_add_part(struct mtd_partition *part, char *name,
+static void bcm47xxpart_add_part(struct mtd_partition *part, const char *name,
                                 u64 offset, uint32_t mask_flags)
 {
        part->name = name;
        part->mask_flags = mask_flags;
 }
 
+static const char *bcm47xxpart_trx_data_part_name(struct mtd_info *master,
+                                                 size_t offset)
+{
+       uint32_t buf;
+       size_t bytes_read;
+
+       if (mtd_read(master, offset, sizeof(buf), &bytes_read,
+                    (uint8_t *)&buf) < 0) {
+               pr_err("mtd_read error while parsing (offset: 0x%X)!\n",
+                       offset);
+               goto out_default;
+       }
+
+       if (buf == UBI_EC_MAGIC)
+               return "ubi";
+
+out_default:
+       return "rootfs";
+}
+
 static int bcm47xxpart_parse(struct mtd_info *master,
                             struct mtd_partition **pparts,
                             struct mtd_part_parser_data *data)
                         * we want to have jffs2 (overlay) in the same mtd.
                         */
                        if (trx->offset[i]) {
+                               const char *name;
+
+                               name = bcm47xxpart_trx_data_part_name(master, offset + trx->offset[i]);
                                bcm47xxpart_add_part(&parts[curr_part++],
-                                                    "rootfs",
+                                                    name,
                                                     offset + trx->offset[i],
                                                     0);
                                i++;