coreboot/payloads/libpayload/include
Julius Werner 7fb0f14ebe libpayload: arm64: Fix asynchronous exception routing in payload
Six years ago we had a problem with not getting SError exceptions in
coreboot, and we fixed it by setting the right SCR_EL3 bits to force
exception routing to EL3 (commit bb345abbfc ("arm64: Correctly unmask
asynchronous SError interrupts")). Turns out that we have the same
problem in the payload but we never fixed it there. EL2 exception
routing works differently, so in order to achieve the same effect here
we can either enable the HCR_EL2 AMO, FMO and IMO bits (respectively),
or we can just enable the TGE bit which traps everything. This patch
chooses the latter, and it also ensures that the PSTATE exception
masking (DAIF) bits are in the expected state (although they usually
already are).

This state will persist after handoff to the kernel or chained payload,
and will prevent transition into EL1 if not cleared first. This should
be fine since any code taking control in EL2 should be expected to
correctly reintialize HCR_EL2 before handing off into EL1 (the Linux
kernel has always reinitialized this very early after its entry point).
If any selfboot() payloads are broken after this change, the payload
should be fixed to reinitialize HCR_EL2 to 0 (or desired value).

Change-Id: I339eded5a5344b5753c94be82e4f1e52e00b39f4
Signed-off-by: Julius Werner <jwerner@chromium.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/90127
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Paul Menzel <paulepanter@mailbox.org>
Reviewed-by: Yidi Lin <yidilin@google.com>
Reviewed-by: Chen-Tsung Hsieh <chentsung@google.com>
2025-11-25 16:49:56 +00:00
..
arm/arch payloads/libpayload: Add fast data types to types.h 2025-03-10 15:21:44 +00:00
arm64/arch libpayload: arm64: Fix asynchronous exception routing in payload 2025-11-25 16:49:56 +00:00
arpa treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
mock/arch payloads/libpayload: Add fast data types to types.h 2025-03-10 15:21:44 +00:00
pci libpayload/storage: Add NVMe driver 2021-04-07 10:58:04 +00:00
storage libpayload/storage: Add NVMe driver 2021-04-07 10:58:04 +00:00
sys treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
udc treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
usb libpayload/usb: Add format string checking to usb_debug 2020-11-22 22:34:55 +00:00
x86/arch payloads/libpayload: Add fast data types to types.h 2025-03-10 15:21:44 +00:00
archive.h treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
assert.h libpayload: Use __func__ instead of old __FUNCTION__ 2023-02-17 16:19:44 +00:00
boot_device.h libpayload: Add boot_device_read() function 2021-12-10 17:56:34 +00:00
cbfs.h libpayload: Remove legacy CBFS API 2024-02-22 21:18:39 +00:00
cbfs_glue.h cbfs/vboot: Adapt to new vb2_digest API 2022-09-02 23:51:29 +00:00
cbgfx.h libpayload: cbgfx: Support buffered I/O 2020-08-28 21:40:58 +00:00
coreboot_tables.h lib/edid_fill_fb: Add dual pipe flag to lb_framebuffer_flags 2025-11-18 07:37:20 +00:00
ctype.h payloads: Drop unneeded empty lines 2020-09-21 16:20:57 +00:00
delay.h libpayload: Use Kconfig instead of weak symbol for arch_ndelay() 2025-05-22 19:27:30 +00:00
die.h treewide: Move stdlib.h to commonlib 2024-03-15 10:09:43 +00:00
endian.h libpayload/endian: Add read32p/write32p macros and friends 2024-10-15 10:16:40 +00:00
errno.h treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
exception.h treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
fmap.h commonlib/bsd: Remove cb_err_t 2022-03-09 02:18:21 +00:00
fpmath.h libpayload: Add simple 32.32 fixed-point math API 2020-07-09 00:32:11 +00:00
gdb.h libpayload: gdb: Factor out gdb_handle_reentrant_exception() from arm32 2018-10-12 20:17:40 +00:00
getopt.h
inttypes.h
kconfig.h Add new CONFIG(XXX) macro to replace IS_ENABLED(CONFIG_XXX) 2019-03-07 17:06:28 +00:00
keycodes.h
libpayload.h libpayload: Include commonlib/helpers.h in libpayload.h for GPL builds 2024-03-25 08:23:35 +00:00
limits.h Revert "libpayload: Define UCHAR_MAX/CHAR_MIN/CHAR_MAX" 2025-10-14 09:58:49 +00:00
lp_vboot.h libpayload: Add vboot and reboot utility functions 2023-09-18 15:42:31 +00:00
lz4.h payloads/libpayload: Support legacy LZ4 compression format 2025-11-13 23:45:02 +00:00
lzma.h treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
malloc.h
multiboot_tables.h treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
panel.h
pci.h libpayload/pci: Add support for bus mapping 2022-05-20 02:51:33 +00:00
queue.h payloads: Drop unneeded empty lines 2020-09-21 16:20:57 +00:00
stdarg.h libpayload/include/stdarg.h: Add va_copy builtin 2023-08-17 16:46:07 +00:00
stdbool.h libpayload: Add <stdbool.h> 2020-10-26 06:57:06 +00:00
stddef.h libpayload: Outsource delay function into own header 2023-08-24 13:35:02 +00:00
stdint.h libpayload: Add missing SIZE_MAX define 2024-08-19 23:20:00 +00:00
stdio.h treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
stdlib.h treewide: Move stdlib.h to commonlib 2024-03-15 10:09:43 +00:00
string.h libpayload: Use Kconfig for architecture memcpy, not weak symbols 2025-05-22 19:27:24 +00:00
strings.h libpayload: strings.h: Use builtin __ffs instead of included one 2023-03-07 17:11:05 +00:00
sysinfo.h libpayload: Add CBMEM_ID_MEMINFO to sysinfo 2025-11-22 18:55:00 +00:00
term.h
time.h treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
unistd.h treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
video_console.h treewide: Remove "this file is part of" lines 2020-05-11 17:11:40 +00:00
wchar.h includes: Provide wchar.h with wchar_t and wint_t 2021-06-18 04:38:16 +00:00