riscv: resume needs to be a global

If we take an exception before u-boot is relocated, there's a good
chance we will end up in an endless loop of exceptions because resume is
invalid until after relocation.

Signed-off-by: Anton Blanchard <antonb@tenstorrent.com>
Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
This commit is contained in:
Anton Blanchard 2024-08-08 02:14:17 +00:00 committed by Leo Yu-Chi Liang
parent 9d688e6da5
commit 8e1acda14e
2 changed files with 5 additions and 6 deletions

View file

@ -42,6 +42,7 @@ struct arch_global_data {
#ifdef CONFIG_SMBIOS
ulong smbios_start; /* Start address of SMBIOS table */
#endif
struct resume_data *resume;
};
#include <asm-generic/global_data.h>

View file

@ -22,11 +22,9 @@
DECLARE_GLOBAL_DATA_PTR;
static struct resume_data *resume;
void set_resume(struct resume_data *data)
{
resume = data;
gd->arch.resume = data;
}
static void show_efi_loaded_images(uintptr_t epc)
@ -138,9 +136,9 @@ static void _exit_trap(ulong code, ulong epc, ulong tval, struct pt_regs *regs)
"Store/AMO page fault",
};
if (resume) {
resume->code = code;
longjmp(resume->jump, 1);
if (gd->arch.resume) {
gd->arch.resume->code = code;
longjmp(gd->arch.resume->jump, 1);
}
if (code < ARRAY_SIZE(exception_code))