/branches/18.06.1/target/linux/generic/pending-4.14/332-arc-add-OWRTDTB-section.patch |
@@ -0,0 +1,80 @@ |
From: Alexey Brodkin <abrodkin@synopsys.com> |
Subject: openwrt: 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: Alexey Brodkin <abrodkin@synopsys.com> |
--- |
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 |
@@ -49,6 +49,16 @@ |
1: |
.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 |
@@ -421,6 +421,8 @@ static inline int is_kernel(unsigned lon |
return 0; |
} |
|
+extern struct boot_param_header __image_dtb; |
+ |
void __init setup_arch(char **cmdline_p) |
{ |
#ifdef CONFIG_ARC_UBOOT_SUPPORT |
@@ -434,7 +436,7 @@ void __init setup_arch(char **cmdline_p) |
#endif |
{ |
/* No, so try the embedded one */ |
- 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 |
@@ -30,6 +30,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 : { |
*(.vector) |