123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- From b8f54f2cde788623f41d11327688c75aed34092f Mon Sep 17 00:00:00 2001
- From: Jonas Gorski <jogo@openwrt.org>
- Date: Mon, 20 Jun 2016 11:27:36 +0200
- Subject: [PATCH 1/2] MIPS: ZBOOT: copy appended dtb to the end of the kernel
- Instead of rewriting the arguments, just move the appended dtb to where
- the decompressed kernel expects it. This eliminates the need for special
- casing vmlinuz.bin appended dtb files.
- Signed-off-by: Jonas Gorski <jogo@openwrt.org>
- Cc: Kevin Cernekee <cernekee@gmail.com>
- Cc: Florian Fainelli <f.fainelli@gmail.com>
- Cc: John Crispin <john@phrozen.org>
- Cc: Paul Burton <paul.burton@imgtec.com>
- Cc: James Hogan <james.hogan@imgtec.com>
- Cc: Alban Bedel <albeu@free.fr>
- Cc: Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
- Cc: Antony Pavlov <antonynpavlov@gmail.com>
- Cc: linux-mips@linux-mips.org
- Patchwork: https://patchwork.linux-mips.org/patch/13698/
- Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
- ---
- arch/mips/Kconfig | 22 ++--------------------
- arch/mips/boot/compressed/decompress.c | 17 +++++++++++++++++
- arch/mips/boot/compressed/head.S | 16 ----------------
- 3 files changed, 19 insertions(+), 36 deletions(-)
- --- a/arch/mips/Kconfig
- +++ b/arch/mips/Kconfig
- @@ -2754,10 +2754,10 @@ choice
- the documented boot protocol using a device tree.
-
- config MIPS_RAW_APPENDED_DTB
- - bool "vmlinux.bin"
- + bool "vmlinux.bin or vmlinuz.bin"
- help
- With this option, the boot code will look for a device tree binary
- - DTB) appended to raw vmlinux.bin (without decompressor).
- + DTB) appended to raw vmlinux.bin or vmlinuz.bin.
- (e.g. cat vmlinux.bin <filename>.dtb > vmlinux_w_dtb).
-
- This is meant as a backward compatibility convenience for those
- @@ -2769,24 +2769,6 @@ 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
-
- choice
- --- a/arch/mips/boot/compressed/decompress.c
- +++ b/arch/mips/boot/compressed/decompress.c
- @@ -14,6 +14,7 @@
- #include <linux/types.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- +#include <linux/libfdt.h>
-
- #include <asm/addrspace.h>
-
- @@ -36,6 +37,8 @@ extern void puthex(unsigned long long va
- #define puthex(val) do {} while (0)
- #endif
-
- +extern char __appended_dtb[];
- +
- void error(char *x)
- {
- puts("\n\n");
- @@ -114,6 +117,20 @@ void decompress_kernel(unsigned long boo
- __decompress((char *)zimage_start, zimage_size, 0, 0,
- (void *)VMLINUX_LOAD_ADDRESS_ULL, 0, 0, error);
-
- + if (IS_ENABLED(CONFIG_MIPS_RAW_APPENDED_DTB) &&
- + fdt_magic((void *)&__appended_dtb) == FDT_MAGIC) {
- + unsigned int image_size, dtb_size;
- +
- + dtb_size = fdt_totalsize((void *)&__appended_dtb);
- +
- + /* last four bytes is always image size in little endian */
- + image_size = le32_to_cpup((void *)&__image_end - 4);
- +
- + /* copy dtb to where the booted kernel will expect it */
- + memcpy((void *)VMLINUX_LOAD_ADDRESS_ULL + image_size,
- + __appended_dtb, dtb_size);
- + }
- +
- /* FIXME: should we flush cache here? */
- puts("Now, booting the kernel...\n");
- }
- --- a/arch/mips/boot/compressed/head.S
- +++ b/arch/mips/boot/compressed/head.S
- @@ -25,22 +25,6 @@ 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
|