v1 -> v2: - Allow ACS to be disabled. - Suggested by Michael S. Tsirkin, use disable-acs to set property.
v1: - Add ACS (Access Control Services) capability. If it is a pcie device, check that all devices on the path from the device to the root complex have ACS enabled, and then the device will become an iommu_group. it will have the effect of isolation Signed-off-by: wangliang <wlfigh...@gmail.com> Signed-off-by: wangliang <wanglian...@baidu.com> --- hw/pci-bridge/xio3130_upstream.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/hw/pci-bridge/xio3130_upstream.c b/hw/pci-bridge/xio3130_upstream.c index 2df952222b..5433d06fb3 100644 --- a/hw/pci-bridge/xio3130_upstream.c +++ b/hw/pci-bridge/xio3130_upstream.c @@ -24,6 +24,7 @@ #include "hw/pci/msi.h" #include "hw/pci/pcie.h" #include "hw/pci/pcie_port.h" +#include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/module.h" @@ -59,6 +60,7 @@ static void xio3130_upstream_reset(DeviceState *qdev) static void xio3130_upstream_realize(PCIDevice *d, Error **errp) { PCIEPort *p = PCIE_PORT(d); + PCIESlot *s = PCIE_SLOT(d); int rc; pci_bridge_initfn(d, TYPE_PCIE_BUS); @@ -94,7 +96,9 @@ static void xio3130_upstream_realize(PCIDevice *d, Error **errp) goto err; } - pcie_acs_init(d, XIO3130_ACS_OFFSET); + if (!s->disable_acs) { + pcie_acs_init(d, XIO3130_ACS_OFFSET); + } return; err: @@ -113,6 +117,11 @@ static void xio3130_upstream_exitfn(PCIDevice *d) pci_bridge_exitfn(d); } +static Property xio3130_upstream_props[] = { + DEFINE_PROP_BOOL("disable-acs", PCIESlot, disable_acs, false), + DEFINE_PROP_END_OF_LIST() +}; + static const VMStateDescription vmstate_xio3130_upstream = { .name = "xio3130-express-upstream-port", .priority = MIG_PRI_PCI_BUS, @@ -142,6 +151,7 @@ static void xio3130_upstream_class_init(ObjectClass *klass, void *data) dc->desc = "TI X3130 Upstream Port of PCI Express Switch"; dc->reset = xio3130_upstream_reset; dc->vmsd = &vmstate_xio3130_upstream; + device_class_set_props(dc, xio3130_upstream_props); } static const TypeInfo xio3130_upstream_info = { -- 2.24.3 (Apple Git-128)