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

Commit 0d56343d authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "cnss2: Suspend/resume PCI link during system suspend/resume"

parents cd679cb5 c875098e
Loading
Loading
Loading
Loading
+26 −6
Original line number Original line Diff line number Diff line
@@ -1083,12 +1083,9 @@ static int cnss_pci_suspend(struct device *dev)
	}
	}


	if (pci_priv->pci_link_state == PCI_LINK_UP && !pci_priv->disable_pc) {
	if (pci_priv->pci_link_state == PCI_LINK_UP && !pci_priv->disable_pc) {
		ret = cnss_pci_set_mhi_state(pci_priv, CNSS_MHI_SUSPEND);
		if (cnss_pci_set_mhi_state(pci_priv, CNSS_MHI_SUSPEND)) {
		if (ret) {
			if (driver_ops && driver_ops->resume)
				driver_ops->resume(pci_dev);
			ret = -EAGAIN;
			ret = -EAGAIN;
			goto out;
			goto resume_driver;
		}
		}


		pci_clear_master(pci_dev);
		pci_clear_master(pci_dev);
@@ -1100,12 +1097,28 @@ static int cnss_pci_suspend(struct device *dev)
		if (ret)
		if (ret)
			cnss_pr_err("Failed to set D3Hot, err = %d\n",
			cnss_pr_err("Failed to set D3Hot, err = %d\n",
				    ret);
				    ret);

		if (cnss_set_pci_link(pci_priv, PCI_LINK_DOWN)) {
			ret = -EAGAIN;
			goto resume_mhi;
		}
		pci_priv->pci_link_state = PCI_LINK_DOWN;
	}
	}


	cnss_pci_set_monitor_wake_intr(pci_priv, false);
	cnss_pci_set_monitor_wake_intr(pci_priv, false);


	return 0;
	return 0;


resume_mhi:
	if (pci_enable_device(pci_dev))
		cnss_pr_err("Failed to enable PCI device\n");
	if (pci_priv->saved_state)
		cnss_set_pci_config_space(pci_priv, RESTORE_PCI_CONFIG_SPACE);
	pci_set_master(pci_dev);
	cnss_pci_set_mhi_state(pci_priv, CNSS_MHI_RESUME);
resume_driver:
	if (driver_ops && driver_ops->resume)
		driver_ops->resume(pci_dev);
out:
out:
	return ret;
	return ret;
}
}
@@ -1123,7 +1136,14 @@ static int cnss_pci_resume(struct device *dev)
	if (pci_priv->pci_link_down_ind)
	if (pci_priv->pci_link_down_ind)
		goto out;
		goto out;


	if (pci_priv->pci_link_state == PCI_LINK_UP && !pci_priv->disable_pc) {
	if (pci_priv->pci_link_state == PCI_LINK_DOWN &&
	    !pci_priv->disable_pc) {
		if (cnss_set_pci_link(pci_priv, PCI_LINK_UP)) {
			ret = -EAGAIN;
			goto out;
		}
		pci_priv->pci_link_state = PCI_LINK_UP;

		ret = pci_enable_device(pci_dev);
		ret = pci_enable_device(pci_dev);
		if (ret)
		if (ret)
			cnss_pr_err("Failed to enable PCI device, err = %d\n",
			cnss_pr_err("Failed to enable PCI device, err = %d\n",