aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm63xx/patches-4.19/150-MIPS-bmips-mark-exception-vectors-as-char-arrays.patch
diff options
context:
space:
mode:
authorÁlvaro Fernández Rojas <noltari@gmail.com>2019-09-14 09:39:52 +0200
committerJonas Gorski <jonas.gorski@gmail.com>2019-11-09 13:16:01 +0100
commitf586dd67ac58a908092fedaa550a7ef99ff84d22 (patch)
tree5b6f119b20c573f1e58fe1531ae412310d4938d1 /target/linux/brcm63xx/patches-4.19/150-MIPS-bmips-mark-exception-vectors-as-char-arrays.patch
parent9673d5c7ab9b9018a6e87fa6a4b26624c7b1f96f (diff)
downloadupstream-f586dd67ac58a908092fedaa550a7ef99ff84d22.tar.gz
upstream-f586dd67ac58a908092fedaa550a7ef99ff84d22.tar.bz2
upstream-f586dd67ac58a908092fedaa550a7ef99ff84d22.zip
brcm63xx: add linux 4.19 support
Boot tested on Comtrend AR-5387un: https://gist.github.com/Noltari/57e5030455da8dc38e61f8c3a5922254 Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> [jonas.gorski: make 4.19 an optional testing version; add gcc 8.3 fix] Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Diffstat (limited to 'target/linux/brcm63xx/patches-4.19/150-MIPS-bmips-mark-exception-vectors-as-char-arrays.patch')
-rw-r--r--target/linux/brcm63xx/patches-4.19/150-MIPS-bmips-mark-exception-vectors-as-char-arrays.patch93
1 files changed, 93 insertions, 0 deletions
diff --git a/target/linux/brcm63xx/patches-4.19/150-MIPS-bmips-mark-exception-vectors-as-char-arrays.patch b/target/linux/brcm63xx/patches-4.19/150-MIPS-bmips-mark-exception-vectors-as-char-arrays.patch
new file mode 100644
index 0000000000..11d79ea21c
--- /dev/null
+++ b/target/linux/brcm63xx/patches-4.19/150-MIPS-bmips-mark-exception-vectors-as-char-arrays.patch
@@ -0,0 +1,93 @@
+From badf0fc9f7dc72d06a47357123c7d97dc45792f5 Mon Sep 17 00:00:00 2001
+From: Jonas Gorski <jonas.gorski@gmail.com>
+Date: Tue, 15 Oct 2019 23:27:10 +0200
+Subject: [PATCH v2] MIPS: bmips: mark exception vectors as char arrays
+
+The vectors span more than one byte, so mark them as arrays.
+
+Fixes the following build error when building when using GCC 8.3:
+
+In file included from ./include/linux/string.h:19,
+ from ./include/linux/bitmap.h:9,
+ from ./include/linux/cpumask.h:12,
+ from ./arch/mips/include/asm/processor.h:15,
+ from ./arch/mips/include/asm/thread_info.h:16,
+ from ./include/linux/thread_info.h:38,
+ from ./include/asm-generic/preempt.h:5,
+ from ./arch/mips/include/generated/asm/preempt.h:1,
+ from ./include/linux/preempt.h:81,
+ from ./include/linux/spinlock.h:51,
+ from ./include/linux/mmzone.h:8,
+ from ./include/linux/bootmem.h:8,
+ from arch/mips/bcm63xx/prom.c:10:
+arch/mips/bcm63xx/prom.c: In function 'prom_init':
+./arch/mips/include/asm/string.h:162:11: error: '__builtin_memcpy' forming offset [2, 32] is out of the bounds [0, 1] of object 'bmips_smp_movevec' with type 'char' [-Werror=array-bounds]
+ __ret = __builtin_memcpy((dst), (src), __len); \
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+arch/mips/bcm63xx/prom.c:97:3: note: in expansion of macro 'memcpy'
+ memcpy((void *)0xa0000200, &bmips_smp_movevec, 0x20);
+ ^~~~~~
+In file included from arch/mips/bcm63xx/prom.c:14:
+./arch/mips/include/asm/bmips.h:80:13: note: 'bmips_smp_movevec' declared here
+ extern char bmips_smp_movevec;
+
+Fixes: 18a1eef92dcd ("MIPS: BMIPS: Introduce bmips.h")
+Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
+---
+
+v1 -> v2:
+ * Actually update the callers as well, to not break the build in a
+ different way.
+
+ arch/mips/bcm63xx/prom.c | 2 +-
+ arch/mips/include/asm/bmips.h | 10 +++++-----
+ arch/mips/kernel/smp-bmips.c | 8 ++++----
+ 3 files changed, 10 insertions(+), 10 deletions(-)
+
+--- a/arch/mips/bcm63xx/prom.c
++++ b/arch/mips/bcm63xx/prom.c
+@@ -84,7 +84,7 @@ void __init prom_init(void)
+ * Here we will start up CPU1 in the background and ask it to
+ * reconfigure itself then go back to sleep.
+ */
+- memcpy((void *)0xa0000200, &bmips_smp_movevec, 0x20);
++ memcpy((void *)0xa0000200, bmips_smp_movevec, 0x20);
+ __sync();
+ set_c0_cause(C_SW0);
+ cpumask_set_cpu(1, &bmips_booted_mask);
+--- a/arch/mips/include/asm/bmips.h
++++ b/arch/mips/include/asm/bmips.h
+@@ -75,11 +75,11 @@ static inline int register_bmips_smp_ops
+ #endif
+ }
+
+-extern char bmips_reset_nmi_vec;
+-extern char bmips_reset_nmi_vec_end;
+-extern char bmips_smp_movevec;
+-extern char bmips_smp_int_vec;
+-extern char bmips_smp_int_vec_end;
++extern char bmips_reset_nmi_vec[];
++extern char bmips_reset_nmi_vec_end[];
++extern char bmips_smp_movevec[];
++extern char bmips_smp_int_vec[];
++extern char bmips_smp_int_vec_end[];
+
+ extern int bmips_smp_enabled;
+ extern int bmips_cpu_offset;
+--- a/arch/mips/kernel/smp-bmips.c
++++ b/arch/mips/kernel/smp-bmips.c
+@@ -457,10 +457,10 @@ static void bmips_wr_vec(unsigned long d
+
+ static inline void bmips_nmi_handler_setup(void)
+ {
+- bmips_wr_vec(BMIPS_NMI_RESET_VEC, &bmips_reset_nmi_vec,
+- &bmips_reset_nmi_vec_end);
+- bmips_wr_vec(BMIPS_WARM_RESTART_VEC, &bmips_smp_int_vec,
+- &bmips_smp_int_vec_end);
++ bmips_wr_vec(BMIPS_NMI_RESET_VEC, bmips_reset_nmi_vec,
++ bmips_reset_nmi_vec_end);
++ bmips_wr_vec(BMIPS_WARM_RESTART_VEC, bmips_smp_int_vec,
++ bmips_smp_int_vec_end);
+ }
+
+ struct reset_vec_info {