|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] xen/riscv: implement make_intc_domU_node()
commit ff930346ef7943df4e157a6d5a32ae21ec8ac090
Author: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
AuthorDate: Wed Sep 9 17:07:27 2026 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Mon Sep 21 10:07:55 2026 +0200
xen/riscv: implement make_intc_domU_node()
Introduce a RISC-V specific function to create an interrupt controller
Device Tree node for DomU domains during dom0less build.
Add make_intc_domU_node() to the dom0less build path and wire it to
a new generic helper, intc_make_domu_dt_node(), which delegates DT
node creation to the active interrupt controller implementation via
vintc_init_ops.
Signed-off-by: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
---
xen/arch/riscv/include/asm/domain.h | 2 ++
xen/arch/riscv/include/asm/intc.h | 10 ++++++++++
xen/arch/riscv/intc.c | 8 ++++++++
3 files changed, 20 insertions(+)
diff --git a/xen/arch/riscv/include/asm/domain.h
b/xen/arch/riscv/include/asm/domain.h
index 8ae01a5e4d..bd43ed08c2 100644
--- a/xen/arch/riscv/include/asm/domain.h
+++ b/xen/arch/riscv/include/asm/domain.h
@@ -97,6 +97,8 @@ struct arch_domain {
struct paging_domain paging;
const unsigned long *isa;
+
+ struct vintc *vintc;
};
#include <xen/sched.h>
diff --git a/xen/arch/riscv/include/asm/intc.h
b/xen/arch/riscv/include/asm/intc.h
index d7b34fc15a..a4e678fad9 100644
--- a/xen/arch/riscv/include/asm/intc.h
+++ b/xen/arch/riscv/include/asm/intc.h
@@ -16,6 +16,7 @@ enum intc_variant {
struct cpu_user_regs;
struct irq_desc;
+struct kernel_info;
struct intc_info {
enum intc_variant hw_variant;
@@ -47,6 +48,15 @@ struct intc_hw_init_ops {
int (*init)(void);
};
+struct vintc_init_ops {
+ /* Create interrupt controller node for domain */
+ int (*make_domu_dt_node)(struct kernel_info *kinfo);
+};
+
+struct vintc {
+ const struct vintc_init_ops *init_ops;
+};
+
void intc_preinit(void);
void register_intc_ops(const struct intc_hw_init_ops *init_ops);
diff --git a/xen/arch/riscv/intc.c b/xen/arch/riscv/intc.c
index 3600d23bdb..e63da5e22e 100644
--- a/xen/arch/riscv/intc.c
+++ b/xen/arch/riscv/intc.c
@@ -3,6 +3,7 @@
#include <xen/acpi.h>
#include <xen/bug.h>
#include <xen/device_tree.h>
+#include <xen/fdt-kernel.h>
#include <xen/init.h>
#include <xen/irq.h>
#include <xen/lib.h>
@@ -72,3 +73,10 @@ void intc_route_irq_to_xen(struct irq_desc *desc, unsigned
int priority)
intc_set_irq_type(desc, desc->arch.type);
intc_set_irq_priority(desc, priority);
}
+
+int __init make_intc_domU_node(struct kernel_info *kinfo)
+{
+ const struct vintc *vintc = kinfo->bd.d->arch.vintc;
+
+ return vintc->init_ops->make_domu_dt_node(kinfo);
+}
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |