From 66a25bec608fc3d9debd0815eecc806466f45f2c Mon Sep 17 00:00:00 2001 From: Vivek Pernamitta Date: Wed, 1 Sep 2021 19:00:21 +0530 Subject: [PATCH] msm: mhi: Check ERRDBG registers for device status Add support to check RDDM cookie in ERRDBG1,ERRDBG2 and ERRDBG3 registers to debug the the bootup failure when device failed to enter MISSION mode. Change-Id: Idaf00c082ffda97805e958ae083a331d9f0909e9 Signed-off-by: Vivek Pernamitta Signed-off-by: Ramya SR --- drivers/bus/mhi/core/mhi_boot.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/drivers/bus/mhi/core/mhi_boot.c b/drivers/bus/mhi/core/mhi_boot.c index fa55209e409d..3f7d2a84748c 100644 --- a/drivers/bus/mhi/core/mhi_boot.c +++ b/drivers/bus/mhi/core/mhi_boot.c @@ -143,6 +143,17 @@ bool mhi_scan_rddm_cookie(struct mhi_controller *mhi_cntrl, u32 cookie) { int ret; u32 val; + int i; + bool result = false; + struct { + char *name; + u32 offset; + } error_reg[] = { + { "ERROR_DBG1", BHI_ERRDBG1 }, + { "ERROR_DBG2", BHI_ERRDBG2 }, + { "ERROR_DBG3", BHI_ERRDBG3 }, + { NULL }, + }; if (!mhi_cntrl->rddm_supported || !cookie) return false; @@ -152,15 +163,23 @@ bool mhi_scan_rddm_cookie(struct mhi_controller *mhi_cntrl, u32 cookie) if (!MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state)) return false; - ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->bhi, BHI_ERRDBG2, &val); - if (ret) - return false; + /* look for an RDDM cookie match in any of the error debug registers */ + for (i = 0; error_reg[i].name; i++) { + ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->bhi, + error_reg[i].offset, &val); + if (ret) + break; + MHI_CNTRL_LOG("reg:%s value:0x%x\n", error_reg[i].name, val); - MHI_CNTRL_LOG("BHI_ERRDBG2 value:0x%x\n", val); - if (val == cookie) - return true; + if (!(val ^ cookie)) { + MHI_CNTRL_ERR("RDDM cookie found in %s\n", + error_reg[i].name); + return true; + } + } - return false; + MHI_CNTRL_ERR("RDDM cookie not found\n"); + return result; } EXPORT_SYMBOL(mhi_scan_rddm_cookie);