Message ID | 20240119163512.3810301-2-peter.maydell@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | buses: switch to 3-phase-reset | expand |
On Fri, Jan 19, 2024 at 04:35:08PM +0000, Peter Maydell wrote: > Date: Fri, 19 Jan 2024 16:35:08 +0000 > From: Peter Maydell <peter.maydell@linaro.org> > Subject: [PATCH 1/5] pci: Switch bus reset to 3-phase-reset > X-Mailer: git-send-email 2.34.1 > > Switch the PCI bus from using BusClass::reset to the Resettable > interface. > > This has no behavioural change, because the BusClass code to support > subclasses that use the legacy BusClass::reset will call that method > in the hold phase of 3-phase reset. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > hw/pci/pci.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) Reviewed-by: Zhao Liu <zhao1.liu@intel.com> > > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > index 76080af580d..05c2e46bda5 100644 > --- a/hw/pci/pci.c > +++ b/hw/pci/pci.c > @@ -64,7 +64,7 @@ bool pci_available = true; > > static char *pcibus_get_dev_path(DeviceState *dev); > static char *pcibus_get_fw_dev_path(DeviceState *dev); > -static void pcibus_reset(BusState *qbus); > +static void pcibus_reset_hold(Object *obj); > static bool pcie_has_upstream_port(PCIDevice *dev); > > static Property pci_props[] = { > @@ -202,13 +202,15 @@ static void pci_bus_class_init(ObjectClass *klass, void *data) > { > BusClass *k = BUS_CLASS(klass); > PCIBusClass *pbc = PCI_BUS_CLASS(klass); > + ResettableClass *rc = RESETTABLE_CLASS(klass); > > k->print_dev = pcibus_dev_print; > k->get_dev_path = pcibus_get_dev_path; > k->get_fw_dev_path = pcibus_get_fw_dev_path; > k->realize = pci_bus_realize; > k->unrealize = pci_bus_unrealize; > - k->reset = pcibus_reset; > + > + rc->phases.hold = pcibus_reset_hold; > > pbc->bus_num = pcibus_num; > pbc->numa_node = pcibus_numa_node; > @@ -424,9 +426,9 @@ void pci_device_reset(PCIDevice *dev) > * Called via bus_cold_reset on RST# assert, after the devices > * have been reset device_cold_reset-ed already. > */ > -static void pcibus_reset(BusState *qbus) > +static void pcibus_reset_hold(Object *obj) > { > - PCIBus *bus = DO_UPCAST(PCIBus, qbus, qbus); > + PCIBus *bus = PCI_BUS(obj); > int i; > > for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) { > -- > 2.34.1 > >
diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 76080af580d..05c2e46bda5 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -64,7 +64,7 @@ bool pci_available = true; static char *pcibus_get_dev_path(DeviceState *dev); static char *pcibus_get_fw_dev_path(DeviceState *dev); -static void pcibus_reset(BusState *qbus); +static void pcibus_reset_hold(Object *obj); static bool pcie_has_upstream_port(PCIDevice *dev); static Property pci_props[] = { @@ -202,13 +202,15 @@ static void pci_bus_class_init(ObjectClass *klass, void *data) { BusClass *k = BUS_CLASS(klass); PCIBusClass *pbc = PCI_BUS_CLASS(klass); + ResettableClass *rc = RESETTABLE_CLASS(klass); k->print_dev = pcibus_dev_print; k->get_dev_path = pcibus_get_dev_path; k->get_fw_dev_path = pcibus_get_fw_dev_path; k->realize = pci_bus_realize; k->unrealize = pci_bus_unrealize; - k->reset = pcibus_reset; + + rc->phases.hold = pcibus_reset_hold; pbc->bus_num = pcibus_num; pbc->numa_node = pcibus_numa_node; @@ -424,9 +426,9 @@ void pci_device_reset(PCIDevice *dev) * Called via bus_cold_reset on RST# assert, after the devices * have been reset device_cold_reset-ed already. */ -static void pcibus_reset(BusState *qbus) +static void pcibus_reset_hold(Object *obj) { - PCIBus *bus = DO_UPCAST(PCIBus, qbus, qbus); + PCIBus *bus = PCI_BUS(obj); int i; for (i = 0; i < ARRAY_SIZE(bus->devices); ++i) {
Switch the PCI bus from using BusClass::reset to the Resettable interface. This has no behavioural change, because the BusClass code to support subclasses that use the legacy BusClass::reset will call that method in the hold phase of 3-phase reset. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- hw/pci/pci.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)