$(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
+}
--- /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
+ *
+#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)
+ 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)
+ 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)
+ 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)
+ 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