net: macb: restart tx after tx used bit read
authorClaudiu Beznea <claudiu.beznea@microchip.com>
Mon, 17 Dec 2018 10:02:42 +0000 (10:02 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 18 Dec 2018 23:57:07 +0000 (15:57 -0800)
commit4298388574dae6168fa8940b3edc7ba965e8a7ab
tree1d557c28fd891fab01e5a291571e854cc9756f79
parentb26322d2ac6c1c1087af73856531bb836f6963ca
net: macb: restart tx after tx used bit read

On some platforms (currently detected only on SAMA5D4) TX might stuck
even the pachets are still present in DMA memories and TX start was
issued for them. This happens due to race condition between MACB driver
updating next TX buffer descriptor to be used and IP reading the same
descriptor. In such a case, the "TX USED BIT READ" interrupt is asserted.
GEM/MACB user guide specifies that if a "TX USED BIT READ" interrupt
is asserted TX must be restarted. Restart TX if used bit is read and
packets are present in software TX queue. Packets are removed from software
TX queue if TX was successful for them (see macb_tx_interrupt()).

Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/cadence/macb_main.c