summaryrefslogtreecommitdiffstats
path: root/src/commonlib
diff options
context:
space:
mode:
authorPatrick Rudolph <patrick.rudolph@9elements.com>2020-09-21 09:49:31 +0200
committerHung-Te Lin <hungte@chromium.org>2020-12-21 02:38:20 +0000
commit39d69276091043a41d7cd588dd686ea4b572592e (patch)
tree0f65c0419a855ac6fc7264ad346580c41a02fac4 /src/commonlib
parentf20151dfaa4ffbee9b58aa86d77320c45bd81707 (diff)
downloadcoreboot-39d69276091043a41d7cd588dd686ea4b572592e.tar.gz
coreboot-39d69276091043a41d7cd588dd686ea4b572592e.tar.bz2
coreboot-39d69276091043a41d7cd588dd686ea4b572592e.zip
drivers/tpm: Implement full PPI
Implement the ACPI PPI interface as described in "TCG PC Client Physical Presence Interface Specification" Version 1.3. Add a new Kconfig that allows to use the full PPI instead of the stub version compiled in. This doesn't add code to execute the PPI request, as that's up to the payload with graphical UI support. Tested on GNU/Linux 5.6 using the sysfs interface at: /sys/class/tpm/tpm0/ppi/ Change-Id: Ifffe1d9b715e2c37568e1b009e86c298025c89ac Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/45568 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/commonlib')
-rw-r--r--src/commonlib/include/commonlib/cbmem_id.h1
-rw-r--r--src/commonlib/include/commonlib/coreboot_tables.h24
2 files changed, 25 insertions, 0 deletions
diff --git a/src/commonlib/include/commonlib/cbmem_id.h b/src/commonlib/include/commonlib/cbmem_id.h
index 6e245451104c..f58d7b11c261 100644
--- a/src/commonlib/include/commonlib/cbmem_id.h
+++ b/src/commonlib/include/commonlib/cbmem_id.h
@@ -56,6 +56,7 @@
#define CBMEM_ID_TCPA_TCG_LOG 0x54445041
#define CBMEM_ID_TIMESTAMP 0x54494d45
#define CBMEM_ID_TPM2_TCG_LOG 0x54504d32
+#define CBMEM_ID_TPM_PPI 0x54505049
#define CBMEM_ID_VBOOT_HANDOFF 0x780074f0 /* deprecated */
#define CBMEM_ID_VBOOT_SEL_REG 0x780074f1 /* deprecated */
#define CBMEM_ID_VBOOT_WORKBUF 0x78007343
diff --git a/src/commonlib/include/commonlib/coreboot_tables.h b/src/commonlib/include/commonlib/coreboot_tables.h
index c740975bc7e4..be40c3818f1d 100644
--- a/src/commonlib/include/commonlib/coreboot_tables.h
+++ b/src/commonlib/include/commonlib/coreboot_tables.h
@@ -81,6 +81,7 @@ enum {
LB_TAG_FMAP = 0x0037,
LB_TAG_PLATFORM_BLOB_VERSION = 0x0038,
LB_TAG_SMMSTOREV2 = 0x0039,
+ LB_TAG_TPM_PPI_HANDOFF = 0x003a,
LB_TAG_BOARD_CONFIG = 0x0040,
/* The following options are CMOS-related */
LB_TAG_CMOS_OPTION_TABLE = 0x00c8,
@@ -521,4 +522,27 @@ struct lb_smmstorev2 {
uint8_t unused[3]; /* Set to zero */
};
+enum lb_tmp_ppi_tpm_version {
+ LB_TPM_VERSION_UNSPEC = 0,
+ LB_TPM_VERSION_TPM_VERSION_1_2,
+ LB_TPM_VERSION_TPM_VERSION_2,
+};
+
+/*
+ * Handoff buffer for TPM Physical Presence Interface.
+ * * ppi_address Pointer to PPI buffer shared with ACPI
+ * The layout of the buffer matches the QEMU virtual memory device
+ * that is generated by QEMU.
+ * See files 'hw/i386/acpi-build.c' and 'include/hw/acpi/tpm.h'
+ * for details.
+ * * tpm_version TPM version: 1 for TPM1.2, 2 for TPM2.0
+ * * ppi_version BCD encoded version of TPM PPI interface
+ */
+struct lb_tpm_physical_presence {
+ uint32_t tag;
+ uint32_t size;
+ uint32_t ppi_address; /* Address of ACPI PPI communication buffer */
+ uint8_t tpm_version; /* 1: TPM1.2, 2: TPM2.0 */
+ uint8_t ppi_version; /* BCD encoded */
+} __packed;
#endif