[LEDE-DEV] Transmit timeouts with mtk_eth_soc and MT7621

Kristian Evensen kristian.evensen at gmail.com
Mon Aug 28 04:16:29 PDT 2017


Hello again,

On Sat, Aug 26, 2017 at 4:57 PM, Kristian Evensen
<kristian.evensen at gmail.com> wrote:
> I did not have to wait very long before anything. Unfortunately, my
> router crashed right after I sent the previous email. So I guess that
> means back to the drawing board.

I have kept working on this issue throughout the weekend and have
noticed something strange. I don't know if this observation is
relevant or not, and I still haven't found out why the queue times out
(why the queue is stopped), but perhaps the observation can help point
us in the right direction.

I noticed that TX_WB_DDONE is set, so I decided to dump the state of
each txd when the timeout occurs. When I do this (and the timeout has
been triggered), I see that dtx always point to txds with DDONE set,
while ctx points to txds where DDONE is not set. To me, this seems to
be the inverse of how it should be. I.e., dtx should point to a txd
where DDONE is not set, while ctx to should point to a txd with DDONE
set. Could it be that these counters/indexes for some reason goes out
of sync and that this triggers the timeout? There is data to be sent,
but it is not seen.

To give a more complete example, say we have the following error:
[ 1816.133130] mtk_soc_eth 1e100000.ethernet eth0: transmit timed out
[ 1816.139304] mtk_soc_eth 1e100000.ethernet eth0: dma_cfg:80000067
[ 1816.145288] mtk_soc_eth 1e100000.ethernet eth0: tx_ring=0,
base=0ee44000, max=512, ctx=302, dtx=202, fdx=202, next=302
[ 1816.155968] mtk_soc_eth 1e100000.ethernet eth0: rx_ring=0,
base=0ec0e000, max=512, calc=486, drx=484

Here, txd[202-301] have DDONE set, while DDONE is not set for txd[302-201].

Thanks in advance for all the help so far,
Kristian



More information about the Lede-dev mailing list