--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
@@ -796,8 +796,11 @@ static void split_uimage(struct mtd_info
 {
 	struct {
 		__be32 magic;
-		__be32 pad[2];
+		__be32 pad0[2];
 		__be32 size;
+		__be32 pad1[4];
+		__be32 name[7];
+		__be32 kern_size;
 	} hdr;
 	size_t len;
 
@@ -807,7 +810,10 @@ static void split_uimage(struct mtd_info
 	if (len != sizeof(hdr) || hdr.magic != cpu_to_be32(UBOOT_MAGIC))
 		return;
 
-	len = be32_to_cpu(hdr.size) + 0x40;
+	if (hdr.kern_size != 0 && hdr.name[0] == 0)
+		len = be32_to_cpu(hdr.kern_size);
+	else
+		len = be32_to_cpu(hdr.size) + 0x40;
 
 	if (config_enabled(CONFIG_MTD_SPLIT_UIMAGE_FW))
 		pr_err("Dedicated partitioner didn't split firmware partition, please fill a bug report!\n");
