diff options
Diffstat (limited to 'target/linux/brcm63xx/patches-3.18/366-MIPS-add-support-for-vmlinux.bin-appended-DTB.patch')
-rw-r--r-- | target/linux/brcm63xx/patches-3.18/366-MIPS-add-support-for-vmlinux.bin-appended-DTB.patch | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/target/linux/brcm63xx/patches-3.18/366-MIPS-add-support-for-vmlinux.bin-appended-DTB.patch b/target/linux/brcm63xx/patches-3.18/366-MIPS-add-support-for-vmlinux.bin-appended-DTB.patch new file mode 100644 index 0000000..ff455dd --- /dev/null +++ b/target/linux/brcm63xx/patches-3.18/366-MIPS-add-support-for-vmlinux.bin-appended-DTB.patch @@ -0,0 +1,124 @@ +From 318c1fce4aeef298cbb6153416c499c94ad7cda0 Mon Sep 17 00:00:00 2001 +From: Jonas Gorski <jogo@openwrt.org> +Date: Tue, 24 Jun 2014 10:53:15 +0200 +Subject: [PATCH RFC v3] MIPS: add support for vmlinux.bin appended DTB + +Add support for populating initial_boot_params through a dtb +blob appended to raw vmlinux.bin. + +Signed-off-by: Jonas Gorski <jogo@openwrt.org> +--- +Changes RFC v2 -> v3 + +* fixed !smp kernels (TODO: move it to its own patch + +Changes RFC v1 -> v2 + +* changed all occurences of vmlinux to vmlinux.bin +* clarified this applies to the raw vmlinux.bin without decompressor +* s/initial_device_params/initial_boot_params/ + +Initial comments by me still valid: + +Mostly adapted from how ARM is doing it. + +Sent as an RFC PATCH because I am not sure if this is the right way to +it, and whether storing the pointer in initial_boot_params is a good +idea, or a new variable should be introduced. + +The reasoning for initial_boot_params is that there is no common +MIPS interface yet, so the next best thing was using that. This also +has the advantage of keeping the original fw_args intact. + +This patch works for me on bcm63xx, where the bootloader expects +an lzma compressed kernel, so I didn't want to double compress using +the in-kernel compressed kernel support. + +Completely untested on anything except MIPS32 / big endian. + + arch/mips/Kconfig | 18 ++++++++++++++++++ + arch/mips/kernel/head.S | 19 +++++++++++++++++++ + arch/mips/kernel/vmlinux.lds.S | 7 +++++++ + 3 files changed, 43 insertions(+) + +--- a/arch/mips/Kconfig ++++ b/arch/mips/Kconfig +@@ -2655,6 +2655,24 @@ config RAPIDIO + + source "drivers/rapidio/Kconfig" + ++config MIPS_APPENDED_DTB ++ bool "Use appended device tree blob to vmlinux.bin (EXPERIMENTAL)" ++ depends on OF ++ help ++ With this option, the boot code will look for a device tree binary ++ DTB) appended to raw vmlinux.bin (without decompressor). ++ (e.g. cat vmlinux.bin <filename>.dtb > vmlinux_w_dtb). ++ ++ This is meant as a backward compatibility convenience for those ++ systems with a bootloader that can't be upgraded to accommodate ++ the documented boot protocol using a device tree. ++ ++ Beware that there is very little in terms of protection against ++ this option being confused by leftover garbage in memory that might ++ look like a DTB header after a reboot if no actual DTB is appended ++ to vmlinux.bin. Do not leave this option active in a production kernel ++ if you don't intend to always append a DTB. ++ + endmenu + + menu "Executable file formats" +--- a/arch/mips/kernel/head.S ++++ b/arch/mips/kernel/head.S +@@ -100,6 +100,22 @@ NESTED(kernel_entry, 16, sp) # kernel + jr t0 + 0: + ++#ifdef CONFIG_MIPS_APPENDED_DTB ++ PTR_LA t0, __appended_dtb ++ PTR_LI t3, 0 ++ ++#ifdef CONFIG_CPU_BIG_ENDIAN ++ PTR_LI t1, 0xd00dfeed ++#else ++ PTR_LI t1, 0xedfe0dd0 ++#endif ++ LONG_L t2, (t0) ++ bne t1, t2, not_found ++ ++ PTR_LA t3, __appended_dtb ++ ++not_found: ++#endif + PTR_LA t0, __bss_start # clear .bss + LONG_S zero, (t0) + PTR_LA t1, __bss_stop - LONGSIZE +@@ -113,6 +129,10 @@ NESTED(kernel_entry, 16, sp) # kernel + LONG_S a2, fw_arg2 + LONG_S a3, fw_arg3 + ++#ifdef CONFIG_MIPS_APPENDED_DTB ++ LONG_S t3, initial_boot_params ++#endif ++ + MTC0 zero, CP0_CONTEXT # clear context register + PTR_LA $28, init_thread_union + /* Set the SP after an empty pt_regs. */ +--- a/arch/mips/kernel/vmlinux.lds.S ++++ b/arch/mips/kernel/vmlinux.lds.S +@@ -125,8 +125,14 @@ SECTIONS + .exit.data : { + EXIT_DATA + } +- ++#ifdef CONFIG_SMP + PERCPU_SECTION(1 << CONFIG_MIPS_L1_CACHE_SHIFT) ++#endif ++#ifdef CONFIG_MIPS_APPENDED_DTB ++ __appended_dtb = .; ++ /* leave space for appended DTB */ ++ . = . + 0x100000; ++#endif + /* + * Align to 64K in attempt to eliminate holes before the + * .bss..swapper_pg_dir section at the start of .bss. This |