1. 06 Aug, 2015 1 commit
  2. 30 Jul, 2015 4 commits
    • Peter Oh's avatar
      ath10k: initialize msdu ext. descriptor before use · ae7d3821
      Peter Oh authored
      Initial QCA99X0 support has a known issue with TCP Tx throughput.
      All other path such as UDP Tx/Rx and TCP Rx meet their expectation
      (> 900Mbps), but TCP Tx marked as low as 5Mbps when single pair is
      used on iperf.
      The root cause is turned out because TSO flag is not initialized
      properly so that firmware configures TSO in wrong way.
      TSO flags in msdu extension descriptor is required to be reset
      to indicate firmware there is no TSO is enabled, otherwise it
      could act as TSO is enabled which causes huge throughput drop.
      In fact, it's enough by resetting TSO flags only to prevent the
      unexpected behavior, but initializing whole msdu ext. descriptor
      will help to clear uncertainty of firmware could bring on as it
      constantly updated.
      Signed-off-by: default avatarPeter Oh <poh@qca.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
    • Vasanthakumar Thiagarajan's avatar
      ath10k: add QCA99X0 to supported device list · 8a055a8a
      Vasanthakumar Thiagarajan authored
      Add vendor/device id of QCA99X0 V2.0 to pci id table and
      QCA99X0_HW_2_0_CHIP_ID_REV to ath10k_pci_supp_chips[] for
      QCA99X0 to get detected by the driver.
      kvalo: now QCA99X0 family of chipsets is supported by ath10k.
      Tested client, AP and monitor mode with QCA9990.
      Signed-off-by: default avatarVasanthakumar Thiagarajan <vthiagar@qti.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
    • Raja Mani's avatar
      ath10k: increase max client to 512 in qca99x0 · 1201844e
      Raja Mani authored
      When max client was set to 512 in qca99x0, there was host memory
      alloc failure during wmi service ready event handling. This issue
      got resolved now, increasing max client limit from 256 to 512.
      Signed-off-by: default avatarRaja Mani <rmani@qti.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
    • Raja Mani's avatar
      ath10k: fix memory alloc failure in qca99x0 during wmi svc rdy event · c8ecfc1c
      Raja Mani authored
      Host memory required for firmware is allocated while handling
      wmi service ready event. Right now, wmi service ready is handled
      in tasklet context and it calls dma_alloc_coherent() with atomic
      flag (GFP_ATOMIC) to allocate memory in host needed for firmware.
      The problem is, dma_alloc_coherent() with GFP_ATOMIC fails in
      the platform (at least in AP platform) where it has less atomic
      pool memory (< 2mb). QCA99X0 requires around 2 MB of host memory
      for one card, having additional QCA99X0 card in the same platform
      will require similarly amount of memory. So, it's not guaranteed that
      all the platform will have enough atomic memory pool.
      Fix this issue, by handling wmi service ready event in workqueue
      context and calling dma_alloc_coherent() with GFP_KERNEL. mac80211 work
      queue will not be ready at the time of handling wmi service ready.
      So, it can't be used to handle wmi service ready. Also, register work
      gets scheduled during insmod in existing ath10k_wq and waits for
      wmi service ready to completed. Both workqueue can't be used for
      this purpose. New auxiliary workqueue is added to handle wmi service
      Signed-off-by: default avatarRaja Mani <rmani@qti.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
  3. 29 Jul, 2015 4 commits
    • David Liu's avatar
      ath10k: enable raw encap mode and software crypto engine · ccec9038
      David Liu authored
      This patch enables raw Rx/Tx encap mode to support software based
      crypto engine. This patch introduces a new module param 'cryptmode'.
         0: Use hardware crypto engine globally with native Wi-Fi mode TX/RX
            encapsulation to the firmware. This is the default mode.
         1: Use sofware crypto engine globally with raw mode TX/RX
            encapsulation to the firmware.
      Known limitation:
         A-MSDU must be disabled for RAW Tx encap mode to perform well when
         heavy traffic is applied.
      Testing: (by Michal Kazior <michal.kazior@tieto.com>)
           a) Performance Testing
             ap=qca988x sta=killer1525
              killer1525  ->  qca988x     194.496 mbps [tcp1 ip4]
              killer1525  ->  qca988x     238.309 mbps [tcp5 ip4]
              killer1525  ->  qca988x     266.958 mbps [udp1 ip4]
              killer1525  ->  qca988x     477.468 mbps [udp5 ip4]
              qca988x     ->  killer1525  301.378 mbps [tcp1 ip4]
              qca988x     ->  killer1525  297.949 mbps [tcp5 ip4]
              qca988x     ->  killer1525  331.351 mbps [udp1 ip4]
              qca988x     ->  killer1525  371.528 mbps [udp5 ip4]
             ap=killer1525 sta=qca988x
              qca988x     ->  killer1525  331.447 mbps [tcp1 ip4]
              qca988x     ->  killer1525  328.783 mbps [tcp5 ip4]
              qca988x     ->  killer1525  375.309 mbps [udp1 ip4]
              qca988x     ->  killer1525  403.379 mbps [udp5 ip4]
              killer1525  ->  qca988x     203.689 mbps [tcp1 ip4]
              killer1525  ->  qca988x     222.339 mbps [tcp5 ip4]
              killer1525  ->  qca988x     264.199 mbps [udp1 ip4]
              killer1525  ->  qca988x     479.371 mbps [udp5 ip4]
             - only open network tested for RAW vs nwifi performance comparison
             - killer1525 (qca6174 hw2.2) is 2x2 device (hence max 866mbps)
             - used iperf
             - OTA, devices a few cm apart from each other, no shielding
             - tcpX/udpX, X - means number of threads used
             - relative Tx performance drop is seen but is within reasonable and
               expected threshold (A-MSDU must be disabled with RAW Tx)
           b) Connectivity Testing
             ap=iwl6205 sta1=qca988x crypto=open     topology-1ap1sta          OK
             ap=iwl6205 sta1=qca988x crypto=wep1     topology-1ap1sta          OK
             ap=iwl6205 sta1=qca988x crypto=wpa      topology-1ap1sta          OK
             ap=iwl6205 sta1=qca988x crypto=wpa-ccmp topology-1ap1sta          OK
             ap=qca988x sta1=iwl6205 crypto=open     topology-1ap1sta          OK
             ap=qca988x sta1=iwl6205 crypto=wep1     topology-1ap1sta          OK
             ap=qca988x sta1=iwl6205 crypto=wpa      topology-1ap1sta          OK
             ap=qca988x sta1=iwl6205 crypto=wpa-ccmp topology-1ap1sta          OK
             ap=iwl6205 sta1=qca988x crypto=open     topology-1ap1sta2br       OK
             ap=iwl6205 sta1=qca988x crypto=wep1     topology-1ap1sta2br       OK
             ap=iwl6205 sta1=qca988x crypto=wpa      topology-1ap1sta2br       OK
             ap=iwl6205 sta1=qca988x crypto=wpa-ccmp topology-1ap1sta2br       OK
             ap=qca988x sta1=iwl6205 crypto=open     topology-1ap1sta2br       OK
             ap=qca988x sta1=iwl6205 crypto=wep1     topology-1ap1sta2br       OK
             ap=qca988x sta1=iwl6205 crypto=wpa      topology-1ap1sta2br       OK
             ap=qca988x sta1=iwl6205 crypto=wpa-ccmp topology-1ap1sta2br       OK
             ap=iwl6205 sta1=qca988x crypto=open     topology-1ap1sta2br1vlan  OK
             ap=iwl6205 sta1=qca988x crypto=wep1     topology-1ap1sta2br1vlan  OK
             ap=iwl6205 sta1=qca988x crypto=wpa      topology-1ap1sta2br1vlan  OK
             ap=iwl6205 sta1=qca988x crypto=wpa-ccmp topology-1ap1sta2br1vlan  OK
             ap=qca988x sta1=iwl6205 crypto=open     topology-1ap1sta2br1vlan  OK
             ap=qca988x sta1=iwl6205 crypto=wep1     topology-1ap1sta2br1vlan  OK
             ap=qca988x sta1=iwl6205 crypto=wpa      topology-1ap1sta2br1vlan  OK
             ap=qca988x sta1=iwl6205 crypto=wpa-ccmp topology-1ap1sta2br1vlan  OK
             - each test takes all possible endpoint pairs and pings
             - each pair-ping flushes arp table
             - ip6 is used
           c) Testbed Topology:
              [ap] ---- [sta]
              endpoints: ap, sta
              [veth0] [ap] ---- [sta] [veth2]
                 |     |          |     |
              [veth1]  |          \   [veth3]
                  \   /            \  /
                  [br0]            [br1]
              endpoints: veth0, veth2, br0, br1
              note: STA works in 4addr mode, AP has wds_sta=1
              [veth0] [ap] ---- [sta] [veth2]
                 |     |          |     |
              [veth1]  |          \   [veth3]
                  \   /            \  /
                [br0]              [br1]
                  |                  |
                [vlan0_id2]        [vlan1_id2]
              endpoints: vlan0_id2, vlan1_id2
              note: STA works in 4addr mode, AP has wds_sta=1
          Thanks to Michal Kazior <michal.kazior@tieto.com> who helped find the
          amsdu issue, contributed a workaround (already squashed into this
          patch), and contributed the throughput and connectivity tests results.
      Signed-off-by: default avatarDavid Liu <cfliu.tw@gmail.com>
      Signed-off-by: default avatarMichal Kazior <michal.kazior@tieto.com>
      Tested-by: default avatarMichal Kazior <michal.kazior@tieto.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
    • Qi Zhou's avatar
      ath10k: Improve performance by reducing tx_lock contention · 005fb161
      Qi Zhou authored
      During tx completion, tx_lock is held for longer than required, preventing
      efficient refill of htt->pending_tx. Refactor the code so that only MSDU
      related operations are protected by the lock.
      Improves downstream performance on a dual-core ARM Freescale LS1024A
      (f.k.a. Mindspeed Comcerto 2000) AP with a 3x3 client from 495 to 580 Mbps.
      Other CPU bound multicore systems may also benefit.
      Signed-off-by: default avatarDenton Gentry <dgentry@google.com>
      Signed-off-by: default avatarAvery Pennarun <apenwarr@google.com>
      [mfaltesek@google.com: removed conflicting code for tracking msdu_ids.]
      Signed-off-by: default avatarMarty Faltesek <mfaltesek@google.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
    • Kevin Darbyshire-Bryant's avatar
      ath10k: suppress 'failed to process fft' warning messages · 3413e97d
      Kevin Darbyshire-Bryant authored
      When using DFS channels on Ath10k, kernel log has repeated warning message
      'failed to process fft: -22' typically under medium/heavy traffic.
      This patch switches the warnings to driver debug (WMI events) mode only
      thus reducing log file noise.
      DFS and spectral scan share underlying HW mechanisms and enabling one
      (DFS) enables the other (spectral scan) as far as event reporting from
      firmware to driver is concerned. Spectral scan events take no part in
      processing of DFS radar pulses which are delivered as distinct events,
      so the fft (spectral event) warning is harmless and DFS interference
      detection/protection still occurs.
      Symptoms seen & fix tested in both debug & non-debug modes on TP-Link
      Archer C7 v2 platform.
      Signed-off-by: default avatarKevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
    • Nik Nyby's avatar
      ath6kl: spell "distribution" correctly in a comment. · a0d61f5f
      Nik Nyby authored
      This fixes two misspellings of "distribution" in a comment.
      Signed-off-by: default avatarNik Nyby <nikolas@gnu.org>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
  4. 24 Jul, 2015 7 commits
  5. 21 Jul, 2015 1 commit
    • Kalle Valo's avatar
      Merge ath-next from ath.git. · c538bb3b
      Kalle Valo authored
      Major changes in ath10k:
      * enable VHT for IBSS
      * initial work to support qca99x0 and the corresponding 10.4 firmware branch
  6. 11 Jul, 2015 23 commits