mirror of
https://github.com/raspberrypi/linux.git
synced 2026-01-03 08:14:12 +00:00
wifi: ath12k: introduce QMI firmware ready flag
When hardware device group abstraction is introduced, the QMI firmware ready event of different devices in a group can be received simultaneously. To indicate the firmware ready event is completed for a particular device in a group set a flag (ATH12K_FLAG_QMI_FW_READY_COMPLETE). This helps the upcoming hardware recovery implementation for hardware device group abstraction. Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1 Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3 Signed-off-by: Karthikeyan Periyasamy <quic_periyasa@quicinc.com> Signed-off-by: Harshitha Prem <quic_hprem@quicinc.com> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> Link: https://patch.msgid.link/20241128165026.2618331-5-kvalo@kernel.org
This commit is contained in:
committed by
Kalle Valo
parent
17dd22aff5
commit
45e72c306c
@@ -1145,7 +1145,7 @@ static void ath12k_core_reset(struct work_struct *work)
|
||||
int reset_count, fail_cont_count;
|
||||
long time_left;
|
||||
|
||||
if (!(test_bit(ATH12K_FLAG_REGISTERED, &ab->dev_flags))) {
|
||||
if (!(test_bit(ATH12K_FLAG_QMI_FW_READY_COMPLETE, &ab->dev_flags))) {
|
||||
ath12k_warn(ab, "ignore reset dev flags 0x%lx\n", ab->dev_flags);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -228,6 +228,7 @@ enum ath12k_dev_flags {
|
||||
ATH12K_FLAG_HTC_SUSPEND_COMPLETE,
|
||||
ATH12K_FLAG_CE_IRQ_ENABLED,
|
||||
ATH12K_FLAG_EXT_IRQ_ENABLED,
|
||||
ATH12K_FLAG_QMI_FW_READY_COMPLETE,
|
||||
};
|
||||
|
||||
struct ath12k_tx_conf {
|
||||
|
||||
@@ -3033,6 +3033,8 @@ void ath12k_qmi_firmware_stop(struct ath12k_base *ab)
|
||||
{
|
||||
int ret;
|
||||
|
||||
clear_bit(ATH12K_FLAG_QMI_FW_READY_COMPLETE, &ab->dev_flags);
|
||||
|
||||
ret = ath12k_qmi_wlanfw_mode_send(ab, ATH12K_FIRMWARE_MODE_OFF);
|
||||
if (ret < 0) {
|
||||
ath12k_warn(ab, "qmi failed to send wlan mode off\n");
|
||||
@@ -3336,7 +3338,7 @@ static void ath12k_qmi_driver_event_work(struct work_struct *work)
|
||||
break;
|
||||
case ATH12K_QMI_EVENT_FW_READY:
|
||||
clear_bit(ATH12K_FLAG_QMI_FAIL, &ab->dev_flags);
|
||||
if (test_bit(ATH12K_FLAG_REGISTERED, &ab->dev_flags)) {
|
||||
if (test_bit(ATH12K_FLAG_QMI_FW_READY_COMPLETE, &ab->dev_flags)) {
|
||||
if (ab->is_reset)
|
||||
ath12k_hal_dump_srng_stats(ab);
|
||||
queue_work(ab->workqueue, &ab->restart_work);
|
||||
@@ -3346,8 +3348,12 @@ static void ath12k_qmi_driver_event_work(struct work_struct *work)
|
||||
clear_bit(ATH12K_FLAG_CRASH_FLUSH,
|
||||
&ab->dev_flags);
|
||||
clear_bit(ATH12K_FLAG_RECOVERY, &ab->dev_flags);
|
||||
ath12k_core_qmi_firmware_ready(ab);
|
||||
set_bit(ATH12K_FLAG_REGISTERED, &ab->dev_flags);
|
||||
ret = ath12k_core_qmi_firmware_ready(ab);
|
||||
if (!ret) {
|
||||
set_bit(ATH12K_FLAG_QMI_FW_READY_COMPLETE,
|
||||
&ab->dev_flags);
|
||||
set_bit(ATH12K_FLAG_REGISTERED, &ab->dev_flags);
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user