• Florian Fainelli's avatar
    net: systemport: reset UniMAC coming out of a suspend cycle · 704d33e7
    Florian Fainelli authored
    bcm_sysport_resume() was missing an UniMAC reset which can lead to
    various receive FIFO corruptions coming out of a suspend cycle. If the
    RX FIFO is stuck, it will deliver corrupted/duplicate packets towards
    the host CPU interface.
    
    This could be reproduced on crowded network and when Wake-on-LAN is
    enabled for this particular interface because the switch still forwards
    packets towards the host CPU interface (SYSTEMPORT), and we had to leave
    the UniMAC RX enable bit on to allow matching MagicPackets.
    
    Once we re-enter the resume function, there is a small window during
    which the UniMAC receive is still enabled, and we start queueing
    packets, but the RDMA and RBUF engines are not ready, which leads to
    having packets stuck in the UniMAC RX FIFO, ultimately delivered towards
    the host CPU as corrupted.
    
    Fixes: 40755a0f ("net: systemport: add suspend and resume support")
    Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    704d33e7
bcmsysport.c 50.6 KB