Skip to content
Permalink
Cheng-Wang/ath…
Switch branches/tags

Commits on Dec 17, 2021

  1. ath11k: add support of firmware logging for WCN6855

    Host enables WMI firmware logging feature via QMI message.
    Host receives firmware logging messages on WMI_DIAG_EVENTID, then
    sends logging messages to user space via event tracing infrastructure.
    
    Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
    
    Signed-off-by: Cheng Wang <quic_chengwan@quicinc.com>
    Cheng Wang authored and intel-lab-lkp committed Dec 17, 2021

Commits on Dec 16, 2021

  1. wcn36xx: Implement beacon filtering

    The prima driver facilitates the direct programming of beacon filter tables via
    SMD commands.
    
    The purpose of beacon filters is quote:
    
    /* When beacon filtering is enabled, firmware will
     * analyze the selected beacons received during BMPS,
     * and monitor any changes in the IEs as listed below.
     * The format of the table is:
     *    - EID
     *    - Check for IE presence
     *    - Byte offset
     *    - Byte value
     *    - Bit Mask
     *    - Byte reference
     */
    
    The default filter table looks something like this:
    
    tBeaconFilterIe gaBcnFilterTable[12] =
    {
      { WLAN_EID_DS_PARAMS, 0u, { 0u, 0u, 0u, 0u } },
      { WLAN_EID_ERP_INFO, 0u, { 0u, 0u, 248u, 0u } },
      { WLAN_EID_EDCA_PARAM_SET, 0u, { 0u, 0u, 240u, 0u } },
      { WLAN_EID_QOS_CAPA, 0u, { 0u, 0u, 240u, 0u } },
      { WLAN_EID_CHANNEL_SWITCH, 1u, { 0u, 0u, 0u, 0u } },
      { WLAN_EID_QUIET, 1u, { 0u, 0u, 0u, 0u } },
      { WLAN_EID_HT_OPERATION, 0u, { 0u, 0u, 0u, 0u } },
      { WLAN_EID_HT_OPERATION, 0u, { 1u, 0u, 248u, 0u } },
      { WLAN_EID_HT_OPERATION, 0u, { 2u, 0u, 235u, 0u } },
      { WLAN_EID_HT_OPERATION, 0u, { 5u, 0u, 253u, 0u } },
      { WLAN_EID_PWR_CONSTRAINT, 0u, { 0u, 0u, 0u, 0u } },
      { WLAN_EID_OPMODE_NOTIF, 0u, { 0u, 0u, 0u, 0u } }
    };
    
    Add in an equivalent filter set as present in the prima Linux driver.
    For now omit the beacon filter "rem" command as the driver does not have an
    explicit call to that SMD command. The filter mask should only count when
    we are inside BMPS anyway.
    
    Replicating the ability to program the filter table gives us scope to add and
    remove elements in future. For now though this patch makes the rote-copy of the
    downstream Linux beacon filter table, which we can tweak as desired from now
    on.
    
    Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211214134630.2214840-4-bryan.odonoghue@linaro.org
    bryanodonoghue authored and Kalle Valo committed Dec 16, 2021
  2. wcn36xx: Fix physical location of beacon filter comment

    The comment in the header with respect to beacon filtering makes a
    reference to "the structure above" and "the structure below" which would be
    informative if the comment appeared in the right place but, it does not.
    
    Fix the comment location so that it a least makes sense w/r/t the physical
    location statements.
    
    Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211214134630.2214840-3-bryan.odonoghue@linaro.org
    bryanodonoghue authored and Kalle Valo committed Dec 16, 2021
  3. wcn36xx: Fix beacon filter structure definitions

    The beacon filter structures need to be packed. Right now its fine because
    we don't yet use these structures so just pack them without marking it for
    backporting.
    
    Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
    Reviewed-by: Loic Poulain <loic.poulain@linaro.org>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211214134630.2214840-2-bryan.odonoghue@linaro.org
    bryanodonoghue authored and Kalle Valo committed Dec 16, 2021
  4. ath11k: Use reserved host DDR addresses from DT for PCI devices

    Host DDR memory (contiguous 45 MB in mode-0 or 15 MB in mode-2)
    is reserved through DT entries for firmware usage. Send the base
    address from DT entries.
    If DT entry is available, PCI device will work with
    fixed_mem_region else host allocates multiple segments.
    
    IPQ8074 on HK10 board supports multiple PCI devices.
    IPQ8074 + QCN9074 is tested with this patch.
    
    Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.4.0.1-01838-QCAHKSWPL_SILICONZ-1
    
    Signed-off-by: Anilkumar Kolli <akolli@codeaurora.org>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/1638789319-2950-2-git-send-email-akolli@codeaurora.org
    Anilkumar Kolli authored and Kalle Valo committed Dec 16, 2021
  5. dt: bindings: add new DT entry for ath11k PCI device support

    Ath11k driver supports PCI devices such as QCN9074/QCA6390.
    Ath11k firmware uses host DDR memory, DT entry is used to
    reserve host DDR memory regions, send these memory base
    addresses using DT entries.
    
    Signed-off-by: Anilkumar Kolli <akolli@codeaurora.org>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/1638789319-2950-1-git-send-email-akolli@codeaurora.org
    Anilkumar Kolli authored and Kalle Valo committed Dec 16, 2021

Commits on Dec 14, 2021

  1. ath11k: Change qcn9074 fw to operate in mode-2

    In mode-2 QCN9074 firmware uses 15MB of host memory and firmware
    request 1MB size segements in QMI, whereas in mode-0 firmware
    uses 45MB of host memory and each segment is of 2MB size.
    In mode-2 firmware operates with reduced number of vdevs and peers.
    
    Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.4.0.1-01838-QCAHKSWPL_SILICONZ-1
    
    Signed-off-by: Seevalamuthu Mariappan <seevalam@codeaurora.org>
    Signed-off-by: Anilkumar Kolli <akolli@codeaurora.org>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211209104351.9811-3-kvalo@kernel.org
    Seevalamuthu Mariappan authored and Kalle Valo committed Dec 14, 2021
  2. ath11k: add ab to TARGET_NUM_VDEVS & co

    The next patch changes TARGET_NUM_VDEVS to be dynamic and need access to ab.
    Add ab separately to keep the next patch simple.
    
    Compile tested only.
    
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211209104351.9811-2-kvalo@kernel.org
    Kalle Valo committed Dec 14, 2021
  3. ath11k: Fix a NULL pointer dereference in ath11k_mac_op_hw_scan()

    In ath11k_mac_op_hw_scan(), the return value of kzalloc() is directly
    used in memcpy(), which may lead to a NULL pointer dereference on
    failure of kzalloc().
    
    Fix this bug by adding a check of arg.extraie.ptr.
    
    This bug was found by a static analyzer. The analysis employs
    differential checking to identify inconsistent security operations
    (e.g., checks or kfrees) between two code paths and confirms that the
    inconsistent operations are not recovered in the current function or
    the callers, so they constitute bugs.
    
    Note that, as a bug found by static analysis, it can be a false
    positive or hard to trigger. Multiple researchers have cross-reviewed
    the bug.
    
    Builds with CONFIG_ATH11K=m show no new warnings, and our static
    analyzer no longer warns about this code.
    
    Fixes: d5c6515 ("ath11k: driver for Qualcomm IEEE 802.11ax devices")
    Signed-off-by: Zhou Qingyang <zhou1615@umn.edu>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211202155348.71315-1-zhou1615@umn.edu
    zhou1615 authored and Kalle Valo committed Dec 14, 2021

Commits on Dec 13, 2021

  1. ath11k: Fix deleting uninitialized kernel timer during fragment cache…

    … flush
    
    frag_timer will be created & initialized for stations when
    they associate and will be deleted during every key installation
    while flushing old fragments.
    
    For AP interface self peer will be created and Group keys
    will be installed for this peer, but there will be no real
    Station entry & hence frag_timer won't be created and
    initialized, deleting such uninitialized kernel timers causes below
    warnings and backtraces printed with CONFIG_DEBUG_OBJECTS_TIMERS
    enabled.
    
    [ 177.828008] ODEBUG: assert_init not available (active state 0) object type: timer_list hint: 0x0
    [ 177.836833] WARNING: CPU: 3 PID: 188 at lib/debugobjects.c:508 debug_print_object+0xb0/0xf0
    [ 177.845185] Modules linked in: ath11k_pci ath11k qmi_helpers qrtr_mhi qrtr ns mhi
    [ 177.852679] CPU: 3 PID: 188 Comm: hostapd Not tainted 5.14.0-rc3-32919-g4034139e1838-dirty torvalds#14
    [ 177.865805] pstate: 60000005 (nZCv daif -PAN -UAO -TCO BTYPE=--)
    [ 177.871804] pc : debug_print_object+0xb0/0xf0
    [ 177.876155] lr : debug_print_object+0xb0/0xf0
    [ 177.880505] sp : ffffffc01169b5a0
    [ 177.883810] x29: ffffffc01169b5a0 x28: ffffff80081c2320 x27: ffffff80081c4078
    [ 177.890942] x26: ffffff8003fe8f28 x25: ffffff8003de9890 x24: ffffffc01134d738
    [ 177.898075] x23: ffffffc010948f20 x22: ffffffc010b2d2e0 x21: ffffffc01169b628
    [ 177.905206] x20: ffffffc01134d700 x19: ffffffc010c80d98 x18: 00000000000003f6
    [ 177.912339] x17: 203a657079742074 x16: 63656a626f202930 x15: 0000000000000152
    [ 177.919471] x14: 0000000000000152 x13: 00000000ffffffea x12: ffffffc010d732e0
    [ 177.926603] x11: 0000000000000003 x10: ffffffc010d432a0 x9 : ffffffc010d432f8
    [ 177.933735] x8 : 000000000002ffe8 x7 : c0000000ffffdfff x6 : 0000000000000001
    [ 177.940866] x5 : 0000000000000000 x4 : 0000000000000000 x3 : 00000000ffffffff
    [ 177.947997] x2 : ffffffc010c93240 x1 : ffffff80023624c0 x0 : 0000000000000054
    [ 177.955130] Call trace:
    [ 177.957567] debug_print_object+0xb0/0xf0
    [ 177.961570] debug_object_assert_init+0x124/0x178
    [ 177.966269] try_to_del_timer_sync+0x1c/0x70
    [ 177.970536] del_timer_sync+0x30/0x50
    [ 177.974192] ath11k_peer_frags_flush+0x34/0x68 [ath11k]
    [ 177.979439] ath11k_mac_op_set_key+0x1e4/0x338 [ath11k]
    [ 177.984673] ieee80211_key_enable_hw_accel+0xc8/0x3d0
    [ 177.989722] ieee80211_key_replace+0x360/0x740
    [ 177.994160] ieee80211_key_link+0x16c/0x210
    [ 177.998337] ieee80211_add_key+0x138/0x338
    [ 178.002426] nl80211_new_key+0xfc/0x258
    [ 178.006257] genl_family_rcv_msg_doit.isra.17+0xd8/0x120
    [ 178.011565] genl_rcv_msg+0xd8/0x1c8
    [ 178.015134] netlink_rcv_skb+0x38/0xf8
    [ 178.018877] genl_rcv+0x34/0x48
    [ 178.022012] netlink_unicast+0x174/0x230
    [ 178.025928] netlink_sendmsg+0x188/0x388
    [ 178.029845] ____sys_sendmsg+0x218/0x250
    [ 178.033763] ___sys_sendmsg+0x68/0x90
    [ 178.037418] __sys_sendmsg+0x44/0x88
    [ 178.040988] __arm64_sys_sendmsg+0x20/0x28
    [ 178.045077] invoke_syscall.constprop.5+0x54/0xe0
    [ 178.049776] do_el0_svc+0x74/0xc0
    [ 178.053084] el0_svc+0x10/0x18
    [ 178.056133] el0t_64_sync_handler+0x88/0xb0
    [ 178.060310] el0t_64_sync+0x148/0x14c
    [ 178.063966] ---[ end trace 8a5cf0bf9d34a058 ]---
    
    Add changes to not to delete frag timer for peers during
    group key installation.
    
    Tested on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-01092-QCAHKSWPL_SILICONZ-1
    
    Fixes: c3944a5 ("ath11k: Clear the fragment cache during key install")
    Signed-off-by: Rameshkumar Sundaram <quic_ramess@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/1639071421-25078-1-git-send-email-quic_ramess@quicinc.com
    Rameshkumar Sundaram authored and Kalle Valo committed Dec 13, 2021
  2. ath11k: Avoid false DEADLOCK warning reported by lockdep

    With CONFIG_LOCKDEP=y and CONFIG_DEBUG_SPINLOCK=y, lockdep reports
    below warning:
    
    [  166.059415] ============================================
    [  166.059416] WARNING: possible recursive locking detected
    [  166.059418] 5.15.0-wt-ath+ torvalds#10 Tainted: G        W  O
    [  166.059420] --------------------------------------------
    [  166.059421] kworker/0:2/116 is trying to acquire lock:
    [  166.059423] ffff9905f2083160 (&srng->lock){+.-.}-{2:2}, at: ath11k_hal_reo_cmd_send+0x20/0x490 [ath11k]
    [  166.059440]
                   but task is already holding lock:
    [  166.059442] ffff9905f2083230 (&srng->lock){+.-.}-{2:2}, at: ath11k_dp_process_reo_status+0x95/0x2d0 [ath11k]
    [  166.059491]
                   other info that might help us debug this:
    [  166.059492]  Possible unsafe locking scenario:
    
    [  166.059493]        CPU0
    [  166.059494]        ----
    [  166.059495]   lock(&srng->lock);
    [  166.059498]   lock(&srng->lock);
    [  166.059500]
                    *** DEADLOCK ***
    
    [  166.059501]  May be due to missing lock nesting notation
    
    [  166.059502] 3 locks held by kworker/0:2/116:
    [  166.059504]  #0: ffff9905c0081548 ((wq_completion)events){+.+.}-{0:0}, at: process_one_work+0x1f6/0x660
    [  166.059511]  #1: ffff9d2400a5fe68 ((debug_obj_work).work){+.+.}-{0:0}, at: process_one_work+0x1f6/0x660
    [  166.059517]  #2: ffff9905f2083230 (&srng->lock){+.-.}-{2:2}, at: ath11k_dp_process_reo_status+0x95/0x2d0 [ath11k]
    [  166.059532]
                   stack backtrace:
    [  166.059534] CPU: 0 PID: 116 Comm: kworker/0:2 Kdump: loaded Tainted: G        W  O      5.15.0-wt-ath+ torvalds#10
    [  166.059537] Hardware name: Intel(R) Client Systems NUC8i7HVK/NUC8i7HVB, BIOS HNKBLi70.86A.0059.2019.1112.1124 11/12/2019
    [  166.059539] Workqueue: events free_obj_work
    [  166.059543] Call Trace:
    [  166.059545]  <IRQ>
    [  166.059547]  dump_stack_lvl+0x56/0x7b
    [  166.059552]  __lock_acquire+0xb9a/0x1a50
    [  166.059556]  lock_acquire+0x1e2/0x330
    [  166.059560]  ? ath11k_hal_reo_cmd_send+0x20/0x490 [ath11k]
    [  166.059571]  _raw_spin_lock_bh+0x33/0x70
    [  166.059574]  ? ath11k_hal_reo_cmd_send+0x20/0x490 [ath11k]
    [  166.059584]  ath11k_hal_reo_cmd_send+0x20/0x490 [ath11k]
    [  166.059594]  ath11k_dp_tx_send_reo_cmd+0x3f/0x130 [ath11k]
    [  166.059605]  ath11k_dp_rx_tid_del_func+0x221/0x370 [ath11k]
    [  166.059618]  ath11k_dp_process_reo_status+0x22f/0x2d0 [ath11k]
    [  166.059632]  ? ath11k_dp_service_srng+0x2ea/0x2f0 [ath11k]
    [  166.059643]  ath11k_dp_service_srng+0x2ea/0x2f0 [ath11k]
    [  166.059655]  ath11k_pci_ext_grp_napi_poll+0x1c/0x70 [ath11k_pci]
    [  166.059659]  __napi_poll+0x28/0x230
    [  166.059664]  net_rx_action+0x285/0x310
    [  166.059668]  __do_softirq+0xe6/0x4d2
    [  166.059672]  irq_exit_rcu+0xd2/0xf0
    [  166.059675]  common_interrupt+0xa5/0xc0
    [  166.059678]  </IRQ>
    [  166.059679]  <TASK>
    [  166.059680]  asm_common_interrupt+0x1e/0x40
    [  166.059683] RIP: 0010:_raw_spin_unlock_irqrestore+0x38/0x70
    [  166.059686] Code: 83 c7 18 e8 2a 95 43 ff 48 89 ef e8 22 d2 43 ff 81 e3 00 02 00 00 75 25 9c 58 f6 c4 02 75 2d 48 85 db 74 01 fb bf 01 00 00 00 <e8> 63 2e 40 ff 65 8b 05 8c 59 97 5c 85 c0 74 0a 5b 5d c3 e8 00 6a
    [  166.059689] RSP: 0018:ffff9d2400a5fca0 EFLAGS: 00000206
    [  166.059692] RAX: 0000000000000002 RBX: 0000000000000200 RCX: 0000000000000006
    [  166.059694] RDX: 0000000000000000 RSI: ffffffffa404879b RDI: 0000000000000001
    [  166.059696] RBP: ffff9905c0053000 R08: 0000000000000001 R09: 0000000000000001
    [  166.059698] R10: ffff9d2400a5fc50 R11: 0000000000000001 R12: ffffe186c41e2840
    [  166.059700] R13: 0000000000000001 R14: ffff9905c78a1c68 R15: 0000000000000001
    [  166.059704]  free_debug_processing+0x257/0x3d0
    [  166.059708]  ? free_obj_work+0x1f5/0x250
    [  166.059712]  __slab_free+0x374/0x5a0
    [  166.059718]  ? kmem_cache_free+0x2e1/0x370
    [  166.059721]  ? free_obj_work+0x1f5/0x250
    [  166.059724]  kmem_cache_free+0x2e1/0x370
    [  166.059727]  free_obj_work+0x1f5/0x250
    [  166.059731]  process_one_work+0x28b/0x660
    [  166.059735]  ? process_one_work+0x660/0x660
    [  166.059738]  worker_thread+0x37/0x390
    [  166.059741]  ? process_one_work+0x660/0x660
    [  166.059743]  kthread+0x176/0x1a0
    [  166.059746]  ? set_kthread_struct+0x40/0x40
    [  166.059749]  ret_from_fork+0x22/0x30
    [  166.059754]  </TASK>
    
    Since these two lockes are both initialized in ath11k_hal_srng_setup,
    they are assigned with the same key. As a result lockdep suspects that
    the task is trying to acquire the same lock (due to same key) while
    already holding it, and thus reports the DEADLOCK warning. However as
    they are different spinlock instances, the warning is false positive.
    
    On the other hand, even no dead lock indeed, this is a major issue for
    upstream regression testing as it disables lockdep functionality.
    
    Fix it by assigning separate lock class key for each srng->lock.
    
    Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
    Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211209011949.151472-1-quic_bqiang@quicinc.com
    Baochen Qiang authored and Kalle Valo committed Dec 13, 2021
  3. ath11k: set DTIM policy to stick mode for station interface

    Set DTIM policy to DTIM stick mode, so station follows AP DTIM
    interval rather than listen interval which is set in peer assoc cmd.
    DTIM stick mode is more preferred per firmware team request.
    
    Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
    
    Signed-off-by: Carl Huang <quic_cjhuang@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/1638948694-15582-1-git-send-email-quic_cjhuang@quicinc.com
    Carl Huang authored and Kalle Valo committed Dec 13, 2021
  4. ath11k: support MAC address randomization in scan

    The driver reports NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR capability
    to upper layer based on the service bit firmware reported. Driver
    sets the spoofed flag in scan_ctrl_flag to firmware if upper layer
    has enabled this feature in scan request.
    
    Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
    
    Signed-off-by: Carl Huang <quic_cjhuang@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/1638948007-9609-1-git-send-email-quic_cjhuang@quicinc.com
    Carl Huang authored and Kalle Valo committed Dec 13, 2021
  5. ath10k: wmi: remove array of flexible structures

    I updated to sparse v0.6.4 and it warns:
    
    drivers/net/wireless/ath/ath10k/wmi.c: note: in included file (through drivers/net/wireless/ath/ath10k/core.h):
    drivers/net/wireless/ath/ath10k/wmi.h:3481:34: warning: array of flexible structures
    
    Fix it by changing the type to u8 array, in struct wmi_phyerr_hdr_arg it's
    stored as a void pointer anyway.
    
    Compile tested only.
    
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211209091545.6098-2-kvalo@kernel.org
    Kalle Valo committed Dec 13, 2021
  6. ath10k: htt: remove array of flexible structures

    I updated to sparse v0.6.4 and it warns:
    
    drivers/net/wireless/ath/ath10k/hw.c: note: in included file (through drivers/net/wireless/ath/ath10k/core.h):
    drivers/net/wireless/ath/ath10k/htt.h:1503:41: warning: array of flexible structures
    drivers/net/wireless/ath/ath10k/htt_rx.c: note: in included file (through drivers/net/wireless/ath/ath10k/core.h):
    drivers/net/wireless/ath/ath10k/htt.h:1503:41: warning: array of flexible structures
    
    The structure is unused in ath10k so let's just remove it.
    
    Compile tested only.
    
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211209091545.6098-1-kvalo@kernel.org
    Kalle Valo committed Dec 13, 2021

Commits on Dec 9, 2021

  1. ath10k: drop beacon and probe response which leak from other channel

    When scan request on channel 1, it also receive beacon from other
    channels, and the beacon also indicate to mac80211 and wpa_supplicant,
    and then the bss info appears in radio measurement report of radio
    measurement sent from wpa_supplicant, thus lead RRM case fail.
    
    This is to drop the beacon and probe response which is not the same
    channel of scanning.
    
    Tested-on: QCA6174 hw3.2 SDIO WLAN.RMH.4.4.1-00049
    
    Signed-off-by: Wen Gong <quic_wgong@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211208061752.16564-1-quic_wgong@quicinc.com
    Wen Gong authored and Kalle Valo committed Dec 9, 2021
  2. ath11k: add spectral/CFR buffer validation support

    Currently there is no validation on the spectral/CFR report
    over the db ring buffers from the hardware. Improper/incomplete
    DMA by the target can result in invalid data received by host.
    Due to this we may populate incorrect data to user space.
    
    This buffer validation support fix this issues by filling some
    magic value in the buffer during buffer replenish and check for
    the magic value in the buffer received by the target. If host
    detect magic value in the received buffer it will drop the buffer.
    
    Tested-on: IPQ8074 WLAN.HK.2.4.0.1-01467-QCAHKSWPL_SILICONZ-1
    
    Signed-off-by: Venkateswara Naralasetty <quic_vnaralas@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/1637312901-10279-2-git-send-email-quic_vnaralas@quicinc.com
    Venkateswara Naralasetty authored and Kalle Valo committed Dec 9, 2021
  3. ath11k: Process full monitor mode rx support

    In full monitor mode, monitor destination ring is read before monitor
    status ring. mon_dst_ring has ppdu id, reap till the end of PPDU. Add
    all the MPDUs to list. Start processing the status ring, if PPDU id in
    status ring is lagging behind, reap the status ring, once the PPDU ID
    matches, deliver the MSDU to upper layer. If status PPDU id leading,
    reap the mon_dst_ring.
    
    The advantage with full monitor mode is hardware has status buffers
    available for all the MPDUs in mon_dst_ring, which makes it possible
    to deliver more frames to be seen on sniffer.
    
    Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.4.0.1-01734-QCAHKSWPL_SILICONZ-1
    
    Signed-off-by: Anilkumar Kolli <akolli@codeaurora.org>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/1638881695-22155-4-git-send-email-akolli@codeaurora.org
    Anilkumar Kolli authored and Kalle Valo committed Dec 9, 2021
  4. ath11k: add software monitor ring descriptor for full monitor

    In full monitor mode, monitor destination ring is read in
    software monitor ring descriptor format instead of
    reo_entrance_ring format. Add new sw_mon_ring descriptor.
    
    Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.4.0.1-01734-QCAHKSWPL_SILICONZ-1
    
    Signed-off-by: Anilkumar Kolli <akolli@codeaurora.org>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/1638881695-22155-3-git-send-email-akolli@codeaurora.org
    Anilkumar Kolli authored and Kalle Valo committed Dec 9, 2021
  5. ath11k: Add htt cmd to enable full monitor mode

    A new hw_param full_monitor_mode is added to enable full
    monitor support for QCN9074.
    HTT_H2T_MSG_TYPE_RX_FULL_MONITOR_MODE cmd is sent to FW
    to enable the full monitor mode.
    
    Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.4.0.1-01734-QCAHKSWPL_SILICONZ-1
    
    Signed-off-by: Anilkumar Kolli <akolli@codeaurora.org>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/1638881695-22155-2-git-send-email-akolli@codeaurora.org
    Anilkumar Kolli authored and Kalle Valo committed Dec 9, 2021
  6. ath6kl: Use struct_group() to avoid size-mismatched casting

    In builds with -Warray-bounds, casts from smaller objects to larger
    objects will produce warnings. These can be overly conservative, but since
    -Warray-bounds has been finding legitimate bugs, it is desirable to turn
    it on globally. Instead of casting a u32 to a larger object, redefine
    the u32 portion of the header to a separate struct that can be used for
    both u32 operations and the distinct header fields. Silences this warning:
    
    drivers/net/wireless/ath/ath6kl/htc_mbox.c: In function 'htc_wait_for_ctrl_msg':
    drivers/net/wireless/ath/ath6kl/htc_mbox.c:2275:20: error: array subscript 'struct htc_frame_hdr[0]' is partly outside array bounds of 'u32[1]' {aka 'unsigned int[1]'} [-Werror=array-bounds]
     2275 |         if (htc_hdr->eid != ENDPOINT_0)
          |                    ^~
    drivers/net/wireless/ath/ath6kl/htc_mbox.c:2264:13: note: while referencing 'look_ahead'
     2264 |         u32 look_ahead;
          |             ^~~~~~~~~~
    
    This change results in no executable instruction differences.
    
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211207063538.2767954-1-keescook@chromium.org
    kees authored and Kalle Valo committed Dec 9, 2021
  7. ath11k: enable IEEE80211_HW_SINGLE_SCAN_ON_ALL_BANDS for WCN6855

    Currently mac80211 will send 3 scan request for each scan of WCN6855,
    they are 2.4 GHz/5 GHz/6 GHz band scan. Firmware of WCN6855 will
    cache the RNR IE(Reduced Neighbor Report element) which exist in the
    beacon of 2.4 GHz/5 GHz of the AP which is co-located with 6 GHz,
    and then use the cache to scan in 6 GHz band scan if the 6 GHz scan
    is in the same scan with the 2.4 GHz/5 GHz band, this will helpful to
    search more AP of 6 GHz. Also it will decrease the time cost of scan
    because firmware will use dual-band scan for the 2.4 GHz/5 GHz, it
    means the 2.4 GHz and 5 GHz scans are doing simultaneously.
    
    Set the flag IEEE80211_HW_SINGLE_SCAN_ON_ALL_BANDS for WCN6855 since
    it supports 2.4 GHz/5 GHz/6 GHz and it is single pdev which means
    all the 2.4 GHz/5 GHz/6 GHz exist in the same wiphy/ieee80211_hw.
    
    Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
    
    Tested-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Wen Gong <quic_wgong@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211129101309.2931-1-quic_wgong@quicinc.com
    Wen Gong authored and Kalle Valo committed Dec 9, 2021
  8. ath11k: Fix buffer overflow when scanning with extraie

    If cfg80211 is providing extraie's for a scanning process then ath11k will
    copy that over to the firmware. The extraie.len is a 32 bit value in struct
    element_info and describes the amount of bytes for the vendor information
    elements.
    
    The WMI_TLV packet is having a special WMI_TAG_ARRAY_BYTE section. This
    section can have a (payload) length up to 65535 bytes because the
    WMI_TLV_LEN can store up to 16 bits. The code was missing such a check and
    could have created a scan request which cannot be parsed correctly by the
    firmware.
    
    But the bigger problem was the allocation of the buffer. It has to align
    the TLV sections by 4 bytes. But the code was using an u8 to store the
    newly calculated length of this section (with alignment). And the new
    calculated length was then used to allocate the skbuff. But the actual code
    to copy in the data is using the extraie.len and not the calculated
    "aligned" length.
    
    The length of extraie with IEEE80211_HW_SINGLE_SCAN_ON_ALL_BANDS enabled
    was 264 bytes during tests with a QCA Milan card. But it only allocated 8
    bytes (264 bytes % 256) for it. As consequence, the code to memcpy the
    extraie into the skb was then just overwriting data after skb->end. Things
    like shinfo were therefore corrupted. This could usually be seen by a crash
    in skb_zcopy_clear which tried to call a ubuf_info callback (using a bogus
    address).
    
    Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-02892.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
    
    Cc: stable@vger.kernel.org
    Fixes: d5c6515 ("ath11k: driver for Qualcomm IEEE 802.11ax devices")
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211207142913.1734635-1-sven@narfation.org
    ecsv authored and Kalle Valo committed Dec 9, 2021

Commits on Dec 8, 2021

  1. ath10k: fix scan abort when duration is set for hw scan

    When request scan with duration 120ms on channel 1, it failed with
    scan abort easily. Because scan_timeout is set to 130ms for the scan
    in ath10k_hw_scan(), and timed out before scan complete, so lead
    scan abort.
    
    failed log of ath10k:
    2021-04-14T14:43:29.936058Z DEBUG kernel: [67384.594846] ath10k_sdio mmc1:0001:1: wmi tlv start scan
    2021-04-14T14:43:29.937896Z DEBUG kernel: [67384.595820] ath10k_sdio mmc1:0001:1: scan event started type 1 reason 7 freq 2437 req_id 40961 scan_id 40960 vdev_id 0 state starting (1)
    2021-04-14T14:43:29.938357Z DEBUG kernel: [67384.596761] ath10k_sdio mmc1:0001:1: scan event bss channel type 4 reason 7 freq 2437 req_id 40961 scan_id 40960 vdev_id 0 state running (2)
    2021-04-14T14:43:29.992497Z DEBUG kernel: [67384.651013] ath10k_sdio mmc1:0001:1: scan event foreign channel type 8 reason 7 freq 2412 req_id 40961 scan_id 40960 vdev_id 0 state running (2)
    2021-04-14T14:43:30.063530Z DEBUG kernel: [67384.722139] ath10k_sdio mmc1:0001:1: wmi tlv stop scan
    2021-04-14T14:43:30.066592Z DEBUG kernel: [67384.724403] ath10k_sdio mmc1:0001:1: scan event completed [cancelled] type 2 reason 1 freq 2412 req_id 40961 scan_id 40960 vdev_id 0 state aborting (3)
    
    failed log of wpa_supplicant:
    2021-04-14T14:43:29.981842Z DEBUG wpa_supplicant[887]: wlan0: nl80211: scan request
    2021-04-14T14:43:29.981988Z DEBUG wpa_supplicant[887]: nl80211: Passive scan requested
    2021-04-14T14:43:29.982202Z DEBUG wpa_supplicant[887]: nl80211: Add NL80211_SCAN_FLAG_FLUSH
    2021-04-14T14:43:29.982339Z DEBUG wpa_supplicant[887]: Scan requested (ret=0) - scan timeout 30 seconds
    2021-04-14T14:43:29.982491Z DEBUG wpa_supplicant[887]: nl80211: Drv Event 33 (NL80211_CMD_TRIGGER_SCAN) received for wlan0
    2021-04-14T14:43:29.982629Z DEBUG wpa_supplicant[887]: wlan0: nl80211: Scan trigger
    2021-04-14T14:43:29.982779Z DEBUG wpa_supplicant[887]: wlan0: Event SCAN_STARTED (47) received
    2021-04-14T14:43:29.982920Z DEBUG wpa_supplicant[887]: wlan0: Own scan request started a scan in 0.000175 seconds
    2021-04-14T14:43:30.082401Z DEBUG wpa_supplicant[887]: nl80211: Drv Event 35 (NL80211_CMD_SCAN_ABORTED) received for wlan0
    2021-04-14T14:43:30.082704Z DEBUG wpa_supplicant[887]: wlan0: nl80211: Scan aborted
    2021-04-14T14:43:30.082905Z DEBUG wpa_supplicant[887]: nl80211: Scan included frequencies: 2412
    2021-04-14T14:43:30.083123Z DEBUG wpa_supplicant[887]: wlan0: Event SCAN_RESULTS (3) received
    2021-04-14T14:43:30.083310Z DEBUG wpa_supplicant[887]: wlan0: Scan completed in 0.128655 seconds
    
    This is to increase the scan_timeout with 200ms for this situation,
    then scan will not timed out for this situation.
    
    Tested-on: QCA6174 hw3.2 SDIO WLAN.RMH.4.4.1-00049
    
    Signed-off-by: Wen Gong <quic_wgong@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211026025902.26621-1-quic_wgong@quicinc.com
    Wen Gong authored and Kalle Valo committed Dec 8, 2021
  2. ath10k: Fix tx hanging

    While running stress tests in roaming scenarios (switching ap's every 5
    seconds, we discovered a issue which leads to tx hangings of exactly 5
    seconds while or after scanning for new accesspoints. We found out that
    this hanging is triggered by ath10k_mac_wait_tx_complete since the
    empty_tx_wq was not wake when the num_tx_pending counter reaches zero.
    To fix this, we simply move the wake_up call to htt_tx_dec_pending,
    since this call was missed on several locations within the ath10k code.
    
    Signed-off-by: Sebastian Gottschall <s.gottschall@dd-wrt.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20210505085806.11474-1-s.gottschall@dd-wrt.com
    BrainSlayer authored and Kalle Valo committed Dec 8, 2021
  3. ath: regdom: extend South Korea regulatory domain support

    South Korea manufacturer, Samsung, has extended South Korea
    regulatory domain pair with 0x5F and has used it for their
    devices such as Samsung Galaxy book. Hence add support
    0x5F as a regulatory domain pair along with extended country
    code, 413.
    
    Signed-off-by: Peter Oh <ebmajor.dev@gmail.com>
    Signed-off-by: Andreas Tepe <andreas.tepe@debitel.net>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20210915185611.6195-1-ebmajor.dev@gmail.com
    Peter Oh authored and Kalle Valo committed Dec 8, 2021
  4. ath11k: add wait operation for tx management packets for flush from m…

    …ac80211
    
    In ath11k, tx of management packet is doing in a work queue. Sometimes
    the workqueue does not finish tx immediately, then it lead after the next
    step of vdev delete finished, it start to send the management packet to
    firmware and lead firmware crash.
    
    ieee80211_set_disassoc() have logic of ieee80211_flush_queues() after
    it send_deauth_disassoc() to ath11k, its purpose is make sure the
    deauth was actually sent, so it need to change ath11k to match the
    purpose of mac80211.
    
    To address these issue wait for tx mgmt as well as tx data packets.
    
    dmesg log of connect/disconnect to AP:
    [  307.522226] wls1: authenticate with 62:66:e4:e9:6a:a9
    [  307.586565] wls1: send auth to 62:66:e4:e9:6a:a9 (try 1/3)
    [  307.586581] ath11k_pci 0000:05:00.0: mac tx mgmt frame, buf id 0
    [  307.586922] ath11k_pci 0000:05:00.0: mac tx mgmt frame, vdev_id 0
    [  307.590179] ath11k_pci 0000:05:00.0: wmi mgmt tx comp pending 0 desc id 0
    [  307.590181] ath11k_pci 0000:05:00.0: mgmt tx compl ev pdev_id 2, desc_id 0, status 0
    [  307.598699] wls1: authenticated
    [  307.599483] wls1: associate with 62:66:e4:e9:6a:a9 (try 1/3)
    [  307.599506] ath11k_pci 0000:05:00.0: mac tx mgmt frame, buf id 0
    [  307.599519] ath11k_pci 0000:05:00.0: mac tx mgmt frame, vdev_id 0
    [  307.603059] ath11k_pci 0000:05:00.0: wmi mgmt tx comp pending 0 desc id 0
    [  307.603063] ath11k_pci 0000:05:00.0: mgmt tx compl ev pdev_id 2, desc_id 0, status 0
    [  307.637105] wls1: associated
    [  317.365239] wls1: deauthenticating from 62:66:e4:e9:6a:a9 by local choice (Reason: 3=DEAUTH_LEAVING)
    [  317.368104] ath11k_pci 0000:05:00.0: mac tx mgmt frame, buf id 0
    [  317.372622] ath11k_pci 0000:05:00.0: mac tx mgmt frame, vdev_id 0
    [  317.378320] ath11k_pci 0000:05:00.0: wmi mgmt tx comp pending 0 desc id 0
    [  317.378330] ath11k_pci 0000:05:00.0: mgmt tx compl ev pdev_id 2, desc_id 0, status 0
    [  317.378359] ath11k_pci 0000:05:00.0: mac mgmt tx flush mgmt pending 0
    [  317.421066] ath11k_pci 0000:05:00.0: mac mgmt tx flush mgmt pending 0
    [  317.421427] ath11k_pci 0000:05:00.0: mac remove interface (vdev 0)
    
    Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01230-QCAHSTSWPLZ_V2_TO_X86-1
    Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
    
    Signed-off-by: Wen Gong <quic_wgong@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211202063705.14321-1-quic_wgong@quicinc.com
    Wen Gong authored and Kalle Valo committed Dec 8, 2021
  5. carl9170: Use the bitmap API when applicable

    Use 'bitmap_zalloc()' to simplify code, improve the semantic and avoid some
    open-coded arithmetic in allocator arguments.
    
    Note, that this 'bitmap_zalloc()' divides by BITS_PER_LONG the amount of
    memory allocated.
    The 'roundup()' used to computed the number of needed long should have
    been a DIV_ROUND_UP.
    
    
    Also change the corresponding 'kfree()' into 'bitmap_free()' to keep
    consistency.
    
    Use 'bitmap_zero()' to avoid hand writing it.
    
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Acked-by: Christian Lamparter <chunkeey@gmail.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/1fe18fb73f71d855043c40c83865ad539f326478.1638396221.git.christophe.jaillet@wanadoo.fr
    tititiou36 authored and Kalle Valo committed Dec 8, 2021
  6. wcn36xx: Fix max channels retrieval

    Kernel test robot reported:drivers/net/wireless/ath/wcn36xx/smd.c:943:33:
       sparse: sparse: cast truncates bits from constant value (780 becomes 80)
    
    The 'channels' field is not a simple u8 array but an array of
    channel_params. Using sizeof for retrieving the max number of
    channels is then wrong.
    
    In practice, it was not an issue, because the sizeof returned
    value is 780, which is truncated in min_t (u8) to 80, which is
    the value we expect...
    
    Fix that properly using ARRAY_SIZE instead of sizeof.
    
    Fixes: d707f81 ("wcn36xx: Channel list update before hardware scan")
    Reported-by: kernel test robot <lkp@intel.com>
    Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/1638435732-14657-1-git-send-email-loic.poulain@linaro.org
    Loic Poulain authored and Kalle Valo committed Dec 8, 2021
  7. ath11k: add 11d scan offload support

    Add handler for WMI_11D_NEW_COUNTRY_EVENTID, WMI_11D_SCAN_START_CMDID,
    WMI_11D_SCAN_STOP_CMDID.
    
    After vdev create for STATION, send WMI_11D_SCAN_START_CMDID to firmware
    and wait firmware complete it, the scan from mac80211 also need to wait
    the 11d scan finished, and send WMI_11D_SCAN_STOP_CMDID to firmware
    before vdev delete for STATION.
    
    Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01230-QCAHSTSWPLZ_V2_TO_X86-1
    
    Signed-off-by: Wen Gong <quic_wgong@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211201071745.17746-4-quic_wgong@quicinc.com
    Wen Gong authored and Kalle Valo committed Dec 8, 2021
  8. ath11k: add configure country code for QCA6390 and WCN6855

    Add handler to send WMI_SET_CURRENT_COUNTRY_CMDID to firmware which
    is used for QCA6390 and WCN6855.
    
    Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
    Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
    
    Signed-off-by: Wen Gong <quic_wgong@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211201071745.17746-3-quic_wgong@quicinc.com
    Wen Gong authored and Kalle Valo committed Dec 8, 2021
  9. ath11k: avoid deadlock by change ieee80211_queue_work for regd_update…

    …_work
    
    When enable debug config, it print below warning while shut down wlan
    interface shuh as run "ifconfig wlan0 down".
    
    The reason is because ar->regd_update_work is ran once, and it is will
    call wiphy_lock(ar->hw->wiphy) in function ath11k_regd_update() which
    is running in workqueue of ieee80211_local queued by ieee80211_queue_work().
    Another thread from "ifconfig wlan0 down" will also accuqire the lock
    by wiphy_lock(sdata->local->hw.wiphy) in function ieee80211_stop(), and
    then it call ieee80211_stop_device() to flush_workqueue(local->workqueue),
    this will wait the workqueue of ieee80211_local finished. Then deadlock
    will happen easily if the two thread run meanwhile.
    
    Below warning disappeared after this change.
    
    [  914.088798] ath11k_pci 0000:05:00.0: mac remove interface (vdev 0)
    [  914.088806] ath11k_pci 0000:05:00.0: mac stop 11d scan
    [  914.088810] ath11k_pci 0000:05:00.0: mac stop 11d vdev id 0
    [  914.088827] ath11k_pci 0000:05:00.0: htc ep 2 consumed 1 credits (total 0)
    [  914.088841] ath11k_pci 0000:05:00.0: send 11d scan stop vdev id 0
    [  914.088849] ath11k_pci 0000:05:00.0: htc insufficient credits ep 2 required 1 available 0
    [  914.088856] ath11k_pci 0000:05:00.0: htc insufficient credits ep 2 required 1 available 0
    [  914.096434] ath11k_pci 0000:05:00.0: rx ce pipe 2 len 16
    [  914.096442] ath11k_pci 0000:05:00.0: htc ep 2 got 1 credits (total 1)
    [  914.096481] ath11k_pci 0000:05:00.0: htc ep 2 consumed 1 credits (total 0)
    [  914.096491] ath11k_pci 0000:05:00.0: WMI vdev delete id 0
    [  914.111598] ath11k_pci 0000:05:00.0: rx ce pipe 2 len 16
    [  914.111628] ath11k_pci 0000:05:00.0: htc ep 2 got 1 credits (total 1)
    [  914.114659] ath11k_pci 0000:05:00.0: rx ce pipe 2 len 20
    [  914.114742] ath11k_pci 0000:05:00.0: htc rx completion ep 2 skb         pK-error
    [  914.115977] ath11k_pci 0000:05:00.0: vdev delete resp for vdev id 0
    [  914.116685] ath11k_pci 0000:05:00.0: vdev 00:03:7f:29:61:11 deleted, vdev_id 0
    
    [  914.117583] ======================================================
    [  914.117592] WARNING: possible circular locking dependency detected
    [  914.117600] 5.16.0-rc1-wt-ath+ #1 Tainted: G           OE
    [  914.117611] ------------------------------------------------------
    [  914.117618] ifconfig/2805 is trying to acquire lock:
    [  914.117628] ffff9c00a62bb548 ((wq_completion)phy0){+.+.}-{0:0}, at: flush_workqueue+0x87/0x470
    [  914.117674]
                   but task is already holding lock:
    [  914.117682] ffff9c00baea07d0 (&rdev->wiphy.mtx){+.+.}-{4:4}, at: ieee80211_stop+0x38/0x180 [mac80211]
    [  914.117872]
                   which lock already depends on the new lock.
    
    [  914.117880]
                   the existing dependency chain (in reverse order) is:
    [  914.117888]
                   -> #3 (&rdev->wiphy.mtx){+.+.}-{4:4}:
    [  914.117910]        __mutex_lock+0xa0/0x9c0
    [  914.117930]        mutex_lock_nested+0x1b/0x20
    [  914.117944]        reg_process_self_managed_hints+0x3a/0xb0 [cfg80211]
    [  914.118093]        wiphy_regulatory_register+0x47/0x80 [cfg80211]
    [  914.118229]        wiphy_register+0x84f/0x9c0 [cfg80211]
    [  914.118353]        ieee80211_register_hw+0x6b1/0xd90 [mac80211]
    [  914.118486]        ath11k_mac_register+0x6af/0xb60 [ath11k]
    [  914.118550]        ath11k_core_qmi_firmware_ready+0x383/0x4a0 [ath11k]
    [  914.118598]        ath11k_qmi_driver_event_work+0x347/0x4a0 [ath11k]
    [  914.118656]        process_one_work+0x228/0x670
    [  914.118669]        worker_thread+0x4d/0x440
    [  914.118680]        kthread+0x16d/0x1b0
    [  914.118697]        ret_from_fork+0x22/0x30
    [  914.118714]
                   -> #2 (rtnl_mutex){+.+.}-{4:4}:
    [  914.118736]        __mutex_lock+0xa0/0x9c0
    [  914.118751]        mutex_lock_nested+0x1b/0x20
    [  914.118767]        rtnl_lock+0x17/0x20
    [  914.118783]        ath11k_regd_update+0x15a/0x260 [ath11k]
    [  914.118841]        ath11k_regd_update_work+0x15/0x20 [ath11k]
    [  914.118897]        process_one_work+0x228/0x670
    [  914.118909]        worker_thread+0x4d/0x440
    [  914.118920]        kthread+0x16d/0x1b0
    [  914.118934]        ret_from_fork+0x22/0x30
    [  914.118948]
                   -> #1 ((work_completion)(&ar->regd_update_work)){+.+.}-{0:0}:
    [  914.118972]        process_one_work+0x1fa/0x670
    [  914.118984]        worker_thread+0x4d/0x440
    [  914.118996]        kthread+0x16d/0x1b0
    [  914.119010]        ret_from_fork+0x22/0x30
    [  914.119023]
                   -> #0 ((wq_completion)phy0){+.+.}-{0:0}:
    [  914.119045]        __lock_acquire+0x146d/0x1cf0
    [  914.119057]        lock_acquire+0x19b/0x360
    [  914.119067]        flush_workqueue+0xae/0x470
    [  914.119084]        ieee80211_stop_device+0x3b/0x50 [mac80211]
    [  914.119260]        ieee80211_do_stop+0x5d7/0x830 [mac80211]
    [  914.119409]        ieee80211_stop+0x45/0x180 [mac80211]
    [  914.119557]        __dev_close_many+0xb3/0x120
    [  914.119573]        __dev_change_flags+0xc3/0x1d0
    [  914.119590]        dev_change_flags+0x29/0x70
    [  914.119605]        devinet_ioctl+0x653/0x810
    [  914.119620]        inet_ioctl+0x193/0x1e0
    [  914.119631]        sock_do_ioctl+0x4d/0xf0
    [  914.119649]        sock_ioctl+0x262/0x340
    [  914.119665]        __x64_sys_ioctl+0x96/0xd0
    [  914.119678]        do_syscall_64+0x3d/0xd0
    [  914.119694]        entry_SYSCALL_64_after_hwframe+0x44/0xae
    [  914.119709]
                   other info that might help us debug this:
    
    [  914.119717] Chain exists of:
                     (wq_completion)phy0 --> rtnl_mutex --> &rdev->wiphy.mtx
    
    [  914.119745]  Possible unsafe locking scenario:
    
    [  914.119752]        CPU0                    CPU1
    [  914.119758]        ----                    ----
    [  914.119765]   lock(&rdev->wiphy.mtx);
    [  914.119778]                                lock(rtnl_mutex);
    [  914.119792]                                lock(&rdev->wiphy.mtx);
    [  914.119807]   lock((wq_completion)phy0);
    [  914.119819]
                    *** DEADLOCK ***
    
    [  914.119827] 2 locks held by ifconfig/2805:
    [  914.119837]  #0: ffffffffba3dc010 (rtnl_mutex){+.+.}-{4:4}, at: rtnl_lock+0x17/0x20
    [  914.119872]  #1: ffff9c00baea07d0 (&rdev->wiphy.mtx){+.+.}-{4:4}, at: ieee80211_stop+0x38/0x180 [mac80211]
    [  914.120039]
                   stack backtrace:
    [  914.120048] CPU: 0 PID: 2805 Comm: ifconfig Tainted: G           OE     5.16.0-rc1-wt-ath+ #1
    [  914.120064] Hardware name: LENOVO 418065C/418065C, BIOS 83ET63WW (1.33 ) 07/29/2011
    [  914.120074] Call Trace:
    [  914.120084]  <TASK>
    [  914.120094]  dump_stack_lvl+0x73/0xa4
    [  914.120119]  dump_stack+0x10/0x12
    [  914.120135]  print_circular_bug.isra.44+0x221/0x2e0
    [  914.120165]  check_noncircular+0x106/0x150
    [  914.120203]  __lock_acquire+0x146d/0x1cf0
    [  914.120215]  ? __lock_acquire+0x146d/0x1cf0
    [  914.120245]  lock_acquire+0x19b/0x360
    [  914.120259]  ? flush_workqueue+0x87/0x470
    [  914.120286]  ? lockdep_init_map_type+0x6b/0x250
    [  914.120310]  flush_workqueue+0xae/0x470
    [  914.120327]  ? flush_workqueue+0x87/0x470
    [  914.120344]  ? lockdep_hardirqs_on+0xd7/0x150
    [  914.120391]  ieee80211_stop_device+0x3b/0x50 [mac80211]
    [  914.120565]  ? ieee80211_stop_device+0x3b/0x50 [mac80211]
    [  914.120736]  ieee80211_do_stop+0x5d7/0x830 [mac80211]
    [  914.120906]  ieee80211_stop+0x45/0x180 [mac80211]
    [  914.121060]  __dev_close_many+0xb3/0x120
    [  914.121081]  __dev_change_flags+0xc3/0x1d0
    [  914.121109]  dev_change_flags+0x29/0x70
    [  914.121131]  devinet_ioctl+0x653/0x810
    [  914.121149]  ? __might_fault+0x77/0x80
    [  914.121179]  inet_ioctl+0x193/0x1e0
    [  914.121194]  ? inet_ioctl+0x193/0x1e0
    [  914.121218]  ? __might_fault+0x77/0x80
    [  914.121238]  ? _copy_to_user+0x68/0x80
    [  914.121266]  sock_do_ioctl+0x4d/0xf0
    [  914.121283]  ? inet_stream_connect+0x60/0x60
    [  914.121297]  ? sock_do_ioctl+0x4d/0xf0
    [  914.121329]  sock_ioctl+0x262/0x340
    [  914.121347]  ? sock_ioctl+0x262/0x340
    [  914.121362]  ? exit_to_user_mode_prepare+0x13b/0x280
    [  914.121388]  ? syscall_enter_from_user_mode+0x20/0x50
    [  914.121416]  __x64_sys_ioctl+0x96/0xd0
    [  914.121430]  ? br_ioctl_call+0x90/0x90
    [  914.121445]  ? __x64_sys_ioctl+0x96/0xd0
    [  914.121465]  do_syscall_64+0x3d/0xd0
    [  914.121482]  entry_SYSCALL_64_after_hwframe+0x44/0xae
    [  914.121497] RIP: 0033:0x7f0ed051737b
    [  914.121513] Code: 0f 1e fa 48 8b 05 15 3b 0d 00 64 c7 00 26 00 00 00 48 c7 c0 ff ff ff ff c3 66 0f 1f 44 00 00 f3 0f 1e fa b8 10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d e5 3a 0d 00 f7 d8 64 89 01 48
    [  914.121527] RSP: 002b:00007fff7be38b98 EFLAGS: 00000202 ORIG_RAX: 0000000000000010
    [  914.121544] RAX: ffffffffffffffda RBX: 00007fff7be38ba0 RCX: 00007f0ed051737b
    [  914.121555] RDX: 00007fff7be38ba0 RSI: 0000000000008914 RDI: 0000000000000004
    [  914.121566] RBP: 00007fff7be38c60 R08: 000000000000000a R09: 0000000000000001
    [  914.121576] R10: 0000000000000000 R11: 0000000000000202 R12: 00000000fffffffe
    [  914.121586] R13: 0000000000000004 R14: 0000000000000000 R15: 0000000000000000
    [  914.121620]  </TASK>
    
    Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
    
    Signed-off-by: Wen Gong <quic_wgong@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211201071745.17746-2-quic_wgong@quicinc.com
    Wen Gong authored and Kalle Valo committed Dec 8, 2021

Commits on Dec 7, 2021

  1. ath11k: change to use dynamic memory for channel list of scan

    Currently there are about 60 channels for 6 GHz, then the size of
    chan_list in struct scan_req_params which is 40 is not enough to
    fill all the channel list of 6 GHz.
    
    Use dynamic memory to save the channel list of scan.
    
    Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
    
    Signed-off-by: Wen Gong <quic_wgong@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211129110939.15711-1-quic_wgong@quicinc.com
    Wen Gong authored and Kalle Valo committed Dec 7, 2021
  2. ath11k: Fix QMI file type enum value

    bdf_type for caldata in QMI_WLANFW_BDF_DOWNLOAD_REQ_V01 is wrongly
    sent as 1. But, expected bdf_type value for caldata and EEPROM is 2 and 3
    respectively. It leads to firmware crash. Fix ath11k_qmi_file_type enum
    values.
    
    Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.5.0.1-01100-QCAHKSWPL_SILICONZ-1
    Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-00192-QCAHKSWPL_SILICONZ-1
    
    Fixes: 336e7b5 ("ath11k: clean up BDF download functions")
    Signed-off-by: Seevalamuthu Mariappan <quic_seevalam@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/1638182754-18408-1-git-send-email-quic_seevalam@quicinc.com
    Seevalamuthu Mariappan authored and Kalle Valo committed Dec 7, 2021
  3. ath11k: add support for WCN6855 hw2.1

    Ath11k fails to probe WCN6855 hw2.1 chip:
    
    [ 6.983821] ath11k_pci 0000:06:00.0: enabling device (0000 -> 0002)
    [ 6.983841] ath11k_pci 0000:06:00.0: Unsupported WCN6855 SOC hardware version: 18 17
    
    This is caused by the wrong bit mask setting of hardware major version:
    for QCA6390/QCN6855, it should be BIT8-11, not BIT8-16, so change the
    definition to GENMASK(11, 8).
    
    Also, add a separate entry for WCN6855 hw2.1 in ath11k_hw_params.
    
    Please note that currently WCN6855 hw2.1 shares the same firmwares
    as hw2.0, so users of this chip need to create a symlink as below:
    
    	ln -s hw2.0 hw2.1
    
    Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
    Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
    Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
    
    Fixes: 18ac166 ("ath11k: pci: check TCSR_SOC_HW_VERSION")
    Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20211129025613.21594-1-quic_bqiang@quicinc.com
    Baochen Qiang authored and Kalle Valo committed Dec 7, 2021
Older