[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-arm] [RFC v9 16/17] hw/arm/virt-acpi-build: Introduce fill_iort_id
From: |
Eric Auger |
Subject: |
[Qemu-arm] [RFC v9 16/17] hw/arm/virt-acpi-build: Introduce fill_iort_idmap helper |
Date: |
Thu, 22 Nov 2018 18:15:37 +0100 |
To avoid code duplication, let's introduce an helper that
fills one IORT ID mappings array index.
Signed-off-by: Eric Auger <address@hidden>
---
v8: new
---
hw/arm/virt-acpi-build.c | 43 ++++++++++++++++++++++++----------------
1 file changed, 26 insertions(+), 17 deletions(-)
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index 5785fb697c..ec7c4835fe 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -396,6 +396,17 @@ build_rsdp(GArray *rsdp_table, BIOSLinker *linker,
unsigned xsdt_tbl_offset)
return rsdp_table;
}
+static inline void
+fill_iort_idmap(AcpiIortIdMapping *idmap, int i,
+ uint32_t input_base, uint32_t id_count,
+ uint32_t output_base, uint32_t output_reference)
+{
+ idmap[i].input_base = cpu_to_le32(input_base);
+ idmap[i].id_count = cpu_to_le32(id_count);
+ idmap[i].output_base = cpu_to_le32(output_base);
+ idmap[i].output_reference = cpu_to_le32(output_reference);
+}
+
static void
build_iort(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
{
@@ -453,13 +464,12 @@ build_iort(GArray *table_data, BIOSLinker *linker,
VirtMachineState *vms)
smmu->gerr_gsiv = cpu_to_le32(irq + 2);
smmu->sync_gsiv = cpu_to_le32(irq + 3);
- /* Identity RID mapping covering the whole input RID range */
- idmap = &smmu->id_mapping_array[0];
- idmap->input_base = 0;
- idmap->id_count = cpu_to_le32(0xFFFF);
- idmap->output_base = 0;
- /* output IORT node is the ITS group node (the first node) */
- idmap->output_reference = cpu_to_le32(iort_node_offset);
+ /*
+ * Identity RID mapping covering the whole input RID range.
+ * The output IORT node is the ITS group node (the first node).
+ */
+ fill_iort_idmap(smmu->id_mapping_array, 0, 0, 0xffff, 0,
+ iort_node_offset);
}
/* Root Complex Node */
@@ -477,18 +487,17 @@ build_iort(GArray *table_data, BIOSLinker *linker,
VirtMachineState *vms)
rc->memory_properties.memory_flags = 0x3; /* CCA = CPM = DCAS = 1 */
rc->pci_segment_number = 0; /* MCFG pci_segment */
- /* Identity RID mapping covering the whole input RID range */
- idmap = &rc->id_mapping_array[0];
- idmap->input_base = 0;
- idmap->id_count = cpu_to_le32(0xFFFF);
- idmap->output_base = 0;
-
if (vms->iommu == VIRT_IOMMU_SMMUV3) {
- /* output IORT node is the smmuv3 node */
- idmap->output_reference = cpu_to_le32(smmu_offset);
+ /* Identity RID mapping and output IORT node is the iommu node */
+ fill_iort_idmap(rc->id_mapping_array, 0, 0, 0xFFFF, 0,
+ smmu_offset);
} else {
- /* output IORT node is the ITS group node (the first node) */
- idmap->output_reference = cpu_to_le32(iort_node_offset);
+ /*
+ * Identity RID mapping and the output IORT node is the ITS group
+ * node (the first node).
+ */
+ fill_iort_idmap(rc->id_mapping_array, 0, 0, 0xFFFF, 0,
+ iort_node_offset);
}
/*
--
2.17.2
- Re: [Qemu-arm] [Qemu-devel] [RFC v9 06/17] virtio-iommu: Endpoint and domains structs and helpers, (continued)
- [Qemu-arm] [RFC v9 08/17] virtio-iommu: Implement map/unmap, Eric Auger, 2018/11/22
- [Qemu-arm] [RFC v9 09/17] virtio-iommu: Implement translate, Eric Auger, 2018/11/22
- [Qemu-arm] [RFC v9 10/17] virtio-iommu: Implement probe request, Eric Auger, 2018/11/22
- [Qemu-arm] [RFC v9 13/17] virtio_iommu: Handle reserved regions in translation process, Eric Auger, 2018/11/22
- [Qemu-arm] [RFC v9 11/17] virtio-iommu: Expose the IOAPIC MSI reserved region when relevant, Eric Auger, 2018/11/22
- [Qemu-arm] [RFC v9 12/17] virtio-iommu: Implement fault reporting, Eric Auger, 2018/11/22
- [Qemu-arm] [RFC v9 14/17] virtio-iommu-pci: Add virtio iommu pci support, Eric Auger, 2018/11/22
- [Qemu-arm] [RFC v9 15/17] hw/arm/virt: Add the virtio-iommu device tree mappings, Eric Auger, 2018/11/22
- [Qemu-arm] [RFC v9 16/17] hw/arm/virt-acpi-build: Introduce fill_iort_idmap helper,
Eric Auger <=
- [Qemu-arm] [RFC v9 17/17] hw/arm/virt-acpi-build: Add virtio-iommu node in IORT table, Eric Auger, 2018/11/22
- Re: [Qemu-arm] [RFC v9 00/17] VIRTIO-IOMMU device, Bharat Bhushan, 2018/11/27