162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci#
362306a36Sopenharmony_ci# TPM device configuration
462306a36Sopenharmony_ci#
562306a36Sopenharmony_ci
662306a36Sopenharmony_cimenuconfig TCG_TPM
762306a36Sopenharmony_ci	tristate "TPM Hardware Support"
862306a36Sopenharmony_ci	depends on HAS_IOMEM
962306a36Sopenharmony_ci	imply SECURITYFS
1062306a36Sopenharmony_ci	select CRYPTO
1162306a36Sopenharmony_ci	select CRYPTO_HASH_INFO
1262306a36Sopenharmony_ci	help
1362306a36Sopenharmony_ci	  If you have a TPM security chip in your system, which
1462306a36Sopenharmony_ci	  implements the Trusted Computing Group's specification,
1562306a36Sopenharmony_ci	  say Yes and it will be accessible from within Linux.  For
1662306a36Sopenharmony_ci	  more information see <http://www.trustedcomputinggroup.org>. 
1762306a36Sopenharmony_ci	  An implementation of the Trusted Software Stack (TSS), the 
1862306a36Sopenharmony_ci	  userspace enablement piece of the specification, can be 
1962306a36Sopenharmony_ci	  obtained at: <http://sourceforge.net/projects/trousers>.  To 
2062306a36Sopenharmony_ci	  compile this driver as a module, choose M here; the module 
2162306a36Sopenharmony_ci	  will be called tpm. If unsure, say N.
2262306a36Sopenharmony_ci	  Notes:
2362306a36Sopenharmony_ci	  1) For more TPM drivers enable CONFIG_PNP, CONFIG_ACPI
2462306a36Sopenharmony_ci	  and CONFIG_PNPACPI.
2562306a36Sopenharmony_ci	  2) Without ACPI enabled, the BIOS event log won't be accessible,
2662306a36Sopenharmony_ci	  which is required to validate the PCR 0-7 values.
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ciif TCG_TPM
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ciconfig HW_RANDOM_TPM
3162306a36Sopenharmony_ci	bool "TPM HW Random Number Generator support"
3262306a36Sopenharmony_ci	depends on TCG_TPM && HW_RANDOM && !(TCG_TPM=y && HW_RANDOM=m)
3362306a36Sopenharmony_ci	default y
3462306a36Sopenharmony_ci	help
3562306a36Sopenharmony_ci	  This setting exposes the TPM's Random Number Generator as a hwrng
3662306a36Sopenharmony_ci	  device. This allows the kernel to collect randomness from the TPM at
3762306a36Sopenharmony_ci	  boot, and provides the TPM randomines in /dev/hwrng.
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci	  If unsure, say Y.
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ciconfig TCG_TIS_CORE
4262306a36Sopenharmony_ci	tristate
4362306a36Sopenharmony_ci	help
4462306a36Sopenharmony_ci	TCG TIS TPM core driver. It implements the TPM TCG TIS logic and hooks
4562306a36Sopenharmony_ci	into the TPM kernel APIs. Physical layers will register against it.
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciconfig TCG_TIS
4862306a36Sopenharmony_ci	tristate "TPM Interface Specification 1.2 Interface / TPM 2.0 FIFO Interface"
4962306a36Sopenharmony_ci	depends on X86 || OF
5062306a36Sopenharmony_ci	select TCG_TIS_CORE
5162306a36Sopenharmony_ci	help
5262306a36Sopenharmony_ci	  If you have a TPM security chip that is compliant with the
5362306a36Sopenharmony_ci	  TCG TIS 1.2 TPM specification (TPM1.2) or the TCG PTP FIFO
5462306a36Sopenharmony_ci	  specification (TPM2.0) say Yes and it will be accessible from
5562306a36Sopenharmony_ci	  within Linux. To compile this driver as a module, choose  M here;
5662306a36Sopenharmony_ci	  the module will be called tpm_tis.
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ciconfig TCG_TIS_SPI
5962306a36Sopenharmony_ci	tristate "TPM Interface Specification 1.3 Interface / TPM 2.0 FIFO Interface - (SPI)"
6062306a36Sopenharmony_ci	depends on SPI
6162306a36Sopenharmony_ci	select TCG_TIS_CORE
6262306a36Sopenharmony_ci	help
6362306a36Sopenharmony_ci	  If you have a TPM security chip which is connected to a regular,
6462306a36Sopenharmony_ci	  non-tcg SPI master (i.e. most embedded platforms) that is compliant with the
6562306a36Sopenharmony_ci	  TCG TIS 1.3 TPM specification (TPM1.2) or the TCG PTP FIFO
6662306a36Sopenharmony_ci	  specification (TPM2.0) say Yes and it will be accessible from
6762306a36Sopenharmony_ci	  within Linux. To compile this driver as a module, choose  M here;
6862306a36Sopenharmony_ci	  the module will be called tpm_tis_spi.
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ciconfig TCG_TIS_SPI_CR50
7162306a36Sopenharmony_ci	bool "Cr50 SPI Interface"
7262306a36Sopenharmony_ci	depends on TCG_TIS_SPI
7362306a36Sopenharmony_ci	help
7462306a36Sopenharmony_ci	  If you have a H1 secure module running Cr50 firmware on SPI bus,
7562306a36Sopenharmony_ci	  say Yes and it will be accessible from within Linux.
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ciconfig TCG_TIS_I2C
7862306a36Sopenharmony_ci	tristate "TPM Interface Specification 1.3 Interface / TPM 2.0 FIFO Interface - (I2C - generic)"
7962306a36Sopenharmony_ci	depends on I2C
8062306a36Sopenharmony_ci	select CRC_CCITT
8162306a36Sopenharmony_ci	select TCG_TIS_CORE
8262306a36Sopenharmony_ci	help
8362306a36Sopenharmony_ci	  If you have a TPM security chip, compliant with the TCG TPM PTP
8462306a36Sopenharmony_ci	  (I2C interface) specification and connected to an I2C bus master,
8562306a36Sopenharmony_ci	  say Yes and it will be accessible from within Linux.
8662306a36Sopenharmony_ci	  To compile this driver as a module, choose M here;
8762306a36Sopenharmony_ci	  the module will be called tpm_tis_i2c.
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ciconfig TCG_TIS_SYNQUACER
9062306a36Sopenharmony_ci	tristate "TPM Interface Specification 1.2 Interface / TPM 2.0 FIFO Interface (MMIO - SynQuacer)"
9162306a36Sopenharmony_ci	depends on ARCH_SYNQUACER || COMPILE_TEST
9262306a36Sopenharmony_ci	select TCG_TIS_CORE
9362306a36Sopenharmony_ci	help
9462306a36Sopenharmony_ci	  If you have a TPM security chip that is compliant with the
9562306a36Sopenharmony_ci	  TCG TIS 1.2 TPM specification (TPM1.2) or the TCG PTP FIFO
9662306a36Sopenharmony_ci	  specification (TPM2.0) say Yes and it will be accessible from
9762306a36Sopenharmony_ci	  within Linux on Socionext SynQuacer platform.
9862306a36Sopenharmony_ci	  To compile this driver as a module, choose  M here;
9962306a36Sopenharmony_ci	  the module will be called tpm_tis_synquacer.
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ciconfig TCG_TIS_I2C_CR50
10262306a36Sopenharmony_ci	tristate "TPM Interface Specification 2.0 Interface (I2C - CR50)"
10362306a36Sopenharmony_ci	depends on I2C
10462306a36Sopenharmony_ci	help
10562306a36Sopenharmony_ci	  This is a driver for the Google cr50 I2C TPM interface which is a
10662306a36Sopenharmony_ci	  custom microcontroller and requires a custom i2c protocol interface
10762306a36Sopenharmony_ci	  to handle the limitations of the hardware.  To compile this driver
10862306a36Sopenharmony_ci	  as a module, choose M here; the module will be called tcg_tis_i2c_cr50.
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ciconfig TCG_TIS_I2C_ATMEL
11162306a36Sopenharmony_ci	tristate "TPM Interface Specification 1.2 Interface (I2C - Atmel)"
11262306a36Sopenharmony_ci	depends on I2C
11362306a36Sopenharmony_ci	help
11462306a36Sopenharmony_ci	  If you have an Atmel I2C TPM security chip say Yes and it will be
11562306a36Sopenharmony_ci	  accessible from within Linux.
11662306a36Sopenharmony_ci	  To compile this driver as a module, choose M here; the module will
11762306a36Sopenharmony_ci	  be called tpm_tis_i2c_atmel.
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ciconfig TCG_TIS_I2C_INFINEON
12062306a36Sopenharmony_ci	tristate "TPM Interface Specification 1.2 Interface (I2C - Infineon)"
12162306a36Sopenharmony_ci	depends on I2C
12262306a36Sopenharmony_ci	help
12362306a36Sopenharmony_ci	  If you have a TPM security chip that is compliant with the
12462306a36Sopenharmony_ci	  TCG TIS 1.2 TPM specification and Infineon's I2C Protocol Stack
12562306a36Sopenharmony_ci	  Specification 0.20 say Yes and it will be accessible from within
12662306a36Sopenharmony_ci	  Linux.
12762306a36Sopenharmony_ci	  To compile this driver as a module, choose M here; the module
12862306a36Sopenharmony_ci	  will be called tpm_i2c_infineon.
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ciconfig TCG_TIS_I2C_NUVOTON
13162306a36Sopenharmony_ci	tristate "TPM Interface Specification 1.2 Interface (I2C - Nuvoton)"
13262306a36Sopenharmony_ci	depends on I2C
13362306a36Sopenharmony_ci	help
13462306a36Sopenharmony_ci	  If you have a TPM security chip with an I2C interface from
13562306a36Sopenharmony_ci	  Nuvoton Technology Corp. say Yes and it will be accessible
13662306a36Sopenharmony_ci	  from within Linux.
13762306a36Sopenharmony_ci	  To compile this driver as a module, choose M here; the module
13862306a36Sopenharmony_ci	  will be called tpm_i2c_nuvoton.
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_ciconfig TCG_NSC
14162306a36Sopenharmony_ci	tristate "National Semiconductor TPM Interface"
14262306a36Sopenharmony_ci	depends on X86
14362306a36Sopenharmony_ci	help
14462306a36Sopenharmony_ci	  If you have a TPM security chip from National Semiconductor 
14562306a36Sopenharmony_ci	  say Yes and it will be accessible from within Linux.  To 
14662306a36Sopenharmony_ci	  compile this driver as a module, choose M here; the module 
14762306a36Sopenharmony_ci	  will be called tpm_nsc.
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ciconfig TCG_ATMEL
15062306a36Sopenharmony_ci	tristate "Atmel TPM Interface"
15162306a36Sopenharmony_ci	depends on PPC64 || HAS_IOPORT_MAP
15262306a36Sopenharmony_ci	help
15362306a36Sopenharmony_ci	  If you have a TPM security chip from Atmel say Yes and it 
15462306a36Sopenharmony_ci	  will be accessible from within Linux.  To compile this driver 
15562306a36Sopenharmony_ci	  as a module, choose M here; the module will be called tpm_atmel.
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ciconfig TCG_INFINEON
15862306a36Sopenharmony_ci	tristate "Infineon Technologies TPM Interface"
15962306a36Sopenharmony_ci	depends on PNP
16062306a36Sopenharmony_ci	help
16162306a36Sopenharmony_ci	  If you have a TPM security chip from Infineon Technologies
16262306a36Sopenharmony_ci	  (either SLD 9630 TT 1.1 or SLB 9635 TT 1.2) say Yes and it
16362306a36Sopenharmony_ci	  will be accessible from within Linux.
16462306a36Sopenharmony_ci	  To compile this driver as a module, choose M here; the module
16562306a36Sopenharmony_ci	  will be called tpm_infineon.
16662306a36Sopenharmony_ci	  Further information on this driver and the supported hardware
16762306a36Sopenharmony_ci	  can be found at http://www.trust.rub.de/projects/linux-device-driver-infineon-tpm/ 
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ciconfig TCG_IBMVTPM
17062306a36Sopenharmony_ci	tristate "IBM VTPM Interface"
17162306a36Sopenharmony_ci	depends on PPC_PSERIES
17262306a36Sopenharmony_ci	help
17362306a36Sopenharmony_ci	  If you have IBM virtual TPM (VTPM) support say Yes and it
17462306a36Sopenharmony_ci	  will be accessible from within Linux.  To compile this driver
17562306a36Sopenharmony_ci	  as a module, choose M here; the module will be called tpm_ibmvtpm.
17662306a36Sopenharmony_ci
17762306a36Sopenharmony_ciconfig TCG_XEN
17862306a36Sopenharmony_ci	tristate "XEN TPM Interface"
17962306a36Sopenharmony_ci	depends on TCG_TPM && XEN
18062306a36Sopenharmony_ci	select XEN_XENBUS_FRONTEND
18162306a36Sopenharmony_ci	help
18262306a36Sopenharmony_ci	  If you want to make TPM support available to a Xen user domain,
18362306a36Sopenharmony_ci	  say Yes and it will be accessible from within Linux. See
18462306a36Sopenharmony_ci	  the manpages for xl, xl.conf, and docs/misc/vtpm.txt in
18562306a36Sopenharmony_ci	  the Xen source repository for more details.
18662306a36Sopenharmony_ci	  To compile this driver as a module, choose M here; the module
18762306a36Sopenharmony_ci	  will be called xen-tpmfront.
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ciconfig TCG_CRB
19062306a36Sopenharmony_ci	tristate "TPM 2.0 CRB Interface"
19162306a36Sopenharmony_ci	depends on ACPI
19262306a36Sopenharmony_ci	help
19362306a36Sopenharmony_ci	  If you have a TPM security chip that is compliant with the
19462306a36Sopenharmony_ci	  TCG CRB 2.0 TPM specification say Yes and it will be accessible
19562306a36Sopenharmony_ci	  from within Linux.  To compile this driver as a module, choose
19662306a36Sopenharmony_ci	  M here; the module will be called tpm_crb.
19762306a36Sopenharmony_ci
19862306a36Sopenharmony_ciconfig TCG_VTPM_PROXY
19962306a36Sopenharmony_ci	tristate "VTPM Proxy Interface"
20062306a36Sopenharmony_ci	depends on TCG_TPM
20162306a36Sopenharmony_ci	help
20262306a36Sopenharmony_ci	  This driver proxies for an emulated TPM (vTPM) running in userspace.
20362306a36Sopenharmony_ci	  A device /dev/vtpmx is provided that creates a device pair
20462306a36Sopenharmony_ci	  /dev/vtpmX and a server-side file descriptor on which the vTPM
20562306a36Sopenharmony_ci	  can receive commands.
20662306a36Sopenharmony_ci
20762306a36Sopenharmony_ciconfig TCG_FTPM_TEE
20862306a36Sopenharmony_ci	tristate "TEE based fTPM Interface"
20962306a36Sopenharmony_ci	depends on TEE && OPTEE
21062306a36Sopenharmony_ci	help
21162306a36Sopenharmony_ci	  This driver proxies for firmware TPM running in TEE.
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_cisource "drivers/char/tpm/st33zp24/Kconfig"
21462306a36Sopenharmony_ciendif # TCG_TPM
215