1. 12 3月, 2020 7 次提交
    • Y
      ath10k: allow qca988x family to support ack rssi of tx data packets. · 5637c4ca
      Yibo Zhao 提交于
      Hardwares tested : QCA9887
      Firmwares tested : 10.4-3.9.0.1-00036
      Signed-off-by: NYibo Zhao <yiboz@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      5637c4ca
    • Y
      ath10k: fix not registering airtime of 11a station with WMM disable · f9680c75
      Yibo Zhao 提交于
      The tid of 11a station with WMM disable reported by FW is 0x10 in
      tx completion. The tid 16 is mapped to a NULL txq since buffer
      MMPDU capbility is not supported. Then 11a station's airtime will
      not be registered due to NULL txq check. As a results, airtime of
      11a station keeps unchanged in debugfs system.
      
      Mask the tid along with IEEE80211_QOS_CTL_TID_MASK to make it in
      the valid range.
      
      Hardwares tested : QCA9984
      Firmwares tested : 10.4-3.10-00047
      Signed-off-by: NYibo Zhao <yiboz@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      f9680c75
    • Y
      ath10k: fix unsupported chip reset debugs file write · bbdc8c5a
      Yingying Tang 提交于
      Before this change, after writing "warm_hw_reset" debugfs file, host
      will send chip reset command to FW even though FW do not support this
      service getting a warning print.
      
      Though there is no FW impact before this change, this patch restricts
      chip reset command sent to FW only if FW advertises the support via WMI
      service bit.
      
      Removed the redundant check and ath10k_warn() print as well.
      
      New version FW will report chip reset service bit to host. Host allow user
      to trigger WLAN chip reset only when fw report this service bit.
      
      For older NON-TLV FW, since it do not report chip reset service bit, host
      will not send chip reset command. For older TLV FW, since it report chip
      reset service bit, host will send chip reset command.
      
      Tested HW:  QCA9984, WCN3990
      
      QCA9984 FW version: WLAN.BL.3.9.0.2-00042-S-1
      Signed-off-by: NYingying Tang <yintang@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      bbdc8c5a
    • W
      ath10k: use kzalloc to read for ath10k_sdio_hif_diag_read · 402f2992
      Wen Gong 提交于
      When use command to read values, it crashed.
      
      command:
      dd if=/sys/kernel/debug/ieee80211/phy0/ath10k/mem_value count=1 bs=4 skip=$((0x100233))
      
      It will call to ath10k_sdio_hif_diag_read with address = 0x4008cc and buf_len = 4.
      
      Then system crash:
      [ 1786.013258] Unable to handle kernel paging request at virtual address ffffffc00bd45000
      [ 1786.013273] Mem abort info:
      [ 1786.013281]   ESR = 0x96000045
      [ 1786.013291]   Exception class = DABT (current EL), IL = 32 bits
      [ 1786.013299]   SET = 0, FnV = 0
      [ 1786.013307]   EA = 0, S1PTW = 0
      [ 1786.013314] Data abort info:
      [ 1786.013322]   ISV = 0, ISS = 0x00000045
      [ 1786.013330]   CM = 0, WnR = 1
      [ 1786.013342] swapper pgtable: 4k pages, 39-bit VAs, pgdp = 000000008542a60e
      [ 1786.013350] [ffffffc00bd45000] pgd=0000000000000000, pud=0000000000000000
      [ 1786.013368] Internal error: Oops: 96000045 [#1] PREEMPT SMP
      [ 1786.013609] Process swapper/0 (pid: 0, stack limit = 0x0000000084b153c6)
      [ 1786.013623] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.19.86 #137
      [ 1786.013631] Hardware name: MediaTek krane sku176 board (DT)
      [ 1786.013643] pstate: 80000085 (Nzcv daIf -PAN -UAO)
      [ 1786.013662] pc : __memcpy+0x94/0x180
      [ 1786.013678] lr : swiotlb_tbl_unmap_single+0x84/0x150
      [ 1786.013686] sp : ffffff8008003c60
      [ 1786.013694] x29: ffffff8008003c90 x28: ffffffae96411f80
      [ 1786.013708] x27: ffffffae960d2018 x26: ffffff8019a4b9a8
      [ 1786.013721] x25: 0000000000000000 x24: 0000000000000001
      [ 1786.013734] x23: ffffffae96567000 x22: 00000000000051d4
      [ 1786.013747] x21: 0000000000000000 x20: 00000000fe6e9000
      [ 1786.013760] x19: 0000000000000004 x18: 0000000000000020
      [ 1786.013773] x17: 0000000000000001 x16: 0000000000000000
      [ 1786.013787] x15: 00000000ffffffff x14: 00000000000044c0
      [ 1786.013800] x13: 0000000000365ba4 x12: 0000000000000000
      [ 1786.013813] x11: 0000000000000001 x10: 00000037be6e9000
      [ 1786.013826] x9 : ffffffc940000000 x8 : 000000000bd45000
      [ 1786.013839] x7 : 0000000000000000 x6 : ffffffc00bd45000
      [ 1786.013852] x5 : 0000000000000000 x4 : 0000000000000000
      [ 1786.013865] x3 : 0000000000000c00 x2 : 0000000000000004
      [ 1786.013878] x1 : fffffff7be6e9004 x0 : ffffffc00bd45000
      [ 1786.013891] Call trace:
      [ 1786.013903]  __memcpy+0x94/0x180
      [ 1786.013914]  unmap_single+0x6c/0x84
      [ 1786.013925]  swiotlb_unmap_sg_attrs+0x54/0x80
      [ 1786.013938]  __swiotlb_unmap_sg_attrs+0x8c/0xa4
      [ 1786.013952]  msdc_unprepare_data+0x6c/0x84
      [ 1786.013963]  msdc_request_done+0x58/0x84
      [ 1786.013974]  msdc_data_xfer_done+0x1a0/0x1c8
      [ 1786.013985]  msdc_irq+0x12c/0x17c
      [ 1786.013996]  __handle_irq_event_percpu+0xe4/0x250
      [ 1786.014006]  handle_irq_event_percpu+0x28/0x68
      [ 1786.014015]  handle_irq_event+0x48/0x78
      [ 1786.014026]  handle_fasteoi_irq+0xd0/0x1a0
      [ 1786.014039]  __handle_domain_irq+0x84/0xc4
      [ 1786.014050]  gic_handle_irq+0x124/0x1a4
      [ 1786.014059]  el1_irq+0xb0/0x128
      [ 1786.014072]  cpuidle_enter_state+0x298/0x328
      [ 1786.014082]  cpuidle_enter+0x30/0x40
      [ 1786.014094]  do_idle+0x190/0x268
      [ 1786.014104]  cpu_startup_entry+0x24/0x28
      [ 1786.014116]  rest_init+0xd4/0xe0
      [ 1786.014126]  start_kernel+0x30c/0x38c
      [ 1786.014139] Code: f8408423 f80084c3 36100062 b8404423 (b80044c3)
      [ 1786.014150] ---[ end trace 3b02ddb698ea69ee ]---
      [ 1786.015415] Kernel panic - not syncing: Fatal exception in interrupt
      [ 1786.015433] SMP: stopping secondary CPUs
      [ 1786.015447] Kernel Offset: 0x2e8d200000 from 0xffffff8008000000
      [ 1786.015458] CPU features: 0x0,2188200c
      [ 1786.015466] Memory Limit: none
      
      For sdio chip, it need the memory which is kmalloc, if it is
      vmalloc from ath10k_mem_value_read, then it have a memory error.
      kzalloc of ath10k_sdio_hif_diag_read32 is the correct type, so
      add kzalloc in ath10k_sdio_hif_diag_read to replace the buffer
      which is vmalloc from ath10k_mem_value_read.
      
      This patch only effect sdio chip.
      
      Tested with QCA6174 SDIO with firmware WLAN.RMH.4.4.1-00029.
      Signed-off-by: NWen Gong <wgong@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      402f2992
    • W
      ath10k: start recovery process when read int status fail for sdio · 37b7ecb7
      Wen Gong 提交于
      When running simulate crash stress test, it happened
      "failed to read from address 0x800: -110".
      
      Test steps:
      1. Run command continuous
      echo soft > /sys/kernel/debug/ieee80211/phy0/ath10k/simulate_fw_crash
      
      2. error happened and it did not begin recovery for long time.
      [74377.334846] ath10k_sdio mmc1:0001:1: simulating soft firmware crash
      [74378.378217] ath10k_sdio mmc1:0001:1: failed to read from address 0x800: -110
      [74378.378371] ath10k_sdio mmc1:0001:1: failed to process pending SDIO interrupts: -110
      
      It has sdio errors since it can not read MBOX_HOST_INT_STATUS_ADDRESS,
      then it has to do recovery process to recovery ath10k.
      
      Tested with QCA6174 SDIO with firmware WLAN.RMH.4.4.1-00042.
      Signed-off-by: NWen Gong <wgong@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      37b7ecb7
    • E
      ath10k: add QCA9377 sdio hw_param item · 6e51b0e4
      Erik Stromdahl 提交于
      Add hardware parameters for QCA9377 sdio devices, it's now properly supported.
      Signed-off-by: NErik Stromdahl <erik.stromdahl@gmail.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      6e51b0e4
    • V
      ath10k: avoid consecutive OTP download to reduce boot time · a4b9f641
      Vikas Patel 提交于
      Currently, OTP is downloaded twice in case of "pre-cal-dt"
      and "pre-cal-file" to fetch the board ID and takes around
      ~2 sec more boot uptime.
      
      First OTP download happens in "ath10k_core_probe_fw" and
      second in ath10k_core_start. First boot does not need OTP
      download in core start when valid board id acquired.
      
      The second OTP download is required upon core stop/start.
      
      This patch skips the OTP download when first OTP download
      has acquired a valid board id. This patch also marks board
      id invalid in "ath10k_core_stop", which will force the OTP
      download in ath10k_core_start and fetches valid board id.
      
      Tested HW: QCA9984
      Tested FW: 10.4-3.6-00104
      Signed-off-by: NVikas Patel <vikpatel@codeaurora.org>
      Signed-off-by: NMaharaja Kennadyrajan <mkenna@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      a4b9f641
  2. 14 2月, 2020 1 次提交
    • B
      mac80211: Fix setting txpower to zero · db6d9e9e
      Ben Greear 提交于
      With multiple VIFS ath10k, and probably others, tries to find the
      minimum txpower for all vifs and uses that when setting txpower in
      the firmware.
      
      If a second vif is added and starts to scan, it's txpower is not
      initialized yet and it set to zero.
      
      ath10k had a patch to ignore zero values, but then it is impossible
      to actually set txpower to zero.
      
      So, instead initialize the txpower to INT_MIN in mac80211, and let
      drivers know that means the power has not been set and so should
      be ignored.
      
      This should fix regression in:
      
      commit 88407beb
      Author: Ryan Hsu <ryanhsu@qca.qualcomm.com>
      Date:   Tue Dec 13 14:55:19 2016 -0800
      
          ath10k: fix incorrect txpower set by P2P_DEVICE interface
      
      Tested on ath10k 9984 with ath10k-ct firmware.
      Signed-off-by: NBen Greear <greearb@candelatech.com>
      Link: https://lore.kernel.org/r/20191217183057.24586-1-greearb@candelatech.comSigned-off-by: NJohannes Berg <johannes.berg@intel.com>
      db6d9e9e
  3. 11 2月, 2020 2 次提交
    • T
      ath10k: Add support to read btcoex related data from DT · 9f83993e
      Tamizh Chelvam 提交于
      BTCOEX feature is not supported by all QCA4019 chipsets.
      Since btcoex enabled by default in firmware, host needs to
      enable COEX support depends on the hardware. Enabling it
      by default in unsupported hardware will cause some
      feature disabled in hardware.
      This patch will read btcoex_support flag and
      wlan priority gpio pin number from DT. Depends on the
      btcoex_support flag value host will expose BTCOEX support
      and wlan priority gpio pin number to target.
      
      Testing:
      	* Tested HW : QCA4019
      	* Tested FW : 10.4-3.2.1.1-00017
      Signed-off-by: NTamizh Chelvam <tamizhr@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      9f83993e
    • K
      ath10k: fix few checkpatch warnings · 9a5fccc1
      Kalle Valo 提交于
      Fix warnings which were recently introduced:
      
      drivers/net/wireless/ath/ath10k/ahb.c:462: Alignment should match open parenthesis
      drivers/net/wireless/ath/ath10k/ahb.c:470: Alignment should match open parenthesis
      drivers/net/wireless/ath/ath10k/sdio.c:697: space prohibited before that close parenthesis ')'
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      9a5fccc1
  4. 26 1月, 2020 10 次提交
    • S
      ath10k: Use device_get_match_data() to simplify code · fa43e99d
      Stephen Boyd 提交于
      Use device_get_match_data() here to simplify the code a bit.
      Signed-off-by: NStephen Boyd <swboyd@chromium.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      fa43e99d
    • S
      ath10k: Add newlines to printk messages · 79a4b788
      Stephen Boyd 提交于
      Some printks in here don't have newlines at the end, meaning the log
      will be sort of hard to read. Add newlines.
      Signed-off-by: NStephen Boyd <swboyd@chromium.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      79a4b788
    • R
      ath10k: Correct the DMA direction for management tx buffers · 6ba8b3b6
      Rakesh Pillai 提交于
      The management packets, send to firmware via WMI, are
      mapped using the direction DMA_TO_DEVICE. Currently in
      case of wmi cleanup, these buffers are being unmapped
      using an incorrect DMA direction. This can cause unwanted
      behavior when the host driver is handling a restart
      of the wlan firmware.
      
      We might see a trace like below
      
      [<ffffff8008098b18>] __dma_inv_area+0x28/0x58
      [<ffffff8001176734>] ath10k_wmi_mgmt_tx_clean_up_pending+0x60/0xb0 [ath10k_core]
      [<ffffff80088c7c50>] idr_for_each+0x78/0xe4
      [<ffffff80011766a4>] ath10k_wmi_detach+0x4c/0x7c [ath10k_core]
      [<ffffff8001163d7c>] ath10k_core_stop+0x58/0x68 [ath10k_core]
      [<ffffff800114fb74>] ath10k_halt+0xec/0x13c [ath10k_core]
      [<ffffff8001165110>] ath10k_core_restart+0x11c/0x1a8 [ath10k_core]
      [<ffffff80080c36bc>] process_one_work+0x16c/0x31c
      
      Fix the incorrect DMA direction during the wmi
      management tx buffer cleanup.
      
      Tested HW: WCN3990
      Tested FW: WLAN.HL.3.1-00784-QCAHLSWMTPLZ-1
      
      Fixes: dc405152 ("ath10k: handle mgmt tx completion event")
      Signed-off-by: NRakesh Pillai <pillair@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      6ba8b3b6
    • G
      ath10k: Don't call SCM interface for statically mapped msa region · ab000ea6
      Govind Singh 提交于
      For some targets ex: QCS404, SCM permissions for MSA region is
      statically configured in TrustZone fw. Add SCM call disable option
      for such targets to avoid duplicate permissions.
      
      Testing: Tested on WCN3990 HW
      Tested FW: WLAN.HL.3.1-01040-QCAHLSWMTPLZ-1
      Signed-off-by: NGovind Singh <govinds@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      ab000ea6
    • Z
      Revert "ath10k: fix DMA related firmware crashes on multiple devices" · a1769bb6
      Zhi Chen 提交于
      This reverts commit 76d164f5.
      PCIe hung issue was observed on multiple platforms. The issue was reproduced
      when DUT was configured as AP and associated with 50+ STAs.
      
      For QCA9984/QCA9888, the DMA_BURST_SIZE register controls the AXI burst size
      of the RD/WR access to the HOST MEM.
      0 - No split , RAW read/write transfer size from MAC is put out on bus
          as burst length
      1 - Split at 256 byte boundary
      2,3 - Reserved
      
      With PCIe protocol analyzer, we can see DMA Read crossing 4KB boundary when
      issue happened. It broke PCIe spec and caused PCIe stuck. So revert
      the default value from 0 to 1.
      
      Tested:  IPQ8064 + QCA9984 with firmware 10.4-3.10-00047
               QCS404 + QCA9984 with firmware 10.4-3.9.0.2--00044
               Synaptics AS370 + QCA9888  with firmware 10.4-3.9.0.2--00040
      Signed-off-by: NZhi Chen <zhichen@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      a1769bb6
    • W
      ath10k: drop RX skb with invalid length for sdio · 218f646d
      Wen Gong 提交于
      When simulate random transfer fail for sdio write and read, it crash
      sometimes.
      
      Test steps:
      1. Add config and update kernel:
      CONFIG_FAIL_MMC_REQUEST=y
      CONFIG_FAULT_INJECTION=y
      CONFIG_FAULT_INJECTION_DEBUG_FS=y
      
      2. run simulate fail:
      cd /sys/kernel/debug/mmc1/fail_mmc_request
      echo 10 > probability
      echo 10 > times # repeat until hitting issues
      
      3. it crash, the act len of ath10k_htc_hdr is higher than allocate len, it cause panic:
      [   99.723482] skbuff: skb_over_panic: text:00000000caa0f780 len:57013 put:57013 head:000000004116f24a data:0000000019ecb4dc tail:0xdef5 end:0x640 dev:<NULL>
      [   99.737697] ------------[ cut here ]------------
      [   99.742327] kernel BUG at /mnt/host/source/src/third_party/kernel/v4.19/net/core/skbuff.c:104!
      [   99.750937] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
      [   99.831154] Process kworker/0:2 (pid: 151, stack limit = 0x00000000728010bf)
      [   99.838200] CPU: 0 PID: 151 Comm: kworker/0:2 Tainted: G W 4.19.85 #48
      [   99.846022] Hardware name: MediaTek krane sku0 board (DT)
      [   99.851429] Workqueue: events sdio_irq_work
      [   99.855614] pstate: 60000005 (nZCv daif -PAN -UAO)
      [   99.860402] pc : skb_panic+0x64/0x68
      [   99.863974] lr : skb_panic+0x64/0x68
      [   99.867542] sp : ffffff8008833a90
      [   99.870850] x29: ffffff8008833ac0 x28: ffffffe52e337370
      [   99.876159] x27: ffffffe52e328a90 x26: 000000000000e0d0
      [   99.881469] x25: ffffffe52e336b60 x24: 000000000000deb5
      [   99.886779] x23: ffffffe52e340680 x22: ffffffe4efd47e00
      [   99.892088] x21: 000000000000deb5 x20: ffffffa516d85b4c
      [   99.897397] x19: ffffffa526928037 x18: 0000000000000000
      [   99.902706] x17: 000000000000003c x16: ffffffa5265b6c80
      [   99.908015] x15: 0000000000000006 x14: 3a76656420303436
      [   99.913325] x13: 0000000000029bf0 x12: 0000000000000000
      [   99.918634] x11: 0000000000000000 x10: 0000000000000000
      [   99.923943] x9 : a3b907e4b2783000 x8 : a3b907e4b2783000
      [   99.929253] x7 : 0000000000000000 x6 : ffffffa526f66d76
      [   99.934563] x5 : 0000000000000000 x4 : 0000000000000000
      [   99.939872] x3 : 000000000002a5ab x2 : ffffffe53feed918
      [   99.945182] x1 : ffffffe53fee4a08 x0 : 000000000000008e
      [   99.950491] Call trace:
      [   99.952937]  skb_panic+0x64/0x68
      [   99.956165]  skb_put+0x7c/0x84
      [   99.959224]  ath10k_sdio_irq_handler+0x740/0xbb8 [ath10k_sdio]
      [   99.965055]  process_sdio_pending_irqs+0x58/0x1a4
      [   99.969758]  sdio_run_irqs+0x34/0x60
      [   99.973329]  sdio_irq_work+0x1c/0x28
      [   99.974930] cros-ec-spi spi2.0: SPI transfer timed out
      [   99.976904]  process_one_work+0x210/0x410
      [   99.976911]  worker_thread+0x234/0x3dc
      [   99.976923]  kthread+0x120/0x130
      [   99.982090] cros-ec-spi spi2.0: spi transfer failed: -110
      [   99.986054]  ret_from_fork+0x10/0x18
      [   99.986063] Code: aa1403e2 2a1503e4 a90023e9 97e37d1a (d4210000)
      [   99.986068] ---[ end trace cb6d948c5a0fd6c7 ]---
      [  100.017250] Kernel panic - not syncing: Fatal exception
      [  100.018879] cros-ec-spi spi2.0: Command xfer error (err:-110)
      [  100.023659] SMP: stopping secondary CPUs
      [  100.023703] Kernel Offset: 0x251dc00000 from 0xffffff8008000000
      [  100.023707] CPU features: 0x0,2188200c
      [  100.023709] Memory Limit: none
      
      The simulate fail of sdio is not a real sdio transter fail, it only
      set an error status in mmc_should_fail_request after the transfer end,
      actually the transfer is success, then sdio_io_rw_ext_helper will
      return error status and stop transfer the left data. For example,
      the really RX len is 286 bytes, then it will split to 2 blocks in
      sdio_io_rw_ext_helper, one is 256 bytes, left is 30 bytes, if the
      first 256 bytes get an error status by mmc_should_fail_request,then
      the left 30 bytes will not read in this RX operation. Then when the
      next RX arrive, the left 30 bytes will be considered as the header
      of the read, the top 8 bytes will be considered as ath10k_htc_hdr,
      but actually the 8 bytes is not the ath10k_htc_hdr, so the act_len
      from this ath10k_htc_hdr is not correct, if it is a big value, such
      as 57013, it will trigger skb_panic.
      
      Drop the skb with invalid length will be reasonable.
      
      This patch only effect sdio chips.
      
      Tested with QCA6174 SDIO with firmware WLAN.RMH.4.4.1-00029.
      Signed-off-by: NWen Gong <wgong@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      218f646d
    • Z
      ath10k: use true,false for bool variable · 0f7ab288
      zhengbin 提交于
      Fixes coccicheck warning:
      
      drivers/net/wireless/ath/ath10k/htt_rx.c:2143:2-31: WARNING: Assignment of 0/1 to bool variable
      Reported-by: NHulk Robot <hulkci@huawei.com>
      Signed-off-by: Nzhengbin <zhengbin13@huawei.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      0f7ab288
    • B
      ath10k: Add optional qdss clk · 57a3b60d
      Bjorn Andersson 提交于
      The WiFi firmware found on sm8150 requires that the QDSS clock is
      ticking in order to operate, so add an optional clock to the binding to
      allow this to be specified in the sm8150 dts and add the clock to the
      list of clocks in the driver.
      Signed-off-by: NBjorn Andersson <bjorn.andersson@linaro.org>
      Acked-by: NRob Herring <robh@kernel.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      57a3b60d
    • B
      ath10k: pci: Fix comment on ath10k_pci_dump_memory_sram · 63ec5cbc
      Bryan O'Donoghue 提交于
      The description of ath10k_pci_dump_memory_sram() is inaccurate, an error
      can never be returned, it is always the length. Update the comment to
      reflect.
      
      Fixes: 219cc084 ("ath10k: add memory dump support QCA9984")
      Signed-off-by: NBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      63ec5cbc
    • B
      ath10k: pci: Only dump ATH10K_MEM_REGION_TYPE_IOREG when safe · d2393801
      Bryan O'Donoghue 提交于
      ath10k_pci_dump_memory_reg() will try to access memory of type
      ATH10K_MEM_REGION_TYPE_IOREG however, if a hardware restart is in progress
      this can crash a system.
      
      Individual ioread32() time has been observed to jump from 15-20 ticks to >
      80k ticks followed by a secure-watchdog bite and a system reset.
      
      Work around this corner case by only issuing the read transaction when the
      driver state is ATH10K_STATE_ON.
      
      Tested-on: QCA9988 PCI 10.4-3.9.0.2-00044
      
      Fixes: 219cc084 ("ath10k: add memory dump support QCA9984")
      Signed-off-by: NBryan O'Donoghue <bryan.odonoghue@linaro.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      d2393801
  5. 06 1月, 2020 1 次提交
  6. 17 12月, 2019 1 次提交
  7. 13 12月, 2019 1 次提交
    • T
      mac80211: Turn AQL into an NL80211_EXT_FEATURE · 911bde0f
      Toke Høiland-Jørgensen 提交于
      Instead of just having an airtime flag in debugfs, turn AQL into a proper
      NL80211_EXT_FEATURE, so drivers can turn it on when they are ready, and so
      we also expose the presence of the feature to userspace.
      
      This also has the effect of flipping the default, so drivers have to opt in
      to using AQL instead of getting it by default with TXQs. To keep
      functionality the same as pre-patch, we set this feature for ath10k (which
      is where it is needed the most).
      
      While we're at it, split out the debugfs interface so AQL gets its own
      per-station debugfs file instead of using the 'airtime' file.
      
      [Johannes:]
      This effectively disables AQL for iwlwifi, where it fixes a number of
      issues:
       * TSO in iwlwifi is causing underflows and associated warnings in AQL
       * HE (802.11ax) rates aren't reported properly so at HE rates, AQL could
         never have a valid estimate (it'd use 6 Mbps instead of up to 2400!)
      Signed-off-by: NToke Høiland-Jørgensen <toke@redhat.com>
      Link: https://lore.kernel.org/r/20191212111437.224294-1-toke@redhat.com
      Fixes: 3ace10f5 ("mac80211: Implement Airtime-based Queue Limit (AQL)")
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      911bde0f
  8. 02 12月, 2019 2 次提交
    • W
      ath10k: change bundle count for max rx bundle for sdio · 4a991245
      Wen Gong 提交于
      For max bundle size 32, the bundle mask is not same with 8/16.
      Change it to match the max bundle size of htc. Otherwise it
      will not match with firmware, for example, when bundle count
      is 17, then flags of ath10k_htc_hdr is 0x4, if without this
      patch, it will be considered as non-bundled packet because it
      does not have mask 0xF0, then trigger error message later:
      payload length 56747 exceeds max htc length: 4088.
      
      htc->max_msgs_per_htc_bundle is the min value of
      HTC_HOST_MAX_MSG_PER_RX_BUNDLE and
      msg->ready_ext.max_msgs_per_htc_bundle of ath10k_htc_wait_target,
      it will be sent to firmware later in ath10k_htc_start, then
      firmware will use it as the final max rx bundle count, in
      WLAN.RMH.4.4.1-00029, msg->ready_ext.max_msgs_per_htc_bundle
      is 32, it is same with HTC_HOST_MAX_MSG_PER_RX_BUNDLE, so the
      final max rx bundle count will be set to 32 in firmware.
      
      This patch only effect sdio chips.
      
      Tested with QCA6174 SDIO with firmware WLAN.RMH.4.4.1-00029.
      Signed-off-by: NWen Gong <wgong@codeaurora.org>
      Fixes: 22477652 ("ath10k: change max RX bundle size from 8 to 32 for sdio")
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      4a991245
    • W
      ath10k: enable napi on RX path for sdio · cfee8793
      Wen Gong 提交于
      For tcp RX, the quantity of tcp acks to remote is 1/2 of the quantity
      of tcp data from remote, then it will have many small length packets
      on TX path of sdio bus, then it reduce the RX packets's bandwidth of
      tcp.
      
      This patch enable napi on RX path, then the RX packet of tcp will not
      feed to tcp stack immeditely from mac80211 since GRO is enabled by
      default, it will feed to tcp stack after napi complete, if rx bundle
      is enabled, then it will feed to tcp stack one time for each bundle
      of RX. For example, RX bundle size is 32, then tcp stack will receive
      one large length packet, its length is neary 1500*32, then tcp stack
      will send a tcp ack for this large packet, this will reduce the tcp
      acks ratio from 1/2 to 1/32. This results in significant performance
      improvement for tcp RX.
      
      Tcp rx throughout is 240Mbps without this patch, and it arrive 390Mbps
      with this patch. The cpu usage has no obvious difference with and
      without NAPI.
      
      call stack for each RX packet on GRO path:
      (skb length is about 1500 bytes)
        skb_gro_receive ([kernel.kallsyms])
        tcp4_gro_receive ([kernel.kallsyms])
        inet_gro_receive ([kernel.kallsyms])
        dev_gro_receive ([kernel.kallsyms])
        napi_gro_receive ([kernel.kallsyms])
        ieee80211_deliver_skb ([mac80211])
        ieee80211_rx_handlers ([mac80211])
        ieee80211_prepare_and_rx_handle ([mac80211])
        ieee80211_rx_napi ([mac80211])
        ath10k_htt_rx_proc_rx_ind_hl ([ath10k_core])
        ath10k_htt_rx_pktlog_completion_handler ([ath10k_core])
        ath10k_sdio_napi_poll ([ath10k_sdio])
        net_rx_action ([kernel.kallsyms])
        softirqentry_text_start ([kernel.kallsyms])
        do_softirq ([kernel.kallsyms])
      
      call stack for napi complete and send tcp ack from tcp stack:
      (skb length is about 1500*32 bytes)
       _tcp_ack_snd_check ([kernel.kallsyms])
       tcp_v4_do_rcv ([kernel.kallsyms])
       tcp_v4_rcv ([kernel.kallsyms])
       local_deliver_finish ([kernel.kallsyms])
       ip_local_deliver ([kernel.kallsyms])
       ip_rcv_finish ([kernel.kallsyms])
       ip_rcv ([kernel.kallsyms])
       netif_receive_skb_core ([kernel.kallsyms])
       netif_receive_skb_one_core([kernel.kallsyms])
       netif_receive_skb ([kernel.kallsyms])
       netif_receive_skb_internal ([kernel.kallsyms])
       napi_gro_complete ([kernel.kallsyms])
       napi_gro_flush ([kernel.kallsyms])
       napi_complete_done ([kernel.kallsyms])
       ath10k_sdio_napi_poll ([ath10k_sdio])
       net_rx_action ([kernel.kallsyms])
       __softirqentry_text_start ([kernel.kallsyms])
       do_softirq ([kernel.kallsyms])
      
      Tested with QCA6174 SDIO with firmware
      WLAN.RMH.4.4.1-00017-QCARMSWP-1.
      Signed-off-by: NWen Gong <wgong@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      cfee8793
  9. 29 11月, 2019 5 次提交
  10. 27 11月, 2019 2 次提交
    • G
      ath10k: move non-fatal warn logs to dbg level · ef39ac1b
      Govind Singh 提交于
      During driver load below warn logs are printed in the console if
      firmware doesn't support some optional HTC services, ex:pktlog.
      It is likely some older fw version may not support PKTLOG HTC
      service as legacy fw uses HTC DATA service  for pktlog.
      Move this log to debug level to remove un-necessary warn message
      on console.
      
      htc.c:803:  ath10k_warn(ar, "unsupported HTC service id: %d\n",
      htc.c:881:  ath10k_warn(ar, "unsupported HTC service id: %d\n",
      Signed-off-by: NGovind Singh <govinds@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      ef39ac1b
    • P
      ftrace: Rework event_create_dir() · 04ae87a5
      Peter Zijlstra 提交于
      Rework event_create_dir() to use an array of static data instead of
      function pointers where possible.
      
      The problem is that it would call the function pointer on module load
      before parse_args(), possibly even before jump_labels were initialized.
      Luckily the generated functions don't use jump_labels but it still seems
      fragile. It also gets in the way of changing when we make the module map
      executable.
      
      The generated function are basically calling trace_define_field() with a
      bunch of static arguments. So instead of a function, capture these
      arguments in a static array, avoiding the function call.
      
      Now there are a number of cases where the fields are dynamic (syscall
      arguments, kprobes and uprobes), in which case a static array does not
      work, for these we preserve the function call. Luckily all these cases
      are not related to modules and so we can retain the function call for
      them.
      
      Also fix up all broken tracepoint definitions that now generate a
      compile error.
      Tested-by: NAlexei Starovoitov <ast@kernel.org>
      Tested-by: NSteven Rostedt (VMware) <rostedt@goodmis.org>
      Signed-off-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
      Reviewed-by: NSteven Rostedt (VMware) <rostedt@goodmis.org>
      Acked-by: NAlexei Starovoitov <ast@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Brian Gerst <brgerst@gmail.com>
      Cc: Denys Vlasenko <dvlasenk@redhat.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: https://lkml.kernel.org/r/20191111132458.342979914@infradead.orgSigned-off-by: NIngo Molnar <mingo@kernel.org>
      04ae87a5
  11. 25 11月, 2019 8 次提交
    • L
      ath10k: fix RX of frames with broken FCS in monitor mode · ea0c3e2a
      Linus Lüssing 提交于
      So far, frames were forwarded regardless of the FCS correctness leading
      to userspace applications listening on the monitor mode interface to
      receive potentially broken frames, even with the "fcsfail" flag unset.
      
      By default, with the "fcsfail" flag of a monitor mode interface
      unset, frames with FCS errors should be dropped. With this patch, the
      fcsfail flag is taken into account correctly.
      
      Tested-on: QCA4019 firmware-5-ct-full-community-12.bin-lede.011
      
      Cc: Simon Wunderlich <sw@simonwunderlich.de>
      Signed-off-by: NLinus Lüssing <ll@simonwunderlich.de>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      ea0c3e2a
    • W
      ath10k: report rssi of each chain to mac80211 for sdio · 7005eafc
      Wen Gong 提交于
      iw command only show rssi without each chain's rssi on sdio
      iw wlan0 station dump
      Station a0:40:a0:93:3e:de (on wlan0)
      signal:         -82 dBm
      signal avg:     -82 dBm
      
      after this patch, it will show each chain's rssi on sdio
      Station a0:40:a0:93:3e:de (on wlan0)
      signal:         -82 [-84, -88] dBm
      signal avg:     -82 [-84, -87] dBm
      
      For QCA6174 PCIe, the ppdu have the correct rssi of each chain, it
      indicate rssi of rx data by ath10k_htt_rx_h_signal. For sdio chip, the
      rssi of each chain stored in rx management reported by firmware, the
      ath10k_wmi_tlv_op_pull_mgmt_rx_ev which used for tlv wmi will get the
      rssi of each chain and stored them in wmi_mgmt_rx_ev_arg, then indicate
      them to mac80211. For non-tlv wmi chip, it will not get the rssi of each
      chain and not indicate to mac80211, for non-tlv wmi chip, this patch will
      not have impact. For tlv wmi chip, if the rssi of chain in mgmt is valid,
      it will be indicate to mac80211, tested with QCA6174 PCIe/SDIO, the rssi
      of 2 chain in mgmt is valid.
      
      rssi of chains in mgmt of QCA6174 SDIO:
      92096.652780: ath10k:ath10k_log_warn: ath10k_sdio mmc1:0001:1 rssi[0]:70
      92096.657324: ath10k:ath10k_log_warn: ath10k_sdio mmc1:0001:1 rssi[1]:68
      92096.662009: ath10k:ath10k_log_warn: ath10k_sdio mmc1:0001:1 rssi[2]:128
      92096.666647: ath10k:ath10k_log_warn: ath10k_sdio mmc1:0001:1 rssi[3]:128
      
      rssi of chains in mgmt of QCA6174 PCIe:
      [ 1581.049816] ath10k_pci 0000:02:00.0: mgmt rssi[0]:17
      [ 1581.049818] ath10k_pci 0000:02:00.0: mgmt rssi[1]:22
      [ 1581.049821] ath10k_pci 0000:02:00.0: mgmt rssi[2]:128
      [ 1581.049823] ath10k_pci 0000:02:00.0: mgmt rssi[3]:128
      
      after apply this patch, the iw's rssi of PCIe do not changed, result is
      same with before.
      
      iw wlan0 station dump of QCA6174 PCIe:
      Station 6c:e8:73:b8:92:dc (on wlan0)
              signal:         -70 [-77, -72] dBm
              signal avg:     -69 [-78, -72] dBm
      
      iw wlan-5000mhz station dump of QCA9984 PCIe
      connected with 2 client which has 2 chain:
      Station 70:48:0f:1f:1a:b2 (on wlan-5000mhz)
              signal:         -47 [-55, -48, -87, -88] dBm
              signal avg:     -42 [-50, -43, -83, -86] dBm
      Station ac:c1:ee:39:e3:83 (on wlan-5000mhz)
              signal:         -43 [-46, -45, -79, -84] dBm
              signal avg:     -43 [-46, -46, -82, -83] dBm
      
      Tested with QCA6174 SDIO with firmware WLAN.RMH.4.4.1-00017-QCARMSWP-1.
      Tested with QCA6174 PCIe with firmware WLAN.RM.4.4.1-00110-QCARMSWP-1.
      Tested with QCA9984 PCIe with firmware 10.4-3.9.0.2-00040.
      Signed-off-by: NWen Gong <wgong@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      7005eafc
    • J
      ath10k: Handle "invalid" BDFs for msm8998 devices · 319c2b71
      Jeffrey Hugo 提交于
      When the BDF download QMI message has the end field set to 1, it signals
      the end of the transfer, and triggers the firmware to do a CRC check.  The
      BDFs for msm8998 devices fail this check, yet the firmware is happy to
      still use the BDF.  It appears that this error is not caught by the
      downstream drive by concidence, therefore there are production devices
      in the field where this issue needs to be handled otherwise we cannot
      support wifi on them.  So, attempt to detect this scenario as best we can
      and treat it as non-fatal.
      Signed-off-by: NJeffrey Hugo <jeffrey.l.hugo@gmail.com>
      Reviewed-by: NBjorn Andersson <bjorn.andersson@linaro.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      319c2b71
    • J
      ath10k: Fix qmi init error handling · f8a595a8
      Jeffrey Hugo 提交于
      When ath10k_qmi_init() fails, the error handling does not free the irq
      resources, which causes an issue if we EPROBE_DEFER as we'll attempt to
      (re-)register irqs which are already registered.
      
      Fix this by doing a power off since we just powered on the hardware, and
      freeing the irqs as error handling.
      
      Fixes: ba94c753 ("ath10k: add QMI message handshake for wcn3990 client")
      Signed-off-by: NJeffrey Hugo <jeffrey.l.hugo@gmail.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      f8a595a8
    • W
      ath10k: add NL80211_FEATURE_ND_RANDOM_MAC_ADDR for NLO · 23b5156a
      Wen Gong 提交于
      Add NL80211_FEATURE_ND_RANDOM_MAC_ADDR for NLO will enable the random
      mac address for netdetect case.
      iw command:
      iw phy0 wowlan enable net-detect net-detect
      randomize=AA:7B:A1:AC:B2:41/FF:FF:FF:FF:FF:FF interval 5000 delay 30
      freqs 2412 matches ssid foo.
      After suspend, DUT will send probe request with mac AA:7B:A1:AC:B2:41.
      
      WCN3990, QCA9377, QCA6174 PCI also support this feature.
      
      Tested with QCA6174 SDIO with firmware
      WLAN.RMH.4.4.1-00029.
      Signed-off-by: NWen Gong <wgong@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      23b5156a
    • J
      ath10k: Handle when FW doesn't support QMI_WLFW_HOST_CAP_REQ_V01 · 501d4152
      Jeffrey Hugo 提交于
      Firmware with the build id QC_IMAGE_VERSION_STRING=WLAN.HL.1.0.2-XXXX does
      not support the QMI_WLFW_HOST_CAP_REQ_V01 message and will return the
      QMI not supported error to the ath10k driver.  Since not supporting this
      message is not fatal to the firmware nor the ath10k driver, lets catch
      this particular scenario and ignore it so that we can still bring up
      wifi services successfully.
      Signed-off-by: NJeffrey Hugo <jeffrey.l.hugo@gmail.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      501d4152
    • W
      ath10k: add large size for BMI download data for SDIO · d58f466a
      Wen Gong 提交于
      Download firmware time cost of SDIO is too long, it is about 480ms,
      add large size 2048 bytes for BMI download for SDIO chip, its time
      cost will reduced to 240ms.
      
      This will optimize the download firmware time cost.
      
      Tested with QCA6174 SDIO with firmware
      WLAN.RMH.4.4.1-00017-QCARMSWP-1.
      Signed-off-by: NWen Gong <wgong@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      d58f466a
    • W
      ath10k: correct the tlv len of ath10k_wmi_tlv_op_gen_config_pno_start · e01cc82c
      Wen Gong 提交于
      the tlv len is set to the total len of the wmi cmd, it will trigger
      firmware crash, correct the tlv len.
      
      Tested with QCA6174 SDIO with firmware
      WLAN.RMH.4.4.1-00017-QCARMSWP-1 and QCA6174
      PCIE with firmware WLAN.RM.4.4.1-00110-QCARMSWPZ-1.
      
      Fixes: ce834e28 ("ath10k: support NET_DETECT WoWLAN feature")
      Signed-off-by: NWen Gong <wgong@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      e01cc82c