All of lore.kernel.org
 help / color / mirror / Atom feed
* [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one"
@ 2026-08-02 12:54 Julien
  2026-08-03 11:59 ` Jarkko Sakkinen
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Julien @ 2026-08-02 12:54 UTC (permalink / raw)
  To: linux-integrity; +Cc: regressions, rafael.j.wysocki, jarkko


[-- Attachment #1.1: Type: text/plain, Size: 1031 bytes --]

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

[-- Attachment #1.2: Type: text/html, Size: 1419 bytes --]

[-- Attachment #2: ssdt10.dsl --]
[-- Type: text/x-dsl, Size: 10424 bytes --]

/*
 * 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                                             // .
                })
            }
        }
    }
}


[-- Attachment #3: ssdt1.dsl --]
[-- Type: text/x-dsl, Size: 798 bytes --]

/*
 * 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
    }
}


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one"
  2026-08-02 12:54 [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one" Julien
@ 2026-08-03 11:59 ` Jarkko Sakkinen
  2026-08-04 19:08 ` Wysocki, Rafael J
  2026-08-10 15:33 ` Jarkko Sakkinen
  2 siblings, 0 replies; 12+ messages in thread
From: Jarkko Sakkinen @ 2026-08-03 11:59 UTC (permalink / raw)
  To: Julien; +Cc: linux-integrity, regressions, rafael.j.wysocki

On Sun, Aug 02, 2026 at 02:54:47PM +0200, Julien wrote:
> Hello,
> 
> Please keep in mind this is my first time reporting a Linux kernel regression.

Thanks I investigate this properly before answering. It's my first day
after holiday so might take until Tue/Wed.

BR, Jarkko

> 
> 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
>     }
> }
> 


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one"
  2026-08-02 12:54 [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one" Julien
  2026-08-03 11:59 ` Jarkko Sakkinen
@ 2026-08-04 19:08 ` Wysocki, Rafael J
  2026-08-05 16:01   ` Rafael J. Wysocki (Intel)
  2026-08-10 15:33 ` Jarkko Sakkinen
  2 siblings, 1 reply; 12+ messages in thread
From: Wysocki, Rafael J @ 2026-08-04 19:08 UTC (permalink / raw)
  To: Julien
  Cc: regressions, jarkko, linux-integrity, Rafael J. Wysocki,
	linux-acpi@vger.kernel.org

Hi,

On 8/2/2026 2:54 PM, Julien wrote:
> 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
>
So there's no platform device for the driver to bind to.

I think that these messages have been present in the kernel logs for 
quite some time, but previously they were not connected to any 
functional issues.


> 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.
>
This is quite plausible, but if that's the case, it should be fixable.

Let me figure out something.


> 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
>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one"
  2026-08-04 19:08 ` Wysocki, Rafael J
@ 2026-08-05 16:01   ` Rafael J. Wysocki (Intel)
  2026-08-06  9:54     ` Julien
  0 siblings, 1 reply; 12+ messages in thread
From: Rafael J. Wysocki (Intel) @ 2026-08-05 16:01 UTC (permalink / raw)
  To: Wysocki, Rafael J
  Cc: Julien, regressions, jarkko, linux-integrity, Rafael J. Wysocki,
	linux-acpi@vger.kernel.org

[-- Attachment #1: Type: text/plain, Size: 1431 bytes --]

On Tue, Aug 4, 2026 at 9:08 PM Wysocki, Rafael J
<rafael.j.wysocki@intel.com> wrote:
>
> Hi,
>
> On 8/2/2026 2:54 PM, Julien wrote:
> > 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
> >
> So there's no platform device for the driver to bind to.
>
> I think that these messages have been present in the kernel logs for
> quite some time, but previously they were not connected to any
> functional issues.
>
>
> > 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.
> >
> This is quite plausible, but if that's the case, it should be fixable.
>
> Let me figure out something.

Please try the attached patch and let me know how it goes.

It applies on top of the current mainline, but it may be adjusted to
older kernels, so please let me know if you need that.

[-- Attachment #2: acpi-platform-adjust-resources.patch --]
[-- Type: text/x-patch, Size: 1780 bytes --]

---
 drivers/acpi/acpi_platform.c |   39 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 37 insertions(+), 2 deletions(-)

--- a/drivers/acpi/acpi_platform.c
+++ b/drivers/acpi/acpi_platform.c
@@ -71,6 +71,39 @@ static struct notifier_block acpi_platfo
 	.notifier_call = acpi_platform_device_remove_notify,
 };
 
+static void acpi_platform_adjust_resource(struct acpi_device *adev,
+					  struct resource *new_res,
+					  const struct resource *resources,
+					  unsigned int count)
+{
+	unsigned int i;
+
+	if (!(new_res->flags & (IORESOURCE_IO | IORESOURCE_MEM)))
+		return;
+
+	for (i = 0; i < count; i++) {
+		const struct resource *res = &resources[i];
+
+		if (resource_type(new_res) != resource_type(res))
+			continue;
+
+		if (!resource_overlaps(new_res, res))
+			continue;
+
+		dev_info(&adev->dev, "Adjusting resource %pR to %pR\n", new_res, res);
+		/*
+		 * Extend the new resource to include the one that has been
+		 * processed already to avoid resource insertion failures during
+		 * platform device registration.
+		 */
+		if (res->start < new_res->start)
+			new_res->start = res->start;
+
+		if (res->end > new_res->end)
+			new_res->end = res->end;
+	}
+}
+
 static void acpi_platform_fill_resource(struct acpi_device *adev,
 	const struct resource *src, struct resource *dest)
 {
@@ -151,10 +184,12 @@ struct platform_device *acpi_create_plat
 				return ERR_PTR(-ENOMEM);
 			}
 			count = 0;
-			list_for_each_entry(rentry, &resource_list, node)
+			list_for_each_entry(rentry, &resource_list, node) {
+				acpi_platform_adjust_resource(adev, rentry->res,
+							      resources, count);
 				acpi_platform_fill_resource(adev, rentry->res,
 							    &resources[count++]);
-
+			}
 			acpi_dev_free_resource_list(&resource_list);
 		}
 	}

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one"
  2026-08-05 16:01   ` Rafael J. Wysocki (Intel)
@ 2026-08-06  9:54     ` Julien
  2026-08-06 10:45       ` Rafael J. Wysocki (Intel)
  0 siblings, 1 reply; 12+ messages in thread
From: Julien @ 2026-08-06  9:54 UTC (permalink / raw)
  To: Rafael J. Wysocki (Intel)
  Cc: Wysocki, Rafael J, regressions, jarkko, linux-integrity,
	linux-acpi@vger.kernel.org

> Please try the attached patch and let me know how it goes.
>
> It applies on top of the current mainline, but it may be adjusted to
> older kernels, so please let me know if you need that.

Thanks. The patch seems to be working. /dev/tpm0 and /dev/tpmrm0 are
back and a command like tpm2_get_random 16 succeeds.

> I think that these messages have been present in the kernel logs for
> quite some time, but previously they were not connected to any
> functional issues.

You are right that the messages were already present before. I see
them in the commit before "tpm_crb: Convert ACPI driver to a platform
one".

Here is what the logs say now:
acpi MSFT0101:00: Adjusting resource [mem 0xfed4000-0xfed40fff] to
[mem 0xfed40040-0xfed4103f]
tpm_crb_acpi MSFT0101:00: [Firmware Bug]: Bad ACPI memory layout

The second message was already there before too.

I'm sorry for sending multiple times the same email. I'm still learning.

On Wed, Aug 5, 2026 at 6:01 PM Rafael J. Wysocki (Intel)
<rafael@kernel.org> wrote:
>
> On Tue, Aug 4, 2026 at 9:08 PM Wysocki, Rafael J
> <rafael.j.wysocki@intel.com> wrote:
> >
> > Hi,
> >
> > On 8/2/2026 2:54 PM, Julien wrote:
> > > 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
> > >
> > So there's no platform device for the driver to bind to.
> >
> > I think that these messages have been present in the kernel logs for
> > quite some time, but previously they were not connected to any
> > functional issues.
> >
> >
> > > 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.
> > >
> > This is quite plausible, but if that's the case, it should be fixable.
> >
> > Let me figure out something.
>
> Please try the attached patch and let me know how it goes.
>
> It applies on top of the current mainline, but it may be adjusted to
> older kernels, so please let me know if you need that.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one"
  2026-08-06  9:54     ` Julien
@ 2026-08-06 10:45       ` Rafael J. Wysocki (Intel)
  2026-08-06 19:58         ` Rafael J. Wysocki (Intel)
  0 siblings, 1 reply; 12+ messages in thread
From: Rafael J. Wysocki (Intel) @ 2026-08-06 10:45 UTC (permalink / raw)
  To: Julien
  Cc: Rafael J. Wysocki (Intel), Wysocki, Rafael J, regressions, jarkko,
	linux-integrity, linux-acpi@vger.kernel.org

On Thu, Aug 6, 2026 at 11:55 AM Julien <julien82453@gmail.com> wrote:
>
> > Please try the attached patch and let me know how it goes.
> >
> > It applies on top of the current mainline, but it may be adjusted to
> > older kernels, so please let me know if you need that.
>
> Thanks. The patch seems to be working. /dev/tpm0 and /dev/tpmrm0 are
> back and a command like tpm2_get_random 16 succeeds.
>
> > I think that these messages have been present in the kernel logs for
> > quite some time, but previously they were not connected to any
> > functional issues.
>
> You are right that the messages were already present before. I see
> them in the commit before "tpm_crb: Convert ACPI driver to a platform
> one".
>
> Here is what the logs say now:
> acpi MSFT0101:00: Adjusting resource [mem 0xfed4000-0xfed40fff] to
> [mem 0xfed40040-0xfed4103f]
> tpm_crb_acpi MSFT0101:00: [Firmware Bug]: Bad ACPI memory layout
>
> The second message was already there before too.
>
> I'm sorry for sending multiple times the same email. I'm still learning.

No worries.  I sometimes do that too.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one"
  2026-08-06 10:45       ` Rafael J. Wysocki (Intel)
@ 2026-08-06 19:58         ` Rafael J. Wysocki (Intel)
  2026-08-07 10:45           ` Rafael J. Wysocki (Intel)
  0 siblings, 1 reply; 12+ messages in thread
From: Rafael J. Wysocki (Intel) @ 2026-08-06 19:58 UTC (permalink / raw)
  To: Julien
  Cc: Wysocki, Rafael J, regressions, jarkko, linux-integrity,
	linux-acpi@vger.kernel.org

On Thu, Aug 6, 2026 at 12:45 PM Rafael J. Wysocki (Intel)
<rafael@kernel.org> wrote:
>
> On Thu, Aug 6, 2026 at 11:55 AM Julien <julien82453@gmail.com> wrote:
> >
> > > Please try the attached patch and let me know how it goes.
> > >
> > > It applies on top of the current mainline, but it may be adjusted to
> > > older kernels, so please let me know if you need that.
> >
> > Thanks. The patch seems to be working. /dev/tpm0 and /dev/tpmrm0 are
> > back and a command like tpm2_get_random 16 succeeds.

Please test the v2 of the patch at:

https://lore.kernel.org/linux-acpi/12954206.O9o76ZdvQC@rafael.j.wysocki/

The v1 had an issue pointed out by Sashiko.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one"
  2026-08-06 19:58         ` Rafael J. Wysocki (Intel)
@ 2026-08-07 10:45           ` Rafael J. Wysocki (Intel)
  2026-08-07 12:26             ` Julien
  0 siblings, 1 reply; 12+ messages in thread
From: Rafael J. Wysocki (Intel) @ 2026-08-07 10:45 UTC (permalink / raw)
  To: Julien; +Cc: regressions, jarkko, linux-integrity, linux-acpi@vger.kernel.org

On Thu, Aug 6, 2026 at 9:58 PM Rafael J. Wysocki (Intel)
<rafael@kernel.org> wrote:
>
> On Thu, Aug 6, 2026 at 12:45 PM Rafael J. Wysocki (Intel)
> <rafael@kernel.org> wrote:
> >
> > On Thu, Aug 6, 2026 at 11:55 AM Julien <julien82453@gmail.com> wrote:
> > >
> > > > Please try the attached patch and let me know how it goes.
> > > >
> > > > It applies on top of the current mainline, but it may be adjusted to
> > > > older kernels, so please let me know if you need that.
> > >
> > > Thanks. The patch seems to be working. /dev/tpm0 and /dev/tpmrm0 are
> > > back and a command like tpm2_get_random 16 succeeds.
>
> Please test the v2 of the patch at:
>
> https://lore.kernel.org/linux-acpi/12954206.O9o76ZdvQC@rafael.j.wysocki/
>
> The v1 had an issue pointed out by Sashiko.

And there is a v3 already:

https://lore.kernel.org/linux-acpi/12955541.O9o76ZdvQC@rafael.j.wysocki/

so please test this one if possible.

Thanks!

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one"
  2026-08-07 10:45           ` Rafael J. Wysocki (Intel)
@ 2026-08-07 12:26             ` Julien
  2026-08-07 12:46               ` Rafael J. Wysocki (Intel)
  0 siblings, 1 reply; 12+ messages in thread
From: Julien @ 2026-08-07 12:26 UTC (permalink / raw)
  To: Rafael J. Wysocki (Intel)
  Cc: regressions, jarkko, linux-integrity, linux-acpi@vger.kernel.org

On Fri, Aug 7, 2026 at 12:45 PM Rafael J. Wysocki (Intel)
<rafael@kernel.org> wrote:
> And there is a v3 already:
>
> https://lore.kernel.org/linux-acpi/12955541.O9o76ZdvQC@rafael.j.wysocki/
>
> so please test this one if possible.
>
> Thanks!

Yes it still works.

The logs:
MSFT0101:00: [mem 0xfed40000-0xfed4103f] expanded to avoid overlap
tpm_crb_acpi MSFT0101:00: [Firmware Bug]: Bad ACPI memory layout

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one"
  2026-08-07 12:26             ` Julien
@ 2026-08-07 12:46               ` Rafael J. Wysocki (Intel)
  2026-08-10 15:34                 ` Jarkko Sakkinen
  0 siblings, 1 reply; 12+ messages in thread
From: Rafael J. Wysocki (Intel) @ 2026-08-07 12:46 UTC (permalink / raw)
  To: Julien
  Cc: Rafael J. Wysocki (Intel), regressions, jarkko, linux-integrity,
	linux-acpi@vger.kernel.org

On Fri, Aug 7, 2026 at 2:26 PM Julien <julien82453@gmail.com> wrote:
>
> On Fri, Aug 7, 2026 at 12:45 PM Rafael J. Wysocki (Intel)
> <rafael@kernel.org> wrote:
> > And there is a v3 already:
> >
> > https://lore.kernel.org/linux-acpi/12955541.O9o76ZdvQC@rafael.j.wysocki/
> >
> > so please test this one if possible.
> >
> > Thanks!
>
> Yes it still works.
>
> The logs:
> MSFT0101:00: [mem 0xfed40000-0xfed4103f] expanded to avoid overlap
> tpm_crb_acpi MSFT0101:00: [Firmware Bug]: Bad ACPI memory layout

Thanks for the confirmation!

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one"
  2026-08-02 12:54 [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one" Julien
  2026-08-03 11:59 ` Jarkko Sakkinen
  2026-08-04 19:08 ` Wysocki, Rafael J
@ 2026-08-10 15:33 ` Jarkko Sakkinen
  2 siblings, 0 replies; 12+ messages in thread
From: Jarkko Sakkinen @ 2026-08-10 15:33 UTC (permalink / raw)
  To: Julien; +Cc: linux-integrity, regressions, rafael.j.wysocki

On Sun, Aug 02, 2026 at 02:54:47PM +0200, Julien wrote:
> 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
>     }
> }
> 

I'm coming from holidays and catching up with matters.

Is the issue still valid?

And don't worry about be first timer if you have actual problems.

BR, Jarkko

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one"
  2026-08-07 12:46               ` Rafael J. Wysocki (Intel)
@ 2026-08-10 15:34                 ` Jarkko Sakkinen
  0 siblings, 0 replies; 12+ messages in thread
From: Jarkko Sakkinen @ 2026-08-10 15:34 UTC (permalink / raw)
  To: Rafael J. Wysocki (Intel)
  Cc: Julien, regressions, linux-integrity, linux-acpi@vger.kernel.org

On Fri, Aug 07, 2026 at 02:46:16PM +0200, Rafael J. Wysocki (Intel) wrote:
> On Fri, Aug 7, 2026 at 2:26 PM Julien <julien82453@gmail.com> wrote:
> >
> > On Fri, Aug 7, 2026 at 12:45 PM Rafael J. Wysocki (Intel)
> > <rafael@kernel.org> wrote:
> > > And there is a v3 already:
> > >
> > > https://lore.kernel.org/linux-acpi/12955541.O9o76ZdvQC@rafael.j.wysocki/
> > >
> > > so please test this one if possible.
> > >
> > > Thanks!
> >
> > Yes it still works.
> >
> > The logs:
> > MSFT0101:00: [mem 0xfed40000-0xfed4103f] expanded to avoid overlap
> > tpm_crb_acpi MSFT0101:00: [Firmware Bug]: Bad ACPI memory layout
> 
> Thanks for the confirmation!

I'll check your patch asap. Sorry for latency, it's the holiday season
in Finland.

BR, Jarkko

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2026-08-10 15:34 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-02 12:54 [REGRESSION] no TPM device after "tpm_crb: Convert ACPI driver to a platform one" Julien
2026-08-03 11:59 ` Jarkko Sakkinen
2026-08-04 19:08 ` Wysocki, Rafael J
2026-08-05 16:01   ` Rafael J. Wysocki (Intel)
2026-08-06  9:54     ` Julien
2026-08-06 10:45       ` Rafael J. Wysocki (Intel)
2026-08-06 19:58         ` Rafael J. Wysocki (Intel)
2026-08-07 10:45           ` Rafael J. Wysocki (Intel)
2026-08-07 12:26             ` Julien
2026-08-07 12:46               ` Rafael J. Wysocki (Intel)
2026-08-10 15:34                 ` Jarkko Sakkinen
2026-08-10 15:33 ` Jarkko Sakkinen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.