diff options
author | Joerg Roedel <jroedel@suse.de> | 2017-01-30 16:05:18 +0100 |
---|---|---|
committer | Joerg Roedel <jroedel@suse.de> | 2017-01-30 16:05:18 +0100 |
commit | ce273db0ff1ae64fea785af25a43977b0b6a4555 (patch) | |
tree | 1a5d03cb1e5c0d63f298691a980b3e248654619f /drivers/iommu/dma-iommu.c | |
parent | 93fa6cf60aad833e7572a61f98b2d0aa6f67de40 (diff) | |
parent | 14b4dbafa7e7e13323e402efd7723aafa391d69a (diff) | |
download | lwn-ce273db0ff1ae64fea785af25a43977b0b6a4555.tar.gz lwn-ce273db0ff1ae64fea785af25a43977b0b6a4555.zip |
Merge branch 'iommu/iommu-priv' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into arm/core
Diffstat (limited to 'drivers/iommu/dma-iommu.c')
-rw-r--r-- | drivers/iommu/dma-iommu.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index de41ead6542a..7195d46f8233 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -245,16 +245,22 @@ int iommu_dma_init_domain(struct iommu_domain *domain, dma_addr_t base, EXPORT_SYMBOL(iommu_dma_init_domain); /** - * dma_direction_to_prot - Translate DMA API directions to IOMMU API page flags + * dma_info_to_prot - Translate DMA API directions and attributes to IOMMU API + * page flags. * @dir: Direction of DMA transfer * @coherent: Is the DMA master cache-coherent? + * @attrs: DMA attributes for the mapping * * Return: corresponding IOMMU API page protection flags */ -int dma_direction_to_prot(enum dma_data_direction dir, bool coherent) +int dma_info_to_prot(enum dma_data_direction dir, bool coherent, + unsigned long attrs) { int prot = coherent ? IOMMU_CACHE : 0; + if (attrs & DMA_ATTR_PRIVILEGED) + prot |= IOMMU_PRIV; + switch (dir) { case DMA_BIDIRECTIONAL: return prot | IOMMU_READ | IOMMU_WRITE; @@ -697,7 +703,7 @@ dma_addr_t iommu_dma_map_resource(struct device *dev, phys_addr_t phys, size_t size, enum dma_data_direction dir, unsigned long attrs) { return __iommu_dma_map(dev, phys, size, - dma_direction_to_prot(dir, false) | IOMMU_MMIO); + dma_info_to_prot(dir, false, attrs) | IOMMU_MMIO); } void iommu_dma_unmap_resource(struct device *dev, dma_addr_t handle, |