diff options
author | Grygorii Strashko <grygorii.strashko@ti.com> | 2017-01-06 21:07:30 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-01-08 02:48:14 +0100 |
commit | 12a303e3b8136a89f0864a577a69f6a40b65fbe5 (patch) | |
tree | 3bf2e81fb6cf00a263baee2dbbc007e6c841e57f | |
parent | net: ethernet: ti: cpdma: am437x: allow descs to be plased in ddr (diff) | |
download | linux-12a303e3b8136a89f0864a577a69f6a40b65fbe5.tar.xz linux-12a303e3b8136a89f0864a577a69f6a40b65fbe5.zip |
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: Grygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/ti/davinci_cpdma.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/ethernet/ti/davinci_cpdma.c b/drivers/net/ethernet/ti/davinci_cpdma.c index d6f0ded7dafc..a53b38455a2f 100644 --- a/drivers/net/ethernet/ti/davinci_cpdma.c +++ b/drivers/net/ethernet/ti/davinci_cpdma.c @@ -1159,7 +1159,7 @@ static int __cpdma_chan_process(struct cpdma_chan *chan) chan->count--; chan->stats.good_dequeue++; - if (status & CPDMA_DESC_EOQ) { + if ((status & CPDMA_DESC_EOQ) && chan->head) { chan->stats.requeue++; chan_write(chan, hdp, desc_phys(pool, chan->head)); } |