1. 18 3月, 2020 6 次提交
    • S
      ath11k: Perform per-msdu rx processing · acc79d98
      Sriram R 提交于
      As Hash based reo destination selection is configured,
      the decapped packets reach different reo destintion rings
      based on the destintaion ring selected for the computed hash (based on
      the 5-tuple {ip src/ip dst/src port/dst port/protocol}) by hw and
      as configured by driver.
      
      Hence the current implementation of amsdu list based processing after all
      the subframes of amsdu are received (since all msdu's for a pdev are
      received in same reo dest ring), is not applicable here and hence is
      replaced with per msdu based handling as these subframes
      can be received in different reo dest rings.
      
      Also, as some of the rx descriptor fields might be valid only for the
      first msdu (for ex. received 80211 header, encryption type, etc),
      it might not be useful now as we cannot sync between different
      subframes received in different rings. Hence do not rely on those
      fields and replace them with fieds valid only on per msdu descriptors.
      Also cache other details such as encryption type for a peer so that
      it can be reused when a packet is received from it.
      Co-developed-by: NTamizh Chelvam Raja <tamizhr@codeaurora.org>
      Signed-off-by: NTamizh Chelvam Raja <tamizhr@codeaurora.org>
      Signed-off-by: NSriram R <srirrama@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      acc79d98
    • S
      ath11k: Configure hash based reo destination ring selection · 26c79927
      Sriram R 提交于
      Current implementation of pdev based reo destination ring
      selection is replaced by hash based ring selection so as to
      ensure all the available rings are utilized for better performance.
      
      The 4 reo destination rings are selected by the HW based on the
      hash value computed from the received packet based on the 5 tuple
      {ip src/ip dst/src port/dst port/protocol}. Out of the 32 hash values
      used by the hw, the driver assigns 8 values per reo destination ring
      to each of the 4 reo destination rings.
      Signed-off-by: NSriram R <srirrama@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      26c79927
    • P
      ath11k: Adding proper validation before accessing tx_stats · fe0ebb51
      Pravas Kumar Panda 提交于
      Before dumping tx_stats proper validation was not been taken care of.
      Due to which we were encountering null pointer dereference(kernel panic).
      This scenario will arise when a station is getting disconnected and
      we are changing the STA state by ath11k_mac_op_sta_state and assigning
      tx_stats as NULL and after this the mac80211 will destroy the
      debugfs entry from where we are trying to read the stats.
      
      If anyone tries to dump tx_stats for that STA in between setting
      tx_stats to NULL and debugfs file removal without checking the NULL
      value it will run into a NULL pointer exception.
      
      Proceeding with the analysis of "ARM Kernel Panic".
      The APSS crash happened due to OOPS on CPU 3.
      Crash Signature : Unable to handle kernel NULL pointer dereference at
      virtual address 00000360
      During the crash,
      PC points to "ath11k_debug_htt_stats_init+0x16ac/0x1acc [ath11k]"
      LR points to "ath11k_debug_htt_stats_init+0x1688/0x1acc [ath11k]".
      The Backtrace obtained is as follows:
      [<ffffffbffcfd8590>] ath11k_debug_htt_stats_init+0x16ac/0x1acc [ath11k]
      [<ffffffc000156320>] do_loop_readv_writev+0x60/0xa4
      [<ffffffc000156a5c>] do_readv_writev+0xd8/0x19c
      [<ffffffc000156b54>] vfs_readv+0x34/0x48
      [<ffffffc00017d6f4>] default_file_splice_read+0x1a8/0x2e4
      [<ffffffc00017c56c>] do_splice_to+0x78/0x98
      [<ffffffc00017c63c>] splice_direct_to_actor+0xb0/0x1a4
      [<ffffffc00017c7b4>] do_splice_direct+0x84/0xa8
      [<ffffffc000156f40>] do_sendfile+0x160/0x2a4
      [<ffffffc000157980>] SyS_sendfile64+0xb4/0xc8
      Signed-off-by: NPravas Kumar Panda <kumarpan@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      fe0ebb51
    • M
      ath11k: dump SRNG stats during FW assert · 5118935b
      Manikanta Pubbisetty 提交于
      Dumping the SRNG stats during FW assert, this would help
      in debugging ring stuck issues.
      Co-developed-by: NKarthikeyan Periyasamy <periyasa@codeaurora.org>
      Signed-off-by: NKarthikeyan Periyasamy <periyasa@codeaurora.org>
      Signed-off-by: NManikanta Pubbisetty <mpubbise@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      5118935b
    • V
      ath11k: fill channel info from rx channel · de06b2f7
      Venkateswara Naralasetty 提交于
      Fill the channel information from rx channel for the packet
      which has invalid channel info from meta data.
      Signed-off-by: NVenkateswara Naralasetty <vnaralas@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      de06b2f7
    • S
      ath11k: Supporting RX ring backpressure HTT event and stats handling · 678e8414
      Sriram R 提交于
      The Firmware sends HTT event to host whenever there is a
      backpressure on RX rings, Handling such event and dumping
      info on the console under the "ATH11K_DBG_DP_HTT"  debug level.
      
      Fetching RX ring backpressure histogram from FW via htt_stats debugfs.
      
       #echo "24" > /sys/kernel/debug/ath11k/ipq8074/macX/htt_stats_type
       #cat /sys/kernel/debug/ath11k/ipq8074/macX/htt_stats
      Signed-off-by: NVikas Patel <vikpatel@codeaurora.org>
      Signed-off-by: NSriram R <srirrama@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      678e8414
  2. 17 3月, 2020 5 次提交
    • J
      ath11k: add handling for BSS color · beb2f772
      John Crispin 提交于
      This patch adds code to handle the BSS_CHANGED_BSS_COLOR flag. It will
      trigger the propagation of BSS color settings into the FW. Handling is
      slightly different between AP and STA interfaces.
      Signed-off-by: NJohn Crispin <john@phrozen.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      beb2f772
    • J
      ath11k: add WMI calls required for handling BSS color · 5a032c8d
      John Crispin 提交于
      If the he_operation field of the beacon sets a BSS color, we need to inform
      the FW of the settings. This patch adds the WMI command handlers required
      to do so.
      Signed-off-by: NJohn Crispin <john@phrozen.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      5a032c8d
    • J
      ath11k: set queue_len to 4096 · 107560d8
      John Crispin 提交于
      The driver currently does not use wake_txq_queue. This leads to the
      tx_queue_len being defaulted to 1000. Setting this parameter will
      change the queue_len to 4096 which is more fitting for HE.
      Signed-off-by: NJohn Crispin <john@phrozen.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      107560d8
    • M
      ath11k: enable PN offload · 1441b2f2
      Manikanta Pubbisetty 提交于
      Enabling PN checking in the hardware; hardware checks
      the PN of the received packets and reports the errors
      to the host for further handling; default action is to
      drop such packets. TSC (TKIP sequence counter)
      validation is also offloaded.
      
      Hardware validates PN/TSC only for unicast packets;
      for group addressed packets, PN validation is done
      in mac80211.
      
      PN errors are reported to the driver via WBM RX release
      ring and can be dumped by using the following command.
      
      "cat /sys/kernel/debug/ath11k/soc_rx_stats | grep -i pn"
      
      Sample Output:
      PN check fail: 210
      Signed-off-by: NManikanta Pubbisetty <mpubbise@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      1441b2f2
    • M
      ath11k: handle RX fragments · 243874c6
      Manikanta Pubbisetty 提交于
      IPQ8074 HW has support to verify the PN of the received frames.
      For all frames except for fragmented ones, HW checks the PN and
      delivers them to the driver. For fragmented frames, driver is
      required to do a little more; it has to reassemble the fragments
      and then reinject them to the HW for verifying the PN. Currently,
      to keep the logic simple, PN verifcation is disabled in HW and is
      handled in mac80211 for all the frames (fragmented and unfragmented).
      
      On the contrary, offloading PN Validation to the HW brings important
      benefits. It reduces CPU cycles spent on the host CPU for verifying
      the same; helps in enabling features which improve performance like
      mac80211 fast RX path, enabling multiple REO rings for parallel RX
      processing, 802.11 decapsulation offloading. All these features are
      dependent on PN offload which in turn is dependent on handling of
      the received fragments in the driver.
      
      When TKIP security is used, additional handling is required while
      processing the fragments; since MIC is computed on an MSDU in TKIP,
      only the last fragment has the MIC info. In this case, driver has to
      compute the MIC after reassembly and compare it against the MIC
      present in the frame. For this, MICHAEL_MIC kernel crypto library
      APIs are used and the dependencies are appropriately set.
      Signed-off-by: NManikanta Pubbisetty <mpubbise@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      243874c6
  3. 12 3月, 2020 29 次提交
    • T
      prism54: Use scnprintf() for avoiding potential buffer overflow · 1da740e0
      Takashi Iwai 提交于
      Since snprintf() returns the would-be-output size instead of the
      actual output size, the succeeding calls may go beyond the given
      buffer limit.  Fix it by replacing with scnprintf().
      
      Cc: Luis Chamberlain <mcgrof@kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      1da740e0
    • T
      ipw2x00: Use scnprintf() for avoiding potential buffer overflow · f35ba45c
      Takashi Iwai 提交于
      Since snprintf() returns the would-be-output size instead of the
      actual output size, the succeeding calls may go beyond the given
      buffer limit.  Fix it by replacing with scnprintf().
      
      Cc: Stanislav Yakovlev <stas.yakovlev@gmail.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      f35ba45c
    • T
      b43legacy: Use scnprintf() for avoiding potential buffer overflow · d3f8c708
      Takashi Iwai 提交于
      Since snprintf() returns the would-be-output size instead of the
      actual output size, the succeeding calls may go beyond the given
      buffer limit.  Fix it by replacing with scnprintf().
      
      Cc: Larry Finger <Larry.Finger@lwfinger.net>
      Cc: b43-dev@lists.infradead.org
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      d3f8c708
    • T
      b43: Use scnprintf() for avoiding potential buffer overflow · 68b02e0c
      Takashi Iwai 提交于
      Since snprintf() returns the would-be-output size instead of the
      actual output size, the succeeding calls may go beyond the given
      buffer limit.  Fix it by replacing with scnprintf().
      
      Cc: b43-dev@lists.infradead.org
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      68b02e0c
    • T
      carl9170: Use scnprintf() for avoiding potential buffer overflow · 5cb5b475
      Takashi Iwai 提交于
      Since snprintf() returns the would-be-output size instead of the
      actual output size, the succeeding calls may go beyond the given
      buffer limit.  Fix it by replacing with scnprintf().
      
      Cc: Christian Lamparter <chunkeey@googlemail.com>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      5cb5b475
    • S
      libertas: Use new structure for SPI transfer delays · 32521a91
      Sergiu Cuciurean 提交于
      In a recent change to the SPI subsystem [1], a new `delay` struct was added
      to replace the `delay_usecs`. This change replaces the current
      `delay_usecs` with `delay` for this driver.
      
      The `spi_transfer_delay_exec()` function [in the SPI framework] makes sure
      that both `delay_usecs` & `delay` are used (in this order to preserve
      backwards compatibility).
      
      [1] commit bebcfd27 ("spi: introduce `delay` field for
      `spi_transfer` + spi_transfer_delay_exec()")
      Signed-off-by: NSergiu Cuciurean <sergiu.cuciurean@analog.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      32521a91
    • B
      mwifiex: set needed_headroom, not hard_header_len · 9454f7a8
      Brian Norris 提交于
      hard_header_len provides limitations for things like AF_PACKET, such
      that we don't allow transmitting packets smaller than this.
      
      needed_headroom provides a suggested minimum headroom for SKBs, so that
      we can trivally add our headers to the front.
      
      The latter is the correct field to use in this case, while the former
      mostly just prevents sending small AF_PACKET frames.
      
      In any case, mwifiex already does its own bounce buffering [1] if we
      don't have enough headroom, so hints (not hard limits) are all that are
      needed.
      
      This is the essentially the same bug (and fix) that brcmfmac had, fixed
      in commit cb39288f ("brcmfmac: use ndev->needed_headroom to reserve
      additional header space").
      
      [1] mwifiex_hard_start_xmit():
      	if (skb_headroom(skb) < MWIFIEX_MIN_DATA_HEADER_LEN) {
      	[...]
      		/* Insufficient skb headroom - allocate a new skb */
      
      Fixes: 5e6e3a92 ("wireless: mwifiex: initial commit for Marvell mwifiex driver")
      Signed-off-by: NBrian Norris <briannorris@chromium.org>
      Acked-by: NGanapathi Bhat <ganapathi.gbhat@nxp.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      9454f7a8
    • X
      iwlegacy: Remove unneeded variable ret · 31044326
      Xu Wang 提交于
      Remove unneeded variable ret used to store return value.
      Signed-off-by: NXu Wang <vulab@iscas.ac.cn>
      Acked-by: NStanislaw Gruszka <stf_xl@wp.pl>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      31044326
    • C
      b43legacy: replace simple_strtol() with kstrtoint() · 871b4b48
      chenqiwu 提交于
      The simple_strtol() function is deprecated since it does not
      check for the range overflow. Use kstrtoint() instead.
      Signed-off-by: Nchenqiwu <chenqiwu@xiaomi.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      871b4b48
    • K
      rtw88: remove unused member of struct rtw_hal · 90a39326
      Kevin Lo 提交于
      Remove unused fab_version member from struct rtw_hal.
      Some of the checks being made were nonsense.
      Signed-off-by: NKevin Lo <kevlo@kevlo.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      90a39326
    • D
      qtnfmac: add interface combination check for repeater mode · 2d83dddf
      Dmitry Lebed 提交于
      Firmware supports only STA as primary interface in repeater mode.
      Since the only meaningful usage of AP + STA interface combination
      is repeater, reject such combination with AP as primary interface.
      Signed-off-by: NDmitry Lebed <dlebed@quantenna.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      2d83dddf
    • S
      qtnfmac: assign each wiphy to its own virtual platform device · 616f5701
      Sergey Matyukevich 提交于
      Quantenna Pearl device exposes multiple (up to 3) radio interfaces under
      single PCIe function. So far all the wiphy devices were attached to the
      same pcie device. As a result, all different wireless network devices
      were reported under the same sysfs directory for pcie device, e.g.:
      
      $ ls  /sys/class/net/wlan0/device/net/
        wlan0 wlan1
      
      It turns out that such behavior may confuse various users of wireless
      subsystem. For instance, it turned out to be the case for:
      - Linux init systems, e.g. for renaming based on parent device
      - OpenWRT configuration scripts
      
      Suggested solution is to add an intermediate virtual platform device
      for each radio interface.
      Signed-off-by: NSergey Matyukevich <sergey.matyukevich.os@quantenna.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      616f5701
    • S
      qtnfmac: set valid edmg in cfg80211_chan_def · c3d476d2
      Sergey Matyukevich 提交于
      Make sure that edmg field of cfg80211_chan_def structure is properly
      initialized by zeros. Otherwise cfg80211_chandef_valid may return
      false if edmg fields contain some garbage.
      Signed-off-by: NSergey Matyukevich <sergey.matyukevich.os@quantenna.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      c3d476d2
    • S
      qtnfmac: support WPA3 OWE in AP mode · 44d09764
      Sergey Matyukevich 提交于
      Enable WPA3 OWE support in AP mode. Driver currently supports cards that
      offload OWE processing to userspace. This patch adds all the required
      tools for such offloading. Firmware requests OWE processing sending new
      UPDATE_OWE event to driver, which uses cfg80211_update_owe_info_event to
      notify userspace software. After OWE processing is completed, userspace
      sends calculated IEs to firmware using update_owe_info cfg80211 callback.
      Signed-off-by: NSergey Matyukevich <sergey.matyukevich.os@quantenna.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      44d09764
    • S
      qtnfmac: support WPA3 SAE in AP mode · b3860e7a
      Sergey Matyukevich 提交于
      Enable WPA3 SAE support in AP mode. Driver currently supports cards
      that offload SAE authentication to userspace. So allow userspace
      software to subscribe and to send AUTH frames. Besides, enable
      AP mode support in external_auth cfg80211 callback.
      Signed-off-by: NSergey Matyukevich <sergey.matyukevich.os@quantenna.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      b3860e7a
    • T
      ath5k: Use scnprintf() for avoiding potential buffer overflow · dfb252c7
      Takashi Iwai 提交于
      Since snprintf() returns the would-be-output size instead of the
      actual output size, the succeeding calls may go beyond the given
      buffer limit.  Fix it by replacing with scnprintf().
      
      Cc: Jiri Slaby <jirislaby@gmail.com>
      Cc: Nick Kossifidis <mickflemm@gmail.com>
      Cc: Luis Chamberlain <mcgrof@kernel.org>
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      dfb252c7
    • T
      ath11k: Use scnprintf() for avoiding potential buffer overflow · bc8f2378
      Takashi Iwai 提交于
      Since snprintf() returns the would-be-output size instead of the
      actual output size, the succeeding calls may go beyond the given
      buffer limit.  Fix it by replacing with scnprintf().
      
      Cc: ath11k@lists.infradead.org
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      bc8f2378
    • 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
    • R
      ath9k: Handle txpower changes even when TPC is disabled · 968ae2ca
      Remi Pommarel 提交于
      When TPC is disabled IEEE80211_CONF_CHANGE_POWER event can be handled to
      reconfigure HW's maximum txpower.
      
      This fixes 0dBm txpower setting when user attaches to an interface for
      the first time with the following scenario:
      
      ieee80211_do_open()
          ath9k_add_interface()
              ath9k_set_txpower() /* Set TX power with not yet initialized
                                     sc->hw->conf.power_level */
      
          ieee80211_hw_config() /* Iniatilize sc->hw->conf.power_level and
                                   raise IEEE80211_CONF_CHANGE_POWER */
      
          ath9k_config() /* IEEE80211_CONF_CHANGE_POWER is ignored */
      
      This issue can be reproduced with the following:
      
        $ modprobe -r ath9k
        $ modprobe ath9k
        $ wpa_supplicant -i wlan0 -c /tmp/wpa.conf &
        $ iw dev /* Here TX power is either 0 or 3 depending on RF chain */
        $ killall wpa_supplicant
        $ iw dev /* TX power goes back to calibrated value and subsequent
                    calls will be fine */
      
      Fixes: 283dd119 ("ath9k: add per-vif TX power capability")
      Cc: stable@vger.kernel.org
      Signed-off-by: NRemi Pommarel <repk@triplefau.lt>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      968ae2ca
    • K
      ath5k: Add proper dependency for ATH5K_AHB · c98cdaef
      Krzysztof Kozlowski 提交于
      The CONFIG_ATH5K_AHB could be enabled on ATH25 system without enabling
      ATH5K driver itself.  This does not make sense because CONFIG_ATH5K_AHB
      controls object build within drivers/net/wireless/ath/ath5k/ so enabling
      it without CONFIG_ATH5K brings nothing.
      
      Add proper dependency to CONFIG_ATH5K_AHB.
      Signed-off-by: NKrzysztof Kozlowski <krzk@kernel.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      c98cdaef
    • P
      ath11k: add thermal sensor device support · a41d1034
      Pradeep Kumar Chitrapu 提交于
      Temperature sensor generates electrical analog voltage from temperature
      of each chain. The analog voltage is converted to digital value through
      ADC. For reading temperature values fom user space, hw monitoring device
      is used.
      
      Whenever the user requests for current temperature, the driver sends WMI
      command and wait for response. For reading temperature,
      
      cat /sys/class/ieee80211/phy*/device/hwmon/hwmon2/temp1_input
      Signed-off-by: NPradeep Kumar Chitrapu <pradeepc@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      a41d1034
    • P
      ath11k: add thermal cooling device support · 2a63bbca
      Pradeep Kumar Chitrapu 提交于
      Thermal cooling device support is added to control the temperature by
      throttling the data transmission for the given duration. Throttling is
      done by suspending all data tx queues by given percentage of time. The
      thermal device allows user to configure duty cycle.
      
      Throttling can be disabled by setting the duty cycle to 0. The cooling
      device can be found under /sys/class/thermal/cooling_deviceX/.
      Corresponding soft link to this device can be found under phy folder.
      
      /sys/class/ieee80211/phy*/device/cooling_device.
      
      To set duty cycle as 40%,
      
      echo 40 >/sys/class/ieee80211/phy*/device/cooling_device/cur_state
      Signed-off-by: NPradeep Kumar Chitrapu <pradeepc@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      2a63bbca
    • 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
    • G
      ath11k: config reorder queue for all tids during peer setup · a36adf54
      Govindaraj Saminathan 提交于
      Currently rx tid setup is happening for TID 0 and TID 16
      during peer setup. And if other TID packets received for
      the peer it will be redirected to rx error ring and not through
      reo ring. And this rx tid configuration cannot be done
      in the rx error ring path since it is a atomic context.
      So moving the rx tid setup for all tids during the peer setup.
      This is required to enable PN offload functionality to route
      all packets through reo ring.
      Co-developed-by: NTamizh Chelvam <tamizhr@codeaurora.org>
      Signed-off-by: NTamizh Chelvam <tamizhr@codeaurora.org>
      Signed-off-by: NGovindaraj Saminathan <gsamin@codeaurora.org>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      a36adf54
    • 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