94 lines
2.9 KiB
Diff
94 lines
2.9 KiB
Diff
|
Index: linux-3.1.9/drivers/mtd/mtdpart.c
|
||
|
===================================================================
|
||
|
--- linux-3.1.9.orig/drivers/mtd/mtdpart.c 2012-01-29 22:55:30.295904157 +0100
|
||
|
+++ linux-3.1.9/drivers/mtd/mtdpart.c 2012-01-29 22:55:30.395904294 +0100
|
||
|
@@ -899,6 +899,38 @@
|
||
|
return le32_to_cpu(temp) == SQUASHFS_MAGIC;
|
||
|
}
|
||
|
|
||
|
+static unsigned long find_brnimage_size(struct mtd_info *mtd,
|
||
|
+ unsigned long offset)
|
||
|
+{
|
||
|
+ unsigned long buf[4];
|
||
|
+ // Assume at most 2MB of kernel image
|
||
|
+ unsigned long end = offset + (2 << 20);
|
||
|
+ unsigned long ptr = offset + 0x400 - 12;
|
||
|
+ size_t len;
|
||
|
+ int ret;
|
||
|
+
|
||
|
+ while (ptr < end) {
|
||
|
+ long size_min = ptr - 0x400 - 12 - offset;
|
||
|
+ long size_max = ptr + 12 - offset;
|
||
|
+ ret = mtd->read(mtd, ptr, 16, &len, (void *)buf);
|
||
|
+ if (ret || len != 16)
|
||
|
+ return 0;
|
||
|
+
|
||
|
+ if (le32_to_cpu(buf[0]) < size_min ||
|
||
|
+ le32_to_cpu(buf[0]) > size_max) {
|
||
|
+ ptr += 0x400;
|
||
|
+ continue;
|
||
|
+ }
|
||
|
+
|
||
|
+ if (le32_to_cpu(buf[3]) == SQUASHFS_MAGIC)
|
||
|
+ return ptr + 12 - offset;
|
||
|
+
|
||
|
+ ptr += 0x400;
|
||
|
+ }
|
||
|
+
|
||
|
+ return 0;
|
||
|
+}
|
||
|
+
|
||
|
static int split_uimage(struct mtd_info *mtd,
|
||
|
const struct mtd_partition *part)
|
||
|
{
|
||
|
@@ -916,8 +948,11 @@
|
||
|
|
||
|
split_partitions[0].size = find_uimage_size(mtd, part->offset);
|
||
|
if (!split_partitions[0].size) {
|
||
|
- printk(KERN_NOTICE "no uImage found in linux partition\n");
|
||
|
- return -1;
|
||
|
+ split_partitions[0].size = find_brnimage_size(mtd, part->offset);
|
||
|
+ if (!split_partitions[0].size) {
|
||
|
+ printk(KERN_NOTICE "no uImage or brnImage found in linux partition\n");
|
||
|
+ return -1;
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
if (!detect_squashfs_partition(mtd,
|
||
|
Index: linux-3.1.9/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
|
||
|
===================================================================
|
||
|
--- linux-3.1.9.orig/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h 2012-01-29 22:55:30.195904014 +0100
|
||
|
+++ linux-3.1.9/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h 2012-01-29 22:55:30.395904294 +0100
|
||
|
@@ -149,6 +149,7 @@
|
||
|
|
||
|
extern __iomem void *ltq_ebu_membase;
|
||
|
extern __iomem void *ltq_cgu_membase;
|
||
|
+extern long ltq_brn_boot;
|
||
|
|
||
|
/* request a non-gpio and set the PIO config */
|
||
|
extern int ltq_gpio_request(unsigned int pin, unsigned int alt0,
|
||
|
Index: linux-3.1.9/arch/mips/lantiq/setup.c
|
||
|
===================================================================
|
||
|
--- linux-3.1.9.orig/arch/mips/lantiq/setup.c 2012-01-29 22:55:30.095903875 +0100
|
||
|
+++ linux-3.1.9/arch/mips/lantiq/setup.c 2012-01-29 22:59:28.686237119 +0100
|
||
|
@@ -20,6 +20,8 @@
|
||
|
|
||
|
/* assume 16M as default incase uboot fails to pass proper ramsize */
|
||
|
unsigned long physical_memsize = 16L;
|
||
|
+/* set to 1 if the bootloader is BRN-BOOT instead of u-boot */
|
||
|
+unsigned long ltq_brn_boot = 0;
|
||
|
|
||
|
void __init plat_mem_setup(void)
|
||
|
{
|
||
|
@@ -39,6 +41,10 @@
|
||
|
if (strict_strtoul(e, 0, &physical_memsize))
|
||
|
pr_warn("bad memsize specified\n");
|
||
|
}
|
||
|
+ if (!strncmp(e, "BRN-BOOT", 8)){
|
||
|
+ pr_info("Found BRN-BOOT instead of u-boot\n");
|
||
|
+ ltq_brn_boot = 1;
|
||
|
+ }
|
||
|
envp++;
|
||
|
}
|
||
|
physical_memsize *= 1024 * 1024;
|