]> git.baikalelectronics.ru Git - kernel.git/commit
net: arc_emac: restart stalled EMAC
authorAlexander Kochetkov <al.kochet@gmail.com>
Tue, 19 Dec 2017 11:03:57 +0000 (14:03 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 19 Dec 2017 18:25:52 +0000 (13:25 -0500)
commit7e458d7d6ef35a7cf5c12cdf6ada5c203ff057f0
tree6f1bdac78231cd93f25e28a23f99d82aef40f4f5
parent33fdfd87f335ae12ccce40937e844464e2c02246
net: arc_emac: restart stalled EMAC

Under certain conditions EMAC stop reception of incoming packets and
continuously increment R_MISS register instead of saving data into
provided buffer. The commit implement workaround for such situation.
Then the stall detected EMAC will be restarted.

On device the stall looks like the device lost it's dynamic IP address.
ifconfig shows that interface error counter rapidly increments.
At the same time on the DHCP server we can see continues DHCP-requests
from device.

In real network stalls happen really rarely. To make them frequent the
broadcast storm[1] should be simulated. For simulation it is necessary
to make following connections:
    1. connect radxarock to 1st port of switch
    2. connect some PC to 2nd port of switch
    3. connect two other free ports together using standard ethernet cable,
       in order to make a switching loop.

After that, is necessary to make a broadcast storm. For example, running on
PC 'ping' to some IP address triggers ARP-request storm. After some
time (~10sec), EMAC on rk3188 will stall.

Observed and tested on rk3188 radxarock.

[1] https://en.wikipedia.org/wiki/Broadcast_radiation

Signed-off-by: Alexander Kochetkov <al.kochet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/arc/emac.h
drivers/net/ethernet/arc/emac_main.c