From 854878cbfc5d97867b2c6f1e6cbd71528e1159ff Mon Sep 17 00:00:00 2001 From: Mitchel Humpherys Date: Tue, 11 Feb 2014 17:31:55 -0800 Subject: 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 --- drivers/iommu/msm_iommu-v1.c | 6 ++++++ drivers/iommu/msm_iommu_sec.c | 8 ++++---- 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'drivers/iommu') 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; -- cgit v1.2.3