Message ID | 20221104161513.2455862-5-peter.maydell@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | reset: Remove some deprecated APIs | expand |
On 4/11/22 17:15, Peter Maydell wrote: > Currently the hcd-xhci-pci and hcd-xhci-sysbus devices, which are s/which// ? > mostly wrappers around the TYPE_XHCI device, which is a direct > subclass of TYPE_DEVICE. Since TYPE_DEVICE devices are not on any > qbus and do not get automatically reset, the wrapper devices both > reset the TYPE_XHCI device in their own reset functions. However, > they do this using device_legacy_reset(), which will reset the device > itself but not any bus it has. > > Switch to device_cold_reset(), which avoids using a deprecated > function and also propagates reset along any child buses. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > It's possible this might result in USB devices on the bus getting > reset more than once (once via the descent-along-qbus and once when > xhci_reset() etc manually reset each port), but in my testing with > gdb I couldn't get that to happen. It should be harmless anyway. > --- > hw/usb/hcd-xhci-pci.c | 2 +- > hw/usb/hcd-xhci-sysbus.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
diff --git a/hw/usb/hcd-xhci-pci.c b/hw/usb/hcd-xhci-pci.c index e934b1a5b1f..643d4643e4d 100644 --- a/hw/usb/hcd-xhci-pci.c +++ b/hw/usb/hcd-xhci-pci.c @@ -85,7 +85,7 @@ static void xhci_pci_reset(DeviceState *dev) { XHCIPciState *s = XHCI_PCI(dev); - device_legacy_reset(DEVICE(&s->xhci)); + device_cold_reset(DEVICE(&s->xhci)); } static int xhci_pci_vmstate_post_load(void *opaque, int version_id) diff --git a/hw/usb/hcd-xhci-sysbus.c b/hw/usb/hcd-xhci-sysbus.c index a14e4381960..faf57b47975 100644 --- a/hw/usb/hcd-xhci-sysbus.c +++ b/hw/usb/hcd-xhci-sysbus.c @@ -29,7 +29,7 @@ void xhci_sysbus_reset(DeviceState *dev) { XHCISysbusState *s = XHCI_SYSBUS(dev); - device_legacy_reset(DEVICE(&s->xhci)); + device_cold_reset(DEVICE(&s->xhci)); } static void xhci_sysbus_realize(DeviceState *dev, Error **errp)
Currently the hcd-xhci-pci and hcd-xhci-sysbus devices, which are mostly wrappers around the TYPE_XHCI device, which is a direct subclass of TYPE_DEVICE. Since TYPE_DEVICE devices are not on any qbus and do not get automatically reset, the wrapper devices both reset the TYPE_XHCI device in their own reset functions. However, they do this using device_legacy_reset(), which will reset the device itself but not any bus it has. Switch to device_cold_reset(), which avoids using a deprecated function and also propagates reset along any child buses. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- It's possible this might result in USB devices on the bus getting reset more than once (once via the descent-along-qbus and once when xhci_reset() etc manually reset each port), but in my testing with gdb I couldn't get that to happen. It should be harmless anyway. --- hw/usb/hcd-xhci-pci.c | 2 +- hw/usb/hcd-xhci-sysbus.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)