LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [RFC PATCH] xtensa: xtfpga: Try software restart before simulating CPU reset
@ 2021-08-01 17:36 Guenter Roeck
0 siblings, 0 replies; only message in thread
From: Guenter Roeck @ 2021-08-01 17:36 UTC (permalink / raw)
To: Chris Zankel; +Cc: Max Filippov, linux-xtensa, linux-kernel, Guenter Roeck
Rebooting xtensa images in qemu does not work. When executing a reboot
command, the qemu session either hangs or experiences an endless sequence
of error messages.
Kernel panic - not syncing: Unrecoverable error in exception handler
Debugging in qemu shows that the code jumps to the CPU restart address,
but Linux can not recover from there.
As it turns out, the FPGA has a means to reset the CPU by writing 0xdead
into a specific FPGA IO address. Use that mechanism to attempt a platform
reset. If it does not work, fall back to the existing mechanism.
Signed-off-by: Guenter Roeck <firstname.lastname@example.org>
No idea if this is acceptable, but I thought it might be worth a try.
arch/xtensa/platforms/xtfpga/setup.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/arch/xtensa/platforms/xtfpga/setup.c b/arch/xtensa/platforms/xtfpga/setup.c
index 4f7d6142d41f..9b1e36b06530 100644
@@ -51,8 +51,12 @@ void platform_power_off(void)
- /* Flush and reset the mmu, simulate a processor reset, and
- * jump to the reset vector. */
+ /* Try software reset first. */
+ *((unsigned int *)XTFPGA_SWRST_VADDR) = 0xdead;
+ /* If software reset did not work, flush and reset the mmu,
+ * simulate a processor reset, and jump to the reset vector.
/* control never gets here */
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-08-01 17:37 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-01 17:36 [RFC PATCH] xtensa: xtfpga: Try software restart before simulating CPU reset Guenter Roeck
This is a public inbox, see mirroring instructions
on how to clone and mirror all data and code used for this inbox