diff options
author | Tobias Diedrich <ranma+coreboot@tdiedrich.de> | 2016-02-15 13:13:58 +0100 |
---|---|---|
committer | Duncan Laurie <dlaurie@google.com> | 2016-02-18 01:48:10 +0100 |
commit | 85a255fbd89aba7edea7ac1d09c39099d53f7c44 (patch) | |
tree | 039a7751c839380271903c9dbe24a7e38338692d /src/drivers/pc80/tpm/acpi | |
parent | 05082737a9507a8bbb238d9d439f74a72a7606e8 (diff) |
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>
Reviewed-on: https://review.coreboot.org/13713
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Duncan Laurie <dlaurie@google.com>
Diffstat (limited to 'src/drivers/pc80/tpm/acpi')
-rw-r--r-- | src/drivers/pc80/tpm/acpi/tpm.asl | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/src/drivers/pc80/tpm/acpi/tpm.asl b/src/drivers/pc80/tpm/acpi/tpm.asl index 7755e9b066..de2511467a 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) |