qcacld-3.0: Pause Tx when bus suspend in progress
In SAP due to intrabss forwarding, Tx ring update is going through when WOW enable command has been sent to FW. This results in crash. To fix this, set is_tx_pause flag when suspend sequence starts, which will pause Tx ring HP update. Change-Id: I81f25b8bfca917c95180c460fd932c0f75094c10 CRs-Fixed: 3295428
This commit is contained in:

committed by
Madan Koyyalamudi

parent
05f2522998
commit
4912b28c8d
@@ -325,6 +325,7 @@ ucfg_dp_suspend_handler(struct wlan_objmgr_psoc *psoc, void *arg)
|
|||||||
{
|
{
|
||||||
struct wlan_dp_psoc_context *dp_ctx;
|
struct wlan_dp_psoc_context *dp_ctx;
|
||||||
struct wlan_dp_intf *dp_intf, *dp_intf_next = NULL;
|
struct wlan_dp_intf *dp_intf, *dp_intf_next = NULL;
|
||||||
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
|
|
||||||
dp_ctx = dp_psoc_get_priv(psoc);
|
dp_ctx = dp_psoc_get_priv(psoc);
|
||||||
if (!dp_ctx) {
|
if (!dp_ctx) {
|
||||||
@@ -333,6 +334,7 @@ ucfg_dp_suspend_handler(struct wlan_objmgr_psoc *psoc, void *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
dp_ctx->is_suspend = true;
|
dp_ctx->is_suspend = true;
|
||||||
|
cdp_set_tx_pause(soc, true);
|
||||||
dp_for_each_intf_held_safe(dp_ctx, dp_intf, dp_intf_next) {
|
dp_for_each_intf_held_safe(dp_ctx, dp_intf, dp_intf_next) {
|
||||||
dp_intf->sap_tx_block_mask |= WLAN_DP_SUSPEND;
|
dp_intf->sap_tx_block_mask |= WLAN_DP_SUSPEND;
|
||||||
}
|
}
|
||||||
@@ -353,6 +355,7 @@ ucfg_dp_resume_handler(struct wlan_objmgr_psoc *psoc, void *arg)
|
|||||||
{
|
{
|
||||||
struct wlan_dp_psoc_context *dp_ctx;
|
struct wlan_dp_psoc_context *dp_ctx;
|
||||||
struct wlan_dp_intf *dp_intf, *dp_intf_next = NULL;
|
struct wlan_dp_intf *dp_intf, *dp_intf_next = NULL;
|
||||||
|
void *soc = cds_get_context(QDF_MODULE_ID_SOC);
|
||||||
|
|
||||||
dp_ctx = dp_psoc_get_priv(psoc);
|
dp_ctx = dp_psoc_get_priv(psoc);
|
||||||
if (!dp_ctx) {
|
if (!dp_ctx) {
|
||||||
@@ -361,6 +364,7 @@ ucfg_dp_resume_handler(struct wlan_objmgr_psoc *psoc, void *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
dp_ctx->is_suspend = false;
|
dp_ctx->is_suspend = false;
|
||||||
|
cdp_set_tx_pause(soc, false);
|
||||||
dp_for_each_intf_held_safe(dp_ctx, dp_intf, dp_intf_next) {
|
dp_for_each_intf_held_safe(dp_ctx, dp_intf, dp_intf_next) {
|
||||||
dp_intf->sap_tx_block_mask &= ~WLAN_DP_SUSPEND;
|
dp_intf->sap_tx_block_mask &= ~WLAN_DP_SUSPEND;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user