WIP: bcm63xx: add kernel 5.4 as testing kernel
[openwrt/staging/jogo.git] / target / linux / bcm63xx / patches-5.4 / 401-bcm963xx_real_rootfs_length.patch
diff --git a/target/linux/bcm63xx/patches-5.4/401-bcm963xx_real_rootfs_length.patch b/target/linux/bcm63xx/patches-5.4/401-bcm963xx_real_rootfs_length.patch
new file mode 100644 (file)
index 0000000..e92ec2d
--- /dev/null
@@ -0,0 +1,27 @@
+--- a/include/linux/bcm963xx_tag.h
++++ b/include/linux/bcm963xx_tag.h
+@@ -92,8 +92,10 @@ struct bcm_tag {
+       __u32 rootfs_crc;
+       /* 224-227: CRC32 of kernel partition */
+       __u32 kernel_crc;
+-      /* 228-235: Unused at present */
+-      char reserved1[8];
++      /* 228-231: Unused at present */
++      char reserved1[4];
++      /* 222-235: Openwrt: real rootfs length */
++      __u32 real_rootfs_length;
+       /* 236-239: CRC32 of header excluding last 20 bytes */
+       __u32 header_crc;
+       /* 240-255: Unused at present */
+--- a/drivers/mtd/parsers/parser_imagetag.c
++++ b/drivers/mtd/parsers/parser_imagetag.c
+@@ -132,7 +132,8 @@ static int bcm963xx_parse_imagetag_parti
+               } else {
+                       /* OpenWrt layout */
+                       rootfsaddr = kerneladdr + kernellen;
+-                      rootfslen = spareaddr - rootfsaddr;
++                      rootfslen = buf->real_rootfs_length;
++                      spareaddr = rootfsaddr + rootfslen;
+               }
+       } else {
+               goto out;