Hello,
Please keep in mind this is my first time reporting a Linux kernel
regression.
Since commit 48fe2cddc85c ("tpm_crb: Convert ACPI driver to a platform
one"), my TPM device is no longer available. Both /dev/tpm0 and /dev/tpmrm0
are missing.
Log messages:
platform MSFT0101:00: failed to claim resource 1: [mem
0xfed40000-0xfed40fff]
acpi MSFT0101:00: platform device creation failed: -16
I added some debug logging:
ACPI resourcet[0] = [mem 0xfed40040-0xfed4103f flags 0x200]
ACPI resourcet[1] = [mem 0xfed40000-0xfed40fff flags 0x200]
I think the failure happens in kernel/resource.c: __insert_resource()
because of the two memory regions overlapping.
I am attaching the TPM SSDT and the SDDT defining PTTB ACPI variable
address.
The value of PPTB
dd if=/dev/mem bs=1 skip=$((0x8AE5CFDC)) count=8 | hexdump -C
40 00 d4 fe 00 00 00 00
Hardware information:
Manufacturer: Acer
Model: Aspire ES1-572
BIOS vendor: Insyde Corp.
BIOS version: V1.16
BIOS date: 09/18/2018
Thanks
#regzbot introduced: 48fe2cddc85c
/*
* Intel ACPI Component Architecture
* AML/ASL+ Disassembler version 20251212 (64-bit version)
* Copyright (c) 2000 - 2025 Intel Corporation
*
* Disassembling to symbolic ASL+ operators
*
* Disassembly of ssdt10.dat
*
* Original Table Header:
* Signature "SSDT"
* Length 0x000004C8 (1224)
* Revision 0x02
* Checksum 0x69
* OEM ID "ACRSYS"
* OEM Table ID "ACRPRDCT"
* OEM Revision 0x00001000 (4096)
* Compiler ID "1025"
* Compiler Version 0x00040000 (262144)
*/
DefinitionBlock ("", "SSDT", 2, "ACRSYS", "ACRPRDCT", 0x00001000)
{
External (PTTB, UnknownObj)
Scope (\_SB)
{
Device (TPM)
{
Name (_HID, "MSFT0101" /* TPM 2.0 Security Device */) // _HID: Hardware ID
Name (_STR, Unicode ("TPM 2.0 Device")) // _STR: Description String
Name (CRS, ResourceTemplate ()
{
Memory32Fixed (ReadOnly,
0x00000000, // Address Base
0x00001000, // Address Length
_Y00)
Memory32Fixed (ReadOnly,
0xFED40000, // Address Base
0x00001000, // Address Length
)
})
Name (PTTA, 0xFED40000)
Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
{
CreateDWordField (CRS, \_SB.TPM._Y00._BAS, CBAS) // _BAS: Base Address
CBAS = PTTB /* External reference */
PTTA = PTTB /* External reference */
Return (CRS) /* \_SB_.TPM_.CRS_ */
}
OperationRegion (SMIP, SystemIO, 0xB2, One)
Field (SMIP, ByteAcc, NoLock, Preserve)
{
IOB2, 8
}
OperationRegion (TPMR, SystemMemory, PTTA, 0x1000)
Field (TPMR, AnyAcc, NoLock, Preserve)
{
Offset (0x44),
FERR, 32,
Offset (0x4C),
STRT, 32
}
OperationRegion (FHCI, SystemMemory, 0xFED40000, 0x1000)
Field (FHCI, AnyAcc, NoLock, Preserve)
{
Offset (0x04),
HERR, 32,
Offset (0x40),
CREQ, 32,
CSTS, 32,
Offset (0x4C),
HCMD, 32
}
OperationRegion (TNVS, SystemMemory, 0x8AE4F000, 0x2B)
Field (TNVS, AnyAcc, NoLock, Preserve)
{
PPIN, 8,
PPIP, 32,
PPRP, 32,
PPRQ, 32,
PPRM, 32,
LPPR, 32,
FRET, 32,
MCIN, 8,
MCIP, 32,
MORD, 32,
MRET, 32
}
Method (PTS, 1, Serialized)
{
If (((Arg0 < 0x06) && (Arg0 > 0x03)))
{
If (!(MORD & 0x10))
{
MCIP = 0x02
IOB2 = MCIN /* \_SB_.TPM_.MCIN */
}
}
Return (Zero)
}
Method (_STA, 0, NotSerialized) // _STA: Status
{
Return (0x0F)
}
Method (HINF, 3, Serialized)
{
Switch (ToInteger (Arg1))
{
Case (Zero)
{
Return (Buffer (One)
{
0x03 // .
})
}
Case (One)
{
Name (TPMV, Package (0x02)
{
One,
Package (0x02)
{
One,
0x20
}
})
If ((_STA () == Zero))
{
Return (Package (0x01)
{
Zero
})
}
Return (TPMV) /* \_SB_.TPM_.HINF.TPMV */
}
Default
{
BreakPoint
}
}
Return (Buffer (One)
{
0x00 // .
})
}
Name (TPM2, Package (0x02)
{
Zero,
Zero
})
Name (TPM3, Package (0x03)
{
Zero,
Zero,
Zero
})
Method (TPPI, 3, Serialized)
{
Switch (ToInteger (Arg1))
{
Case (Zero)
{
Return (Buffer (0x02)
{
0xFF, 0x01 // ..
})
}
Case (One)
{
Return ("1.2")
}
Case (0x02)
{
PPRQ = DerefOf (Arg2 [Zero])
PPIP = 0x02
IOB2 = PPIN /* \_SB_.TPM_.PPIN */
Return (FRET) /* \_SB_.TPM_.FRET */
}
Case (0x03)
{
TPM2 [One] = PPRQ /* \_SB_.TPM_.PPRQ */
Return (TPM2) /* \_SB_.TPM_.TPM2 */
}
Case (0x04)
{
Return (0x02)
}
Case (0x05)
{
PPIP = 0x05
IOB2 = PPIN /* \_SB_.TPM_.PPIN */
TPM3 [One] = LPPR /* \_SB_.TPM_.LPPR */
TPM3 [0x02] = PPRP /* \_SB_.TPM_.PPRP */
Return (TPM3) /* \_SB_.TPM_.TPM3 */
}
Case (0x06)
{
Return (0x03)
}
Case (0x07)
{
PPIP = 0x07
PPRQ = DerefOf (Arg2 [Zero])
PPRM = Zero
If ((PPRQ == 0x17))
{
PPRM = DerefOf (Arg2 [One])
}
IOB2 = PPIN /* \_SB_.TPM_.PPIN */
Return (FRET) /* \_SB_.TPM_.FRET */
}
Case (0x08)
{
PPIP = 0x08
PPRQ = DerefOf (Arg2 [Zero])
IOB2 = PPIN /* \_SB_.TPM_.PPIN */
Return (FRET) /* \_SB_.TPM_.FRET */
}
Default
{
BreakPoint
}
}
Return (One)
}
Method (TMCI, 3, Serialized)
{
Switch (ToInteger (Arg1))
{
Case (Zero)
{
Return (Buffer (One)
{
0x03 // .
})
}
Case (One)
{
MORD = DerefOf (Arg2 [Zero])
MCIP = One
IOB2 = MCIN /* \_SB_.TPM_.MCIN */
Return (MRET) /* \_SB_.TPM_.MRET */
}
Default
{
BreakPoint
}
}
Return (One)
}
Method (TSMI, 3, Serialized)
{
Name (WTME, Zero)
Switch (ToInteger (Arg1))
{
Case (Zero)
{
Return (Buffer (One)
{
0x03 // .
})
}
Case (One)
{
CREQ = One
While (((WTME <= 0xC8) && ((CREQ & One) !=
Zero)))
{
Sleep (One)
WTME++
}
HCMD = 0x02
Return (Zero)
}
Default
{
BreakPoint
}
}
Return (One)
}
Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
{
If ((Arg0 == ToUUID ("cf8e16a5-c1e8-4e25-b712-4f54a96702c8") /* TPM Hardware Information */))
{
Return (HINF (Arg1, Arg2, Arg3))
}
If ((Arg0 == ToUUID ("3dddfaa6-361b-4eb4-a424-8d10089d1653") /* Physical Presence Interface */))
{
Return (TPPI (Arg1, Arg2, Arg3))
}
If ((Arg0 == ToUUID ("376054ed-cc13-4675-901c-4756d7f2d45d") /* TPM Memory Clear */))
{
Return (TMCI (Arg1, Arg2, Arg3))
}
If ((Arg0 == ToUUID ("6bbf6cab-5463-4714-b7cd-f0203c0368d4") /* TPM Start Method */))
{
Return (TSMI (Arg1, Arg2, Arg3))
}
Return (Buffer (One)
{
0x00 // .
})
}
}
}
}
/*
* Intel ACPI Component Architecture
* AML/ASL+ Disassembler version 20251212 (64-bit version)
* Copyright (c) 2000 - 2025 Intel Corporation
*
* Disassembling to symbolic ASL+ operators
*
* Disassembly of ssdt1.dat
*
* Original Table Header:
* Signature "SSDT"
* Length 0x00000046 (70)
* Revision 0x02
* Checksum 0x01
* OEM ID "ACRSYS"
* OEM Table ID "ACRPRDCT"
* OEM Revision 0x00003000 (12288)
* Compiler ID "1025"
* Compiler Version 0x00040000 (262144)
*/
DefinitionBlock ("", "SSDT", 2, "ACRSYS", "ACRPRDCT", 0x00003000)
{
OperationRegion (MENV, SystemMemory, 0x8AE5CFD8, 0x000C)
Field (MENV, AnyAcc, Lock, Preserve)
{
MERV, 32,
PTTB, 64
}
}