1. 20 Jan, 2017 2 commits
    • Brian Norris's avatar
      mwifiex: pcie: don't loop/retry interrupt status checks · 5d5ddb5e
      Brian Norris authored
      The following sequence occurs when using IEEE power-save on 8997:
      (a) driver sees SLEEP event
      (b) driver issues SLEEP CONFIRM
      (c) driver recevies CMD interrupt; within the interrupt processing loop,
          we do (d) and (e):
      (d) wait for FW sleep cookie (and often time out; it takes a while), FW
          is putting card into low power mode
      (e) re-check PCIE_HOST_INT_STATUS register; quit loop with 0 value
      
      But at (e), no one actually signaled an interrupt (i.e., we didn't check
      adapter->int_status). And what's more, because the card is going to
      sleep, this register read appears to take a very long time in some cases
      -- 3 milliseconds in my case!
      
      Now, I propose that (e) is completely unnecessary. If there were any
      additional interrupts signaled after the start of this loop, then the
      interrupt handler would have set adapter->int_status to non-zero and
      queued more work for the main loop -- and we'd catch it on the next
      iteration of the main loop.
      
      So this patch drops all the looping/re-reading of PCIE_HOST_INT_STATUS,
      which avoids the problematic (and slow) register read in step (e).
      
      Incidentally, this is a very similar issue to the one fixed in commit
      ec815dd2 ("mwifiex: prevent register accesses after host is
      sleeping"), except that the register read is just very slow instead of
      fatal in this case.
      
      Tested on 8997 in both MSI and (though not technically supported at the
      moment) MSI-X mode.
      Signed-off-by: default avatarBrian Norris <briannorris@chromium.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      5d5ddb5e
    • Brian Norris's avatar
      mwifiex: pcie: use posted write to wake up firmware · 062e008a
      Brian Norris authored
      Depending on system factors (e.g., the PCIe link PM state), the first
      read to wake up the Wifi firmware can take a long time. There is no
      reason to use a (blocking, non-posted) read at this point, so let's just
      use a write instead. Write vs. read doesn't matter functionality-wise --
      it's just a dummy operation. But let's make sure to re-write with the
      correct "ready" signature, since we check for that in other parts of the
      driver.
      
      This has been shown to decrease the time spent blocking in this function
      on RK3399.
      Signed-off-by: default avatarBrian Norris <briannorris@chromium.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      062e008a
  2. 19 Jan, 2017 7 commits
  3. 17 Jan, 2017 14 commits
  4. 12 Jan, 2017 13 commits
  5. 11 Jan, 2017 4 commits