On 17:08 Fri 12 Apr     , Peter Maydell wrote:
> We pass a ResetType argument to the Resettable class enter
> phase method, but we don't pass it to hold and exit, even though
> the callsites have it readily available. This means that if
> a device cared about the ResetType it would need to record it
> in the enter phase method to use later on. Pass the type to
> all three of the phase methods to avoid having to do that.
> 
> Commit created with
> 
>   for dir in hw target include; do \
>       spatch --macro-file scripts/cocci-macro-file.h \
>              --sp-file scripts/coccinelle/reset-type.cocci \
>              --keep-comments --smpl-spacing --in-place \
>              --include-headers --dir $dir; done
> 
> and no manual edits.
> 
> Signed-off-by: Peter Maydell <peter.mayd...@linaro.org>

Reviewed-by: Luc Michel <luc.mic...@amd.com>

> ---
>  include/hw/resettable.h             |  4 ++--
>  hw/adc/npcm7xx_adc.c                |  2 +-
>  hw/arm/pxa2xx_pic.c                 |  2 +-
>  hw/arm/smmu-common.c                |  2 +-
>  hw/arm/smmuv3.c                     |  4 ++--
>  hw/arm/stellaris.c                  | 10 +++++-----
>  hw/audio/asc.c                      |  2 +-
>  hw/char/cadence_uart.c              |  2 +-
>  hw/char/sifive_uart.c               |  2 +-
>  hw/core/cpu-common.c                |  2 +-
>  hw/core/qdev.c                      |  4 ++--
>  hw/core/reset.c                     |  2 +-
>  hw/core/resettable.c                |  4 ++--
>  hw/display/virtio-vga.c             |  4 ++--
>  hw/gpio/npcm7xx_gpio.c              |  2 +-
>  hw/gpio/pl061.c                     |  2 +-
>  hw/gpio/stm32l4x5_gpio.c            |  2 +-
>  hw/hyperv/vmbus.c                   |  2 +-
>  hw/i2c/allwinner-i2c.c              |  2 +-
>  hw/i2c/npcm7xx_smbus.c              |  2 +-
>  hw/input/adb.c                      |  2 +-
>  hw/input/ps2.c                      | 12 ++++++------
>  hw/intc/arm_gic_common.c            |  2 +-
>  hw/intc/arm_gic_kvm.c               |  4 ++--
>  hw/intc/arm_gicv3_common.c          |  2 +-
>  hw/intc/arm_gicv3_its.c             |  4 ++--
>  hw/intc/arm_gicv3_its_common.c      |  2 +-
>  hw/intc/arm_gicv3_its_kvm.c         |  4 ++--
>  hw/intc/arm_gicv3_kvm.c             |  4 ++--
>  hw/intc/xics.c                      |  2 +-
>  hw/m68k/q800-glue.c                 |  2 +-
>  hw/misc/djmemc.c                    |  2 +-
>  hw/misc/iosb.c                      |  2 +-
>  hw/misc/mac_via.c                   |  8 ++++----
>  hw/misc/macio/cuda.c                |  4 ++--
>  hw/misc/macio/pmu.c                 |  4 ++--
>  hw/misc/mos6522.c                   |  2 +-
>  hw/misc/npcm7xx_mft.c               |  2 +-
>  hw/misc/npcm7xx_pwm.c               |  2 +-
>  hw/misc/stm32l4x5_exti.c            |  2 +-
>  hw/misc/stm32l4x5_rcc.c             | 10 +++++-----
>  hw/misc/stm32l4x5_syscfg.c          |  2 +-
>  hw/misc/xlnx-versal-cframe-reg.c    |  2 +-
>  hw/misc/xlnx-versal-crl.c           |  2 +-
>  hw/misc/xlnx-versal-pmc-iou-slcr.c  |  2 +-
>  hw/misc/xlnx-versal-trng.c          |  2 +-
>  hw/misc/xlnx-versal-xramc.c         |  2 +-
>  hw/misc/xlnx-zynqmp-apu-ctrl.c      |  2 +-
>  hw/misc/xlnx-zynqmp-crf.c           |  2 +-
>  hw/misc/zynq_slcr.c                 |  4 ++--
>  hw/net/can/xlnx-zynqmp-can.c        |  2 +-
>  hw/net/e1000.c                      |  2 +-
>  hw/net/e1000e.c                     |  2 +-
>  hw/net/igb.c                        |  2 +-
>  hw/net/igbvf.c                      |  2 +-
>  hw/nvram/xlnx-bbram.c               |  2 +-
>  hw/nvram/xlnx-versal-efuse-ctrl.c   |  2 +-
>  hw/nvram/xlnx-zynqmp-efuse.c        |  2 +-
>  hw/pci-bridge/cxl_root_port.c       |  4 ++--
>  hw/pci-bridge/pcie_root_port.c      |  2 +-
>  hw/pci-host/bonito.c                |  2 +-
>  hw/pci-host/pnv_phb.c               |  4 ++--
>  hw/pci-host/pnv_phb3_msi.c          |  4 ++--
>  hw/pci/pci.c                        |  4 ++--
>  hw/rtc/mc146818rtc.c                |  2 +-
>  hw/s390x/css-bridge.c               |  2 +-
>  hw/sensor/adm1266.c                 |  2 +-
>  hw/sensor/adm1272.c                 |  2 +-
>  hw/sensor/isl_pmbus_vr.c            | 10 +++++-----
>  hw/sensor/max31785.c                |  2 +-
>  hw/sensor/max34451.c                |  2 +-
>  hw/ssi/npcm7xx_fiu.c                |  2 +-
>  hw/timer/etraxfs_timer.c            |  2 +-
>  hw/timer/npcm7xx_timer.c            |  2 +-
>  hw/usb/hcd-dwc2.c                   |  8 ++++----
>  hw/usb/xlnx-versal-usb2-ctrl-regs.c |  2 +-
>  hw/virtio/virtio-pci.c              |  2 +-
>  target/arm/cpu.c                    |  4 ++--
>  target/avr/cpu.c                    |  4 ++--
>  target/cris/cpu.c                   |  4 ++--
>  target/hexagon/cpu.c                |  4 ++--
>  target/i386/cpu.c                   |  4 ++--
>  target/loongarch/cpu.c              |  4 ++--
>  target/m68k/cpu.c                   |  4 ++--
>  target/microblaze/cpu.c             |  4 ++--
>  target/mips/cpu.c                   |  4 ++--
>  target/nios2/cpu.c                  |  4 ++--
>  target/openrisc/cpu.c               |  4 ++--
>  target/ppc/cpu_init.c               |  4 ++--
>  target/riscv/cpu.c                  |  4 ++--
>  target/rx/cpu.c                     |  4 ++--
>  target/sh4/cpu.c                    |  4 ++--
>  target/sparc/cpu.c                  |  4 ++--
>  target/tricore/cpu.c                |  4 ++--
>  target/xtensa/cpu.c                 |  4 ++--
>  95 files changed, 152 insertions(+), 152 deletions(-)
> 
> diff --git a/include/hw/resettable.h b/include/hw/resettable.h
> index bdcd1276b69..3161e471c9b 100644
> --- a/include/hw/resettable.h
> +++ b/include/hw/resettable.h
> @@ -103,8 +103,8 @@ typedef enum ResetType {
>   * the callback.
>   */
>  typedef void (*ResettableEnterPhase)(Object *obj, ResetType type);
> -typedef void (*ResettableHoldPhase)(Object *obj);
> -typedef void (*ResettableExitPhase)(Object *obj);
> +typedef void (*ResettableHoldPhase)(Object *obj, ResetType type);
> +typedef void (*ResettableExitPhase)(Object *obj, ResetType type);
>  typedef ResettableState * (*ResettableGetState)(Object *obj);
>  typedef void (*ResettableTrFunction)(Object *obj);
>  typedef ResettableTrFunction (*ResettableGetTrFunction)(Object *obj);
> diff --git a/hw/adc/npcm7xx_adc.c b/hw/adc/npcm7xx_adc.c
> index c6647eec6d7..de8469dae4f 100644
> --- a/hw/adc/npcm7xx_adc.c
> +++ b/hw/adc/npcm7xx_adc.c
> @@ -218,7 +218,7 @@ static void npcm7xx_adc_enter_reset(Object *obj, 
> ResetType type)
>      npcm7xx_adc_reset(s);
>  }
> 
> -static void npcm7xx_adc_hold_reset(Object *obj)
> +static void npcm7xx_adc_hold_reset(Object *obj, ResetType type)
>  {
>      NPCM7xxADCState *s = NPCM7XX_ADC(obj);
> 
> diff --git a/hw/arm/pxa2xx_pic.c b/hw/arm/pxa2xx_pic.c
> index f54546cd4df..34c5555dba9 100644
> --- a/hw/arm/pxa2xx_pic.c
> +++ b/hw/arm/pxa2xx_pic.c
> @@ -272,7 +272,7 @@ static int pxa2xx_pic_post_load(void *opaque, int 
> version_id)
>      return 0;
>  }
> 
> -static void pxa2xx_pic_reset_hold(Object *obj)
> +static void pxa2xx_pic_reset_hold(Object *obj, ResetType type)
>  {
>      PXA2xxPICState *s = PXA2XX_PIC(obj);
> 
> diff --git a/hw/arm/smmu-common.c b/hw/arm/smmu-common.c
> index c4b540656c1..1ce706bf94b 100644
> --- a/hw/arm/smmu-common.c
> +++ b/hw/arm/smmu-common.c
> @@ -682,7 +682,7 @@ static void smmu_base_realize(DeviceState *dev, Error 
> **errp)
>      }
>  }
> 
> -static void smmu_base_reset_hold(Object *obj)
> +static void smmu_base_reset_hold(Object *obj, ResetType type)
>  {
>      SMMUState *s = ARM_SMMU(obj);
> 
> diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c
> index 9eb56a70f39..2d1e0d55ec2 100644
> --- a/hw/arm/smmuv3.c
> +++ b/hw/arm/smmuv3.c
> @@ -1727,13 +1727,13 @@ static void smmu_init_irq(SMMUv3State *s, 
> SysBusDevice *dev)
>      }
>  }
> 
> -static void smmu_reset_hold(Object *obj)
> +static void smmu_reset_hold(Object *obj, ResetType type)
>  {
>      SMMUv3State *s = ARM_SMMUV3(obj);
>      SMMUv3Class *c = ARM_SMMUV3_GET_CLASS(s);
> 
>      if (c->parent_phases.hold) {
> -        c->parent_phases.hold(obj);
> +        c->parent_phases.hold(obj, type);
>      }
> 
>      smmuv3_init_regs(s);
> diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
> index a2f998bf9e2..376746251e6 100644
> --- a/hw/arm/stellaris.c
> +++ b/hw/arm/stellaris.c
> @@ -394,7 +394,7 @@ static void stellaris_sys_reset_enter(Object *obj, 
> ResetType type)
>      s->dcgc[0] = 1;
>  }
> 
> -static void stellaris_sys_reset_hold(Object *obj)
> +static void stellaris_sys_reset_hold(Object *obj, ResetType type)
>  {
>      ssys_state *s = STELLARIS_SYS(obj);
> 
> @@ -402,7 +402,7 @@ static void stellaris_sys_reset_hold(Object *obj)
>      ssys_calculate_system_clock(s, true);
>  }
> 
> -static void stellaris_sys_reset_exit(Object *obj)
> +static void stellaris_sys_reset_exit(Object *obj, ResetType type)
>  {
>  }
> 
> @@ -618,7 +618,7 @@ static void stellaris_i2c_reset_enter(Object *obj, 
> ResetType type)
>          i2c_end_transfer(s->bus);
>  }
> 
> -static void stellaris_i2c_reset_hold(Object *obj)
> +static void stellaris_i2c_reset_hold(Object *obj, ResetType type)
>  {
>      stellaris_i2c_state *s = STELLARIS_I2C(obj);
> 
> @@ -631,7 +631,7 @@ static void stellaris_i2c_reset_hold(Object *obj)
>      s->mcr = 0;
>  }
> 
> -static void stellaris_i2c_reset_exit(Object *obj)
> +static void stellaris_i2c_reset_exit(Object *obj, ResetType type)
>  {
>      stellaris_i2c_state *s = STELLARIS_I2C(obj);
> 
> @@ -787,7 +787,7 @@ static void stellaris_adc_trigger(void *opaque, int irq, 
> int level)
>      }
>  }
> 
> -static void stellaris_adc_reset_hold(Object *obj)
> +static void stellaris_adc_reset_hold(Object *obj, ResetType type)
>  {
>      StellarisADCState *s = STELLARIS_ADC(obj);
>      int n;
> diff --git a/hw/audio/asc.c b/hw/audio/asc.c
> index 87b56243262..805416372c2 100644
> --- a/hw/audio/asc.c
> +++ b/hw/audio/asc.c
> @@ -610,7 +610,7 @@ static void asc_fifo_init(ASCFIFOState *fs, int index)
>      g_free(name);
>  }
> 
> -static void asc_reset_hold(Object *obj)
> +static void asc_reset_hold(Object *obj, ResetType type)
>  {
>      ASCState *s = ASC(obj);
> 
> diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
> index db31d7cc859..77d9a2a221f 100644
> --- a/hw/char/cadence_uart.c
> +++ b/hw/char/cadence_uart.c
> @@ -525,7 +525,7 @@ static void cadence_uart_reset_init(Object *obj, 
> ResetType type)
>      s->r[R_TTRIG] = 0x00000020;
>  }
> 
> -static void cadence_uart_reset_hold(Object *obj)
> +static void cadence_uart_reset_hold(Object *obj, ResetType type)
>  {
>      CadenceUARTState *s = CADENCE_UART(obj);
> 
> diff --git a/hw/char/sifive_uart.c b/hw/char/sifive_uart.c
> index e8716c42523..7fc6787f690 100644
> --- a/hw/char/sifive_uart.c
> +++ b/hw/char/sifive_uart.c
> @@ -214,7 +214,7 @@ static void sifive_uart_reset_enter(Object *obj, 
> ResetType type)
>      s->rx_fifo_len = 0;
>  }
> 
> -static void sifive_uart_reset_hold(Object *obj)
> +static void sifive_uart_reset_hold(Object *obj, ResetType type)
>  {
>      SiFiveUARTState *s = SIFIVE_UART(obj);
>      qemu_irq_lower(s->irq);
> diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c
> index 4bd9c70a83f..a72d48d9e17 100644
> --- a/hw/core/cpu-common.c
> +++ b/hw/core/cpu-common.c
> @@ -113,7 +113,7 @@ void cpu_reset(CPUState *cpu)
>      trace_cpu_reset(cpu->cpu_index);
>  }
> 
> -static void cpu_common_reset_hold(Object *obj)
> +static void cpu_common_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cpu = CPU(obj);
>      CPUClass *cc = CPU_GET_CLASS(cpu);
> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
> index c68d0f7c512..052bfffe79d 100644
> --- a/hw/core/qdev.c
> +++ b/hw/core/qdev.c
> @@ -760,10 +760,10 @@ static void device_phases_reset(DeviceState *dev)
>          rc->phases.enter(OBJECT(dev), RESET_TYPE_COLD);
>      }
>      if (rc->phases.hold) {
> -        rc->phases.hold(OBJECT(dev));
> +        rc->phases.hold(OBJECT(dev), RESET_TYPE_COLD);
>      }
>      if (rc->phases.exit) {
> -        rc->phases.exit(OBJECT(dev));
> +        rc->phases.exit(OBJECT(dev), RESET_TYPE_COLD);
>      }
>  }
> 
> diff --git a/hw/core/reset.c b/hw/core/reset.c
> index d50da7e3041..f9fef45e050 100644
> --- a/hw/core/reset.c
> +++ b/hw/core/reset.c
> @@ -73,7 +73,7 @@ static ResettableState *legacy_reset_get_state(Object *obj)
>      return &lr->reset_state;
>  }
> 
> -static void legacy_reset_hold(Object *obj)
> +static void legacy_reset_hold(Object *obj, ResetType type)
>  {
>      LegacyReset *lr = LEGACY_RESET(obj);
> 
> diff --git a/hw/core/resettable.c b/hw/core/resettable.c
> index c3df75c6ba8..bebf7f10b26 100644
> --- a/hw/core/resettable.c
> +++ b/hw/core/resettable.c
> @@ -181,7 +181,7 @@ static void resettable_phase_hold(Object *obj, void 
> *opaque, ResetType type)
>              trace_resettable_transitional_function(obj, obj_typename);
>              tr_func(obj);
>          } else if (rc->phases.hold) {
> -            rc->phases.hold(obj);
> +            rc->phases.hold(obj, type);
>          }
>      }
>      trace_resettable_phase_hold_end(obj, obj_typename, s->count);
> @@ -204,7 +204,7 @@ static void resettable_phase_exit(Object *obj, void 
> *opaque, ResetType type)
>      if (--s->count == 0) {
>          trace_resettable_phase_exit_exec(obj, obj_typename, 
> !!rc->phases.exit);
>          if (rc->phases.exit && !resettable_get_tr_func(rc, obj)) {
> -            rc->phases.exit(obj);
> +            rc->phases.exit(obj, type);
>          }
>      }
>      s->exit_phase_in_progress = false;
> diff --git a/hw/display/virtio-vga.c b/hw/display/virtio-vga.c
> index 94d3353f540..276f315108b 100644
> --- a/hw/display/virtio-vga.c
> +++ b/hw/display/virtio-vga.c
> @@ -180,14 +180,14 @@ static void virtio_vga_base_realize(VirtIOPCIProxy 
> *vpci_dev, Error **errp)
>      }
>  }
> 
> -static void virtio_vga_base_reset_hold(Object *obj)
> +static void virtio_vga_base_reset_hold(Object *obj, ResetType type)
>  {
>      VirtIOVGABaseClass *klass = VIRTIO_VGA_BASE_GET_CLASS(obj);
>      VirtIOVGABase *vvga = VIRTIO_VGA_BASE(obj);
> 
>      /* reset virtio-gpu */
>      if (klass->parent_phases.hold) {
> -        klass->parent_phases.hold(obj);
> +        klass->parent_phases.hold(obj, type);
>      }
> 
>      /* reset vga */
> diff --git a/hw/gpio/npcm7xx_gpio.c b/hw/gpio/npcm7xx_gpio.c
> index 6e70ac1f24b..ba19b9ebad3 100644
> --- a/hw/gpio/npcm7xx_gpio.c
> +++ b/hw/gpio/npcm7xx_gpio.c
> @@ -352,7 +352,7 @@ static void npcm7xx_gpio_enter_reset(Object *obj, 
> ResetType type)
>      s->regs[NPCM7XX_GPIO_ODSC] = s->reset_odsc;
>  }
> 
> -static void npcm7xx_gpio_hold_reset(Object *obj)
> +static void npcm7xx_gpio_hold_reset(Object *obj, ResetType type)
>  {
>      NPCM7xxGPIOState *s = NPCM7XX_GPIO(obj);
> 
> diff --git a/hw/gpio/pl061.c b/hw/gpio/pl061.c
> index 86f23836553..d5838b8e98d 100644
> --- a/hw/gpio/pl061.c
> +++ b/hw/gpio/pl061.c
> @@ -484,7 +484,7 @@ static void pl061_enter_reset(Object *obj, ResetType type)
>      s->amsel = 0;
>  }
> 
> -static void pl061_hold_reset(Object *obj)
> +static void pl061_hold_reset(Object *obj, ResetType type)
>  {
>      PL061State *s = PL061(obj);
>      int i, level;
> diff --git a/hw/gpio/stm32l4x5_gpio.c b/hw/gpio/stm32l4x5_gpio.c
> index 63b8763e9d3..71bf5fddb2a 100644
> --- a/hw/gpio/stm32l4x5_gpio.c
> +++ b/hw/gpio/stm32l4x5_gpio.c
> @@ -70,7 +70,7 @@ static bool is_push_pull(Stm32l4x5GpioState *s, unsigned 
> pin)
>      return extract32(s->otyper, pin, 1) == 0;
>  }
> 
> -static void stm32l4x5_gpio_reset_hold(Object *obj)
> +static void stm32l4x5_gpio_reset_hold(Object *obj, ResetType type)
>  {
>      Stm32l4x5GpioState *s = STM32L4X5_GPIO(obj);
> 
> diff --git a/hw/hyperv/vmbus.c b/hw/hyperv/vmbus.c
> index f33afeeea27..490d805d298 100644
> --- a/hw/hyperv/vmbus.c
> +++ b/hw/hyperv/vmbus.c
> @@ -2453,7 +2453,7 @@ static void vmbus_unrealize(BusState *bus)
>      qemu_mutex_destroy(&vmbus->rx_queue_lock);
>  }
> 
> -static void vmbus_reset_hold(Object *obj)
> +static void vmbus_reset_hold(Object *obj, ResetType type)
>  {
>      vmbus_deinit(VMBUS(obj));
>  }
> diff --git a/hw/i2c/allwinner-i2c.c b/hw/i2c/allwinner-i2c.c
> index 96c20c86372..16f1d6d40e7 100644
> --- a/hw/i2c/allwinner-i2c.c
> +++ b/hw/i2c/allwinner-i2c.c
> @@ -170,7 +170,7 @@ static inline bool 
> allwinner_i2c_interrupt_is_enabled(AWI2CState *s)
>      return s->cntr & TWI_CNTR_INT_EN;
>  }
> 
> -static void allwinner_i2c_reset_hold(Object *obj)
> +static void allwinner_i2c_reset_hold(Object *obj, ResetType type)
>  {
>      AWI2CState *s = AW_I2C(obj);
> 
> diff --git a/hw/i2c/npcm7xx_smbus.c b/hw/i2c/npcm7xx_smbus.c
> index 0ea3083bb6e..22d68fc67dd 100644
> --- a/hw/i2c/npcm7xx_smbus.c
> +++ b/hw/i2c/npcm7xx_smbus.c
> @@ -1022,7 +1022,7 @@ static void npcm7xx_smbus_enter_reset(Object *obj, 
> ResetType type)
>      s->rx_cur = 0;
>  }
> 
> -static void npcm7xx_smbus_hold_reset(Object *obj)
> +static void npcm7xx_smbus_hold_reset(Object *obj, ResetType type)
>  {
>      NPCM7xxSMBusState *s = NPCM7XX_SMBUS(obj);
> 
> diff --git a/hw/input/adb.c b/hw/input/adb.c
> index 98f39b4281a..aff7130fd0f 100644
> --- a/hw/input/adb.c
> +++ b/hw/input/adb.c
> @@ -231,7 +231,7 @@ static const VMStateDescription vmstate_adb_bus = {
>      }
>  };
> 
> -static void adb_bus_reset_hold(Object *obj)
> +static void adb_bus_reset_hold(Object *obj, ResetType type)
>  {
>      ADBBusState *adb_bus = ADB_BUS(obj);
> 
> diff --git a/hw/input/ps2.c b/hw/input/ps2.c
> index 00b695a0b97..d6f834443dd 100644
> --- a/hw/input/ps2.c
> +++ b/hw/input/ps2.c
> @@ -1007,7 +1007,7 @@ void ps2_write_mouse(PS2MouseState *s, int val)
>      }
>  }
> 
> -static void ps2_reset_hold(Object *obj)
> +static void ps2_reset_hold(Object *obj, ResetType type)
>  {
>      PS2State *s = PS2_DEVICE(obj);
> 
> @@ -1015,7 +1015,7 @@ static void ps2_reset_hold(Object *obj)
>      ps2_reset_queue(s);
>  }
> 
> -static void ps2_reset_exit(Object *obj)
> +static void ps2_reset_exit(Object *obj, ResetType type)
>  {
>      PS2State *s = PS2_DEVICE(obj);
> 
> @@ -1048,7 +1048,7 @@ static void ps2_common_post_load(PS2State *s)
>      q->cwptr = ccount ? (q->rptr + ccount) & (PS2_BUFFER_SIZE - 1) : -1;
>  }
> 
> -static void ps2_kbd_reset_hold(Object *obj)
> +static void ps2_kbd_reset_hold(Object *obj, ResetType type)
>  {
>      PS2DeviceClass *ps2dc = PS2_DEVICE_GET_CLASS(obj);
>      PS2KbdState *s = PS2_KBD_DEVICE(obj);
> @@ -1056,7 +1056,7 @@ static void ps2_kbd_reset_hold(Object *obj)
>      trace_ps2_kbd_reset(s);
> 
>      if (ps2dc->parent_phases.hold) {
> -        ps2dc->parent_phases.hold(obj);
> +        ps2dc->parent_phases.hold(obj, type);
>      }
> 
>      s->scan_enabled = 1;
> @@ -1065,7 +1065,7 @@ static void ps2_kbd_reset_hold(Object *obj)
>      s->modifiers = 0;
>  }
> 
> -static void ps2_mouse_reset_hold(Object *obj)
> +static void ps2_mouse_reset_hold(Object *obj, ResetType type)
>  {
>      PS2DeviceClass *ps2dc = PS2_DEVICE_GET_CLASS(obj);
>      PS2MouseState *s = PS2_MOUSE_DEVICE(obj);
> @@ -1073,7 +1073,7 @@ static void ps2_mouse_reset_hold(Object *obj)
>      trace_ps2_mouse_reset(s);
> 
>      if (ps2dc->parent_phases.hold) {
> -        ps2dc->parent_phases.hold(obj);
> +        ps2dc->parent_phases.hold(obj, type);
>      }
> 
>      s->mouse_status = 0;
> diff --git a/hw/intc/arm_gic_common.c b/hw/intc/arm_gic_common.c
> index 94c173cb071..53fb2c4e2d3 100644
> --- a/hw/intc/arm_gic_common.c
> +++ b/hw/intc/arm_gic_common.c
> @@ -263,7 +263,7 @@ static inline void 
> arm_gic_common_reset_irq_state(GICState *s, int cidx,
>      }
>  }
> 
> -static void arm_gic_common_reset_hold(Object *obj)
> +static void arm_gic_common_reset_hold(Object *obj, ResetType type)
>  {
>      GICState *s = ARM_GIC_COMMON(obj);
>      int i, j;
> diff --git a/hw/intc/arm_gic_kvm.c b/hw/intc/arm_gic_kvm.c
> index e0d9e512a37..53defee7d59 100644
> --- a/hw/intc/arm_gic_kvm.c
> +++ b/hw/intc/arm_gic_kvm.c
> @@ -473,13 +473,13 @@ static void kvm_arm_gic_get(GICState *s)
>      }
>  }
> 
> -static void kvm_arm_gic_reset_hold(Object *obj)
> +static void kvm_arm_gic_reset_hold(Object *obj, ResetType type)
>  {
>      GICState *s = ARM_GIC_COMMON(obj);
>      KVMARMGICClass *kgc = KVM_ARM_GIC_GET_CLASS(s);
> 
>      if (kgc->parent_phases.hold) {
> -        kgc->parent_phases.hold(obj);
> +        kgc->parent_phases.hold(obj, type);
>      }
> 
>      if (kvm_arm_gic_can_save_restore(s)) {
> diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c
> index cb55c726810..6cbb2be9b19 100644
> --- a/hw/intc/arm_gicv3_common.c
> +++ b/hw/intc/arm_gicv3_common.c
> @@ -451,7 +451,7 @@ static void arm_gicv3_finalize(Object *obj)
>      g_free(s->redist_region_count);
>  }
> 
> -static void arm_gicv3_common_reset_hold(Object *obj)
> +static void arm_gicv3_common_reset_hold(Object *obj, ResetType type)
>  {
>      GICv3State *s = ARM_GICV3_COMMON(obj);
>      int i;
> diff --git a/hw/intc/arm_gicv3_its.c b/hw/intc/arm_gicv3_its.c
> index 52e9aca9c65..bf31158470e 100644
> --- a/hw/intc/arm_gicv3_its.c
> +++ b/hw/intc/arm_gicv3_its.c
> @@ -1950,13 +1950,13 @@ static void gicv3_arm_its_realize(DeviceState *dev, 
> Error **errp)
>      }
>  }
> 
> -static void gicv3_its_reset_hold(Object *obj)
> +static void gicv3_its_reset_hold(Object *obj, ResetType type)
>  {
>      GICv3ITSState *s = ARM_GICV3_ITS_COMMON(obj);
>      GICv3ITSClass *c = ARM_GICV3_ITS_GET_CLASS(s);
> 
>      if (c->parent_phases.hold) {
> -        c->parent_phases.hold(obj);
> +        c->parent_phases.hold(obj, type);
>      }
> 
>      /* Quiescent bit reset to 1 */
> diff --git a/hw/intc/arm_gicv3_its_common.c b/hw/intc/arm_gicv3_its_common.c
> index 331d6b93cc1..0b97362cd21 100644
> --- a/hw/intc/arm_gicv3_its_common.c
> +++ b/hw/intc/arm_gicv3_its_common.c
> @@ -123,7 +123,7 @@ void gicv3_its_init_mmio(GICv3ITSState *s, const 
> MemoryRegionOps *ops,
>      msi_nonbroken = true;
>  }
> 
> -static void gicv3_its_common_reset_hold(Object *obj)
> +static void gicv3_its_common_reset_hold(Object *obj, ResetType type)
>  {
>      GICv3ITSState *s = ARM_GICV3_ITS_COMMON(obj);
> 
> diff --git a/hw/intc/arm_gicv3_its_kvm.c b/hw/intc/arm_gicv3_its_kvm.c
> index 3befc960db2..35539c099fc 100644
> --- a/hw/intc/arm_gicv3_its_kvm.c
> +++ b/hw/intc/arm_gicv3_its_kvm.c
> @@ -197,14 +197,14 @@ static void kvm_arm_its_post_load(GICv3ITSState *s)
>                        GITS_CTLR, &s->ctlr, true, &error_abort);
>  }
> 
> -static void kvm_arm_its_reset_hold(Object *obj)
> +static void kvm_arm_its_reset_hold(Object *obj, ResetType type)
>  {
>      GICv3ITSState *s = ARM_GICV3_ITS_COMMON(obj);
>      KVMARMITSClass *c = KVM_ARM_ITS_GET_CLASS(s);
>      int i;
> 
>      if (c->parent_phases.hold) {
> -        c->parent_phases.hold(obj);
> +        c->parent_phases.hold(obj, type);
>      }
> 
>      if (kvm_device_check_attr(s->dev_fd, KVM_DEV_ARM_VGIC_GRP_CTRL,
> diff --git a/hw/intc/arm_gicv3_kvm.c b/hw/intc/arm_gicv3_kvm.c
> index 77eb37e1317..dbdd10be493 100644
> --- a/hw/intc/arm_gicv3_kvm.c
> +++ b/hw/intc/arm_gicv3_kvm.c
> @@ -703,7 +703,7 @@ static void arm_gicv3_icc_reset(CPUARMState *env, const 
> ARMCPRegInfo *ri)
>      c->icc_ctlr_el1[GICV3_S] = c->icc_ctlr_el1[GICV3_NS];
>  }
> 
> -static void kvm_arm_gicv3_reset_hold(Object *obj)
> +static void kvm_arm_gicv3_reset_hold(Object *obj, ResetType type)
>  {
>      GICv3State *s = ARM_GICV3_COMMON(obj);
>      KVMARMGICv3Class *kgc = KVM_ARM_GICV3_GET_CLASS(s);
> @@ -711,7 +711,7 @@ static void kvm_arm_gicv3_reset_hold(Object *obj)
>      DPRINTF("Reset\n");
> 
>      if (kgc->parent_phases.hold) {
> -        kgc->parent_phases.hold(obj);
> +        kgc->parent_phases.hold(obj, type);
>      }
> 
>      if (s->migration_blocker) {
> diff --git a/hw/intc/xics.c b/hw/intc/xics.c
> index 700abfa7a62..9b3b7abaea2 100644
> --- a/hw/intc/xics.c
> +++ b/hw/intc/xics.c
> @@ -579,7 +579,7 @@ static void ics_reset_irq(ICSIRQState *irq)
>      irq->saved_priority = 0xff;
>  }
> 
> -static void ics_reset_hold(Object *obj)
> +static void ics_reset_hold(Object *obj, ResetType type)
>  {
>      ICSState *ics = ICS(obj);
>      g_autofree uint8_t *flags = g_malloc(ics->nr_irqs);
> diff --git a/hw/m68k/q800-glue.c b/hw/m68k/q800-glue.c
> index b5a7713863f..e2ae7c32011 100644
> --- a/hw/m68k/q800-glue.c
> +++ b/hw/m68k/q800-glue.c
> @@ -175,7 +175,7 @@ static void glue_nmi_release(void *opaque)
>      GLUE_set_irq(s, GLUE_IRQ_IN_NMI, 0);
>  }
> 
> -static void glue_reset_hold(Object *obj)
> +static void glue_reset_hold(Object *obj, ResetType type)
>  {
>      GLUEState *s = GLUE(obj);
> 
> diff --git a/hw/misc/djmemc.c b/hw/misc/djmemc.c
> index 9b69656c3a8..96d5efb5e3a 100644
> --- a/hw/misc/djmemc.c
> +++ b/hw/misc/djmemc.c
> @@ -96,7 +96,7 @@ static void djmemc_init(Object *obj)
>      sysbus_init_mmio(sbd, &s->mem_regs);
>  }
> 
> -static void djmemc_reset_hold(Object *obj)
> +static void djmemc_reset_hold(Object *obj, ResetType type)
>  {
>      DJMEMCState *s = DJMEMC(obj);
> 
> diff --git a/hw/misc/iosb.c b/hw/misc/iosb.c
> index e20305e8013..31927eaedb4 100644
> --- a/hw/misc/iosb.c
> +++ b/hw/misc/iosb.c
> @@ -81,7 +81,7 @@ static const MemoryRegionOps iosb_mmio_ops = {
>      .endianness = DEVICE_BIG_ENDIAN,
>  };
> 
> -static void iosb_reset_hold(Object *obj)
> +static void iosb_reset_hold(Object *obj, ResetType type)
>  {
>      IOSBState *s = IOSB(obj);
> 
> diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
> index db6142b5f41..652395b84fc 100644
> --- a/hw/misc/mac_via.c
> +++ b/hw/misc/mac_via.c
> @@ -1203,7 +1203,7 @@ static int via1_post_load(void *opaque, int version_id)
>  }
> 
>  /* VIA 1 */
> -static void mos6522_q800_via1_reset_hold(Object *obj)
> +static void mos6522_q800_via1_reset_hold(Object *obj, ResetType type)
>  {
>      MOS6522Q800VIA1State *v1s = MOS6522_Q800_VIA1(obj);
>      MOS6522State *ms = MOS6522(v1s);
> @@ -1211,7 +1211,7 @@ static void mos6522_q800_via1_reset_hold(Object *obj)
>      ADBBusState *adb_bus = &v1s->adb_bus;
> 
>      if (mdc->parent_phases.hold) {
> -        mdc->parent_phases.hold(obj);
> +        mdc->parent_phases.hold(obj, type);
>      }
> 
>      ms->timers[0].frequency = VIA_TIMER_FREQ;
> @@ -1359,13 +1359,13 @@ static void 
> mos6522_q800_via2_portB_write(MOS6522State *s)
>      }
>  }
> 
> -static void mos6522_q800_via2_reset_hold(Object *obj)
> +static void mos6522_q800_via2_reset_hold(Object *obj, ResetType type)
>  {
>      MOS6522State *ms = MOS6522(obj);
>      MOS6522DeviceClass *mdc = MOS6522_GET_CLASS(ms);
> 
>      if (mdc->parent_phases.hold) {
> -        mdc->parent_phases.hold(obj);
> +        mdc->parent_phases.hold(obj, type);
>      }
> 
>      ms->timers[0].frequency = VIA_TIMER_FREQ;
> diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c
> index 41934e2cf8e..beab0ffb13f 100644
> --- a/hw/misc/macio/cuda.c
> +++ b/hw/misc/macio/cuda.c
> @@ -586,13 +586,13 @@ static void mos6522_cuda_portB_write(MOS6522State *s)
>      cuda_update(cs);
>  }
> 
> -static void mos6522_cuda_reset_hold(Object *obj)
> +static void mos6522_cuda_reset_hold(Object *obj, ResetType type)
>  {
>      MOS6522State *ms = MOS6522(obj);
>      MOS6522DeviceClass *mdc = MOS6522_GET_CLASS(ms);
> 
>      if (mdc->parent_phases.hold) {
> -        mdc->parent_phases.hold(obj);
> +        mdc->parent_phases.hold(obj, type);
>      }
> 
>      ms->timers[0].frequency = CUDA_TIMER_FREQ;
> diff --git a/hw/misc/macio/pmu.c b/hw/misc/macio/pmu.c
> index e40c51bf529..238da58eade 100644
> --- a/hw/misc/macio/pmu.c
> +++ b/hw/misc/macio/pmu.c
> @@ -792,7 +792,7 @@ static void mos6522_pmu_portB_write(MOS6522State *s)
>      pmu_update(ps);
>  }
> 
> -static void mos6522_pmu_reset_hold(Object *obj)
> +static void mos6522_pmu_reset_hold(Object *obj, ResetType type)
>  {
>      MOS6522State *ms = MOS6522(obj);
>      MOS6522PMUState *mps = container_of(ms, MOS6522PMUState, parent_obj);
> @@ -800,7 +800,7 @@ static void mos6522_pmu_reset_hold(Object *obj)
>      MOS6522DeviceClass *mdc = MOS6522_GET_CLASS(ms);
> 
>      if (mdc->parent_phases.hold) {
> -        mdc->parent_phases.hold(obj);
> +        mdc->parent_phases.hold(obj, type);
>      }
> 
>      ms->timers[0].frequency = VIA_TIMER_FREQ;
> diff --git a/hw/misc/mos6522.c b/hw/misc/mos6522.c
> index e3fe87c20ca..515f62e687d 100644
> --- a/hw/misc/mos6522.c
> +++ b/hw/misc/mos6522.c
> @@ -642,7 +642,7 @@ const VMStateDescription vmstate_mos6522 = {
>      }
>  };
> 
> -static void mos6522_reset_hold(Object *obj)
> +static void mos6522_reset_hold(Object *obj, ResetType type)
>  {
>      MOS6522State *s = MOS6522(obj);
> 
> diff --git a/hw/misc/npcm7xx_mft.c b/hw/misc/npcm7xx_mft.c
> index 9a848584e18..9fcc69fe5c5 100644
> --- a/hw/misc/npcm7xx_mft.c
> +++ b/hw/misc/npcm7xx_mft.c
> @@ -467,7 +467,7 @@ static void npcm7xx_mft_enter_reset(Object *obj, 
> ResetType type)
>      npcm7xx_mft_reset(s);
>  }
> 
> -static void npcm7xx_mft_hold_reset(Object *obj)
> +static void npcm7xx_mft_hold_reset(Object *obj, ResetType type)
>  {
>      NPCM7xxMFTState *s = NPCM7XX_MFT(obj);
> 
> diff --git a/hw/misc/npcm7xx_pwm.c b/hw/misc/npcm7xx_pwm.c
> index fca2dd2e5af..f7f77e30a22 100644
> --- a/hw/misc/npcm7xx_pwm.c
> +++ b/hw/misc/npcm7xx_pwm.c
> @@ -468,7 +468,7 @@ static void npcm7xx_pwm_enter_reset(Object *obj, 
> ResetType type)
>      s->piir = 0x00000000;
>  }
> 
> -static void npcm7xx_pwm_hold_reset(Object *obj)
> +static void npcm7xx_pwm_hold_reset(Object *obj, ResetType type)
>  {
>      NPCM7xxPWMState *s = NPCM7XX_PWM(obj);
>      int i;
> diff --git a/hw/misc/stm32l4x5_exti.c b/hw/misc/stm32l4x5_exti.c
> index 9fd859160d4..a090dbd366f 100644
> --- a/hw/misc/stm32l4x5_exti.c
> +++ b/hw/misc/stm32l4x5_exti.c
> @@ -77,7 +77,7 @@ static unsigned configurable_mask(unsigned bank)
>       return valid_mask(bank) & ~exti_romask[bank];
>  }
> 
> -static void stm32l4x5_exti_reset_hold(Object *obj)
> +static void stm32l4x5_exti_reset_hold(Object *obj, ResetType type)
>  {
>      Stm32l4x5ExtiState *s = STM32L4X5_EXTI(obj);
> 
> diff --git a/hw/misc/stm32l4x5_rcc.c b/hw/misc/stm32l4x5_rcc.c
> index ed2dbd9dc3f..417bd5e85f6 100644
> --- a/hw/misc/stm32l4x5_rcc.c
> +++ b/hw/misc/stm32l4x5_rcc.c
> @@ -113,13 +113,13 @@ static void clock_mux_reset_enter(Object *obj, 
> ResetType type)
>      set_clock_mux_init_info(s, s->id);
>  }
> 
> -static void clock_mux_reset_hold(Object *obj)
> +static void clock_mux_reset_hold(Object *obj, ResetType type)
>  {
>      RccClockMuxState *s = RCC_CLOCK_MUX(obj);
>      clock_mux_update(s, true);
>  }
> 
> -static void clock_mux_reset_exit(Object *obj)
> +static void clock_mux_reset_exit(Object *obj, ResetType type)
>  {
>      RccClockMuxState *s = RCC_CLOCK_MUX(obj);
>      clock_mux_update(s, false);
> @@ -263,13 +263,13 @@ static void pll_reset_enter(Object *obj, ResetType type)
>      set_pll_init_info(s, s->id);
>  }
> 
> -static void pll_reset_hold(Object *obj)
> +static void pll_reset_hold(Object *obj, ResetType type)
>  {
>      RccPllState *s = RCC_PLL(obj);
>      pll_update(s, true);
>  }
> 
> -static void pll_reset_exit(Object *obj)
> +static void pll_reset_exit(Object *obj, ResetType type)
>  {
>      RccPllState *s = RCC_PLL(obj);
>      pll_update(s, false);
> @@ -907,7 +907,7 @@ static void rcc_update_csr(Stm32l4x5RccState *s)
>      rcc_update_irq(s);
>  }
> 
> -static void stm32l4x5_rcc_reset_hold(Object *obj)
> +static void stm32l4x5_rcc_reset_hold(Object *obj, ResetType type)
>  {
>      Stm32l4x5RccState *s = STM32L4X5_RCC(obj);
>      s->cr = 0x00000063;
> diff --git a/hw/misc/stm32l4x5_syscfg.c b/hw/misc/stm32l4x5_syscfg.c
> index 3dafc00b49d..a5a1ce26804 100644
> --- a/hw/misc/stm32l4x5_syscfg.c
> +++ b/hw/misc/stm32l4x5_syscfg.c
> @@ -65,7 +65,7 @@
> 
>  #define NUM_LINES_PER_EXTICR_REG 4
> 
> -static void stm32l4x5_syscfg_hold_reset(Object *obj)
> +static void stm32l4x5_syscfg_hold_reset(Object *obj, ResetType type)
>  {
>      Stm32l4x5SyscfgState *s = STM32L4X5_SYSCFG(obj);
> 
> diff --git a/hw/misc/xlnx-versal-cframe-reg.c 
> b/hw/misc/xlnx-versal-cframe-reg.c
> index a6ab287b019..3fc838bd54b 100644
> --- a/hw/misc/xlnx-versal-cframe-reg.c
> +++ b/hw/misc/xlnx-versal-cframe-reg.c
> @@ -542,7 +542,7 @@ static void cframe_reg_reset_enter(Object *obj, ResetType 
> type)
>      }
>  }
> 
> -static void cframe_reg_reset_hold(Object *obj)
> +static void cframe_reg_reset_hold(Object *obj, ResetType type)
>  {
>      XlnxVersalCFrameReg *s = XLNX_VERSAL_CFRAME_REG(obj);
> 
> diff --git a/hw/misc/xlnx-versal-crl.c b/hw/misc/xlnx-versal-crl.c
> index 1f1762ef163..f143900d5b4 100644
> --- a/hw/misc/xlnx-versal-crl.c
> +++ b/hw/misc/xlnx-versal-crl.c
> @@ -311,7 +311,7 @@ static void crl_reset_enter(Object *obj, ResetType type)
>      }
>  }
> 
> -static void crl_reset_hold(Object *obj)
> +static void crl_reset_hold(Object *obj, ResetType type)
>  {
>      XlnxVersalCRL *s = XLNX_VERSAL_CRL(obj);
> 
> diff --git a/hw/misc/xlnx-versal-pmc-iou-slcr.c 
> b/hw/misc/xlnx-versal-pmc-iou-slcr.c
> index 60e13a78ab8..e469c04d763 100644
> --- a/hw/misc/xlnx-versal-pmc-iou-slcr.c
> +++ b/hw/misc/xlnx-versal-pmc-iou-slcr.c
> @@ -1350,7 +1350,7 @@ static void xlnx_versal_pmc_iou_slcr_reset_init(Object 
> *obj, ResetType type)
>      }
>  }
> 
> -static void xlnx_versal_pmc_iou_slcr_reset_hold(Object *obj)
> +static void xlnx_versal_pmc_iou_slcr_reset_hold(Object *obj, ResetType type)
>  {
>      XlnxVersalPmcIouSlcr *s = XILINX_VERSAL_PMC_IOU_SLCR(obj);
> 
> diff --git a/hw/misc/xlnx-versal-trng.c b/hw/misc/xlnx-versal-trng.c
> index 6495188dc74..51eb7600414 100644
> --- a/hw/misc/xlnx-versal-trng.c
> +++ b/hw/misc/xlnx-versal-trng.c
> @@ -632,7 +632,7 @@ static void trng_unrealize(DeviceState *dev)
>      s->prng = NULL;
>  }
> 
> -static void trng_reset_hold(Object *obj)
> +static void trng_reset_hold(Object *obj, ResetType type)
>  {
>      trng_reset(XLNX_VERSAL_TRNG(obj));
>  }
> diff --git a/hw/misc/xlnx-versal-xramc.c b/hw/misc/xlnx-versal-xramc.c
> index a5f78c190eb..ad839ce7e9f 100644
> --- a/hw/misc/xlnx-versal-xramc.c
> +++ b/hw/misc/xlnx-versal-xramc.c
> @@ -137,7 +137,7 @@ static void xram_ctrl_reset_enter(Object *obj, ResetType 
> type)
>      ARRAY_FIELD_DP32(s->regs, XRAM_IMP, SIZE, s->cfg.encoded_size);
>  }
> 
> -static void xram_ctrl_reset_hold(Object *obj)
> +static void xram_ctrl_reset_hold(Object *obj, ResetType type)
>  {
>      XlnxXramCtrl *s = XLNX_XRAM_CTRL(obj);
> 
> diff --git a/hw/misc/xlnx-zynqmp-apu-ctrl.c b/hw/misc/xlnx-zynqmp-apu-ctrl.c
> index 1d441b41dfe..87e4a140679 100644
> --- a/hw/misc/xlnx-zynqmp-apu-ctrl.c
> +++ b/hw/misc/xlnx-zynqmp-apu-ctrl.c
> @@ -150,7 +150,7 @@ static void zynqmp_apu_reset_enter(Object *obj, ResetType 
> type)
>      s->cpu_in_wfi = 0;
>  }
> 
> -static void zynqmp_apu_reset_hold(Object *obj)
> +static void zynqmp_apu_reset_hold(Object *obj, ResetType type)
>  {
>      XlnxZynqMPAPUCtrl *s = XLNX_ZYNQMP_APU_CTRL(obj);
> 
> diff --git a/hw/misc/xlnx-zynqmp-crf.c b/hw/misc/xlnx-zynqmp-crf.c
> index a83efb44e31..e5aba56f691 100644
> --- a/hw/misc/xlnx-zynqmp-crf.c
> +++ b/hw/misc/xlnx-zynqmp-crf.c
> @@ -191,7 +191,7 @@ static void crf_reset_enter(Object *obj, ResetType type)
>      }
>  }
> 
> -static void crf_reset_hold(Object *obj)
> +static void crf_reset_hold(Object *obj, ResetType type)
>  {
>      XlnxZynqMPCRF *s = XLNX_ZYNQMP_CRF(obj);
>      ir_update_irq(s);
> diff --git a/hw/misc/zynq_slcr.c b/hw/misc/zynq_slcr.c
> index d2ac2e77f26..3412ff099ea 100644
> --- a/hw/misc/zynq_slcr.c
> +++ b/hw/misc/zynq_slcr.c
> @@ -416,7 +416,7 @@ static void zynq_slcr_reset_init(Object *obj, ResetType 
> type)
>      s->regs[R_DDRIOB + 12] = 0x00000021;
>  }
> 
> -static void zynq_slcr_reset_hold(Object *obj)
> +static void zynq_slcr_reset_hold(Object *obj, ResetType type)
>  {
>      ZynqSLCRState *s = ZYNQ_SLCR(obj);
> 
> @@ -425,7 +425,7 @@ static void zynq_slcr_reset_hold(Object *obj)
>      zynq_slcr_propagate_clocks(s);
>  }
> 
> -static void zynq_slcr_reset_exit(Object *obj)
> +static void zynq_slcr_reset_exit(Object *obj, ResetType type)
>  {
>      ZynqSLCRState *s = ZYNQ_SLCR(obj);
> 
> diff --git a/hw/net/can/xlnx-zynqmp-can.c b/hw/net/can/xlnx-zynqmp-can.c
> index ca0ce4e8bbf..58f1432bb35 100644
> --- a/hw/net/can/xlnx-zynqmp-can.c
> +++ b/hw/net/can/xlnx-zynqmp-can.c
> @@ -1006,7 +1006,7 @@ static void xlnx_zynqmp_can_reset_init(Object *obj, 
> ResetType type)
>      ptimer_transaction_commit(s->can_timer);
>  }
> 
> -static void xlnx_zynqmp_can_reset_hold(Object *obj)
> +static void xlnx_zynqmp_can_reset_hold(Object *obj, ResetType type)
>  {
>      XlnxZynqMPCANState *s = XLNX_ZYNQMP_CAN(obj);
>      unsigned int i;
> diff --git a/hw/net/e1000.c b/hw/net/e1000.c
> index 43f3a4a7011..5012b964640 100644
> --- a/hw/net/e1000.c
> +++ b/hw/net/e1000.c
> @@ -373,7 +373,7 @@ static bool e1000_vet_init_need(void *opaque)
>      return chkflag(VET);
>  }
> 
> -static void e1000_reset_hold(Object *obj)
> +static void e1000_reset_hold(Object *obj, ResetType type)
>  {
>      E1000State *d = E1000(obj);
>      E1000BaseClass *edc = E1000_GET_CLASS(d);
> diff --git a/hw/net/e1000e.c b/hw/net/e1000e.c
> index 7c6f6029518..edc101eaf68 100644
> --- a/hw/net/e1000e.c
> +++ b/hw/net/e1000e.c
> @@ -513,7 +513,7 @@ static void e1000e_pci_uninit(PCIDevice *pci_dev)
>      msi_uninit(pci_dev);
>  }
> 
> -static void e1000e_qdev_reset_hold(Object *obj)
> +static void e1000e_qdev_reset_hold(Object *obj, ResetType type)
>  {
>      E1000EState *s = E1000E(obj);
> 
> diff --git a/hw/net/igb.c b/hw/net/igb.c
> index 9b37523d6df..1ef6170465f 100644
> --- a/hw/net/igb.c
> +++ b/hw/net/igb.c
> @@ -486,7 +486,7 @@ static void igb_pci_uninit(PCIDevice *pci_dev)
>      msi_uninit(pci_dev);
>  }
> 
> -static void igb_qdev_reset_hold(Object *obj)
> +static void igb_qdev_reset_hold(Object *obj, ResetType type)
>  {
>      IGBState *s = IGB(obj);
> 
> diff --git a/hw/net/igbvf.c b/hw/net/igbvf.c
> index 94a4e885f20..21a97d4d61d 100644
> --- a/hw/net/igbvf.c
> +++ b/hw/net/igbvf.c
> @@ -282,7 +282,7 @@ static void igbvf_pci_realize(PCIDevice *dev, Error 
> **errp)
>      pcie_ari_init(dev, 0x150);
>  }
> 
> -static void igbvf_qdev_reset_hold(Object *obj)
> +static void igbvf_qdev_reset_hold(Object *obj, ResetType type)
>  {
>      PCIDevice *vf = PCI_DEVICE(obj);
> 
> diff --git a/hw/nvram/xlnx-bbram.c b/hw/nvram/xlnx-bbram.c
> index 0a71a005c69..09575a77d77 100644
> --- a/hw/nvram/xlnx-bbram.c
> +++ b/hw/nvram/xlnx-bbram.c
> @@ -417,7 +417,7 @@ static RegisterAccessInfo bbram_ctrl_regs_info[] = {
>      }
>  };
> 
> -static void bbram_ctrl_reset_hold(Object *obj)
> +static void bbram_ctrl_reset_hold(Object *obj, ResetType type)
>  {
>      XlnxBBRam *s = XLNX_BBRAM(obj);
>      unsigned int i;
> diff --git a/hw/nvram/xlnx-versal-efuse-ctrl.c 
> b/hw/nvram/xlnx-versal-efuse-ctrl.c
> index e4b9e11a3dd..def6fe3302b 100644
> --- a/hw/nvram/xlnx-versal-efuse-ctrl.c
> +++ b/hw/nvram/xlnx-versal-efuse-ctrl.c
> @@ -658,7 +658,7 @@ static void efuse_ctrl_register_reset(RegisterInfo *reg)
>      register_reset(reg);
>  }
> 
> -static void efuse_ctrl_reset_hold(Object *obj)
> +static void efuse_ctrl_reset_hold(Object *obj, ResetType type)
>  {
>      XlnxVersalEFuseCtrl *s = XLNX_VERSAL_EFUSE_CTRL(obj);
>      unsigned int i;
> diff --git a/hw/nvram/xlnx-zynqmp-efuse.c b/hw/nvram/xlnx-zynqmp-efuse.c
> index ec98456e5d1..2d465f0fc6a 100644
> --- a/hw/nvram/xlnx-zynqmp-efuse.c
> +++ b/hw/nvram/xlnx-zynqmp-efuse.c
> @@ -770,7 +770,7 @@ static void zynqmp_efuse_register_reset(RegisterInfo *reg)
>      register_reset(reg);
>  }
> 
> -static void zynqmp_efuse_reset_hold(Object *obj)
> +static void zynqmp_efuse_reset_hold(Object *obj, ResetType type)
>  {
>      XlnxZynqMPEFuse *s = XLNX_ZYNQMP_EFUSE(obj);
>      unsigned int i;
> diff --git a/hw/pci-bridge/cxl_root_port.c b/hw/pci-bridge/cxl_root_port.c
> index 8a30da602cc..2dd10239bd2 100644
> --- a/hw/pci-bridge/cxl_root_port.c
> +++ b/hw/pci-bridge/cxl_root_port.c
> @@ -186,13 +186,13 @@ static void cxl_rp_realize(DeviceState *dev, Error 
> **errp)
>                       component_bar);
>  }
> 
> -static void cxl_rp_reset_hold(Object *obj)
> +static void cxl_rp_reset_hold(Object *obj, ResetType type)
>  {
>      PCIERootPortClass *rpc = PCIE_ROOT_PORT_GET_CLASS(obj);
>      CXLRootPort *crp = CXL_ROOT_PORT(obj);
> 
>      if (rpc->parent_phases.hold) {
> -        rpc->parent_phases.hold(obj);
> +        rpc->parent_phases.hold(obj, type);
>      }
> 
>      latch_registers(crp);
> diff --git a/hw/pci-bridge/pcie_root_port.c b/hw/pci-bridge/pcie_root_port.c
> index efd96bf1741..09a34786bc6 100644
> --- a/hw/pci-bridge/pcie_root_port.c
> +++ b/hw/pci-bridge/pcie_root_port.c
> @@ -43,7 +43,7 @@ static void rp_write_config(PCIDevice *d, uint32_t address,
>      pcie_aer_root_write_config(d, address, val, len, root_cmd);
>  }
> 
> -static void rp_reset_hold(Object *obj)
> +static void rp_reset_hold(Object *obj, ResetType type)
>  {
>      PCIDevice *d = PCI_DEVICE(obj);
>      DeviceState *qdev = DEVICE(obj);
> diff --git a/hw/pci-host/bonito.c b/hw/pci-host/bonito.c
> index 1f0c4353484..1516d0074dd 100644
> --- a/hw/pci-host/bonito.c
> +++ b/hw/pci-host/bonito.c
> @@ -590,7 +590,7 @@ static int pci_bonito_map_irq(PCIDevice *pci_dev, int 
> irq_num)
>      }
>  }
> 
> -static void bonito_reset_hold(Object *obj)
> +static void bonito_reset_hold(Object *obj, ResetType type)
>  {
>      PCIBonitoState *s = PCI_BONITO(obj);
>      uint32_t val = 0;
> diff --git a/hw/pci-host/pnv_phb.c b/hw/pci-host/pnv_phb.c
> index 157c00782ce..d4c118d4436 100644
> --- a/hw/pci-host/pnv_phb.c
> +++ b/hw/pci-host/pnv_phb.c
> @@ -208,7 +208,7 @@ static void pnv_phb_class_init(ObjectClass *klass, void 
> *data)
>      dc->user_creatable = true;
>  }
> 
> -static void pnv_phb_root_port_reset_hold(Object *obj)
> +static void pnv_phb_root_port_reset_hold(Object *obj, ResetType type)
>  {
>      PCIERootPortClass *rpc = PCIE_ROOT_PORT_GET_CLASS(obj);
>      PnvPHBRootPort *phb_rp = PNV_PHB_ROOT_PORT(obj);
> @@ -216,7 +216,7 @@ static void pnv_phb_root_port_reset_hold(Object *obj)
>      uint8_t *conf = d->config;
> 
>      if (rpc->parent_phases.hold) {
> -        rpc->parent_phases.hold(obj);
> +        rpc->parent_phases.hold(obj, type);
>      }
> 
>      if (phb_rp->version == 3) {
> diff --git a/hw/pci-host/pnv_phb3_msi.c b/hw/pci-host/pnv_phb3_msi.c
> index dc8d8637f26..a6d827f903f 100644
> --- a/hw/pci-host/pnv_phb3_msi.c
> +++ b/hw/pci-host/pnv_phb3_msi.c
> @@ -228,13 +228,13 @@ static void phb3_msi_resend(ICSState *ics)
>      }
>  }
> 
> -static void phb3_msi_reset_hold(Object *obj)
> +static void phb3_msi_reset_hold(Object *obj, ResetType type)
>  {
>      Phb3MsiState *msi = PHB3_MSI(obj);
>      ICSStateClass *icsc = ICS_GET_CLASS(obj);
> 
>      if (icsc->parent_phases.hold) {
> -        icsc->parent_phases.hold(obj);
> +        icsc->parent_phases.hold(obj, type);
>      }
> 
>      memset(msi->rba, 0, sizeof(msi->rba));
> diff --git a/hw/pci/pci.c b/hw/pci/pci.c
> index e7a39cb203a..324c1302d25 100644
> --- a/hw/pci/pci.c
> +++ b/hw/pci/pci.c
> @@ -64,7 +64,7 @@ bool pci_available = true;
> 
>  static char *pcibus_get_dev_path(DeviceState *dev);
>  static char *pcibus_get_fw_dev_path(DeviceState *dev);
> -static void pcibus_reset_hold(Object *obj);
> +static void pcibus_reset_hold(Object *obj, ResetType type);
>  static bool pcie_has_upstream_port(PCIDevice *dev);
> 
>  static Property pci_props[] = {
> @@ -427,7 +427,7 @@ void pci_device_reset(PCIDevice *dev)
>   * Called via bus_cold_reset on RST# assert, after the devices
>   * have been reset device_cold_reset-ed already.
>   */
> -static void pcibus_reset_hold(Object *obj)
> +static void pcibus_reset_hold(Object *obj, ResetType type)
>  {
>      PCIBus *bus = PCI_BUS(obj);
>      int i;
> diff --git a/hw/rtc/mc146818rtc.c b/hw/rtc/mc146818rtc.c
> index f4c18692325..3379f92748b 100644
> --- a/hw/rtc/mc146818rtc.c
> +++ b/hw/rtc/mc146818rtc.c
> @@ -998,7 +998,7 @@ static void rtc_reset_enter(Object *obj, ResetType type)
>      }
>  }
> 
> -static void rtc_reset_hold(Object *obj)
> +static void rtc_reset_hold(Object *obj, ResetType type)
>  {
>      MC146818RtcState *s = MC146818_RTC(obj);
> 
> diff --git a/hw/s390x/css-bridge.c b/hw/s390x/css-bridge.c
> index 34639f21435..8657ff7bf48 100644
> --- a/hw/s390x/css-bridge.c
> +++ b/hw/s390x/css-bridge.c
> @@ -56,7 +56,7 @@ static void ccw_device_unplug(HotplugHandler *hotplug_dev,
>      qdev_unrealize(dev);
>  }
> 
> -static void virtual_css_bus_reset_hold(Object *obj)
> +static void virtual_css_bus_reset_hold(Object *obj, ResetType type)
>  {
>      /* This should actually be modelled via the generic css */
>      css_reset();
> diff --git a/hw/sensor/adm1266.c b/hw/sensor/adm1266.c
> index 5454b73a639..25b87a72961 100644
> --- a/hw/sensor/adm1266.c
> +++ b/hw/sensor/adm1266.c
> @@ -76,7 +76,7 @@ static const uint8_t adm1266_ic_device_id[] = {0x03, 0x41, 
> 0x12, 0x66};
>  static const uint8_t adm1266_ic_device_rev[] = {0x08, 0x01, 0x08, 0x07, 0x0,
>                                                  0x0, 0x07, 0x41, 0x30};
> 
> -static void adm1266_exit_reset(Object *obj)
> +static void adm1266_exit_reset(Object *obj, ResetType type)
>  {
>      ADM1266State *s = ADM1266(obj);
>      PMBusDevice *pmdev = PMBUS_DEVICE(obj);
> diff --git a/hw/sensor/adm1272.c b/hw/sensor/adm1272.c
> index a19557ec9ea..3fc1e5d0ad9 100644
> --- a/hw/sensor/adm1272.c
> +++ b/hw/sensor/adm1272.c
> @@ -185,7 +185,7 @@ static uint32_t adm1272_direct_to_watts(uint16_t value)
>      return pmbus_direct_mode2data(c, value);
>  }
> 
> -static void adm1272_exit_reset(Object *obj)
> +static void adm1272_exit_reset(Object *obj, ResetType type)
>  {
>      ADM1272State *s = ADM1272(obj);
>      PMBusDevice *pmdev = PMBUS_DEVICE(obj);
> diff --git a/hw/sensor/isl_pmbus_vr.c b/hw/sensor/isl_pmbus_vr.c
> index e51269f6b83..304a66ea8b0 100644
> --- a/hw/sensor/isl_pmbus_vr.c
> +++ b/hw/sensor/isl_pmbus_vr.c
> @@ -63,7 +63,7 @@ static void isl_pmbus_vr_set(Object *obj, Visitor *v, const 
> char *name,
>      pmbus_check_limits(pmdev);
>  }
> 
> -static void isl_pmbus_vr_exit_reset(Object *obj)
> +static void isl_pmbus_vr_exit_reset(Object *obj, ResetType type)
>  {
>      PMBusDevice *pmdev = PMBUS_DEVICE(obj);
> 
> @@ -102,11 +102,11 @@ static void isl_pmbus_vr_exit_reset(Object *obj)
>  }
> 
>  /* The raa228000 uses different direct mode coefficients from most isl 
> devices */
> -static void raa228000_exit_reset(Object *obj)
> +static void raa228000_exit_reset(Object *obj, ResetType type)
>  {
>      PMBusDevice *pmdev = PMBUS_DEVICE(obj);
> 
> -    isl_pmbus_vr_exit_reset(obj);
> +    isl_pmbus_vr_exit_reset(obj, type);
> 
>      pmdev->pages[0].read_iout = 0;
>      pmdev->pages[0].read_pout = 0;
> @@ -119,13 +119,13 @@ static void raa228000_exit_reset(Object *obj)
>      pmdev->pages[0].read_temperature_3 = 0;
>  }
> 
> -static void isl69259_exit_reset(Object *obj)
> +static void isl69259_exit_reset(Object *obj, ResetType type)
>  {
>      ISLState *s = ISL69260(obj);
>      static const uint8_t ic_device_id[] = {0x04, 0x00, 0x81, 0xD2, 0x49, 
> 0x3c};
>      g_assert(sizeof(ic_device_id) <= sizeof(s->ic_device_id));
> 
> -    isl_pmbus_vr_exit_reset(obj);
> +    isl_pmbus_vr_exit_reset(obj, type);
> 
>      s->ic_device_id_len = sizeof(ic_device_id);
>      memcpy(s->ic_device_id, ic_device_id, sizeof(ic_device_id));
> diff --git a/hw/sensor/max31785.c b/hw/sensor/max31785.c
> index 916ed4d457b..3577a7c2180 100644
> --- a/hw/sensor/max31785.c
> +++ b/hw/sensor/max31785.c
> @@ -444,7 +444,7 @@ static int max31785_write_data(PMBusDevice *pmdev, const 
> uint8_t *buf,
>      return 0;
>  }
> 
> -static void max31785_exit_reset(Object *obj)
> +static void max31785_exit_reset(Object *obj, ResetType type)
>  {
>      PMBusDevice *pmdev = PMBUS_DEVICE(obj);
>      MAX31785State *s = MAX31785(obj);
> diff --git a/hw/sensor/max34451.c b/hw/sensor/max34451.c
> index 031ae53f594..93b53f3db2f 100644
> --- a/hw/sensor/max34451.c
> +++ b/hw/sensor/max34451.c
> @@ -608,7 +608,7 @@ static inline void *memset_word(void *s, uint16_t c, 
> size_t n)
>      return s;
>  }
> 
> -static void max34451_exit_reset(Object *obj)
> +static void max34451_exit_reset(Object *obj, ResetType type)
>  {
>      PMBusDevice *pmdev = PMBUS_DEVICE(obj);
>      MAX34451State *s = MAX34451(obj);
> diff --git a/hw/ssi/npcm7xx_fiu.c b/hw/ssi/npcm7xx_fiu.c
> index 81dd972ee8c..119c38c4156 100644
> --- a/hw/ssi/npcm7xx_fiu.c
> +++ b/hw/ssi/npcm7xx_fiu.c
> @@ -483,7 +483,7 @@ static void npcm7xx_fiu_enter_reset(Object *obj, 
> ResetType type)
>      s->regs[NPCM7XX_FIU_CFG] = 0x0000000b;
>  }
> 
> -static void npcm7xx_fiu_hold_reset(Object *obj)
> +static void npcm7xx_fiu_hold_reset(Object *obj, ResetType type)
>  {
>      NPCM7xxFIUState *s = NPCM7XX_FIU(obj);
>      int i;
> diff --git a/hw/timer/etraxfs_timer.c b/hw/timer/etraxfs_timer.c
> index da7c946af52..dd6d96b0a10 100644
> --- a/hw/timer/etraxfs_timer.c
> +++ b/hw/timer/etraxfs_timer.c
> @@ -357,7 +357,7 @@ static void etraxfs_timer_reset_enter(Object *obj, 
> ResetType type)
>      t->rw_intr_mask = 0;
>  }
> 
> -static void etraxfs_timer_reset_hold(Object *obj)
> +static void etraxfs_timer_reset_hold(Object *obj, ResetType type)
>  {
>      ETRAXTimerState *t = ETRAX_TIMER(obj);
> 
> diff --git a/hw/timer/npcm7xx_timer.c b/hw/timer/npcm7xx_timer.c
> index 779c6049fab..c55ba022353 100644
> --- a/hw/timer/npcm7xx_timer.c
> +++ b/hw/timer/npcm7xx_timer.c
> @@ -592,7 +592,7 @@ static void npcm7xx_watchdog_timer_expired(void *opaque)
>      }
>  }
> 
> -static void npcm7xx_timer_hold_reset(Object *obj)
> +static void npcm7xx_timer_hold_reset(Object *obj, ResetType type)
>  {
>      NPCM7xxTimerCtrlState *s = NPCM7XX_TIMER(obj);
>      int i;
> diff --git a/hw/usb/hcd-dwc2.c b/hw/usb/hcd-dwc2.c
> index 222eef82a55..8cac9c0a062 100644
> --- a/hw/usb/hcd-dwc2.c
> +++ b/hw/usb/hcd-dwc2.c
> @@ -1305,7 +1305,7 @@ static void dwc2_reset_enter(Object *obj, ResetType 
> type)
>      }
>  }
> 
> -static void dwc2_reset_hold(Object *obj)
> +static void dwc2_reset_hold(Object *obj, ResetType type)
>  {
>      DWC2Class *c = DWC2_USB_GET_CLASS(obj);
>      DWC2State *s = DWC2_USB(obj);
> @@ -1313,13 +1313,13 @@ static void dwc2_reset_hold(Object *obj)
>      trace_usb_dwc2_reset_hold();
> 
>      if (c->parent_phases.hold) {
> -        c->parent_phases.hold(obj);
> +        c->parent_phases.hold(obj, type);
>      }
> 
>      dwc2_update_irq(s);
>  }
> 
> -static void dwc2_reset_exit(Object *obj)
> +static void dwc2_reset_exit(Object *obj, ResetType type)
>  {
>      DWC2Class *c = DWC2_USB_GET_CLASS(obj);
>      DWC2State *s = DWC2_USB(obj);
> @@ -1327,7 +1327,7 @@ static void dwc2_reset_exit(Object *obj)
>      trace_usb_dwc2_reset_exit();
> 
>      if (c->parent_phases.exit) {
> -        c->parent_phases.exit(obj);
> +        c->parent_phases.exit(obj, type);
>      }
> 
>      s->hprt0 = HPRT0_PWR;
> diff --git a/hw/usb/xlnx-versal-usb2-ctrl-regs.c 
> b/hw/usb/xlnx-versal-usb2-ctrl-regs.c
> index 6fc453817ea..66c793a6021 100644
> --- a/hw/usb/xlnx-versal-usb2-ctrl-regs.c
> +++ b/hw/usb/xlnx-versal-usb2-ctrl-regs.c
> @@ -153,7 +153,7 @@ static void usb2_ctrl_regs_reset_init(Object *obj, 
> ResetType type)
>      }
>  }
> 
> -static void usb2_ctrl_regs_reset_hold(Object *obj)
> +static void usb2_ctrl_regs_reset_hold(Object *obj, ResetType type)
>  {
>      VersalUsb2CtrlRegs *s = XILINX_VERSAL_USB2_CTRL_REGS(obj);
> 
> diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
> index cb6940fc0e9..f83b446e774 100644
> --- a/hw/virtio/virtio-pci.c
> +++ b/hw/virtio/virtio-pci.c
> @@ -2259,7 +2259,7 @@ static void virtio_pci_reset(DeviceState *qdev)
>      }
>  }
> 
> -static void virtio_pci_bus_reset_hold(Object *obj)
> +static void virtio_pci_bus_reset_hold(Object *obj, ResetType type)
>  {
>      PCIDevice *dev = PCI_DEVICE(obj);
>      DeviceState *qdev = DEVICE(obj);
> diff --git a/target/arm/cpu.c b/target/arm/cpu.c
> index ab8d007a86c..93379d8acc6 100644
> --- a/target/arm/cpu.c
> +++ b/target/arm/cpu.c
> @@ -212,7 +212,7 @@ static void cp_reg_check_reset(gpointer key, gpointer 
> value,  gpointer opaque)
>      assert(oldvalue == newvalue);
>  }
> 
> -static void arm_cpu_reset_hold(Object *obj)
> +static void arm_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      ARMCPU *cpu = ARM_CPU(cs);
> @@ -220,7 +220,7 @@ static void arm_cpu_reset_hold(Object *obj)
>      CPUARMState *env = &cpu->env;
> 
>      if (acc->parent_phases.hold) {
> -        acc->parent_phases.hold(obj);
> +        acc->parent_phases.hold(obj, type);
>      }
> 
>      memset(env, 0, offsetof(CPUARMState, end_reset_fields));
> diff --git a/target/avr/cpu.c b/target/avr/cpu.c
> index 45ee1b5f89e..71ce62a4c25 100644
> --- a/target/avr/cpu.c
> +++ b/target/avr/cpu.c
> @@ -66,7 +66,7 @@ static void avr_restore_state_to_opc(CPUState *cs,
>      cpu_env(cs)->pc_w = data[0];
>  }
> 
> -static void avr_cpu_reset_hold(Object *obj)
> +static void avr_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      AVRCPU *cpu = AVR_CPU(cs);
> @@ -74,7 +74,7 @@ static void avr_cpu_reset_hold(Object *obj)
>      CPUAVRState *env = &cpu->env;
> 
>      if (mcc->parent_phases.hold) {
> -        mcc->parent_phases.hold(obj);
> +        mcc->parent_phases.hold(obj, type);
>      }
> 
>      env->pc_w = 0;
> diff --git a/target/cris/cpu.c b/target/cris/cpu.c
> index eb4bddcb7e7..535ec39c730 100644
> --- a/target/cris/cpu.c
> +++ b/target/cris/cpu.c
> @@ -61,7 +61,7 @@ static int cris_cpu_mmu_index(CPUState *cs, bool ifetch)
>      return !!(cpu_env(cs)->pregs[PR_CCS] & U_FLAG);
>  }
> 
> -static void cris_cpu_reset_hold(Object *obj)
> +static void cris_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      CRISCPUClass *ccc = CRIS_CPU_GET_CLASS(obj);
> @@ -69,7 +69,7 @@ static void cris_cpu_reset_hold(Object *obj)
>      uint32_t vr;
> 
>      if (ccc->parent_phases.hold) {
> -        ccc->parent_phases.hold(obj);
> +        ccc->parent_phases.hold(obj, type);
>      }
> 
>      vr = env->pregs[PR_VR];
> diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c
> index 3a716b9be3c..a56bb4b075c 100644
> --- a/target/hexagon/cpu.c
> +++ b/target/hexagon/cpu.c
> @@ -273,14 +273,14 @@ static void hexagon_restore_state_to_opc(CPUState *cs,
>      cpu_env(cs)->gpr[HEX_REG_PC] = data[0];
>  }
> 
> -static void hexagon_cpu_reset_hold(Object *obj)
> +static void hexagon_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      HexagonCPUClass *mcc = HEXAGON_CPU_GET_CLASS(obj);
>      CPUHexagonState *env = cpu_env(cs);
> 
>      if (mcc->parent_phases.hold) {
> -        mcc->parent_phases.hold(obj);
> +        mcc->parent_phases.hold(obj, type);
>      }
> 
>      set_default_nan_mode(1, &env->fp_status);
> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> index 33760a2ee16..dc4e6457d2a 100644
> --- a/target/i386/cpu.c
> +++ b/target/i386/cpu.c
> @@ -6693,7 +6693,7 @@ static void x86_cpu_set_sgxlepubkeyhash(CPUX86State 
> *env)
>  #endif
>  }
> 
> -static void x86_cpu_reset_hold(Object *obj)
> +static void x86_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      X86CPU *cpu = X86_CPU(cs);
> @@ -6704,7 +6704,7 @@ static void x86_cpu_reset_hold(Object *obj)
>      int i;
> 
>      if (xcc->parent_phases.hold) {
> -        xcc->parent_phases.hold(obj);
> +        xcc->parent_phases.hold(obj, type);
>      }
> 
>      memset(env, 0, offsetof(CPUX86State, end_reset_fields));
> diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
> index 203a349055c..bac84dca7af 100644
> --- a/target/loongarch/cpu.c
> +++ b/target/loongarch/cpu.c
> @@ -495,14 +495,14 @@ static void loongarch_max_initfn(Object *obj)
>      loongarch_la464_initfn(obj);
>  }
> 
> -static void loongarch_cpu_reset_hold(Object *obj)
> +static void loongarch_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      LoongArchCPUClass *lacc = LOONGARCH_CPU_GET_CLASS(obj);
>      CPULoongArchState *env = cpu_env(cs);
> 
>      if (lacc->parent_phases.hold) {
> -        lacc->parent_phases.hold(obj);
> +        lacc->parent_phases.hold(obj, type);
>      }
> 
>      env->fcsr0_mask = FCSR0_M1 | FCSR0_M2 | FCSR0_M3;
> diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c
> index 7c8efbb42c7..13f97a609c2 100644
> --- a/target/m68k/cpu.c
> +++ b/target/m68k/cpu.c
> @@ -71,7 +71,7 @@ static void m68k_unset_feature(CPUM68KState *env, int 
> feature)
>      env->features &= ~BIT_ULL(feature);
>  }
> 
> -static void m68k_cpu_reset_hold(Object *obj)
> +static void m68k_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      M68kCPUClass *mcc = M68K_CPU_GET_CLASS(obj);
> @@ -80,7 +80,7 @@ static void m68k_cpu_reset_hold(Object *obj)
>      int i;
> 
>      if (mcc->parent_phases.hold) {
> -        mcc->parent_phases.hold(obj);
> +        mcc->parent_phases.hold(obj, type);
>      }
> 
>      memset(env, 0, offsetof(CPUM68KState, end_reset_fields));
> diff --git a/target/microblaze/cpu.c b/target/microblaze/cpu.c
> index 96c2b71f7f7..f8dc3173fc0 100644
> --- a/target/microblaze/cpu.c
> +++ b/target/microblaze/cpu.c
> @@ -181,7 +181,7 @@ static void microblaze_cpu_set_irq(void *opaque, int irq, 
> int level)
>  }
>  #endif
> 
> -static void mb_cpu_reset_hold(Object *obj)
> +static void mb_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      MicroBlazeCPU *cpu = MICROBLAZE_CPU(cs);
> @@ -189,7 +189,7 @@ static void mb_cpu_reset_hold(Object *obj)
>      CPUMBState *env = &cpu->env;
> 
>      if (mcc->parent_phases.hold) {
> -        mcc->parent_phases.hold(obj);
> +        mcc->parent_phases.hold(obj, type);
>      }
> 
>      memset(env, 0, offsetof(CPUMBState, end_reset_fields));
> diff --git a/target/mips/cpu.c b/target/mips/cpu.c
> index 8d8f690a535..bbe01d07dd8 100644
> --- a/target/mips/cpu.c
> +++ b/target/mips/cpu.c
> @@ -185,7 +185,7 @@ static int mips_cpu_mmu_index(CPUState *cs, bool ifunc)
> 
>  #include "cpu-defs.c.inc"
> 
> -static void mips_cpu_reset_hold(Object *obj)
> +static void mips_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      MIPSCPU *cpu = MIPS_CPU(cs);
> @@ -193,7 +193,7 @@ static void mips_cpu_reset_hold(Object *obj)
>      CPUMIPSState *env = &cpu->env;
> 
>      if (mcc->parent_phases.hold) {
> -        mcc->parent_phases.hold(obj);
> +        mcc->parent_phases.hold(obj, type);
>      }
> 
>      memset(env, 0, offsetof(CPUMIPSState, end_reset_fields));
> diff --git a/target/nios2/cpu.c b/target/nios2/cpu.c
> index 679aff5730f..63e786727e3 100644
> --- a/target/nios2/cpu.c
> +++ b/target/nios2/cpu.c
> @@ -54,7 +54,7 @@ static int nios2_cpu_mmu_index(CPUState *cs, bool ifetch)
>              ? MMU_USER_IDX : MMU_SUPERVISOR_IDX);
>  }
> 
> -static void nios2_cpu_reset_hold(Object *obj)
> +static void nios2_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      Nios2CPU *cpu = NIOS2_CPU(cs);
> @@ -62,7 +62,7 @@ static void nios2_cpu_reset_hold(Object *obj)
>      CPUNios2State *env = &cpu->env;
> 
>      if (ncc->parent_phases.hold) {
> -        ncc->parent_phases.hold(obj);
> +        ncc->parent_phases.hold(obj, type);
>      }
> 
>      memset(env->ctrl, 0, sizeof(env->ctrl));
> diff --git a/target/openrisc/cpu.c b/target/openrisc/cpu.c
> index 33c45dbf04e..d711035cf59 100644
> --- a/target/openrisc/cpu.c
> +++ b/target/openrisc/cpu.c
> @@ -85,14 +85,14 @@ static void openrisc_disas_set_info(CPUState *cpu, 
> disassemble_info *info)
>      info->print_insn = print_insn_or1k;
>  }
> 
> -static void openrisc_cpu_reset_hold(Object *obj)
> +static void openrisc_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      OpenRISCCPU *cpu = OPENRISC_CPU(cs);
>      OpenRISCCPUClass *occ = OPENRISC_CPU_GET_CLASS(obj);
> 
>      if (occ->parent_phases.hold) {
> -        occ->parent_phases.hold(obj);
> +        occ->parent_phases.hold(obj, type);
>      }
> 
>      memset(&cpu->env, 0, offsetof(CPUOpenRISCState, end_reset_fields));
> diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c
> index 6241de62ce8..6d82f24c875 100644
> --- a/target/ppc/cpu_init.c
> +++ b/target/ppc/cpu_init.c
> @@ -7136,7 +7136,7 @@ static int ppc_cpu_mmu_index(CPUState *cs, bool ifetch)
>      return ppc_env_mmu_index(cpu_env(cs), ifetch);
>  }
> 
> -static void ppc_cpu_reset_hold(Object *obj)
> +static void ppc_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      PowerPCCPU *cpu = POWERPC_CPU(cs);
> @@ -7146,7 +7146,7 @@ static void ppc_cpu_reset_hold(Object *obj)
>      int i;
> 
>      if (pcc->parent_phases.hold) {
> -        pcc->parent_phases.hold(obj);
> +        pcc->parent_phases.hold(obj, type);
>      }
> 
>      msr = (target_ulong)0;
> diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
> index 36e3e5fdaf5..eb1a2e7d6d9 100644
> --- a/target/riscv/cpu.c
> +++ b/target/riscv/cpu.c
> @@ -918,7 +918,7 @@ static int riscv_cpu_mmu_index(CPUState *cs, bool ifetch)
>      return riscv_env_mmu_index(cpu_env(cs), ifetch);
>  }
> 
> -static void riscv_cpu_reset_hold(Object *obj)
> +static void riscv_cpu_reset_hold(Object *obj, ResetType type)
>  {
>  #ifndef CONFIG_USER_ONLY
>      uint8_t iprio;
> @@ -930,7 +930,7 @@ static void riscv_cpu_reset_hold(Object *obj)
>      CPURISCVState *env = &cpu->env;
> 
>      if (mcc->parent_phases.hold) {
> -        mcc->parent_phases.hold(obj);
> +        mcc->parent_phases.hold(obj, type);
>      }
>  #ifndef CONFIG_USER_ONLY
>      env->misa_mxl = mcc->misa_mxl_max;
> diff --git a/target/rx/cpu.c b/target/rx/cpu.c
> index da673a595d4..e3dfb097225 100644
> --- a/target/rx/cpu.c
> +++ b/target/rx/cpu.c
> @@ -69,7 +69,7 @@ static int riscv_cpu_mmu_index(CPUState *cs, bool ifunc)
>      return 0;
>  }
> 
> -static void rx_cpu_reset_hold(Object *obj)
> +static void rx_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      RXCPUClass *rcc = RX_CPU_GET_CLASS(obj);
> @@ -77,7 +77,7 @@ static void rx_cpu_reset_hold(Object *obj)
>      uint32_t *resetvec;
> 
>      if (rcc->parent_phases.hold) {
> -        rcc->parent_phases.hold(obj);
> +        rcc->parent_phases.hold(obj, type);
>      }
> 
>      memset(env, 0, offsetof(CPURXState, end_reset_fields));
> diff --git a/target/sh4/cpu.c b/target/sh4/cpu.c
> index 4f5a4a3d985..43e35ec2ca7 100644
> --- a/target/sh4/cpu.c
> +++ b/target/sh4/cpu.c
> @@ -103,14 +103,14 @@ static int sh4_cpu_mmu_index(CPUState *cs, bool ifetch)
>      }
>  }
> 
> -static void superh_cpu_reset_hold(Object *obj)
> +static void superh_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      SuperHCPUClass *scc = SUPERH_CPU_GET_CLASS(obj);
>      CPUSH4State *env = cpu_env(cs);
> 
>      if (scc->parent_phases.hold) {
> -        scc->parent_phases.hold(obj);
> +        scc->parent_phases.hold(obj, type);
>      }
> 
>      memset(env, 0, offsetof(CPUSH4State, end_reset_fields));
> diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
> index e820f50acf6..485d416925b 100644
> --- a/target/sparc/cpu.c
> +++ b/target/sparc/cpu.c
> @@ -29,14 +29,14 @@
> 
>  //#define DEBUG_FEATURES
> 
> -static void sparc_cpu_reset_hold(Object *obj)
> +static void sparc_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      SPARCCPUClass *scc = SPARC_CPU_GET_CLASS(obj);
>      CPUSPARCState *env = cpu_env(cs);
> 
>      if (scc->parent_phases.hold) {
> -        scc->parent_phases.hold(obj);
> +        scc->parent_phases.hold(obj, type);
>      }
> 
>      memset(env, 0, offsetof(CPUSPARCState, end_reset_fields));
> diff --git a/target/tricore/cpu.c b/target/tricore/cpu.c
> index a9af73aeb58..8f9b72c3a04 100644
> --- a/target/tricore/cpu.c
> +++ b/target/tricore/cpu.c
> @@ -58,13 +58,13 @@ static void tricore_restore_state_to_opc(CPUState *cs,
>      cpu_env(cs)->PC = data[0];
>  }
> 
> -static void tricore_cpu_reset_hold(Object *obj)
> +static void tricore_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      TriCoreCPUClass *tcc = TRICORE_CPU_GET_CLASS(obj);
> 
>      if (tcc->parent_phases.hold) {
> -        tcc->parent_phases.hold(obj);
> +        tcc->parent_phases.hold(obj, type);
>      }
> 
>      cpu_state_reset(cpu_env(cs));
> diff --git a/target/xtensa/cpu.c b/target/xtensa/cpu.c
> index 875cf843c93..de907cfeb1b 100644
> --- a/target/xtensa/cpu.c
> +++ b/target/xtensa/cpu.c
> @@ -93,7 +93,7 @@ bool xtensa_abi_call0(void)
>  }
>  #endif
> 
> -static void xtensa_cpu_reset_hold(Object *obj)
> +static void xtensa_cpu_reset_hold(Object *obj, ResetType type)
>  {
>      CPUState *cs = CPU(obj);
>      XtensaCPUClass *xcc = XTENSA_CPU_GET_CLASS(obj);
> @@ -102,7 +102,7 @@ static void xtensa_cpu_reset_hold(Object *obj)
>                                        XTENSA_OPTION_DFP_COPROCESSOR);
> 
>      if (xcc->parent_phases.hold) {
> -        xcc->parent_phases.hold(obj);
> +        xcc->parent_phases.hold(obj, type);
>      }
> 
>      env->pc = env->config->exception_vector[EXC_RESET0 + 
> env->static_vectors];
> --
> 2.34.1
> 
> 

-- 

Reply via email to