aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSamuel Holland <samuel.holland@sifive.com>2024-03-18 07:49:28 -0700
committerAnup Patel <anup@brainfault.org>2024-04-05 17:34:24 +0530
commitb94396c7dde699c17e81e087aadafda125f86856 (patch)
treeb77c4085afbe2f261cf956d5b50db1ac7f1bd62a /lib
parent5c9a73565f5e6d07cf30ecd7fa511d872050bd2c (diff)
downloadopensbi-b94396c7dde699c17e81e087aadafda125f86856.zip
opensbi-b94396c7dde699c17e81e087aadafda125f86856.tar.gz
opensbi-b94396c7dde699c17e81e087aadafda125f86856.tar.bz2
lib: utils/timer: Optimize current hart scratch access
The address of the local scratch area is stored in each hart's mscratch CSR. It is more efficient to read the CSR than to compute the address from the hart ID. Signed-off-by: Samuel Holland <samuel.holland@sifive.com> Reviewed-by: Anup Patel <anup@brainfault.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/utils/timer/aclint_mtimer.c18
1 files changed, 3 insertions, 15 deletions
diff --git a/lib/utils/timer/aclint_mtimer.c b/lib/utils/timer/aclint_mtimer.c
index 271e625..9acb26e 100644
--- a/lib/utils/timer/aclint_mtimer.c
+++ b/lib/utils/timer/aclint_mtimer.c
@@ -72,14 +72,10 @@ static u64 mtimer_value(void)
static void mtimer_event_stop(void)
{
u32 target_hart = current_hartid();
- struct sbi_scratch *scratch;
+ struct sbi_scratch *scratch = sbi_scratch_thishart_ptr();
struct aclint_mtimer_data *mt;
u64 *time_cmp;
- scratch = sbi_hartid_to_scratch(target_hart);
- if (!scratch)
- return;
-
mt = mtimer_get_hart_data_ptr(scratch);
if (!mt)
return;
@@ -92,14 +88,10 @@ static void mtimer_event_stop(void)
static void mtimer_event_start(u64 next_event)
{
u32 target_hart = current_hartid();
- struct sbi_scratch *scratch;
+ struct sbi_scratch *scratch = sbi_scratch_thishart_ptr();
struct aclint_mtimer_data *mt;
u64 *time_cmp;
- scratch = sbi_hartid_to_scratch(target_hart);
- if (!scratch)
- return;
-
mt = mtimer_get_hart_data_ptr(scratch);
if (!mt)
return;
@@ -155,13 +147,9 @@ int aclint_mtimer_warm_init(void)
{
u64 *mt_time_cmp;
u32 target_hart = current_hartid();
- struct sbi_scratch *scratch;
+ struct sbi_scratch *scratch = sbi_scratch_thishart_ptr();
struct aclint_mtimer_data *mt;
- scratch = sbi_hartid_to_scratch(target_hart);
- if (!scratch)
- return SBI_ENOENT;
-
mt = mtimer_get_hart_data_ptr(scratch);
if (!mt)
return SBI_ENODEV;