mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:46:10 +00:00
hw/intc: riscv_imsic: Add reset API to IMSIC
Clearing IMSIC registers and qemu_irq in the reset function Signed-off-by: Jim Shu <jim.shu@sifive.com> Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com> Message-ID: <20260428160103.3551125-4-jim.shu@sifive.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
committed by
Alistair Francis
parent
99bfcd329a
commit
766391483b
@@ -342,6 +342,23 @@ static const MemoryRegionOps riscv_imsic_ops = {
|
||||
}
|
||||
};
|
||||
|
||||
static void riscv_imsic_reset_enter(Object *obj, ResetType type)
|
||||
{
|
||||
RISCVIMSICState *imsic = RISCV_IMSIC(obj);
|
||||
int i;
|
||||
|
||||
memset(imsic->eidelivery, 0, sizeof(uint32_t) * imsic->num_pages);
|
||||
memset(imsic->eithreshold, 0, sizeof(uint32_t) * imsic->num_pages);
|
||||
|
||||
for (i = 0; i < imsic->num_eistate; i++) {
|
||||
imsic->eistate[i] &= ~IMSIC_EISTATE_ENABLED;
|
||||
}
|
||||
|
||||
for (i = 0; i < imsic->num_pages; i++) {
|
||||
qemu_irq_lower(imsic->external_irqs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void riscv_imsic_realize(DeviceState *dev, Error **errp)
|
||||
{
|
||||
RISCVIMSICState *imsic = RISCV_IMSIC(dev);
|
||||
@@ -425,9 +442,11 @@ static const VMStateDescription vmstate_riscv_imsic = {
|
||||
static void riscv_imsic_class_init(ObjectClass *klass, const void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
ResettableClass *rc = RESETTABLE_CLASS(klass);
|
||||
|
||||
device_class_set_props(dc, riscv_imsic_properties);
|
||||
dc->realize = riscv_imsic_realize;
|
||||
rc->phases.enter = riscv_imsic_reset_enter;
|
||||
dc->vmsd = &vmstate_riscv_imsic;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user