From b741e2274e4b3dd677ee55c4875c420cc8d3a71a Mon Sep 17 00:00:00 2001 From: Patrick Rudolph Date: Wed, 8 Oct 2025 12:36:30 +0200 Subject: [PATCH] acpi: Add enums for TPM2 start method Based on the "TCG ACPI Specification" Version 1.3 published 2021. Add an enum for the ACPI start methods and use it instead of hardcoding various numbers in plain code. Change-Id: I8b66527ee7417e231fe52e0a609b8c100de522b0 Signed-off-by: Patrick Rudolph Reviewed-on: https://review.coreboot.org/c/coreboot/+/89458 Reviewed-by: Paul Menzel Tested-by: build bot (Jenkins) Reviewed-by: Angel Pons --- src/acpi/acpi.c | 9 +++------ src/include/acpi/acpi.h | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/acpi/acpi.c b/src/acpi/acpi.c index 13728c904d..94b6309261 100644 --- a/src/acpi/acpi.c +++ b/src/acpi/acpi.c @@ -287,17 +287,14 @@ static void acpi_create_tpm2(acpi_header_t *header, void *unused) tpm2->platform_class = 0; if (CONFIG(AMD_CRB_FTPM) && crb_tpm_is_active()) { - /* Must be set to 2 for AMD fTPM Support */ tpm2->control_area = crb_tpm_base_address() + 0x40; - tpm2->start_method = 2; + tpm2->start_method = ACPI_TPM2_SM_ACPI_START; } else if (CONFIG(CRB_TPM) && crb_tpm_is_active()) { - /* Must be set to 7 for CRB Support */ tpm2->control_area = crb_tpm_base_address() + 0x40; - tpm2->start_method = 7; + tpm2->start_method = ACPI_TPM2_SM_CRB; } else { - /* Must be set to 0 for FIFO interface support */ tpm2->control_area = 0; - tpm2->start_method = 6; + tpm2->start_method = ACPI_TPM2_SM_MMIO_TIS; } memset(tpm2->msp, 0, sizeof(tpm2->msp)); diff --git a/src/include/acpi/acpi.h b/src/include/acpi/acpi.h index 87c99a1eb3..ac00050031 100644 --- a/src/include/acpi/acpi.h +++ b/src/include/acpi/acpi.h @@ -243,6 +243,20 @@ typedef struct acpi_tcpa { u64 lasa; } __packed acpi_tcpa_t; +/* TCG ACPI Specification "Table 8: Start Method values for ACPI table for TPM 2.0" */ +enum acpi_tpm2_start_methods { + ACPI_TPM2_SM_NOT_ALLOWED = 0, + ACPI_TPM2_SM_LEGACY, + ACPI_TPM2_SM_ACPI_START, + ACPI_TPM2_SM_MMIO_TIS = 6, + ACPI_TPM2_SM_CRB, + ACPI_TPM2_SM_CRB_AND_ACPI_START, + ACPI_TPM2_SM_CRB_AND_ARM_SECURE_MONITOR = 11, + ACPI_TPM2_SM_FIFO_I2C, + ACPI_TPM2_SM_RESERVED_MMIO0, + ACPI_TPM2_SM_RESERVED_MMIO1, +}; + typedef struct acpi_tpm2 { acpi_header_t header; u16 platform_class;