1. 01 Oct, 2020 40 commits
    • Kalle Valo's avatar
      Merge ath-next from git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git · 70442ee6
      Kalle Valo authored
      ath.git patches for v5.10. Major changes:
      
      ath11k
      
      * improvements to QCA6390 PCI support, adding essential missing
        features: ELF board files, packet log handling to avoid data stalls
        and crash fixes
      70442ee6
    • Loic Poulain's avatar
      wcn36xx: Advertise beacon filtering support in bmps · fd5ad4d1
      Loic Poulain authored
      In bmps mode, beacons are filtered, and firmware is in charge
      of monitoring the beacons and report changes or loss.
      
      mac80211 must be advertised about such change to prevent it's
      internal timer based beacon monitor to report beacon loss.
      
      Fix that by setting/clearing the IEEE80211_VIF_BEACON_FILTER
      vif flag on bmps entry/exit.
      Signed-off-by: default avatarLoic Poulain <loic.poulain@linaro.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1592471863-31402-2-git-send-email-loic.poulain@linaro.org
      fd5ad4d1
    • Kalle Valo's avatar
      ath11k: remove unnecessary casts to u32 · 404f5de2
      Kalle Valo authored
      These casts are not needed. No changes in functionality.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601544890-13450-9-git-send-email-kvalo@codeaurora.org
      404f5de2
    • Carl Huang's avatar
      ath11k: enable idle power save mode · c83c500b
      Carl Huang authored
      Host sends wmi command to allow hardware enter idle power
      save mode in ath11k_mac_op_start function.
      
      hw parameter idle_ps indicates whether idle power save is supported.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarCarl Huang <cjhuang@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601544890-13450-8-git-send-email-kvalo@codeaurora.org
      c83c500b
    • Carl Huang's avatar
      ath11k: start a timer to update HP for CE pipe 4 · 9b309970
      Carl Huang authored
      For QCA6390, Start a timer to update CE pipe 4 ring HP when shadow
      register is enabled. Its' to avoid that HP isn't updated to target
      register.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarCarl Huang <cjhuang@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601544890-13450-7-git-send-email-kvalo@codeaurora.org
      9b309970
    • Carl Huang's avatar
      ath11k: start a timer to update REO cmd ring · 506e7e9b
      Carl Huang authored
      Start a timer to update REO HP if HP isn't updated to target.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarCarl Huang <cjhuang@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601544890-13450-6-git-send-email-kvalo@codeaurora.org
      506e7e9b
    • Carl Huang's avatar
      ath11k: start a timer to update TCL HP · 8ec5a6ab
      Carl Huang authored
      The timer is to check if TCL HP isn't updated to target.
      The timer will postpone itself if there are TX operations
      during the interval, otherwise the timer handler updates
      the HP again so the index value in HP register will be
      forwarded to target register, and the timer stops afterwards.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarCarl Huang <cjhuang@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601544890-13450-5-git-send-email-kvalo@codeaurora.org
      8ec5a6ab
    • Carl Huang's avatar
      ath11k: set WMI pipe credit to 1 for QCA6390 · 9df6d839
      Carl Huang authored
      For QCA6390, set wmi credit to 1 to avoid back-to-back write to
      shadow register when shadow register is enabled.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarCarl Huang <cjhuang@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601544890-13450-4-git-send-email-kvalo@codeaurora.org
      9df6d839
    • Carl Huang's avatar
      ath11k: enable shadow register configuration and access · e838c14a
      Carl Huang authored
      To enable shadow register access, host needs to pass shadow
      register configuration to firmware via qmi message. Host also
      needs to update ring's HP or TP address to shadow register
      address. The write operation to shadow register will be
      forwarded to target register by hardware automatically, and
      the write operation to shadow register is permitted even
      when the target is in power save or sleep mode.
      
      Update the shadow config whenever power up happens.
      
      This feature is controlled by hw parameter supports_shadow_regs which is only
      enabled for QCA6390.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarCarl Huang <cjhuang@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601544890-13450-3-git-send-email-kvalo@codeaurora.org
      e838c14a
    • Carl Huang's avatar
      ath11k: read and write registers below unwindowed address · a05bd851
      Carl Huang authored
      For QCA6390, host can read and write registers below unwindowed
      address directly without programming the window register. For
      registers below bar0 + 4k - 32, host can read and write regardless
      of the power save state. Shadow registers are located below
      bar0 + 4K - 32.
      
      Before MHI power up, there is no need to wakeup MHI so ini_done is
      added to indicate it.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarCarl Huang <cjhuang@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601544890-13450-2-git-send-email-kvalo@codeaurora.org
      a05bd851
    • Carl Huang's avatar
      ath11k: debugfs: fix crash during rmmod · 089ba909
      Carl Huang authored
      With QCA6390 when doing rmmod the kernel crashed. The reason was that the
      destroy functions ath11k_debugfs_pdev_destroy() and ath11k_debugfs_soc_destroy()
      accidentally had swapped the debugfs directories and
      ath11k_debugfs_soc_destroy() was removing an already removed directory, which
      crashed the kernel.
      
      The source of confusion is badly named function and variable names. I think the
      best way to clean this up is actually to merge the corresponding functions, but
      that's for another patch. Let's first just fix the crash.
      
      [   43.430245] ------------[ cut here ]------------
      [   43.430247] DEBUG_LOCKS_WARN_ON(1)
      [   43.430253] WARNING: CPU: 4 PID: 2148 at kernel/locking/lockdep.c:183 check_wait_context+0x231/0x290
      [   43.430255] Modules linked in: ath11k_pci(-) ath11k qmi_helpers qrtr_mhi mhi qrtr ns nvme nvme_core
      [   43.430261] CPU: 4 PID: 2148 Comm: rmmod Not tainted 5.9.0-rc5-wt-ath+ #198
      [   43.430262] Hardware name: Intel(R) Client Systems NUC8i7HVK/NUC8i7HVB, BIOS HNKBLi70.86A.0049.2018.0801.1601 08/01/2018
      [   43.430265] RIP: 0010:check_wait_context+0x231/0x290
      [   43.430267] Code: ff ff e8 42 83 bf 00 85 c0 74 f0 44 8b 15 af 0d 90 01 45 85 d2 75 e4 48 c7 c6 7f e5 37 8d 48 c7 c7 8d 81 34 8d e8 c3 01 fa ff <0f> 0b 31 c0 e9 01 fe ff f
      [   43.430268] RSP: 0018:ffffa36140f23bf8 EFLAGS: 00010082
      [   43.430270] RAX: 0000000000000000 RBX: e7a8b0f303fcdbd7 RCX: 0000000000000000
      [   43.430272] RDX: 0000000000000016 RSI: ffffffff8bee5824 RDI: ffffffff8d66fd60
      [   43.430273] RBP: ffff936573551d80 R08: 0000000a1ca4fc0e R09: 0000000000000016
      [   43.430275] R10: 0000000000000046 R11: ffffa36140f23a35 R12: ffff936573552670
      [   43.430276] R13: 0000000000000000 R14: ffff936573552638 R15: 0000000000000001
      [   43.430278] FS:  00007f03e78c8700(0000) GS:ffff93659c800000(0000) knlGS:0000000000000000
      [   43.430280] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   43.430282] CR2: 000056424768fee8 CR3: 00000001f7b46003 CR4: 00000000003706e0
      [   43.430283] Call Trace:
      [   43.430286]  __lock_acquire+0x1c0/0x6e0
      [   43.430289]  lock_acquire+0xb6/0x270
      [   43.430292]  ? lockref_get+0x9/0x20
      [   43.430295]  ? lock_acquire+0xb6/0x270
      [   43.430297]  ? simple_pin_fs+0x1d/0xa0
      [   43.430299]  ? find_held_lock+0x32/0x90
      [   43.430303]  _raw_spin_lock+0x2c/0x70
      [   43.430305]  ? lockref_get+0x9/0x20
      [   43.430306]  lockref_get+0x9/0x20
      [   43.430308]  simple_recursive_removal+0x31/0x2f0
      [   43.430310]  ? debugfs_rename+0x40/0x40
      [   43.430312]  debugfs_remove+0x3b/0x60
      [   43.430320]  ath11k_debug_soc_destroy+0x10/0x20 [ath11k]
      [   43.430325]  ath11k_core_deinit+0xab/0xd0 [ath11k]
      [   43.430327]  ath11k_pci_remove+0x1b/0xb0 [ath11k_pci]
      [   43.430329]  pci_device_remove+0x36/0x90
      [   43.430331]  __device_release_driver+0x16c/0x220
      [   43.430333]  driver_detach+0xcf/0x110
      [   43.430334]  bus_remove_driver+0x4d/0xa2
      [   43.430336]  pci_unregister_driver+0x25/0xa0
      [   43.430338]  __do_sys_delete_module+0x163/0x240
      [   43.430340]  ? lockdep_hardirqs_on_prepare.part.0+0x9f/0x140
      [   43.430342]  ? syscall_enter_from_user_mode+0x1d/0x50
      [   43.430343]  ? trace_hardirqs_on+0x1c/0x100
      [   43.430345]  do_syscall_64+0x33/0x40
      [   43.430347]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
      [   43.430348] RIP: 0033:0x7f03e73f89e7
      [   43.430350] Code: 73 01 c3 48 8b 0d b1 c4 2b 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 b8 b0 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c
      [   43.430351] RSP: 002b:00007ffdb61d6198 EFLAGS: 00000202 ORIG_RAX: 00000000000000b0
      [   43.430352] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f03e73f89e7
      [   43.430353] RDX: 000000000000000a RSI: 0000000000000800 RDI: 0000556f67d922e8
      [   43.430354] RBP: 0000556f67d92280 R08: 0000000000000000 R09: 1999999999999999
      [   43.430355] R10: 0000000000000883 R11: 0000000000000202 R12: 00007ffdb61d63b0
      [   43.430356] R13: 00007ffdb61d7917 R14: 0000000000000000 R15: 0000556f67d92280
      [   43.430358] irq event stamp: 240801
      [   43.430360] hardirqs last  enabled at (240801): [<ffffffff8c02d0e5>] cmpxchg_double_slab.constprop.0+0x185/0x1a0
      [   43.430362] hardirqs last disabled at (240800): [<ffffffff8c02d03e>] cmpxchg_double_slab.constprop.0+0xde/0x1a0
      [   43.430364] softirqs last  enabled at (240680): [<ffffffffc01eee37>] ath11k_pci_read32+0x87/0xe0 [ath11k_pci]
      [   43.430365] softirqs last disabled at (240678): [<ffffffffc01eedf8>] ath11k_pci_read32+0x48/0xe0 [ath11k_pci]
      [   43.430366] ---[ end trace dc96c4234c294fe8 ]---
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarCarl Huang <cjhuang@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601463073-12106-6-git-send-email-kvalo@codeaurora.org
      089ba909
    • Carl Huang's avatar
      ath11k: fix warning caused by lockdep_assert_held · 2f588660
      Carl Huang authored
      Fix warning caused by lockdep_assert_held when CONFIG_LOCKDEP is enabled.
      
      [  271.940647] WARNING: CPU: 6 PID: 0 at drivers/net/wireless/ath/ath11k/hal.c:818 ath11k_hal_srng_access_begin+0x31/0x40 [ath11k]
      [  271.940655] Modules linked in: qrtr_mhi qrtr ns ath11k_pci mhi ath11k qmi_helpers nvme nvme_core
      [  271.940675] CPU: 6 PID: 0 Comm: swapper/6 Kdump: loaded Tainted: G        W         5.9.0-rc5-kalle-bringup-wt-ath+ #4
      [  271.940682] Hardware name: Dell Inc. Inspiron 7590/08717F, BIOS 1.3.0 07/22/2019
      [  271.940698] RIP: 0010:ath11k_hal_srng_access_begin+0x31/0x40 [ath11k]
      [  271.940708] Code: 48 89 f3 85 c0 75 11 48 8b 83 a8 00 00 00 8b 00 89 83 b0 00 00 00 5b c3 48 8d 7e 58 be ff ff ff ff e8 53 24 ec fa 85 c0 75 dd <0f> 0b eb d9 90 66 2e 0f 1f 84 00 00 00 00 00 55 53 48 89 f3 8b 35
      [  271.940718] RSP: 0018:ffffbdf0c0230df8 EFLAGS: 00010246
      [  271.940727] RAX: 0000000000000000 RBX: ffffa12b34e67680 RCX: ffffa12b57a0d800
      [  271.940735] RDX: 0000000000000000 RSI: 00000000ffffffff RDI: ffffa12b34e676d8
      [  271.940742] RBP: ffffa12b34e60000 R08: 0000000000000001 R09: 0000000000000001
      [  271.940753] R10: 0000000000000001 R11: 0000000000000046 R12: 0000000000000000
      [  271.940763] R13: ffffa12b34e60000 R14: ffffa12b34e60000 R15: 0000000000000000
      [  271.940774] FS:  0000000000000000(0000) GS:ffffa12b5a400000(0000) knlGS:0000000000000000
      [  271.940788] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  271.940798] CR2: 00007f8bef282008 CR3: 00000001f4224004 CR4: 00000000003706e0
      [  271.940805] Call Trace:
      [  271.940813]  <IRQ>
      [  271.940835]  ath11k_dp_tx_completion_handler+0x9e/0x950 [ath11k]
      [  271.940847]  ? lock_acquire+0xba/0x3b0
      [  271.940876]  ath11k_dp_service_srng+0x5a/0x2e0 [ath11k]
      [  271.940893]  ath11k_pci_ext_grp_napi_poll+0x1e/0x80 [ath11k_pci]
      [  271.940908]  net_rx_action+0x283/0x4f0
      [  271.940931]  __do_softirq+0xcb/0x499
      [  271.940950]  asm_call_on_stack+0x12/0x20
      [  271.940963]  </IRQ>
      [  271.940979]  do_softirq_own_stack+0x4d/0x60
      [  271.940991]  irq_exit_rcu+0xb0/0xc0
      [  271.941001]  common_interrupt+0xce/0x190
      [  271.941014]  asm_common_interrupt+0x1e/0x40
      [  271.941026] RIP: 0010:cpuidle_enter_state+0x115/0x500
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarCarl Huang <cjhuang@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601463073-12106-5-git-send-email-kvalo@codeaurora.org
      2f588660
    • Wen Gong's avatar
      ath11k: mac: remove unused conf_mutex to solve a deadlock · 7fd85517
      Wen Gong authored
      The conf_mutex is not use and lead below deadlock, remove it to solve
      the deadlock issue.
      
      [   44.967496] NET: Registered protocol family 42
      [   45.119629] ath11k_pci 0000:06:00.0: WARNING: ath11k PCI support is experimental!
      [   45.120087] ath11k_pci 0000:06:00.0: BAR 0: assigned [mem 0xdc000000-0xdc0fffff 64bit]
      [   45.120108] ath11k_pci 0000:06:00.0: enabling device (0000 -> 0002)
      [   45.206525] ath11k_pci 0000:06:00.0: aspm 0x42 changed to 0x40
      [   45.207430] mhi 0000:06:00.0: Requested to power ON
      [   45.208609] mhi 0000:06:00.0: Power on setup success
      [   46.190711] ath11k_pci 0000:06:00.0: chip_id 0x0 chip_family 0xb board_id 0x101 soc_id 0xffffffff
      [   46.190729] ath11k_pci 0000:06:00.0: fw_version 0x306a70f fw_build_timestamp 2000-01-01 00:00 fw_build_id
      1]: Starting Load/Save RF Kill Switch Status...
      [   46.385118] ath11k_pci 0000:06:00.0 wlp6s0: renamed from wlan0
      1]: Started Load/Save RF Kill Switch Status.
      [   53.566669] wlp6s0: authenticate with 00:03:7f:48:dd:bf
      [   53.809092] wlp6s0: send auth to 00:03:7f:48:dd:bf (try 1/3)
      [   53.816490] wlp6s0: authenticated
      [   53.818618] wlp6s0: associate with 00:03:7f:48:dd:bf (try 1/3)
      [   53.820839] wlp6s0: RX AssocResp from 00:03:7f:48:dd:bf (capab=0x1 status=0 aid=2)
      [   53.834859]
      [   53.834861] ======================================================
      [   53.834862] WARNING: possible circular locking dependency detected
      [   53.834863] 5.9.0-rc5-wt-ath+ #198 Not tainted
      [   53.834864] ------------------------------------------------------
      [   53.834865] kworker/u16:3/166 is trying to acquire lock:
      [   53.834866] ffff8c4b37184f78 (&ar->conf_mutex){+.+.}-{3:3}, at: ath11k_mac_op_config+0x16/0x30 [ath11k]
      [   53.834875]
      [   53.834875] but task is already holding lock:
      [   53.834876] ffff8c4b37182808 (&local->iflist_mtx){+.+.}-{3:3}, at: ieee80211_set_associated+0x167/0x360
      [   53.834879]
      [   53.834879] which lock already depends on the new lock.
      [   53.834879]
      [   53.834880]
      [   53.834880] the existing dependency chain (in reverse order) is:
      [   53.834881]
      [   53.834881] -> #1 (&local->iflist_mtx){+.+.}-{3:3}:
      [   53.834884]        __lock_acquire+0x3bf/0x6e0
      [   53.834886]        lock_acquire+0xb6/0x270
      [   53.834887]        __mutex_lock+0x88/0x8e0
      [   53.834890]        ieee80211_set_hw_80211_encap+0x3e/0x1f0
      [   53.834895]        ath11k_mac_op_add_interface+0x348/0x7f0 [ath11k]
      [   53.834897]        drv_add_interface+0x7c/0x190
      [   53.834899]        ieee80211_do_open+0x552/0x9a0
      [   53.834901]        __dev_open+0xe5/0x190
      [   53.834902]        __dev_change_flags+0x1c6/0x230
      [   53.834903]        dev_change_flags+0x1c/0x50
      [   53.834905]        do_setlink+0x246/0xc60
      [   53.834906]        __rtnl_newlink+0x607/0x990
      [   53.834907]        rtnl_newlink+0x3f/0x60
      [   53.834908]        rtnetlink_rcv_msg+0x174/0x490
      [   53.834910]        netlink_rcv_skb+0x42/0x100
      [   53.834911]        netlink_unicast+0x18c/0x250
      [   53.834912]        netlink_sendmsg+0x227/0x460
      [   53.834914]        sock_sendmsg+0x59/0x60
      [   53.834915]        ____sys_sendmsg+0x1f5/0x230
      [   53.834916]        ___sys_sendmsg+0x70/0xb0
      [   53.834917]        __sys_sendmsg+0x54/0xa0
      [   53.834919]        do_syscall_64+0x33/0x40
      [   53.834920]        entry_SYSCALL_64_after_hwframe+0x44/0xa9
      [   53.834921]
      [   53.834921] -> #0 (&ar->conf_mutex){+.+.}-{3:3}:
      [   53.834923]        check_prev_add+0x98/0x9f0
      [   53.834925]        validate_chain+0x404/0x6c0
      [   53.834926]        __lock_acquire+0x3bf/0x6e0
      [   53.834927]        lock_acquire+0xb6/0x270
      [   53.834929]        __mutex_lock+0x88/0x8e0
      [   53.834934]        ath11k_mac_op_config+0x16/0x30 [ath11k]
      [   53.834935]        ieee80211_hw_config+0xb3/0x270
      [   53.834937]        ieee80211_set_associated+0x17c/0x360
      [   53.834938]        ieee80211_assoc_success.constprop.0+0x5a2/0xc80
      [   53.834940]        ieee80211_rx_mgmt_assoc_resp+0x16a/0x350
      [   53.834941]        ieee80211_sta_rx_queued_mgmt+0xca/0x410
      [   53.834943]        ieee80211_iface_work+0x1f3/0x350
      [   53.834945]        process_one_work+0x265/0x5d0
      [   53.834946]        worker_thread+0x49/0x300
      [   53.834948]        kthread+0x135/0x150
      [   53.834949]        ret_from_fork+0x22/0x30
      [   53.834950]
      [   53.834950] other info that might help us debug this:
      [   53.834950]
      [   53.834951]  Possible unsafe locking scenario:
      [   53.834951]
      [   53.834952]        CPU0                    CPU1
      [   53.834952]        ----                    ----
      [   53.834953]   lock(&local->iflist_mtx);
      [   53.834954]                                lock(&ar->conf_mutex);
      [   53.834955]                                lock(&local->iflist_mtx);
      [   53.834956]   lock(&ar->conf_mutex);
      [   53.834957]
      [   53.834957]  *** DEADLOCK ***
      [   53.834957]
      [   53.834958] 4 locks held by kworker/u16:3/166:
      [   53.834959]  #0: ffff8c4b37c22948 ((wq_completion)phy0){+.+.}-{0:0}, at: process_one_work+0x1d3/0x5d0
      [   53.834961]  #1: ffffa98300abfe70 ((work_completion)(&sdata->work)){+.+.}-{0:0}, at: process_one_work+0x1d3/0x5d0
      [   53.834963]  #2: ffff8c4b371e4cd0 (&wdev->mtx){+.+.}-{3:3}, at: ieee80211_sta_rx_queued_mgmt+0x4b/0x410
      [   53.834965]  #3: ffff8c4b37182808 (&local->iflist_mtx){+.+.}-{3:3}, at: ieee80211_set_associated+0x167/0x360
      [   53.834968]
      [   53.834968] stack backtrace:
      [   53.834969] CPU: 1 PID: 166 Comm: kworker/u16:3 Not tainted 5.9.0-rc5-wt-ath+ #198
      [   53.834970] Hardware name: Intel(R) Client Systems NUC8i7HVK/NUC8i7HVB, BIOS HNKBLi70.86A.0049.2018.0801.1601 08/01/2018
      [   53.834972] Workqueue: phy0 ieee80211_iface_work
      [   53.834974] Call Trace:
      [   53.834976]  dump_stack+0x77/0xa0
      [   53.834978]  check_noncircular+0x15d/0x180
      [   53.834980]  check_prev_add+0x98/0x9f0
      [   53.834982]  ? add_chain_cache+0x143/0x440
      [   53.834984]  validate_chain+0x404/0x6c0
      [   53.834986]  __lock_acquire+0x3bf/0x6e0
      [   53.834988]  lock_acquire+0xb6/0x270
      [   53.834993]  ? ath11k_mac_op_config+0x16/0x30 [ath11k]
      [   53.834999]  ? ath11k_mac_op_config+0x16/0x30 [ath11k]
      [   53.835001]  __mutex_lock+0x88/0x8e0
      [   53.835006]  ? ath11k_mac_op_config+0x16/0x30 [ath11k]
      [   53.835007]  ? sched_clock_cpu+0xc/0xb0
      [   53.835009]  ? __lock_release+0x179/0x2c0
      [   53.835014]  ath11k_mac_op_config+0x16/0x30 [ath11k]
      [   53.835016]  ieee80211_hw_config+0xb3/0x270
      [   53.835018]  ieee80211_set_associated+0x17c/0x360
      [   53.835019]  ieee80211_assoc_success.constprop.0+0x5a2/0xc80
      [   53.835021]  ? lockdep_hardirqs_on_prepare.part.0+0x9f/0x140
      [   53.835023]  ? cmpxchg_double_slab.constprop.0+0x185/0x1a0
      [   53.835025]  ? trace_hardirqs_on+0x1c/0x100
      [   53.835027]  ? __slab_free+0x8f/0x330
      [   53.835029]  ? slab_free_freelist_hook+0xf8/0x150
      [   53.835031]  ? ieee802_11_parse_elems_crc+0x147/0x1d0
      [   53.835032]  ? kfree+0x2b0/0x2d0
      [   53.835034]  ? ieee802_11_parse_elems_crc+0x147/0x1d0
      [   53.835036]  ieee80211_rx_mgmt_assoc_resp+0x16a/0x350
      [   53.835041]  ieee80211_sta_rx_queued_mgmt+0xca/0x410
      [   53.835043]  ? __lock_acquire+0x3bf/0x6e0
      [   53.835045]  ? lock_acquire+0xb6/0x270
      [   53.835046]  ? skb_dequeue+0x13/0x70
      [   53.835048]  ? find_held_lock+0x32/0x90
      [   53.835049]  ? sched_clock_cpu+0xc/0xb0
      [   53.835051]  ? mark_held_locks+0x50/0x80
      [   53.835053]  ? lockdep_hardirqs_on_prepare.part.0+0x9f/0x140
      [   53.835054]  ? _raw_spin_unlock_irqrestore+0x34/0x40
      [   53.835056]  ? trace_hardirqs_on+0x1c/0x100
      [   53.835058]  ieee80211_iface_work+0x1f3/0x350
      [   53.835060]  process_one_work+0x265/0x5d0
      [   53.835062]  worker_thread+0x49/0x300
      [   53.835063]  ? process_one_work+0x5d0/0x5d0
      [   53.835065]  kthread+0x135/0x150
      [   53.835066]  ? kthread_create_worker_on_cpu+0x60/0x60
      [   53.835068]  ret_from_fork+0x22/0x30
      [   53.835075] wlp6s0: associated
      [   53.835132] IPv6: ADDRCONF(NETDEV_CHANGE): wlp6s0: link becomes ready
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarWen Gong <wgong@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601463073-12106-4-git-send-email-kvalo@codeaurora.org
      7fd85517
    • Carl Huang's avatar
      ath11k: pci: fix rmmod crash · 6fbd8898
      Carl Huang authored
      For QCA6390 we first need to call free_irq() and only then disable_msi(). Otherwise a
      kernel BUG below will happen. Also free core, hal_srng and ce resources during
      ath11k_pci_remove().
      
      [ 1089.425506] ------------[ cut here ]------------
      [ 1089.425510] kernel BUG at drivers/pci/msi.c:375!
      [ 1089.425514] invalid opcode: 0000 [#1] SMP DEBUG_PAGEALLOC PTI
      [ 1089.425517] CPU: 1 PID: 20539 Comm: rmmod Not tainted 5.9.0-rc5-wt-ath+ #198
      [ 1089.425519] Hardware name: Intel(R) Client Systems NUC8i7HVK/NUC8i7HVB, BIOS HNKBLi70.86A.0049.2018.0801.1601 08/01/2018
      [ 1089.425523] RIP: 0010:free_msi_irqs+0x184/0x1b0
      [ 1089.425526] Code: 14 85 c0 0f 84 cc fe ff ff 31 ed eb 0f 83 c5 01 39 6b 14 0f 86 bc fe ff ff 8b 7b 10 01 ef e8 c3 01 bf ff 48 83 78 70 00 74 e3 <0f> 0b 49 8d b5 b0 00 00 0
      [ 1089.425528] RSP: 0018:ffffb128c0cf7dd0 EFLAGS: 00010282
      [ 1089.425530] RAX: ffff947d67549000 RBX: ffff947cd2d25200 RCX: 0000000000000000
      [ 1089.425532] RDX: ffff947d94a6f928 RSI: ffff947d94a6fa18 RDI: 0000000000000099
      [ 1089.425533] RBP: 0000000000000000 R08: ffff947d67549000 R09: ffffffff86670050
      [ 1089.425535] R10: 0000000000000000 R11: 0000000000000000 R12: ffff947d96c194f0
      [ 1089.425537] R13: ffff947d96c19000 R14: 0000000000000000 R15: ffffffffc0225250
      [ 1089.425539] FS:  00007f97c44ed700(0000) GS:ffff947d9c200000(0000) knlGS:0000000000000000
      [ 1089.425541] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [ 1089.425543] CR2: 00007f97c408d701 CR3: 0000000192bc0006 CR4: 00000000003706e0
      [ 1089.425544] Call Trace:
      [ 1089.425549]  ath11k_pci_remove+0x2b/0x90 [ath11k_pci]
      [ 1089.425553]  pci_device_remove+0x36/0x90
      [ 1089.425556]  __device_release_driver+0x16c/0x220
      [ 1089.425559]  driver_detach+0xcf/0x110
      [ 1089.425561]  bus_remove_driver+0x4d/0xa2
      [ 1089.425564]  pci_unregister_driver+0x25/0xa0
      [ 1089.425568]  __do_sys_delete_module+0x163/0x240
      [ 1089.425571]  ? trace_hardirqs_on+0x1c/0x100
      [ 1089.425575]  do_syscall_64+0x33/0x40
      [ 1089.425577]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
      [ 1089.425579] RIP: 0033:0x7f97c401d9e7
      [ 1089.425581] Code: 73 01 c3 48 8b 0d b1 c4 2b 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 b8 b0 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c
      [ 1089.425583] RSP: 002b:00007fff1e0fb728 EFLAGS: 00000206 ORIG_RAX: 00000000000000b0
      [ 1089.425585] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f97c401d9e7
      [ 1089.425587] RDX: 000000000000000a RSI: 0000000000000800 RDI: 00005585aad022e8
      [ 1089.425589] RBP: 00005585aad02280 R08: 0000000000000000 R09: 1999999999999999
      [ 1089.425591] R10: 0000000000000883 R11: 0000000000000206 R12: 00007fff1e0fb940
      [ 1089.425592] R13: 00007fff1e0fd917 R14: 0000000000000000 R15: 00005585aad02280
      [ 1089.425596] Modules linked in: ath11k_pci(-) ath11k qmi_helpers qrtr_mhi mhi qrtr ns nvme nvme_core [last unloaded: mhi]
      [ 1089.425603] ---[ end trace 2a81926cc0708a38 ]---
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarCarl Huang <cjhuang@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601463073-12106-3-git-send-email-kvalo@codeaurora.org
      6fbd8898
    • Carl Huang's avatar
      ath11k: add packet log support for QCA6390 · 701e48a4
      Carl Huang authored
      Add packet log support for QCA6390, otherwise the data connection will stall
      within a minute or so.  Enable it via debugfs and use trace-cmd to capture the
      pktlogs.
      
      echo 0xffff 1 > /sys/kernel/debug/ath11k/qca6390\ hw2.0/mac0/pktlog_filter
      
      The mon status ring doesn't support interrupt so far, so host starts
      a timer to reap this ring. The timer handler also reaps the
      rxdma_err_dst_ring in case of monitor mode.
      
      As QCA6390 requires bss created ahead of starting vdev, so check
      vdev_start_delay for monitor mode.
      
      For QCA6390, it uses wbm_desc_rel_ring to return descriptors.
      It also uses rx_refill_buf_ring to fill mon buffer instead of
      rxdma_mon_buf_ring.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarCarl Huang <cjhuang@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601463073-12106-2-git-send-email-kvalo@codeaurora.org
      701e48a4
    • Govind Singh's avatar
      ath11k: Use GFP_ATOMIC instead of GFP_KERNEL in idr_alloc · 87e8497a
      Govind Singh authored
      With SLUB DEBUG CONFIG below crash is seen as kmem_cache_alloc
      is being called in non-atomic context.
      To fix this issue, use GFP_ATOMIC instead of GFP_KERNEL in idr_alloc.
      
      BUG: sleeping function called from invalid context at mm/slab.h:393
      
      [   59.805451] Call trace:
      [   59.807971]  ___might_sleep+0x110/0x118
      [   59.811915]  __might_sleep+0x50/0x84
      [   59.815593]  kmem_cache_alloc+0x60/0x3e0
      [   59.819630]  radix_tree_node_alloc+0x4c/0xe8
      [   59.824014]  radix_tree_extend+0x8c/0x164
      [   59.828135]  idr_get_free_cmn+0xa4/0x27c
      [   59.832167]  idr_alloc_cmn+0x70/0xe8
      [   59.835856]  ath11k_dp_rxbufs_replenish+0x1e8/0x310 [ath11k]
      [   59.841687]  ath11k_dp_rxdma_ring_buf_setup+0x50/0x60 [ath11k]
      [   59.847693]  ath11k_dp_rx_pdev_alloc+0x260/0x4d8 [ath11k]
      [   59.853248]  ath11k_dp_pdev_alloc+0x40/0xc4 [ath11k]
      [   59.858357]  ath11k_core_qmi_firmware_ready+0x3c4/0x490 [ath11k]
      [   59.864538]  ath11k_qmi_driver_event_work+0x4c8/0x1178 [ath11k]
      [   59.870620]  process_one_work+0x208/0x434
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarGovind Singh <govinds@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601399736-3210-9-git-send-email-kvalo@codeaurora.org
      87e8497a
    • Wen Gong's avatar
      ath11k: Use GFP_ATOMIC instead of GFP_KERNEL in ath11k_dp_htt_get_ppdu_desc · 6a8be1ba
      Wen Gong authored
      With SLUB DEBUG CONFIG below crash is seen as kmem_cache_alloc
      is being called in non-atomic context.
      
      To fix this issue, use GFP_ATOMIC instead of GFP_KERNEL kzalloc.
      
      [  357.217088] BUG: sleeping function called from invalid context at mm/slab.h:498
      [  357.217091] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 0, name: swapper/0
      [  357.217092] INFO: lockdep is turned off.
      [  357.217095] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G        W         5.9.0-rc5-wt-ath+ #196
      [  357.217096] Hardware name: Intel(R) Client Systems NUC8i7HVK/NUC8i7HVB, BIOS HNKBLi70.86A.0049.2018.0801.1601 08/01/2018
      [  357.217097] Call Trace:
      [  357.217098]  <IRQ>
      [  357.217107]  ? ath11k_dp_htt_get_ppdu_desc+0xa9/0x170 [ath11k]
      [  357.217110]  dump_stack+0x77/0xa0
      [  357.217113]  ___might_sleep.cold+0xa6/0xb6
      [  357.217116]  kmem_cache_alloc_trace+0x1f2/0x270
      [  357.217122]  ath11k_dp_htt_get_ppdu_desc+0xa9/0x170 [ath11k]
      [  357.217129]  ath11k_htt_pull_ppdu_stats.isra.0+0x96/0x270 [ath11k]
      [  357.217135]  ath11k_dp_htt_htc_t2h_msg_handler+0xe7/0x1d0 [ath11k]
      [  357.217137]  ? trace_hardirqs_on+0x1c/0x100
      [  357.217143]  ath11k_htc_rx_completion_handler+0x207/0x370 [ath11k]
      [  357.217149]  ath11k_ce_recv_process_cb+0x15e/0x1e0 [ath11k]
      [  357.217151]  ? handle_irq_event+0x70/0xa8
      [  357.217154]  ath11k_pci_ce_tasklet+0x10/0x30 [ath11k_pci]
      [  357.217157]  tasklet_action_common.constprop.0+0xd4/0xf0
      [  357.217160]  __do_softirq+0xc9/0x482
      [  357.217162]  asm_call_on_stack+0x12/0x20
      [  357.217163]  </IRQ>
      [  357.217166]  do_softirq_own_stack+0x49/0x60
      [  357.217167]  irq_exit_rcu+0x9a/0xd0
      [  357.217169]  common_interrupt+0xa1/0x190
      [  357.217171]  asm_common_interrupt+0x1e/0x40
      [  357.217173] RIP: 0010:cpu_idle_poll.isra.0+0x2e/0x60
      [  357.217175] Code: 8b 35 26 27 74 69 e8 11 c8 3d ff e8 bc fa 42 ff e8 e7 9f 4a ff fb 65 48 8b 1c 25 80 90 01 00 48 8b 03 a8 08 74 0b eb 1c f3 90 <48> 8b 03 a8 08 75 13 8b 0
      [  357.217177] RSP: 0018:ffffffff97403ee0 EFLAGS: 00000202
      [  357.217178] RAX: 0000000000000001 RBX: ffffffff9742b8c0 RCX: 0000000000b890ca
      [  357.217180] RDX: 0000000000b890ca RSI: 0000000000000001 RDI: ffffffff968d0c49
      [  357.217181] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000001
      [  357.217182] R10: ffffffff9742b8c0 R11: 0000000000000046 R12: 0000000000000000
      [  357.217183] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000066fdf520
      [  357.217186]  ? cpu_idle_poll.isra.0+0x19/0x60
      [  357.217189]  do_idle+0x5f/0xe0
      [  357.217191]  cpu_startup_entry+0x14/0x20
      [  357.217193]  start_kernel+0x443/0x464
      [  357.217196]  secondary_startup_64+0xa4/0xb0
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarWen Gong <wgong@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601399736-3210-8-git-send-email-kvalo@codeaurora.org
      6a8be1ba
    • Wen Gong's avatar
      ath11k: change to disable softirqs for ath11k_regd_update to solve deadlock · df648808
      Wen Gong authored
      After base_lock which occupy by ath11k_regd_update, the softirq run for
      WMI_REG_CHAN_LIST_CC_EVENTID maybe arrived and it also need to accuire
      the spin lock, then deadlock happend, change to disable softirqis to solve it.
      
      [  235.576990] ================================
      [  235.576991] WARNING: inconsistent lock state
      [  235.576993] 5.9.0-rc5-wt-ath+ #196 Not tainted
      [  235.576994] --------------------------------
      [  235.576995] inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
      [  235.576997] kworker/u16:1/98 [HC0[0]:SC0[0]:HE1:SE1] takes:
      [  235.576998] ffff9655f75cad98 (&ab->base_lock){+.?.}-{2:2}, at: ath11k_regd_update+0x28/0x1d0 [ath11k]
      [  235.577009] {IN-SOFTIRQ-W} state was registered at:
      [  235.577013]   __lock_acquire+0x219/0x6e0
      [  235.577015]   lock_acquire+0xb6/0x270
      [  235.577018]   _raw_spin_lock+0x2c/0x70
      [  235.577023]   ath11k_reg_chan_list_event.isra.0+0x10d/0x1e0 [ath11k]
      [  235.577028]   ath11k_wmi_tlv_op_rx+0x3c3/0x560 [ath11k]
      [  235.577033]   ath11k_htc_rx_completion_handler+0x207/0x370 [ath11k]
      [  235.577039]   ath11k_ce_recv_process_cb+0x15e/0x1e0 [ath11k]
      [  235.577041]   ath11k_pci_ce_tasklet+0x10/0x30 [ath11k_pci]
      [  235.577043]   tasklet_action_common.constprop.0+0xd4/0xf0
      [  235.577045]   __do_softirq+0xc9/0x482
      [  235.577046]   asm_call_on_stack+0x12/0x20
      [  235.577048]   do_softirq_own_stack+0x49/0x60
      [  235.577049]   irq_exit_rcu+0x9a/0xd0
      [  235.577050]   common_interrupt+0xa1/0x190
      [  235.577052]   asm_common_interrupt+0x1e/0x40
      [  235.577053]   cpu_idle_poll.isra.0+0x2e/0x60
      [  235.577055]   do_idle+0x5f/0xe0
      [  235.577056]   cpu_startup_entry+0x14/0x20
      [  235.577058]   start_kernel+0x443/0x464
      [  235.577060]   secondary_startup_64+0xa4/0xb0
      [  235.577061] irq event stamp: 432035
      [  235.577063] hardirqs last  enabled at (432035): [<ffffffff968d12b4>] _raw_spin_unlock_irqrestore+0x34/0x40
      [  235.577064] hardirqs last disabled at (432034): [<ffffffff968d10d3>] _raw_spin_lock_irqsave+0x63/0x80
      [  235.577066] softirqs last  enabled at (431998): [<ffffffff967115c1>] inet6_fill_ifla6_attrs+0x3f1/0x430
      [  235.577067] softirqs last disabled at (431996): [<ffffffff9671159f>] inet6_fill_ifla6_attrs+0x3cf/0x430
      [  235.577068]
      [  235.577068] other info that might help us debug this:
      [  235.577069]  Possible unsafe locking scenario:
      [  235.577069]
      [  235.577070]        CPU0
      [  235.577070]        ----
      [  235.577071]   lock(&ab->base_lock);
      [  235.577072]   <Interrupt>
      [  235.577073]     lock(&ab->base_lock);
      [  235.577074]
      [  235.577074]  *** DEADLOCK ***
      [  235.577074]
      [  235.577075] 3 locks held by kworker/u16:1/98:
      [  235.577076]  #0: ffff9655f75b1d48 ((wq_completion)ath11k_qmi_driver_event){+.+.}-{0:0}, at: process_one_work+0x1d3/0x5d0
      [  235.577079]  #1: ffffa33cc02f3e70 ((work_completion)(&ab->qmi.event_work)){+.+.}-{0:0}, at: process_one_work+0x1d3/0x5d0
      [  235.577081]  #2: ffff9655f75cad50 (&ab->core_lock){+.+.}-{3:3}, at: ath11k_core_qmi_firmware_ready.part.0+0x4e/0x160 [ath11k]
      [  235.577087]
      [  235.577087] stack backtrace:
      [  235.577088] CPU: 3 PID: 98 Comm: kworker/u16:1 Not tainted 5.9.0-rc5-wt-ath+ #196
      [  235.577089] Hardware name: Intel(R) Client Systems NUC8i7HVK/NUC8i7HVB, BIOS HNKBLi70.86A.0049.2018.0801.1601 08/01/2018
      [  235.577095] Workqueue: ath11k_qmi_driver_event ath11k_qmi_driver_event_work [ath11k]
      [  235.577096] Call Trace:
      [  235.577100]  dump_stack+0x77/0xa0
      [  235.577102]  mark_lock_irq.cold+0x15/0x3c
      [  235.577104]  mark_lock+0x1d7/0x540
      [  235.577105]  mark_usage+0xc7/0x140
      [  235.577107]  __lock_acquire+0x219/0x6e0
      [  235.577108]  ? sched_clock_cpu+0xc/0xb0
      [  235.577110]  lock_acquire+0xb6/0x270
      [  235.577116]  ? ath11k_regd_update+0x28/0x1d0 [ath11k]
      [  235.577118]  ? atomic_notifier_chain_register+0x2d/0x40
      [  235.577120]  _raw_spin_lock+0x2c/0x70
      [  235.577125]  ? ath11k_regd_update+0x28/0x1d0 [ath11k]
      [  235.577130]  ath11k_regd_update+0x28/0x1d0 [ath11k]
      [  235.577136]  __ath11k_mac_register+0x3fb/0x480 [ath11k]
      [  235.577141]  ath11k_mac_register+0x119/0x180 [ath11k]
      [  235.577146]  ath11k_core_pdev_create+0x17/0xe0 [ath11k]
      [  235.577150]  ath11k_core_qmi_firmware_ready.part.0+0x65/0x160 [ath11k]
      [  235.577155]  ath11k_qmi_driver_event_work+0x1c5/0x230 [ath11k]
      [  235.577158]  process_one_work+0x265/0x5d0
      [  235.577160]  worker_thread+0x49/0x300
      [  235.577161]  ? process_one_work+0x5d0/0x5d0
      [  235.577163]  kthread+0x135/0x150
      [  235.577164]  ? kthread_create_worker_on_cpu+0x60/0x60
      [  235.577166]  ret_from_fork+0x22/0x30
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarWen Gong <wgong@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601399736-3210-7-git-send-email-kvalo@codeaurora.org
      df648808
    • Kalle Valo's avatar
      ath11k: disable monitor mode on QCA6390 · 3f6e6c32
      Kalle Valo authored
      QCA6390 does not support monitor mode at the moment so disable it altogether,
      using a hack as mac80211 does not support disabling it otherwise. Add a boolean
      to hw_params to know if hardware supports monitor mode.
      
      IPQ8074 continues to support monitor mode normally.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601399736-3210-6-git-send-email-kvalo@codeaurora.org
      3f6e6c32
    • Kalle Valo's avatar
      ath11k: pci: check TCSR_SOC_HW_VERSION · 18ac1665
      Kalle Valo authored
      There are different versions of QCA6390. Check TCSR_SOC_HW_VERSION to make sure
      that the device is hw2.0, all the rest are unsupported.
      
      This needs to be checked after ath11k_pci_claim() so move the whole switch choosing hw_ver.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601399736-3210-5-git-send-email-kvalo@codeaurora.org
      18ac1665
    • Kalle Valo's avatar
      ath11k: add interface_modes to hw_params · 2626c269
      Kalle Valo authored
      As QCA6390 does not support mesh interfaces, move the interface_modes to
      hw_params. Also create interface combinations dynamically so that it's easy to
      change the values.
      
      Now QCA6390 does not claim to support mesh interfaces to user space, but
      IPQ8074 continues to do that.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601399736-3210-4-git-send-email-kvalo@codeaurora.org
      2626c269
    • Carl Huang's avatar
      ath11k: fix AP mode for QCA6390 · b0919924
      Carl Huang authored
      For QCA6390, station vdev needs to delay startup but not for AP mode. On AP
      mode vdev starts up immediately after bss peer is created in chanctx assignment
      context.
      
      This patch does not affect IPQ8074 family of devices.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarCarl Huang <cjhuang@codeaurora.org>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601399736-3210-3-git-send-email-kvalo@codeaurora.org
      b0919924
    • Ben Greear's avatar
      ath11k: support loading ELF board files · 616c16a4
      Ben Greear authored
      The QCA6390 board I have, model 8291M-PR comes with an ELF board file.  To get
      this to at least somewhat work, I renamed bdwlan.e04 to 'board.bin' and then
      added this patch to check for ELF magic string in the beginning of the file.
      If that is found, use type ELF.  After this the driver loads.
      
      Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
      Signed-off-by: default avatarBen Greear <greearb@candelatech.com>
      [kvalo@codeaurora.org: use elf.h, minor cleanup]
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601399736-3210-2-git-send-email-kvalo@codeaurora.org
      616c16a4
    • Alex Dewar's avatar
      ath11k: Correctly check errors for calls to debugfs_create_dir() · 476c1d3c
      Alex Dewar authored
      debugfs_create_dir() returns an ERR_PTR in case of error, but never a
      null pointer. There are a number of places where error-checking code can
      accordingly be simplified.
      
      Addresses-Coverity: CID 1497150: Memory - illegal accesses (USE_AFTER_FREE)
      Addresses-Coverity: CID 1497158: Memory - illegal accesses (USE_AFTER_FREE)
      Addresses-Coverity: CID 1497160: Memory - illegal accesses (USE_AFTER_FREE)
      Signed-off-by: default avatarAlex Dewar <alex.dewar90@gmail.com>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/20200927132451.585473-1-alex.dewar90@gmail.com
      476c1d3c
    • Kalle Valo's avatar
      ath11k: mac: fix parenthesis alignment · cd19836a
      Kalle Valo authored
      Commit 6aea26ce ("mac80211: rework tx encapsulation offload API")
      introduced a new checkpatch warning:
      
      drivers/net/wireless/ath/ath11k/mac.c:4354: Alignment should match open parenthesis
      
      Fix that.
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/1601369160-1252-1-git-send-email-kvalo@codeaurora.org
      cd19836a
    • Kalle Valo's avatar
      Merge tag 'iwlwifi-next-for-kalle-2020-09-30-2' of... · 855f69fc
      Kalle Valo authored
      Merge tag 'iwlwifi-next-for-kalle-2020-09-30-2' of git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next
      
      iwlwifi patches intended for v5.10
      
      * Protected TWT implementation;
      * Support disabling 5.8GHz channels via ACPI;
      * Support VHT extended NSS capability;
      * A few fixes in the datapath;
      * Enable TWT by default;
      * Support new PPAG FW command version
      * Move some trans code around for better abstraction;
      * Some clean-ups in the ACPI code;
      * A fix for AP mode;
      * Updates in the ACPI code to support new tables and FW versions;
      * FTM updates;
      * A bit of reorganiztion in the queue code;
      * A few debugging infra improvements;
      * Add support for new GTK rekeying;
      * A fix in the scanning code;
      * Support for some new cards;
      * Some updates for new or changed FW APIs;
      * Some new FW API command version implementations;
      * Some other small fixes and clean-ups;
      
      # gpg: Signature made Thu 01 Oct 2020 10:04:00 PM EEST using RSA key ID 1A3CC5FA
      # gpg: Good signature from "Luciano Roth Coelho (Luca) <luca@coelho.fi>"
      # gpg:                 aka "Luciano Roth Coelho (Intel) <luciano.coelho@intel.com>"
      855f69fc
    • Luca Coelho's avatar
    • Mordechay Goodstein's avatar
      iwlwifi: yoyo: add support for internal buffer allocation in D3 · 16b2afe0
      Mordechay Goodstein authored
      With yoyo a user can configure the internal buffer allocation in
      SMEM to hold more log space, which is used for debugging D3 state.
      Signed-off-by: default avatarMordechay Goodstein <mordechay.goodstein@intel.com>
      Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      Link: https://lore.kernel.org/r/iwlwifi.20200930191738.29b61ff6c78e.I235614bb2c255ee8ac49c2835796ac95a25215bf@changeidSigned-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      16b2afe0
    • Johannes Berg's avatar
      iwlwifi: api: fix u32 -> __le32 · eb95a26c
      Johannes Berg authored
      Even if we don't currently use this value, the firmware is putting
      whatever it's putting there as __le32, so fix that.
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      Link: https://lore.kernel.org/r/iwlwifi.20200930191738.4207116e9c7a.I6d9aa1371f9a8b4e5565236d23255b5c05c70bb3@changeidSigned-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      eb95a26c
    • Andrei Otcheretianski's avatar
    • Luca Coelho's avatar
      iwlwifi: support version 5 of the alive notification · 9422b978
      Luca Coelho authored
      Add support for the new version of the alive notification, which
      includes the SKU ID.  We don't use the SKU ID yet, so we can just
      handle the new notification as if it were version 4.
      
      While at it, clean up a bit and rename the command and structure names
      in the comments so that they are aligned with the ones used in the FW.
      Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      Link: https://lore.kernel.org/r/iwlwifi.20200930191738.6024b149e9e2.Ifcadb506e994ec352e9ce54399719926bc1bb7ee@changeidSigned-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      9422b978
    • Avraham Stern's avatar
      iwlwifi: mvm: ignore the scan duration parameter · 3ac13d56
      Avraham Stern authored
      The scan request may specify the request scan dwell time.
      However, this value may not always be optimal (e.g. short dwell
      time for a passive channel). This may happen in a scan request
      as a result of beacon report request, in which the AP may request
      an active scan, thus setting a short dwell time, but the station
      will perform a passive scan due to regulatory.
      
      Ignore the scan duration parameter and always use the internal
      scan dwell time which should be optimal.
      Signed-off-by: default avatarAvraham Stern <avraham.stern@intel.com>
      Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      Link: https://lore.kernel.org/r/iwlwifi.20200930191738.6e1d2b8b4489.I9584bb40d44bf31131f57fdd32d5e8848d4fbdd8@changeidSigned-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      3ac13d56
    • Mordechay Goodstein's avatar
      iwlwifi: dbg: add debug host notification (DHN) time point · 4bf3d7cf
      Mordechay Goodstein authored
      This enables to listen only to DHN time point without monitoring
      every rx packet from FW.
      
      Also fix a typo NOTIFOCATION->NOTIFICATION in enum declaration.
      Signed-off-by: default avatarMordechay Goodstein <mordechay.goodstein@intel.com>
      Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      Link: https://lore.kernel.org/r/iwlwifi.20200930191738.435fa657a937.I1a36badd4ceecefcdfb47eaacf26c08a4bbd1b08@changeidSigned-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      4bf3d7cf
    • Mordechay Goodstein's avatar
      iwlwifi: pcie: make iwl_pcie_txq_update_byte_cnt_tbl bus independent · 0179bfff
      Mordechay Goodstein authored
      To avoid duplicating code we need to call iwl_pcie_txq_update_byte_cnt_tbl
      function from non bus independent code so make it bus independent.
      
      Used spatch rule
      
      @r1@
      struct iwl_trans_pcie *trans_pcie;
      @@
      (
      -trans_pcie->scd_bc_tbls
      +trans->txqs.scd_bc_tbls
      |
      -iwl_pcie_txq_update_byte_cnt_tbl
      +iwl_txq_gen1_update_byte_cnt_tbl
      |
      -iwl_pcie_txq_inval_byte_cnt_tbl
      +iwl_txq_gen1_inval_byte_cnt_tbl
      |
      -iwl_pcie_tfd_unmap
      +iwl_txq_gen1_tfd_unmap
      |
      -iwl_pcie_tfd_tb_get_addr
      +iwl_txq_gen1_tfd_tb_get_addr
      |
      -iwl_pcie_tfd_tb_get_len
      +iwl_txq_gen1_tfd_tb_get_len
      |
      -iwl_pcie_tfd_get_num_tbs
      +iwl_txq_gen1_tfd_get_num_tbs
      )
      
      /* clean all new unused variables */
      @ depends on r1@
      type T;
      identifier i;
      expression E;
      @@
      - T i = E;
       ... when != i
      Signed-off-by: default avatarMordechay Goodstein <mordechay.goodstein@intel.com>
      Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      Link: https://lore.kernel.org/r/iwlwifi.20200930191738.8d33e791ec8c.Ica35125ed640aa3aa1ecc38fb5e8f1600caa8df6@changeidSigned-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      0179bfff
    • Ayala Beker's avatar
      iwlwifi: mvm: clear all scan UIDs · 20e67199
      Ayala Beker authored
      In case of nic restart flow is called in the middle of scan abort
      flow, aborted scan UIDs might not be cleared.
      
      Fix it and clean these UIDs as well.
      Signed-off-by: default avatarAyala Beker <ayala.beker@intel.com>
      Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      Link: https://lore.kernel.org/r/iwlwifi.20200930191738.71aacc1a0358.Ie53f7ab07b42e6a5223f33e201b0f862ebda8986@changeidSigned-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      20e67199
    • Johannes Berg's avatar
      iwlwifi: mvm: d3: parse wowlan status version 11 · bc68163c
      Johannes Berg authored
      The firmware is being updated to report version 11 of this
      response in order to include BIGTK material. Parse it, but
      for now keep the existing behaviour of disconnecting on any
      rekeying with even IGTK presence, need to fix that before
      BIGTK can be supported.
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      Link: https://lore.kernel.org/r/iwlwifi.20200930191738.b7098f097a5c.I4ae1c5b2186b0e04702233a7a7068d69cfd3361a@changeidSigned-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      bc68163c
    • Johannes Berg's avatar
      iwlwifi: align RX status flags with firmware · e365e7de
      Johannes Berg authored
      There are some bits declared here that simply don't exist
      in the firmware, and some are missing (e.g. the key) from
      what the firmware has. Align this and move all the fields
      into a single one for this status word, which makes this a
      bit easier.
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      Link: https://lore.kernel.org/r/iwlwifi.20200930191738.0ba403d72e7c.I5fa3aa0538f3fbf8c3885b27a1204b5b0464c20a@changeidSigned-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      e365e7de
    • Luca Coelho's avatar
      iwlwifi: mvm: remove redundant log in iwl_mvm_tvqm_enable_txq() · abd16a58
      Luca Coelho authored
      We are printing the same thing twice, "Enabling TXQ #%d".  Previously
      the second print was including more information, but now it only
      prints the queue number, which is already in the first print.  Remove
      the redundant one.
      Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      Link: https://lore.kernel.org/r/iwlwifi.20200930191738.1c22d1bc0a88.I24e57317bdddc6c72f69725e1d95683a935e893d@changeidSigned-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      abd16a58
    • Mordechay Goodstein's avatar
      iwlwifi: phy-ctxt: add new API VER 3 for phy context cmd · a8682106
      Mordechay Goodstein authored
      The API added the ability to send for CDB nic what LMAC ID
      the cmd belongs to.
      
      Also driver always set apply_time to zero so no need to pass it as
      a param and anyway in new API it's removed for no use.
      Signed-off-by: default avatarMordechay Goodstein <mordechay.goodstein@intel.com>
      Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      Link: https://lore.kernel.org/r/iwlwifi.20200930161256.fa11d1f523b6.Id105899da82c2b08ee62b57133c4ff72bfd0bb80@changeidSigned-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      a8682106
    • Gil Adam's avatar
      iwlwifi: thermal: support new temperature measurement API · 762c523f
      Gil Adam authored
      New API for temperature measurement (DTS_MEASUREMENT_TRIGGER)
      involves getting an immediate response from FW, and not waiting
      for a notification like in previous APIs. Support new API while
      keeping backwards compatibility.
      Signed-off-by: default avatarGil Adam <gil.adam@intel.com>
      Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      Link: https://lore.kernel.org/r/iwlwifi.20200930161256.b4893554d8e7.Ia4d7f389d4ac3256fcfe3ce6144e924dd6dbf6eb@changeidSigned-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
      762c523f