Johnny Hughes
2019-02-04 c1f36c28393a7bb126cbf436cd6a4077a5b5c313
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
From ecf036e63e2a910a7ed1de6b89fe3d8ccf4c4d78 Mon Sep 17 00:00:00 2001
From: Khuong Dinh <kdinh@apm.com>
Date: Fri, 13 Oct 2017 16:07:46 -0600
Subject: [PATCH 11/11] BACKPORT: iommu: enable bypass transaction caching for
 ARM SMMU 500
 
The ARM SMMU identity mapping performance was poor compared with the
DMA mode. It was found that enable caching would restore the performance
back to normal. The S2CRB_TLBEN bit in the ACR register would allow for
caching of the stream to context register bypass transaction information.
 
This patch is required to properly support PCIe in virtual environment
for Ampere eMag SoC's.
 
This patch is backported from:
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?h=next-20180504&id=74f55d34414c866dbf3a69e28a2f963abe61ca58
and was accepted from kernel v4.15.
 
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Feng Kan <fkan@apm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
 drivers/iommu/arm-smmu.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
 
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
index 91ff442..d40f154 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
@@ -61,6 +61,7 @@
 #define ARM_MMU500_ACTLR_CPRE        (1 << 1)
 
 #define ARM_MMU500_ACR_CACHE_LOCK    (1 << 26)
+#define ARM_MMU500_ACR_S2CRB_TLBEN    (1 << 10)
 #define ARM_MMU500_ACR_SMTNMB_TLBEN    (1 << 8)
 
 #define TLB_LOOP_TIMEOUT        1000000    /* 1s! */
@@ -1608,7 +1609,7 @@ static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
          * Allow unmatched Stream IDs to allocate bypass
          * TLB entries for reduced latency.
          */
-        reg |= ARM_MMU500_ACR_SMTNMB_TLBEN;
+        reg |= ARM_MMU500_ACR_SMTNMB_TLBEN | ARM_MMU500_ACR_S2CRB_TLBEN;
         writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_sACR);
     }
 
-- 
1.8.3.1