diff options
author | Anup Patel <anup.patel@wdc.com> | 2019-08-18 10:44:44 +0300 |
---|---|---|
committer | Anup Patel <anup@brainfault.org> | 2019-09-30 13:06:14 +0300 |
commit | 1e9f88889f8b7c66dd229299715eed87e734aafa (patch) | |
tree | 8c1619786e090dfc7cbb57223ac3edda86607ec5 /include | |
parent | 7d4420bd6929ef3f2c761c262dbc3f7f2ae150c2 (diff) | |
download | opensbi-1e9f88889f8b7c66dd229299715eed87e734aafa.tar.xz |
lib: Emulate HTIMEDELTA CSR for platforms not having TIME CSR
For platforms not having TIME CSR, we trap-n-emulate TIME CSR
read/write in OpenSBI. Same rationale applies to HTIMEDELTA CSR
as well so we trap-n-emulate HTIMEDELTA CSR for platforms not
having TIME CSR.
Signed-off-by: Anup Patel <anup.patel@wdc.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/sbi/riscv_encoding.h | 4 | ||||
-rw-r--r-- | include/sbi/sbi_emulate_csr.h | 5 | ||||
-rw-r--r-- | include/sbi/sbi_timer.h | 8 |
3 files changed, 14 insertions, 3 deletions
diff --git a/include/sbi/riscv_encoding.h b/include/sbi/riscv_encoding.h index 5aab9d2..902c81a 100644 --- a/include/sbi/riscv_encoding.h +++ b/include/sbi/riscv_encoding.h @@ -276,7 +276,9 @@ #define CSR_HSTATUS 0x600 #define CSR_HEDELEG 0x602 #define CSR_HIDELEG 0x603 -#define CSR_HCOUNTERNEN 0x606 +#define CSR_HTIMEDELTA 0x605 +#define CSR_HTIMEDELTAH 0x615 +#define CSR_HCOUNTERNEN 0x606 #define CSR_HGATP 0x680 #define CSR_VSSTATUS 0x200 diff --git a/include/sbi/sbi_emulate_csr.h b/include/sbi/sbi_emulate_csr.h index 5d1755f..fe357e5 100644 --- a/include/sbi/sbi_emulate_csr.h +++ b/include/sbi/sbi_emulate_csr.h @@ -12,12 +12,13 @@ #include <sbi/sbi_types.h> +struct sbi_trap_regs; struct sbi_scratch; -int sbi_emulate_csr_read(int csr_num, u32 hartid, ulong mstatus, +int sbi_emulate_csr_read(int csr_num, u32 hartid, struct sbi_trap_regs *regs, struct sbi_scratch *scratch, ulong *csr_val); -int sbi_emulate_csr_write(int csr_num, u32 hartid, ulong mstatus, +int sbi_emulate_csr_write(int csr_num, u32 hartid, struct sbi_trap_regs *regs, struct sbi_scratch *scratch, ulong csr_val); #endif diff --git a/include/sbi/sbi_timer.h b/include/sbi/sbi_timer.h index e40cce9..c14c8d0 100644 --- a/include/sbi/sbi_timer.h +++ b/include/sbi/sbi_timer.h @@ -16,6 +16,14 @@ struct sbi_scratch; u64 sbi_timer_value(struct sbi_scratch *scratch); +u64 sbi_timer_virt_value(struct sbi_scratch *scratch); + +u64 sbi_timer_get_delta(struct sbi_scratch *scratch); + +void sbi_timer_set_delta(struct sbi_scratch *scratch, ulong delta); + +void sbi_timer_set_delta_upper(struct sbi_scratch *scratch, ulong delta_upper); + void sbi_timer_event_stop(struct sbi_scratch *scratch); void sbi_timer_event_start(struct sbi_scratch *scratch, u64 next_event); |