blob: a75ca247dc3b16aa8363d10ad3a8dbe7f7ef5a14 [file] [log] [blame]
Brad Bishopbec4ebc2022-08-03 09:55:16 -04001Upstream-Status: Inappropriate [Workaround]
2Signed-off-by: Manoj Kumar <manoj.kumar3@arm.com>
3
4From 949ba3f12ec1f3177a82a9228dc402ab5d8c9d60 Mon Sep 17 00:00:00 2001
5From: Manoj Kumar <manoj.kumar3@arm.com>
6Date: Mon, 1 Feb 2021 21:36:43 +0530
7Subject: [PATCH 1/5] iommu/arm-smmu-v3: workaround for ATC_INV_SIZE_ALL in
8 N1SDP
9
10ATC_INV_SIZE_ALL request should automatically translate to ATS
11address which is not happening in SMMUv3 version gone into
12N1SDP platform. This workaround manually sets the ATS address
13field to proper value for ATC_INV_SIZE_ALL command.
14
15Change-Id: If89465be94720a62be85e1e6612f17e93fa9b8a5
16Signed-off-by: Manoj Kumar <manoj.kumar3@arm.com>
17Signed-off-by: Khasim Syed Mohammed <khasim.mohammed@arm.com>
18---
19 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 1 +
20 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 1 +
21 2 files changed, 2 insertions(+)
22
23diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
24index a388e318f86e..ceca576b0bf6 100644
25--- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
26+++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
27@@ -1724,6 +1724,7 @@ arm_smmu_atc_inv_to_cmd(int ssid, unsigned long iova, size_t size,
28 };
29
30 if (!size) {
31+ cmd->atc.addr = ATC_INV_ADDR_ALL;
32 cmd->atc.size = ATC_INV_SIZE_ALL;
33 return;
34 }
35diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
36index 4cb136f07914..5615ffd24e46 100644
37--- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
38+++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
39@@ -473,6 +473,7 @@ struct arm_smmu_cmdq_ent {
40
41 #define CMDQ_OP_ATC_INV 0x40
42 #define ATC_INV_SIZE_ALL 52
43+ #define ATC_INV_ADDR_ALL 0x7FFFFFFFFFFFF000UL
44 struct {
45 u32 sid;
46 u32 ssid;
47--
482.17.1
49