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

Commit 3c031caf authored by Maya Erez's avatar Maya Erez
Browse files

wil6210: protect against sporadic interrupt during suspend flow



During the suspend flow, wil6210 HW can send sporadic interrupts,
while PCIe bus is not operational.
To prevent that, keep the interrupts disabled during the suspend
flow and re-enable them only after PCIe enablement in resume.

Change-Id: I205f8cdb89c4f64ecac4ca3422767bfc47ec3d33
Signed-off-by: default avatarMaya Erez <merez@codeaurora.org>
parent b69eb970
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -80,12 +80,20 @@ int wil_suspend(struct wil6210_priv *wil, bool is_runtime)
		}
	}

	if (wil->platform_ops.suspend)
	/* Disable PCIe IRQ to prevent sporadic IRQs when PCIe is suspending */
	wil_dbg_pm(wil, "Disabling PCIe IRQ before suspending\n");
	wil_disable_irq(wil);

	if (wil->platform_ops.suspend) {
		rc = wil->platform_ops.suspend(wil->platform_handle);
		if (rc)
			wil_enable_irq(wil);
	}

out:
	wil_dbg_pm(wil, "suspend: %s => %d\n",
		   is_runtime ? "runtime" : "system", rc);

	return rc;
}

@@ -104,6 +112,9 @@ int wil_resume(struct wil6210_priv *wil, bool is_runtime)
		}
	}

	wil_dbg_pm(wil, "Enabling PCIe IRQ\n");
	wil_enable_irq(wil);

	/* if netif up, bring hardware up
	 * During open(), IFF_UP set after actual device method
	 * invocation. This prevent recursive call to wil_up()