xemu/hw/intc
Yong-Xuan Wang 2ae6cca1d3 hw/intc/riscv_aplic: Check and update pending when write sourcecfg
The section 4.5.2 of the RISC-V AIA specification says that any write
to a sourcecfg register of an APLIC might (or might not) cause the
corresponding interrupt-pending bit to be set to one if the rectified
input value is high (= 1) under the new source mode.

If an interrupt is asserted before the driver configs its interrupt
type to APLIC, it's pending bit will not be set except a relevant
write to a setip or setipnum register. When we write the interrupt
type to sourcecfg register, if the APLIC device doesn't check
rectified input value and update the pending bit, this interrupt
might never becomes pending.

For APLIC.m, we can manully set pending by setip or setipnum
registers in driver. But for APLIC.w, the pending status totally
depends on the rectified input value, we can't control the pending
status via mmio registers. In this case, hw should check and update
pending status for us when writing sourcecfg registers.

Update QEMU emulation to handle "pre-existing" interrupts.

Signed-off-by: Yong-Xuan Wang <yongxuan.wang@sifive.com>
Acked-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20241004104649.13129-1-yongxuan.wang@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
2024-10-30 11:22:08 +10:00
..
Kconfig hw/intc/loongarch_ipi: Add loongarch IPI support 2024-08-06 10:22:52 +02:00
allwinner-a10-pic.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
apic.c hw/intc/apic: fix memory leak 2024-03-09 18:51:45 +01:00
apic_common.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
arm_gic.c hw/intc/arm_gic: fix spurious level triggered interrupts 2024-09-13 15:31:50 +01:00
arm_gic_common.c hw, target: Add ResetType argument to hold and exit phase methods 2024-04-25 10:21:06 +01:00
arm_gic_kvm.c hw, target: Add ResetType argument to hold and exit phase methods 2024-04-25 10:21:06 +01:00
arm_gicv2m.c arm tcg cpus: Fix Lesser GPL version number 2020-11-15 16:42:14 +01:00
arm_gicv3.c hw/intc/arm_gicv3: Implement NMI interrupt priority 2024-04-25 10:21:05 +01:00
arm_gicv3_common.c hw, target: Add ResetType argument to hold and exit phase methods 2024-04-25 10:21:06 +01:00
arm_gicv3_cpuif.c hw/intc/arm_gicv3_cpuif: Add cast to match the documentation 2024-10-15 11:29:45 +01:00
arm_gicv3_cpuif_common.c hw/intc/arm_gicv3: Extract gicv3_set_gicv3state from arm_gicv3_cpuif.c 2021-12-15 10:11:34 +00:00
arm_gicv3_dist.c hw/intc/arm_gicv3: Implement GICD_INMIR 2024-04-25 10:21:05 +01:00
arm_gicv3_its.c hw, target: Add ResetType argument to hold and exit phase methods 2024-04-25 10:21:06 +01:00
arm_gicv3_its_common.c hw, target: Add ResetType argument to hold and exit phase methods 2024-04-25 10:21:06 +01:00
arm_gicv3_its_kvm.c hw, target: Add ResetType argument to hold and exit phase methods 2024-04-25 10:21:06 +01:00
arm_gicv3_kvm.c hw, target: Add ResetType argument to hold and exit phase methods 2024-04-25 10:21:06 +01:00
arm_gicv3_redist.c hw/intc/arm_gicv3: Implement NMI interrupt priority 2024-04-25 10:21:05 +01:00
armv7m_nvic.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
aspeed_intc.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
aspeed_vic.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
bcm2835_ic.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
bcm2836_control.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
exynos4210_combiner.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
exynos4210_gic.c Misc cleanups 2022-04-21 09:27:54 -07:00
gic_internal.h hw/intc/arm_gic: Fix deactivation of SPI lines 2024-06-21 14:01:58 +01:00
gicv3_internal.h hw/intc/arm_gicv3: Handle icv_nmiar1_read() for icc_nmiar1_read() 2024-04-25 10:21:05 +01:00
goldfish_pic.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
grlib_irqmp.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
heathrow_pic.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
i8259.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
i8259_common.c hw/intc: Avoid using Monitor in INTERRUPT_STATS_PROVIDER::print_info() 2024-06-19 12:40:49 +02:00
imx_avic.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
imx_gpcv2.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
intc.c intc: add an interface to gather statistics/informations on interrupt controllers 2016-10-04 10:00:25 +02:00
ioapic-stub.c i386: select correct components for no-board build 2024-05-10 15:45:15 +02:00
ioapic.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
ioapic_common.c hw/intc: Avoid using Monitor in INTERRUPT_STATS_PROVIDER::print_info() 2024-06-19 12:40:49 +02:00
ioapic_internal.h hw: Move ioapic*.h to intc/ 2023-02-27 22:29:01 +01:00
kvm_irqcount.c hw/intc: Extract the IRQ counting functions into a separate file 2023-01-13 16:22:57 +01:00
loongarch_extioi.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
loongarch_ipi.c hw/intc/loongarch_ipi: Add loongarch IPI support 2024-08-06 10:22:52 +02:00
loongarch_pch_msi.c hw/intc/loongarch_pch_msi: add irq number property 2023-01-06 10:54:20 +08:00
loongarch_pch_pic.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
loongson_ipi.c hw/intc/loongson_ipi: Remove unused headers 2024-09-13 20:10:49 +02:00
loongson_ipi_common.c hw/intc/loongson_ipi: Move common code to loongson_ipi_common.c 2024-08-06 10:22:52 +02:00
loongson_liointc.c hw/other: spelling fixes 2023-09-21 11:31:16 +03:00
m68k_irqc.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
meson.build hw/intc: Remove TYPE_ETRAX_FS_PIC device 2024-09-13 20:10:50 +02:00
mips_gic.c accel/tcg: Replace CPUState.env_ptr with cpu_env() 2023-10-04 11:03:54 -07:00
omap_intc.c hw/intc/omap_intc: Remove now-unnecessary abstract base class 2024-10-15 15:16:17 +01:00
ompic.c hw/intc: Constify VMState 2023-12-29 11:17:30 +11:00
openpic.c hw/intc/openpic: Improve errors for out of bounds property values 2024-10-18 15:03:35 +02:00
openpic_kvm.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
pl190.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
pnv_xive.c hw/ppc: Avoid using Monitor in pnv_xive_pic_print_info() 2024-06-19 12:40:49 +02:00
pnv_xive2.c pnv/xive2: Move xive2_nvp_pic_print_info() to xive2.c 2024-07-26 09:51:33 +10:00
pnv_xive2_regs.h pnv/xive2: Enable VST NVG and NVC index compression 2024-07-26 09:51:33 +10:00
pnv_xive_regs.h ppc/xive: Handle END triggers between chips with MMIOs 2023-09-06 11:19:33 +02:00
ppc-uic.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
realview_gic.c error: Eliminate error_propagate() with Coccinelle, part 1 2020-07-10 15:18:08 +02:00
riscv_aclint.c hw/intc: Constify VMState 2023-12-29 11:17:30 +11:00
riscv_aplic.c hw/intc/riscv_aplic: Check and update pending when write sourcecfg 2024-10-30 11:22:08 +10:00
riscv_imsic.c hw/intc: riscv-imsic: Fix interrupt state updates. 2024-10-02 15:11:51 +10:00
rx_icu.c hw/intc: Constify VMState 2023-12-29 11:17:30 +11:00
s390_flic.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
s390_flic_kvm.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
sh_intc.c hw/intc/sh_intc: Remove unneeded local variable initialisers 2021-10-30 18:39:37 +02:00
sifive_plic.c hw/intc: Don't clear pending bits on IRQ lowering 2024-10-30 11:22:08 +10:00
slavio_intctl.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
spapr_xive.c hw/ppc: Avoid using Monitor in SpaprInterruptControllerClass::print_info() 2024-06-19 12:40:49 +02:00
spapr_xive_kvm.c hw/other: spelling fixes 2023-09-21 11:31:16 +03:00
trace-events aspeed/intc: Add AST2700 support 2024-06-16 21:08:54 +02:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
vgic_common.h intc/gic: Extract some reusable vGIC code 2015-09-24 01:29:36 +01:00
xics.c hw/ppc: Avoid using Monitor in ics_pic_print_info() 2024-06-19 12:40:49 +02:00
xics_kvm.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
xics_pnv.c non-virt: Fix Lesser GPL version number 2020-11-15 16:38:24 +01:00
xics_spapr.c hw/ppc: Avoid using Monitor in SpaprInterruptControllerClass::print_info() 2024-06-19 12:40:49 +02:00
xilinx_intc.c hw/intc/xilinx_intc: Use 'XpsIntc' typedef instead of 'struct xlx_pic' 2023-01-12 17:15:09 +00:00
xive.c pnv/xive2: Refine TIMA 'info pic' output 2024-07-26 09:51:33 +10:00
xive2.c pnv/xive2: Dump more END state with 'info pic' 2024-07-26 09:51:33 +10:00
xlnx-pmu-iomod-intc.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
xlnx-zynqmp-ipi.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00