All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset
@ 2022-11-24 11:50 Peter Maydell
  2022-11-24 11:50 ` [PATCH for-8.0 01/19] hw/core/cpu-common: Convert TYPE_CPU class " Peter Maydell
                   ` (21 more replies)
  0 siblings, 22 replies; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

This patchset converts the TYPE_CPU base class and most subclasses
to use 3-phase reset. (The exception is s390, which is doing
something a bit odd with its reset, so the conversion there isn't
going to be simple like these others. So I'll do that one
separately.)

The rationale here is that we should be able to get rid of
all the remaining uses of device_class_set_parent_reset()
and remove/simplify some of the transitional code that's
currently bridging between "legacy" reset and 3-phase reset.

NB: even with this series, it's not possible to usefully do
anything requiring 3-phase reset of a CPU yet, because all
CPU objects get ad-hoc reset by some code somewhere doing
a cpu_reset() call on them, which will just do all 3 phases
in order. I would like to try to address that eventually,
but it's not trivial.

thanks
-- PMM

Peter Maydell (19):
  hw/core/cpu-common: Convert TYPE_CPU class to 3-phase reset
  target/arm: Convert to 3-phase reset
  target/avr: Convert to 3-phase reset
  target/cris: Convert to 3-phase reset
  target/hexagon: Convert to 3-phase reset
  target/i386: Convert to 3-phase reset
  target/loongarch: Convert to 3-phase reset
  target/m68k: Convert to 3-phase reset
  target/microblaze: Convert to 3-phase reset
  target/mips: Convert to 3-phase reset
  target/nios2: Convert to 3-phase reset
  target/openrisc: Convert to 3-phase reset
  target/ppc: Convert to 3-phase reset
  target/riscv: Convert to 3-phase reset
  target/rx: Convert to 3-phase reset
  target/sh4: Convert to 3-phase reset
  target/sparc: Convert to 3-phase reset
  target/tricore: Convert to 3-phase reset
  target/xtensa: Convert to 3-phase reset

 target/arm/cpu-qom.h        |  4 ++--
 target/avr/cpu-qom.h        |  4 ++--
 target/cris/cpu-qom.h       |  4 ++--
 target/hexagon/cpu.h        |  2 +-
 target/i386/cpu-qom.h       |  4 ++--
 target/loongarch/cpu.h      |  4 ++--
 target/m68k/cpu-qom.h       |  4 ++--
 target/microblaze/cpu-qom.h |  4 ++--
 target/mips/cpu-qom.h       |  4 ++--
 target/nios2/cpu.h          |  4 ++--
 target/openrisc/cpu.h       |  4 ++--
 target/ppc/cpu-qom.h        |  4 ++--
 target/riscv/cpu.h          |  4 ++--
 target/rx/cpu-qom.h         |  4 ++--
 target/sh4/cpu-qom.h        |  4 ++--
 target/sparc/cpu-qom.h      |  4 ++--
 target/tricore/cpu-qom.h    |  2 +-
 target/xtensa/cpu-qom.h     |  4 ++--
 hw/core/cpu-common.c        |  7 ++++---
 target/arm/cpu.c            | 13 +++++++++----
 target/avr/cpu.c            | 13 +++++++++----
 target/cris/cpu.c           | 12 ++++++++----
 target/hexagon/cpu.c        | 12 ++++++++----
 target/i386/cpu.c           | 12 ++++++++----
 target/loongarch/cpu.c      | 12 ++++++++----
 target/m68k/cpu.c           | 12 ++++++++----
 target/microblaze/cpu.c     | 12 ++++++++----
 target/mips/cpu.c           | 12 ++++++++----
 target/nios2/cpu.c          | 12 ++++++++----
 target/openrisc/cpu.c       | 12 ++++++++----
 target/ppc/cpu_init.c       | 12 ++++++++----
 target/riscv/cpu.c          | 12 ++++++++----
 target/rx/cpu.c             | 13 ++++++++-----
 target/sh4/cpu.c            | 12 ++++++++----
 target/sparc/cpu.c          | 12 ++++++++----
 target/tricore/cpu.c        | 12 ++++++++----
 target/xtensa/cpu.c         | 12 ++++++++----
 37 files changed, 184 insertions(+), 110 deletions(-)

-- 
2.25.1



^ permalink raw reply	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 01/19] hw/core/cpu-common: Convert TYPE_CPU class to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-27 22:30   ` Alistair Francis
  2022-11-24 11:50 ` [PATCH for-8.0 02/19] target/arm: Convert " Peter Maydell
                   ` (20 subsequent siblings)
  21 siblings, 1 reply; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the parent class TYPE_CPU to 3-phase reset. This
is a necessary prerequisite to converting the subclasses.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 hw/core/cpu-common.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c
index f9fdd46b9d7..78b5f350a00 100644
--- a/hw/core/cpu-common.c
+++ b/hw/core/cpu-common.c
@@ -116,9 +116,9 @@ void cpu_reset(CPUState *cpu)
     trace_guest_cpu_reset(cpu);
 }
 
-static void cpu_common_reset(DeviceState *dev)
+static void cpu_common_reset_hold(Object *obj)
 {
-    CPUState *cpu = CPU(dev);
+    CPUState *cpu = CPU(obj);
     CPUClass *cc = CPU_GET_CLASS(cpu);
 
     if (qemu_loglevel_mask(CPU_LOG_RESET)) {
@@ -259,6 +259,7 @@ static int64_t cpu_common_get_arch_id(CPUState *cpu)
 static void cpu_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
+    ResettableClass *rc = RESETTABLE_CLASS(klass);
     CPUClass *k = CPU_CLASS(klass);
 
     k->parse_features = cpu_common_parse_features;
@@ -269,7 +270,7 @@ static void cpu_class_init(ObjectClass *klass, void *data)
     set_bit(DEVICE_CATEGORY_CPU, dc->categories);
     dc->realize = cpu_common_realizefn;
     dc->unrealize = cpu_common_unrealizefn;
-    dc->reset = cpu_common_reset;
+    rc->phases.hold = cpu_common_reset_hold;
     cpu_class_init_props(dc);
     /*
      * Reason: CPUs still need special care by board code: wiring up
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 02/19] target/arm: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
  2022-11-24 11:50 ` [PATCH for-8.0 01/19] hw/core/cpu-common: Convert TYPE_CPU class " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-24 15:15   ` Cédric Le Goater
  2022-11-27 22:28   ` Alistair Francis
  2022-11-24 11:50 ` [PATCH for-8.0 03/19] target/avr: " Peter Maydell
                   ` (19 subsequent siblings)
  21 siblings, 2 replies; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the Arm CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/arm/cpu-qom.h |  4 ++--
 target/arm/cpu.c     | 13 +++++++++----
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/target/arm/cpu-qom.h b/target/arm/cpu-qom.h
index 64c44cef2dd..514c22ced9b 100644
--- a/target/arm/cpu-qom.h
+++ b/target/arm/cpu-qom.h
@@ -43,7 +43,7 @@ void aarch64_cpu_register(const ARMCPUInfo *info);
 /**
  * ARMCPUClass:
  * @parent_realize: The parent class' realize handler.
- * @parent_reset: The parent class' reset handler.
+ * @parent_phases: The parent class' reset phase handlers.
  *
  * An ARM CPU model.
  */
@@ -54,7 +54,7 @@ struct ARMCPUClass {
 
     const ARMCPUInfo *info;
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
 };
 
 
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index a021df9e9e8..5bad065579f 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -202,14 +202,16 @@ static void cp_reg_check_reset(gpointer key, gpointer value,  gpointer opaque)
     assert(oldvalue == newvalue);
 }
 
-static void arm_cpu_reset(DeviceState *dev)
+static void arm_cpu_reset_hold(Object *obj)
 {
-    CPUState *s = CPU(dev);
+    CPUState *s = CPU(obj);
     ARMCPU *cpu = ARM_CPU(s);
     ARMCPUClass *acc = ARM_CPU_GET_CLASS(cpu);
     CPUARMState *env = &cpu->env;
 
-    acc->parent_reset(dev);
+    if (acc->parent_phases.hold) {
+        acc->parent_phases.hold(obj);
+    }
 
     memset(env, 0, offsetof(CPUARMState, end_reset_fields));
 
@@ -2210,12 +2212,15 @@ static void arm_cpu_class_init(ObjectClass *oc, void *data)
     ARMCPUClass *acc = ARM_CPU_CLASS(oc);
     CPUClass *cc = CPU_CLASS(acc);
     DeviceClass *dc = DEVICE_CLASS(oc);
+    ResettableClass *rc = RESETTABLE_CLASS(oc);
 
     device_class_set_parent_realize(dc, arm_cpu_realizefn,
                                     &acc->parent_realize);
 
     device_class_set_props(dc, arm_cpu_properties);
-    device_class_set_parent_reset(dc, arm_cpu_reset, &acc->parent_reset);
+
+    resettable_class_set_parent_phases(rc, NULL, arm_cpu_reset_hold, NULL,
+                                       &acc->parent_phases);
 
     cc->class_by_name = arm_cpu_class_by_name;
     cc->has_work = arm_cpu_has_work;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 03/19] target/avr: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
  2022-11-24 11:50 ` [PATCH for-8.0 01/19] hw/core/cpu-common: Convert TYPE_CPU class " Peter Maydell
  2022-11-24 11:50 ` [PATCH for-8.0 02/19] target/arm: Convert " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-24 11:50 ` [PATCH for-8.0 04/19] target/cris: " Peter Maydell
                   ` (18 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the avr CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/avr/cpu-qom.h |  4 ++--
 target/avr/cpu.c     | 13 +++++++++----
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/target/avr/cpu-qom.h b/target/avr/cpu-qom.h
index b5c3507d6d7..01ea5f160b6 100644
--- a/target/avr/cpu-qom.h
+++ b/target/avr/cpu-qom.h
@@ -31,7 +31,7 @@ OBJECT_DECLARE_CPU_TYPE(AVRCPU, AVRCPUClass, AVR_CPU)
 /**
  *  AVRCPUClass:
  *  @parent_realize: The parent class' realize handler.
- *  @parent_reset: The parent class' reset handler.
+ *  @parent_phases: The parent class' reset phase handlers.
  *
  *  A AVR CPU model.
  */
@@ -40,7 +40,7 @@ struct AVRCPUClass {
     CPUClass parent_class;
     /*< public >*/
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
 };
 
 
diff --git a/target/avr/cpu.c b/target/avr/cpu.c
index c7295b488d1..d0139804b9f 100644
--- a/target/avr/cpu.c
+++ b/target/avr/cpu.c
@@ -67,14 +67,16 @@ static void avr_restore_state_to_opc(CPUState *cs,
     env->pc_w = data[0];
 }
 
-static void avr_cpu_reset(DeviceState *ds)
+static void avr_cpu_reset_hold(Object *obj)
 {
-    CPUState *cs = CPU(ds);
+    CPUState *cs = CPU(obj);
     AVRCPU *cpu = AVR_CPU(cs);
     AVRCPUClass *mcc = AVR_CPU_GET_CLASS(cpu);
     CPUAVRState *env = &cpu->env;
 
-    mcc->parent_reset(ds);
+    if (mcc->parent_phases.hold) {
+        mcc->parent_phases.hold(obj);
+    }
 
     env->pc_w = 0;
     env->sregI = 1;
@@ -223,9 +225,12 @@ static void avr_cpu_class_init(ObjectClass *oc, void *data)
     DeviceClass *dc = DEVICE_CLASS(oc);
     CPUClass *cc = CPU_CLASS(oc);
     AVRCPUClass *mcc = AVR_CPU_CLASS(oc);
+    ResettableClass *rc = RESETTABLE_CLASS(oc);
 
     device_class_set_parent_realize(dc, avr_cpu_realizefn, &mcc->parent_realize);
-    device_class_set_parent_reset(dc, avr_cpu_reset, &mcc->parent_reset);
+
+    resettable_class_set_parent_phases(rc, NULL, avr_cpu_reset_hold, NULL,
+                                       &mcc->parent_phases);
 
     cc->class_by_name = avr_cpu_class_by_name;
 
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 04/19] target/cris: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (2 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 03/19] target/avr: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-24 14:44   ` Edgar E. Iglesias
  2022-11-24 11:50 ` [PATCH for-8.0 05/19] target/hexagon: " Peter Maydell
                   ` (17 subsequent siblings)
  21 siblings, 1 reply; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the cris CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/cris/cpu-qom.h |  4 ++--
 target/cris/cpu.c     | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/target/cris/cpu-qom.h b/target/cris/cpu-qom.h
index 71e8af0e70a..431a1d536a9 100644
--- a/target/cris/cpu-qom.h
+++ b/target/cris/cpu-qom.h
@@ -30,7 +30,7 @@ OBJECT_DECLARE_CPU_TYPE(CRISCPU, CRISCPUClass, CRIS_CPU)
 /**
  * CRISCPUClass:
  * @parent_realize: The parent class' realize handler.
- * @parent_reset: The parent class' reset handler.
+ * @parent_phases: The parent class' reset phase handlers.
  * @vr: Version Register value.
  *
  * A CRIS CPU model.
@@ -41,7 +41,7 @@ struct CRISCPUClass {
     /*< public >*/
 
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
 
     uint32_t vr;
 };
diff --git a/target/cris/cpu.c b/target/cris/cpu.c
index fb05dc6f9ab..a6a93c23595 100644
--- a/target/cris/cpu.c
+++ b/target/cris/cpu.c
@@ -56,15 +56,17 @@ static bool cris_cpu_has_work(CPUState *cs)
     return cs->interrupt_request & (CPU_INTERRUPT_HARD | CPU_INTERRUPT_NMI);
 }
 
-static void cris_cpu_reset(DeviceState *dev)
+static void cris_cpu_reset_hold(Object *obj)
 {
-    CPUState *s = CPU(dev);
+    CPUState *s = CPU(obj);
     CRISCPU *cpu = CRIS_CPU(s);
     CRISCPUClass *ccc = CRIS_CPU_GET_CLASS(cpu);
     CPUCRISState *env = &cpu->env;
     uint32_t vr;
 
-    ccc->parent_reset(dev);
+    if (ccc->parent_phases.hold) {
+        ccc->parent_phases.hold(obj);
+    }
 
     vr = env->pregs[PR_VR];
     memset(env, 0, offsetof(CPUCRISState, end_reset_fields));
@@ -305,11 +307,13 @@ static void cris_cpu_class_init(ObjectClass *oc, void *data)
     DeviceClass *dc = DEVICE_CLASS(oc);
     CPUClass *cc = CPU_CLASS(oc);
     CRISCPUClass *ccc = CRIS_CPU_CLASS(oc);
+    ResettableClass *rc = RESETTABLE_CLASS(oc);
 
     device_class_set_parent_realize(dc, cris_cpu_realizefn,
                                     &ccc->parent_realize);
 
-    device_class_set_parent_reset(dc, cris_cpu_reset, &ccc->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, cris_cpu_reset_hold, NULL,
+                                       &ccc->parent_phases);
 
     cc->class_by_name = cris_cpu_class_by_name;
     cc->has_work = cris_cpu_has_work;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 05/19] target/hexagon: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (3 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 04/19] target/cris: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-30  4:38   ` Taylor Simpson
  2022-11-24 11:50 ` [PATCH for-8.0 06/19] target/i386: " Peter Maydell
                   ` (16 subsequent siblings)
  21 siblings, 1 reply; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the hexagon CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/hexagon/cpu.h |  2 +-
 target/hexagon/cpu.c | 12 ++++++++----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h
index 2a65a57bab3..794a0453fd4 100644
--- a/target/hexagon/cpu.h
+++ b/target/hexagon/cpu.h
@@ -137,7 +137,7 @@ typedef struct HexagonCPUClass {
     CPUClass parent_class;
     /*< public >*/
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
 } HexagonCPUClass;
 
 struct ArchCPU {
diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c
index 03221fbdc28..658ca4ff783 100644
--- a/target/hexagon/cpu.c
+++ b/target/hexagon/cpu.c
@@ -281,14 +281,16 @@ static void hexagon_restore_state_to_opc(CPUState *cs,
     env->gpr[HEX_REG_PC] = data[0];
 }
 
-static void hexagon_cpu_reset(DeviceState *dev)
+static void hexagon_cpu_reset_hold(Object *obj)
 {
-    CPUState *cs = CPU(dev);
+    CPUState *cs = CPU(obj);
     HexagonCPU *cpu = HEXAGON_CPU(cs);
     HexagonCPUClass *mcc = HEXAGON_CPU_GET_CLASS(cpu);
     CPUHexagonState *env = &cpu->env;
 
-    mcc->parent_reset(dev);
+    if (mcc->parent_phases.hold) {
+        mcc->parent_phases.hold(obj);
+    }
 
     set_default_nan_mode(1, &env->fp_status);
     set_float_detect_tininess(float_tininess_before_rounding, &env->fp_status);
@@ -339,11 +341,13 @@ static void hexagon_cpu_class_init(ObjectClass *c, void *data)
     HexagonCPUClass *mcc = HEXAGON_CPU_CLASS(c);
     CPUClass *cc = CPU_CLASS(c);
     DeviceClass *dc = DEVICE_CLASS(c);
+    ResettableClass *rc = RESETTABLE_CLASS(c);
 
     device_class_set_parent_realize(dc, hexagon_cpu_realize,
                                     &mcc->parent_realize);
 
-    device_class_set_parent_reset(dc, hexagon_cpu_reset, &mcc->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, hexagon_cpu_reset_hold, NULL,
+                                       &mcc->parent_phases);
 
     cc->class_by_name = hexagon_cpu_class_by_name;
     cc->has_work = hexagon_cpu_has_work;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 06/19] target/i386: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (4 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 05/19] target/hexagon: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-24 11:50 ` [PATCH for-8.0 07/19] target/loongarch: " Peter Maydell
                   ` (15 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the i386 CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/i386/cpu-qom.h |  4 ++--
 target/i386/cpu.c     | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/target/i386/cpu-qom.h b/target/i386/cpu-qom.h
index c557a522e1e..2350f4ae609 100644
--- a/target/i386/cpu-qom.h
+++ b/target/i386/cpu-qom.h
@@ -42,7 +42,7 @@ typedef struct X86CPUModel X86CPUModel;
  * @migration_safe: See CpuDefinitionInfo::migration_safe
  * @static_model: See CpuDefinitionInfo::static
  * @parent_realize: The parent class' realize handler.
- * @parent_reset: The parent class' reset handler.
+ * @parent_phases: The parent class' reset phase handlers.
  *
  * An x86 CPU model or family.
  */
@@ -67,7 +67,7 @@ struct X86CPUClass {
 
     DeviceRealize parent_realize;
     DeviceUnrealize parent_unrealize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
 };
 
 
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 22b681ca37d..8f618cf0b25 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -5878,9 +5878,9 @@ static void x86_cpu_set_sgxlepubkeyhash(CPUX86State *env)
 #endif
 }
 
-static void x86_cpu_reset(DeviceState *dev)
+static void x86_cpu_reset_hold(Object *obj)
 {
-    CPUState *s = CPU(dev);
+    CPUState *s = CPU(obj);
     X86CPU *cpu = X86_CPU(s);
     X86CPUClass *xcc = X86_CPU_GET_CLASS(cpu);
     CPUX86State *env = &cpu->env;
@@ -5888,7 +5888,9 @@ static void x86_cpu_reset(DeviceState *dev)
     uint64_t xcr0;
     int i;
 
-    xcc->parent_reset(dev);
+    if (xcc->parent_phases.hold) {
+        xcc->parent_phases.hold(obj);
+    }
 
     memset(env, 0, offsetof(CPUX86State, end_reset_fields));
 
@@ -7112,6 +7114,7 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
     X86CPUClass *xcc = X86_CPU_CLASS(oc);
     CPUClass *cc = CPU_CLASS(oc);
     DeviceClass *dc = DEVICE_CLASS(oc);
+    ResettableClass *rc = RESETTABLE_CLASS(oc);
     FeatureWord w;
 
     device_class_set_parent_realize(dc, x86_cpu_realizefn,
@@ -7120,7 +7123,8 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
                                       &xcc->parent_unrealize);
     device_class_set_props(dc, x86_cpu_properties);
 
-    device_class_set_parent_reset(dc, x86_cpu_reset, &xcc->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, x86_cpu_reset_hold, NULL,
+                                       &xcc->parent_phases);
     cc->reset_dump_flags = CPU_DUMP_FPU | CPU_DUMP_CCOP;
 
     cc->class_by_name = x86_cpu_class_by_name;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 07/19] target/loongarch: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (5 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 06/19] target/i386: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-24 11:50 ` [PATCH for-8.0 08/19] target/m68k: " Peter Maydell
                   ` (14 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the loongarch CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/loongarch/cpu.h |  4 ++--
 target/loongarch/cpu.c | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h
index e15c633b0bf..e35cf655975 100644
--- a/target/loongarch/cpu.h
+++ b/target/loongarch/cpu.h
@@ -356,7 +356,7 @@ OBJECT_DECLARE_CPU_TYPE(LoongArchCPU, LoongArchCPUClass,
 /**
  * LoongArchCPUClass:
  * @parent_realize: The parent class' realize handler.
- * @parent_reset: The parent class' reset handler.
+ * @parent_phases: The parent class' reset phase handlers.
  *
  * A LoongArch CPU model.
  */
@@ -366,7 +366,7 @@ struct LoongArchCPUClass {
     /*< public >*/
 
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
 };
 
 /*
diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
index 46b04cbdad1..e8c42f17a54 100644
--- a/target/loongarch/cpu.c
+++ b/target/loongarch/cpu.c
@@ -452,14 +452,16 @@ void loongarch_cpu_list(void)
     g_slist_free(list);
 }
 
-static void loongarch_cpu_reset(DeviceState *dev)
+static void loongarch_cpu_reset_hold(Object *obj)
 {
-    CPUState *cs = CPU(dev);
+    CPUState *cs = CPU(obj);
     LoongArchCPU *cpu = LOONGARCH_CPU(cs);
     LoongArchCPUClass *lacc = LOONGARCH_CPU_GET_CLASS(cpu);
     CPULoongArchState *env = &cpu->env;
 
-    lacc->parent_reset(dev);
+    if (lacc->parent_phases.hold) {
+        lacc->parent_phases.hold(obj);
+    }
 
     env->fcsr0_mask = FCSR0_M1 | FCSR0_M2 | FCSR0_M3;
     env->fcsr0 = 0x0;
@@ -696,10 +698,12 @@ static void loongarch_cpu_class_init(ObjectClass *c, void *data)
     LoongArchCPUClass *lacc = LOONGARCH_CPU_CLASS(c);
     CPUClass *cc = CPU_CLASS(c);
     DeviceClass *dc = DEVICE_CLASS(c);
+    ResettableClass *rc = RESETTABLE_CLASS(c);
 
     device_class_set_parent_realize(dc, loongarch_cpu_realizefn,
                                     &lacc->parent_realize);
-    device_class_set_parent_reset(dc, loongarch_cpu_reset, &lacc->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, loongarch_cpu_reset_hold, NULL,
+                                       &lacc->parent_phases);
 
     cc->class_by_name = loongarch_cpu_class_by_name;
     cc->has_work = loongarch_cpu_has_work;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 08/19] target/m68k: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (6 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 07/19] target/loongarch: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-24 11:50 ` [PATCH for-8.0 09/19] target/microblaze: " Peter Maydell
                   ` (13 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the m68k CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/m68k/cpu-qom.h |  4 ++--
 target/m68k/cpu.c     | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/target/m68k/cpu-qom.h b/target/m68k/cpu-qom.h
index cd9687192cd..0ec7750a926 100644
--- a/target/m68k/cpu-qom.h
+++ b/target/m68k/cpu-qom.h
@@ -30,7 +30,7 @@ OBJECT_DECLARE_CPU_TYPE(M68kCPU, M68kCPUClass, M68K_CPU)
 /*
  * M68kCPUClass:
  * @parent_realize: The parent class' realize handler.
- * @parent_reset: The parent class' reset handler.
+ * @parent_phases: The parent class' reset phase handlers.
  *
  * A Motorola 68k CPU model.
  */
@@ -40,7 +40,7 @@ struct M68kCPUClass {
     /*< public >*/
 
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
 };
 
 
diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c
index b67ddea2aee..99af1ab541a 100644
--- a/target/m68k/cpu.c
+++ b/target/m68k/cpu.c
@@ -66,16 +66,18 @@ static void m68k_unset_feature(CPUM68KState *env, int feature)
     env->features &= ~BIT_ULL(feature);
 }
 
-static void m68k_cpu_reset(DeviceState *dev)
+static void m68k_cpu_reset_hold(Object *obj)
 {
-    CPUState *s = CPU(dev);
+    CPUState *s = CPU(obj);
     M68kCPU *cpu = M68K_CPU(s);
     M68kCPUClass *mcc = M68K_CPU_GET_CLASS(cpu);
     CPUM68KState *env = &cpu->env;
     floatx80 nan = floatx80_default_nan(NULL);
     int i;
 
-    mcc->parent_reset(dev);
+    if (mcc->parent_phases.hold) {
+        mcc->parent_phases.hold(obj);
+    }
 
     memset(env, 0, offsetof(CPUM68KState, end_reset_fields));
 #ifdef CONFIG_SOFTMMU
@@ -552,10 +554,12 @@ static void m68k_cpu_class_init(ObjectClass *c, void *data)
     M68kCPUClass *mcc = M68K_CPU_CLASS(c);
     CPUClass *cc = CPU_CLASS(c);
     DeviceClass *dc = DEVICE_CLASS(c);
+    ResettableClass *rc = RESETTABLE_CLASS(c);
 
     device_class_set_parent_realize(dc, m68k_cpu_realizefn,
                                     &mcc->parent_realize);
-    device_class_set_parent_reset(dc, m68k_cpu_reset, &mcc->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, m68k_cpu_reset_hold, NULL,
+                                       &mcc->parent_phases);
 
     cc->class_by_name = m68k_cpu_class_by_name;
     cc->has_work = m68k_cpu_has_work;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 09/19] target/microblaze: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (7 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 08/19] target/m68k: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-24 14:44   ` Edgar E. Iglesias
  2022-11-24 11:50 ` [PATCH for-8.0 10/19] target/mips: " Peter Maydell
                   ` (12 subsequent siblings)
  21 siblings, 1 reply; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the microblaze CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/microblaze/cpu-qom.h |  4 ++--
 target/microblaze/cpu.c     | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/target/microblaze/cpu-qom.h b/target/microblaze/cpu-qom.h
index 255b39a45df..cda9220fa99 100644
--- a/target/microblaze/cpu-qom.h
+++ b/target/microblaze/cpu-qom.h
@@ -30,7 +30,7 @@ OBJECT_DECLARE_CPU_TYPE(MicroBlazeCPU, MicroBlazeCPUClass, MICROBLAZE_CPU)
 /**
  * MicroBlazeCPUClass:
  * @parent_realize: The parent class' realize handler.
- * @parent_reset: The parent class' reset handler.
+ * @parent_phases: The parent class' reset phase handlers.
  *
  * A MicroBlaze CPU model.
  */
@@ -40,7 +40,7 @@ struct MicroBlazeCPUClass {
     /*< public >*/
 
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
 };
 
 
diff --git a/target/microblaze/cpu.c b/target/microblaze/cpu.c
index 89e493f3ff7..817681f9b21 100644
--- a/target/microblaze/cpu.c
+++ b/target/microblaze/cpu.c
@@ -162,14 +162,16 @@ static void microblaze_cpu_set_irq(void *opaque, int irq, int level)
 }
 #endif
 
-static void mb_cpu_reset(DeviceState *dev)
+static void mb_cpu_reset_hold(Object *obj)
 {
-    CPUState *s = CPU(dev);
+    CPUState *s = CPU(obj);
     MicroBlazeCPU *cpu = MICROBLAZE_CPU(s);
     MicroBlazeCPUClass *mcc = MICROBLAZE_CPU_GET_CLASS(cpu);
     CPUMBState *env = &cpu->env;
 
-    mcc->parent_reset(dev);
+    if (mcc->parent_phases.hold) {
+        mcc->parent_phases.hold(obj);
+    }
 
     memset(env, 0, offsetof(CPUMBState, end_reset_fields));
     env->res_addr = RES_ADDR_NONE;
@@ -399,10 +401,12 @@ static void mb_cpu_class_init(ObjectClass *oc, void *data)
     DeviceClass *dc = DEVICE_CLASS(oc);
     CPUClass *cc = CPU_CLASS(oc);
     MicroBlazeCPUClass *mcc = MICROBLAZE_CPU_CLASS(oc);
+    ResettableClass *rc = RESETTABLE_CLASS(oc);
 
     device_class_set_parent_realize(dc, mb_cpu_realizefn,
                                     &mcc->parent_realize);
-    device_class_set_parent_reset(dc, mb_cpu_reset, &mcc->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, mb_cpu_reset_hold, NULL,
+                                       &mcc->parent_phases);
 
     cc->class_by_name = mb_cpu_class_by_name;
     cc->has_work = mb_cpu_has_work;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 10/19] target/mips: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (8 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 09/19] target/microblaze: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-24 11:50 ` [PATCH for-8.0 11/19] target/nios2: " Peter Maydell
                   ` (11 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the mips CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/mips/cpu-qom.h |  4 ++--
 target/mips/cpu.c     | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/target/mips/cpu-qom.h b/target/mips/cpu-qom.h
index e28b5296073..0dffab453b2 100644
--- a/target/mips/cpu-qom.h
+++ b/target/mips/cpu-qom.h
@@ -34,7 +34,7 @@ OBJECT_DECLARE_CPU_TYPE(MIPSCPU, MIPSCPUClass, MIPS_CPU)
 /**
  * MIPSCPUClass:
  * @parent_realize: The parent class' realize handler.
- * @parent_reset: The parent class' reset handler.
+ * @parent_phases: The parent class' reset phase handlers.
  *
  * A MIPS CPU model.
  */
@@ -44,7 +44,7 @@ struct MIPSCPUClass {
     /*< public >*/
 
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
     const struct mips_def_t *cpu_def;
 
     /* Used for the jazz board to modify mips_cpu_do_transaction_failed. */
diff --git a/target/mips/cpu.c b/target/mips/cpu.c
index 7a565466cb3..c614b04607a 100644
--- a/target/mips/cpu.c
+++ b/target/mips/cpu.c
@@ -182,14 +182,16 @@ static bool mips_cpu_has_work(CPUState *cs)
 
 #include "cpu-defs.c.inc"
 
-static void mips_cpu_reset(DeviceState *dev)
+static void mips_cpu_reset_hold(Object *obj)
 {
-    CPUState *cs = CPU(dev);
+    CPUState *cs = CPU(obj);
     MIPSCPU *cpu = MIPS_CPU(cs);
     MIPSCPUClass *mcc = MIPS_CPU_GET_CLASS(cpu);
     CPUMIPSState *env = &cpu->env;
 
-    mcc->parent_reset(dev);
+    if (mcc->parent_phases.hold) {
+        mcc->parent_phases.hold(obj);
+    }
 
     memset(env, 0, offsetof(CPUMIPSState, end_reset_fields));
 
@@ -562,10 +564,12 @@ static void mips_cpu_class_init(ObjectClass *c, void *data)
     MIPSCPUClass *mcc = MIPS_CPU_CLASS(c);
     CPUClass *cc = CPU_CLASS(c);
     DeviceClass *dc = DEVICE_CLASS(c);
+    ResettableClass *rc = RESETTABLE_CLASS(c);
 
     device_class_set_parent_realize(dc, mips_cpu_realizefn,
                                     &mcc->parent_realize);
-    device_class_set_parent_reset(dc, mips_cpu_reset, &mcc->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, mips_cpu_reset_hold, NULL,
+                                       &mcc->parent_phases);
 
     cc->class_by_name = mips_cpu_class_by_name;
     cc->has_work = mips_cpu_has_work;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 11/19] target/nios2: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (9 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 10/19] target/mips: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-24 11:50 ` [PATCH for-8.0 12/19] target/openrisc: " Peter Maydell
                   ` (10 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the nios2 CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/nios2/cpu.h |  4 ++--
 target/nios2/cpu.c | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/target/nios2/cpu.h b/target/nios2/cpu.h
index f85581ee560..b1a55490747 100644
--- a/target/nios2/cpu.h
+++ b/target/nios2/cpu.h
@@ -37,7 +37,7 @@ OBJECT_DECLARE_CPU_TYPE(Nios2CPU, Nios2CPUClass, NIOS2_CPU)
 
 /**
  * Nios2CPUClass:
- * @parent_reset: The parent class' reset handler.
+ * @parent_phases: The parent class' reset phase handlers.
  *
  * A Nios2 CPU model.
  */
@@ -47,7 +47,7 @@ struct Nios2CPUClass {
     /*< public >*/
 
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
 };
 
 #define TARGET_HAS_ICE 1
diff --git a/target/nios2/cpu.c b/target/nios2/cpu.c
index 9a5351bc81d..cff30823dad 100644
--- a/target/nios2/cpu.c
+++ b/target/nios2/cpu.c
@@ -57,14 +57,16 @@ static bool nios2_cpu_has_work(CPUState *cs)
     return cs->interrupt_request & CPU_INTERRUPT_HARD;
 }
 
-static void nios2_cpu_reset(DeviceState *dev)
+static void nios2_cpu_reset_hold(Object *obj)
 {
-    CPUState *cs = CPU(dev);
+    CPUState *cs = CPU(obj);
     Nios2CPU *cpu = NIOS2_CPU(cs);
     Nios2CPUClass *ncc = NIOS2_CPU_GET_CLASS(cpu);
     CPUNios2State *env = &cpu->env;
 
-    ncc->parent_reset(dev);
+    if (ncc->parent_phases.hold) {
+        ncc->parent_phases.hold(obj);
+    }
 
     memset(env->ctrl, 0, sizeof(env->ctrl));
     env->pc = cpu->reset_addr;
@@ -371,11 +373,13 @@ static void nios2_cpu_class_init(ObjectClass *oc, void *data)
     DeviceClass *dc = DEVICE_CLASS(oc);
     CPUClass *cc = CPU_CLASS(oc);
     Nios2CPUClass *ncc = NIOS2_CPU_CLASS(oc);
+    ResettableClass *rc = RESETTABLE_CLASS(oc);
 
     device_class_set_parent_realize(dc, nios2_cpu_realizefn,
                                     &ncc->parent_realize);
     device_class_set_props(dc, nios2_properties);
-    device_class_set_parent_reset(dc, nios2_cpu_reset, &ncc->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, nios2_cpu_reset_hold, NULL,
+                                       &ncc->parent_phases);
 
     cc->class_by_name = nios2_cpu_class_by_name;
     cc->has_work = nios2_cpu_has_work;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 12/19] target/openrisc: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (10 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 11/19] target/nios2: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-24 11:50 ` [PATCH for-8.0 13/19] target/ppc: " Peter Maydell
                   ` (9 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the openrisc CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/openrisc/cpu.h |  4 ++--
 target/openrisc/cpu.c | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/target/openrisc/cpu.h b/target/openrisc/cpu.h
index 1d5efa5ca2f..5f607497052 100644
--- a/target/openrisc/cpu.h
+++ b/target/openrisc/cpu.h
@@ -34,7 +34,7 @@ OBJECT_DECLARE_CPU_TYPE(OpenRISCCPU, OpenRISCCPUClass, OPENRISC_CPU)
 /**
  * OpenRISCCPUClass:
  * @parent_realize: The parent class' realize handler.
- * @parent_reset: The parent class' reset handler.
+ * @parent_phases: The parent class' reset phase handlers.
  *
  * A OpenRISC CPU model.
  */
@@ -44,7 +44,7 @@ struct OpenRISCCPUClass {
     /*< public >*/
 
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
 };
 
 #define TARGET_INSN_START_EXTRA_WORDS 1
diff --git a/target/openrisc/cpu.c b/target/openrisc/cpu.c
index de0176cd20c..4c11a1f7ada 100644
--- a/target/openrisc/cpu.c
+++ b/target/openrisc/cpu.c
@@ -70,13 +70,15 @@ static void openrisc_disas_set_info(CPUState *cpu, disassemble_info *info)
     info->print_insn = print_insn_or1k;
 }
 
-static void openrisc_cpu_reset(DeviceState *dev)
+static void openrisc_cpu_reset_hold(Object *obj)
 {
-    CPUState *s = CPU(dev);
+    CPUState *s = CPU(obj);
     OpenRISCCPU *cpu = OPENRISC_CPU(s);
     OpenRISCCPUClass *occ = OPENRISC_CPU_GET_CLASS(cpu);
 
-    occ->parent_reset(dev);
+    if (occ->parent_phases.hold) {
+        occ->parent_phases.hold(obj);
+    }
 
     memset(&cpu->env, 0, offsetof(CPUOpenRISCState, end_reset_fields));
 
@@ -229,10 +231,12 @@ static void openrisc_cpu_class_init(ObjectClass *oc, void *data)
     OpenRISCCPUClass *occ = OPENRISC_CPU_CLASS(oc);
     CPUClass *cc = CPU_CLASS(occ);
     DeviceClass *dc = DEVICE_CLASS(oc);
+    ResettableClass *rc = RESETTABLE_CLASS(oc);
 
     device_class_set_parent_realize(dc, openrisc_cpu_realizefn,
                                     &occ->parent_realize);
-    device_class_set_parent_reset(dc, openrisc_cpu_reset, &occ->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, openrisc_cpu_reset_hold, NULL,
+                                       &occ->parent_phases);
 
     cc->class_by_name = openrisc_cpu_class_by_name;
     cc->has_work = openrisc_cpu_has_work;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 13/19] target/ppc: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (11 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 12/19] target/openrisc: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-24 15:15   ` Cédric Le Goater
  2022-11-24 15:18   ` Greg Kurz
  2022-11-24 11:50 ` [PATCH for-8.0 14/19] target/riscv: " Peter Maydell
                   ` (8 subsequent siblings)
  21 siblings, 2 replies; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the ppc CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/ppc/cpu-qom.h  |  4 ++--
 target/ppc/cpu_init.c | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/target/ppc/cpu-qom.h b/target/ppc/cpu-qom.h
index 89ff88f28c9..0fbd8b72468 100644
--- a/target/ppc/cpu-qom.h
+++ b/target/ppc/cpu-qom.h
@@ -143,7 +143,7 @@ typedef struct PPCHash64Options PPCHash64Options;
 /**
  * PowerPCCPUClass:
  * @parent_realize: The parent class' realize handler.
- * @parent_reset: The parent class' reset handler.
+ * @parent_phases: The parent class' reset phase handlers.
  *
  * A PowerPC CPU model.
  */
@@ -154,7 +154,7 @@ struct PowerPCCPUClass {
 
     DeviceRealize parent_realize;
     DeviceUnrealize parent_unrealize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
     void (*parent_parse_features)(const char *type, char *str, Error **errp);
 
     uint32_t pvr;
diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c
index cbf00813743..95d25856a0e 100644
--- a/target/ppc/cpu_init.c
+++ b/target/ppc/cpu_init.c
@@ -7031,16 +7031,18 @@ static bool ppc_cpu_has_work(CPUState *cs)
     return cs->interrupt_request & CPU_INTERRUPT_HARD;
 }
 
-static void ppc_cpu_reset(DeviceState *dev)
+static void ppc_cpu_reset_hold(Object *obj)
 {
-    CPUState *s = CPU(dev);
+    CPUState *s = CPU(obj);
     PowerPCCPU *cpu = POWERPC_CPU(s);
     PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
     CPUPPCState *env = &cpu->env;
     target_ulong msr;
     int i;
 
-    pcc->parent_reset(dev);
+    if (pcc->parent_phases.hold) {
+        pcc->parent_phases.hold(obj);
+    }
 
     msr = (target_ulong)0;
     msr |= (target_ulong)MSR_HVB;
@@ -7267,6 +7269,7 @@ static void ppc_cpu_class_init(ObjectClass *oc, void *data)
     PowerPCCPUClass *pcc = POWERPC_CPU_CLASS(oc);
     CPUClass *cc = CPU_CLASS(oc);
     DeviceClass *dc = DEVICE_CLASS(oc);
+    ResettableClass *rc = RESETTABLE_CLASS(oc);
 
     device_class_set_parent_realize(dc, ppc_cpu_realize,
                                     &pcc->parent_realize);
@@ -7275,7 +7278,8 @@ static void ppc_cpu_class_init(ObjectClass *oc, void *data)
     pcc->pvr_match = ppc_pvr_match_default;
     device_class_set_props(dc, ppc_cpu_properties);
 
-    device_class_set_parent_reset(dc, ppc_cpu_reset, &pcc->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, ppc_cpu_reset_hold, NULL,
+                                       &pcc->parent_phases);
 
     cc->class_by_name = ppc_cpu_class_by_name;
     cc->has_work = ppc_cpu_has_work;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 14/19] target/riscv: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (12 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 13/19] target/ppc: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-27 22:29   ` Alistair Francis
  2022-11-24 11:50 ` [PATCH for-8.0 15/19] target/rx: " Peter Maydell
                   ` (7 subsequent siblings)
  21 siblings, 1 reply; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the riscv CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/riscv/cpu.h |  4 ++--
 target/riscv/cpu.c | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
index 3a9e25053f8..443d15a47c0 100644
--- a/target/riscv/cpu.h
+++ b/target/riscv/cpu.h
@@ -395,7 +395,7 @@ OBJECT_DECLARE_CPU_TYPE(RISCVCPU, RISCVCPUClass, RISCV_CPU)
 /**
  * RISCVCPUClass:
  * @parent_realize: The parent class' realize handler.
- * @parent_reset: The parent class' reset handler.
+ * @parent_phases: The parent class' reset phase handlers.
  *
  * A RISCV CPU model.
  */
@@ -404,7 +404,7 @@ struct RISCVCPUClass {
     CPUClass parent_class;
     /*< public >*/
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
 };
 
 struct RISCVCPUConfig {
diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
index d14e95c9dc1..6fe176e4833 100644
--- a/target/riscv/cpu.c
+++ b/target/riscv/cpu.c
@@ -519,18 +519,20 @@ static void riscv_restore_state_to_opc(CPUState *cs,
     env->bins = data[1];
 }
 
-static void riscv_cpu_reset(DeviceState *dev)
+static void riscv_cpu_reset_hold(Object *obj)
 {
 #ifndef CONFIG_USER_ONLY
     uint8_t iprio;
     int i, irq, rdzero;
 #endif
-    CPUState *cs = CPU(dev);
+    CPUState *cs = CPU(obj);
     RISCVCPU *cpu = RISCV_CPU(cs);
     RISCVCPUClass *mcc = RISCV_CPU_GET_CLASS(cpu);
     CPURISCVState *env = &cpu->env;
 
-    mcc->parent_reset(dev);
+    if (mcc->parent_phases.hold) {
+        mcc->parent_phases.hold(obj);
+    }
 #ifndef CONFIG_USER_ONLY
     env->misa_mxl = env->misa_mxl_max;
     env->priv = PRV_M;
@@ -1161,11 +1163,13 @@ static void riscv_cpu_class_init(ObjectClass *c, void *data)
     RISCVCPUClass *mcc = RISCV_CPU_CLASS(c);
     CPUClass *cc = CPU_CLASS(c);
     DeviceClass *dc = DEVICE_CLASS(c);
+    ResettableClass *rc = RESETTABLE_CLASS(c);
 
     device_class_set_parent_realize(dc, riscv_cpu_realize,
                                     &mcc->parent_realize);
 
-    device_class_set_parent_reset(dc, riscv_cpu_reset, &mcc->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, riscv_cpu_reset_hold, NULL,
+                                       &mcc->parent_phases);
 
     cc->class_by_name = riscv_cpu_class_by_name;
     cc->has_work = riscv_cpu_has_work;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 15/19] target/rx: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (13 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 14/19] target/riscv: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-24 11:50 ` [PATCH for-8.0 16/19] target/sh4: " Peter Maydell
                   ` (6 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the rx CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/rx/cpu-qom.h |  4 ++--
 target/rx/cpu.c     | 13 ++++++++-----
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/target/rx/cpu-qom.h b/target/rx/cpu-qom.h
index 4533759d966..1c8466a1870 100644
--- a/target/rx/cpu-qom.h
+++ b/target/rx/cpu-qom.h
@@ -31,7 +31,7 @@ OBJECT_DECLARE_CPU_TYPE(RXCPU, RXCPUClass, RX_CPU)
 /*
  * RXCPUClass:
  * @parent_realize: The parent class' realize handler.
- * @parent_reset: The parent class' reset handler.
+ * @parent_phases: The parent class' reset phase handlers.
  *
  * A RX CPU model.
  */
@@ -41,7 +41,7 @@ struct RXCPUClass {
     /*< public >*/
 
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
 };
 
 #endif
diff --git a/target/rx/cpu.c b/target/rx/cpu.c
index 9003c6e9fed..219ef28e463 100644
--- a/target/rx/cpu.c
+++ b/target/rx/cpu.c
@@ -62,14 +62,16 @@ static bool rx_cpu_has_work(CPUState *cs)
         (CPU_INTERRUPT_HARD | CPU_INTERRUPT_FIR);
 }
 
-static void rx_cpu_reset(DeviceState *dev)
+static void rx_cpu_reset_hold(Object *obj)
 {
-    RXCPU *cpu = RX_CPU(dev);
+    RXCPU *cpu = RX_CPU(obj);
     RXCPUClass *rcc = RX_CPU_GET_CLASS(cpu);
     CPURXState *env = &cpu->env;
     uint32_t *resetvec;
 
-    rcc->parent_reset(dev);
+    if (rcc->parent_phases.hold) {
+        rcc->parent_phases.hold(obj);
+    }
 
     memset(env, 0, offsetof(CPURXState, end_reset_fields));
 
@@ -215,11 +217,12 @@ static void rx_cpu_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     CPUClass *cc = CPU_CLASS(klass);
     RXCPUClass *rcc = RX_CPU_CLASS(klass);
+    ResettableClass *rc = RESETTABLE_CLASS(klass);
 
     device_class_set_parent_realize(dc, rx_cpu_realize,
                                     &rcc->parent_realize);
-    device_class_set_parent_reset(dc, rx_cpu_reset,
-                                  &rcc->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, rx_cpu_reset_hold, NULL,
+                                       &rcc->parent_phases);
 
     cc->class_by_name = rx_cpu_class_by_name;
     cc->has_work = rx_cpu_has_work;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 16/19] target/sh4: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (14 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 15/19] target/rx: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-24 11:50 ` [PATCH for-8.0 17/19] target/sparc: " Peter Maydell
                   ` (5 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the sh4 CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/sh4/cpu-qom.h |  4 ++--
 target/sh4/cpu.c     | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/target/sh4/cpu-qom.h b/target/sh4/cpu-qom.h
index d4192d10908..89785a90f02 100644
--- a/target/sh4/cpu-qom.h
+++ b/target/sh4/cpu-qom.h
@@ -34,7 +34,7 @@ OBJECT_DECLARE_CPU_TYPE(SuperHCPU, SuperHCPUClass, SUPERH_CPU)
 /**
  * SuperHCPUClass:
  * @parent_realize: The parent class' realize handler.
- * @parent_reset: The parent class' reset handler.
+ * @parent_phases: The parent class' reset phase handlers.
  * @pvr: Processor Version Register
  * @prr: Processor Revision Register
  * @cvr: Cache Version Register
@@ -47,7 +47,7 @@ struct SuperHCPUClass {
     /*< public >*/
 
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
 
     uint32_t pvr;
     uint32_t prr;
diff --git a/target/sh4/cpu.c b/target/sh4/cpu.c
index 453268392bf..951eb6b9c8d 100644
--- a/target/sh4/cpu.c
+++ b/target/sh4/cpu.c
@@ -87,14 +87,16 @@ static bool superh_cpu_has_work(CPUState *cs)
     return cs->interrupt_request & CPU_INTERRUPT_HARD;
 }
 
-static void superh_cpu_reset(DeviceState *dev)
+static void superh_cpu_reset_hold(Object *obj)
 {
-    CPUState *s = CPU(dev);
+    CPUState *s = CPU(obj);
     SuperHCPU *cpu = SUPERH_CPU(s);
     SuperHCPUClass *scc = SUPERH_CPU_GET_CLASS(cpu);
     CPUSH4State *env = &cpu->env;
 
-    scc->parent_reset(dev);
+    if (scc->parent_phases.hold) {
+        scc->parent_phases.hold(obj);
+    }
 
     memset(env, 0, offsetof(CPUSH4State, end_reset_fields));
 
@@ -274,11 +276,13 @@ static void superh_cpu_class_init(ObjectClass *oc, void *data)
     DeviceClass *dc = DEVICE_CLASS(oc);
     CPUClass *cc = CPU_CLASS(oc);
     SuperHCPUClass *scc = SUPERH_CPU_CLASS(oc);
+    ResettableClass *rc = RESETTABLE_CLASS(oc);
 
     device_class_set_parent_realize(dc, superh_cpu_realizefn,
                                     &scc->parent_realize);
 
-    device_class_set_parent_reset(dc, superh_cpu_reset, &scc->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, superh_cpu_reset_hold, NULL,
+                                       &scc->parent_phases);
 
     cc->class_by_name = superh_cpu_class_by_name;
     cc->has_work = superh_cpu_has_work;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 17/19] target/sparc: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (15 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 16/19] target/sh4: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-30  9:23   ` Mark Cave-Ayland
  2022-11-24 11:50 ` [PATCH for-8.0 18/19] target/tricore: " Peter Maydell
                   ` (4 subsequent siblings)
  21 siblings, 1 reply; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the sparc CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/sparc/cpu-qom.h |  4 ++--
 target/sparc/cpu.c     | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/target/sparc/cpu-qom.h b/target/sparc/cpu-qom.h
index 86ed37d9333..78bf00b9a23 100644
--- a/target/sparc/cpu-qom.h
+++ b/target/sparc/cpu-qom.h
@@ -35,7 +35,7 @@ typedef struct sparc_def_t sparc_def_t;
 /**
  * SPARCCPUClass:
  * @parent_realize: The parent class' realize handler.
- * @parent_reset: The parent class' reset handler.
+ * @parent_phases: The parent class' reset phase handlers.
  *
  * A SPARC CPU model.
  */
@@ -45,7 +45,7 @@ struct SPARCCPUClass {
     /*< public >*/
 
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
     sparc_def_t *cpu_def;
 };
 
diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
index 4c3d08a8751..1734ef8dc6b 100644
--- a/target/sparc/cpu.c
+++ b/target/sparc/cpu.c
@@ -28,14 +28,16 @@
 
 //#define DEBUG_FEATURES
 
-static void sparc_cpu_reset(DeviceState *dev)
+static void sparc_cpu_reset_hold(Object *obj)
 {
-    CPUState *s = CPU(dev);
+    CPUState *s = CPU(obj);
     SPARCCPU *cpu = SPARC_CPU(s);
     SPARCCPUClass *scc = SPARC_CPU_GET_CLASS(cpu);
     CPUSPARCState *env = &cpu->env;
 
-    scc->parent_reset(dev);
+    if (scc->parent_phases.hold) {
+        scc->parent_phases.hold(obj);
+    }
 
     memset(env, 0, offsetof(CPUSPARCState, end_reset_fields));
     env->cwp = 0;
@@ -889,12 +891,14 @@ static void sparc_cpu_class_init(ObjectClass *oc, void *data)
     SPARCCPUClass *scc = SPARC_CPU_CLASS(oc);
     CPUClass *cc = CPU_CLASS(oc);
     DeviceClass *dc = DEVICE_CLASS(oc);
+    ResettableClass *rc = RESETTABLE_CLASS(oc);
 
     device_class_set_parent_realize(dc, sparc_cpu_realizefn,
                                     &scc->parent_realize);
     device_class_set_props(dc, sparc_cpu_properties);
 
-    device_class_set_parent_reset(dc, sparc_cpu_reset, &scc->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, sparc_cpu_reset_hold, NULL,
+                                       &scc->parent_phases);
 
     cc->class_by_name = sparc_cpu_class_by_name;
     cc->parse_features = sparc_cpu_parse_features;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 18/19] target/tricore: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (16 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 17/19] target/sparc: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-24 11:50 ` [PATCH for-8.0 19/19] target/xtensa: " Peter Maydell
                   ` (3 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the tricore CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/tricore/cpu-qom.h |  2 +-
 target/tricore/cpu.c     | 12 ++++++++----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/target/tricore/cpu-qom.h b/target/tricore/cpu-qom.h
index ee24e9fa76a..612731daa09 100644
--- a/target/tricore/cpu-qom.h
+++ b/target/tricore/cpu-qom.h
@@ -32,7 +32,7 @@ struct TriCoreCPUClass {
     /*< public >*/
 
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
 };
 
 
diff --git a/target/tricore/cpu.c b/target/tricore/cpu.c
index 2c54a2825f8..594cd1efd5e 100644
--- a/target/tricore/cpu.c
+++ b/target/tricore/cpu.c
@@ -68,14 +68,16 @@ static void tricore_restore_state_to_opc(CPUState *cs,
     env->PC = data[0];
 }
 
-static void tricore_cpu_reset(DeviceState *dev)
+static void tricore_cpu_reset_hold(Object *obj)
 {
-    CPUState *s = CPU(dev);
+    CPUState *s = CPU(obj);
     TriCoreCPU *cpu = TRICORE_CPU(s);
     TriCoreCPUClass *tcc = TRICORE_CPU_GET_CLASS(cpu);
     CPUTriCoreState *env = &cpu->env;
 
-    tcc->parent_reset(dev);
+    if (tcc->parent_phases.hold) {
+        tcc->parent_phases.hold(obj);
+    }
 
     cpu_state_reset(env);
 }
@@ -180,11 +182,13 @@ static void tricore_cpu_class_init(ObjectClass *c, void *data)
     TriCoreCPUClass *mcc = TRICORE_CPU_CLASS(c);
     CPUClass *cc = CPU_CLASS(c);
     DeviceClass *dc = DEVICE_CLASS(c);
+    ResettableClass *rc = RESETTABLE_CLASS(c);
 
     device_class_set_parent_realize(dc, tricore_cpu_realizefn,
                                     &mcc->parent_realize);
 
-    device_class_set_parent_reset(dc, tricore_cpu_reset, &mcc->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, tricore_cpu_reset_hold, NULL,
+                                       &mcc->parent_phases);
     cc->class_by_name = tricore_cpu_class_by_name;
     cc->has_work = tricore_cpu_has_work;
 
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* [PATCH for-8.0 19/19] target/xtensa: Convert to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (17 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 18/19] target/tricore: " Peter Maydell
@ 2022-11-24 11:50 ` Peter Maydell
  2022-11-24 13:46 ` [PATCH for-8.0 00/19] Convert most CPU classes " Philippe Mathieu-Daudé
                   ` (2 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Peter Maydell @ 2022-11-24 11:50 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

Convert the xtensa CPU class to use 3-phase reset, so it doesn't
need to use device_class_set_parent_reset() any more.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
 target/xtensa/cpu-qom.h |  4 ++--
 target/xtensa/cpu.c     | 12 ++++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/target/xtensa/cpu-qom.h b/target/xtensa/cpu-qom.h
index 4fc35ee49b8..419c7d8e4a3 100644
--- a/target/xtensa/cpu-qom.h
+++ b/target/xtensa/cpu-qom.h
@@ -41,7 +41,7 @@ typedef struct XtensaConfig XtensaConfig;
 /**
  * XtensaCPUClass:
  * @parent_realize: The parent class' realize handler.
- * @parent_reset: The parent class' reset handler.
+ * @parent_phases: The parent class' reset phase handlers.
  * @config: The CPU core configuration.
  *
  * An Xtensa CPU model.
@@ -52,7 +52,7 @@ struct XtensaCPUClass {
     /*< public >*/
 
     DeviceRealize parent_realize;
-    DeviceReset parent_reset;
+    ResettablePhases parent_phases;
 
     const XtensaConfig *config;
 };
diff --git a/target/xtensa/cpu.c b/target/xtensa/cpu.c
index 09923301c40..2dc8f2d232f 100644
--- a/target/xtensa/cpu.c
+++ b/target/xtensa/cpu.c
@@ -85,16 +85,18 @@ bool xtensa_abi_call0(void)
 }
 #endif
 
-static void xtensa_cpu_reset(DeviceState *dev)
+static void xtensa_cpu_reset_hold(Object *obj)
 {
-    CPUState *s = CPU(dev);
+    CPUState *s = CPU(obj);
     XtensaCPU *cpu = XTENSA_CPU(s);
     XtensaCPUClass *xcc = XTENSA_CPU_GET_CLASS(cpu);
     CPUXtensaState *env = &cpu->env;
     bool dfpu = xtensa_option_enabled(env->config,
                                       XTENSA_OPTION_DFP_COPROCESSOR);
 
-    xcc->parent_reset(dev);
+    if (xcc->parent_phases.hold) {
+        xcc->parent_phases.hold(obj);
+    }
 
     env->pc = env->config->exception_vector[EXC_RESET0 + env->static_vectors];
     env->sregs[LITBASE] &= ~1;
@@ -240,11 +242,13 @@ static void xtensa_cpu_class_init(ObjectClass *oc, void *data)
     DeviceClass *dc = DEVICE_CLASS(oc);
     CPUClass *cc = CPU_CLASS(oc);
     XtensaCPUClass *xcc = XTENSA_CPU_CLASS(cc);
+    ResettableClass *rc = RESETTABLE_CLASS(oc);
 
     device_class_set_parent_realize(dc, xtensa_cpu_realizefn,
                                     &xcc->parent_realize);
 
-    device_class_set_parent_reset(dc, xtensa_cpu_reset, &xcc->parent_reset);
+    resettable_class_set_parent_phases(rc, NULL, xtensa_cpu_reset_hold, NULL,
+                                       &xcc->parent_phases);
 
     cc->class_by_name = xtensa_cpu_class_by_name;
     cc->has_work = xtensa_cpu_has_work;
-- 
2.25.1



^ permalink raw reply related	[flat|nested] 36+ messages in thread

* Re: [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (18 preceding siblings ...)
  2022-11-24 11:50 ` [PATCH for-8.0 19/19] target/xtensa: " Peter Maydell
@ 2022-11-24 13:46 ` Philippe Mathieu-Daudé
  2022-11-30 10:51   ` Philippe Mathieu-Daudé
  2022-11-26 15:50 ` Richard Henderson
  2022-12-16 16:02 ` Peter Maydell
  21 siblings, 1 reply; 36+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-11-24 13:46 UTC (permalink / raw)
  To: Peter Maydell, qemu-devel
  Cc: Michael Rolnik, Edgar E. Iglesias, Taylor Simpson, Song Gao,
	Xiaojuan Yang, Laurent Vivier, Aurelien Jarno, Jiaxun Yang,
	Aleksandar Rikalo, Chris Wulff, Marek Vasut, Stafford Horne,
	Daniel Henrique Barboza, Cédric Le Goater, David Gibson,
	Greg Kurz, Palmer Dabbelt, Alistair Francis, Bin Meng,
	Yoshinori Sato, Mark Cave-Ayland, Artyom Tarasenko,
	Bastian Koppelmann, Max Filippov, qemu-arm, qemu-ppc, qemu-riscv

On 24/11/22 12:50, Peter Maydell wrote:
> This patchset converts the TYPE_CPU base class and most subclasses
> to use 3-phase reset. (The exception is s390, which is doing
> something a bit odd with its reset, so the conversion there isn't
> going to be simple like these others. So I'll do that one
> separately.)
> 
> The rationale here is that we should be able to get rid of
> all the remaining uses of device_class_set_parent_reset()
> and remove/simplify some of the transitional code that's
> currently bridging between "legacy" reset and 3-phase reset.
> 
> NB: even with this series, it's not possible to usefully do
> anything requiring 3-phase reset of a CPU yet, because all
> CPU objects get ad-hoc reset by some code somewhere doing
> a cpu_reset() call on them, which will just do all 3 phases
> in order. I would like to try to address that eventually,
> but it's not trivial.
> 
> thanks
> -- PMM
> 
> Peter Maydell (19):
>    hw/core/cpu-common: Convert TYPE_CPU class to 3-phase reset
>    target/arm: Convert to 3-phase reset
>    target/avr: Convert to 3-phase reset
>    target/cris: Convert to 3-phase reset
>    target/hexagon: Convert to 3-phase reset
>    target/i386: Convert to 3-phase reset
>    target/loongarch: Convert to 3-phase reset
>    target/m68k: Convert to 3-phase reset
>    target/microblaze: Convert to 3-phase reset
>    target/mips: Convert to 3-phase reset
>    target/nios2: Convert to 3-phase reset
>    target/openrisc: Convert to 3-phase reset
>    target/ppc: Convert to 3-phase reset
>    target/riscv: Convert to 3-phase reset
>    target/rx: Convert to 3-phase reset
>    target/sh4: Convert to 3-phase reset
>    target/sparc: Convert to 3-phase reset
>    target/tricore: Convert to 3-phase reset
>    target/xtensa: Convert to 3-phase reset

Series:
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>



^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH for-8.0 04/19] target/cris: Convert to 3-phase reset
  2022-11-24 11:50 ` [PATCH for-8.0 04/19] target/cris: " Peter Maydell
@ 2022-11-24 14:44   ` Edgar E. Iglesias
  0 siblings, 0 replies; 36+ messages in thread
From: Edgar E. Iglesias @ 2022-11-24 14:44 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-devel, Michael Rolnik, Taylor Simpson, Song Gao,
	Xiaojuan Yang, Laurent Vivier, Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

On Thu, Nov 24, 2022 at 11:50:07AM +0000, Peter Maydell wrote:
> Convert the cris CPU class to use 3-phase reset, so it doesn't
> need to use device_class_set_parent_reset() any more.


Reviewed-by: Edgar E. Iglesias <edgar@zeroasic.com>



> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
>  target/cris/cpu-qom.h |  4 ++--
>  target/cris/cpu.c     | 12 ++++++++----
>  2 files changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/target/cris/cpu-qom.h b/target/cris/cpu-qom.h
> index 71e8af0e70a..431a1d536a9 100644
> --- a/target/cris/cpu-qom.h
> +++ b/target/cris/cpu-qom.h
> @@ -30,7 +30,7 @@ OBJECT_DECLARE_CPU_TYPE(CRISCPU, CRISCPUClass, CRIS_CPU)
>  /**
>   * CRISCPUClass:
>   * @parent_realize: The parent class' realize handler.
> - * @parent_reset: The parent class' reset handler.
> + * @parent_phases: The parent class' reset phase handlers.
>   * @vr: Version Register value.
>   *
>   * A CRIS CPU model.
> @@ -41,7 +41,7 @@ struct CRISCPUClass {
>      /*< public >*/
>  
>      DeviceRealize parent_realize;
> -    DeviceReset parent_reset;
> +    ResettablePhases parent_phases;
>  
>      uint32_t vr;
>  };
> diff --git a/target/cris/cpu.c b/target/cris/cpu.c
> index fb05dc6f9ab..a6a93c23595 100644
> --- a/target/cris/cpu.c
> +++ b/target/cris/cpu.c
> @@ -56,15 +56,17 @@ static bool cris_cpu_has_work(CPUState *cs)
>      return cs->interrupt_request & (CPU_INTERRUPT_HARD | CPU_INTERRUPT_NMI);
>  }
>  
> -static void cris_cpu_reset(DeviceState *dev)
> +static void cris_cpu_reset_hold(Object *obj)
>  {
> -    CPUState *s = CPU(dev);
> +    CPUState *s = CPU(obj);
>      CRISCPU *cpu = CRIS_CPU(s);
>      CRISCPUClass *ccc = CRIS_CPU_GET_CLASS(cpu);
>      CPUCRISState *env = &cpu->env;
>      uint32_t vr;
>  
> -    ccc->parent_reset(dev);
> +    if (ccc->parent_phases.hold) {
> +        ccc->parent_phases.hold(obj);
> +    }
>  
>      vr = env->pregs[PR_VR];
>      memset(env, 0, offsetof(CPUCRISState, end_reset_fields));
> @@ -305,11 +307,13 @@ static void cris_cpu_class_init(ObjectClass *oc, void *data)
>      DeviceClass *dc = DEVICE_CLASS(oc);
>      CPUClass *cc = CPU_CLASS(oc);
>      CRISCPUClass *ccc = CRIS_CPU_CLASS(oc);
> +    ResettableClass *rc = RESETTABLE_CLASS(oc);
>  
>      device_class_set_parent_realize(dc, cris_cpu_realizefn,
>                                      &ccc->parent_realize);
>  
> -    device_class_set_parent_reset(dc, cris_cpu_reset, &ccc->parent_reset);
> +    resettable_class_set_parent_phases(rc, NULL, cris_cpu_reset_hold, NULL,
> +                                       &ccc->parent_phases);
>  
>      cc->class_by_name = cris_cpu_class_by_name;
>      cc->has_work = cris_cpu_has_work;
> -- 
> 2.25.1
> 


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH for-8.0 09/19] target/microblaze: Convert to 3-phase reset
  2022-11-24 11:50 ` [PATCH for-8.0 09/19] target/microblaze: " Peter Maydell
@ 2022-11-24 14:44   ` Edgar E. Iglesias
  0 siblings, 0 replies; 36+ messages in thread
From: Edgar E. Iglesias @ 2022-11-24 14:44 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-devel, Michael Rolnik, Taylor Simpson, Song Gao,
	Xiaojuan Yang, Laurent Vivier, Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

On Thu, Nov 24, 2022 at 11:50:12AM +0000, Peter Maydell wrote:
> Convert the microblaze CPU class to use 3-phase reset, so it doesn't
> need to use device_class_set_parent_reset() any more.


Reviewed-by: Edgar E. Iglesias <edgar@zeroasic.com>


> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
>  target/microblaze/cpu-qom.h |  4 ++--
>  target/microblaze/cpu.c     | 12 ++++++++----
>  2 files changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/target/microblaze/cpu-qom.h b/target/microblaze/cpu-qom.h
> index 255b39a45df..cda9220fa99 100644
> --- a/target/microblaze/cpu-qom.h
> +++ b/target/microblaze/cpu-qom.h
> @@ -30,7 +30,7 @@ OBJECT_DECLARE_CPU_TYPE(MicroBlazeCPU, MicroBlazeCPUClass, MICROBLAZE_CPU)
>  /**
>   * MicroBlazeCPUClass:
>   * @parent_realize: The parent class' realize handler.
> - * @parent_reset: The parent class' reset handler.
> + * @parent_phases: The parent class' reset phase handlers.
>   *
>   * A MicroBlaze CPU model.
>   */
> @@ -40,7 +40,7 @@ struct MicroBlazeCPUClass {
>      /*< public >*/
>  
>      DeviceRealize parent_realize;
> -    DeviceReset parent_reset;
> +    ResettablePhases parent_phases;
>  };
>  
>  
> diff --git a/target/microblaze/cpu.c b/target/microblaze/cpu.c
> index 89e493f3ff7..817681f9b21 100644
> --- a/target/microblaze/cpu.c
> +++ b/target/microblaze/cpu.c
> @@ -162,14 +162,16 @@ static void microblaze_cpu_set_irq(void *opaque, int irq, int level)
>  }
>  #endif
>  
> -static void mb_cpu_reset(DeviceState *dev)
> +static void mb_cpu_reset_hold(Object *obj)
>  {
> -    CPUState *s = CPU(dev);
> +    CPUState *s = CPU(obj);
>      MicroBlazeCPU *cpu = MICROBLAZE_CPU(s);
>      MicroBlazeCPUClass *mcc = MICROBLAZE_CPU_GET_CLASS(cpu);
>      CPUMBState *env = &cpu->env;
>  
> -    mcc->parent_reset(dev);
> +    if (mcc->parent_phases.hold) {
> +        mcc->parent_phases.hold(obj);
> +    }
>  
>      memset(env, 0, offsetof(CPUMBState, end_reset_fields));
>      env->res_addr = RES_ADDR_NONE;
> @@ -399,10 +401,12 @@ static void mb_cpu_class_init(ObjectClass *oc, void *data)
>      DeviceClass *dc = DEVICE_CLASS(oc);
>      CPUClass *cc = CPU_CLASS(oc);
>      MicroBlazeCPUClass *mcc = MICROBLAZE_CPU_CLASS(oc);
> +    ResettableClass *rc = RESETTABLE_CLASS(oc);
>  
>      device_class_set_parent_realize(dc, mb_cpu_realizefn,
>                                      &mcc->parent_realize);
> -    device_class_set_parent_reset(dc, mb_cpu_reset, &mcc->parent_reset);
> +    resettable_class_set_parent_phases(rc, NULL, mb_cpu_reset_hold, NULL,
> +                                       &mcc->parent_phases);
>  
>      cc->class_by_name = mb_cpu_class_by_name;
>      cc->has_work = mb_cpu_has_work;
> -- 
> 2.25.1
> 


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH for-8.0 13/19] target/ppc: Convert to 3-phase reset
  2022-11-24 11:50 ` [PATCH for-8.0 13/19] target/ppc: " Peter Maydell
@ 2022-11-24 15:15   ` Cédric Le Goater
  2022-11-24 15:18   ` Greg Kurz
  1 sibling, 0 replies; 36+ messages in thread
From: Cédric Le Goater @ 2022-11-24 15:15 UTC (permalink / raw)
  To: Peter Maydell, qemu-devel
  Cc: Michael Rolnik, Edgar E. Iglesias, Taylor Simpson, Song Gao,
	Xiaojuan Yang, Laurent Vivier, Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	David Gibson, Greg Kurz, Palmer Dabbelt, Alistair Francis,
	Bin Meng, Yoshinori Sato, Mark Cave-Ayland, Artyom Tarasenko,
	Bastian Koppelmann, Max Filippov, qemu-arm, qemu-ppc, qemu-riscv

On 11/24/22 12:50, Peter Maydell wrote:
> Convert the ppc CPU class to use 3-phase reset, so it doesn't
> need to use device_class_set_parent_reset() any more.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Reviewed-by: Cédric Le Goater <clg@kaod.org>

Thanks,

C.

> ---
>   target/ppc/cpu-qom.h  |  4 ++--
>   target/ppc/cpu_init.c | 12 ++++++++----
>   2 files changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/target/ppc/cpu-qom.h b/target/ppc/cpu-qom.h
> index 89ff88f28c9..0fbd8b72468 100644
> --- a/target/ppc/cpu-qom.h
> +++ b/target/ppc/cpu-qom.h
> @@ -143,7 +143,7 @@ typedef struct PPCHash64Options PPCHash64Options;
>   /**
>    * PowerPCCPUClass:
>    * @parent_realize: The parent class' realize handler.
> - * @parent_reset: The parent class' reset handler.
> + * @parent_phases: The parent class' reset phase handlers.
>    *
>    * A PowerPC CPU model.
>    */
> @@ -154,7 +154,7 @@ struct PowerPCCPUClass {
>   
>       DeviceRealize parent_realize;
>       DeviceUnrealize parent_unrealize;
> -    DeviceReset parent_reset;
> +    ResettablePhases parent_phases;
>       void (*parent_parse_features)(const char *type, char *str, Error **errp);
>   
>       uint32_t pvr;
> diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c
> index cbf00813743..95d25856a0e 100644
> --- a/target/ppc/cpu_init.c
> +++ b/target/ppc/cpu_init.c
> @@ -7031,16 +7031,18 @@ static bool ppc_cpu_has_work(CPUState *cs)
>       return cs->interrupt_request & CPU_INTERRUPT_HARD;
>   }
>   
> -static void ppc_cpu_reset(DeviceState *dev)
> +static void ppc_cpu_reset_hold(Object *obj)
>   {
> -    CPUState *s = CPU(dev);
> +    CPUState *s = CPU(obj);
>       PowerPCCPU *cpu = POWERPC_CPU(s);
>       PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
>       CPUPPCState *env = &cpu->env;
>       target_ulong msr;
>       int i;
>   
> -    pcc->parent_reset(dev);
> +    if (pcc->parent_phases.hold) {
> +        pcc->parent_phases.hold(obj);
> +    }
>   
>       msr = (target_ulong)0;
>       msr |= (target_ulong)MSR_HVB;
> @@ -7267,6 +7269,7 @@ static void ppc_cpu_class_init(ObjectClass *oc, void *data)
>       PowerPCCPUClass *pcc = POWERPC_CPU_CLASS(oc);
>       CPUClass *cc = CPU_CLASS(oc);
>       DeviceClass *dc = DEVICE_CLASS(oc);
> +    ResettableClass *rc = RESETTABLE_CLASS(oc);
>   
>       device_class_set_parent_realize(dc, ppc_cpu_realize,
>                                       &pcc->parent_realize);
> @@ -7275,7 +7278,8 @@ static void ppc_cpu_class_init(ObjectClass *oc, void *data)
>       pcc->pvr_match = ppc_pvr_match_default;
>       device_class_set_props(dc, ppc_cpu_properties);
>   
> -    device_class_set_parent_reset(dc, ppc_cpu_reset, &pcc->parent_reset);
> +    resettable_class_set_parent_phases(rc, NULL, ppc_cpu_reset_hold, NULL,
> +                                       &pcc->parent_phases);
>   
>       cc->class_by_name = ppc_cpu_class_by_name;
>       cc->has_work = ppc_cpu_has_work;



^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH for-8.0 02/19] target/arm: Convert to 3-phase reset
  2022-11-24 11:50 ` [PATCH for-8.0 02/19] target/arm: Convert " Peter Maydell
@ 2022-11-24 15:15   ` Cédric Le Goater
  2022-11-27 22:28   ` Alistair Francis
  1 sibling, 0 replies; 36+ messages in thread
From: Cédric Le Goater @ 2022-11-24 15:15 UTC (permalink / raw)
  To: Peter Maydell, qemu-devel
  Cc: Michael Rolnik, Edgar E. Iglesias, Taylor Simpson, Song Gao,
	Xiaojuan Yang, Laurent Vivier, Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	David Gibson, Greg Kurz, Palmer Dabbelt, Alistair Francis,
	Bin Meng, Yoshinori Sato, Mark Cave-Ayland, Artyom Tarasenko,
	Bastian Koppelmann, Max Filippov, qemu-arm, qemu-ppc, qemu-riscv

On 11/24/22 12:50, Peter Maydell wrote:
> Convert the Arm CPU class to use 3-phase reset, so it doesn't
> need to use device_class_set_parent_reset() any more.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Reviewed-by: Cédric Le Goater <clg@kaod.org>

Thanks,

C.


> ---
>   target/arm/cpu-qom.h |  4 ++--
>   target/arm/cpu.c     | 13 +++++++++----
>   2 files changed, 11 insertions(+), 6 deletions(-)
> 
> diff --git a/target/arm/cpu-qom.h b/target/arm/cpu-qom.h
> index 64c44cef2dd..514c22ced9b 100644
> --- a/target/arm/cpu-qom.h
> +++ b/target/arm/cpu-qom.h
> @@ -43,7 +43,7 @@ void aarch64_cpu_register(const ARMCPUInfo *info);
>   /**
>    * ARMCPUClass:
>    * @parent_realize: The parent class' realize handler.
> - * @parent_reset: The parent class' reset handler.
> + * @parent_phases: The parent class' reset phase handlers.
>    *
>    * An ARM CPU model.
>    */
> @@ -54,7 +54,7 @@ struct ARMCPUClass {
>   
>       const ARMCPUInfo *info;
>       DeviceRealize parent_realize;
> -    DeviceReset parent_reset;
> +    ResettablePhases parent_phases;
>   };
>   
>   
> diff --git a/target/arm/cpu.c b/target/arm/cpu.c
> index a021df9e9e8..5bad065579f 100644
> --- a/target/arm/cpu.c
> +++ b/target/arm/cpu.c
> @@ -202,14 +202,16 @@ static void cp_reg_check_reset(gpointer key, gpointer value,  gpointer opaque)
>       assert(oldvalue == newvalue);
>   }
>   
> -static void arm_cpu_reset(DeviceState *dev)
> +static void arm_cpu_reset_hold(Object *obj)
>   {
> -    CPUState *s = CPU(dev);
> +    CPUState *s = CPU(obj);
>       ARMCPU *cpu = ARM_CPU(s);
>       ARMCPUClass *acc = ARM_CPU_GET_CLASS(cpu);
>       CPUARMState *env = &cpu->env;
>   
> -    acc->parent_reset(dev);
> +    if (acc->parent_phases.hold) {
> +        acc->parent_phases.hold(obj);
> +    }
>   
>       memset(env, 0, offsetof(CPUARMState, end_reset_fields));
>   
> @@ -2210,12 +2212,15 @@ static void arm_cpu_class_init(ObjectClass *oc, void *data)
>       ARMCPUClass *acc = ARM_CPU_CLASS(oc);
>       CPUClass *cc = CPU_CLASS(acc);
>       DeviceClass *dc = DEVICE_CLASS(oc);
> +    ResettableClass *rc = RESETTABLE_CLASS(oc);
>   
>       device_class_set_parent_realize(dc, arm_cpu_realizefn,
>                                       &acc->parent_realize);
>   
>       device_class_set_props(dc, arm_cpu_properties);
> -    device_class_set_parent_reset(dc, arm_cpu_reset, &acc->parent_reset);
> +
> +    resettable_class_set_parent_phases(rc, NULL, arm_cpu_reset_hold, NULL,
> +                                       &acc->parent_phases);
>   
>       cc->class_by_name = arm_cpu_class_by_name;
>       cc->has_work = arm_cpu_has_work;



^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH for-8.0 13/19] target/ppc: Convert to 3-phase reset
  2022-11-24 11:50 ` [PATCH for-8.0 13/19] target/ppc: " Peter Maydell
  2022-11-24 15:15   ` Cédric Le Goater
@ 2022-11-24 15:18   ` Greg Kurz
  1 sibling, 0 replies; 36+ messages in thread
From: Greg Kurz @ 2022-11-24 15:18 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-devel, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

On Thu, 24 Nov 2022 11:50:16 +0000
Peter Maydell <peter.maydell@linaro.org> wrote:

> Convert the ppc CPU class to use 3-phase reset, so it doesn't
> need to use device_class_set_parent_reset() any more.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---

Reviewed-by: Greg Kurz <groug@kaod.org>

>  target/ppc/cpu-qom.h  |  4 ++--
>  target/ppc/cpu_init.c | 12 ++++++++----
>  2 files changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/target/ppc/cpu-qom.h b/target/ppc/cpu-qom.h
> index 89ff88f28c9..0fbd8b72468 100644
> --- a/target/ppc/cpu-qom.h
> +++ b/target/ppc/cpu-qom.h
> @@ -143,7 +143,7 @@ typedef struct PPCHash64Options PPCHash64Options;
>  /**
>   * PowerPCCPUClass:
>   * @parent_realize: The parent class' realize handler.
> - * @parent_reset: The parent class' reset handler.
> + * @parent_phases: The parent class' reset phase handlers.
>   *
>   * A PowerPC CPU model.
>   */
> @@ -154,7 +154,7 @@ struct PowerPCCPUClass {
>  
>      DeviceRealize parent_realize;
>      DeviceUnrealize parent_unrealize;
> -    DeviceReset parent_reset;
> +    ResettablePhases parent_phases;
>      void (*parent_parse_features)(const char *type, char *str, Error **errp);
>  
>      uint32_t pvr;
> diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c
> index cbf00813743..95d25856a0e 100644
> --- a/target/ppc/cpu_init.c
> +++ b/target/ppc/cpu_init.c
> @@ -7031,16 +7031,18 @@ static bool ppc_cpu_has_work(CPUState *cs)
>      return cs->interrupt_request & CPU_INTERRUPT_HARD;
>  }
>  
> -static void ppc_cpu_reset(DeviceState *dev)
> +static void ppc_cpu_reset_hold(Object *obj)
>  {
> -    CPUState *s = CPU(dev);
> +    CPUState *s = CPU(obj);
>      PowerPCCPU *cpu = POWERPC_CPU(s);
>      PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
>      CPUPPCState *env = &cpu->env;
>      target_ulong msr;
>      int i;
>  
> -    pcc->parent_reset(dev);
> +    if (pcc->parent_phases.hold) {
> +        pcc->parent_phases.hold(obj);
> +    }
>  
>      msr = (target_ulong)0;
>      msr |= (target_ulong)MSR_HVB;
> @@ -7267,6 +7269,7 @@ static void ppc_cpu_class_init(ObjectClass *oc, void *data)
>      PowerPCCPUClass *pcc = POWERPC_CPU_CLASS(oc);
>      CPUClass *cc = CPU_CLASS(oc);
>      DeviceClass *dc = DEVICE_CLASS(oc);
> +    ResettableClass *rc = RESETTABLE_CLASS(oc);
>  
>      device_class_set_parent_realize(dc, ppc_cpu_realize,
>                                      &pcc->parent_realize);
> @@ -7275,7 +7278,8 @@ static void ppc_cpu_class_init(ObjectClass *oc, void *data)
>      pcc->pvr_match = ppc_pvr_match_default;
>      device_class_set_props(dc, ppc_cpu_properties);
>  
> -    device_class_set_parent_reset(dc, ppc_cpu_reset, &pcc->parent_reset);
> +    resettable_class_set_parent_phases(rc, NULL, ppc_cpu_reset_hold, NULL,
> +                                       &pcc->parent_phases);
>  
>      cc->class_by_name = ppc_cpu_class_by_name;
>      cc->has_work = ppc_cpu_has_work;



^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (19 preceding siblings ...)
  2022-11-24 13:46 ` [PATCH for-8.0 00/19] Convert most CPU classes " Philippe Mathieu-Daudé
@ 2022-11-26 15:50 ` Richard Henderson
  2022-12-16 16:02 ` Peter Maydell
  21 siblings, 0 replies; 36+ messages in thread
From: Richard Henderson @ 2022-11-26 15:50 UTC (permalink / raw)
  To: Peter Maydell, qemu-devel

On 11/24/22 03:50, Peter Maydell wrote:
> Peter Maydell (19):
>    hw/core/cpu-common: Convert TYPE_CPU class to 3-phase reset
>    target/arm: Convert to 3-phase reset
>    target/avr: Convert to 3-phase reset
>    target/cris: Convert to 3-phase reset
>    target/hexagon: Convert to 3-phase reset
>    target/i386: Convert to 3-phase reset
>    target/loongarch: Convert to 3-phase reset
>    target/m68k: Convert to 3-phase reset
>    target/microblaze: Convert to 3-phase reset
>    target/mips: Convert to 3-phase reset
>    target/nios2: Convert to 3-phase reset
>    target/openrisc: Convert to 3-phase reset
>    target/ppc: Convert to 3-phase reset
>    target/riscv: Convert to 3-phase reset
>    target/rx: Convert to 3-phase reset
>    target/sh4: Convert to 3-phase reset
>    target/sparc: Convert to 3-phase reset
>    target/tricore: Convert to 3-phase reset
>    target/xtensa: Convert to 3-phase reset

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH for-8.0 02/19] target/arm: Convert to 3-phase reset
  2022-11-24 11:50 ` [PATCH for-8.0 02/19] target/arm: Convert " Peter Maydell
  2022-11-24 15:15   ` Cédric Le Goater
@ 2022-11-27 22:28   ` Alistair Francis
  1 sibling, 0 replies; 36+ messages in thread
From: Alistair Francis @ 2022-11-27 22:28 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-devel, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

On Thu, Nov 24, 2022 at 9:58 PM Peter Maydell <peter.maydell@linaro.org> wrote:
>
> Convert the Arm CPU class to use 3-phase reset, so it doesn't
> need to use device_class_set_parent_reset() any more.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
>  target/arm/cpu-qom.h |  4 ++--
>  target/arm/cpu.c     | 13 +++++++++----
>  2 files changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/target/arm/cpu-qom.h b/target/arm/cpu-qom.h
> index 64c44cef2dd..514c22ced9b 100644
> --- a/target/arm/cpu-qom.h
> +++ b/target/arm/cpu-qom.h
> @@ -43,7 +43,7 @@ void aarch64_cpu_register(const ARMCPUInfo *info);
>  /**
>   * ARMCPUClass:
>   * @parent_realize: The parent class' realize handler.
> - * @parent_reset: The parent class' reset handler.
> + * @parent_phases: The parent class' reset phase handlers.
>   *
>   * An ARM CPU model.
>   */
> @@ -54,7 +54,7 @@ struct ARMCPUClass {
>
>      const ARMCPUInfo *info;
>      DeviceRealize parent_realize;
> -    DeviceReset parent_reset;
> +    ResettablePhases parent_phases;
>  };
>
>
> diff --git a/target/arm/cpu.c b/target/arm/cpu.c
> index a021df9e9e8..5bad065579f 100644
> --- a/target/arm/cpu.c
> +++ b/target/arm/cpu.c
> @@ -202,14 +202,16 @@ static void cp_reg_check_reset(gpointer key, gpointer value,  gpointer opaque)
>      assert(oldvalue == newvalue);
>  }
>
> -static void arm_cpu_reset(DeviceState *dev)
> +static void arm_cpu_reset_hold(Object *obj)
>  {
> -    CPUState *s = CPU(dev);
> +    CPUState *s = CPU(obj);
>      ARMCPU *cpu = ARM_CPU(s);
>      ARMCPUClass *acc = ARM_CPU_GET_CLASS(cpu);
>      CPUARMState *env = &cpu->env;
>
> -    acc->parent_reset(dev);
> +    if (acc->parent_phases.hold) {
> +        acc->parent_phases.hold(obj);
> +    }
>
>      memset(env, 0, offsetof(CPUARMState, end_reset_fields));
>
> @@ -2210,12 +2212,15 @@ static void arm_cpu_class_init(ObjectClass *oc, void *data)
>      ARMCPUClass *acc = ARM_CPU_CLASS(oc);
>      CPUClass *cc = CPU_CLASS(acc);
>      DeviceClass *dc = DEVICE_CLASS(oc);
> +    ResettableClass *rc = RESETTABLE_CLASS(oc);
>
>      device_class_set_parent_realize(dc, arm_cpu_realizefn,
>                                      &acc->parent_realize);
>
>      device_class_set_props(dc, arm_cpu_properties);
> -    device_class_set_parent_reset(dc, arm_cpu_reset, &acc->parent_reset);
> +
> +    resettable_class_set_parent_phases(rc, NULL, arm_cpu_reset_hold, NULL,
> +                                       &acc->parent_phases);
>
>      cc->class_by_name = arm_cpu_class_by_name;
>      cc->has_work = arm_cpu_has_work;
> --
> 2.25.1
>
>


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH for-8.0 14/19] target/riscv: Convert to 3-phase reset
  2022-11-24 11:50 ` [PATCH for-8.0 14/19] target/riscv: " Peter Maydell
@ 2022-11-27 22:29   ` Alistair Francis
  0 siblings, 0 replies; 36+ messages in thread
From: Alistair Francis @ 2022-11-27 22:29 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-devel, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

On Thu, Nov 24, 2022 at 10:00 PM Peter Maydell <peter.maydell@linaro.org> wrote:
>
> Convert the riscv CPU class to use 3-phase reset, so it doesn't
> need to use device_class_set_parent_reset() any more.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
>  target/riscv/cpu.h |  4 ++--
>  target/riscv/cpu.c | 12 ++++++++----
>  2 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
> index 3a9e25053f8..443d15a47c0 100644
> --- a/target/riscv/cpu.h
> +++ b/target/riscv/cpu.h
> @@ -395,7 +395,7 @@ OBJECT_DECLARE_CPU_TYPE(RISCVCPU, RISCVCPUClass, RISCV_CPU)
>  /**
>   * RISCVCPUClass:
>   * @parent_realize: The parent class' realize handler.
> - * @parent_reset: The parent class' reset handler.
> + * @parent_phases: The parent class' reset phase handlers.
>   *
>   * A RISCV CPU model.
>   */
> @@ -404,7 +404,7 @@ struct RISCVCPUClass {
>      CPUClass parent_class;
>      /*< public >*/
>      DeviceRealize parent_realize;
> -    DeviceReset parent_reset;
> +    ResettablePhases parent_phases;
>  };
>
>  struct RISCVCPUConfig {
> diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
> index d14e95c9dc1..6fe176e4833 100644
> --- a/target/riscv/cpu.c
> +++ b/target/riscv/cpu.c
> @@ -519,18 +519,20 @@ static void riscv_restore_state_to_opc(CPUState *cs,
>      env->bins = data[1];
>  }
>
> -static void riscv_cpu_reset(DeviceState *dev)
> +static void riscv_cpu_reset_hold(Object *obj)
>  {
>  #ifndef CONFIG_USER_ONLY
>      uint8_t iprio;
>      int i, irq, rdzero;
>  #endif
> -    CPUState *cs = CPU(dev);
> +    CPUState *cs = CPU(obj);
>      RISCVCPU *cpu = RISCV_CPU(cs);
>      RISCVCPUClass *mcc = RISCV_CPU_GET_CLASS(cpu);
>      CPURISCVState *env = &cpu->env;
>
> -    mcc->parent_reset(dev);
> +    if (mcc->parent_phases.hold) {
> +        mcc->parent_phases.hold(obj);
> +    }
>  #ifndef CONFIG_USER_ONLY
>      env->misa_mxl = env->misa_mxl_max;
>      env->priv = PRV_M;
> @@ -1161,11 +1163,13 @@ static void riscv_cpu_class_init(ObjectClass *c, void *data)
>      RISCVCPUClass *mcc = RISCV_CPU_CLASS(c);
>      CPUClass *cc = CPU_CLASS(c);
>      DeviceClass *dc = DEVICE_CLASS(c);
> +    ResettableClass *rc = RESETTABLE_CLASS(c);
>
>      device_class_set_parent_realize(dc, riscv_cpu_realize,
>                                      &mcc->parent_realize);
>
> -    device_class_set_parent_reset(dc, riscv_cpu_reset, &mcc->parent_reset);
> +    resettable_class_set_parent_phases(rc, NULL, riscv_cpu_reset_hold, NULL,
> +                                       &mcc->parent_phases);
>
>      cc->class_by_name = riscv_cpu_class_by_name;
>      cc->has_work = riscv_cpu_has_work;
> --
> 2.25.1
>
>


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH for-8.0 01/19] hw/core/cpu-common: Convert TYPE_CPU class to 3-phase reset
  2022-11-24 11:50 ` [PATCH for-8.0 01/19] hw/core/cpu-common: Convert TYPE_CPU class " Peter Maydell
@ 2022-11-27 22:30   ` Alistair Francis
  0 siblings, 0 replies; 36+ messages in thread
From: Alistair Francis @ 2022-11-27 22:30 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-devel, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier,
	Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

On Thu, Nov 24, 2022 at 9:57 PM Peter Maydell <peter.maydell@linaro.org> wrote:
>
> Convert the parent class TYPE_CPU to 3-phase reset. This
> is a necessary prerequisite to converting the subclasses.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
>  hw/core/cpu-common.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c
> index f9fdd46b9d7..78b5f350a00 100644
> --- a/hw/core/cpu-common.c
> +++ b/hw/core/cpu-common.c
> @@ -116,9 +116,9 @@ void cpu_reset(CPUState *cpu)
>      trace_guest_cpu_reset(cpu);
>  }
>
> -static void cpu_common_reset(DeviceState *dev)
> +static void cpu_common_reset_hold(Object *obj)
>  {
> -    CPUState *cpu = CPU(dev);
> +    CPUState *cpu = CPU(obj);
>      CPUClass *cc = CPU_GET_CLASS(cpu);
>
>      if (qemu_loglevel_mask(CPU_LOG_RESET)) {
> @@ -259,6 +259,7 @@ static int64_t cpu_common_get_arch_id(CPUState *cpu)
>  static void cpu_class_init(ObjectClass *klass, void *data)
>  {
>      DeviceClass *dc = DEVICE_CLASS(klass);
> +    ResettableClass *rc = RESETTABLE_CLASS(klass);
>      CPUClass *k = CPU_CLASS(klass);
>
>      k->parse_features = cpu_common_parse_features;
> @@ -269,7 +270,7 @@ static void cpu_class_init(ObjectClass *klass, void *data)
>      set_bit(DEVICE_CATEGORY_CPU, dc->categories);
>      dc->realize = cpu_common_realizefn;
>      dc->unrealize = cpu_common_unrealizefn;
> -    dc->reset = cpu_common_reset;
> +    rc->phases.hold = cpu_common_reset_hold;
>      cpu_class_init_props(dc);
>      /*
>       * Reason: CPUs still need special care by board code: wiring up
> --
> 2.25.1
>
>


^ permalink raw reply	[flat|nested] 36+ messages in thread

* RE: [PATCH for-8.0 05/19] target/hexagon: Convert to 3-phase reset
  2022-11-24 11:50 ` [PATCH for-8.0 05/19] target/hexagon: " Peter Maydell
@ 2022-11-30  4:38   ` Taylor Simpson
  0 siblings, 0 replies; 36+ messages in thread
From: Taylor Simpson @ 2022-11-30  4:38 UTC (permalink / raw)
  To: Peter Maydell, qemu-devel
  Cc: Michael Rolnik, Edgar E. Iglesias, Song Gao, Xiaojuan Yang,
	Laurent Vivier, Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv



> -----Original Message-----
> From: Peter Maydell <peter.maydell@linaro.org>
> Sent: Thursday, November 24, 2022 5:50 AM
> To: qemu-devel@nongnu.org
> Cc: Peter Maydell <peter.maydell@linaro.org>; Michael Rolnik
> <mrolnik@gmail.com>; Edgar E. Iglesias <edgar.iglesias@gmail.com>; Taylor
> Simpson <tsimpson@quicinc.com>; Song Gao <gaosong@loongson.cn>;
> Xiaojuan Yang <yangxiaojuan@loongson.cn>; Laurent Vivier
> <laurent@vivier.eu>; Philippe Mathieu-Daudé <philmd@linaro.org>;
> Aurelien Jarno <aurelien@aurel32.net>; Jiaxun Yang
> <jiaxun.yang@flygoat.com>; Aleksandar Rikalo
> <aleksandar.rikalo@syrmia.com>; Chris Wulff <crwulff@gmail.com>; Marek
> Vasut <marex@denx.de>; Stafford Horne <shorne@gmail.com>; Daniel
> Henrique Barboza <danielhb413@gmail.com>; Cédric Le Goater
> <clg@kaod.org>; David Gibson <david@gibson.dropbear.id.au>; Greg Kurz
> <groug@kaod.org>; Palmer Dabbelt <palmer@dabbelt.com>; Alistair Francis
> <alistair.francis@wdc.com>; Bin Meng <bin.meng@windriver.com>;
> Yoshinori Sato <ysato@users.sourceforge.jp>; Mark Cave-Ayland
> <mark.cave-ayland@ilande.co.uk>; Artyom Tarasenko
> <atar4qemu@gmail.com>; Bastian Koppelmann <kbastian@mail.uni-
> paderborn.de>; Max Filippov <jcmvbkbc@gmail.com>; qemu-
> arm@nongnu.org; qemu-ppc@nongnu.org; qemu-riscv@nongnu.org
> Subject: [PATCH for-8.0 05/19] target/hexagon: Convert to 3-phase reset
> 
> Convert the hexagon CPU class to use 3-phase reset, so it doesn't need to
> use device_class_set_parent_reset() any more.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
>  target/hexagon/cpu.h |  2 +-
>  target/hexagon/cpu.c | 12 ++++++++----
>  2 files changed, 9 insertions(+), 5 deletions(-)
> 

Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>



^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH for-8.0 17/19] target/sparc: Convert to 3-phase reset
  2022-11-24 11:50 ` [PATCH for-8.0 17/19] target/sparc: " Peter Maydell
@ 2022-11-30  9:23   ` Mark Cave-Ayland
  0 siblings, 0 replies; 36+ messages in thread
From: Mark Cave-Ayland @ 2022-11-30  9:23 UTC (permalink / raw)
  To: Peter Maydell, qemu-devel
  Cc: Michael Rolnik, Edgar E. Iglesias, Taylor Simpson, Song Gao,
	Xiaojuan Yang, Laurent Vivier, Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Artyom Tarasenko,
	Bastian Koppelmann, Max Filippov, qemu-arm, qemu-ppc, qemu-riscv

On 24/11/2022 11:50, Peter Maydell wrote:

> Convert the sparc CPU class to use 3-phase reset, so it doesn't
> need to use device_class_set_parent_reset() any more.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
>   target/sparc/cpu-qom.h |  4 ++--
>   target/sparc/cpu.c     | 12 ++++++++----
>   2 files changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/target/sparc/cpu-qom.h b/target/sparc/cpu-qom.h
> index 86ed37d9333..78bf00b9a23 100644
> --- a/target/sparc/cpu-qom.h
> +++ b/target/sparc/cpu-qom.h
> @@ -35,7 +35,7 @@ typedef struct sparc_def_t sparc_def_t;
>   /**
>    * SPARCCPUClass:
>    * @parent_realize: The parent class' realize handler.
> - * @parent_reset: The parent class' reset handler.
> + * @parent_phases: The parent class' reset phase handlers.
>    *
>    * A SPARC CPU model.
>    */
> @@ -45,7 +45,7 @@ struct SPARCCPUClass {
>       /*< public >*/
>   
>       DeviceRealize parent_realize;
> -    DeviceReset parent_reset;
> +    ResettablePhases parent_phases;
>       sparc_def_t *cpu_def;
>   };
>   
> diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
> index 4c3d08a8751..1734ef8dc6b 100644
> --- a/target/sparc/cpu.c
> +++ b/target/sparc/cpu.c
> @@ -28,14 +28,16 @@
>   
>   //#define DEBUG_FEATURES
>   
> -static void sparc_cpu_reset(DeviceState *dev)
> +static void sparc_cpu_reset_hold(Object *obj)
>   {
> -    CPUState *s = CPU(dev);
> +    CPUState *s = CPU(obj);
>       SPARCCPU *cpu = SPARC_CPU(s);
>       SPARCCPUClass *scc = SPARC_CPU_GET_CLASS(cpu);
>       CPUSPARCState *env = &cpu->env;
>   
> -    scc->parent_reset(dev);
> +    if (scc->parent_phases.hold) {
> +        scc->parent_phases.hold(obj);
> +    }
>   
>       memset(env, 0, offsetof(CPUSPARCState, end_reset_fields));
>       env->cwp = 0;
> @@ -889,12 +891,14 @@ static void sparc_cpu_class_init(ObjectClass *oc, void *data)
>       SPARCCPUClass *scc = SPARC_CPU_CLASS(oc);
>       CPUClass *cc = CPU_CLASS(oc);
>       DeviceClass *dc = DEVICE_CLASS(oc);
> +    ResettableClass *rc = RESETTABLE_CLASS(oc);
>   
>       device_class_set_parent_realize(dc, sparc_cpu_realizefn,
>                                       &scc->parent_realize);
>       device_class_set_props(dc, sparc_cpu_properties);
>   
> -    device_class_set_parent_reset(dc, sparc_cpu_reset, &scc->parent_reset);
> +    resettable_class_set_parent_phases(rc, NULL, sparc_cpu_reset_hold, NULL,
> +                                       &scc->parent_phases);
>   
>       cc->class_by_name = sparc_cpu_class_by_name;
>       cc->parse_features = sparc_cpu_parse_features;

Reviewed-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>


ATB,

Mark.


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset
  2022-11-24 13:46 ` [PATCH for-8.0 00/19] Convert most CPU classes " Philippe Mathieu-Daudé
@ 2022-11-30 10:51   ` Philippe Mathieu-Daudé
  2022-11-30 12:38     ` Peter Maydell
  0 siblings, 1 reply; 36+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-11-30 10:51 UTC (permalink / raw)
  To: Peter Maydell, qemu-devel
  Cc: Michael Rolnik, Edgar E. Iglesias, Taylor Simpson, Song Gao,
	Xiaojuan Yang, Laurent Vivier, Aurelien Jarno, Jiaxun Yang,
	Aleksandar Rikalo, Chris Wulff, Marek Vasut, Stafford Horne,
	Daniel Henrique Barboza, Cédric Le Goater, David Gibson,
	Greg Kurz, Palmer Dabbelt, Alistair Francis, Bin Meng,
	Yoshinori Sato, Mark Cave-Ayland, Artyom Tarasenko,
	Bastian Koppelmann, Max Filippov, qemu-arm, qemu-ppc, qemu-riscv

On 24/11/22 14:46, Philippe Mathieu-Daudé wrote:
> On 24/11/22 12:50, Peter Maydell wrote:
>> This patchset converts the TYPE_CPU base class and most subclasses
>> to use 3-phase reset. (The exception is s390, which is doing
>> something a bit odd with its reset, so the conversion there isn't
>> going to be simple like these others. So I'll do that one
>> separately.)
Note, we can then remove scripts/coccinelle/cpu-reset.cocci.


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset
  2022-11-30 10:51   ` Philippe Mathieu-Daudé
@ 2022-11-30 12:38     ` Peter Maydell
  2022-11-30 13:22       ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 36+ messages in thread
From: Peter Maydell @ 2022-11-30 12:38 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: qemu-devel, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier, Aurelien Jarno,
	Jiaxun Yang, Aleksandar Rikalo, Chris Wulff, Marek Vasut,
	Stafford Horne, Daniel Henrique Barboza, Cédric Le Goater,
	David Gibson, Greg Kurz, Palmer Dabbelt, Alistair Francis,
	Bin Meng, Yoshinori Sato, Mark Cave-Ayland, Artyom Tarasenko,
	Bastian Koppelmann, Max Filippov, qemu-arm, qemu-ppc, qemu-riscv

On Wed, 30 Nov 2022 at 10:51, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>
> On 24/11/22 14:46, Philippe Mathieu-Daudé wrote:
> > On 24/11/22 12:50, Peter Maydell wrote:
> >> This patchset converts the TYPE_CPU base class and most subclasses
> >> to use 3-phase reset. (The exception is s390, which is doing
> >> something a bit odd with its reset, so the conversion there isn't
> >> going to be simple like these others. So I'll do that one
> >> separately.)
> Note, we can then remove scripts/coccinelle/cpu-reset.cocci.

What's our usual practice for out-of-date conversion coccinelle
scripts? That particular script was "we'll never need this again"
pretty much from the moment it was checked in, because we did
the conversion of all the targets in one go. But it's still
useful in some sense as a "this is an example of how to do
this kind of change with a coccinelle script"...

thanks
-- PMM


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset
  2022-11-30 12:38     ` Peter Maydell
@ 2022-11-30 13:22       ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 36+ messages in thread
From: Philippe Mathieu-Daudé @ 2022-11-30 13:22 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-devel, Michael Rolnik, Edgar E. Iglesias, Taylor Simpson,
	Song Gao, Xiaojuan Yang, Laurent Vivier, Aurelien Jarno,
	Jiaxun Yang, Aleksandar Rikalo, Chris Wulff, Marek Vasut,
	Stafford Horne, Daniel Henrique Barboza, Cédric Le Goater,
	David Gibson, Greg Kurz, Palmer Dabbelt, Alistair Francis,
	Bin Meng, Yoshinori Sato, Mark Cave-Ayland, Artyom Tarasenko,
	Bastian Koppelmann, Max Filippov, qemu-arm, qemu-ppc, qemu-riscv

On 30/11/22 13:38, Peter Maydell wrote:
> On Wed, 30 Nov 2022 at 10:51, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>>
>> On 24/11/22 14:46, Philippe Mathieu-Daudé wrote:
>>> On 24/11/22 12:50, Peter Maydell wrote:
>>>> This patchset converts the TYPE_CPU base class and most subclasses
>>>> to use 3-phase reset. (The exception is s390, which is doing
>>>> something a bit odd with its reset, so the conversion there isn't
>>>> going to be simple like these others. So I'll do that one
>>>> separately.)
>> Note, we can then remove scripts/coccinelle/cpu-reset.cocci.
> 
> What's our usual practice for out-of-date conversion coccinelle
> scripts? That particular script was "we'll never need this again"
> pretty much from the moment it was checked in, because we did
> the conversion of all the targets in one go. But it's still
> useful in some sense as a "this is an example of how to do
> this kind of change with a coccinelle script"...

The pattern I observed last years is:

  (a) If one-shot transformation, log the script in the commit
      description,

  (b) If the script can be used again in the future, commit it
      in scripts/coccinelle/,

  (c) Complex scripts are committed in scripts/coccinelle/ as
      example/reference.

I am fine keeping scripts/coccinelle/cpu-reset.cocci as an
example (c).

Regards,

Phil.


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset
  2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
                   ` (20 preceding siblings ...)
  2022-11-26 15:50 ` Richard Henderson
@ 2022-12-16 16:02 ` Peter Maydell
  21 siblings, 0 replies; 36+ messages in thread
From: Peter Maydell @ 2022-12-16 16:02 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael Rolnik, Edgar E. Iglesias, Taylor Simpson, Song Gao,
	Xiaojuan Yang, Laurent Vivier, Philippe Mathieu-Daudé,
	Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo, Chris Wulff,
	Marek Vasut, Stafford Horne, Daniel Henrique Barboza,
	Cédric Le Goater, David Gibson, Greg Kurz, Palmer Dabbelt,
	Alistair Francis, Bin Meng, Yoshinori Sato, Mark Cave-Ayland,
	Artyom Tarasenko, Bastian Koppelmann, Max Filippov, qemu-arm,
	qemu-ppc, qemu-riscv

On Thu, 24 Nov 2022 at 11:50, Peter Maydell <peter.maydell@linaro.org> wrote:
>
> This patchset converts the TYPE_CPU base class and most subclasses
> to use 3-phase reset. (The exception is s390, which is doing
> something a bit odd with its reset, so the conversion there isn't
> going to be simple like these others. So I'll do that one
> separately.)

I plan to pick these up and send them in in a pullreq with
various other reset-related patches of mine.

thanks
-- PMM


^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2022-12-16 16:03 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-24 11:50 [PATCH for-8.0 00/19] Convert most CPU classes to 3-phase reset Peter Maydell
2022-11-24 11:50 ` [PATCH for-8.0 01/19] hw/core/cpu-common: Convert TYPE_CPU class " Peter Maydell
2022-11-27 22:30   ` Alistair Francis
2022-11-24 11:50 ` [PATCH for-8.0 02/19] target/arm: Convert " Peter Maydell
2022-11-24 15:15   ` Cédric Le Goater
2022-11-27 22:28   ` Alistair Francis
2022-11-24 11:50 ` [PATCH for-8.0 03/19] target/avr: " Peter Maydell
2022-11-24 11:50 ` [PATCH for-8.0 04/19] target/cris: " Peter Maydell
2022-11-24 14:44   ` Edgar E. Iglesias
2022-11-24 11:50 ` [PATCH for-8.0 05/19] target/hexagon: " Peter Maydell
2022-11-30  4:38   ` Taylor Simpson
2022-11-24 11:50 ` [PATCH for-8.0 06/19] target/i386: " Peter Maydell
2022-11-24 11:50 ` [PATCH for-8.0 07/19] target/loongarch: " Peter Maydell
2022-11-24 11:50 ` [PATCH for-8.0 08/19] target/m68k: " Peter Maydell
2022-11-24 11:50 ` [PATCH for-8.0 09/19] target/microblaze: " Peter Maydell
2022-11-24 14:44   ` Edgar E. Iglesias
2022-11-24 11:50 ` [PATCH for-8.0 10/19] target/mips: " Peter Maydell
2022-11-24 11:50 ` [PATCH for-8.0 11/19] target/nios2: " Peter Maydell
2022-11-24 11:50 ` [PATCH for-8.0 12/19] target/openrisc: " Peter Maydell
2022-11-24 11:50 ` [PATCH for-8.0 13/19] target/ppc: " Peter Maydell
2022-11-24 15:15   ` Cédric Le Goater
2022-11-24 15:18   ` Greg Kurz
2022-11-24 11:50 ` [PATCH for-8.0 14/19] target/riscv: " Peter Maydell
2022-11-27 22:29   ` Alistair Francis
2022-11-24 11:50 ` [PATCH for-8.0 15/19] target/rx: " Peter Maydell
2022-11-24 11:50 ` [PATCH for-8.0 16/19] target/sh4: " Peter Maydell
2022-11-24 11:50 ` [PATCH for-8.0 17/19] target/sparc: " Peter Maydell
2022-11-30  9:23   ` Mark Cave-Ayland
2022-11-24 11:50 ` [PATCH for-8.0 18/19] target/tricore: " Peter Maydell
2022-11-24 11:50 ` [PATCH for-8.0 19/19] target/xtensa: " Peter Maydell
2022-11-24 13:46 ` [PATCH for-8.0 00/19] Convert most CPU classes " Philippe Mathieu-Daudé
2022-11-30 10:51   ` Philippe Mathieu-Daudé
2022-11-30 12:38     ` Peter Maydell
2022-11-30 13:22       ` Philippe Mathieu-Daudé
2022-11-26 15:50 ` Richard Henderson
2022-12-16 16:02 ` Peter Maydell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.