diff --git a/src/drivers/tpm/cr50.c b/src/drivers/tpm/cr50.c index 22ca3dd2bb..887cf767b7 100644 --- a/src/drivers/tpm/cr50.c +++ b/src/drivers/tpm/cr50.c @@ -191,6 +191,13 @@ enum cb_err cr50_get_firmware_version(struct cr50_firmware_version *version) cr50_firmware_version.minor) goto success; + if (CONFIG(TI50_FIRMWARE_VERSION_NOT_SUPPORTED)) { + printk(BIOS_ERR, "Reading Ti50 firmware version is not supported\n"); + if (version) + *version = cr50_firmware_version; + return CB_ERR; + } + int chunk_count = 0; size_t chunk_size = 50; char version_str[301]; diff --git a/src/mainboard/google/brya/Kconfig b/src/mainboard/google/brya/Kconfig index 8c35ebc3c2..c8c2911c61 100644 --- a/src/mainboard/google/brya/Kconfig +++ b/src/mainboard/google/brya/Kconfig @@ -67,6 +67,7 @@ config BOARD_GOOGLE_BASEBOARD_NISSA select SOC_INTEL_ALDERLAKE_PCH_N select SOC_INTEL_CSE_LITE_COMPRESS_ME_RW select SYSTEM_TYPE_LAPTOP + select TI50_FIRMWARE_VERSION_NOT_SUPPORTED select TPM_GOOGLE_TI50 if BOARD_GOOGLE_BRYA_COMMON diff --git a/src/security/tpm/tss/vendor/cr50/Kconfig b/src/security/tpm/tss/vendor/cr50/Kconfig index f98b8efeb9..1fad3c0686 100644 --- a/src/security/tpm/tss/vendor/cr50/Kconfig +++ b/src/security/tpm/tss/vendor/cr50/Kconfig @@ -30,4 +30,14 @@ config CR50_USE_LONG_INTERRUPT_PULSES Whether to request longer interrupt pulses using Cr50 BOARD_CFG register. If the Cr50 firmware is too old, it will not be able to honor the request. +config TI50_FIRMWARE_VERSION_NOT_SUPPORTED + bool + default n + help + Ti50 FW versions below 0.15 don't support the firmware_version register, + and trying to access it causes I2C errors. This config will skip accesses + to the register, and should be selected for boards using Ti50 chips with + FW < 0.0.15. The config will be removed once all Ti50 stocks are updated to + 0.0.15 or higher. + endif