Commit a19c0e10 authored by Seevalamuthu Mariappan's avatar Seevalamuthu Mariappan Committed by Kalle Valo
Browse files

ath11k: Handle failure in qmi firmware ready



In some scenarios like firmware crashes during init time
and hardware gets restarted after qmi firmware ready event.
During restart, ath11k_core_qmi_firmware_ready() returns timeout.
But, this failure is not handled and ATH11K_FLAG_REGISTERED is set.

When hardware restart completed, firmware sends firmware ready event
again. Since ATH11K_FLAG_REGISTERED is already set, ath11k handles
this as core restart. Inits are not done because of previous timeout.
But ath11k_core_restart does deinit's which causes NULL pointer crash.

Fix this by handling failure from ath11k_core_qmi_firmware_ready().

Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-00881-QCAHKSWPL_SILICONZ-1

Signed-off-by: default avatarSeevalamuthu Mariappan <quic_seevalam@quicinc.com>
Signed-off-by: default avatarKalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/1645079195-13564-1-git-send-email-quic_seevalam@quicinc.com
parent f2180ccb
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -2960,7 +2960,11 @@ static void ath11k_qmi_driver_event_work(struct work_struct *work)
				clear_bit(ATH11K_FLAG_CRASH_FLUSH,
					  &ab->dev_flags);
				clear_bit(ATH11K_FLAG_RECOVERY, &ab->dev_flags);
				ath11k_core_qmi_firmware_ready(ab);
				ret = ath11k_core_qmi_firmware_ready(ab);
				if (ret) {
					set_bit(ATH11K_FLAG_QMI_FAIL, &ab->dev_flags);
					break;
				}
				set_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags);
			}