soc: qcom: glink: Fix not sending READ_NOTIF command issue
The "tx_blocked_signal_sent" flag is not reset correctly after receiving the interrupt from the remote side. Hence further READ_NOTIF commands are not written into FIFO in FIFO full case. Reset the "tx_blocked_signal_sent" correctly after write space available in FIFO. CRs-Fixed: 2175526 Change-Id: I236da2a2b984b3f3cce8400b50f72ce1016d7e40 Signed-off-by: Arun Kumar Neelakantam <aneela@codeaurora.org>
This commit is contained in:
parent
42e90fc52d
commit
57efc49c75
1 changed files with 13 additions and 6 deletions
|
@ -831,24 +831,31 @@ static bool get_rx_fifo(struct edge_info *einfo)
|
||||||
*/
|
*/
|
||||||
static void tx_wakeup_worker(struct edge_info *einfo)
|
static void tx_wakeup_worker(struct edge_info *einfo)
|
||||||
{
|
{
|
||||||
|
struct glink_transport_if xprt_if = einfo->xprt_if;
|
||||||
bool trigger_wakeup = false;
|
bool trigger_wakeup = false;
|
||||||
|
bool trigger_resume = false;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
if (einfo->in_ssr)
|
if (einfo->in_ssr)
|
||||||
return;
|
return;
|
||||||
if (einfo->tx_resume_needed && fifo_write_avail(einfo)) {
|
|
||||||
einfo->tx_resume_needed = false;
|
|
||||||
einfo->xprt_if.glink_core_if_ptr->tx_resume(
|
|
||||||
&einfo->xprt_if);
|
|
||||||
}
|
|
||||||
spin_lock_irqsave(&einfo->write_lock, flags);
|
spin_lock_irqsave(&einfo->write_lock, flags);
|
||||||
|
if (fifo_write_avail(einfo)) {
|
||||||
|
if (einfo->tx_blocked_signal_sent)
|
||||||
|
einfo->tx_blocked_signal_sent = false;
|
||||||
|
if (einfo->tx_resume_needed) {
|
||||||
|
einfo->tx_resume_needed = false;
|
||||||
|
trigger_resume = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (waitqueue_active(&einfo->tx_blocked_queue)) { /* tx waiting ?*/
|
if (waitqueue_active(&einfo->tx_blocked_queue)) { /* tx waiting ?*/
|
||||||
einfo->tx_blocked_signal_sent = false;
|
|
||||||
trigger_wakeup = true;
|
trigger_wakeup = true;
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&einfo->write_lock, flags);
|
spin_unlock_irqrestore(&einfo->write_lock, flags);
|
||||||
if (trigger_wakeup)
|
if (trigger_wakeup)
|
||||||
wake_up_all(&einfo->tx_blocked_queue);
|
wake_up_all(&einfo->tx_blocked_queue);
|
||||||
|
if (trigger_resume)
|
||||||
|
xprt_if.glink_core_if_ptr->tx_resume(&xprt_if);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Reference in a new issue