lp_vboot.c
1 /* SPDX-License-Identifier: BSD-3-Clause */ 2 3 #include <libpayload-config.h> 4 #include <arch/virtual.h> 5 #include <assert.h> 6 #include <libpayload.h> 7 #include <stdio.h> 8 #include <stdlib.h> 9 #include <sysinfo.h> 10 #include <vb2_api.h> 11 #include <lp_vboot.h> 12 13 struct vb2_context *vboot_get_context(void) 14 { 15 static struct vb2_context *ctx; 16 17 if (ctx) 18 return ctx; 19 20 die_if(lib_sysinfo.vboot_workbuf == 0, "vboot workbuf pointer is not set\n"); 21 22 /* Use the firmware verification workbuf from coreboot. */ 23 vb2_error_t rv = vb2api_reinit(phys_to_virt(lib_sysinfo.vboot_workbuf), &ctx); 24 25 die_if(rv, "vboot workbuf could not be initialized, error: %#x\n", rv); 26 27 return ctx; 28 } 29 30 void vboot_fail_and_reboot(struct vb2_context *ctx, uint8_t reason, uint8_t subcode) 31 { 32 if (reason) 33 vb2api_fail(ctx, reason, subcode); 34 35 printf("vboot: reboot requested (reason: %#x, subcode %#x)", reason, subcode); 36 vb2ex_commit_data(ctx); 37 reboot(); 38 } 39 40 int vboot_recovery_mode_enabled(void) 41 { 42 return !!(vboot_get_context()->flags & VB2_CONTEXT_RECOVERY_MODE); 43 }