[coreboot-gerrit] Patch set updated for coreboot: b287409 libpayload arm64: Remove tight-coupling with any particular EL
Patrick Georgi (pgeorgi@google.com)
gerrit at coreboot.org
Fri Mar 20 10:55:31 CET 2015
Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/8785
-gerrit
commit b28740990f07340d983153b57c1e1e883fe22462
Author: Furquan Shaikh <furquan at google.com>
Date: Wed Aug 27 16:00:24 2014 -0700
libpayload arm64: Remove tight-coupling with any particular EL
Allow more flexibility by reading and writing to system registers at current
EL. Instead of specifying what _ELx register to write to, code can specify
_current.
BUG=chrome-os-partner:31634
BRANCH=None
TEST=Compiles and boots to kernel on ryu
Change-Id: Id38b675bfe67ca1e25f8c268192114e3f0bee800
Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
Original-Commit-Id: 6d4d07e26fc964dc3aaebfe03db59596d90093e9
Original-Change-Id: Ic1d9e18e6fc016a04f17621a148e62d6cbd04ce7
Original-Signed-off-by: Furquan Shaikh <furquan at google.com>
Original-Reviewed-on: https://chromium-review.googlesource.com/214577
Original-Tested-by: Furquan Shaikh <furquan at chromium.org>
Original-Reviewed-by: Aaron Durbin <adurbin at chromium.org>
Original-Commit-Queue: Furquan Shaikh <furquan at chromium.org>
---
payloads/libpayload/arch/arm64/cache.c | 10 +++++-----
payloads/libpayload/arch/arm64/exception_asm.S | 15 ++++++++-------
2 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/payloads/libpayload/arch/arm64/cache.c b/payloads/libpayload/arch/arm64/cache.c
index e89d49e..1a9e7a6 100644
--- a/payloads/libpayload/arch/arm64/cache.c
+++ b/payloads/libpayload/arch/arm64/cache.c
@@ -39,7 +39,7 @@
void tlb_invalidate_all(void)
{
/* TLBIALL includes dTLB and iTLB on systems that have them. */
- tlbiall_el3();
+ tlbiall_current();
dsb();
isb();
}
@@ -127,18 +127,18 @@ void dcache_mmu_disable(void)
uint32_t sctlr;
dcache_clean_invalidate_all();
- sctlr = raw_read_sctlr_el3();
+ sctlr = raw_read_sctlr_current();
sctlr &= ~(SCTLR_C | SCTLR_M);
- raw_write_sctlr_el3(sctlr);
+ raw_write_sctlr_current(sctlr);
}
void dcache_mmu_enable(void)
{
uint32_t sctlr;
- sctlr = raw_read_sctlr_el3();
+ sctlr = raw_read_sctlr_current();
sctlr |= SCTLR_C | SCTLR_M;
- raw_write_sctlr_el3(sctlr);
+ raw_write_sctlr_current(sctlr);
}
void cache_sync_instructions(void)
diff --git a/payloads/libpayload/arch/arm64/exception_asm.S b/payloads/libpayload/arch/arm64/exception_asm.S
index 8e69dda..c9e694a 100644
--- a/payloads/libpayload/arch/arm64/exception_asm.S
+++ b/payloads/libpayload/arch/arm64/exception_asm.S
@@ -27,6 +27,9 @@
* SUCH DAMAGE.
*/
+#define __ASSEMBLY__
+#include <arch/lib_helpers.h>
+
.text
/* Macro for exception entry
@@ -89,10 +92,10 @@ exception_prologue:
stp x0, x1, [sp, #-16]!
/* Save the exception reason on stack */
- mrs x1, esr_el3
+ read_current x1, esr
/* Save the return address on stack */
- mrs x0, elr_el3
+ read_current x0, elr
stp x0, x1, [sp, #-16]!
ret
@@ -106,8 +109,8 @@ exception_handler:
/* Pop return address saved on stack */
ldp x0, x1, [sp], #16
- msr elr_el3, x0
- msr esr_el3, x1
+ write_current elr, x0, x2
+ write_current esr, x1, x2
/* Pop exception reason saved on stack, followed by regs x0-x30 */
ldp x0, x1, [sp], #16
ldp x2, x3, [sp], #16
@@ -129,7 +132,5 @@ exception_handler:
.global set_vbar
set_vbar:
- /* Initialize the exception table address in vbar for EL3 */
- /* FIXME: Do we need to initialize for other levels too? EL1/EL2 */
- msr vbar_el3, x0
+ write_current vbar, x0, x1
ret
More information about the coreboot-gerrit
mailing list