uboot-lantiq: vrx200 - lzma compress gphy firmware
authorMathias Kresin <dev@kresin.me>
Thu, 26 May 2016 21:08:26 +0000 (23:08 +0200)
committerJohn Crispin <john@phrozen.org>
Fri, 27 May 2016 13:50:17 +0000 (15:50 +0200)
The default bootloader partition of some devices is to small for an
u-boot with uncompressed gphy firmware(s).

Instead of increasing the bootloader partition size, in compare to the
stock firmware, compress the firmware. This would allow the bootloader
of at least the FritzBox 3370 as well as the bootloader of the
VGV7510KW22 to fit into the bootloader partition of the stock firmware.

Signed-off-by: Mathias Kresin <dev@kresin.me>
package/boot/uboot-lantiq/Makefile
package/boot/uboot-lantiq/patches/0014-MIPS-add-support-for-Lantiq-XWAY-SoCs.patch

index 11a10f0ed7f6204e34a6aa5f3e46dc8f984a3a8b..5b61f140457513e1b2f4af15f2a47c2cf066c416 100644 (file)
@@ -330,18 +330,19 @@ define BuildUBootPackage
        $(call Package/uboot/template,$(1),$(TITLE),$(DEPS))
 endef
 
-define CopyVR9Firmware
-       $(CP) $(FIRMWARE_LANTIQ_SOURCE)/vr9_phy$(1)_a$(2)x.bin \
+define CompressVR9Firmware
+       $(STAGING_DIR_HOST)/bin/lzma e \
+               $(FIRMWARE_LANTIQ_SOURCE)/vr9_phy$(1)_a$(2)x.bin \
                $(PKG_BUILD_DIR)/arch/mips/cpu/mips32/vrx200/fw_phy$(1)_a$(2)x.blob
 endef
 
 define Build/Prepare
        $(call Build/Prepare/Default)
        mkdir -p $(PKG_BUILD_DIR)/arch/mips/cpu/mips32/vrx200/
-       $(call CopyVR9Firmware,11g,1)
-       $(call CopyVR9Firmware,11g,2)
-       $(call CopyVR9Firmware,22f,1)
-       $(call CopyVR9Firmware,22f,2)
+       $(call CompressVR9Firmware,11g,1)
+       $(call CompressVR9Firmware,11g,2)
+       $(call CompressVR9Firmware,22f,1)
+       $(call CompressVR9Firmware,22f,2)
 endef
 
 define Build/Configure
index 1c448572a967019f3aa2caf8df25922886921de9..08133bb08f15021b620979e24a913fd2289981fe 100644 (file)
@@ -2510,7 +2510,7 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
 +}
 --- /dev/null
 +++ b/arch/mips/cpu/mips32/vrx200/gphy.c
-@@ -0,0 +1,58 @@
+@@ -0,0 +1,68 @@
 +/*
 + * Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
 + *
@@ -2521,17 +2521,23 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
 +#include <asm/lantiq/io.h>
 +#include <asm/arch/soc.h>
 +#include <asm/arch/gphy.h>
++#include <lzma/LzmaTypes.h>
++#include <lzma/LzmaDec.h>
++#include <lzma/LzmaTools.h>
 +
-+static inline void ltq_gphy_copy(const void *fw_start, const void *fw_end,
++static inline void ltq_gphy_decompress(const void *fw_start, const void *fw_end,
 +                              ulong dst_addr)
 +{
 +      const ulong fw_len = (ulong) fw_end - (ulong) fw_start;
 +      const ulong addr = CKSEG1ADDR(dst_addr);
 +
-+      debug("ltq_gphy_copy: addr %08lx, fw_start %p, fw_end %p\n",
++      debug("ltq_gphy_decompress: addr %08lx, fw_start %p, fw_end %p\n",
 +              addr, fw_start, fw_end);
 +
-+      memcpy((void *) addr, fw_start, fw_len);
++      SizeT lzma_len = 65536;
++      int ret = lzmaBuffToBuffDecompress(
++      (unsigned char *)addr, &lzma_len,
++      (unsigned char *)fw_start, fw_len);
 +}
 +
 +void ltq_gphy_phy11g_a1x_load(ulong addr)
@@ -2539,8 +2545,9 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
 +      extern ulong __ltq_fw_phy11g_a1x_start;
 +      extern ulong __ltq_fw_phy11g_a1x_end;
 +
-+      ltq_gphy_copy(&__ltq_fw_phy11g_a1x_start, &__ltq_fw_phy11g_a1x_end,
-+                      addr);
++      ltq_gphy_decompress(&__ltq_fw_phy11g_a1x_start,
++                          &__ltq_fw_phy11g_a1x_end,
++                          addr);
 +}
 +
 +void ltq_gphy_phy11g_a2x_load(ulong addr)
@@ -2548,8 +2555,9 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
 +      extern ulong __ltq_fw_phy11g_a2x_start;
 +      extern ulong __ltq_fw_phy11g_a2x_end;
 +
-+      ltq_gphy_copy(&__ltq_fw_phy11g_a2x_start, &__ltq_fw_phy11g_a2x_end,
-+                      addr);
++      ltq_gphy_decompress(&__ltq_fw_phy11g_a2x_start,
++                          &__ltq_fw_phy11g_a2x_end,
++                          addr);
 +}
 +
 +void ltq_gphy_phy22f_a1x_load(ulong addr)
@@ -2557,8 +2565,9 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
 +      extern ulong __ltq_fw_phy22f_a1x_start;
 +      extern ulong __ltq_fw_phy22f_a1x_end;
 +
-+      ltq_gphy_copy(&__ltq_fw_phy22f_a1x_start, &__ltq_fw_phy22f_a1x_end,
-+                      addr);
++      ltq_gphy_decompress(&__ltq_fw_phy22f_a1x_start,
++                          &__ltq_fw_phy22f_a1x_end,
++                          addr);
 +}
 +
 +void ltq_gphy_phy22f_a2x_load(ulong addr)
@@ -2566,8 +2575,9 @@ Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
 +      extern ulong __ltq_fw_phy22f_a2x_start;
 +      extern ulong __ltq_fw_phy22f_a2x_end;
 +
-+      ltq_gphy_copy(&__ltq_fw_phy22f_a2x_start, &__ltq_fw_phy22f_a2x_end,
-+                      addr);
++      ltq_gphy_decompress(&__ltq_fw_phy22f_a2x_start,
++                          &__ltq_fw_phy22f_a2x_end,
++                          addr);
 +}
 --- /dev/null
 +++ b/arch/mips/cpu/mips32/vrx200/gphy_fw.S