On Thu, Sep 24, 2020 at 10:23:13AM +0200, Julia Suvorova wrote: > On Thu, Sep 24, 2020 at 9:36 AM Michael S. Tsirkin <m...@redhat.com> wrote: > > > > On Thu, Sep 24, 2020 at 09:00:09AM +0200, Julia Suvorova wrote: > > > Instead of changing the hot-plug type in _OSC register, do not > > > initialize the slot capability or set the 'Slot Implemented' flag. > > > This way guest will choose ACPI hot-plug if it is preferred and leave > > > the option to use SHPC with pcie-pci-bridge. > > > > > > Signed-off-by: Julia Suvorova <jus...@redhat.com> > > > --- > > > hw/i386/acpi-build.h | 2 ++ > > > hw/i386/acpi-build.c | 2 +- > > > hw/pci/pcie.c | 16 ++++++++++++++++ > > > 3 files changed, 19 insertions(+), 1 deletion(-) > > > > > > diff --git a/hw/i386/acpi-build.h b/hw/i386/acpi-build.h > > > index 487ec7710f..4c5bfb3d0b 100644 > > > --- a/hw/i386/acpi-build.h > > > +++ b/hw/i386/acpi-build.h > > > @@ -11,4 +11,6 @@ extern const struct AcpiGenericAddress > > > x86_nvdimm_acpi_dsmio; > > > > > > void acpi_setup(void); > > > > > > +Object *object_resolve_type_unambiguous(const char *typename); > > > + > > > #endif > > > diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c > > > index cf503b16af..b7811a8912 100644 > > > --- a/hw/i386/acpi-build.c > > > +++ b/hw/i386/acpi-build.c > > > @@ -174,7 +174,7 @@ static void init_common_fadt_data(MachineState *ms, > > > Object *o, > > > *data = fadt; > > > } > > > > > > -static Object *object_resolve_type_unambiguous(const char *typename) > > > +Object *object_resolve_type_unambiguous(const char *typename) > > > { > > > bool ambig; > > > Object *o = object_resolve_path_type("", typename, &ambig); > > > diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c > > > index 5b48bae0f6..c1a082e8b9 100644 > > > --- a/hw/pci/pcie.c > > > +++ b/hw/pci/pcie.c > > > @@ -27,6 +27,8 @@ > > > #include "hw/pci/pci_bus.h" > > > #include "hw/pci/pcie_regs.h" > > > #include "hw/pci/pcie_port.h" > > > +#include "hw/i386/ich9.h" > > > +#include "hw/i386/acpi-build.h" > > > #include "qemu/range.h" > > > > > > //#define DEBUG_PCIE > > > > > > Not really happy with pcie.c getting an i386 dependency. > > > > > > > > > @@ -515,12 +517,26 @@ void pcie_cap_slot_unplug_request_cb(HotplugHandler > > > *hotplug_dev, > > > pcie_cap_slot_push_attention_button(hotplug_pdev); > > > } > > > > > > +static bool acpi_pcihp_enabled(void) > > > +{ > > > + Object *lpc = object_resolve_type_unambiguous(TYPE_ICH9_LPC_DEVICE); > > > + > > > + return lpc && > > > + object_property_get_bool(lpc, > > > "acpi-pci-hotplug-with-bridge-support", > > > + NULL); > > > + > > > +} > > > + > > > > Why not just check the property unconditionally? > > Ok. > > > > /* pci express slot for pci express root/downstream port > > > PCI express capability slot registers */ > > > void pcie_cap_slot_init(PCIDevice *dev, PCIESlot *s) > > > { > > > uint32_t pos = dev->exp.exp_cap; > > > > > > + if (acpi_pcihp_enabled()) { > > > + return; > > > + } > > > + > > > > I think I would rather not teach pcie about acpi. How about we > > change the polarity, name the property > > "pci-native-hotplug" or whatever makes sense. > > I'd prefer not to change the property name since the common code in > hw/i386/acpi-build.c depends on it, but I can add a new one if it > makes any sense.
And maybe prefix with "x-" so we don't commit to it as an external API. > > > pci_word_test_and_set_mask(dev->config + pos + PCI_EXP_FLAGS, > > > PCI_EXP_FLAGS_SLOT); > > > > > > -- > > > 2.25.4 > >