Commit 22447661 authored by Emmanuel Grumbach's avatar Emmanuel Grumbach Committed by Miri Korenblit
Browse files

wifi: iwlwifi: if scratch is ~0U, consider it a failure



We want to see bits being set in the scratch register upon resume, but
if all the bits are set, it means that we were kicked out of the PCI bus
and that clearly doesn't mean we can assume the firmware is still alive
after the suspend / resume cycle.

Fixes: cb347bd2 ("wifi: iwlwifi: mvm: fix hibernation")
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarMiri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250828095500.0f203e559242.I59eff718cb5fda575db41081a1a389f7af488717@changeid
parent d9104cec
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -1222,11 +1222,15 @@ static int _iwl_pci_resume(struct device *device, bool restore)
	 * Note: MAC (bits 0:7) will be cleared upon suspend even with wowlan,
	 * but not bits [15:8]. So if we have bits set in lower word, assume
	 * the device is alive.
	 * Alternatively, if the scratch value is 0xFFFFFFFF, then we no longer
	 * have access to the device and consider it powered off.
	 * For older devices, just try silently to grab the NIC.
	 */
	if (trans->mac_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) {
		if (!(iwl_read32(trans, CSR_FUNC_SCRATCH) &
		      CSR_FUNC_SCRATCH_POWER_OFF_MASK))
		u32 scratch = iwl_read32(trans, CSR_FUNC_SCRATCH);

		if (!(scratch & CSR_FUNC_SCRATCH_POWER_OFF_MASK) ||
		    scratch == ~0U)
			device_was_powered_off = true;
	} else {
		/*