[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 10/15] hw/intc/loongarch_pch: Add irqchip-in-kernel property
From: |
Bibo Mao |
Subject: |
[PATCH 10/15] hw/intc/loongarch_pch: Add irqchip-in-kernel property |
Date: |
Fri, 9 May 2025 18:07:42 +0800 |
With PCH PCI 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 <maobibo@loongson.cn>
---
hw/intc/loongarch_pch_pic.c | 14 ++++++++++++++
include/hw/intc/loongarch_pch_pic.h | 1 +
2 files changed, 15 insertions(+)
diff --git a/hw/intc/loongarch_pch_pic.c b/hw/intc/loongarch_pch_pic.c
index cbba2fc284..3729ab9700 100644
--- a/hw/intc/loongarch_pch_pic.c
+++ b/hw/intc/loongarch_pch_pic.c
@@ -10,6 +10,8 @@
#include "qemu/log.h"
#include "hw/irq.h"
#include "hw/intc/loongarch_pch_pic.h"
+#include "hw/qdev-properties.h"
+#include "system/kvm.h"
#include "trace.h"
#include "qapi/error.h"
@@ -264,6 +266,7 @@ static void loongarch_pic_realize(DeviceState *dev, Error
**errp)
{
LoongArchPICCommonState *s = LOONGARCH_PIC_COMMON(dev);
LoongarchPICClass *lpc = LOONGARCH_PIC_GET_CLASS(dev);
+ LoongarchPICState *lps = LOONGARCH_PIC(dev);
SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
Error *local_err = NULL;
@@ -273,6 +276,11 @@ static void loongarch_pic_realize(DeviceState *dev, Error
**errp)
return;
}
+ if (lps->irqchip_in_kernel && !kvm_enabled()) {
+ error_setg(errp, "PCH_PCI irqchip_in_kernel works only in kvm mode");
+ return;
+ }
+
qdev_init_gpio_out(dev, s->parent_irq, s->irq_num);
qdev_init_gpio_in(dev, pch_pic_irq_handler, s->irq_num);
memory_region_init_io(&s->iomem, OBJECT(dev),
@@ -281,6 +289,11 @@ static void loongarch_pic_realize(DeviceState *dev, Error
**errp)
sysbus_init_mmio(sbd, &s->iomem);
}
+static const Property loongarch_pic_properties[] = {
+ DEFINE_PROP_BOOL("irqchip-in-kernel", LoongarchPICState,
+ irqchip_in_kernel, false),
+};
+
static void loongarch_pic_class_init(ObjectClass *klass, const void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
@@ -291,6 +304,7 @@ static void loongarch_pic_class_init(ObjectClass *klass,
const void *data)
NULL, &lpc->parent_phases);
device_class_set_parent_realize(dc, loongarch_pic_realize,
&lpc->parent_realize);
+ device_class_set_props(dc, loongarch_pic_properties);
}
static const TypeInfo loongarch_pic_types[] = {
diff --git a/include/hw/intc/loongarch_pch_pic.h
b/include/hw/intc/loongarch_pch_pic.h
index 839a59a43b..40fe550c0b 100644
--- a/include/hw/intc/loongarch_pch_pic.h
+++ b/include/hw/intc/loongarch_pch_pic.h
@@ -16,6 +16,7 @@ OBJECT_DECLARE_TYPE(LoongarchPICState, LoongarchPICClass,
LOONGARCH_PIC)
struct LoongarchPICState {
LoongArchPICCommonState parent_obj;
+ bool irqchip_in_kernel;
};
struct LoongarchPICClass {
--
2.39.3
- [PATCH 02/15] hw/intc/loongarch_extioi: Add irqchip-in-kernel realize function, (continued)
- [PATCH 02/15] hw/intc/loongarch_extioi: Add irqchip-in-kernel realize function, Bibo Mao, 2025/05/09
- [PATCH 03/15] hw/intc/loongarch_extioi: Add irqchip-in-kernel save/restore function, Bibo Mao, 2025/05/09
- [PATCH 08/15] hw/intc/loongarch_pch_msi: Add irqchip-in-kernel property, Bibo Mao, 2025/05/09
- [PATCH 06/15] hw/intc/loongson_ipi: Add load and save interface with ipi_common class, Bibo Mao, 2025/05/09
- [PATCH 01/15] hw/intc/loongarch_extioi: Add irqchip-in-kernel property, Bibo Mao, 2025/05/09
- [PATCH 09/15] hw/intc/loongarch_pch_msi: Inject MSI interrupt to kernel, Bibo Mao, 2025/05/09
- [PATCH 07/15] hw/intc/loongarch_ipi: Add irqchip-in-kernel save/restore function, Bibo Mao, 2025/05/09
- [PATCH 05/15] hw/intc/loongarch_ipi: Add irqchip-in-kernel realize function, Bibo Mao, 2025/05/09
- [PATCH 04/15] hw/intc/loongarch_ipi: Add irqchip-in-kernel property, Bibo Mao, 2025/05/09
- [PATCH 10/15] hw/intc/loongarch_pch: Add irqchip-in-kernel property,
Bibo Mao <=
- [PATCH 11/15] hw/intc/loongarch_pch: Add irqchip-in-kernel realize function, Bibo Mao, 2025/05/09