Hi, The following patches implement the TPM Physical Presence Interface that allows a user to set a command via ACPI (sysfs entry in Linux) that, upon the next reboot, the firmware looks for and acts upon by sending sequences of commands to the TPM.
A dedicated memory region is added to the TPM CRB & TIS devices, at address/size 0xFED45000/0x400. A new "etc/tpm/config" fw_cfg entry holds the location for that PPI region and some version details, to allow for future flexibility. With the associated edk2/ovmf firmware, the Windows HLK "PPI 1.3" test now runs successfully. It is based on previous work from Stefan Berger ("[PATCH v2 0/4] Implement Physical Presence interface for TPM 1.2 and 2") The edk2 support is merged upstream. v14: - rebased, fixing conflicts after compat-props refactoring - fix build regression from v13 with --disable-tpm v13: - removed needless error handling in tpm_ppi_init() - splitted "add ACPI memory clear interface" - moved acpi build function in dedicated hw/acpi/tpm.c - added some function documentation in headers - various code cleanups suggested by Philippe - rebased Marc-André Lureau (3): tpm: add a "ppi" boolean property acpi: add ACPI memory clear interface tpm: clear RAM when "memory overwrite" requested Stefan Berger (3): tpm: allocate/map buffer for TPM Physical Presence interface acpi: expose TPM/PPI configuration parameters to firmware via fw_cfg acpi: build TPM Physical Presence interface hw/tpm/tpm_ppi.h | 46 +++++ include/hw/acpi/tpm.h | 21 ++ hw/acpi/tpm.c | 448 ++++++++++++++++++++++++++++++++++++++++++ hw/core/machine.c | 8 + hw/i386/acpi-build.c | 29 ++- hw/tpm/tpm_crb.c | 11 ++ hw/tpm/tpm_ppi.c | 53 +++++ hw/tpm/tpm_tis.c | 11 ++ stubs/tpm.c | 5 + docs/specs/tpm.txt | 104 ++++++++++ hw/acpi/Makefile.objs | 1 + hw/tpm/Makefile.objs | 1 + hw/tpm/trace-events | 3 + 13 files changed, 739 insertions(+), 2 deletions(-) create mode 100644 hw/tpm/tpm_ppi.h create mode 100644 hw/acpi/tpm.c create mode 100644 hw/tpm/tpm_ppi.c -- 2.20.1.2.gb21ebb671b