mb/intel/adlrvp_m: Enable CR50 TPM support over SPI

Add Kconfig options and enable TPM device in devicetree

BUG=None
TEST=Booted the image and checked the successful TPM
communication in verstage,romstage & ramstage from
coreboot logs.

Signed-off-by: Thejaswani Puta thejaswani.putta@intel.com <thejaswani.putta@intel.com>
Change-Id: Icaedf9f17e35e82c35cbabd6d2938c167e42e9e8
Reviewed-on: https://review.coreboot.org/c/coreboot/+/54023
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Bora Guvendik <bora.guvendik@intel.com>
This commit is contained in:
Thejaswani Puta thejaswani.putta@intel.com 2021-05-10 13:45:07 -07:00 committed by Felix Held
parent ae02727c32
commit b33623355e
4 changed files with 51 additions and 4 deletions

View File

@ -22,6 +22,9 @@ config BOARD_SPECIFIC_OPTIONS
select DRIVERS_I2C_MAX98373 select DRIVERS_I2C_MAX98373
select FW_CONFIG if BOARD_INTEL_ADLRVP_M_EXT_EC select FW_CONFIG if BOARD_INTEL_ADLRVP_M_EXT_EC
select FW_CONFIG_SOURCE_CHROMEEC_CBI if BOARD_INTEL_ADLRVP_M_EXT_EC select FW_CONFIG_SOURCE_CHROMEEC_CBI if BOARD_INTEL_ADLRVP_M_EXT_EC
select MAINBOARD_HAS_TPM2 if BOARD_INTEL_ADLRVP_M_EXT_EC
select MAINBOARD_HAS_SPI_TPM_CR50 if BOARD_INTEL_ADLRVP_M_EXT_EC
select SPI_TPM if BOARD_INTEL_ADLRVP_M_EXT_EC
config CHROMEOS config CHROMEOS
select GBB_FLAG_FORCE_DEV_SWITCH_ON select GBB_FLAG_FORCE_DEV_SWITCH_ON
@ -91,11 +94,18 @@ endchoice
config VBOOT config VBOOT
select VBOOT_LID_SWITCH select VBOOT_LID_SWITCH
select VBOOT_MOCK_SECDATA select VBOOT_MOCK_SECDATA if BOARD_INTEL_ADLRVP_P_EXT_EC
select EC_GOOGLE_CHROMEEC_SWITCHES if ADL_CHROME_EC select EC_GOOGLE_CHROMEEC_SWITCHES if ADL_CHROME_EC
select VBOOT_EARLY_EC_SYNC if BOARD_INTEL_ADLRVP_M_EXT_EC select VBOOT_EARLY_EC_SYNC if BOARD_INTEL_ADLRVP_M_EXT_EC
config UART_FOR_CONSOLE config UART_FOR_CONSOLE
int int
default 0 default 0
config DRIVER_TPM_SPI_BUS
default 0x2 if BOARD_INTEL_ADLRVP_M_EXT_EC
config TPM_TIS_ACPI_INTERRUPT
int
default 67 if BOARD_INTEL_ADLRVP_M_EXT_EC # GPE0_DW2_3 (GPP_E3)
endif endif

View File

@ -6,6 +6,19 @@ fw_config
end end
chip soc/intel/alderlake chip soc/intel/alderlake
device cpu_cluster 0 on
device lapic 0 on end
end
# This disables autonomous GPIO power management, otherwise
# old cr50 FW only supports short pulses.
register "gpio_override_pm" = "1"
register "gpio_pm[COMM_0]" = "0"
register "gpio_pm[COMM_1]" = "0"
register "gpio_pm[COMM_2]" = "0"
register "gpio_pm[COMM_4]" = "0"
register "gpio_pm[COMM_5]" = "0"
# GPE configuration # GPE configuration
# Note that GPE events called out in ASL code rely on this # Note that GPE events called out in ASL code rely on this
# route. i.e. If this route changes then the affected GPE # route. i.e. If this route changes then the affected GPE
@ -107,14 +120,14 @@ chip soc/intel/alderlake
register "SerialIoGSpiMode" = "{ register "SerialIoGSpiMode" = "{
[PchSerialIoIndexGSPI0] = PchSerialIoPci, [PchSerialIoIndexGSPI0] = PchSerialIoPci,
[PchSerialIoIndexGSPI1] = PchSerialIoDisabled, [PchSerialIoIndexGSPI1] = PchSerialIoPci,
[PchSerialIoIndexGSPI2] = PchSerialIoDisabled, [PchSerialIoIndexGSPI2] = PchSerialIoDisabled,
[PchSerialIoIndexGSPI3] = PchSerialIoDisabled, [PchSerialIoIndexGSPI3] = PchSerialIoDisabled,
}" }"
register "SerialIoGSpiCsMode" = "{ register "SerialIoGSpiCsMode" = "{
[PchSerialIoIndexGSPI0] = 0, [PchSerialIoIndexGSPI0] = 0,
[PchSerialIoIndexGSPI1] = 0, [PchSerialIoIndexGSPI1] = 1,
[PchSerialIoIndexGSPI2] = 0, [PchSerialIoIndexGSPI2] = 0,
[PchSerialIoIndexGSPI3] = 0, [PchSerialIoIndexGSPI3] = 0,
}" }"
@ -141,6 +154,10 @@ chip soc/intel/alderlake
# Intel Common SoC Config # Intel Common SoC Config
register "common_soc_config" = "{ register "common_soc_config" = "{
.chipset_lockdown = CHIPSET_LOCKDOWN_COREBOOT, .chipset_lockdown = CHIPSET_LOCKDOWN_COREBOOT,
.gspi[1] = {
.speed_mhz = 1,
.early_init = 1,
},
.i2c[0] = { .i2c[0] = {
.speed = I2C_SPEED_FAST, .speed = I2C_SPEED_FAST,
}, },
@ -353,6 +370,14 @@ chip soc/intel/alderlake
device ref uart0 on end device ref uart0 on end
device ref gspi0 on end device ref gspi0 on end
device ref p2sb on end device ref p2sb on end
device pci 1e.3 on
chip drivers/spi/acpi
register "hid" = "ACPI_DT_NAMESPACE_HID"
register "compat_string" = ""google,cr50""
register "irq" = "ACPI_IRQ_EDGE_LOW(GPP_E3_IRQ)"
device spi 0 on end
end
end # GSPI1
device ref hda on device ref hda on
chip drivers/intel/soundwire chip drivers/intel/soundwire
device generic 0 on device generic 0 on

View File

@ -99,6 +99,18 @@ static const struct pad_config early_gpio_table[] = {
PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_77, NONE, DEEP, NF1), PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_77, NONE, DEEP, NF1),
PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_78, NONE, DEEP, NF1), PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_78, NONE, DEEP, NF1),
PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_79, NONE, DEEP, NF1), PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_79, NONE, DEEP, NF1),
/* H1_PCH_INT_ODL */
PAD_CFG_GPI_APIC(GPP_E3, NONE, PLTRST, LEVEL, INVERT),
/* TPM */
/* F16 : GSPI1_CS0N */
PAD_CFG_NF(GPP_F16, NONE, DEEP, NF4),
/* F11 : GSPI1_CLK */
PAD_CFG_NF(GPP_F11, NONE, DEEP, NF4),
/* F13 : GSPI1_MISO */
PAD_CFG_NF(GPP_F13, NONE, DEEP, NF4),
/* F12 : GSPI1_MOSI */
PAD_CFG_NF(GPP_F12, NONE, DEEP, NF4),
}; };
static const struct pad_config early_uart_gpio_table[] = { static const struct pad_config early_uart_gpio_table[] = {

View File

@ -159,7 +159,7 @@ static const struct pad_config gpio_table[] = {
PAD_CFG_NF(GPP_S6, NONE, DEEP, NF2), PAD_CFG_NF(GPP_S6, NONE, DEEP, NF2),
/* S7 : SNDW4_DATA */ /* S7 : SNDW4_DATA */
PAD_CFG_NF(GPP_S7, NONE, DEEP, NF2) PAD_CFG_NF(GPP_S7, NONE, DEEP, NF2),
}; };
void variant_configure_gpio_pads(void) void variant_configure_gpio_pads(void)