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>
This commit is contained in:
parent
05082737a9
commit
85a255fbd8
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue