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

Commit 2749159e authored by Mahesh Kumar Kalikot Veetil's avatar Mahesh Kumar Kalikot Veetil
Browse files

cnss2: Fix pci suspend and resume sequence



Allow pci link suspend/resume only if target is powered on.
Otherwise pci link training will fail. Add a check if target is
powered on before suspending/resuming pci link.

Change-Id: I73b3003da4138155065ac3b8837d4147079ebc7e
CRs-Fixed: 2475839
Signed-off-by: default avatarMahesh Kumar Kalikot Veetil <mkalikot@codeaurora.org>
parent 63f0dd25
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -374,6 +374,7 @@ void cnss_put_clk(struct cnss_plat_data *plat_priv);
int cnss_get_pinctrl(struct cnss_plat_data *plat_priv);
int cnss_power_on_device(struct cnss_plat_data *plat_priv);
void cnss_power_off_device(struct cnss_plat_data *plat_priv);
bool cnss_is_device_powered_on(struct cnss_plat_data *plat_priv);
int cnss_register_subsys(struct cnss_plat_data *plat_priv);
void cnss_unregister_subsys(struct cnss_plat_data *plat_priv);
int cnss_register_ramdump(struct cnss_plat_data *plat_priv);
+12 −0
Original line number Diff line number Diff line
@@ -1471,6 +1471,9 @@ static int cnss_pci_suspend(struct device *dev)
	if (!plat_priv)
		goto out;

	if (!cnss_is_device_powered_on(plat_priv))
		goto out;

	if (!test_bit(DISABLE_DRV, &plat_priv->ctrl_params.quirks))
		pci_priv->drv_connected_last =
			cnss_pci_get_drv_connected(pci_priv);
@@ -1543,6 +1546,9 @@ static int cnss_pci_resume(struct device *dev)
	if (pci_priv->pci_link_down_ind)
		goto out;

	if (!cnss_is_device_powered_on(pci_priv->plat_priv))
		goto out;

	if (pci_priv->pci_link_state == PCI_LINK_DOWN &&
	    !pci_priv->disable_pc) {
		if (cnss_set_pci_link(pci_priv, PCI_LINK_UP)) {
@@ -1638,6 +1644,9 @@ static int cnss_pci_runtime_suspend(struct device *dev)
	if (!plat_priv)
		return -EAGAIN;

	if (!cnss_is_device_powered_on(pci_priv->plat_priv))
		return -EAGAIN;

	if (pci_priv->pci_link_down_ind) {
		cnss_pr_dbg("PCI link down recovery is in progress!\n");
		return -EAGAIN;
@@ -1674,6 +1683,9 @@ static int cnss_pci_runtime_resume(struct device *dev)
	if (!pci_priv)
		return -EAGAIN;

	if (!cnss_is_device_powered_on(pci_priv->plat_priv))
		return -EAGAIN;

	if (pci_priv->pci_link_down_ind) {
		cnss_pr_dbg("PCI link down recovery is in progress!\n");
		return -EAGAIN;
+5 −0
Original line number Diff line number Diff line
@@ -748,6 +748,11 @@ void cnss_power_off_device(struct cnss_plat_data *plat_priv)
	plat_priv->powered_on = false;
}

bool cnss_is_device_powered_on(struct cnss_plat_data *plat_priv)
{
	return plat_priv->powered_on;
}

void cnss_set_pin_connect_status(struct cnss_plat_data *plat_priv)
{
	unsigned long pin_status = 0;