From 1e3e02a1d2cbcaf0f3f9a99ef58654ff6edcf1e4 Mon Sep 17 00:00:00 2001 From: T Michael Turney Date: Thu, 26 Apr 2018 10:14:20 -0700 Subject: [PATCH] libpayload: Add raw_read_ functions Add: raw_read_cntfrq_el0() and raw_read_cntpct_el0() Required to support Arch64 Timer Change-Id: I86aa97039304b9e9336d0146febfe1811c9e075a Signed-off-by: T Michael Turney Reviewed-on: https://review.coreboot.org/25649 Tested-by: build bot (Jenkins) Reviewed-by: Julius Werner --- payloads/libpayload/arch/arm64/lib/sysctrl.c | 16 ++++++++++++++++ .../libpayload/include/arm64/arch/lib_helpers.h | 2 ++ 2 files changed, 18 insertions(+) diff --git a/payloads/libpayload/arch/arm64/lib/sysctrl.c b/payloads/libpayload/arch/arm64/lib/sysctrl.c index c9d80fffd5..6d2421b08b 100644 --- a/payloads/libpayload/arch/arm64/lib/sysctrl.c +++ b/payloads/libpayload/arch/arm64/lib/sysctrl.c @@ -1043,3 +1043,19 @@ void raw_write_vbar(uint64_t vbar, uint32_t el) { SWITCH_CASE_WRITE(raw_write_vbar, vbar, el); } + +uint32_t raw_read_cntfrq_el0(void) +{ + uint64_t cntfrq_el0; + + __asm__ __volatile__("mrs %0, CNTFRQ_EL0\n\t" : "=r" (cntfrq_el0) : : "memory"); + return cntfrq_el0; +} + +uint64_t raw_read_cntpct_el0(void) +{ + uint64_t cntpct_el0; + + __asm__ __volatile__("mrs %0, CNTPCT_EL0\n\t" : "=r" (cntpct_el0) : : "memory"); + return cntpct_el0; +} diff --git a/payloads/libpayload/include/arm64/arch/lib_helpers.h b/payloads/libpayload/include/arm64/arch/lib_helpers.h index 2b346c4d41..99d6dcbc7d 100644 --- a/payloads/libpayload/include/arm64/arch/lib_helpers.h +++ b/payloads/libpayload/include/arm64/arch/lib_helpers.h @@ -360,6 +360,8 @@ uint64_t raw_read_vbar_current(void); void raw_write_vbar_current(uint64_t vbar); uint64_t raw_read_vbar(uint32_t el); void raw_write_vbar(uint64_t vbar, uint32_t el); +uint64_t raw_read_cntpct_el0(void); +uint32_t raw_read_cntfrq_el0(void); /* Cache maintenance system instructions */ void dccisw(uint64_t cisw);