Re: [PATCH 0/3] PCI: qcom: Add D3cold support
From: Bjorn Andersson <andersson@kernel.org>
Date: 2026-01-28 14:55:26
Also in:
linux-arm-msm, linux-pci, lkml
On Wed, Jan 28, 2026 at 05:10:40PM +0530, Krishna Chaitanya Chundru wrote:
This series adds a common helper to determine when a PCIe host bridge can safely enter D3cold, converts the DesignWare host driver to use that helper, and enables D3cold support for Qualcomm PCIe controllers.
You only modify qcom_pcie_deinit_2_7_0() so which targets is this expected to work on and which targets have you tested it on. How can I test it and what outcome should I expect?
The first patch introduces pci_host_common_can_enter_d3cold() in pci-host-common. The helper walks all devices on the bridge's bus and only allows the host bridge to enter D3cold if all PCIe endpoints are already in PCI_D3hot. For devices that may wake the system, it additionally requires that the device support PME wakeup from D3cold (via WAKE#). Devices without wakeup enabled are not restricted by this check and may be left in D3cold. The second patch updates the DesignWare host driver to use this common helper in dw_pcie_suspend_noirq(). Previously, the driver skipped putting the link into L2 / device D3cold whenever L1 ASPM was enabled, since some devices (e.g. NVMe) expect low resume latency and may not tolerate deeper power states. However, such devices typically remain in D0 and are already covered by the helper's requirement that all endpoints be in D3hot before the host bridge may enter D3cold. Using the shared helper removes this coarse heuristic and centralizes the D3cold eligibility policy. The third patch enables D3cold support for Qualcomm PCIe controllers. It adds pme_turn_off() support and switches to the DesignWare common suspend/resume methods for device D3cold entry and exit. If the controller is not kept in D3cold, the existing paths are used so that ICC votes, OPP votes, and other resources remain managed as before. In addition, qcom_pcie_deinit_2_7_0() is updated to explicitly disable PCIe clocks and resets in the controller, and the now-unused "suspended" flag is removed from struct qcom_pcie.
This is effectively just duplicating the commit messages. Lacking from both is a good explanation of the problem statement, but that might just be me not getting it? Could you please help me understand what the actual outcome of this series is? I was under the impression that this work would lead us towards unblocking CXPC, but the other patch you sent will prevent CXPC. Regards, Bjorn
Signed-off-by: Krishna Chaitanya Chundru <redacted>
---
Krishna Chaitanya Chundru (3):
PCI: host-common: Add shared D3cold eligibility helper for host bridges
PCI: dwc: Use common D3cold eligibility helper in suspend path
PCI: qcom: Add D3cold support
drivers/pci/controller/dwc/pcie-designware-host.c | 7 +-
drivers/pci/controller/dwc/pcie-designware.h | 1 +
drivers/pci/controller/dwc/pcie-qcom.c | 114 +++++++++++++---------
drivers/pci/controller/pci-host-common.c | 29 ++++++
drivers/pci/controller/pci-host-common.h | 2 +
5 files changed, 101 insertions(+), 52 deletions(-)
---
base-commit: 590a64365d9bcc13ee644a3e73ffdc3df26cf23c
change-id: 20251229-d3cold-bf99921960bb
Best regards,
--
Krishna Chaitanya Chundru [off-list ref]