Re: [PATCH v15 01/28] tpm: Initial step to reorganize TPM public headers

Daniel P. Smith
2026-02-01T16:21:08Z

On 1/19/26 18:40, Jarkko Sakkinen wrote:
> On Mon, Dec 15, 2025 at 03:32:49PM -0800, Ross Philipson wrote:
>> Replace the existing public header tpm_command.h with the first two
>> new public headers tpm1.h and tpm_common.h. In addition, related
>> definitions in tpm1_cmd.c were moved to the new tpm1.h.
>>
>> Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
>> Signed-off-by: Ross Philipson <ross.philipson@oracle.com>
>> ---
>> drivers/char/tpm/tpm-buf.c | 3 +-
>> drivers/char/tpm/tpm1-cmd.c | 13 +-----
>> include/keys/trusted_tpm.h | 1 -
>> include/linux/tpm.h | 3 ++
>> include/linux/tpm1.h | 55 +++++++++++++++++++++++
>> include/linux/tpm_command.h | 30 -------------
>
> Removing tpm_command.h causes unnecessary noise.
>
> It would be better to retain tpm_command.h, and simply supplement
> it with TPM2 constants.
>
> Also, what is the reason to not have both TPM1 and TPM2 in tpm.h?
>
> To put the question in other words: is there something in tpm.h that
> would be incompatible with early boot code?
>
> I'd rather tweak that than have more files...

Every #include in tpm.h will break in the early boot code. I don't see
any way to avoid having one header that is the device driver header that
integrates with mainline features and at least one header that holds the
general TPM definitions.

We will move everything that was broken out into tpm_command.h, making
it the header with the general definitions. I would raise the question
of whether tpm_command.h would be the best name of the file after
definition reloactions

>> include/linux/tpm_common.h | 22 +++++++++
>> security/keys/trusted-keys/trusted_tpm1.c | 1 -
>> security/keys/trusted-keys/trusted_tpm2.c | 1 -
>> 9 files changed, 82 insertions(+), 47 deletions(-)
>> create mode 100644 include/linux/tpm1.h
>> delete mode 100644 include/linux/tpm_command.h
>> create mode 100644 include/linux/tpm_common.h
>>
>> diff --git a/drivers/char/tpm/tpm-buf.c b/drivers/char/tpm/tpm-buf.c
>> index 1cb649938c01..dae23e6de269 100644
>> --- a/drivers/char/tpm/tpm-buf.c
>> +++ b/drivers/char/tpm/tpm-buf.c
>> @@ -3,7 +3,6 @@
>> * Handling of TPM command and other buffers.
>> */
>>
>> -#include <linux/tpm_command.h>
>> #include <linux/module.h>
>> #include <linux/tpm.h>
>>
>> @@ -296,7 +295,7 @@ void tpm1_buf_append_extend(struct tpm_buf *buf, u32 pcr_idx, const u8 *hash)
>> if (buf->flags & TPM_BUF_INVALID)
>> return;
>>
>> - if (!tpm1_buf_is_command(buf, TPM_ORD_EXTEND)) {
>> + if (!tpm1_buf_is_command(buf, TPM_ORD_PCR_EXTEND)) {
>> WARN(1, "tpm_buf: invalid TPM_Extend command\n");
>> buf->flags |= TPM_BUF_INVALID;
>> return;
>> diff --git a/drivers/char/tpm/tpm1-cmd.c b/drivers/char/tpm/tpm1-cmd.c
>> index bc156d7d59f2..f29827b454d2 100644
>> --- a/drivers/char/tpm/tpm1-cmd.c
>> +++ b/drivers/char/tpm/tpm1-cmd.c
>> @@ -18,12 +18,9 @@
>> #include <linux/mutex.h>
>> #include <linux/spinlock.h>
>> #include <linux/freezer.h>
>> -#include <linux/tpm_command.h>
>> #include <linux/tpm_eventlog.h>
>> #include "tpm.h"
>>
>> -#define TPM_MAX_ORDINAL 243
>> -
>> /*
>> * Array with one entry per ordinal defining the maximum amount
>> * of time the chip could take to return the result. The ordinal
>> @@ -308,9 +305,6 @@ unsigned long tpm1_calc_ordinal_duration(struct tpm_chip *chip, u32 ordinal)
>> return duration;
>> }
>>
>> -#define TPM_ORD_STARTUP 153
>> -#define TPM_ST_CLEAR 1
>> -
>> /**
>> * tpm1_startup() - turn on the TPM
>> * @chip: TPM chip to use
>> @@ -478,7 +472,6 @@ int tpm1_pcr_extend(struct tpm_chip *chip, u32 pcr_idx, const u8 *hash,
>> return rc;
>> }
>>
>> -#define TPM_ORD_GET_CAP 101
>> ssize_t tpm1_getcap(struct tpm_chip *chip, u32 subcap_id, cap_t *cap,
>> const char *desc, size_t min_cap_length)
>> {
>> @@ -574,7 +567,6 @@ int tpm1_get_random(struct tpm_chip *chip, u8 *dest, size_t max)
>> return rc;
>> }
>>
>> -#define TPM_ORD_PCRREAD 21
>> int tpm1_pcr_read(struct tpm_chip *chip, u32 pcr_idx, u8 *res_buf)
>> {
>> int rc;
>> @@ -584,7 +576,7 @@ int tpm1_pcr_read(struct tpm_chip *chip, u32 pcr_idx, u8 *res_buf)
>> return -ENOMEM;
>>
>> tpm_buf_init(buf, TPM_BUFSIZE);
>> - tpm_buf_reset(buf, TPM_TAG_RQU_COMMAND, TPM_ORD_PCRREAD);
>> + tpm_buf_reset(buf, TPM_TAG_RQU_COMMAND, TPM_ORD_PCR_READ);
>> tpm_buf_append_u32(buf, pcr_idx);
>>
>> rc = tpm_transmit_cmd(chip, buf, TPM_DIGEST_SIZE,
>> @@ -599,7 +591,6 @@ int tpm1_pcr_read(struct tpm_chip *chip, u32 pcr_idx, u8 *res_buf)
>> return rc;
>> }
>>
>> -#define TPM_ORD_CONTINUE_SELFTEST 83
>> /**
>> * tpm1_continue_selftest() - run TPM's selftest
>> * @chip: TPM chip to use
>> @@ -716,8 +707,6 @@ int tpm1_auto_startup(struct tpm_chip *chip)
>> return rc;
>> }
>>
>> -#define TPM_ORD_SAVESTATE 152
>> -
>> /**
>> * tpm1_pm_suspend() - pm suspend handler
>> * @chip: TPM chip to use.
>> diff --git a/include/keys/trusted_tpm.h b/include/keys/trusted_tpm.h
>> index 0fadc6a4f166..3a0fa3bc8454 100644
>> --- a/include/keys/trusted_tpm.h
>> +++ b/include/keys/trusted_tpm.h
>> @@ -3,7 +3,6 @@
>> #define __TRUSTED_TPM_H
>>
>> #include <keys/trusted-type.h>
>> -#include <linux/tpm_command.h>
>>
>> extern struct trusted_key_ops trusted_key_tpm_ops;
>>
>> diff --git a/include/linux/tpm.h b/include/linux/tpm.h
>> index 8da49e8769d5..ef81e0b59657 100644
>> --- a/include/linux/tpm.h
>> +++ b/include/linux/tpm.h
>> @@ -25,6 +25,9 @@
>> #include <crypto/hash_info.h>
>> #include <crypto/aes.h>
>>
>> +#include "tpm_common.h"
>> +#include "tpm1.h"
>> +
>> #define TPM_DIGEST_SIZE 20 /* Max TPM v1.2 PCR size */
>> #define TPM_HEADER_SIZE 10
>> #define TPM_BUFSIZE 4096
>> diff --git a/include/linux/tpm1.h b/include/linux/tpm1.h
>> new file mode 100644
>> index 000000000000..54c6c211eb9e
>> --- /dev/null
>> +++ b/include/linux/tpm1.h
>> @@ -0,0 +1,55 @@
>> +/* SPDX-License-Identifier: GPL-2.0-only */
>> +/*
>> + * Copyright (C) 2004,2007,2008 IBM Corporation
>> + *
>> + * Authors:
>> + * Leendert van Doorn <leendert@watson.ibm.com>
>> + * Dave Safford <safford@watson.ibm.com>
>> + * Reiner Sailer <sailer@watson.ibm.com>
>> + * Kylene Hall <kjhall@us.ibm.com>
>> + * Debora Velarde <dvelarde@us.ibm.com>
>> + *
>> + * Maintained by: <tpmdd_devel@lists.sourceforge.net>
>> + *
>> + * Device driver for TCG/TCPA TPM (trusted platform module).
>> + * Specifications at www.trustedcomputinggroup.org
>> + */
>> +#ifndef __LINUX_TPM1_H__
>> +#define __LINUX_TPM1_H__
>> +
>> +/*
>> + * TPM 1.2 Main Specification
>> + * https://trustedcomputinggroup.org/resource/tpm-main-specification/
>> + */
>> +
>> +/* Command TAGS */
>> +enum tpm_command_tags {
>> + TPM_TAG_RQU_COMMAND = 193,
>> + TPM_TAG_RQU_AUTH1_COMMAND = 194,
>> + TPM_TAG_RQU_AUTH2_COMMAND = 195,
>> + TPM_TAG_RSP_COMMAND = 196,
>> + TPM_TAG_RSP_AUTH1_COMMAND = 197,
>> + TPM_TAG_RSP_AUTH2_COMMAND = 198,
>> +};
>> +
>> +/* Command Ordinals */
>> +enum tpm_command_ordinals {
>> + TPM_ORD_CONTINUE_SELFTEST = 83,
>> + TPM_ORD_GET_CAP = 101,
>> + TPM_ORD_GET_RANDOM = 70,
>> + TPM_ORD_PCR_EXTEND = 20,
>> + TPM_ORD_PCR_READ = 21,
>> + TPM_ORD_OSAP = 11,
>> + TPM_ORD_OIAP = 10,
>> + TPM_ORD_SAVESTATE = 152,
>> + TPM_ORD_SEAL = 23,
>> + TPM_ORD_STARTUP = 153,
>> + TPM_ORD_UNSEAL = 24,
>> +};
>> +
>> +/* Other constants */to address your concern over diff churn
>> +#define SRKHANDLE 0x40000000
>> +#define TPM_NONCE_SIZE 20
>> +#define TPM_ST_CLEAR 1
>> +
>> +#endif
>> diff --git a/include/linux/tpm_command.h b/include/linux/tpm_command.h
>> deleted file mode 100644
>> index 02038972a05f..000000000000
>> --- a/include/linux/tpm_command.h
>> +++ /dev/null
>> @@ -1,30 +0,0 @@
>> -/* SPDX-License-Identifier: GPL-2.0 */
>> -#ifndef __LINUX_TPM_COMMAND_H__
>> -#define __LINUX_TPM_COMMAND_H__
>> -
>> -/*
>> - * TPM Command constants from specifications at
>> - * http://www.trustedcomputinggroup.org
>> - */
>> -
>> -/* Command TAGS */
>> -#define TPM_TAG_RQU_COMMAND 193
>> -#define TPM_TAG_RQU_AUTH1_COMMAND 194
>> -#define TPM_TAG_RQU_AUTH2_COMMAND 195
>> -#define TPM_TAG_RSP_COMMAND 196
>> -#define TPM_TAG_RSP_AUTH1_COMMAND 197
>> -#define TPM_TAG_RSP_AUTH2_COMMAND 198
>> -
>> -/* Command Ordinals */
>> -#define TPM_ORD_OIAP 10
>> -#define TPM_ORD_OSAP 11
>> -#define TPM_ORD_EXTEND 20
>> -#define TPM_ORD_SEAL 23
>> -#define TPM_ORD_UNSEAL 24
>> -#define TPM_ORD_GET_RANDOM 70
>> -
>> -/* Other constants */
>> -#define SRKHANDLE 0x40000000
>> -#define TPM_NONCE_SIZE 20
>> -
>> -#endif
>> diff --git a/include/linux/tpm_common.h b/include/linux/tpm_common.h
>> new file mode 100644
>> index 000000000000..b8be669913dd
>> --- /dev/null
>> +++ b/include/linux/tpm_common.h
>> @@ -0,0 +1,22 @@
>> +/* SPDX-License-Identifier: GPL-2.0-only */
>> +/*
>> + * Copyright (C) 2004,2007,2008 IBM Corporation
>> + *
>> + * Authors:
>> + * Leendert van Doorn <leendert@watson.ibm.com>
>> + * Dave Safford <safford@watson.ibm.com>
>> + * Reiner Sailer <sailer@watson.ibm.com>
>> + * Kylene Hall <kjhall@us.ibm.com>
>> + * Debora Velarde <dvelarde@us.ibm.com>
>> + *
>> + * Maintained by: <tpmdd_devel@lists.sourceforge.net>
>> + *
>> + * Device driver for TCG/TCPA TPM (trusted platform module).
>> + * Specifications at www.trustedcomputinggroup.org
>> + */
>> +#ifndef __LINUX_TPM_COMMON_H__
>> +#define __LINUX_TPM_COMMON_H__
>> +
>> +#define TPM_MAX_ORDINAL 243
>> +
>> +#endif
>> diff --git a/security/keys/trusted-keys/trusted_tpm1.c b/security/keys/trusted-keys/trusted_tpm1.c
>> index 6e6a9fb48e63..3717a06a5212 100644
>> --- a/security/keys/trusted-keys/trusted_tpm1.c
>> +++ b/security/keys/trusted-keys/trusted_tpm1.c
>> @@ -17,7 +17,6 @@
>> #include <keys/trusted-type.h>
>> #include <linux/key-type.h>
>> #include <linux/tpm.h>
>> -#include <linux/tpm_command.h>
>>
>> #include <keys/trusted_tpm.h>
>>
>> diff --git a/security/keys/trusted-keys/trusted_tpm2.c b/security/keys/trusted-keys/trusted_tpm2.c
>> index 0a99bd051a25..e6000c71eeb6 100644
>> --- a/security/keys/trusted-keys/trusted_tpm2.c
>> +++ b/security/keys/trusted-keys/trusted_tpm2.c
>> @@ -9,7 +9,6 @@
>> #include <linux/string.h>
>> #include <linux/err.h>
>> #include <linux/tpm.h>
>> -#include <linux/tpm_command.h>
>>
>> #include <keys/trusted-type.h>
>> #include <keys/trusted_tpm.h>
>> --
>> 2.43.7
>>
>
> BR, Jarkko

V/r,
DPS