Skip to content

Commit 8a55256

Browse files
committed
Documentation: tpm_tis
Based recent discussions on LKML, provide preliminary bits of tpm_tis_core dependent drivers. Includes only bare essentials but can be extended later on case by case. This way some people may even want to read it later on. Reviewed-by: Bagas Sanjaya <bagasdotme@gmail.com> Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
1 parent d14d2cc commit 8a55256

2 files changed

Lines changed: 47 additions & 0 deletions

File tree

Documentation/security/tpm/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Trusted Platform Module documentation
55
.. toctree::
66

77
tpm_event_log
8+
tpm_tis
89
tpm_vtpm_proxy
910
xen-tpmfront
1011
tpm_ftpm_tee
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
.. SPDX-License-Identifier: GPL-2.0
2+
3+
=========================
4+
TPM FIFO interface driver
5+
=========================
6+
7+
TCG PTP Specification defines two interface types: FIFO and CRB. The former is
8+
based on sequenced read and write operations, and the latter is based on a
9+
buffer containing the full command or response.
10+
11+
FIFO (First-In-First-Out) interface is used by the tpm_tis_core dependent
12+
drivers. Originally Linux had only a driver called tpm_tis, which covered
13+
memory mapped (aka MMIO) interface but it was later on extended to cover other
14+
physical interfaces supported by the TCG standard.
15+
16+
For historical reasons above the original MMIO driver is called tpm_tis and the
17+
framework for FIFO drivers is named as tpm_tis_core. The postfix "tis" in
18+
tpm_tis comes from the TPM Interface Specification, which is the hardware
19+
interface specification for TPM 1.x chips.
20+
21+
Communication is based on a 20 KiB buffer shared by the TPM chip through a
22+
hardware bus or memory map, depending on the physical wiring. The buffer is
23+
further split into five equal-size 4 KiB buffers, which provide equivalent
24+
sets of registers for communication between the CPU and TPM. These
25+
communication endpoints are called localities in the TCG terminology.
26+
27+
When the kernel wants to send commands to the TPM chip, it first reserves
28+
locality 0 by setting the requestUse bit in the TPM_ACCESS register. The bit is
29+
cleared by the chip when the access is granted. Once it completes its
30+
communication, the kernel writes the TPM_ACCESS.activeLocality bit. This
31+
informs the chip that the locality has been relinquished.
32+
33+
Pending localities are served in order by the chip in descending order, one at
34+
a time:
35+
36+
- Locality 0 has the lowest priority.
37+
- Locality 5 has the highest priority.
38+
39+
Further information on the purpose and meaning of the localities can be found
40+
in section 3.2 of the TCG PC Client Platform TPM Profile Specification.
41+
42+
References
43+
==========
44+
45+
TCG PC Client Platform TPM Profile (PTP) Specification
46+
https://trustedcomputinggroup.org/resource/pc-client-platform-tpm-profile-ptp-specification/

0 commit comments

Comments
 (0)