https://bugzilla.kernel.org/show_bug.cgi?id=222243
Bug ID: 222243
Summary: [REGRESSION] Casper Excalibur G900 (Quanta NLCC):
Secondary NVMe inaccessible on PEG2 (0000:00:01.1) due
to conflicting ACPI power resources & D3cold
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
# Linux Kernel Bug Report & Quirk Proposal: Casper Excalibur G900 Secondary
NVMe D3cold Failure
**To:** `[email protected]`, `[email protected]`
**Cc:** `[email protected]`, `[email protected]`
**Subject:** [REGRESSION / BUG] Casper Excalibur G900 (Quanta NLCC): Secondary
NVMe inaccessible on PEG2 (0000:00:01.1) due to conflicting ACPI power
resources & D3cold
---
### Hardware Information
- **System Vendor:** CASPER BILGISAYAR SISTEMLERI
- **Product Name:** EXCALIBUR G900
- **Baseboard:** NLCC 001 (Quanta NLCC ODM platform)
- **CPU:** 11th Gen Intel Core (Tiger Lake-H)
- **Primary NVMe (Working):** Crucial P2 attached to root port `0000:00:06.0`
(`\_SB.PC00.RP06`)
- **Secondary NVMe (Failing):** Kingston NV2 attached to PEG root port
`0000:00:01.1` (`\_SB.PC00.PEG2`)
### Problem Description
On Linux kernels 5.15 and older, as well as on Windows, both NVMe SSDs work
without any issues.
Starting with Linux 6.x and continuing on 7.x, the secondary NVMe SSD on
`0000:02:00.0` fails to probe with the following error:
```text
[ 1.156309] nvme nvme1: pci function 0000:02:00.0
[ 1.156320] nvme 0000:02:00.0: Unable to change power state from D3cold to
D0, device inaccessible
[ 1.156607] nvme 0000:02:00.0: error -ENODEV: probe failed
```
At early PCI bus scan (`0.34s`), the device Vendor ID `2646:5019` is detected.
However, by the time the `nvme` driver probes at `1.15s`, reading PCI config
space returns `0xffffffff` (`header type 7f`).
### Root Cause Analysis
1. The motherboard routes the second M.2 NVMe slot through CPU PEG2
(`0000:00:01.1`).
2. The OEM BIOS contains conflicting definitions for `\_SB.PC00.PEG2` in two
separate tables:
- `SSDT3` (`SaSsdt`): Intel reference table defining dummy power resource
`PG02` and methods `WKEN`, `_DSW`, `_PR0`, `_PR3`.
- `SSDT6` (`TglH_Rvp`): Quanta board-specific table defining the real
hardware power resource `PXP`, controlling slot power GPIO `\PIN.ON(PWRG)` and
reset release `\PIN.OFF(RSTG)`.
3. Because `SSDT3` loads first, `SSDT6` fails to load its power resources:
```text
ACPI BIOS Error (bug): Failure creating named object [\_SB.PC00.PEG2._PR0],
AE_ALREADY_EXISTS
ACPI BIOS Error (bug): Failure creating named object [\_SB.PC00.PEG2._PR3],
AE_ALREADY_EXISTS
```
4. During boot, ACPICA skips `SSDT6`'s `_PR0`/`_PR3`. The kernel assumes `PXP`
has 0 references and turns off `PXP` (`POFF()` -> `\PIN.OFF(PWRG)`).
5. When `nvme` probes, `pci_power_up` evaluates `_PR0` (which points to dummy
`PG02`). `PWRG` is never turned on, leaving the slot unpowered.
### Verified Workaround (Initrd ACPI Table Override)
Disassembling `SSDT3`, removing the conflicting dummy `WKEN`, `_DSW`, `_PR0`,
`_PR3` blocks from `Scope (\_SB.PC00.PEG2)`, incrementing OEM Revision to
`0x3001`, and overriding via initrd (`/boot/acpi_override.cpio`) completely
resolves the problem without touching BIOS settings. `SSDT6` loads cleanly,
`PXP` turns on the power rail, and the drive functions properly.
### Proposed Mainline Kernel Quirk
A PCI quirk in `drivers/pci/quirks.c` can disable D3cold or prevent power-off
for `0000:00:01.1` on Casper Excalibur G900:
```c
static void quirk_casper_g900_peg2_d3cold(struct pci_dev *dev)
{
if (dmi_match(DMI_SYS_VENDOR, "CASPER BILGISAYAR SISTEMLERI") &&
dmi_match(DMI_PRODUCT_NAME, "EXCALIBUR G900")) {
pci_info(dev, "Casper Excalibur G900: disabling D3cold on PEG2 to avoid
conflicting ACPI power resource lockup\n");
dev->d3cold_allowed = false;
pci_d3cold_disable(dev);
}
}
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x9a05,
quirk_casper_g900_peg2_d3cold);
```
--
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