ath11k: purge rx pktlog when entering WoW
This change is to purge rx pktlog when entering WoW and reap the mon_status buffer to keep it empty. When leaving WoW, host restarts the reap timer. In WoW state, it's not allowed to feed into mon_status rings per firmware team's recommendation. Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1 Signed-off-by: Carl Huang <quic_cjhuang@quicinc.com> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> Link: https://lore.kernel.org/r/1644308006-22784-5-git-send-email-quic_cjhuang@quicinc.com
This commit is contained in:
parent
c417b247ba
commit
90bf5c8d0f
1 changed files with 23 additions and 0 deletions
|
@ -13,6 +13,7 @@
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "wmi.h"
|
#include "wmi.h"
|
||||||
#include "wow.h"
|
#include "wow.h"
|
||||||
|
#include "dp_rx.h"
|
||||||
|
|
||||||
static const struct wiphy_wowlan_support ath11k_wowlan_support = {
|
static const struct wiphy_wowlan_support ath11k_wowlan_support = {
|
||||||
.flags = WIPHY_WOWLAN_DISCONNECT |
|
.flags = WIPHY_WOWLAN_DISCONNECT |
|
||||||
|
@ -566,6 +567,14 @@ int ath11k_wow_op_suspend(struct ieee80211_hw *hw,
|
||||||
|
|
||||||
mutex_lock(&ar->conf_mutex);
|
mutex_lock(&ar->conf_mutex);
|
||||||
|
|
||||||
|
ret = ath11k_dp_rx_pktlog_stop(ar->ab, true);
|
||||||
|
if (ret) {
|
||||||
|
ath11k_warn(ar->ab,
|
||||||
|
"failed to stop dp rx (and timer) pktlog during wow suspend: %d\n",
|
||||||
|
ret);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
ret = ath11k_wow_cleanup(ar);
|
ret = ath11k_wow_cleanup(ar);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
ath11k_warn(ar->ab, "failed to clear wow wakeup events: %d\n",
|
ath11k_warn(ar->ab, "failed to clear wow wakeup events: %d\n",
|
||||||
|
@ -599,6 +608,14 @@ int ath11k_wow_op_suspend(struct ieee80211_hw *hw,
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = ath11k_dp_rx_pktlog_stop(ar->ab, false);
|
||||||
|
if (ret) {
|
||||||
|
ath11k_warn(ar->ab,
|
||||||
|
"failed to stop dp rx pktlog during wow suspend: %d\n",
|
||||||
|
ret);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
ath11k_ce_stop_shadow_timers(ar->ab);
|
ath11k_ce_stop_shadow_timers(ar->ab);
|
||||||
ath11k_dp_stop_shadow_timers(ar->ab);
|
ath11k_dp_stop_shadow_timers(ar->ab);
|
||||||
|
|
||||||
|
@ -649,6 +666,12 @@ int ath11k_wow_op_resume(struct ieee80211_hw *hw)
|
||||||
ath11k_hif_ce_irq_enable(ar->ab);
|
ath11k_hif_ce_irq_enable(ar->ab);
|
||||||
ath11k_hif_irq_enable(ar->ab);
|
ath11k_hif_irq_enable(ar->ab);
|
||||||
|
|
||||||
|
ret = ath11k_dp_rx_pktlog_start(ar->ab);
|
||||||
|
if (ret) {
|
||||||
|
ath11k_warn(ar->ab, "failed to start rx pktlog from wow: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
ret = ath11k_wow_wakeup(ar->ab);
|
ret = ath11k_wow_wakeup(ar->ab);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
ath11k_warn(ar->ab, "failed to wakeup from wow: %d\n", ret);
|
ath11k_warn(ar->ab, "failed to wakeup from wow: %d\n", ret);
|
||||||
|
|
Loading…
Add table
Reference in a new issue