aboutsummaryrefslogtreecommitdiff
path: root/hw/pci/pcie.c
diff options
context:
space:
mode:
authorJulia Suvorova <jusual@redhat.com>2021-07-13 02:42:02 +0200
committerMichael S. Tsirkin <mst@redhat.com>2021-07-16 04:33:35 -0400
commit3f3cbbb2369ebba67cccf8c60d6a0043b315e17c (patch)
tree5cbace8709b89fc927a9656728db45343323d186 /hw/pci/pcie.c
parentc0e427d6eb5fefc5382ab01e78611740db1b5d06 (diff)
downloadqemu-3f3cbbb2369ebba67cccf8c60d6a0043b315e17c.zip
qemu-3f3cbbb2369ebba67cccf8c60d6a0043b315e17c.tar.gz
qemu-3f3cbbb2369ebba67cccf8c60d6a0043b315e17c.tar.bz2
hw/pci/pcie: Do not set HPC flag if acpihp is used
Instead of changing the hot-plug type in _OSC register, do not set the 'Hot-Plug Capable' flag. This way guest will choose ACPI hot-plug if it is preferred and leave the option to use SHPC with pcie-pci-bridge. The ability to control hot-plug for each downstream port is retained, while 'hotplug=off' on the port means all hot-plug types are disabled. Signed-off-by: Julia Suvorova <jusual@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Message-Id: <20210713004205.775386-4-jusual@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'hw/pci/pcie.c')
-rw-r--r--hw/pci/pcie.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c
index fd0fa15..6e95d82 100644
--- a/hw/pci/pcie.c
+++ b/hw/pci/pcie.c
@@ -529,7 +529,13 @@ void pcie_cap_slot_init(PCIDevice *dev, PCIESlot *s)
PCI_EXP_SLTCAP_PIP |
PCI_EXP_SLTCAP_AIP |
PCI_EXP_SLTCAP_ABP);
- if (s->hotplug) {
+
+ /*
+ * Enable native hot-plug on all hot-plugged bridges unless
+ * hot-plug is disabled on the slot.
+ */
+ if (s->hotplug &&
+ (s->native_hotplug || DEVICE(dev)->hotplugged)) {
pci_long_test_and_set_mask(dev->config + pos + PCI_EXP_SLTCAP,
PCI_EXP_SLTCAP_HPS |
PCI_EXP_SLTCAP_HPC);