Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1508a1fc authored by Yue Ma's avatar Yue Ma
Browse files

cnss2: Check driver link state before prevent/allow PCIe L1



Avoid calling prevent/allow PCIe L1 APIs if driver has already known
link is not accessible.

Change-Id: Ia12c6b932fb7d99916ca2b76323bd2c01bdb655d
Signed-off-by: default avatarYue Ma <yuem@codeaurora.org>
parent 10da9faf
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -775,6 +775,22 @@ int cnss_resume_pci_link(struct cnss_pci_data *pci_priv)
int cnss_pci_prevent_l1(struct device *dev)
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
	struct cnss_pci_data *pci_priv = cnss_get_pci_priv(pci_dev);

	if (!pci_priv) {
		cnss_pr_err("pci_priv is NULL\n");
		return -ENODEV;
	}

	if (pci_priv->pci_link_state == PCI_LINK_DOWN) {
		cnss_pr_dbg("PCIe link is suspended\n");
		return -EIO;
	}

	if (pci_priv->pci_link_down_ind) {
		cnss_pr_err("PCIe link is down\n");
		return -EIO;
	}

	return msm_pcie_prevent_l1(pci_dev);
}
@@ -783,6 +799,22 @@ EXPORT_SYMBOL(cnss_pci_prevent_l1);
void cnss_pci_allow_l1(struct device *dev)
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
	struct cnss_pci_data *pci_priv = cnss_get_pci_priv(pci_dev);

	if (!pci_priv) {
		cnss_pr_err("pci_priv is NULL\n");
		return;
	}

	if (pci_priv->pci_link_state == PCI_LINK_DOWN) {
		cnss_pr_dbg("PCIe link is suspended\n");
		return;
	}

	if (pci_priv->pci_link_down_ind) {
		cnss_pr_err("PCIe link is down\n");
		return;
	}

	msm_pcie_allow_l1(pci_dev);
}