diff --git a/include/sbi/sbi_timer.h b/include/sbi/sbi_timer.h index ac48e2b8..ac2c7be5 100644 --- a/include/sbi/sbi_timer.h +++ b/include/sbi/sbi_timer.h @@ -78,8 +78,10 @@ u64 sbi_timer_get_delta(void); /** Set timer delta value for current HART */ void sbi_timer_set_delta(ulong delta); +#if __riscv_xlen == 32 /** Set upper 32-bits of timer delta value for current HART */ void sbi_timer_set_delta_upper(ulong delta_upper); +#endif /** Start timer event for current HART */ void sbi_timer_event_start(u64 next_event); diff --git a/lib/sbi/sbi_timer.c b/lib/sbi/sbi_timer.c index 7b618de1..32955183 100644 --- a/lib/sbi/sbi_timer.c +++ b/lib/sbi/sbi_timer.c @@ -114,20 +114,21 @@ u64 sbi_timer_get_delta(void) void sbi_timer_set_delta(ulong delta) { - u64 *time_delta = sbi_scratch_offset_ptr(sbi_scratch_thishart_ptr(), - time_delta_off); + ulong *time_delta = sbi_scratch_offset_ptr(sbi_scratch_thishart_ptr(), + time_delta_off); - *time_delta = (u64)delta; + *time_delta = delta; } +#if __riscv_xlen == 32 void sbi_timer_set_delta_upper(ulong delta_upper) { - u64 *time_delta = sbi_scratch_offset_ptr(sbi_scratch_thishart_ptr(), - time_delta_off); + ulong *time_delta = sbi_scratch_offset_ptr(sbi_scratch_thishart_ptr(), + time_delta_off); - *time_delta &= 0xffffffffULL; - *time_delta |= ((u64)delta_upper << 32); + *(time_delta + 1) = delta_upper; } +#endif void sbi_timer_event_start(u64 next_event) {