• Ido Schimmel's avatar
    mlxsw: pci: Fix possible crash during initialization · 1f64757e
    Ido Schimmel authored
    During initialization the driver issues a reset command via its command
    interface in order to remove previous configuration from the device.
    
    After issuing the reset, the driver waits for 200ms before polling on
    the "system_status" register using memory-mapped IO until the device
    reaches a ready state (0x5E). The wait is necessary because the reset
    command only triggers the reset, but the reset itself happens
    asynchronously. If the driver starts polling too soon, the read of the
    "system_status" register will never return and the system will crash
    [1].
    
    The issue was discovered when the device was flashed with a development
    firmware version where the reset routine took longer to complete. The
    issue was fixed in the firmware, but it exposed the fact that the
    current wait time is borderline.
    
    Fix by increasing the wait time from 200ms to 400ms. With this patch and
    the buggy firmware version, the issue did not reproduce in 10 reboots
    whereas without the patch the issue is reproduced quite consistently.
    
    [1]
    mce: CPUs not responding to MCE broadcast (may include false positives): 0,4
    mce: CPUs not responding to MCE broadcast (may include false positives): 0,4
    Kernel panic - not syncing: Timeout: Not all CPUs entered broadcast exception handler
    Shutting down cpus with NMI
    Kernel Offset: 0x12000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
    
    Fixes: ac004e84 ("mlxsw: pci: Wait longer before accessing the device after reset")
    Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
    Reviewed-by: default avatarPetr Machata <petrm@nvidia.com>
    Signed-off-by: default avatarPetr Machata <petrm@nvidia.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1f64757e
pci_hw.h 12.8 KB