]> xenbits.xensource.com Git - xen.git/commitdiff
xen/riscv: introduce intc_preinit()
authorOleksii Kurochko <oleksii.kurochko@gmail.com>
Tue, 1 Apr 2025 10:46:47 +0000 (12:46 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 1 Apr 2025 10:46:47 +0000 (12:46 +0200)
Currently, only the device tree method is available to locate and perform
pre-initialization steps for the interrupt controller (at the moment, only
one interrupt controller is going to be supported). When `acpi_disabled`
is true, the system will scan for a node with the "interrupt-controller"
property and then call `device_init()` to validate if it is an expected
interrupt controller and if yes then save this node for further usage.

If `acpi_disabled` is false, the system will panic, as ACPI support is not
yet implemented for RISC-V.

Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
xen/arch/riscv/Makefile
xen/arch/riscv/include/asm/intc.h
xen/arch/riscv/intc.c [new file with mode: 0644]
xen/arch/riscv/setup.c

index dd5fd25c7da34986eee289ef7f99fd7fb02da822..0c6c4a38a3f919b026aaaaa9cc842c6ca788e7d5 100644 (file)
@@ -2,6 +2,7 @@ obj-y += aplic.o
 obj-y += cpufeature.o
 obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
 obj-y += entry.o
+obj-y += intc.o
 obj-y += mm.o
 obj-y += pt.o
 obj-$(CONFIG_RISCV_64) += riscv64/
index ff9bb33896515a195549a6815ddd6d5dbe590d8f..52ba196d87eb1768a4fe753e65102752dc0c23a0 100644 (file)
@@ -17,4 +17,6 @@ struct intc_info {
     const struct dt_device_node *node;
 };
 
+void intc_preinit(void);
+
 #endif /* ASM__RISCV__INTERRUPT_CONTOLLER_H */
diff --git a/xen/arch/riscv/intc.c b/xen/arch/riscv/intc.c
new file mode 100644 (file)
index 0000000..4061a3c
--- /dev/null
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <xen/acpi.h>
+#include <xen/device_tree.h>
+#include <xen/init.h>
+#include <xen/lib.h>
+
+void __init intc_preinit(void)
+{
+    if ( acpi_disabled )
+        intc_dt_preinit();
+    else
+        panic("ACPI interrupt controller preinit() isn't implemented\n");
+}
index 836ad16fed64e798ed420d3d4d9a136e080560c2..4e416f6e4496b1496dbb20fd7b6ebb362fb98528 100644 (file)
@@ -16,6 +16,7 @@
 #include <asm/cpufeature.h>
 #include <asm/early_printk.h>
 #include <asm/fixmap.h>
+#include <asm/intc.h>
 #include <asm/sbi.h>
 #include <asm/setup.h>
 #include <asm/smp.h>
@@ -128,6 +129,8 @@ void __init noreturn start_xen(unsigned long bootcpu_id,
 
     preinit_xen_time();
 
+    intc_preinit();
+
     printk("All set up\n");
 
     machine_halt();