diff --git a/lib/efi_loader/efi_tcg2.c b/lib/efi_loader/efi_tcg2.c index 1860dc50238..763199a6e8a 100644 --- a/lib/efi_loader/efi_tcg2.c +++ b/lib/efi_loader/efi_tcg2.c @@ -882,45 +882,24 @@ out: } /** - * efi_append_scrtm_version - Append an S-CRTM EV_S_CRTM_VERSION event on the - * eventlog and extend the PCRs - * - * @dev: TPM device - * - * @Return: status code - */ -static efi_status_t efi_append_scrtm_version(struct udevice *dev) -{ - efi_status_t ret; - - ret = measure_event(dev, 0, EV_S_CRTM_VERSION, - strlen(version_string) + 1, (u8 *)version_string); - - return ret; -} - -/** - * efi_init_event_log() - initialize an eventlog + * efi_init_tpm() - initialize tpm and eventlog * * Return: status code */ -static efi_status_t efi_init_event_log(void) +static efi_status_t efi_init_tpm(void) { /* * vendor_info_size is currently set to 0, we need to change the length * and allocate the flexible array member if this changes */ - struct tcg2_event_log elog; struct udevice *dev; + char *buffer; efi_status_t ret; int rc; - if (tcg2_platform_get_tpm2(&dev)) - return EFI_DEVICE_ERROR; - ret = efi_allocate_pool(EFI_BOOT_SERVICES_DATA, CONFIG_TPM2_EVENT_LOG_SIZE, - (void **)&event_log.buffer); + (void **)&buffer); if (ret != EFI_SUCCESS) return ret; @@ -928,42 +907,14 @@ static efi_status_t efi_init_event_log(void) * initialize log area as 0xff so the OS can easily figure out the * last log entry */ - memset(event_log.buffer, 0xff, CONFIG_TPM2_EVENT_LOG_SIZE); - - /* - * The log header is defined to be in SHA1 event log entry format. - * Setup event header - */ - event_log.pos = 0; - event_log.last_event_size = 0; - event_log.get_event_called = false; - event_log.ebs_called = false; - event_log.truncated = false; + memset(buffer, 0xff, CONFIG_TPM2_EVENT_LOG_SIZE); - /* - * Check if earlier firmware have passed any eventlog. Different - * platforms can use different ways to do so. - */ - elog.log = event_log.buffer; - elog.log_size = CONFIG_TPM2_EVENT_LOG_SIZE; - rc = tcg2_log_prepare_buffer(dev, &elog, false); + rc = tcg2_measurement_init(&dev, buffer, CONFIG_TPM2_EVENT_LOG_SIZE); if (rc) { ret = (rc == -ENOBUFS) ? EFI_BUFFER_TOO_SMALL : EFI_DEVICE_ERROR; goto free_pool; } - event_log.pos = elog.log_position; - - /* - * Add SCRTM version to the log if previous firmmware - * doesn't pass an eventlog. - */ - if (!elog.found) { - ret = efi_append_scrtm_version(dev); - if (ret != EFI_SUCCESS) - goto free_pool; - } - ret = create_final_event(); if (ret != EFI_SUCCESS) goto free_pool; @@ -1587,24 +1538,10 @@ out: efi_status_t efi_tcg2_register(void) { efi_status_t ret = EFI_SUCCESS; - struct udevice *dev; struct efi_event *event; u32 err; - if (tcg2_platform_get_tpm2(&dev)) { - log_warning("Missing TPMv2 device for EFI_TCG_PROTOCOL\n"); - return EFI_SUCCESS; - } - - /* initialize the TPM as early as possible. */ - err = tpm_auto_start(dev); - if (err) { - ret = EFI_DEVICE_ERROR; - log_err("TPM startup failed\n"); - goto fail; - } - - ret = efi_init_event_log(); + ret = efi_init_tpm(); if (ret != EFI_SUCCESS) { tcg2_uninit(); goto fail;