summaryrefslogtreecommitdiff
path: root/drivers/iommu
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2014-02-13 02:17:45 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2014-02-13 02:17:40 -0800
commitc31c51e967c13f36dcb6d1556cb6fd902c1a8dfa (patch)
tree3ff211a96a1d5fda2a362a24a48369208f233ac0 /drivers/iommu
parenta22be1803635be8fa3a150729902be6481f14dea (diff)
parent854878cbfc5d97867b2c6f1e6cbd71528e1159ff (diff)
Merge "iommu: msm: allow partial register dumps to be printed"
Diffstat (limited to 'drivers/iommu')
-rw-r--r--drivers/iommu/msm_iommu-v1.c6
-rw-r--r--drivers/iommu/msm_iommu_sec.c8
2 files changed, 10 insertions, 4 deletions
diff --git a/drivers/iommu/msm_iommu-v1.c b/drivers/iommu/msm_iommu-v1.c
index 367285c1d00b..ee7a1f251dc3 100644
--- a/drivers/iommu/msm_iommu-v1.c
+++ b/drivers/iommu/msm_iommu-v1.c
@@ -1143,6 +1143,7 @@ void print_ctx_regs(struct msm_iommu_context_reg regs[])
{
uint32_t fsr = regs[DUMP_REG_FSR].val;
u64 ttbr;
+ enum dump_reg iter;
pr_err("FAR = %016llx\n",
COMBINE_DUMP_REG(
@@ -1186,6 +1187,11 @@ void print_ctx_regs(struct msm_iommu_context_reg regs[])
pr_err("CBAR = %08x CBFRSYNRA = %08x\n",
regs[DUMP_REG_CBAR_N].val, regs[DUMP_REG_CBFRSYNRA_N].val);
print_ctx_mem_attr_regs(regs);
+
+ for (iter = DUMP_REG_FIRST; iter < MAX_DUMP_REGS; ++iter)
+ if (!regs[iter].valid)
+ pr_err("NOTE: Value actually unknown for %s\n",
+ dump_regs_tbl[iter].name);
}
static void __print_ctx_regs(void __iomem *base, int ctx, unsigned int fsr)
diff --git a/drivers/iommu/msm_iommu_sec.c b/drivers/iommu/msm_iommu_sec.c
index ee782d84f0cd..43144b1b8dba 100644
--- a/drivers/iommu/msm_iommu_sec.c
+++ b/drivers/iommu/msm_iommu_sec.c
@@ -217,7 +217,6 @@ static int msm_iommu_reg_dump_to_regs(
if (i != nvals) {
pr_err("Invalid dump! %d != %d\n", i, nvals);
ret = 1;
- goto out;
}
for (i = 0; i < MAX_DUMP_REGS; ++i) {
@@ -231,11 +230,10 @@ static int msm_iommu_reg_dump_to_regs(
dump_regs_tbl[i].reg_offset));
ret = 1;
}
- ctx_regs[i].val = 0;
+ ctx_regs[i].val = 0xd00dfeed;
}
}
-out:
return ret;
}
@@ -289,7 +287,9 @@ irqreturn_t msm_iommu_secure_fault_handler_v2(int irq, void *dev_id)
memset(ctx_regs, 0, sizeof(ctx_regs));
tmp = msm_iommu_reg_dump_to_regs(
ctx_regs, regs, drvdata, ctx_drvdata);
- if (!tmp && ctx_regs[DUMP_REG_FSR].val) {
+ if (ctx_regs[DUMP_REG_FSR].val) {
+ if (tmp)
+ pr_err("Incomplete fault register dump. Printout will be incomplete.\n");
if (!ctx_drvdata->attached_domain) {
pr_err("Bad domain in interrupt handler\n");
tmp = -ENOSYS;