]> git.baikalelectronics.ru Git - kernel.git/commit
mwifiex: pcie: implement timeout loop for FW programming doorbell
authorBrian Norris <briannorris@chromium.org>
Wed, 23 Nov 2016 02:39:45 +0000 (18:39 -0800)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 29 Nov 2016 15:28:39 +0000 (17:28 +0200)
commitfd4834542ca9a6eebf93ee58121778d1a1a94346
treece484b32c05b20be966d5135420539e0c6984970
parent3f0b8ab5545f3a92d85fe964adf088f8c0784e66
mwifiex: pcie: implement timeout loop for FW programming doorbell

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: Brian Norris <briannorris@chromium.org>
Acked-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/marvell/mwifiex/pcie.c