summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTzung-Bi Shih <tzungbi@chromium.org>2020-12-25 11:54:32 +0800
committerCommit Bot <commit-bot@chromium.org>2020-12-25 09:01:44 +0000
commitebed64c3dc35edc61f58cb46a7a5e5fc59801a30 (patch)
treeaee7cccde4d207bd36d86d626d26fa2ab93d67b5
parent40eb50778857ac041a15aae1f461a5537f1012d3 (diff)
downloadchrome-ec-ebed64c3dc35edc61f58cb46a7a5e5fc59801a30.tar.gz
util: support ec_parse_panicinfo to parse RV32i
BRANCH=none BUG=b:176269554 TEST=emerge-asurada ec-utils && cros deploy $DUT ec-utils && /usr/sbin/ec_parse_panicinfo < x.eccrash Signed-off-by: Tzung-Bi Shih <tzungbi@chromium.org> Change-Id: I7c46af99d5801a9ffaa7b07b61dafc4ec6227264 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2603078 Reviewed-by: Ting Shen <phoenixshen@chromium.org>
-rw-r--r--util/ec_panicinfo.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/util/ec_panicinfo.c b/util/ec_panicinfo.c
index f614770619..b919cc6df7 100644
--- a/util/ec_panicinfo.c
+++ b/util/ec_panicinfo.c
@@ -94,6 +94,35 @@ static int parse_panic_info_nds32(const struct panic_data *pdata)
return 0;
}
+static int parse_panic_info_rv32i(const struct panic_data *pdata)
+{
+ uint32_t *regs, mcause, mepc;
+
+ regs = (uint32_t *)pdata->riscv.regs;
+ mcause = pdata->riscv.mcause;
+ mepc = pdata->riscv.mepc;
+
+ printf("=== EXCEPTION: MCAUSE=%x ===\n", mcause);
+ printf("S11 %08x S10 %08x S9 %08x S8 %08x\n",
+ regs[0], regs[1], regs[2], regs[3]);
+ printf("S7 %08x S6 %08x S5 %08x S4 %08x\n",
+ regs[4], regs[5], regs[6], regs[7]);
+ printf("S3 %08x S2 %08x S1 %08x S0 %08x\n",
+ regs[8], regs[9], regs[10], regs[11]);
+ printf("T6 %08x T5 %08x T4 %08x T3 %08x\n",
+ regs[12], regs[13], regs[14], regs[15]);
+ printf("T2 %08x T1 %08x T0 %08x A7 %08x\n",
+ regs[16], regs[17], regs[18], regs[19]);
+ printf("A6 %08x A5 %08x A4 %08x A3 %08x\n",
+ regs[20], regs[21], regs[22], regs[23]);
+ printf("A2 %08x A1 %08x A0 %08x TP %08x\n",
+ regs[24], regs[25], regs[26], regs[27]);
+ printf("GP %08x RA %08x SP %08x MEPC %08x\n",
+ regs[28], regs[29], regs[30], mepc);
+
+ return 0;
+}
+
int parse_panic_info(const struct panic_data *pdata)
{
/*
@@ -118,6 +147,8 @@ int parse_panic_info(const struct panic_data *pdata)
return parse_panic_info_cm(pdata);
case PANIC_ARCH_NDS32_N8:
return parse_panic_info_nds32(pdata);
+ case PANIC_ARCH_RISCV_RV32I:
+ return parse_panic_info_rv32i(pdata);
default:
fprintf(stderr, "Unknown architecture (%d).\n", pdata->arch);
break;