Commit 1da8f179 authored by Jonas Gorski's avatar Jonas Gorski Committed by Ralf Baechle

MIPS: Add support for vmlinux.bin appended dtb

Add support for detecting a vmlinux.bin appended dtb and overriding
the boot arguments to match the UHI interface.

Due to the PERCPU section being empty for !SMP, but still modifying
the current address by aligning it to the page size, do not define
it for !SMP builds to allow __appended_dtb to still point to
the actual end of the data.
Signed-off-by: default avatarJonas Gorski <jogo@openwrt.org>
Cc: linux-mips@linux-mips.org
Cc: devicetree@vger.kernel.org
Cc: John Crispin <blogic@openwrt.org>
Cc: Kevin Cernekee <cernekee@gmail.com>
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: Aaro Koskinen <aaro.koskinen@iki.fi>
Cc: Markos Chandras <markos.chandras@imgtec.com>
Cc: Andrew Bresticker <abrestic@chromium.org>
Cc: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: James Hartley <James.Hartley@imgtec.com>
Patchwork: https://patchwork.linux-mips.org/patch/9739/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 01306aea
...@@ -2677,6 +2677,33 @@ config USE_OF ...@@ -2677,6 +2677,33 @@ config USE_OF
config BUILTIN_DTB config BUILTIN_DTB
bool bool
choice
prompt "Kernel appended dtb support" if OF
default MIPS_NO_APPENDED_DTB
config MIPS_NO_APPENDED_DTB
bool "None"
help
Do not enable appended dtb support.
config MIPS_RAW_APPENDED_DTB
bool "vmlinux.bin"
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.
endchoice
endmenu endmenu
config LOCKDEP_SUPPORT config LOCKDEP_SUPPORT
......
...@@ -94,6 +94,22 @@ NESTED(kernel_entry, 16, sp) # kernel entry point ...@@ -94,6 +94,22 @@ NESTED(kernel_entry, 16, sp) # kernel entry point
jr t0 jr t0
0: 0:
#ifdef CONFIG_MIPS_RAW_APPENDED_DTB
PTR_LA t0, __appended_dtb
#ifdef CONFIG_CPU_BIG_ENDIAN
li t1, 0xd00dfeed
#else
li t1, 0xedfe0dd0
#endif
lw t2, (t0)
bne t1, t2, not_found
nop
move a1, t0
PTR_LI a0, -2
not_found:
#endif
PTR_LA t0, __bss_start # clear .bss PTR_LA t0, __bss_start # clear .bss
LONG_S zero, (t0) LONG_S zero, (t0)
PTR_LA t1, __bss_stop - LONGSIZE PTR_LA t1, __bss_stop - LONGSIZE
......
...@@ -125,8 +125,14 @@ SECTIONS ...@@ -125,8 +125,14 @@ SECTIONS
.exit.data : { .exit.data : {
EXIT_DATA EXIT_DATA
} }
#ifdef CONFIG_SMP
PERCPU_SECTION(1 << CONFIG_MIPS_L1_CACHE_SHIFT) PERCPU_SECTION(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
#endif
#ifdef CONFIG_MIPS_RAW_APPENDED_DTB
__appended_dtb = .;
/* leave space for appended DTB */
. += 0x100000;
#endif
/* /*
* Align to 64K in attempt to eliminate holes before the * Align to 64K in attempt to eliminate holes before the
* .bss..swapper_pg_dir section at the start of .bss. This * .bss..swapper_pg_dir section at the start of .bss. This
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment