kconfig: allow various tpm type and interface permutations

Until now it was assumed that all TPM devices were of the same type
(TCG 1.2 spec compliant) and x86 based boards had LPC connected TPMs
and all other boards had I2C connected TPMs.

With the advent of TPM2 specification there is a need to be able to
configure different combinations of TPM types (TPM or TPM2) and
interfaces (LPC, I2C and SPI).

This patch allows to do it. Picking Chrome OS still assumes that the
board has a TPM device, but adding MAINBOARD_HAS_TPM2 to the board's
Kconfig will trigger including of TPM2 instead.

MAINBOARD_HAS_LPC_TPM forces the interface to be set to LPC, adding
SPI_TPM to the board config switches interface choice to SPI, and if
neither of the two is defined, the interface is assumed to be I2C.

BRANCH=none
BUG=chrome-os-partner:50645
TEST=verified that none of the generated board configurations change
     as a result of this patch. With the rest of the stack in place it
     is possible to configure different combinations of TPM types and
     interfaces for ARM and x86 boards.

Change-Id: I24f2e3ee63636566bf2a867c51ed80a622672f07
Signed-off-by: Martin Roth <martinroth@chromium.org>
Original-Commit-Id: 5a25c1070560cd2734519f87dfbf401c135088d1
Original-Change-Id: I659e9301a4a4fe065ca6537ef1fa824a08d36321
Original-Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/349850
Original-Reviewed-by: Martin Roth <martinroth@chromium.org>
Reviewed-on: https://review.coreboot.org/15294
Tested-by: build bot (Jenkins)
Reviewed-by: Furquan Shaikh <furquan@google.com>
Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@googlemail.com>
This commit is contained in:
Vadim Bendebury 2016-06-02 20:43:19 -07:00 committed by Martin Roth
parent 0e820ce745
commit 26588707c5
4 changed files with 31 additions and 6 deletions

View File

@ -403,6 +403,14 @@ config FMDFILE
but in some cases more complex setups are required. but in some cases more complex setups are required.
When an fmd is specified, it overrides the default format. When an fmd is specified, it overrides the default format.
config MAINBOARD_HAS_TPM2
bool
default n
help
There is a TPM device installed on the mainboard, and it is
compliant with version 2 TCG TPM specification. Could be connected
over LPC, SPI or I2C.
endmenu endmenu
# load site-local kconfig to allow user specific defaults and overrides # load site-local kconfig to allow user specific defaults and overrides
@ -461,14 +469,22 @@ config RTC
config TPM config TPM
bool bool
default n default n
select LPC_TPM if ARCH_X86 select LPC_TPM if MAINBOARD_HAS_LPC_TPM
select I2C_TPM if ARCH_ARM select I2C_TPM if !MAINBOARD_HAS_LPC_TPM && !SPI_TPM
select I2C_TPM if ARCH_ARM64
help help
Enable this option to enable TPM support in coreboot. Enable this option to enable TPM support in coreboot.
If unsure, say N. If unsure, say N.
config TPM2
bool
select LPC_TPM if MAINBOARD_HAS_LPC_TPM
select I2C_TPM if !MAINBOARD_HAS_LPC_TPM && !SPI_TPM
help
Enable this option to enable TPM2 support in coreboot.
If unsure, say N.
config HEAP_SIZE config HEAP_SIZE
hex hex
default 0x4000 default 0x4000
@ -1029,7 +1045,7 @@ config X86EMU_DEBUG_TIMINGS
config DEBUG_TPM config DEBUG_TPM
bool "Output verbose TPM debug messages" bool "Output verbose TPM debug messages"
default n default n
depends on TPM depends on TPM || TPM2
help help
This option enables additional TPM related debug messages. This option enables additional TPM related debug messages.

View File

@ -1,6 +1,6 @@
config I2C_TPM config I2C_TPM
bool "I2C TPM" bool "I2C TPM"
depends on !PC80_SYSTEM # for now depends on TPM || TPM2
config DRIVER_TPM_I2C_BUS config DRIVER_TPM_I2C_BUS
hex "I2C TPM chip bus" hex "I2C TPM chip bus"

View File

@ -0,0 +1,8 @@
config SPI_TPM
bool "SPI TPM"
depends on !PC80_SYSTEM && TPM2
config DRIVER_TPM_SPI_BUS
hex "SPI bus TPM chip is connected to"
default 0
depends on SPI_TPM

View File

@ -21,7 +21,8 @@ menu "ChromeOS"
config CHROMEOS config CHROMEOS
bool "Build for ChromeOS" bool "Build for ChromeOS"
default n default n
select TPM select TPM if !MAINBOARD_HAS_TPM2
select TPM2 if MAINBOARD_HAS_TPM2
select TPM_INIT_FAILURE_IS_FATAL if PC80_SYSTEM && LPC_TPM select TPM_INIT_FAILURE_IS_FATAL if PC80_SYSTEM && LPC_TPM
select SKIP_TPM_STARTUP_ON_NORMAL_BOOT if PC80_SYSTEM && LPC_TPM select SKIP_TPM_STARTUP_ON_NORMAL_BOOT if PC80_SYSTEM && LPC_TPM
select BOOTMODE_STRAPS select BOOTMODE_STRAPS