X-Git-Url: http://git.ozo.com/?a=blobdiff_plain;f=target%2Flinux%2Fbrcm47xx%2Fimage%2Flzma-loader%2Fsrc%2Fdecompress.c;fp=target%2Flinux%2Fbrcm47xx%2Fimage%2Flzma-loader%2Fsrc%2Fdecompress.c;h=05681b152d4bd366b76178d91761744e413008a2;hb=08e8737994db7654157be36585c43c563b2a6735;hp=ce2876a3047ebfdf086e92c717a9c3540465b8cd;hpb=fab3a85d30350bbaa65e938f39b66e06e614af22;p=openwrt-working-2016%2F.git diff --git a/target/linux/brcm47xx/image/lzma-loader/src/decompress.c b/target/linux/brcm47xx/image/lzma-loader/src/decompress.c index ce2876a304..05681b152d 100644 --- a/target/linux/brcm47xx/image/lzma-loader/src/decompress.c +++ b/target/linux/brcm47xx/image/lzma-loader/src/decompress.c @@ -87,6 +87,9 @@ struct trx_header { unsigned int offsets[3]; /* Offsets of partitions from start of header */ }; +#define EDIMAX_PS_HEADER_MAGIC 0x36315350 /* "PS16" */ +#define EDIMAX_PS_HEADER_LEN 0xc /* 12 bytes long for edimax header */ + /* beyound the image end, size not known in advance */ extern unsigned char workspace[]; @@ -135,8 +138,12 @@ void entry(unsigned long icache_size, unsigned long icache_lsize, /* look for trx header, 32-bit data access */ for (data = ((unsigned char *) KSEG1ADDR(BCM4710_FLASH)); - ((struct trx_header *)data)->magic != TRX_MAGIC; data += 65536); + ((struct trx_header *)data)->magic != TRX_MAGIC && + ((struct trx_header *)data)->magic != EDIMAX_PS_HEADER_MAGIC; + data += 65536); + if (((struct trx_header *)data)->magic == EDIMAX_PS_HEADER_MAGIC) + data += EDIMAX_PS_HEADER_LEN; /* compressed kernel is in the partition 0 or 1 */ if (((struct trx_header *)data)->offsets[1] > 65536) data += ((struct trx_header *)data)->offsets[0];