From d015c6200384c0d99457f71c8f11eac85decbfb5 Mon Sep 17 00:00:00 2001 From: "Isaac J. Manjarres" Date: Mon, 4 Jan 2021 16:14:37 -0800 Subject: [PATCH] ANDROID: Revert "iommu: Remove unused IOMMU_SYS_CACHE_ONLY flag" There are out of tree drivers which need IOMMU_SYS_CACHE_ONLY to be able to cache their data buffers in the system cache, so restore it. Bug: 176778547 Change-Id: Ic632a6f5951f9917e6006088b065fdbaf4e1b374 Signed-off-by: Isaac J. Manjarres --- drivers/iommu/io-pgtable-arm.c | 3 +++ include/linux/iommu.h | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c index a7a9bc08dcd1..e3cc3e3ece15 100644 --- a/drivers/iommu/io-pgtable-arm.c +++ b/drivers/iommu/io-pgtable-arm.c @@ -415,6 +415,9 @@ static arm_lpae_iopte arm_lpae_prot_to_pte(struct arm_lpae_io_pgtable *data, else if (prot & IOMMU_CACHE) pte |= (ARM_LPAE_MAIR_ATTR_IDX_CACHE << ARM_LPAE_PTE_ATTRINDX_SHIFT); + else if (prot & IOMMU_SYS_CACHE_ONLY) + pte |= (ARM_LPAE_MAIR_ATTR_IDX_INC_OCACHE + << ARM_LPAE_PTE_ATTRINDX_SHIFT); } if (prot & IOMMU_CACHE) diff --git a/include/linux/iommu.h b/include/linux/iommu.h index e744eaad8da6..58cce94ca40e 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -31,6 +31,12 @@ * if the IOMMU page table format is equivalent. */ #define IOMMU_PRIV (1 << 5) +/* + * Non-coherent masters can use this page protection flag to set cacheable + * memory attributes for only a transparent outer level of cache, also known as + * the last-level or system cache. + */ +#define IOMMU_SYS_CACHE_ONLY (1 << 6) struct iommu_ops; struct iommu_group;