Re: [PATCH v2 1/1] riscv: reset after crash

From: Heinrich Schuchardt [mailto:xypron.glpk@gmx.de] Sent: Sunday, September 27, 2020 7:21 AM To: Rick Jian-Zhi Chen(陳建志) Cc: Simon Glass; Sean Anderson; Bin Meng; u-boot@lists.denx.de; Heinrich Schuchardt Subject: [PATCH v2 1/1] riscv: reset after crash
If an exception occurs on ARM or x86, we call panic() which will try to reset the board. Do the same on RISC-V.
To avoid -Werror=format-zero-length move a '\n' to the string passed to panic. We don't need a message here as depending on CONFIG_PANIC_HANG we will either see
### ERROR ### Please RESET the board ###
or
resetting ...
as next message.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de
v2: Remove a superfluous message passed to panic().
arch/riscv/lib/interrupts.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/riscv/lib/interrupts.c b/arch/riscv/lib/interrupts.c index 8ff40f0f36..43b10a2b9b 100644 --- a/arch/riscv/lib/interrupts.c +++ b/arch/riscv/lib/interrupts.c @@ -27,7 +27,7 @@ static void show_efi_loaded_images(uintptr_t epc) static void show_regs(struct pt_regs *regs) { #ifdef CONFIG_SHOW_REGS
printf("SP: " REG_FMT " GP: " REG_FMT " TP: " REG_FMT "\n",
printf("\nSP: " REG_FMT " GP: " REG_FMT " TP: " REG_FMT "\n", regs->sp, regs->gp, regs->tp); printf("T0: " REG_FMT " T1: " REG_FMT " T2: " REG_FMT "\n", regs->t0, regs->t1, regs->t2);
@@ -45,7 +45,7 @@ static void show_regs(struct pt_regs *regs) regs->s7, regs->s8, regs->s9); printf("S10: " REG_FMT " S11: " REG_FMT " T3: " REG_FMT "\n", regs->s10, regs->s11, regs->t3);
printf("T4: " REG_FMT " T5: " REG_FMT " T6: " REG_FMT "\n\n",
printf("T4: " REG_FMT " T5: " REG_FMT " T6: " REG_FMT "\n", regs->t4, regs->t5, regs->t6);
#endif } @@ -79,12 +79,12 @@ static void _exit_trap(ulong code, ulong epc, ulong tval, struct pt_regs *regs) printf("EPC: " REG_FMT " RA: " REG_FMT " TVAL: " REG_FMT "\n", epc, regs->ra, tval); if (gd->flags & GD_FLG_RELOC)
printf("EPC: " REG_FMT " RA: " REG_FMT " reloc adjusted\n\n",
printf("EPC: " REG_FMT " RA: " REG_FMT " reloc adjusted\n", epc - gd->reloc_off, regs->ra - gd->reloc_off); show_regs(regs); show_efi_loaded_images(epc);
hang();
panic("\n");
}
int interrupt_init(void)
2.28.0
Reviewed-by: Rick Chen rick@andestech.com
BTW, it conflicts with Sean's [PATCH v3 0/7] riscv: Correctly handle IPIs already pending upon boot
error: patch failed: arch/riscv/lib/interrupts.c:79 error: arch/riscv/lib/interrupts.c: patch does not apply Patch failed at 0001 riscv: reset after crash
Thanks, Rick

On 29.09.20 10:22, Rick Chen wrote:
From: Heinrich Schuchardt [mailto:xypron.glpk@gmx.de] Sent: Sunday, September 27, 2020 7:21 AM To: Rick Jian-Zhi Chen(陳建志) Cc: Simon Glass; Sean Anderson; Bin Meng; u-boot@lists.denx.de; Heinrich Schuchardt Subject: [PATCH v2 1/1] riscv: reset after crash
If an exception occurs on ARM or x86, we call panic() which will try to reset the board. Do the same on RISC-V.
To avoid -Werror=format-zero-length move a '\n' to the string passed to panic. We don't need a message here as depending on CONFIG_PANIC_HANG we will either see
### ERROR ### Please RESET the board ###
or
resetting ...
as next message.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de
v2: Remove a superfluous message passed to panic().
arch/riscv/lib/interrupts.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/riscv/lib/interrupts.c b/arch/riscv/lib/interrupts.c index 8ff40f0f36..43b10a2b9b 100644 --- a/arch/riscv/lib/interrupts.c +++ b/arch/riscv/lib/interrupts.c @@ -27,7 +27,7 @@ static void show_efi_loaded_images(uintptr_t epc) static void show_regs(struct pt_regs *regs) { #ifdef CONFIG_SHOW_REGS
printf("SP: " REG_FMT " GP: " REG_FMT " TP: " REG_FMT "\n",
printf("\nSP: " REG_FMT " GP: " REG_FMT " TP: " REG_FMT "\n", regs->sp, regs->gp, regs->tp); printf("T0: " REG_FMT " T1: " REG_FMT " T2: " REG_FMT "\n", regs->t0, regs->t1, regs->t2);
@@ -45,7 +45,7 @@ static void show_regs(struct pt_regs *regs) regs->s7, regs->s8, regs->s9); printf("S10: " REG_FMT " S11: " REG_FMT " T3: " REG_FMT "\n", regs->s10, regs->s11, regs->t3);
printf("T4: " REG_FMT " T5: " REG_FMT " T6: " REG_FMT "\n\n",
printf("T4: " REG_FMT " T5: " REG_FMT " T6: " REG_FMT "\n", regs->t4, regs->t5, regs->t6);
#endif } @@ -79,12 +79,12 @@ static void _exit_trap(ulong code, ulong epc, ulong tval, struct pt_regs *regs) printf("EPC: " REG_FMT " RA: " REG_FMT " TVAL: " REG_FMT "\n", epc, regs->ra, tval); if (gd->flags & GD_FLG_RELOC)
printf("EPC: " REG_FMT " RA: " REG_FMT " reloc adjusted\n\n",
printf("EPC: " REG_FMT " RA: " REG_FMT " reloc adjusted\n", epc - gd->reloc_off, regs->ra - gd->reloc_off); show_regs(regs); show_efi_loaded_images(epc);
hang();
panic("\n");
}
int interrupt_init(void)
2.28.0
Reviewed-by: Rick Chen rick@andestech.com
BTW, it conflicts with Sean's [PATCH v3 0/7] riscv: Correctly handle IPIs already pending upon boot
error: patch failed: arch/riscv/lib/interrupts.c:79 error: arch/riscv/lib/interrupts.c: patch does not apply Patch failed at 0001 riscv: reset after crash
Thanks, Rick
Thanks for reviewing. Do you have a git repository and branch on which I should rebase my patch? Or will you handle the rebase?
Best regards
Heinrich

Hi Heinrich
On 29.09.20 10:22, Rick Chen wrote:
From: Heinrich Schuchardt [mailto:xypron.glpk@gmx.de] Sent: Sunday, September 27, 2020 7:21 AM To: Rick Jian-Zhi Chen(陳建志) Cc: Simon Glass; Sean Anderson; Bin Meng; u-boot@lists.denx.de; Heinrich Schuchardt Subject: [PATCH v2 1/1] riscv: reset after crash
If an exception occurs on ARM or x86, we call panic() which will try to reset the board. Do the same on RISC-V.
To avoid -Werror=format-zero-length move a '\n' to the string passed to panic. We don't need a message here as depending on CONFIG_PANIC_HANG we will either see
### ERROR ### Please RESET the board ###
or
resetting ...
as next message.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de
v2: Remove a superfluous message passed to panic().
arch/riscv/lib/interrupts.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/riscv/lib/interrupts.c b/arch/riscv/lib/interrupts.c index 8ff40f0f36..43b10a2b9b 100644 --- a/arch/riscv/lib/interrupts.c +++ b/arch/riscv/lib/interrupts.c @@ -27,7 +27,7 @@ static void show_efi_loaded_images(uintptr_t epc) static void show_regs(struct pt_regs *regs) { #ifdef CONFIG_SHOW_REGS
printf("SP: " REG_FMT " GP: " REG_FMT " TP: " REG_FMT "\n",
printf("\nSP: " REG_FMT " GP: " REG_FMT " TP: " REG_FMT "\n", regs->sp, regs->gp, regs->tp); printf("T0: " REG_FMT " T1: " REG_FMT " T2: " REG_FMT "\n", regs->t0, regs->t1, regs->t2);
@@ -45,7 +45,7 @@ static void show_regs(struct pt_regs *regs) regs->s7, regs->s8, regs->s9); printf("S10: " REG_FMT " S11: " REG_FMT " T3: " REG_FMT "\n", regs->s10, regs->s11, regs->t3);
printf("T4: " REG_FMT " T5: " REG_FMT " T6: " REG_FMT "\n\n",
printf("T4: " REG_FMT " T5: " REG_FMT " T6: " REG_FMT "\n", regs->t4, regs->t5, regs->t6);
#endif } @@ -79,12 +79,12 @@ static void _exit_trap(ulong code, ulong epc, ulong tval, struct pt_regs *regs) printf("EPC: " REG_FMT " RA: " REG_FMT " TVAL: " REG_FMT "\n", epc, regs->ra, tval); if (gd->flags & GD_FLG_RELOC)
printf("EPC: " REG_FMT " RA: " REG_FMT " reloc adjusted\n\n",
printf("EPC: " REG_FMT " RA: " REG_FMT " reloc adjusted\n", epc - gd->reloc_off, regs->ra - gd->reloc_off); show_regs(regs); show_efi_loaded_images(epc);
hang();
panic("\n");
}
int interrupt_init(void)
2.28.0
Reviewed-by: Rick Chen rick@andestech.com
BTW, it conflicts with Sean's [PATCH v3 0/7] riscv: Correctly handle IPIs already pending upon boot
error: patch failed: arch/riscv/lib/interrupts.c:79 error: arch/riscv/lib/interrupts.c: patch does not apply Patch failed at 0001 riscv: reset after crash
Thanks, Rick
Thanks for reviewing. Do you have a git repository and branch on which I should rebase my patch? Or will you handle the rebase?
You can rebase on u-boot-riscv/next.
Thanks, Rick
Best regards
Heinrich
participants (2)
-
Heinrich Schuchardt
-
Rick Chen