Re: [PATCH for-8.0 7/7] hw/pci-host/pnv_phb3_msi: Convert TYPE_PHB3_MSI to 3-phase reset

2022-11-30 Thread Philippe Mathieu-Daudé

On 25/11/22 12:52, Peter Maydell wrote:

Convert the TYPE_PHB3_MSI class to 3-phase reset, so we can
avoid using the device_class_set_parent_reset() function.

Signed-off-by: Peter Maydell 
---
  include/hw/ppc/xics.h  |  2 +-
  hw/pci-host/pnv_phb3_msi.c | 15 +--
  2 files changed, 10 insertions(+), 7 deletions(-)


Reviewed-by: Philippe Mathieu-Daudé 




Re: [PATCH for-8.0 7/7] hw/pci-host/pnv_phb3_msi: Convert TYPE_PHB3_MSI to 3-phase reset

2022-11-25 Thread Cédric Le Goater

On 11/25/22 12:52, Peter Maydell wrote:

Convert the TYPE_PHB3_MSI class to 3-phase reset, so we can
avoid using the device_class_set_parent_reset() function.

Signed-off-by: Peter Maydell 


Reviewed-by: Cédric Le Goater 

Thanks,

C.


---
  include/hw/ppc/xics.h  |  2 +-
  hw/pci-host/pnv_phb3_msi.c | 15 +--
  2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h
index 00b80b08c27..95ead0dd7c9 100644
--- a/include/hw/ppc/xics.h
+++ b/include/hw/ppc/xics.h
@@ -95,7 +95,7 @@ struct ICSStateClass {
  DeviceClass parent_class;
  
  DeviceRealize parent_realize;

-DeviceReset parent_reset;
+ResettablePhases parent_phases;
  
  void (*reject)(ICSState *s, uint32_t irq);

  void (*resend)(ICSState *s);
diff --git a/hw/pci-host/pnv_phb3_msi.c b/hw/pci-host/pnv_phb3_msi.c
index ae908fd9e41..41e63b066f9 100644
--- a/hw/pci-host/pnv_phb3_msi.c
+++ b/hw/pci-host/pnv_phb3_msi.c
@@ -228,12 +228,14 @@ static void phb3_msi_resend(ICSState *ics)
  }
  }
  
-static void phb3_msi_reset(DeviceState *dev)

+static void phb3_msi_reset_hold(Object *obj)
  {
-Phb3MsiState *msi = PHB3_MSI(dev);
-ICSStateClass *icsc = ICS_GET_CLASS(dev);
+Phb3MsiState *msi = PHB3_MSI(obj);
+ICSStateClass *icsc = ICS_GET_CLASS(obj);
  
-icsc->parent_reset(dev);

+if (icsc->parent_phases.hold) {
+icsc->parent_phases.hold(obj);
+}
  
  memset(msi->rba, 0, sizeof(msi->rba));

  msi->rba_sum = 0;
@@ -287,11 +289,12 @@ static void phb3_msi_class_init(ObjectClass *klass, void 
*data)
  {
  DeviceClass *dc = DEVICE_CLASS(klass);
  ICSStateClass *isc = ICS_CLASS(klass);
+ResettableClass *rc = RESETTABLE_CLASS(klass);
  
  device_class_set_parent_realize(dc, phb3_msi_realize,

  >parent_realize);
-device_class_set_parent_reset(dc, phb3_msi_reset,
-  >parent_reset);
+resettable_class_set_parent_phases(rc, NULL, phb3_msi_reset_hold, NULL,
+   >parent_phases);
  
  isc->reject = phb3_msi_reject;

  isc->resend = phb3_msi_resend;





[PATCH for-8.0 7/7] hw/pci-host/pnv_phb3_msi: Convert TYPE_PHB3_MSI to 3-phase reset

2022-11-25 Thread Peter Maydell
Convert the TYPE_PHB3_MSI class to 3-phase reset, so we can
avoid using the device_class_set_parent_reset() function.

Signed-off-by: Peter Maydell 
---
 include/hw/ppc/xics.h  |  2 +-
 hw/pci-host/pnv_phb3_msi.c | 15 +--
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h
index 00b80b08c27..95ead0dd7c9 100644
--- a/include/hw/ppc/xics.h
+++ b/include/hw/ppc/xics.h
@@ -95,7 +95,7 @@ struct ICSStateClass {
 DeviceClass parent_class;
 
 DeviceRealize parent_realize;
-DeviceReset parent_reset;
+ResettablePhases parent_phases;
 
 void (*reject)(ICSState *s, uint32_t irq);
 void (*resend)(ICSState *s);
diff --git a/hw/pci-host/pnv_phb3_msi.c b/hw/pci-host/pnv_phb3_msi.c
index ae908fd9e41..41e63b066f9 100644
--- a/hw/pci-host/pnv_phb3_msi.c
+++ b/hw/pci-host/pnv_phb3_msi.c
@@ -228,12 +228,14 @@ static void phb3_msi_resend(ICSState *ics)
 }
 }
 
-static void phb3_msi_reset(DeviceState *dev)
+static void phb3_msi_reset_hold(Object *obj)
 {
-Phb3MsiState *msi = PHB3_MSI(dev);
-ICSStateClass *icsc = ICS_GET_CLASS(dev);
+Phb3MsiState *msi = PHB3_MSI(obj);
+ICSStateClass *icsc = ICS_GET_CLASS(obj);
 
-icsc->parent_reset(dev);
+if (icsc->parent_phases.hold) {
+icsc->parent_phases.hold(obj);
+}
 
 memset(msi->rba, 0, sizeof(msi->rba));
 msi->rba_sum = 0;
@@ -287,11 +289,12 @@ static void phb3_msi_class_init(ObjectClass *klass, void 
*data)
 {
 DeviceClass *dc = DEVICE_CLASS(klass);
 ICSStateClass *isc = ICS_CLASS(klass);
+ResettableClass *rc = RESETTABLE_CLASS(klass);
 
 device_class_set_parent_realize(dc, phb3_msi_realize,
 >parent_realize);
-device_class_set_parent_reset(dc, phb3_msi_reset,
-  >parent_reset);
+resettable_class_set_parent_phases(rc, NULL, phb3_msi_reset_hold, NULL,
+   >parent_phases);
 
 isc->reject = phb3_msi_reject;
 isc->resend = phb3_msi_resend;
-- 
2.25.1