> -----Original Message-----
> From: Eric Auger <eric.auger@redhat.com>
> Sent: 03 November 2025 14:58
> To: Shameer Kolothum <skolothumtho@nvidia.com>; qemu-
> arm@nongnu.org; qemu-devel@nongnu.org
> Cc: peter.maydell@linaro.org; Jason Gunthorpe <jgg@nvidia.com>; Nicolin
> Chen <nicolinc@nvidia.com>; ddutile@redhat.com; berrange@redhat.com;
> Nathan Chen <nathanc@nvidia.com>; Matt Ochs <mochs@nvidia.com>;
> smostafa@google.com; wangzhou1@hisilicon.com;
> jiangkunkun@huawei.com; jonathan.cameron@huawei.com;
> zhangfei.gao@linaro.org; zhenzhong.duan@intel.com; yi.l.liu@intel.com;
> Krishnakant Jaju <kjaju@nvidia.com>
> Subject: Re: [PATCH v5 21/32] hw/arm/virt: Set PCI preserve_config for accel
> SMMUv3
>
> External email: Use caution opening links or attachments
>
>
> On 10/31/25 11:49 AM, Shameer Kolothum wrote:
> > Introduce a new pci_preserve_config field in virt machine state which
> > allows the generation of DSM #5. This field is only set if accel SMMU
> > is instantiated.
> >
> > In a subsequent patch, SMMUv3 accel mode will make use of IORT RMR
> > nodes to enable nested translation of MSI doorbell addresses. IORT RMR
> > requires _DSM #5 to be set for the PCI host bridge so that the Guest
> > kernel preserves the PCI boot configuration.
> >
> > Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
> > Tested-by: Zhangfei Gao <zhangfei.gao@linaro.org>
> > Signed-off-by: Shameer Kolothum <skolothumtho@nvidia.com>
> > ---
> > hw/arm/virt-acpi-build.c | 8 ++++++++
> > hw/arm/virt.c | 4 ++++
> > include/hw/arm/virt.h | 1 +
> > 3 files changed, 13 insertions(+)
> >
> > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index
> > 8bb6b60515..d51da6e27d 100644
> > --- a/hw/arm/virt-acpi-build.c
> > +++ b/hw/arm/virt-acpi-build.c
> > @@ -163,6 +163,14 @@ static void acpi_dsdt_add_pci(Aml *scope, const
> MemMapEntry *memmap,
> > .pci_native_hotplug = !acpi_pcihp,
> > };
> >
> > + /*
> > + * Accel SMMU requires RMRs for MSI 1-1 mapping, which require _DSM
> for
> > + * preserving PCI Boot Configurations
> as suggested in v4 you can be more precise and explictly state
>
> _DSM function 5 (Ignore PCI Boot Configuration)
Ok. Will update.
>
> > + */
> > + if (vms->pci_preserve_config) {
> > + cfg.preserve_config = true;
> > + }
> > +
> > if (vms->highmem_mmio) {
> > cfg.mmio64 = memmap[VIRT_HIGH_PCIE_MMIO];
> > }
> > diff --git a/hw/arm/virt.c b/hw/arm/virt.c index
> > 175023897a..8a347a6e39 100644
> > --- a/hw/arm/virt.c
> > +++ b/hw/arm/virt.c
> > @@ -3091,6 +3091,10 @@ static void
> virt_machine_device_plug_cb(HotplugHandler *hotplug_dev,
> > }
> >
> > create_smmuv3_dev_dtb(vms, dev, bus);
> > + if (object_property_find(OBJECT(dev), "accel") &&
> why do you need to test
>
> object_property_find(OBJECT(dev), "accel")?
Looks like you probably found the reason now 😉.
Anyway for the record, we don't have the "accel" property yet and
is only introduced in 25/32. Without the above check the "make check "
tests will report error. This will be removed once we introduce the
property.
>
> > + object_property_get_bool(OBJECT(dev), "accel", &error_abort)) {
> > + vms->pci_preserve_config = true;
> > + }
> > }
> > }
> >
> > diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index
> > 04a09af354..60db5d40b2 100644
> > --- a/include/hw/arm/virt.h
> > +++ b/include/hw/arm/virt.h
> > @@ -182,6 +182,7 @@ struct VirtMachineState {
> > bool ns_el2_virt_timer_irq;
> > CXLState cxl_devices_state;
> > bool legacy_smmuv3_present;
> > + bool pci_preserve_config;
> > };
> >
> > #define VIRT_ECAM_ID(high) (high ? VIRT_HIGH_PCIE_ECAM :
> > VIRT_PCIE_ECAM)
> With those changes takin into account
> Reviewed-by: Eric Auger <eric.auger@redhat.com>
Thanks,
Shameer