123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- From 34ef04f3845ed2b47d57dd9d3b795b16e1f8185a Mon Sep 17 00:00:00 2001
- From: Evgeniy Didin <[email protected]>
- Date: Fri, 15 Mar 2019 18:53:38 +0300
- Subject: [PATCH] arc add OWRTDTB section
- This change allows OpenWRT to patch resulting kernel binary with
- external .dtb.
- That allows us to re-use exactky the same vmlinux on different boards
- given its ARC core configurations match (at least cache line sizes etc).
- ""patch-dtb" searches for ASCII "OWRTDTB:" strign and copies external
- .dtb right after it, keeping the string in place.
- Signed-off-by: Eugeniy Paltsev <[email protected]>
- Signed-off-by: Alexey Brodkin <[email protected]>
- Signed-off-by: Evgeniy Didin <[email protected]>
- ---
- arch/arc/kernel/head.S | 10 ++++++++++
- arch/arc/kernel/setup.c | 4 +++-
- arch/arc/kernel/vmlinux.lds.S | 13 +++++++++++++
- 3 files changed, 26 insertions(+), 1 deletion(-)
- --- a/arch/arc/kernel/head.S
- +++ b/arch/arc/kernel/head.S
- @@ -59,6 +59,16 @@
- #endif
- .endm
-
- + ; Here "patch-dtb" will embed external .dtb
- + ; Note "patch-dtb" searches for ASCII "OWRTDTB:" string
- + ; and pastes .dtb right after it, hense the string precedes
- + ; __image_dtb symbol.
- + .section .owrt, "aw",@progbits
- + .ascii "OWRTDTB:"
- +ENTRY(__image_dtb)
- + .fill 0x4000
- +END(__image_dtb)
- +
- .section .init.text, "ax",@progbits
-
- ;----------------------------------------------------------------
- --- a/arch/arc/kernel/setup.c
- +++ b/arch/arc/kernel/setup.c
- @@ -434,6 +434,8 @@ static inline bool uboot_arg_invalid(uns
- #define UBOOT_TAG_CMDLINE 1
- #define UBOOT_TAG_DTB 2
-
- +extern struct boot_param_header __image_dtb;
- +
- void __init handle_uboot_args(void)
- {
- bool use_embedded_dtb = true;
- @@ -469,7 +471,7 @@ ignore_uboot_args:
- #endif
-
- if (use_embedded_dtb) {
- - machine_desc = setup_machine_fdt(__dtb_start);
- + machine_desc = setup_machine_fdt(&__image_dtb);
- if (!machine_desc)
- panic("Embedded DT invalid\n");
- }
- --- a/arch/arc/kernel/vmlinux.lds.S
- +++ b/arch/arc/kernel/vmlinux.lds.S
- @@ -29,6 +29,19 @@ SECTIONS
- */
-
- . = CONFIG_LINUX_LINK_BASE;
- + /*
- + * In OpenWRT we want to patch built binary embedding .dtb of choice.
- + * This is implemented with "patch-dtb" utility which searches for
- + * "OWRTDTB:" string in first 16k of image and if it is found
- + * copies .dtb right after mentioned string.
- + *
- + * Note: "OWRTDTB:" won't be overwritten with .dtb, .dtb will follow it.
- + */
- + .owrt : {
- + *(.owrt)
- + . = ALIGN(PAGE_SIZE);
- + }
- +
-
- _int_vec_base_lds = .;
- .vector : {
|