• Brian Norris's avatar
    mwifiex: pcie: implement timeout loop for FW programming doorbell · 22dde1ed
    Brian Norris authored
    Marvell Wifi PCIe modules don't always behave nicely for PCIe power
    management when their firmware hasn't been loaded, particularly after
    suspending the PCIe link one or more times. When this happens, we might
    end up spinning forever in this status-polling tight loop. Let's make
    this less tight by adding a timeout and by sleeping a bit in between
    reads, as we do with the other similar loops.
    
    This prevents us from hogging a CPU even in such pathological cases, and
    allows the FW initialization to just fail gracefully instead.
    
    I chose the same polling parameters as the earlier loop in this
    function, and empirically, I found that this loop never makes it more
    than about 12 cycles in a sane FW init sequence. I had no official
    information on the actual intended latency for this portion of the
    download.
    Signed-off-by: default avatarBrian Norris <briannorris@chromium.org>
    Acked-by: default avatarAmitkumar Karwar <akarwar@marvell.com>
    Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
    22dde1ed
pcie.c 84.6 KB