Commit c0b4e101 authored by Jonas Gorski's avatar Jonas Gorski Committed by Ralf Baechle

MIPS: Add support for vmlinuz.bin appended dtb

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

To ensure _edata / __apendend_dtb points to the actual end of the
binary, align the data section to 16 bytes instead of the address
cursor.

Due to ld.script not going through the preprocessor, we can't check
for MIPS_ZBOOT_APPENDED_DTB being enabled, so always reserve space
for it. It should have no consequences for booting without it enabled
except 1 MiB more ram usage during the uncompressing stage.
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/9741/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 1da8f179
......@@ -2702,6 +2702,24 @@ choice
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.
config MIPS_ZBOOT_APPENDED_DTB
bool "vmlinuz.bin"
depends on SYS_SUPPORTS_ZBOOT
help
With this option, the boot code will look for a device tree binary
DTB) appended to raw vmlinuz.bin (with decompressor).
(e.g. cat vmlinuz.bin <filename>.dtb > vmlinuz_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 vmlinuz.bin. Do not leave this option active in a production kernel
if you don't intend to always append a DTB.
endchoice
endmenu
......
......@@ -25,6 +25,22 @@ start:
move s2, a2
move s3, a3
#ifdef CONFIG_MIPS_ZBOOT_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 s1, t0
PTR_LI s0, -2
not_found:
#endif
/* Clear BSS */
PTR_LA a0, _edata
PTR_LA a2, _end
......
......@@ -29,8 +29,12 @@ SECTIONS
*(.image)
__image_end = .;
CONSTRUCTORS
. = ALIGN(16);
}
. = ALIGN(16);
__appended_dtb = .;
/* leave space for appended DTB */
. += 0x100000;
_edata = .;
/* End of data section */
......
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