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. v6: (see changeset in patches) - replace mmio region with ram - ASL code improvements - endianess fix on 8bit fw-cfg fields v5: - more code documentation (Marc-André) - use some explicit named variables to ease reading (Marc-André) - use fixed size fields/memory regions, remove PPI struct (Marc-André) - only add PPI ACPI methods if PPI is enabled (Marc-André) - document the qemu/firmware ACPI memory region (Stefan) - remove the dummy ACPI memory clear interface patch v4: - add a "ppi" property, default to true, unless machine <= 2.12 - pass PPI address to tpm_ppi_init_io() - renamed tpm_ppi struct name Marc-André Lureau (1): tpm: add a "ppi" boolean property Stefan Berger (3): tpm: implement virtual memory device for TPM PPI acpi: add fw_cfg file for TPM and PPI virtual memory device acpi: build TPM Physical Presence interface hw/tpm/tpm_ppi.h | 25 +++ include/hw/acpi/tpm.h | 17 ++ include/hw/compat.h | 10 + hw/i386/acpi-build.c | 420 +++++++++++++++++++++++++++++++++++++++++- hw/tpm/tpm_crb.c | 11 ++ hw/tpm/tpm_ppi.c | 33 ++++ hw/tpm/tpm_tis.c | 11 ++ docs/specs/tpm.txt | 99 ++++++++++ hw/tpm/Makefile.objs | 2 +- hw/tpm/trace-events | 4 + 10 files changed, 629 insertions(+), 3 deletions(-) create mode 100644 hw/tpm/tpm_ppi.h create mode 100644 hw/tpm/tpm_ppi.c -- 2.18.0.rc1