aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/patches-4.4/332-arc-add-OWRTDTB-section.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2016-01-15 10:49:11 +0000
committerFelix Fietkau <nbd@openwrt.org>2016-01-15 10:49:11 +0000
commitb75aa979ad95769674598a6c0d31597edf90b41d (patch)
tree9dccb6c53d817c52019cd0d123e81b4dca54481a /target/linux/generic/patches-4.4/332-arc-add-OWRTDTB-section.patch
parent998cb6c908cac2f5db8296c696c31a9c7975b89d (diff)
downloadmaster-187ad058-b75aa979ad95769674598a6c0d31597edf90b41d.tar.gz
master-187ad058-b75aa979ad95769674598a6c0d31597edf90b41d.tar.bz2
master-187ad058-b75aa979ad95769674598a6c0d31597edf90b41d.zip
arc770: move arc patches to target/linux/generic
Given those patches are relevant to any ARC platform and even ISA version it makes perfect sense for patches to exist in one place instead of being duplicated for each new ARC-based ASIC. Note this is a prerequisite for upstreaming of ARC HS38 support in OpenWRT. Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> Cc: Felix Fietkau <nbd@openwrt.org> Cc: Jo-Philipp Wich <jow@openwrt.org> Cc: Jonas Gorski <jogo@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@48241 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/generic/patches-4.4/332-arc-add-OWRTDTB-section.patch')
-rw-r--r--target/linux/generic/patches-4.4/332-arc-add-OWRTDTB-section.patch91
1 files changed, 91 insertions, 0 deletions
diff --git a/target/linux/generic/patches-4.4/332-arc-add-OWRTDTB-section.patch b/target/linux/generic/patches-4.4/332-arc-add-OWRTDTB-section.patch
new file mode 100644
index 0000000000..02e919858d
--- /dev/null
+++ b/target/linux/generic/patches-4.4/332-arc-add-OWRTDTB-section.patch
@@ -0,0 +1,91 @@
+From 690e7f2cad271595ff68cace1c45fb10779bde41 Mon Sep 17 00:00:00 2001
+From: Alexey Brodkin <abrodkin@synopsys.com>
+Date: Fri, 15 Jan 2016 00:34:01 +0300
+Subject: [PATCH 2/2] 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(-)
+
+diff --git a/arch/arc/kernel/head.S b/arch/arc/kernel/head.S
+index 689dd86..51154ae 100644
+--- 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
+
+ ;----------------------------------------------------------------
+diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c
+index e1b8744..9481c9d 100644
+--- a/arch/arc/kernel/setup.c
++++ b/arch/arc/kernel/setup.c
+@@ -370,6 +370,8 @@ static inline int is_kernel(unsigned long addr)
+ return 0;
+ }
+
++extern struct boot_param_header __image_dtb;
++
+ void __init setup_arch(char **cmdline_p)
+ {
+ #ifdef CONFIG_ARC_UBOOT_SUPPORT
+@@ -383,7 +385,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");
+
+diff --git a/arch/arc/kernel/vmlinux.lds.S b/arch/arc/kernel/vmlinux.lds.S
+index 894e696..ecfc284 100644
+--- 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)
+--
+2.4.3
+