summaryrefslogtreecommitdiff
path: root/include/sbi/sbi_hart.h
diff options
context:
space:
mode:
authorAnup Patel <anup.patel@wdc.com>2020-03-19 14:43:16 +0300
committerAnup Patel <anup@brainfault.org>2020-03-28 11:01:53 +0300
commit1de66d170e71fb94732ffc80dcf4e70e623c4f7a (patch)
tree8b43a209cd287f5c9cdc0ec5761be6982f1ee664 /include/sbi/sbi_hart.h
parent160c88535f07084051ebba97689fc4a7b2e9037c (diff)
downloadopensbi-1de66d170e71fb94732ffc80dcf4e70e623c4f7a.tar.xz
lib: Optimize unpriv load/store implementation
This patch optimize unpriv load/store implementation by having dedicated unpriv trap handler (just like KVM RISC-V). As a result of this optimization: 1. We have reduced roughly 13+ instruction in all unpriv load/store functions. The reduced instruction also include two function calls. 2. Per-HART trap info pointer in scratch space is now redundant hence removed. 3. The sbi_trap_handler() is now much cleaner because we don't have to handle unpriv load/store traps. Signed-off-by: Anup Patel <anup.patel@wdc.com> Reviewed-by: Atish Patra <atish.patra@wdc.com>
Diffstat (limited to 'include/sbi/sbi_hart.h')
-rw-r--r--include/sbi/sbi_hart.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/include/sbi/sbi_hart.h b/include/sbi/sbi_hart.h
index fb4a955..4b83b84 100644
--- a/include/sbi/sbi_hart.h
+++ b/include/sbi/sbi_hart.h
@@ -16,9 +16,11 @@ struct sbi_scratch;
int sbi_hart_init(struct sbi_scratch *scratch, u32 hartid, bool cold_boot);
-void *sbi_hart_get_trap_info(struct sbi_scratch *scratch);
-
-void sbi_hart_set_trap_info(struct sbi_scratch *scratch, void *data);
+extern void (*sbi_hart_unpriv_trap)(void);
+static inline ulong sbi_hart_unpriv_trap_addr(void)
+{
+ return (ulong)sbi_hart_unpriv_trap;
+}
void sbi_hart_delegation_dump(struct sbi_scratch *scratch);
void sbi_hart_pmp_dump(struct sbi_scratch *scratch);