[Qemu-devel] [PATCH 13/27] ppc/pnv: psi: add a reset handler

Cédric Le Goater posted 27 patches 6 years, 8 months ago
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, Laurent Vivier <lvivier@redhat.com>, David Gibson <david@gibson.dropbear.id.au>, Thomas Huth <thuth@redhat.com>, "Cédric Le Goater" <clg@kaod.org>
There is a newer version of this series
[Qemu-devel] [PATCH 13/27] ppc/pnv: psi: add a reset handler
Posted by Cédric Le Goater 6 years, 8 months ago
Reset all regs but keep the MMIO BAR enabled as it is at realize time.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
 hw/ppc/pnv_psi.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/hw/ppc/pnv_psi.c b/hw/ppc/pnv_psi.c
index a2f8d0dece80..e61861bfd3c6 100644
--- a/hw/ppc/pnv_psi.c
+++ b/hw/ppc/pnv_psi.c
@@ -442,6 +442,15 @@ static const MemoryRegionOps pnv_psi_xscom_ops = {
     }
 };
 
+static void pnv_psi_reset(void *dev)
+{
+    PnvPsi *psi = PNV_PSI(dev);
+
+    memset(psi->regs, 0x0, sizeof(psi->regs));
+
+    psi->regs[PSIHB_XSCOM_BAR] = psi->bar | PSIHB_BAR_EN;
+}
+
 static void pnv_psi_init(Object *obj)
 {
     PnvPsi *psi = PNV_PSI(obj);
@@ -511,6 +520,8 @@ static void pnv_psi_realize(DeviceState *dev, Error **errp)
         psi->regs[xivr] = PSIHB_XIVR_PRIO_MSK |
             ((uint64_t) i << PSIHB_XIVR_SRC_SH);
     }
+
+    qemu_register_reset(pnv_psi_reset, dev);
 }
 
 static int pnv_psi_dt_xscom(PnvXScomInterface *dev, void *fdt, int xscom_offset)
-- 
2.20.1


Re: [Qemu-devel] [PATCH 13/27] ppc/pnv: psi: add a reset handler
Posted by David Gibson 6 years, 8 months ago
On Wed, Mar 06, 2019 at 09:50:18AM +0100, Cédric Le Goater wrote:
> Reset all regs but keep the MMIO BAR enabled as it is at realize time.
> 
> Signed-off-by: Cédric Le Goater <clg@kaod.org>

Again, I don't like the duplication of information between psi->reg
and psi->bar.  But that's out of scope for this patch, so, applied.

> ---
>  hw/ppc/pnv_psi.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/hw/ppc/pnv_psi.c b/hw/ppc/pnv_psi.c
> index a2f8d0dece80..e61861bfd3c6 100644
> --- a/hw/ppc/pnv_psi.c
> +++ b/hw/ppc/pnv_psi.c
> @@ -442,6 +442,15 @@ static const MemoryRegionOps pnv_psi_xscom_ops = {
>      }
>  };
>  
> +static void pnv_psi_reset(void *dev)
> +{
> +    PnvPsi *psi = PNV_PSI(dev);
> +
> +    memset(psi->regs, 0x0, sizeof(psi->regs));
> +
> +    psi->regs[PSIHB_XSCOM_BAR] = psi->bar | PSIHB_BAR_EN;
> +}
> +
>  static void pnv_psi_init(Object *obj)
>  {
>      PnvPsi *psi = PNV_PSI(obj);
> @@ -511,6 +520,8 @@ static void pnv_psi_realize(DeviceState *dev, Error **errp)
>          psi->regs[xivr] = PSIHB_XIVR_PRIO_MSK |
>              ((uint64_t) i << PSIHB_XIVR_SRC_SH);
>      }
> +
> +    qemu_register_reset(pnv_psi_reset, dev);
>  }
>  
>  static int pnv_psi_dt_xscom(PnvXScomInterface *dev, void *fdt, int xscom_offset)

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson