Commit 12a303e3 authored by Grygorii Strashko's avatar Grygorii Strashko Committed by David S. Miller

net: ethernet: ti: cpdma: fix desc re-queuing

The currently processing cpdma descriptor with EOQ flag set may
contain two values in Next Descriptor Pointer field:
- valid pointer: means CPDMA missed addition of new desc in queue;
- null: no more descriptors in queue.
In the later case, it's not required to write to HDP register, but now
CPDMA does it.

Hence, add additional check for Next Descriptor Pointer != null in
cpdma_chan_process() function before writing in HDP register.
Signed-off-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a6c83ccf
...@@ -1159,7 +1159,7 @@ static int __cpdma_chan_process(struct cpdma_chan *chan) ...@@ -1159,7 +1159,7 @@ static int __cpdma_chan_process(struct cpdma_chan *chan)
chan->count--; chan->count--;
chan->stats.good_dequeue++; chan->stats.good_dequeue++;
if (status & CPDMA_DESC_EOQ) { if ((status & CPDMA_DESC_EOQ) && chan->head) {
chan->stats.requeue++; chan->stats.requeue++;
chan_write(chan, hdp, desc_phys(pool, chan->head)); chan_write(chan, hdp, desc_phys(pool, chan->head));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment