https://bugzilla.kernel.org/show_bug.cgi?id=222225
Bug ID: 222225
Summary: IdeaPad Slim 3 14IAH8: duplicate _UPC/_PLD
declarations for USB ports HS01-HS10/SS01-SS04
(AE_ALREADY_EXISTS)
Product: ACPI
Version: 2.5
Hardware: Intel
OS: Linux
Status: NEW
Severity: normal
Priority: P3
Component: Config-Tables
Assignee: [email protected]
Reporter: [email protected]
Regression: No
Created attachment 311358
--> https://bugzilla.kernel.org/attachment.cgi?id=311358&action=edit
Evidence + fix bundle for the _UPC/_PLD AE_ALREADY_EXISTS bug: dmesg capture,
DSDT/SSDT13 ASL excerpt, fix script, full report.
Lenovo IdeaPad Slim 3 14IAH8 (MTM 83EQ), BIOS LTCN29WW, Intel Alder Lake-P.
Reproduced on kernel 6.19.14, 6.19.11, 6.18.12.
Symptom: 54 "AE_ALREADY_EXISTS" errors every boot, one set for each of 24
USB port objects (\_SB.PC00.XHCI.RHUB.HS01-HS10, \_SB.PC00.XHCI.RHUB.SS01-SS10,
\_SB.PC00.TXHC.RHUB.SS01-SS04). Purely cosmetic -- USB enumeration, Type-C,
and Thunderbolt all function normally -- but it is 54 lines of log noise
every boot.
Root cause: the DSDT (and SSDT6, for the Thunderbolt-side ports) declares
each of these ports with a static Name(_UPC,...)/Name(_PLD,...) block
carrying generic, never-customized silicon-vendor placeholder values
(PLD_Panel = "UNKNOWN" is the tell). SSDT13 separately re-declares the
exact same named objects with dynamic Method(_UPC,...)/Method(_PLD,...)
bodies that call \_SB.UBTC.RUCC, a real, connector-state-aware runtime
lookup -- almost certainly the ODM's actual board-specific USB-C/
Thunderbolt handling, added later in the firmware build without removing
the original template's static copy. ACPICA loads tables in sequence, so
by the time SSDT13 tries to declare HS01._PLD/_UPC (etc.), the name is
already occupied by the DSDT's static copy.
This is a multi-stage-build defect (template never stripped when a later,
board-specific override was layered on top), not a one-off typo -- the
same signature is independently documented on other Lenovo models as well
(see Red Hat Bugzilla #1820023, a different model, same bug class).
Fix (confirmed working, 0 errors after applying): strip only the stale
static Name(_UPC,...)/Name(_PLD,...) blocks from DSDT (HS01-HS10,
SS01-SS10) and SSDT6 (SS01-SS04) via a brace-depth-aware script (attached,
strip_pld_upc.sh), bump each table's OEM Revision, recompile, and deliver
via GRUB_EARLY_INITRD_LINUX_CUSTOM + CONFIG_ACPI_TABLE_UPGRADE. SSDT13's
dynamic declarations then load with no collision. Full writeup with
before/after verification Attachment (pld_upc_lenovo_attachments.tar.gz)
contents:
- pld_upc_dmesg_excerpt.txt -- real, complete, unedited pre-fix dmesg
capture (2026-08-30) showing all 54 AE_ALREADY_EXISTS lines.
- pld_upc_dsdt_ssdt13_excerpt.dsl -- decompiled ASL showing DSDT's stale
static block vs. SSDT13's real dynamic override, side by side.
- strip_pld_upc.sh -- the actual fix script (bash+awk, brace-depth
matching). Usage: ./strip_pld_upc.sh <input.dsl> <output.dsl> <DEV1> ...
- LENOVO_14IAH8_UPC_PLD_FIX_PUBLIC_REPORT.md -- full writeup: root cause,
fix, general application steps, confirmed before/after result. Start
here.
--
You may reply to this email to add a comment.
You are receiving this mail because:
You are watching the assignee of the bug.
_______________________________________________
acpi-bugzilla mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/acpi-bugzilla