Message ID | 20200926232113.14721-1-xypron.glpk@gmx.de |
---|---|
State | Superseded, archived |
Delegated to: | Andes |
Headers | show |
Series | [v2,1/1] riscv: reset after crash | expand |
> 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
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)
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(-) -- 2.28.0