# SPDX-License-Identifier: GPL-2.0-only

source "src/security/tpm/tss/vendor/cr50/Kconfig"

menu "Trusted Platform Module"

config NO_TPM
	bool
	default y if !TPM1 && !TPM2
	help
	  No TPM support. Select this option if your system doesn't have a TPM,
	  or if you don't want coreboot to communicate with your TPM in any way.
	  (If your board doesn't offer a TPM interface, this will be the only
	  possible option.)

config TPM1
	bool "TPM 1.2"
	depends on I2C_TPM || MEMORY_MAPPED_TPM || SPI_TPM || CRB_TPM
	default y if MAINBOARD_HAS_TPM1
	help
	  Select this option if your TPM uses the older TPM 1.2 protocol.

config TPM2
	bool "TPM 2.0"
	depends on I2C_TPM || MEMORY_MAPPED_TPM || SPI_TPM || CRB_TPM
	default y if MAINBOARD_HAS_TPM2
	help
	  Select this option if your TPM uses the newer TPM 2.0 protocol.

config TPM
	bool
	default y
	depends on TPM1 || TPM2

config MAINBOARD_HAS_TPM1
	bool
	help
	  This option can be selected by a mainboard to represent that its TPM
	  always uses the 1.2 protocol, and that it should be on by default.

config MAINBOARD_HAS_TPM2
	bool
	help
	  This option can be selected by a mainboard to represent that its TPM
	  always uses the 2.0 protocol, and that it should be on by default.

config TPM_DEACTIVATE
	bool "Deactivate TPM (for TPM1)"
	default n
	depends on !VBOOT
	depends on TPM1
	help
	  Deactivate TPM by issuing deactivate command.

config DEBUG_TPM
	bool "Output verbose TPM debug messages"
	default n
	select DRIVER_TPM_DISPLAY_TIS_BYTES if I2C_TPM
	depends on TPM
	help
	  This option enables additional TPM related debug messages.

config TPM_RDRESP_NEED_DELAY
	bool "Enable Delay Workaround for TPM"
	default n
	depends on MEMORY_MAPPED_TPM
	help
	  Certain TPMs seem to need some delay when reading response
	  to work around a race-condition-related issue, possibly
	  caused by ill-programmed TPM firmware.

config TPM_STARTUP_IGNORE_POSTINIT
	bool
	help
	  Select this to ignore POSTINIT INVALID return codes on TPM
	  startup. This is useful on platforms where a previous stage
	  issued a TPM startup. Examples of use cases are Intel TXT
	  or VBOOT on the Intel Arrandale processor, which issues a
	  CPU-only reset during the romstage.

config TPM_MEASURED_BOOT
	bool "Enable Measured Boot"
	default n
	select VBOOT_LIB
	depends on TPM
	depends on !VBOOT_RETURN_FROM_VERSTAGE
	help
	  Enables measured boot (experimental)

choice
	prompt "TPM event log format"
	depends on TPM_MEASURED_BOOT
	default TPM_LOG_TPM1 if TPM1
	default TPM_LOG_TPM2 if TPM2

config TPM_LOG_CB
	bool "coreboot's custom format"
	help
	  Custom coreboot-specific format of the log derived from TPM1 log format.
config TPM_LOG_TPM1
	bool "TPM 1.2 format"
	depends on TPM1 && !TPM2
	help
	  Log per TPM 1.2 specification.
	  See "TCG PC Client Specific Implementation Specification for Conventional BIOS".
config TPM_LOG_TPM2
	bool "TPM 2.0 format"
	depends on TPM1 || TPM2
	help
	  Log per TPM 2.0 specification.
	  See "TCG PC Client Platform Firmware Profile Specification".

endchoice

choice
	prompt "TPM2 hashing algorithm"
	depends on TPM_MEASURED_BOOT && TPM_LOG_TPM2
	default TPM_HASH_SHA1 if TPM1
	default TPM_HASH_SHA256 if TPM2

config TPM_HASH_SHA1
	bool "SHA1"
config TPM_HASH_SHA256
	bool "SHA256"
config TPM_HASH_SHA384
	bool "SHA384"
config TPM_HASH_SHA512
	bool "SHA512"

endchoice

config TPM_MEASURED_BOOT_INIT_BOOTBLOCK
	bool
	depends on TPM_MEASURED_BOOT && !VBOOT
	help
	  Initialize TPM inside the bootblock instead of ramstage. This is
	  useful with some form of hardware assisted root of trust
	  measurement like Intel TXT/CBnT.

config TPM_MEASURED_BOOT_RUNTIME_DATA
	string "Runtime data whitelist"
	default ""
	depends on TPM_MEASURED_BOOT
	help
	  Runtime data whitelist of cbfs filenames. Needs to be a
	  space delimited list

config PCR_BOOT_MODE
	int
	default 0 if CHROMEOS
	default 1

config PCR_HWID
	int
	default 1

config PCR_SRTM
	int
	default 2

config PCR_FW_VER
	int
	default 10

# PCR for measuring data which changes during runtime
# e.g. CMOS, NVRAM...
config PCR_RUNTIME_DATA
	int
	default 3

endmenu # Trusted Platform Module (tpm)

config TPM_SETUP_HIBERNATE_ON_ERR
	bool
	depends on EC_GOOGLE_CHROMEEC
	default y
	help
	  Select this to force a device to hibernate on the next AP shutdown when a TPM
	  setup error occurs. This will cause a cold boot of the system and offer an
	  opportunity to recover the TPM should it be hung. This is only effective if
	  the Z-State brings the power rail down.
