From: Eric Auger <eric.auger@redhat.com>
To: eric.auger.pro@gmail.com, eric.auger@redhat.com,
qemu-devel@nongnu.org, qemu-arm@nongnu.org,
peter.maydell@linaro.org, mst@redhat.com,
jean-philippe.brucker@arm.com
Cc: kevin.tian@intel.com, tn@semihalf.com, bharat.bhushan@nxp.com,
peterx@redhat.com
Subject: [Qemu-devel] [RFC v8 16/18] hw/arm/virt-acpi-build: Introduce fill_iort_idmap helper
Date: Fri, 9 Nov 2018 12:29:55 +0100 [thread overview]
Message-ID: <20181109112957.10067-17-eric.auger@redhat.com> (raw)
In-Reply-To: <20181109112957.10067-1-eric.auger@redhat.com>
To avoid code duplication, let's introduce an helper that
fills one IORT ID mappings array index.
Signed-off-by: Eric Auger <eric.auger@redhat.com>
---
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
next prev parent reply other threads:[~2018-11-09 11:31 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-09 11:29 [Qemu-devel] [RFC v8 00/18] VIRTIO-IOMMU device Eric Auger
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 01/18] update-linux-headers: Import virtio_iommu.h Eric Auger
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 02/18] linux-headers: Partial update for virtio-iommu v0.8 Eric Auger
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 03/18] virtio-iommu: Add skeleton Eric Auger
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 04/18] virtio-iommu: Decode the command payload Eric Auger
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 05/18] virtio-iommu: Add the iommu regions Eric Auger
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 06/18] virtio-iommu: Endpoint and domains structs and helpers Eric Auger
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 07/18] virtio-iommu: Implement attach/detach command Eric Auger
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 08/18] virtio-iommu: Implement map/unmap Eric Auger
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 09/18] virtio-iommu: Implement translate Eric Auger
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 10/18] virtio-iommu: Implement probe request Eric Auger
2018-11-14 16:01 ` Jean-Philippe Brucker
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 11/18] virtio-iommu: Add an msi_bypass property Eric Auger
2018-11-14 16:01 ` Jean-Philippe Brucker
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 12/18] virtio-iommu: Implement fault reporting Eric Auger
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 13/18] virtio_iommu: Handle reserved regions in translation process Eric Auger
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 14/18] virtio-iommu-pci: Add virtio iommu pci support Eric Auger
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 15/18] hw/arm/virt: Add virtio-iommu to the virt board Eric Auger
2018-11-14 16:01 ` Jean-Philippe Brucker
2018-11-14 16:41 ` Auger Eric
2018-11-16 9:51 ` Auger Eric
2018-11-22 9:15 ` Bharat Bhushan
2018-11-22 9:25 ` Auger Eric
2018-11-09 11:29 ` Eric Auger [this message]
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 17/18] hw/arm/virt-acpi-build: Add virtio-iommu node in IORT table Eric Auger
2018-11-09 11:29 ` [Qemu-devel] [RFC v8 18/18] hw/arm/virt: Allow virtio-iommu instantiation Eric Auger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181109112957.10067-17-eric.auger@redhat.com \
--to=eric.auger@redhat.com \
--cc=bharat.bhushan@nxp.com \
--cc=eric.auger.pro@gmail.com \
--cc=jean-philippe.brucker@arm.com \
--cc=kevin.tian@intel.com \
--cc=mst@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=peterx@redhat.com \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=tn@semihalf.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).