Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
a0e2036
FROMLIST: PCI: dwc: Use common D3cold eligibility helper in suspend path
krishnachaitanya-linux Jan 28, 2026
77a9ef6
FROMLIST: PCI: host-common: Add shared D3cold eligibility helper for …
krishnachaitanya-linux Jan 28, 2026
a86b4ea
FROMLIST: PCI: qcom: Add D3cold support
krishnachaitanya-linux Jan 28, 2026
c140559
FROMLIST: PCI: qcom: Prevent GDSC power down on suspend
krishnachaitanya-linux Jan 28, 2026
894d5cd
FROMLIST: PCI: qcom: Add .get_ltssm() helper
krishnachaitanya-linux Feb 17, 2026
8adef17
FROMLIST: PCI: Introduce an API to check if RC/platform can retain de…
Mani-Sadhasivam Apr 14, 2026
f488716
FROMLIST: PCI: Indicate context lost if L1ss exit is broken during re…
Mani-Sadhasivam Apr 14, 2026
600a445
FROMLIST: PCI: qcom: Indicate broken L1ss exit during resume from sys…
Mani-Sadhasivam Apr 14, 2026
afa0a1f
FROMLIST: nvme-pci: Use pci_dev_suspend_retention_supported() API dur…
Mani-Sadhasivam Apr 14, 2026
b323b93
FROMLIST: PCI: host-common: Add helper to determine host bridge D3col…
krishnachaitanya-linux Apr 29, 2026
a825447
FROMLIST: PCI: qcom: Add .get_ltssm() helper
krishnachaitanya-linux Apr 29, 2026
c49333b
FROMLIST: PCI: qcom: Power down PHY via PARF_PHY_CTRL before disablin…
krishnachaitanya-linux Apr 29, 2026
42dca68
FROMLIST: PCI: dwc: Use common D3cold eligibility helper in suspend path
krishnachaitanya-linux Apr 29, 2026
c266573
FROMLIST: PCI: qcom: Add D3cold support
krishnachaitanya-linux Apr 29, 2026
b1c88d1
FROMLIST: PCI: qcom: Set max OPP before DBI access during resume
qianyu-qcom May 14, 2026
acd6cd0
FROMLIST: PCI/pwrctrl: Do not try to power on/off devices that don't …
Mani-Sadhasivam Apr 21, 2026
2557ced
FROMLIST: pci: quirks: Advertise D3cold capability for UPD720201
sushrut-trivedi Apr 30, 2026
569db4c
FROMLIST: power: sequencing: pcie-m2: Fix inconsistent function prefixes
Mani-Sadhasivam May 19, 2026
96afcf3
FROMLIST: power: sequencing: pcie-m2: Allow creating serdev for multi…
Mani-Sadhasivam May 19, 2026
9f9f546
FROMLIST: power: sequencing: pcie-m2: Improve PCI device ID check
Mani-Sadhasivam May 19, 2026
8aebdd2
FROMLIST: power: sequencing: pcie-m2: Create serdev for PCI devices p…
Mani-Sadhasivam May 19, 2026
93d5ad8
FROMLIST: power: sequencing: pcie-m2: Create BT node based on the pci…
Mani-Sadhasivam May 19, 2026
9f308f6
FROMLIST: power: sequencing: Add an API to return the pwrseq device's…
Mani-Sadhasivam May 19, 2026
c122431
FROMLIST: Bluetooth: hci_qca: Add M.2 Bluetooth device support using …
Mani-Sadhasivam May 19, 2026
ad6b9cf
FROMLIST: Bluetooth: hci_qca: Rename 'power_ctrl_enabled' to 'bt_en_a…
Mani-Sadhasivam May 19, 2026
7650854
FROMLIST: Bluetooth: hci_qca: Set 'bt_en_available' based on W_DISABL…
Mani-Sadhasivam May 19, 2026
2deb140
USB: pci-quirks: Skip usb_early_handoff for Renesas PCI USB
May 21, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 24 additions & 4 deletions drivers/bluetooth/hci_qca.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_graph.h>
#include <linux/acpi.h>
#include <linux/platform_device.h>
#include <linux/pwrseq/consumer.h>
Expand Down Expand Up @@ -2390,7 +2391,7 @@ static int qca_serdev_probe(struct serdev_device *serdev)
struct hci_dev *hdev;
const struct qca_device_data *data;
int err;
bool power_ctrl_enabled = true;
bool bt_en_available = true;

qcadev = devm_kzalloc(&serdev->dev, sizeof(*qcadev), GFP_KERNEL);
if (!qcadev)
Expand Down Expand Up @@ -2443,6 +2444,25 @@ static int qca_serdev_probe(struct serdev_device *serdev)
case QCA_WCN6750:
case QCA_WCN6855:
case QCA_WCN7850:
/*
* OF graph link is only present for BT devices attached through
* the M.2 Key E connector.
*/
if (of_graph_is_present(dev_of_node(&serdev->ctrl->dev))) {
struct device *dev;

qcadev->bt_power->pwrseq = devm_pwrseq_get(&serdev->ctrl->dev,
"uart");
if (IS_ERR(qcadev->bt_power->pwrseq))
return PTR_ERR(qcadev->bt_power->pwrseq);

dev = pwrseq_to_device(qcadev->bt_power->pwrseq);
if (!device_property_present(dev, "w-disable2-gpios"))
bt_en_available = false;

break;
}

if (!device_property_present(&serdev->dev, "enable-gpios")) {
/*
* Backward compatibility with old DT sources. If the
Expand Down Expand Up @@ -2486,7 +2506,7 @@ static int qca_serdev_probe(struct serdev_device *serdev)
(data->soc_type == QCA_WCN6750 ||
data->soc_type == QCA_WCN6855 ||
data->soc_type == QCA_WCN7850))
power_ctrl_enabled = false;
bt_en_available = false;

qcadev->sw_ctrl = devm_gpiod_get_optional(&serdev->dev, "swctrl",
GPIOD_IN);
Expand Down Expand Up @@ -2524,7 +2544,7 @@ static int qca_serdev_probe(struct serdev_device *serdev)
}

if (!qcadev->bt_en)
power_ctrl_enabled = false;
bt_en_available = false;

qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
&serdev->dev, NULL, SUSCLK_RATE_32KHZ);
Expand All @@ -2542,7 +2562,7 @@ static int qca_serdev_probe(struct serdev_device *serdev)

hdev = qcadev->serdev_hu.hdev;

if (power_ctrl_enabled) {
if (bt_en_available) {
hci_set_quirk(hdev, HCI_QUIRK_NON_PERSISTENT_SETUP);
hdev->shutdown = qca_hci_shutdown;
}
Expand Down
3 changes: 2 additions & 1 deletion drivers/nvme/host/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -3916,6 +3916,7 @@ static int nvme_suspend(struct device *dev)
* use host managed nvme power settings for lowest idle power if
* possible. This should have quicker resume latency than a full device
* shutdown. But if the firmware is involved after the suspend or the
* platform has any limitation in waking from low power states or the
* device does not support any non-default power states, shut down the
* device fully.
*
Expand All @@ -3924,7 +3925,7 @@ static int nvme_suspend(struct device *dev)
* down, so as to allow the platform to achieve its minimum low-power
* state (which may not be possible if the link is up).
*/
if (pm_suspend_via_firmware() || !ctrl->npss ||
if (!pci_dev_suspend_retention_supported(pdev) || !ctrl->npss ||
!pcie_aspm_enabled(pdev) ||
(ndev->ctrl.quirks & NVME_QUIRK_SIMPLE_SUSPEND))
return nvme_disable_prepare_reset(ndev, true);
Expand Down
11 changes: 5 additions & 6 deletions drivers/pci/controller/dwc/pcie-designware-host.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@
#include <linux/msi.h>
#include <linux/of_address.h>
#include <linux/of_pci.h>
#include <linux/pci.h>
#include <linux/pci_regs.h>
#include <linux/platform_device.h>

#include "../pci-host-common.h"
#include "../../pci.h"
#include "pcie-designware.h"

Expand Down Expand Up @@ -1218,18 +1220,14 @@ static int dw_pcie_pme_turn_off(struct dw_pcie *pci)

int dw_pcie_suspend_noirq(struct dw_pcie *pci)
{
u8 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
bool pme_capable = false;
int ret = 0;
u32 val;

if (!dw_pcie_link_up(pci))
goto stop_link;

/*
* If L1SS is supported, then do not put the link into L2 as some
* devices such as NVMe expect low resume latency.
*/
if (dw_pcie_readw_dbi(pci, offset + PCI_EXP_LNKCTL) & PCI_EXP_LNKCTL_ASPM_L1)
if (!pci_host_common_d3cold_possible(pci->pp.bridge, &pme_capable))
return 0;

if (pci->pp.ops->pme_turn_off) {
Expand Down Expand Up @@ -1273,6 +1271,7 @@ int dw_pcie_suspend_noirq(struct dw_pcie *pci)
udelay(1);

stop_link:
pci->pp.skip_pwrctrl_off = pme_capable;
dw_pcie_stop_link(pci);
if (pci->pp.ops->deinit)
pci->pp.ops->deinit(&pci->pp);
Expand Down
2 changes: 2 additions & 0 deletions drivers/pci/controller/dwc/pcie-designware.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include <linux/pci-epc.h>
#include <linux/pci-epf.h>

#include "../pci-host-common.h"
#include "../../pci.h"

/* DWC PCIe IP-core versions (native support since v4.70a) */
Expand Down Expand Up @@ -450,6 +451,7 @@ struct dw_pcie_rp {
bool ecam_enabled;
bool native_ecam;
bool skip_l23_ready;
bool skip_pwrctrl_off;
};

struct dw_pcie_ep_ops {
Expand Down
Loading