9b6d4c9476
- Patch queue updated from git://github.com/openSUSE/u-boot.git tumbleweed-2019.10 * Patch added to fix boo#1145646: 0013-arm-arm11-allow-unaligned-memory-ac.patch - Build bootable u-boot.itb for u-boot-rock-pi-4-rk3399 - Constrain multibuild expansion in linked/branched/copied packages. OBS-URL: https://build.opensuse.org/request/show/749423 OBS-URL: https://build.opensuse.org/package/show/hardware:boot/u-boot?expand=0&rev=58
65 lines
2.2 KiB
Diff
65 lines
2.2 KiB
Diff
From 50ae76602cfb1079a3062a18c1767dce525985f0 Mon Sep 17 00:00:00 2001
|
|
From: Heinrich Schuchardt <xypron.glpk@gmx.de>
|
|
Date: Tue, 19 Nov 2019 04:02:10 +0100
|
|
Subject: [PATCH] arm: arm11: allow unaligned memory access
|
|
|
|
The UEFI spec mandates that unaligned memory access should be enabled if
|
|
supported by the CPU architecture.
|
|
|
|
This patch implements the function unaligned_access() to set the enable
|
|
unaligned data support flag and to clear the aligned flag in the system
|
|
control register (SCTLR). It is called when UEFI related commands like
|
|
bootefi are invoked.
|
|
|
|
Reported-by: Cristian Ciocaltea <cristian.ciocaltea@gmail.com>
|
|
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
|
|
---
|
|
arch/arm/cpu/arm11/Makefile | 4 ++++
|
|
arch/arm/cpu/arm11/sctlr.S | 25 +++++++++++++++++++++++++
|
|
2 files changed, 29 insertions(+)
|
|
create mode 100644 arch/arm/cpu/arm11/sctlr.S
|
|
|
|
diff --git a/arch/arm/cpu/arm11/Makefile b/arch/arm/cpu/arm11/Makefile
|
|
index 5d721fce12..5dfa01ae8d 100644
|
|
--- a/arch/arm/cpu/arm11/Makefile
|
|
+++ b/arch/arm/cpu/arm11/Makefile
|
|
@@ -4,3 +4,7 @@
|
|
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
|
|
|
obj-y = cpu.o
|
|
+
|
|
+ifneq ($(CONFIG_SPL_BUILD),y)
|
|
+obj-$(CONFIG_EFI_LOADER) += sctlr.o
|
|
+endif
|
|
diff --git a/arch/arm/cpu/arm11/sctlr.S b/arch/arm/cpu/arm11/sctlr.S
|
|
new file mode 100644
|
|
index 0000000000..74a7fc4a25
|
|
--- /dev/null
|
|
+++ b/arch/arm/cpu/arm11/sctlr.S
|
|
@@ -0,0 +1,25 @@
|
|
+/* SPDX-License-Identifier: GPL-2.0+ */
|
|
+/*
|
|
+ * Routines to access the system control register
|
|
+ *
|
|
+ * Copyright (c) 2019 Heinrich Schuchardt
|
|
+ */
|
|
+
|
|
+#include <linux/linkage.h>
|
|
+
|
|
+/*
|
|
+ * void allow_unaligned(void) - allow unaligned access
|
|
+ *
|
|
+ * This routine sets the enable unaligned data support flag and clears the
|
|
+ * aligned flag in the system control register.
|
|
+ * After calling this routine unaligned access does no longer leads to a
|
|
+ * data abort or undefined behavior but is handled by the CPU.
|
|
+ * For details see the "ARM Architecture Reference Manual" for ARMv6.
|
|
+ */
|
|
+ENTRY(allow_unaligned)
|
|
+ mrc p15, 0, r0, c1, c0, 0 @ load system control register
|
|
+ orr r0, r0, #1 << 22 @ set unaligned data support flag
|
|
+ bic r0, r0, #2 @ clear aligned flag
|
|
+ mcr p15, 0, r0, c1, c0, 0 @ write system control register
|
|
+ bx lr @ return
|
|
+ENDPROC(allow_unaligned)
|