diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2021-10-11 12:50:25 -0700 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-03-28 22:13:10 +0000 |
commit | caa71d4462de86452fddc75bd3416b740af9353c (patch) | |
tree | eb9d963f9f926392d6b4eab2aab2b5167e533fef /driver/als_si114x.c | |
parent | 2b081d0e6e346085318be2118cccd865c1da0f8d (diff) | |
download | chrome-ec-caa71d4462de86452fddc75bd3416b740af9353c.tar.gz |
Panic: Save LR and code location in HFSR
Since Nami's PMIC reset clears panic data, we currently report only
a few fault registers (HFSR, MMSR, etc.), IPSR, r4, and r5. These
are included in a feedback report but not very useful. To debug a
crash happening remotely, this patch makes the assert handler,
the watchdog handler, and the panic handler store PC, LR, and some
additional info.
| regs[1] | regs[3] | regs[4] | HFSR
| (IPSR) | (r4) | (r5) | [29:2]
-------+---------+----------+----------+--------------------
Assert | n/a | __func__ | __FILE__ | [29:26] Flags (=3)
| | | | [25:10] Line#
| | | | [ 9: 2] Task#
-------+---------+----------+----------+--------------------
WDT | LR | Reason | PC | [29:26] Flags (=4)
| | | | [ 9: 2] Task#
-------+---------+----------+----------+--------------------
Panic | IPSR | LR | PC | n/a
-------+---------+----------+----------+--------------------
Note that this patch is created under several constraints imposed by
the released RO. Some of the constraints are as follows:
- It's the RO not RW who saves the panic data into BBRAM. This is for
avoiding executing extra code in a restricted environment (= panic).
- If RO sees a watchdog reset without reason == PANIC_SW_WATCHDOG,
it stores PANIC_SW_WATCHDOG in r4 and clears r5 and IPSR.
- BBRAM is already used up to the max (64 bytes).
Obviously, a patch for ToT would be very different (and much cleaner)
since it's free from these constraints. Most importantly, there is no
PMIC reset which erases panic data.
> crash assert
ASSERTION FAILURE '0' in command_crash() at common/panic_output.c:165
Rebooting...
--- UART initialized after reboot ---
[Reset cause: soft]
[Image: RO, nami_v1.1.8956+f067821734 2021-11-09 12:31:41 some@host]
[0.003853 init buttons]
[0.004072 Inits done]
Restarting system with PMIC.
> panicinfo
ASSERTION FAILURE in command_crash() at common/panic_output.c:165
r0 : r1 : r2 : r3 :
r4 :100a9f82 r5 :100a89e0 r6 :00000000 r7 :00000000
r8 :00000000 r9 :00000000 r10:00000000 r11:00000000
r12: sp :00000000 lr : pc :
mmfs = 0, shcsr = 0, hfsr = c029428, dfsr = 0, ipsr = 100995ad
> crash divzero
=== PROCESS EXCEPTION: 06 ====== xPSR: 41000000 ===
r0 :00000000 r1 :100a8f09 r2 :400c4000 r3 :00000000
r4 :1009956f r5 :1009956e r6 :200c07c4 r7 :100a4fe3
r8 :100a4fde r9 :100a3a54 r10:00000000 r11:200c07d2
r12:00000000 sp :200c4508 lr :1009956f pc :1009956e
Undefined instructions
mmfs = 10000, shcsr = 70008, hfsr = 0, dfsr = 0, ipsr = 00000006
=========== Process Stack Contents ===========
200c4528: 00000002 200c4548 200c07c4 200c0400
200c4538: 00000002 1008d2c7 00000000 200c07c4
200c4548: 200c07c4 200c07ca 00000000 00000000
200c4558: 00000000 00000000 00000000 00000000
Rebooting...
> crashinfo
=== PROCESS EXCEPTION: 06 ====== xPSR: ffffffff ===
r0 : r1 : r2 : r3 :
r4 :1009956f r5 :1009956e r6 :00000000 r7 :00000000
r8 :00000000 r9 :00000000 r10:00000000 r11:00000000
r12: sp :00000000 lr : pc :
Undefined instructions
mmfs = 10000, shcsr = 0, hfsr = 0, dfsr = 0, ipsr = 00000006
> crash watchdog
>### WATCHDOG PC=100995ae / LR=100995ad / pSP=200c4508 (task 10) ###
Time: 0x0000000009dd5f1d us, 165.502749 s
Deadline: 0x0000000009de2ab3 -> 0.052118 s from now
Active timers:
Tsk 14 0x0000000009de2ab3 -> 0.052118
Task Ready Name Events Time (s) StkUsed
0 R << idle >> 00000001 134.736448 80/672
1 R HOOKS 80000000 0.935280 648/800
2 USB_CHG_P0 00000000 0.001806 312/672
3 USB_CHG_P1 00000000 0.004606 320/672
4 R CHARGER 80000000 1.657817 424/800
5 R MOTIONSENSE 80000004 1.789985 560/928
6 CHIPSET 00000000 0.000396 296/800
7 KEYPROTO 00000000 0.002983 312/672
8 PDCMD 00000000 0.000065 112/672
9 R HOSTCMD 00000001 0.517519 568/800
10 R CONSOLE 00000000 2.074095 332/800
...
> panicinfo
> ### WATCHDOG PC=100995ae / LR=100995ad / task=10
r0 : r1 : r2 : r3 :
r4 :dead6664 r5 :100995ae r6 :00000000 r7 :00000000
r8 :00000000 r9 :00000000 r10:00000000 r11:00000000
r12: sp :00000000 lr : pc :
mmfs = 0, shcsr = 0, hfsr = 10000028, dfsr = 0, ipsr = 100995ad
BUG=b:200593658
BRANCH=Nami
TEST=Sona. Run crash assert. Verify function name, file name,
line number, task id are stored in r4, r5, ipsr by panicinfo
after PMIC reset.
Change-Id: I55b142ac4de14c05a8184a66ed127c9cbcd29745
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3271351
Reviewed-by: caveh jalali <caveh@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3457946
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Commit-Queue: Ricardo Quesada <ricardoq@chromium.org>
Tested-by: Ricardo Quesada <ricardoq@chromium.org>
Auto-Submit: Ricardo Quesada <ricardoq@chromium.org>
Diffstat (limited to 'driver/als_si114x.c')
0 files changed, 0 insertions, 0 deletions