[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH RFCv1 02/10] hw/arm/virt: Add iommufd link to virt-machine
From: |
Nicolin Chen |
Subject: |
[PATCH RFCv1 02/10] hw/arm/virt: Add iommufd link to virt-machine |
Date: |
Tue, 25 Jun 2024 17:28:29 -0700 |
A nested SMMU must use iommufd ioctls to communicate with the host-level
SMMU instance for 2-stage translation support. Add an iommufd link to the
ARM virt-machine, allowing QEMU command to pass in an iommufd object.
Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
---
hw/arm/virt.c | 14 ++++++++++++++
include/hw/arm/virt.h | 2 ++
2 files changed, 16 insertions(+)
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 78af2d2195..71093d7c60 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1404,6 +1404,13 @@ static void create_smmu(const VirtMachineState *vms,
object_property_set_link(OBJECT(dev), "primary-bus", OBJECT(bus),
&error_abort);
+
+ if (vms->iommu == VIRT_IOMMU_NESTED_SMMUV3) {
+ g_assert(vms->iommufd);
+ object_property_set_link(OBJECT(dev), "iommufd", OBJECT(vms->iommufd),
+ &error_abort);
+ object_property_set_bool(OBJECT(dev), "nested", true, &error_abort);
+ }
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
for (i = 0; i < NUM_SMMU_IRQS; i++) {
@@ -3114,6 +3121,13 @@ static void virt_machine_class_init(ObjectClass *oc,
void *data)
"Set GIC version. "
"Valid values are 2, 3, 4, host and
max");
+ object_class_property_add_link(oc, "iommufd", TYPE_IOMMUFD_BACKEND,
+ offsetof(VirtMachineState, iommufd),
+ object_property_allow_set_link,
+ OBJ_PROP_LINK_STRONG);
+ object_class_property_set_description(oc, "iommufd",
+ "Set the IOMMUFD handler from
\"-iommufd\"");
+
object_class_property_add_str(oc, "iommu", virt_get_iommu, virt_set_iommu);
object_class_property_set_description(oc, "iommu",
"Set the IOMMU type. "
diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
index 7df0813e28..d5cbce1a30 100644
--- a/include/hw/arm/virt.h
+++ b/include/hw/arm/virt.h
@@ -36,6 +36,7 @@
#include "hw/arm/boot.h"
#include "hw/arm/bsa.h"
#include "hw/block/flash.h"
+#include "sysemu/iommufd.h"
#include "sysemu/kvm.h"
#include "hw/intc/arm_gicv3_common.h"
#include "qom/object.h"
@@ -154,6 +155,7 @@ struct VirtMachineState {
bool dtb_randomness;
OnOffAuto acpi;
VirtGICType gic_version;
+ IOMMUFDBackend *iommufd;
VirtIOMMUType iommu;
bool default_bus_bypass_iommu;
VirtMSIControllerType msi_controller;
--
2.43.0
- [PATCH RFCv1 00/10] hw/arm/virt: Add multiple nested SMMUs, Nicolin Chen, 2024/06/25
- [PATCH RFCv1 01/10] hw/arm/virt-acpi-build: Add IORT RMR regions to handle MSI nested binding, Nicolin Chen, 2024/06/25
- [PATCH RFCv1 02/10] hw/arm/virt: Add iommufd link to virt-machine,
Nicolin Chen <=
- [PATCH RFCv1 03/10] hw/arm/virt: Get the number of host-level SMMUv3 instances, Nicolin Chen, 2024/06/25
- [PATCH RFCv1 06/10] hw/arm/virt: Assign vfio-pci devices to nested SMMUs, Nicolin Chen, 2024/06/25
- [PATCH RFCv1 05/10] hw/arm/virt: Add VIRT_NESTED_SMMU, Nicolin Chen, 2024/06/25
- [PATCH RFCv1 07/10] hw/arm/virt: Bypass iommu for default PCI bus, Nicolin Chen, 2024/06/25
- [PATCH RFCv1 09/10] hw/arm/virt-acpi-build: Build IORT with multiple SMMU nodes, Nicolin Chen, 2024/06/25
- [PATCH RFCv1 04/10] hw/arm/virt: Add an SMMU_IO_LEN macro, Nicolin Chen, 2024/06/25
- [PATCH RFCv1 10/10] hw/arm/virt-acpi-build: Enable ATS for nested SMMUv3, Nicolin Chen, 2024/06/25
- [PATCH RFCv1 08/10] hw/arm/virt-acpi-build: Handle reserved bus number of pxb buses, Nicolin Chen, 2024/06/25