ARCv2: Enable unaligned access in early ASM code [Linux 5.0]

ARCv2: Enable unaligned access in early ASM code [Linux 5.0]

This Linux kernel change "ARCv2: Enable unaligned access in early ASM code" is included in the Linux 5.0 release. This change is authored by Eugeniy Paltsev <Eugeniy.Paltsev [at] synopsys.com> on Wed Jan 16 14:29:50 2019 +0300. The commit for this change in Linux stable tree is 252f6e8 (patch).

ARCv2: Enable unaligned access in early ASM code

It is currently done in arc_init_IRQ() which might be too late
considering gcc 7.3.1 onwards (GNU 2018.03) generates unaligned
memory accesses by default

Cc: [email protected] #4.4+
Signed-off-by: Eugeniy Paltsev <[email protected]>
Signed-off-by: Vineet Gupta <[email protected]>
[vgupta: rewrote changelog]

There are 10 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 arch/arc/kernel/head.S | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/arch/arc/kernel/head.S b/arch/arc/kernel/head.S
index 8b90d25..26e33a8 100644
--- a/arch/arc/kernel/head.S
+++ b/arch/arc/kernel/head.S
@@ -17,6 +17,7 @@
 #include <asm/entry.h>
 #include <asm/arcregs.h>
 #include <asm/cache.h>
+#include <asm/irqflags.h>

 .macro CPU_EARLY_SETUP

@@ -47,6 +48,15 @@
    sr  r5, [ARC_REG_DC_CTRL]

 1:
+
+#ifdef CONFIG_ISA_ARCV2
+   ; Unaligned access is disabled at reset, so re-enable early as
+   ; gcc 7.3.1 (ARC GNU 2018.03) onwards generates unaligned access
+   ; by default
+   lr  r5, [status32]
+   bset    r5, r5, STATUS_AD_BIT
+   kflag   r5
+#endif
 .endm

    .section .init.text, "ax",@progbits

Leave a Reply

Your email address will not be published. Required fields are marked *