Tobias Diedrich (ranma+coreboot@tdiedrich.de) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/13713
-gerrit
commit a0772b48f1db38f268b62af94eb9bb53572888ab Author: Tobias Diedrich ranma+coreboot@tdiedrich.de Date: Mon Feb 15 13:13:58 2016 +0100
acpi/tpm: Gracefully handle missing TPM module.
When TPM support is enabled, verify the TPM_DID_VID field is not all zeroes or all ones before returning 0xf in the _STA method.
This avoids these kernel errors when no module is installed: [ 3.426426] tpm_tis 00:01: tpm_transmit: tpm_send: error -5 [ 3.432049] tpm_tis: probe of 00:01 failed with error -5
Change-Id: Ia089d4232e0986b3bc635d346e68d982e8aecd44 Signed-off-by: Tobias Diedrich ranma+coreboot@tdiedrich.de --- src/drivers/pc80/tpm/acpi/tpm.asl | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-)
diff --git a/src/drivers/pc80/tpm/acpi/tpm.asl b/src/drivers/pc80/tpm/acpi/tpm.asl index 7755e9b..de25114 100644 --- a/src/drivers/pc80/tpm/acpi/tpm.asl +++ b/src/drivers/pc80/tpm/acpi/tpm.asl @@ -21,10 +21,33 @@ Device (TPM) Name (_CID, 0x310cd041) Name (_UID, 1)
+ OperationRegion (TREG, SystemMemory, + CONFIG_TPM_TIS_BASE_ADDRESS, 0x5000) + Field (TREG, ByteAcc, NoLock, Preserve) + { + /* TPM_INT_ENABLE_0 */ + Offset (0x0008), + , 3, + ITPL, 2, /* Interrupt type and polarity */ + + /* TPM_INT_VECTOR_0 */ + Offset (0x000C), + IVEC, 4, /* SERIRQ vector */ + + /* TPM_DID_VID */ + Offset (0x0f00), + DVID, 32, /* Device and vendor ID */ + } + Method (_STA, 0) { #if CONFIG_LPC_TPM && !CONFIG_TPM_DEACTIVATE - Return (0xf) + If (LAnd (LGreater (DVID, 0), LLess (DVID, 0xffffffff))) { + Return (0xf) + } Else { + /* TPM module missing */ + Return (0x0) + } #else Return (0x0) #endif @@ -45,20 +68,6 @@ Device (TPM)
Method (_CRS, 0, Serialized) { - OperationRegion (TREG, SystemMemory, - CONFIG_TPM_TIS_BASE_ADDRESS, 0x5000) - Field (TREG, ByteAcc, NoLock, Preserve) - { - /* TPM_INT_ENABLE_0 */ - Offset (0x0008), - , 3, - ITPL, 2, /* Interrupt type and polarity */ - - /* TPM_INT_VECTOR_0 */ - Offset (0x000C), - IVEC, 4, /* SERIRQ vector */ - } - CreateField (^IBUF, ^TIRQ._INT, 32, TVEC) CreateBitField (^IBUF, ^TIRQ._HE, TTYP) CreateBitField (^IBUF, ^TIRQ._LL, TPOL)