]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commitdiff
iommu: Add a new type field in iommu_resv_region
authorEric Auger <eric.auger@redhat.com>
Thu, 19 Jan 2017 20:57:48 +0000 (20:57 +0000)
committerTim Gardner <tim.gardner@canonical.com>
Tue, 21 Feb 2017 17:00:24 +0000 (10:00 -0700)
We introduce a new field to differentiate the reserved region
types and specialize the apply_resv_region implementation.

Legacy direct mapped regions have IOMMU_RESV_DIRECT type.
We introduce 2 new reserved memory types:
- IOMMU_RESV_MSI will characterize MSI regions that are mapped
- IOMMU_RESV_RESERVED characterize regions that cannot by mapped.

Signed-off-by: Eric Auger <eric.auger@redhat.com>
Tested-by: Tomasz Nowicki <tomasz.nowicki@caviumnetworks.com>
Tested-by: Bharat Bhushan <bharat.bhushan@nxp.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit d30ddcaa7b028049cdfee3a40248002d07b2bbf3)
Signed-off-by: dann frazier <dann.frazier@canonical.com>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
drivers/iommu/amd_iommu.c
include/linux/iommu.h

index f7a024f1e1dcde0b832d7734f78eb68668dd7063..5f7ea4faa505019ef24b00857ed3cf855edb9e4e 100644 (file)
@@ -3186,6 +3186,7 @@ static void amd_iommu_get_resv_regions(struct device *dev,
 
                region->start = entry->address_start;
                region->length = entry->address_end - entry->address_start;
+               region->type = IOMMU_RESV_DIRECT;
                if (entry->prot & IOMMU_PROT_IR)
                        region->prot |= IOMMU_READ;
                if (entry->prot & IOMMU_PROT_IW)
index bfecb8b7407801394b9d8cb1df6b34239be5c8fd..233a6bf093bf2296076196101267071c0b896e67 100644 (file)
@@ -117,18 +117,25 @@ enum iommu_attr {
        DOMAIN_ATTR_MAX,
 };
 
+/* These are the possible reserved region types */
+#define IOMMU_RESV_DIRECT      (1 << 0)
+#define IOMMU_RESV_RESERVED    (1 << 1)
+#define IOMMU_RESV_MSI         (1 << 2)
+
 /**
  * struct iommu_resv_region - descriptor for a reserved memory region
  * @list: Linked list pointers
  * @start: System physical start address of the region
  * @length: Length of the region in bytes
  * @prot: IOMMU Protection flags (READ/WRITE/...)
+ * @type: Type of the reserved region
  */
 struct iommu_resv_region {
        struct list_head        list;
        phys_addr_t             start;
        size_t                  length;
        int                     prot;
+       int                     type;
 };
 
 #ifdef CONFIG_IOMMU_API