aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqctecmdr <qctecmdr@localhost>2020-07-01 08:29:56 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2020-07-01 08:29:56 -0700
commit97ac11a9ff8e6a389ded5dd82720e8412e34ef09 (patch)
tree27c99bd9085fc0e34bf637a15eb2b1aa2aaa679e
parent56ce4ca63bfb5a5767157903f77f711fa6ef9758 (diff)
parent9de1191828409720d66e1b3a64d14db141030547 (diff)
Merge "iommu/arm-smmu: report BID, PID and MID of client on context fault"LA.UM.8.12.c3-07700-sm8250.0
-rw-r--r--drivers/iommu/arm-smmu-regs.h4
-rw-r--r--drivers/iommu/arm-smmu.c12
2 files changed, 15 insertions, 1 deletions
diff --git a/drivers/iommu/arm-smmu-regs.h b/drivers/iommu/arm-smmu-regs.h
index 3921487dde80..f43a8b6edfca 100644
--- a/drivers/iommu/arm-smmu-regs.h
+++ b/drivers/iommu/arm-smmu-regs.h
@@ -273,4 +273,8 @@ enum arm_smmu_s2cr_privcfg {
#define ACTLR_QCOM_NSH_SHIFT 30
#define ACTLR_QCOM_NSH 1
+#define FSYNR1_BID GENMASK(15, 13)
+#define FSYNR1_PID GENMASK(12, 8)
+#define FSYNR1_MID GENMASK(7, 0)
+
#endif /* _ARM_SMMU_REGS_H */
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
index 42f6a2d428e9..d5cbf1f220b0 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
@@ -70,6 +70,7 @@
#include "iommu-logger.h"
#include <linux/debugfs.h>
#include <linux/uaccess.h>
+#include <linux/bitfield.h>
/*
* Apparently, some Qualcomm arm64 platforms which appear to expose their SMMU
@@ -1737,6 +1738,11 @@ static irqreturn_t arm_smmu_context_fault(int irq, void *dev)
"Context fault handled by client: iova=0x%08lx, cb=%d, fsr=0x%x, fsynr0=0x%x, fsynr1=0x%x\n",
iova, cfg->cbndx, fsr, fsynr0, fsynr1);
dev_dbg(smmu->dev,
+ "Client info: BID=0x%x, PID=0x%x, MID=0x%x\n",
+ FIELD_GET(FSYNR1_BID, fsynr1),
+ FIELD_GET(FSYNR1_PID, fsynr1),
+ FIELD_GET(FSYNR1_MID, fsynr1));
+ dev_dbg(smmu->dev,
"soft iova-to-phys=%pa\n", &phys_soft);
ret = IRQ_HANDLED;
resume = RESUME_TERMINATE;
@@ -1749,7 +1755,11 @@ static irqreturn_t arm_smmu_context_fault(int irq, void *dev)
dev_err(smmu->dev,
"Unhandled context fault: iova=0x%08lx, cb=%d, fsr=0x%x, fsynr0=0x%x, fsynr1=0x%x\n",
iova, cfg->cbndx, fsr, fsynr0, fsynr1);
-
+ dev_err(smmu->dev,
+ "Client info: BID=0x%x, PID=0x%x, MID=0x%x\n",
+ FIELD_GET(FSYNR1_BID, fsynr1),
+ FIELD_GET(FSYNR1_PID, fsynr1),
+ FIELD_GET(FSYNR1_MID, fsynr1));
dev_err(smmu->dev,
"soft iova-to-phys=%pa\n", &phys_soft);