BIOS bug: `_TZ.ETMD` missing in ACPI tables

When booting up Ubuntu 22.04 (kernel 5.15.0-25), I get the following error in the kernel log:

apr 18 13:22:25 dottie kernel: ACPI BIOS Error (bug): Could not resolve symbol [\_TZ.ETMD], AE_NOT_FOUND (20210730/psargs-330)
apr 18 13:22:25 dottie kernel: 
apr 18 13:22:25 dottie kernel: No Local Variables are initialized for Method [_OSC]
apr 18 13:22:25 dottie kernel: 
apr 18 13:22:25 dottie kernel: Initialized Arguments for Method [_OSC]:  (4 arguments defined for method invocation)
apr 18 13:22:25 dottie kernel:   Arg0:   00000000fb231197 <Obj>           Buffer(16) 5D A8 3B B2 B7 C8 42 35
apr 18 13:22:25 dottie kernel:   Arg1:   0000000025d9a193 <Obj>           Integer 0000000000000001
apr 18 13:22:25 dottie kernel:   Arg2:   0000000078b55545 <Obj>           Integer 0000000000000002
apr 18 13:22:25 dottie kernel:   Arg3:   00000000bf92f763 <Obj>           Buffer(8) 00 00 00 00 05 00 00 00
apr 18 13:22:25 dottie kernel: 
apr 18 13:22:25 dottie kernel: ACPI Error: Aborting method \_SB.IETM._OSC due to previous error (AE_NOT_FOUND) (20210730/psparse-529)

I think this indicates a bug in the ACPI tables (so BIOS?).

I wondered if this might be a bug in Linux instead, but looking at the ACPI tables themselves, it indeed seems like _TZ.ETMD is declared as external and (in the failing _SB.IETM._OSC method) written to, but never actually defined:

# acpidump > tables.dump
# acpixtract -a tables.dump
# iasl -d *.dat
# grep ETMD *.dsl
dsdt.dsl:    External (_TZ_.ETMD, IntObj)
ssdt2.dsl:    External (_TZ_.ETMD, IntObj)
ssdt2.dsl:                                \_TZ.ETMD = Zero
ssdt2.dsl:                                \_TZ.ETMD = One
ssdt2.dsl:                            \_TZ.ETMD = One

I am not entirely sure what the impact of this failure is. I could not find any documentation on this failing _SB.IETM object using the name or the INTC1040 _HID, but looking around the kernel code, it seems that this _HID loads the int3400_thermal.c driver, so it is some thermal-related thing. But looking at the code, it seems the failing _OSC method handles a UUID (b23ba85d-c8b7-3542-88de-8de2ffcfd698) that is not listed in the kernel driver, and I also cannot find the “IDSP” object that the kernel seems to use to detect which UUIDs are supported, so I’m not quite sure about any of this.

Any Framework devs or other users that can shed some light on this?

It seems that this thermal driver does not do any control itself, but exposes /sys/devices/platform/INTC1040:00, where you can set the “current uuid” and then do some operations on it there. It seems thermald source explicitly lists this path as well, so probably uses this interface. The UUID (Arg0) listed in the error message is listed in the kernel as INT3400_THERMAL_CRITICAL (full UUID is 97C68AE7-15FA-499c-B8C9-5DA81D606E0A), but does not seem to be listed in thermald sources, so maybe there is some other userspace component that triggered this error.

Also, the UUID that is handled by the method in the ACPI table, is apparently a new UUID that will be supported from kernel 5.18 (or so) and onwards: [PATCH v2] thermal: int340x: Update OS policy capability — Linux Kernel

If I read this correctly, this ACPI method being broken mostly means that userspace cannot indicate to the firmware that it supports managing the thermal stuff, meaning the firmware would handle it (which may result in limited turbo performance, IIUC).

Everything still confirms that the ACPI table is broken, though.

Hi, In my systemlog I see the same “ACPI BIOS Error (bug): Could not resolve symbol [_TZ.ETMD], AE_NOT_FOUND (20210730/psargs-330)”
I also see 3 times thermald “Unsupported condition 58 (UKNKNOWN)”.
Using Kubuntu 22.04 LTS
Can anybody help with this?
Thank you.
Thomas