[PATCH iwl-net 08/10] ice: detect a PF reset that does not complete
From: Petr Oros
Date: Fri Oct 02 2026 - 09:17:24 EST
ice_pf_reset() polls PFGEN_CTRL.PFSWR for up to
ICE_GLOBAL_CFG_LOCK_TIMEOUT + ICE_PF_RESET_WAIT_COUNT iterations, but
the timeout check after the loop still compares the counter with
ICE_PF_RESET_WAIT_COUNT alone. When the reset never completes the loop
ends with cnt == 5300, the check does not match and the function
returns success with PFSWR still set. A reset that completes just when
the counter reaches ICE_PF_RESET_WAIT_COUNT is reported as a failure
instead.
Check the PFSWR bit read last instead of the loop counter, the same
way i40e_pf_reset() does after its poll loop.
Fixes: c9a12d6d2091 ("ice: Increase timeout after PFR")
Assisted-by: LLM
Signed-off-by: Petr Oros <poros@xxxxxxxxxx>
---
drivers/net/ethernet/intel/ice/ice_common.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c
index 04633103e3e610..0ffd6b5b81239e 100644
--- a/drivers/net/ethernet/intel/ice/ice_common.c
+++ b/drivers/net/ethernet/intel/ice/ice_common.c
@@ -1291,7 +1291,7 @@ static int ice_pf_reset(struct ice_hw *hw)
mdelay(1);
}
- if (cnt == ICE_PF_RESET_WAIT_COUNT) {
+ if (reg & PFGEN_CTRL_PFSWR_M) {
ice_debug(hw, ICE_DBG_INIT, "PF reset polling failed to complete.\n");
return -EIO;
}
--
2.55.0