Manikanta Pubbisetty <quic_mpubbise@xxxxxxxxxxx> writes: > Currently, WLAN chip is powered once during driver probe and is kept > ON (powered) always even when WLAN is not active; keeping the chip > powered ON all the time will consume extra power which is not > desirable for a battery operated device. Same is the case with non-WoW > suspend, chip will never be put into low power mode when the system is > suspended resulting in higher battery drain. > > As per the recommendation, sending a PDEV suspend WMI command followed > by a QMI MODE OFF command will cease all WLAN activity and put the device > in low power mode. When WLAN interfaces are brought up, sending a QMI > MISSION MODE command would be sufficient to bring the chip out of low > power. This is a better approach than doing hif_power_down()/hif_power_up() > for every WiFi ON/OFF sequence since the turnaround time for entry/exit of > low power mode is much less. Overhead is just the time taken for sending > QMI MODE OFF & QMI MISSION MODE commands instead of going through the > entire chip boot & QMI init sequence. > > Currently the changes are applicable only for WCN6750. This can be > extended to other targets with a future patch. > > Tested-on: WCN6750 hw1.0 AHB WLAN.MSL.1.0.1-00887-QCAMSLSWPLZ-1 > > Signed-off-by: Manikanta Pubbisetty <quic_mpubbise@xxxxxxxxxxx> With this patch 3 my regression tests on WCN6855 panic: [ 109.009427] rmmod ath11k_pci [ 109.437120] kworker/dying (1560) used greatest stack depth: 24704 bytes left [ 109.446051] general protection fault, probably for non-canonical address 0xdffffc000000003e: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC KASAN [ 109.446133] KASAN: null-ptr-deref in range [0x00000000000001f0-0x00000000000001f7] [ 109.446211] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.0.0-rc2-wt-ath+ #683 [ 109.446315] Hardware name: Intel(R) Client Systems NUC8i7HVK/NUC8i7HVB, BIOS HNKBLi70.86A.0067.2021.0528.1339 05/28/2021 [ 109.446393] RIP: 0010:ath11k_dp_process_rxdma_err+0x1c8/0x810 [ath11k] [ 109.446486] Code: d2 48 63 d8 48 8b 4c 24 38 48 8d 04 5b 48 c1 e0 04 48 8d bc 01 f4 01 00 00 48 b8 00 00 00 00 00 fc ff df 48 89 fa 48 c1 ea 03 <0f> b6 14 02 48 89 f8 83 e0 07 83 c0 03 38 d0 7c 08 84 d2 0f 85 aa [ 109.446557] RSP: 0018:ffffc90000007b90 EFLAGS: 00010203 [ 109.446619] RAX: dffffc0000000000 RBX: 0000000000000000 RCX: 0000000000000000 [ 109.446677] RDX: 000000000000003e RSI: 0000000000000000 RDI: 00000000000001f4 [ 109.446734] RBP: 0000000000000000 R08: ffff88814c0e1470 R09: ffff88814c0f6678 [ 109.446792] R10: dffffc0000000000 R11: ffffed102981ecd0 R12: 0000000000000000 [ 109.446903] R13: 0000000000000040 R14: 1ffff92000000f81 R15: ffff88814c0e0000 [ 109.446961] FS: 0000000000000000(0000) GS:ffff888233600000(0000) knlGS:0000000000000000 [ 109.447020] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 109.447080] CR2: 000055570fe84cc8 CR3: 0000000152540006 CR4: 00000000003706f0 [ 109.447136] Call Trace: [ 109.447194] <IRQ> [ 109.447257] ? ath11k_dp_process_reo_status+0x3ce/0x560 [ath11k] [ 109.447349] ? ath11k_dp_rx_process_wbm_err+0x17d0/0x17d0 [ath11k] [ 109.447442] ath11k_dp_service_srng+0x358/0xab0 [ath11k] [ 109.447536] ath11k_pcic_ext_grp_napi_poll+0x40/0x1d0 [ath11k] [ 109.447628] __napi_poll.constprop.0+0x97/0x350 [ 109.447690] net_rx_action+0x7bf/0xbb0 [ 109.447749] ? __napi_poll.constprop.0+0x350/0x350 [ 109.447831] ? ktime_get+0x101/0x2f0 [ 109.447911] __do_softirq+0x1ca/0x897 [ 109.447989] __irq_exit_rcu+0xdb/0x180 [ 109.448049] irq_exit_rcu+0x5/0x20 [ 109.448109] sysvec_apic_timer_interrupt+0x8a/0xb0 [ 109.448168] </IRQ> [ 109.448226] <TASK> [ 109.448284] asm_sysvec_apic_timer_interrupt+0x16/0x20 [ 109.448343] RIP: 0010:cpuidle_enter_state+0x1ef/0x9a0 [ 109.448407] Code: 00 00 8b 73 04 bf ff ff ff ff e8 8c f0 ff ff 31 ff e8 75 16 47 fe 80 7c 24 08 00 0f 85 a1 01 00 00 e8 75 7d 6a fe fb 45 85 f6 <0f> 88 6f 02 00 00 4d 63 ee 4b 8d 44 6d 00 49 8d 44 85 00 48 8d 7c [ 109.448477] RSP: 0018:ffffffffb9407db8 EFLAGS: 00000202 [ 109.448540] RAX: 0000000000124987 RBX: ffff888114966400 RCX: 1ffffffff738a3e1 [ 109.448600] RDX: 0000000000000000 RSI: ffffffffb8a71bc0 RDI: ffffffffb8bec9c0 [ 109.448659] RBP: ffffffffb986efa0 R08: 0000000000000001 R09: ffffffffb9c54717 [ 109.448715] R10: fffffbfff738a8e2 R11: 00000000000002ec R12: 000000197b7a6a19 [ 109.448774] R13: 0000000000000002 R14: 0000000000000002 R15: ffff888114966404 [ 109.448871] ? cpuidle_enter_state+0x1eb/0x9a0 [ 109.448947] ? finish_task_switch.isra.0+0x120/0x870 [ 109.449006] cpuidle_enter+0x45/0xa0 [ 109.449065] cpuidle_idle_call+0x274/0x3f0 [ 109.449125] ? arch_cpu_idle_exit+0x30/0x30 [ 109.449187] ? tsc_verify_tsc_adjust+0x86/0x2d0 [ 109.449247] ? lockdep_hardirqs_off+0x90/0xd0 [ 109.449306] do_idle+0xe0/0x140 [ 109.449363] cpu_startup_entry+0x14/0x20 [ 109.449423] rest_init+0x135/0x1e0 [ 109.449482] arch_call_rest_init+0xa/0xb [ 109.449542] start_kernel+0x391/0x3af [ 109.449606] secondary_startup_64_no_verify+0xce/0xdb [ 109.449671] </TASK> [ 109.449729] Modules linked in: ath11k_pci(-) ath11k mac80211 libarc4 cfg80211 qmi_helpers qrtr_mhi mhi qrtr nvme nvme_core [ 109.449846] ---[ end trace 0000000000000000 ]--- [ 109.449927] RIP: 0010:ath11k_dp_process_rxdma_err+0x1c8/0x810 [ath11k] [ 109.450073] Code: d2 48 63 d8 48 8b 4c 24 38 48 8d 04 5b 48 c1 e0 04 48 8d bc 01 f4 01 00 00 48 b8 00 00 00 00 00 fc ff df 48 89 fa 48 c1 ea 03 <0f> b6 14 02 48 89 f8 83 e0 07 83 c0 03 38 d0 7c 08 84 d2 0f 85 aa [ 109.450147] RSP: 0018:ffffc90000007b90 EFLAGS: 00010203 [ 109.450212] RAX: dffffc0000000000 RBX: 0000000000000000 RCX: 0000000000000000 [ 109.450275] RDX: 000000000000003e RSI: 0000000000000000 RDI: 00000000000001f4 [ 109.450337] RBP: 0000000000000000 R08: ffff88814c0e1470 R09: ffff88814c0f6678 [ 109.450401] R10: dffffc0000000000 R11: ffffed102981ecd0 R12: 0000000000000000 [ 109.450465] R13: 0000000000000040 R14: 1ffff92000000f81 R15: ffff88814c0e0000 [ 109.450531] FS: 0000000000000000(0000) GS:ffff888233600000(0000) knlGS:0000000000000000 [ 109.450595] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 109.450661] CR2: 000055570fe84cc8 CR3: 0000000152540006 CR4: 00000000003706f0 [ 109.450723] Kernel panic - not syncing: Fatal exception in interrupt [ 109.450794] Kernel Offset: 0x34e00000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff) [ 109.450837] Rebooting in 10 seconds.. -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches