With PCH MSI irqchip, property irqchip-in-kernel is added to indicate whether feature irqchip_in_kernel is supported or not. This property can be enabled only if it works in KVM mode.
Signed-off-by: Bibo Mao <maob...@loongson.cn> --- hw/intc/loongarch_pch_msi.c | 8 ++++++++ include/hw/intc/loongarch_pch_msi.h | 1 + 2 files changed, 9 insertions(+) diff --git a/hw/intc/loongarch_pch_msi.c b/hw/intc/loongarch_pch_msi.c index 06eb944da0..e2dacc39bf 100644 --- a/hw/intc/loongarch_pch_msi.c +++ b/hw/intc/loongarch_pch_msi.c @@ -13,6 +13,7 @@ #include "hw/pci/msi.h" #include "hw/misc/unimp.h" #include "migration/vmstate.h" +#include "system/kvm.h" #include "trace.h" static uint64_t loongarch_msi_mem_read(void *opaque, hwaddr addr, unsigned size) @@ -51,6 +52,11 @@ static void loongarch_pch_msi_realize(DeviceState *dev, Error **errp) return; } + if (s->irqchip_in_kernel && !kvm_enabled()) { + error_setg(errp, "irqchip_in_kernel works only in kvm mode"); + return; + } + s->pch_msi_irq = g_new(qemu_irq, s->irq_num); qdev_init_gpio_out(dev, s->pch_msi_irq, s->irq_num); } @@ -77,6 +83,8 @@ static void loongarch_pch_msi_init(Object *obj) static const Property loongarch_msi_properties[] = { DEFINE_PROP_UINT32("msi_irq_base", LoongArchPCHMSI, irq_base, 0), DEFINE_PROP_UINT32("msi_irq_num", LoongArchPCHMSI, irq_num, 0), + DEFINE_PROP_BOOL("irqchip-in-kernel", LoongArchPCHMSI, + irqchip_in_kernel, false), }; static void loongarch_pch_msi_class_init(ObjectClass *klass, const void *data) diff --git a/include/hw/intc/loongarch_pch_msi.h b/include/hw/intc/loongarch_pch_msi.h index b8586fb3b6..25f290d81a 100644 --- a/include/hw/intc/loongarch_pch_msi.h +++ b/include/hw/intc/loongarch_pch_msi.h @@ -22,4 +22,5 @@ struct LoongArchPCHMSI { /* irq base passed to upper extioi intc */ unsigned int irq_base; unsigned int irq_num; + bool irqchip_in_kernel; }; -- 2.39.3