On Fri, Feb 25, 2022 at 11:12:59AM +0100, Gerd Hoffmann wrote: > Hi, > > > pcie_cap_slot_post_load() > > -> pcie_cap_update_power() > > -> pcie_set_power_device() > > -> pci_set_power() > > -> pci_update_mappings() > > > Fix it by honoring PCI_EXP_SLTCAP_PCP and updating power status > > only if capability is enabled. > > > diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c > > index d7d73a31e4..2339729a7c 100644 > > --- a/hw/pci/pcie.c > > +++ b/hw/pci/pcie.c > > @@ -383,10 +383,9 @@ static void pcie_cap_update_power(PCIDevice > > *hotplug_dev) > > > > if (sltcap & PCI_EXP_SLTCAP_PCP) { > > power = (sltctl & PCI_EXP_SLTCTL_PCC) == PCI_EXP_SLTCTL_PWR_ON; > > + pci_for_each_device(sec_bus, pci_bus_num(sec_bus), > > + pcie_set_power_device, &power); > > } > > - > > - pci_for_each_device(sec_bus, pci_bus_num(sec_bus), > > - pcie_set_power_device, &power); > > } > > The change makes sense, although I don't see how that changes qemu > behavior. > > 'power' defaults to true, so when SLTCAP_PCP is off it should never > ever try to power off the devices. And pci_set_power() should figure > the state didn't change and instantly return without touching the > device. > > take care, > Gerd
And making sure power is actually up might be a bit cleaner just in case down the road we start plugging devices in a powered off state. -- MST