
On 10.09.20 13:03, Sean Anderson wrote:
On 9/10/20 7:00 AM, Heinrich Schuchardt wrote:
On the RISC-V platform register gp (x3) is used as global data pointer in U-Boot. When executing a UEFI binary we cannot assume that the payload will restore the register before calling the UEFI API. So U-Boot must take care of saving the register value before invoking the payload and restoring it whenever the API is called or the payload returns.
On some system like the Sipeed Maix we do not have a UEFI runtime reset implementation. Hence we call do_reset() in the UEFI selftest. Here too we need to restore the global data pointer before invoking the U-Boot API.
Heinrich Schuchardt (3): riscv: define function set_gd() efi_loader: save global data pointer on RISC-V efi_selftest: restore gd before do_reset()
arch/riscv/include/asm/global_data.h | 9 +++++ lib/efi_loader/efi_boottime.c | 54 ++++++++++++++-------------- lib/efi_selftest/efi_selftest.c | 6 ++-- 3 files changed, 40 insertions(+), 29 deletions(-)
-- 2.28.0
Do we need to save tp as well? It is used by secondary harts to save the hartid for handle_ipi.
Only the boot hart enters the UEFI payload.
Best regards
--Sean