diff mbox series

[v2,1/1] riscv: reset after crash

Message ID 20200926232113.14721-1-xypron.glpk@gmx.de
State New
Delegated to: Andes
Headers show
Series [v2,1/1] riscv: reset after crash | expand

Commit Message

Heinrich Schuchardt Sept. 26, 2020, 11:21 p.m. UTC
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

Comments

Rick Chen Sept. 29, 2020, 8:22 a.m. UTC | #1
> 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
Heinrich Schuchardt Sept. 29, 2020, 9:27 a.m. UTC | #2
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
Rick Chen Sept. 30, 2020, 2:52 a.m. UTC | #3
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 mbox series

Patch

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)