On 06/14/2017 09:51 AM, Laszlo Ersek wrote:
Hi Stefan,
the MAINTAINERS file doesn't seem to cover any of the TPM-related files
in the tree:
backends/tpm.c
hw/tpm/
include/hw/acpi/tpm.h
include/sysemu/tpm*
tpm.c
but I have a gut feeling that you are semi-officially maintaining TPM
anyway, so I'm going to ask you. :)
Can you please write a document, to be placed under docs/specs/, that
describes the TPM device from a guest perspective, also explaining how
the guest-visible bits are connected to (current) TPM backend(s)?
The document wouldn't have to be very long; I think all standardized
interfaces could be mentioned by reference only (by spec names and
locations). The document should however describe any QEMU specifics, and
how the relevant specs are brought together in the implementation.
Some text files I'm familiar with and can recommend as examples:
- docs/specs/fw_cfg.txt
- docs/specs/pvpanic.txt
- docs/specs/vmgenid.txt
(There may be more and/or better examples of course.)
This document should be the starting point for developers that want to
support QEMU's TPM(s) in guest firmware that is different from SeaBIOS.
(You've been maintaining the related SeaBIOS feature.)
Would you be willing to author such a design document?
Here's what I have so far with pointers to TCG specs. Does that go in the
right direction?
QEMU TPM Device
===============
= Guest-side Hardware Interface =
The QEMU TPM emulation implements a TPM TIS hardware interface following
the Trusted Computing Group's specification "TCG PC Client Specific TPM
Interface Specification (TIS)", Specifcation Version 1.3, 21 March 2013.
This specification, or a later version of it, can be accessed from the
following URL:
https://trustedcomputinggroup.org/pc-client-work-group-pc-client-specific-tpm-interface-specification-tis/
The TIS interface makes a memory mapped IO region in the area 0xfed40000 -
0xfed44fff available to the guest operating system.
= ACPI Interface =
The TPM device is defined with ACPI ID "PNP0C31". QEMU builds a SSDT
and passes it into the guest through the fw_cfg device. The device
description contains the base address of the TIS interface 0xfed40000
and the size of the MMIO area (0x5000). In case a TPM2 is used by
QEMU, a TPM2 ACPI table is also provided. The device is described to
be used in polling mode rather than interrupt mode primarily because
no unused IRQ could be found.
To support measurements logs to be written by the firmware, e.g.
SeaBIOS, a TCPA table is implemented. This table provides a 64kb
buffer where the firmware can write its log into.