qcacmn: Pause Tx HW enqueue 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, do not update HP when apps suspend is in progress.

Change-Id: Id4176224563bdd759828397fa1cd23de1598192e
CRs-Fixed: 3294407
This commit is contained in:
Ananya Gupta
2022-09-20 12:20:07 +05:30
committed by Madan Koyyalamudi
父節點 aaa7ef6872
當前提交 a4b2a03200
共有 5 個文件被更改,包括 46 次插入2 次删除

查看文件

@@ -13578,6 +13578,21 @@ dp_get_tsf_time(struct cdp_soc_t *soc_hdl, uint32_t tsf_id, uint32_t mac_id,
}
#endif
/**
* dp_set_tx_pause() - Pause or resume tx path
* @soc_hdl: Datapath soc handle
* @flag: set or clear is_tx_pause
*
* Return: None.
*/
static inline
void dp_set_tx_pause(struct cdp_soc_t *soc_hdl, bool flag)
{
struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
soc->is_tx_pause = flag;
}
static struct cdp_cmn_ops dp_ops_cmn = {
.txrx_soc_attach_target = dp_soc_attach_target_wifi3,
.txrx_vdev_attach = dp_vdev_attach_wifi3,
@@ -13616,6 +13631,7 @@ static struct cdp_cmn_ops dp_ops_cmn = {
.tx_send = dp_tx_send,
.tx_send_exc = dp_tx_send_exception,
#endif
.set_tx_pause = dp_set_tx_pause,
.txrx_pdev_init = dp_pdev_init_wifi3,
.txrx_get_vdev_mac_addr = dp_get_vdev_mac_addr_wifi3,
.txrx_get_ctrl_pdev_from_vdev = dp_get_ctrl_pdev_from_vdev_wifi3,

查看文件

@@ -1631,7 +1631,8 @@ dp_tx_ring_access_end_wrapper(struct dp_soc *soc,
ret = hif_rtpm_get(HIF_RTPM_GET_ASYNC, HIF_RTPM_ID_DP);
if (QDF_IS_STATUS_SUCCESS(ret)) {
if (hif_system_pm_state_check(soc->hif_handle)) {
if (hif_system_pm_state_check(soc->hif_handle) ||
qdf_unlikely(soc->is_tx_pause)) {
dp_tx_hal_ring_access_end_reap(soc, hal_ring_hdl);
hal_srng_set_event(hal_ring_hdl, HAL_SRNG_FLUSH_EVENT);
hal_srng_inc_flush_cnt(hal_ring_hdl);
@@ -1656,7 +1657,8 @@ dp_tx_ring_access_end_wrapper(struct dp_soc *soc,
hal_ring_handle_t hal_ring_hdl,
int coalesce)
{
if (hif_system_pm_state_check(soc->hif_handle)) {
if (hif_system_pm_state_check(soc->hif_handle) ||
qdf_unlikely(soc->is_tx_pause)) {
dp_tx_hal_ring_access_end_reap(soc, hal_ring_hdl);
hal_srng_set_event(hal_ring_hdl, HAL_SRNG_FLUSH_EVENT);
hal_srng_inc_flush_cnt(hal_ring_hdl);

查看文件

@@ -2564,6 +2564,7 @@ struct dp_soc {
/* A flag using to decide the switch of rx link speed */
bool high_throughput;
#endif
bool is_tx_pause;
};
#ifdef IPA_OFFLOAD