Hi,

I encountered the same issue on a new T480s as reported here:
https://marc.info/?l=openbsd-bugs&m=152022260714390&w=2

I am posting this to misc because the bug appears to be with Lenovo's ACPI 
tables, not OpenBSD. I just wanted to provide some updated information for 
anyone else who has this machine and might be experiencing the same issues.

Lenovo just released another UEFI update:

"<1.12>
 UEFI: 1.12 / ECP: 1.07
- (Fix) Fix an issue where the "Configuration changed - restart the system" 
message might be displayed 2 or 3 times on Non-Smart Card model when power on 
the computer.

<1.11>
 UEFI: 1.11 / ECP: 1.07
- (Fix) Fix an issue where system may become hot by system interrupts when 
Thundrebolt is disabled in ThinkPad Setup - Security - I/O Port Access."

These sound promising because the changelog addresses both issues.

I never encountered the message "configuration changed - restart the system" in 
the first place, so I can't really confirm or deny whether that fix works. 
Ironically, I did see that message for the first time ever - immediately after 
applying the UEFI update that claims to fix it. Thankfully I haven't seen it 
again since.

Unfortunately, the thunderbolt interrupt issue has only been fixed for the 
"disabled" state. With thunderbolt enabled, the ACPI interrupt storm still 
happens as usual. It occurs on every cold-boot, and is always resolved by a 
reboot.

I compared the old and new DSDT tables to see how they modified the thunderbolt 
code. I don't know much about the ASL language, so I can't really comment on 
the specifics of what they've done, but to my untrained eye, and given that it 
doesn't work, it may have been unnecessary.

I have a hunch that the bug is actually in these sections:
...
            If ((TBTS == 0x01))
            {
                Acquire (OSUM, 0xFFFF)
                \_GPE.TINI (TBSE)
                If ((TBMP == 0x01))
                {
                    \_GPE.TINI (TBS1)
                }

                Release (OSUM)
            }
...
            If ((TBTS == 0x01))
            {
                Acquire (OSUM, 0xFFFF)
                \_GPE.TINI (TBSE)
                Release (OSUM)
                If ((TBMP == 0x01))
                {
                    Acquire (OSUM, 0xFFFF)
                    \_GPE.TINI (TBS1)
                    Release (OSUM)
                }
...

The first block appears in a "wake" section, and the second block appears in an 
"initialize" section. This fits the problem description; When I cold-boot the 
system, the interrupt problem always exists. When I reboot the system, the 
interrupt problem never exists. Therefore, one of these sections must not be 
acquiring and releasing mutexes properly. I believe the second section is 
correct, and the first section should be rewritten to match (contrary to my 
expectations, this implies a cold-boot is considered to be a "wake" event 
rather than an "initialization" event).

As an aside, I noticed the list of operating systems in the "initialize" 
section is missing OpenBSD. How inconsiderate!
...
                If (\_OSI ("Linux"))
                {
                    \LNUX = 0x01
                    OSYS = 0x03E8
                }

                If (\_OSI ("FreeBSD"))
                {
                    \LNUX = 0x01
                    OSYS = 0x03E8
                }
...

Solutions, from worst to best:

1) After powering on the machine, type "reboot" at the OpenBSD bootloader.
2) Update to the latest UEFI firmware and then disable thunderbolt.
3) Report the bug to Lenovo so they can investigate and fix it at the source.

Anybody have a contact within Lenovo for option 3?

Reply via email to