Merge "msm: ipa3: Fix to hold the clock until replenish the descriptors"

This commit is contained in:
qctecmdr 2019-12-03 15:33:50 -08:00 • committed by Gerrit - the friendly Code Review server
commit 1768daa512

View file

@ -2015,7 +2015,6 @@ static void ipa3_replenish_rx_page_recycle(struct ipa3_sys_context *sys)
rx_pkt = sys->repl->cache[curr_wq];
curr_wq = (++curr_wq == sys->repl->capacity) ?
0 : curr_wq;
atomic_set(&sys->repl->head_idx, curr_wq);
}
dma_sync_single_for_device(ipa3_ctx->pdev,
@ -2053,6 +2052,7 @@ static void ipa3_replenish_rx_page_recycle(struct ipa3_sys_context *sys)
if (ret == GSI_STATUS_SUCCESS) {
/* ensure write is done before setting head index */
mb();
atomic_set(&sys->repl->head_idx, curr_wq);
atomic_set(&sys->page_recycle_repl->head_idx, curr);
sys->len = rx_len_cached;
} else {
@ -4972,13 +4972,20 @@ start_poll:
/* call repl_hdlr before napi_reschedule / napi_complete */
if (cnt)
ep->sys->repl_hdlr(ep->sys);
if (cnt < weight) {
/* When not able to replenish enough descriptors pipe wait
* until minimum number descripotrs to replish.
*/
if (cnt < weight && ep->sys->len > IPA_DEFAULT_SYS_YELLOW_WM) {
napi_complete(ep->sys->napi_obj);
ret = ipa3_rx_switch_to_intr_mode(ep->sys);
if (ret == -GSI_STATUS_PENDING_IRQ &&
napi_reschedule(ep->sys->napi_obj))
goto start_poll;
ipa_pm_deferred_deactivate(ep->sys->pm_hdl);
} else {
cnt = weight;
IPADBG("Client = %d not replenished free descripotrs\n",
ep->client);
}
return cnt;
}