]> xenbits.xensource.com Git - people/royger/xen.git/commitdiff
xen/riscv: introduce trap_init()
authorOleksii Kurochko <oleksii.kurochko@gmail.com>
Thu, 1 Aug 2024 07:42:54 +0000 (09:42 +0200)
committerJan Beulich <jbeulich@suse.com>
Thu, 1 Aug 2024 07:42:54 +0000 (09:42 +0200)
Note that trap_init() isn't declared with the __init attribute to
avoid removing __init when multi-CPU support for Xen is added.

Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
xen/arch/riscv/include/asm/traps.h
xen/arch/riscv/setup.c
xen/arch/riscv/traps.c

index 3fef3184781c33e806553d58d6a44cc564025c6e..c30118e095fca6ef90f48a31b54d38db6ed3212c 100644 (file)
@@ -9,6 +9,7 @@
 
 void do_trap(struct cpu_user_regs *cpu_regs);
 void handle_trap(void);
+void trap_init(void);
 
 #endif /* __ASSEMBLY__ */
 
index e3cb0866d5ea004748070888c92e49df8da4fe6c..a6a29a1508696968132105ff4de87037dde19725 100644 (file)
@@ -8,6 +8,7 @@
 #include <public/version.h>
 
 #include <asm/early_printk.h>
+#include <asm/traps.h>
 
 void arch_get_xen_caps(xen_capabilities_info_t *info)
 {
@@ -23,6 +24,8 @@ void __init noreturn start_xen(unsigned long bootcpu_id,
 {
     remove_identity_mapping();
 
+    trap_init();
+
     printk("All set up\n");
 
     for ( ;; )
index 37cec40dfab8d1bcaf333b50f9151a6b025cb9a5..cb18b30ff2539f6d97b5401bb38c2086500f56d7 100644 (file)
 #include <asm/riscv_encoding.h>
 #include <asm/traps.h>
 
+/*
+ * Initialize the trap handling.
+ *
+ * The function is called after MMU is enabled.
+ */
+void trap_init(void)
+{
+    unsigned long addr = (unsigned long)&handle_trap;
+
+    csr_write(CSR_STVEC, addr);
+}
+
 static const char *decode_trap_cause(unsigned long cause)
 {
     static const char *const trap_causes[] = {