From b2163ea84b683d6dc4630125b9921a5c681ed434 Mon Sep 17 00:00:00 2001 From: Jakub Czapiga Date: Fri, 8 Sep 2023 13:19:00 +0000 Subject: libpayload: Add vboot and reboot utility functions Patch adds: - vboot_fail_and_reboot() for vboot failures handling. - reboot() weak implementation for payloads to implement, used by vboot_fail_and_reboot(). - vboot_recovery_mode_enabled() to check if recovery mode flag is set in vboot context. Implemented for future libcbfs implementation of VBOOT_CBFS_INTEGRATION in libpayload. BUG=b:197114807 TEST=none Change-Id: I53d1955573d54bc56d05f7780c18dcc8ac1fd399 Signed-off-by: Jakub Czapiga Reviewed-on: https://review.coreboot.org/c/coreboot/+/77725 Tested-by: build bot (Jenkins) Reviewed-by: Yu-Ping Wu Reviewed-by: Julius Werner Reviewed-by: Eric Lai --- payloads/libpayload/libc/lib.c | 5 +++++ payloads/libpayload/libc/lp_vboot.c | 15 +++++++++++++++ 2 files changed, 20 insertions(+) (limited to 'payloads/libpayload/libc') diff --git a/payloads/libpayload/libc/lib.c b/payloads/libpayload/libc/lib.c index 77e213c7e0..dc212e71a1 100644 --- a/payloads/libpayload/libc/lib.c +++ b/payloads/libpayload/libc/lib.c @@ -174,3 +174,8 @@ void buffer_to_fifo32_prefix(const void *buffer, u32 prefix, int prefsz, size_t } } + +__weak void reboot(void) +{ + fatal("Reboot requested but not implemented\n"); +} diff --git a/payloads/libpayload/libc/lp_vboot.c b/payloads/libpayload/libc/lp_vboot.c index b7717c7e78..eddd317ba0 100644 --- a/payloads/libpayload/libc/lp_vboot.c +++ b/payloads/libpayload/libc/lp_vboot.c @@ -26,3 +26,18 @@ struct vb2_context *vboot_get_context(void) return ctx; } + +void vboot_fail_and_reboot(struct vb2_context *ctx, uint8_t reason, uint8_t subcode) +{ + if (reason) + vb2api_fail(ctx, reason, subcode); + + printf("vboot: reboot requested (reason: %#x, subcode %#x)", reason, subcode); + vb2ex_commit_data(ctx); + reboot(); +} + +int vboot_recovery_mode_enabled(void) +{ + return !!(vboot_get_context()->flags & VB2_CONTEXT_RECOVERY_MODE); +} -- cgit v1.2.3