• david decotigny's avatar
    forcedeth: prevent TX timeouts after reboot · 3f0a1b58
    david decotigny authored
    This complements patch "net-forcedeth: fix TX timeout caused by TX
    pause on down link" which ensures that a lock-up sequence is not sent
    to the NIC. Present patch ensures that if a NIC is already locked-up,
    the driver will recover from it when initializing the device.
    
    It does the equivalent of the following recovery sequence:
     - write NVREG_TX_PAUSEFRAME_ENABLE_V1 to eth1's register
       NvRegTxPauseFrame
     - write NVREG_XMITCTL_START to eth1's register
       NvRegTransmitterControl
     - write 0 to eth1's register NvRegTransmitterControl
    (this is at the heart of the "unbricking" sequence mentioned in patch
     "net-forcedeth: fix TX timeout caused by TX pause on down link")
    
    Tested:
     - hardware is MCP55 device id 10de:0373 (rev a3), dual-port
     - reboot a kernel without any of patches mentioned
     - freeze the NIC (details on description for commit "net-forcedeth:
       fix TX timeout caused by TX pause on down link")
     - wait 5mn until ping hangs & TX timeout in dmesg
     - reboot on kernel with present patch
     - host is immediatly operational, no TX timeout
    Signed-off-by: default avatarDavid Decotigny <decot@googlers.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3f0a1b58
forcedeth.c 188 KB