summaryrefslogtreecommitdiff
path: root/src/vendorcode/google/chromeos/elog.c
blob: e60cec83b01f7561cb906bee03a3f1d6d4c0010a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/* SPDX-License-Identifier: GPL-2.0-only */

#include <acpi/acpi.h>
#include <bootstate.h>
#include <console/console.h>
#include <elog.h>
#include <security/vboot/misc.h>
#include <security/vboot/vboot_common.h>
#include <vb2_api.h>

static void elog_add_vboot_info(void *unused)
{
	/*
	 * Skip logging boot info if CSE sync scheduled at payload.
	 * The payload should log boot info after CSE sync.
	 */
	if (CONFIG(SOC_INTEL_CSE_LITE_SYNC_BY_PAYLOAD))
		return;

	/* Skip logging boot info in ACPI resume path */
	if (acpi_is_wakeup_s3())
		return;

	struct vb2_context *ctx = vboot_get_context();
	union vb2_fw_boot_info data = vb2api_get_fw_boot_info(ctx);
	uint8_t width = offsetof(union vb2_fw_boot_info, recovery_reason);

	if (vboot_recovery_mode_enabled())
		width = sizeof(union vb2_fw_boot_info);

	elog_add_event_raw(ELOG_TYPE_FW_VBOOT_INFO, &data, width);
}

BOOT_STATE_INIT_ENTRY(BS_POST_DEVICE, BS_ON_ENTRY, elog_add_vboot_info, NULL);