From b386224e951926c3d0a3ba0103e451481a67bbe5 Mon Sep 17 00:00:00 2001 From: Runmin Wang Date: Mon, 23 May 2016 11:41:17 -0700 Subject: [PATCH] soc: qcom: print raw data for gladiator error registers Dump the value in gladiator error registers in raw format. CRs-Fixed: 1019798 Change-Id: I7bccd68866457bb0635ae5166ec935f9e82ba760 Signed-off-by: Runmin Wang --- drivers/soc/qcom/gladiator_erp_v2.c | 60 ++++++++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/drivers/soc/qcom/gladiator_erp_v2.c b/drivers/soc/qcom/gladiator_erp_v2.c index 09b0ae4f27ae..20bb97f1fb16 100644 --- a/drivers/soc/qcom/gladiator_erp_v2.c +++ b/drivers/soc/qcom/gladiator_erp_v2.c @@ -40,6 +40,7 @@ #define GLADIATOR_ERRLOG7 0x1038 #define GLADIATOR_ERRLOG8 0x103C #define OBSERVER_0_ID_COREID 0x8000 +#define OBSERVER_0_ID_REVISIONID 0x8004 #define OBSERVER_0_FAULTEN 0x8008 #define OBSERVER_0_ERRVLD 0x800C #define OBSERVER_0_ERRCLR 0x8010 @@ -53,7 +54,6 @@ #define OBSERVER_0_ERRLOG7 0x8030 #define OBSERVER_0_ERRLOG8 0x8034 #define OBSERVER_0_STALLEN 0x8038 -#define OBSERVER_0_REVISIONID 0x8004 #define GLD_TRANS_OPCODE_MASK 0xE #define GLD_TRANS_OPCODE_SHIFT 1 @@ -128,6 +128,11 @@ enum obs_err_code { }; enum err_log { + ID_COREID, + ID_REVISIONID, + FAULTEN, + ERRVLD, + ERRCLR, ERR_LOG0, ERR_LOG1, ERR_LOG2, @@ -138,6 +143,7 @@ enum err_log { ERR_LOG7, ERR_LOG8, STALLEN, + MAX_NUM, }; enum type_logger_error { @@ -475,6 +481,15 @@ static u32 get_gld_offset(unsigned int err_log) u32 offset = 0; switch (err_log) { + case FAULTEN: + offset = GLADIATOR_FAULTEN; + break; + case ERRVLD: + offset = GLADIATOR_ERRVLD; + break; + case ERRCLR: + offset = GLADIATOR_ERRCLR; + break; case ERR_LOG0: offset = GLADIATOR_ERRLOG0; break; @@ -514,6 +529,21 @@ static u32 get_obs_offset(unsigned int err_log) u32 offset = 0; switch (err_log) { + case ID_COREID: + offset = OBSERVER_0_ID_COREID; + break; + case ID_REVISIONID: + offset = OBSERVER_0_ID_REVISIONID; + break; + case FAULTEN: + offset = OBSERVER_0_FAULTEN; + break; + case ERRVLD: + offset = OBSERVER_0_ERRVLD; + break; + case ERRCLR: + offset = OBSERVER_0_ERRCLR; + break; case ERR_LOG0: offset = OBSERVER_0_ERRLOG0; break; @@ -573,7 +603,7 @@ static void decode_gld_errlog5(struct msm_gladiator_data *msm_gld_data) static irqreturn_t msm_gladiator_isr(int irq, void *dev_id) { u32 err_reg; - unsigned int err_log; + unsigned int err_log, err_buf[MAX_NUM]; struct msm_gladiator_data *msm_gld_data = dev_id; @@ -591,9 +621,31 @@ static irqreturn_t msm_gladiator_isr(int irq, void *dev_id) clear_gladiator_error(msm_gld_data->gladiator_virt_base); return IRQ_HANDLED; } - pr_alert("GLADIATOR ERROR DETECTED\n"); + pr_alert("Gladiator Error Detected:\n"); + if (gld_err_valid) { + for (err_log = FAULTEN; err_log <= ERR_LOG8; err_log++) { + err_buf[err_log] = readl_relaxed( + msm_gld_data->gladiator_virt_base + + get_gld_offset(err_log)); + } + pr_alert("Main log register data:\n%08x %08x %08x %08x\n%08x %08x %08x %08x\n%08x %08x %08x\n", + err_buf[0], err_buf[1], err_buf[2], err_buf[3], err_buf[4], err_buf[5], err_buf[6], + err_buf[7], err_buf[8], err_buf[9], err_buf[10]); + } + + if (obsrv_err_valid) { + for (err_log = ID_COREID; err_log <= STALLEN; err_log++) { + err_buf[err_log] = readl_relaxed( + msm_gld_data->gladiator_virt_base + + get_obs_offset(err_log)); + } + pr_alert("Observer log register data:\n%08x %08x %08x %08x\n%08x %08x %08x %08x\n%08x %08x %08x %08x\n%08x\n", + err_buf[0], err_buf[1], err_buf[2], err_buf[3], err_buf[4], err_buf[5], err_buf[6], err_buf[7], + err_buf[8], err_buf[9], err_buf[10], err_buf[11], err_buf[12]); + } + if (gld_err_valid) { - pr_alert("GLADIATOR error log register data:\n"); + pr_alert("Main error log register data:\n"); for (err_log = ERR_LOG0; err_log <= ERR_LOG8; err_log++) { /* skip log register 7 as its reserved */ if (err_log == ERR_LOG7) -- 2.11.0