diff options
author | Mitchel Humpherys <mitchelh@codeaurora.org> | 2014-02-11 17:31:55 -0800 |
---|---|---|
committer | Mitchel Humpherys <mitchelh@codeaurora.org> | 2014-02-11 17:41:33 -0800 |
commit | 854878cbfc5d97867b2c6f1e6cbd71528e1159ff (patch) | |
tree | d937e46c9c99822b6f850e1a789b11d03df1ea81 /drivers/iommu | |
parent | b6cc994641cd94a734121815a2e406ede99edbea (diff) |
iommu: msm: allow partial register dumps to be printed
If we get back a partial register dump from TZ we should go ahead and
print as much as we can, rather than bailing out and not printing
anything.
Change-Id: Idcc8b14a76bf1f23bdf00b52879b3ce0ca9afdcc
Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
Diffstat (limited to 'drivers/iommu')
-rw-r--r-- | drivers/iommu/msm_iommu-v1.c | 6 | ||||
-rw-r--r-- | drivers/iommu/msm_iommu_sec.c | 8 |
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 d1b891c21d7e..b0c43bf6fe06 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; |