lantiq: ar7: use okli loader for FRITZ!Box
authorMathias Kresin <dev@kresin.me>
Sun, 14 Nov 2021 20:53:45 +0000 (21:53 +0100)
committerMathias Kresin <dev@kresin.me>
Sat, 27 Nov 2021 20:40:12 +0000 (21:40 +0100)
With Kernel 5.10 the ar7 FRITZ!Box are not booting the initramfs nor the
sysupgrade image any more. Presumably due to the grown kernel.

Use the okli preloader to workaround the bootloader issue. No solution
so far for the initramfs.

Signed-off-by: Mathias Kresin <dev@kresin.me>
target/linux/lantiq/files/arch/mips/boot/dts/lantiq/ar9_avm_fritz7312.dts
target/linux/lantiq/files/arch/mips/boot/dts/lantiq/ar9_avm_fritz7320.dts
target/linux/lantiq/image/Makefile
target/linux/lantiq/image/ar9.mk

index 8d3d686f4638302e0cc9a376a31fed7ed46c032d..c8e67537a94971ae8cab34fafb26b48948f77e0d 100644 (file)
@@ -1,6 +1,7 @@
 #include "ar9.dtsi"
 
 #include <dt-bindings/input/input.h>
+#include <dt-bindings/mtd/partitions/uimage.h>
 
 / {
        compatible = "avm,fritz7312", "lantiq,xway", "lantiq,ar9";
 
                        partition@20000 {
                                label = "firmware";
+                               compatible = "openwrt,uimage", "denx,uimage";
                                reg = <0x20000 0xf60000>;
+                               openwrt,ih-magic = <IH_MAGIC_OKLI>;
+                               openwrt,offset = <0x11000>;
                        };
 
                        partition@f80000 {
index f3b4e5e4f53cb8cf24a247a43c3ef717471f21cc..44b8a18dae966cbf699ac42b9b6500cb6d5bf8ae 100644 (file)
@@ -1,6 +1,7 @@
 #include "ar9.dtsi"
 
 #include <dt-bindings/input/input.h>
+#include <dt-bindings/mtd/partitions/uimage.h>
 
 / {
        compatible = "avm,fritz7320", "lantiq,xway", "lantiq,ar9";
                        };
 
                        partition@20000 {
+                               compatible = "openwrt,uimage", "denx,uimage";
                                label = "firmware";
                                reg = <0x20000 0xf60000>;
+                               openwrt,ih-magic = <IH_MAGIC_OKLI>;
+                               openwrt,offset = <0x11000>;
                        };
 
                        partition@f80000 {
index ec10cd882a01cd7067b292f9b47294f030661c5d..facc3fbe099f5f9f31a76973d33202774b735de1 100644 (file)
@@ -49,12 +49,35 @@ define Build/fullimage
        rm $@.tmp
 endef
 
-DEVICE_VARS += SIGNATURE MAGIC CRC32_POLY
+define Build/loader-okli-compile
+       rm -rf $@.src
+       $(MAKE) -C lzma-loader \
+               PKG_BUILD_DIR="$@.src" \
+               TARGET_DIR="$(dir $@)" LOADER_NAME="$(notdir $@)" \
+               PLATFORM="lantiq" \
+               LZMA_TEXT_START=0x82000000 \
+               LOADADDR=0x80002000 \
+               FLASH_START=0x10000000 \
+               FLASH_OFFS=$(LOADER_FLASH_OFFS) \
+               FLASH_MAX=0x0 \
+               $(1) compile loader.bin
+       mv "$@.bin" "$@"
+       rm -rf $@.src
+endef
+
+define Build/prepend-loader-okli
+       cat "$(KDIR)/loader-$(word 1,$(1)).bin" "$@" >> "$@.new"
+       mv "$@.new" "$@"
+endef
+
+DEVICE_VARS += SIGNATURE MAGIC CRC32_POLY LOADER_FLASH_OFFS
+
 DTS_DIR := $(DTS_DIR)/lantiq
 
 # Shared device definition: applies to every defined device
 define Device/Default
   PROFILES = Default
+  COMPILE :=
   KERNEL_DEPENDS = $$(wildcard $(DTS_DIR)/$$(DEVICE_DTS).dts)
   KERNEL_INITRAMFS_NAME = $$(KERNEL_NAME)-initramfs
   KERNEL := kernel-bin | append-dtb | lzma | uImage lzma
@@ -105,6 +128,16 @@ define Device/AVM
        append-rootfs | pad-rootfs | check-size | append-metadata
 endef
 
+define Device/AVM_preloader
+  DEVICE_VENDOR := AVM
+  COMPILE := loader-$(1).bin
+  COMPILE/loader-$(1).bin := loader-okli-compile | lzma | eva-image | \
+       pad-to 64k | append-avm-fakeroot | pad-to 4k
+  KERNEL := kernel-bin | append-dtb | lzma | uImage lzma -M 0x4f4b4c49 | \
+       prepend-loader-okli $(1)
+  KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma | eva-image
+endef
+
 ifeq ($(SUBTARGET),ase)
 DEFAULT_SOC := amazonse
 include amazonse.mk
index a68868f0d9c5278d768ab2746741fee57de5f36d..5a17395f82cfa35b10daa4c1aa93f7c5f0f99b0f 100644 (file)
@@ -1,8 +1,9 @@
 define Device/avm_fritz7312
-  $(Device/AVM)
+  $(Device/AVM_preloader)
   DEVICE_MODEL := FRITZ!Box 7312
   SOC := ar9
   IMAGE_SIZE := 15744k
+  LOADER_FLASH_OFFS := 0x31000
   DEVICE_PACKAGES := kmod-ath9k kmod-owl-loader wpad-basic-wolfssl \
        kmod-ltq-adsl-ar9-mei kmod-ltq-adsl-ar9 \
        kmod-ltq-adsl-ar9-fw-b kmod-ltq-atm-ar9 \
@@ -12,12 +13,13 @@ endef
 TARGET_DEVICES += avm_fritz7312
 
 define Device/avm_fritz7320
-  $(Device/AVM)
+  $(Device/AVM_preloader)
   DEVICE_MODEL := FRITZ!Box 7320
   DEVICE_ALT0_VENDOR := 1&1
   DEVICE_ALT0_MODEL := HomeServer
   SOC := ar9
   IMAGE_SIZE := 15744k
+  LOADER_FLASH_OFFS := 0x31000
   DEVICE_PACKAGES := kmod-ath9k kmod-owl-loader wpad-basic-wolfssl \
        kmod-ltq-adsl-ar9-mei kmod-ltq-adsl-ar9 \
        kmod-ltq-adsl-ar9-fw-b kmod-ltq-atm-ar9 \