diff options
Diffstat (limited to 'payloads/libpayload/libc')
-rw-r--r-- | payloads/libpayload/libc/Makefile.inc | 4 | ||||
-rw-r--r-- | payloads/libpayload/libc/lp_vboot.c | 28 |
2 files changed, 32 insertions, 0 deletions
diff --git a/payloads/libpayload/libc/Makefile.inc b/payloads/libpayload/libc/Makefile.inc index 96d1312f65..bc706ae5a7 100644 --- a/payloads/libpayload/libc/Makefile.inc +++ b/payloads/libpayload/libc/Makefile.inc @@ -40,6 +40,10 @@ libc-$(CONFIG_LP_LIBC) += coreboot.c libc-$(CONFIG_LP_LIBC) += fmap.c libc-$(CONFIG_LP_LIBC) += fpmath.c +ifeq ($(CONFIG_LP_VBOOT_LIB),y) +libc-$(CONFIG_LP_LIBC) += lp_vboot.c +endif + ifeq ($(CONFIG_LP_LIBC),y) libc-srcs += $(coreboottop)/src/commonlib/bsd/elog.c endif diff --git a/payloads/libpayload/libc/lp_vboot.c b/payloads/libpayload/libc/lp_vboot.c new file mode 100644 index 0000000000..b7717c7e78 --- /dev/null +++ b/payloads/libpayload/libc/lp_vboot.c @@ -0,0 +1,28 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +#include <libpayload-config.h> +#include <arch/virtual.h> +#include <assert.h> +#include <libpayload.h> +#include <stdio.h> +#include <stdlib.h> +#include <sysinfo.h> +#include <vb2_api.h> +#include <lp_vboot.h> + +struct vb2_context *vboot_get_context(void) +{ + static struct vb2_context *ctx; + + if (ctx) + return ctx; + + die_if(lib_sysinfo.vboot_workbuf == 0, "vboot workbuf pointer is not set\n"); + + /* Use the firmware verification workbuf from coreboot. */ + vb2_error_t rv = vb2api_reinit(phys_to_virt(lib_sysinfo.vboot_workbuf), &ctx); + + die_if(rv, "vboot workbuf could not be initialized, error: %#x\n", rv); + + return ctx; +} |