On Fri, 30 May 2025 11:14:13 +0100
Jonathan Cameron <jonathan.came...@huawei.com> wrote:

> On Tue, 27 May 2025 09:40:08 +0200
> Eric Auger <eric.au...@redhat.com> wrote:
> 
> > Propagate the type of pci hotplug mode downto the gpex
> > acpi code. In case machine acpi_pcihp is unset we configure
> > pci native hotplug on pci0. For expander bridges we keep
> > legacy pci native hotplug, as done on x86 q35.
> > 
> > Signed-off-by: Eric Auger <eric.au...@redhat.com>
> > Reviewed-by: Gustavo Romero <gustavo.rom...@linaro.org>
> > ---
> >  include/hw/pci-host/gpex.h | 1 +
> >  hw/arm/virt-acpi-build.c   | 1 +
> >  hw/pci-host/gpex-acpi.c    | 3 ++-
> >  3 files changed, 4 insertions(+), 1 deletion(-)
> > 
> > diff --git a/include/hw/pci-host/gpex.h b/include/hw/pci-host/gpex.h
> > index 84471533af..feaf827474 100644
> > --- a/include/hw/pci-host/gpex.h
> > +++ b/include/hw/pci-host/gpex.h
> > @@ -45,6 +45,7 @@ struct GPEXConfig {
> >      MemMapEntry pio;
> >      int         irq;
> >      PCIBus      *bus;
> > +    bool        pci_native_hotplug;
> >  };
> >  
> >  typedef struct GPEXIrq GPEXIrq;
> > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> > index 7e8e0f0298..be5e00a56e 100644
> > --- a/hw/arm/virt-acpi-build.c
> > +++ b/hw/arm/virt-acpi-build.c
> > @@ -129,6 +129,7 @@ static void acpi_dsdt_add_pci(Aml *scope, const 
> > MemMapEntry *memmap,
> >          .ecam   = memmap[ecam_id],
> >          .irq    = irq,
> >          .bus    = vms->bus,
> > +        .pci_native_hotplug = !vms->acpi_pcihp,
> >      };
> >  
> >      if (vms->highmem_mmio) {
> > diff --git a/hw/pci-host/gpex-acpi.c b/hw/pci-host/gpex-acpi.c
> > index 1aa2d12026..f1ab30f3d5 100644
> > --- a/hw/pci-host/gpex-acpi.c
> > +++ b/hw/pci-host/gpex-acpi.c
> > @@ -204,6 +204,7 @@ void acpi_dsdt_add_gpex(Aml *scope, struct GPEXConfig 
> > *cfg)
> >              if (is_cxl) {
> >                  build_cxl_osc_method(dev);
> >              } else {
> > +                /* pxb bridges do not have ACPI PCI Hot-plug enabled */
> >                  acpi_dsdt_add_host_bridge_methods(dev, true);  
> 
> This is awkward but explains why my CXL cases weren't causing trouble.
> A mixed config is counter to the recommendation in the PCI firmware spec
> 
> "It is recommended that a machine with multiple host bridge devices should
> report the same capabilities for all host bridges of the same type and also
> negotiate control of the features described in the Control Field in the
> same way for all host bridges of the same type"
> 
> I guess if any OS isn't coping with the mix then they can request native
> hotplug.

guest should be able to cope with mixed configs,
ACPI pcihp is a crutch and works only for coldplugged bridges,
while hotplugged bridges are handled by native hotplug.

> 
> 
> 
> >              }
> >  
> > @@ -279,7 +280,7 @@ void acpi_dsdt_add_gpex(Aml *scope, struct GPEXConfig 
> > *cfg)
> >      }
> >      aml_append(dev, aml_name_decl("_CRS", rbuf));
> >  
> > -    acpi_dsdt_add_host_bridge_methods(dev, true);
> > +    acpi_dsdt_add_host_bridge_methods(dev, cfg->pci_native_hotplug);
> >  
> >      Aml *dev_res0 = aml_device("%s", "RES0");
> >      aml_append(dev_res0, aml_name_decl("_HID", aml_string("PNP0C02")));  
> 


Reply via email to