Re: [PATCH 0/2] ACPI/PCI/CXL: Enforce _DEP ordering between ACPI0016 and ACPI0017
From: Alison Schofield
Date: Tue May 26 2026 - 21:15:33 EST
On Tue, May 26, 2026 at 10:51:16AM +0800, Chen Pei wrote:
> On platforms whose ACPI namespace exposes a CXL host bridge (ACPI0016)
> with an ACPI0017 CXL root device declaring _DEP on the host bridge,
> cxl_acpi can probe before acpi_pci_root has attached the PCI root.
> acpi_pci_find_root() then returns NULL, decoder targets read as 0,
> and no port/endpoint device shows up under /sys/bus/cxl/devices/.
>
> The root cause is twofold:
>
> 1. acpi_pci_root_add() never calls acpi_dev_clear_dependencies(),
> so _DEP suppliers downstream of a PCI root are never released.
>
> 2. ACPI0016 is not on acpi_honor_dep_ids[], so even when ACPI0017
> declares _DEP on it, acpi_dev_ready_for_enumeration() bypasses
> the dep_unmet check and lets cxl_acpi probe early.
>
> On x86 the bug is usually masked by link order (acpi_pci_root is
> built in and probed before cxl_acpi). On architectures like RISC-V
> that ordering is not guaranteed, so the standard ACPI _DEP mechanism
> must actually work.
>
> This series fixes both sides and the two patches must be applied
> together; applying only patch 2 would prevent cxl_acpi from ever
> probing on ACPI0016 systems, because the supplier would never clear
> the dependency.
>
> Patch 1 makes acpi_pci_root_add() clear _DEP on the supplier once
> the PCI root bus has been added.
> Patch 2 adds ACPI0016 to acpi_honor_dep_ids[] so the dependency
> declared by ACPI0017 is enforced.
>
> The approach in this series follows the discussion of an earlier
> posting:
> https://lore.kernel.org/linux-cxl/20260514023238.49984-1-cp0613@xxxxxxxxxxxxxxxxx/
>
> Chen Pei (2):
> ACPI: PCI: clear _DEP dependencies after PCI root bridge attach
> ACPI: scan: honor _DEP for ACPI0016 PCI/CXL host bridge
For the set:
Tested-by: Alison Schofield <alison.schofield@xxxxxxxxx>
Reviewed-by: Alison Schofield <alison.schofield@xxxxxxxxx>