mpc85xx: tl-wdr4900-v1: convert to mtdsplit image
authorPawel Dembicki <paweldembicki@gmail.com>
Thu, 3 Jan 2019 16:08:51 +0000 (16:08 +0000)
committerChristian Lamparter <chunkeey@gmail.com>
Sat, 5 Jan 2019 20:59:52 +0000 (21:59 +0100)
Currently, the image creation process for the TP-Link tl-wdr4900-v1
needs a fixed sized kernel and places the rootfs partition at a
fixed offset. With the upcoming move to 4.19 the kernel will no
longer fit into the existing allocated space for the kernel
partition.

This patch converts the device to utilize the established
tplink,firmware mtdsplitter, which can deal with a dynamic
kernel/rootfs size.

Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
Signed-off-by: Christian Lamparter <chunkeey@gmail.com> [reworded commit]
target/linux/mpc85xx/files/arch/powerpc/boot/dts/tl-wdr4900-v1.dts
target/linux/mpc85xx/generic/config-default
target/linux/mpc85xx/image/Makefile

index c54cab95118b25971c814d96520f0eb23327622a..0969b272a84b845c5e5c584758801e411b31b2f9 100644 (file)
 
                spi0: spi@7000 {
                        flash@0 {
-                               #address-cells = <1>;
-                               #size-cells = <1>;
                                compatible = "jedec,spi-nor";
                                reg = <0>;
                                spi-max-frequency = <25000000>;
 
-                               u-boot@0 {
-                                       reg = <0x0 0x0050000>;
-                                       label = "u-boot";
-                                       read-only;
-                               };
-
-                               dtb@50000 {
-                                       reg = <0x00050000 0x00010000>;
-                                       label = "dtb";
-                                       read-only;
-                               };
-
-                               kernel@60000 {
-                                       reg = <0x00060000 0x002a0000>;
-                                       label = "kernel";
-                               };
-
-                               rootfs@300000 {
-                                       reg = <0x00300000 0x00ce0000>;
-                                       label = "rootfs";
-                               };
-
-                               config: config@fe0000 {
-                                       reg = <0x00fe0000 0x00010000>;
-                                       label = "config";
-                                       read-only;
-                               };
-
-                               caldata@ff0000 {
-                                       reg = <0x00ff0000 0x00010000>;
-                                       label = "caldata";
-                                       read-only;
-                               };
-
-                               firmware@60000 {
-                                       reg = <0x00060000 0x00f80000>;
-                                       label = "firmware";
+                               partitions {
+                                       compatible = "fixed-partitions";
+                                       #address-cells = <1>;
+                                       #size-cells = <1>;
+
+                                       partition@0 {
+                                               reg = <0x0 0x0050000>;
+                                               label = "u-boot";
+                                               read-only;
+                                       };
+
+                                       partition@50000 {
+                                               reg = <0x00050000 0x00010000>;
+                                               label = "dtb";
+                                               read-only;
+                                       };
+
+                                       partition@60000 {
+                                               compatible = "tplink,firmware";
+                                               reg = <0x00060000 0x00f80000>;
+                                               label = "firmware";
+                                       };
+
+                                       config: partition@fe0000 {
+                                               reg = <0x00fe0000 0x00010000>;
+                                               label = "config";
+                                               read-only;
+                                       };
+
+                                       partition@ff0000 {
+                                               reg = <0x00ff0000 0x00010000>;
+                                               label = "caldata";
+                                               read-only;
+                                       };
                                };
                        };
                };
index 81bf934b33c1db9b30155e352c2b68c6de5eda55..1e5b257b45046bd6c2a1d53a12eb10ef1624201b 100644 (file)
@@ -1 +1,3 @@
+CONFIG_MTD_SPLIT_FIRMWARE=y
+CONFIG_MTD_SPLIT_TPLINK_FW=y
 CONFIG_TL_WDR4900_V1=y
index 349d2961dee22e8550f9a6ea0899b4248e8c6ab8..00eed888740a18460877b492cba59c4d2a31808a 100644 (file)
@@ -7,6 +7,30 @@ include $(INCLUDE_DIR)/image.mk
 
 DEVICE_VARS += TPLINK_HWID TPLINK_HWREV TPLINK_FLASHLAYOUT
 
+define rootfs_align
+$(patsubst %-256k,0x40000,$(patsubst %-128k,0x20000,$(patsubst %-64k,0x10000,$(patsubst squashfs%,0x4,$(patsubst root.%,%,$(1))))))
+endef
+
+# combine kernel and rootfs into one image
+# mktplinkfw <type> <optional extra arguments to mktplinkfw binary>
+# <type> is "sysupgrade" or "factory"
+#
+# -a align the rootfs start on an <align> bytes boundary
+# -j add jffs2 end-of-filesystem markers
+# -s strip padding from end of the image
+# -X reserve <size> bytes in the firmware image (hexval prefixed with 0x)
+define Build/mktplinkfw
+       -$(STAGING_DIR_HOST)/bin/mktplinkfw \
+               -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -F $(TPLINK_FLASHLAYOUT) -N OpenWrt -V $(REVISION) \
+               -k $(IMAGE_KERNEL) \
+               -r $@ \
+               -o $@.new \
+               -j -X 0x40000 \
+               -a $(call rootfs_align,$(FILESYSTEM)) \
+               $(wordlist 2,$(words $(1)),$(1)) \
+               $(if $(findstring sysupgrade,$(word 1,$(1))),-s) && mv $@.new $@ || rm -f $@
+endef
+
 define Device/Default
   PROFILES := Default
   DEVICE_DTS := $(1)
@@ -16,17 +40,6 @@ define Device/Default
   KERNEL := kernel-bin
 endef
 
-define Build/tplink-v1-image
-       $(STAGING_DIR_HOST)/bin/mktplinkfw \
-               -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -F $(TPLINK_FLASHLAYOUT) \
-               -N "$(VERSION_DIST)" -V $(REVISION) \
-               -k $(IMAGE_KERNEL) \
-               -r $(IMAGE_ROOTFS) \
-               -j \
-               $(1) \
-               -o $@
-endef
-
 ifeq ($(SUBTARGET),generic)
 
 define Device/tl-wdr4900-v1
@@ -39,8 +52,8 @@ define Device/tl-wdr4900-v1
   SUPPORTED_DEVICES:=tl-wdr4900-v1 tplink,tl-wdr4900-v1
   IMAGES := fdt.bin factory.bin sysupgrade.bin
   IMAGE/fdt.bin := append-dtb
-  IMAGE/factory.bin := tplink-v1-image
-  IMAGE/sysupgrade.bin := tplink-v1-image -s | append-metadata
+  IMAGE/sysupgrade.bin := append-rootfs | mktplinkfw sysupgrade | append-metadata
+  IMAGE/factory.bin := append-rootfs | mktplinkfw factory
 endef
 TARGET_DEVICES += tl-wdr4900-v1