From 576c69938bb38c7edfa23f220eb30cb5c1d0a726 Mon Sep 17 00:00:00 2001 From: Pawel Dembicki Date: Thu, 3 Jan 2019 16:08:51 +0000 Subject: [PATCH] mpc85xx: tl-wdr4900-v1: convert to mtdsplit image 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 Signed-off-by: Christian Lamparter [reworded commit] --- .../arch/powerpc/boot/dts/tl-wdr4900-v1.dts | 63 +++++++++---------- target/linux/mpc85xx/generic/config-default | 2 + target/linux/mpc85xx/image/Makefile | 39 ++++++++---- 3 files changed, 57 insertions(+), 47 deletions(-) diff --git a/target/linux/mpc85xx/files/arch/powerpc/boot/dts/tl-wdr4900-v1.dts b/target/linux/mpc85xx/files/arch/powerpc/boot/dts/tl-wdr4900-v1.dts index c54cab9511..0969b272a8 100644 --- a/target/linux/mpc85xx/files/arch/powerpc/boot/dts/tl-wdr4900-v1.dts +++ b/target/linux/mpc85xx/files/arch/powerpc/boot/dts/tl-wdr4900-v1.dts @@ -35,49 +35,44 @@ 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; - }; + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; - dtb@50000 { - reg = <0x00050000 0x00010000>; - label = "dtb"; - read-only; - }; + partition@0 { + reg = <0x0 0x0050000>; + label = "u-boot"; + read-only; + }; - kernel@60000 { - reg = <0x00060000 0x002a0000>; - label = "kernel"; - }; + partition@50000 { + reg = <0x00050000 0x00010000>; + label = "dtb"; + read-only; + }; - rootfs@300000 { - reg = <0x00300000 0x00ce0000>; - label = "rootfs"; - }; + partition@60000 { + compatible = "tplink,firmware"; + reg = <0x00060000 0x00f80000>; + label = "firmware"; + }; - config: config@fe0000 { - reg = <0x00fe0000 0x00010000>; - label = "config"; - read-only; - }; + config: partition@fe0000 { + reg = <0x00fe0000 0x00010000>; + label = "config"; + read-only; + }; - caldata@ff0000 { - reg = <0x00ff0000 0x00010000>; - label = "caldata"; - read-only; - }; - - firmware@60000 { - reg = <0x00060000 0x00f80000>; - label = "firmware"; + partition@ff0000 { + reg = <0x00ff0000 0x00010000>; + label = "caldata"; + read-only; + }; }; }; }; diff --git a/target/linux/mpc85xx/generic/config-default b/target/linux/mpc85xx/generic/config-default index 81bf934b33..1e5b257b45 100644 --- a/target/linux/mpc85xx/generic/config-default +++ b/target/linux/mpc85xx/generic/config-default @@ -1 +1,3 @@ +CONFIG_MTD_SPLIT_FIRMWARE=y +CONFIG_MTD_SPLIT_TPLINK_FW=y CONFIG_TL_WDR4900_V1=y diff --git a/target/linux/mpc85xx/image/Makefile b/target/linux/mpc85xx/image/Makefile index 349d2961de..00eed88874 100644 --- a/target/linux/mpc85xx/image/Makefile +++ b/target/linux/mpc85xx/image/Makefile @@ -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 +# is "sysupgrade" or "factory" +# +# -a align the rootfs start on an bytes boundary +# -j add jffs2 end-of-filesystem markers +# -s strip padding from end of the image +# -X reserve 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