Message ID | 1636702019-26142-1-git-send-email-quic_seevalam@quicinc.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 081e2d6476e30399433b509684d5da4d1844e430 |
Delegated to: | Kalle Valo |
Headers | show |
Series | ath11k: add hw_param for wakeup_mhi | expand |
Seevalamuthu Mariappan <quic_seevalam@quicinc.com> writes: > Wakeup mhi is needed before pci_read/write only for QCA6390 > and WCN6855. Since wakeup & release mhi is enabled for all > hardwares, below mhi assert is seen in QCN9074. > > Kernel panic - not syncing: dev_wake != 0 > CPU: 2 PID: 13535 Comm: procd Not tainted 4.4.60 #1 > Hardware name: Generic DT based system > [<80316dac>] (unwind_backtrace) from [<80313700>] (show_stack+0x10/0x14) > [<80313700>] (show_stack) from [<805135dc>] (dump_stack+0x7c/0x9c) > [<805135dc>] (dump_stack) from [<8032136c>] (panic+0x84/0x1f8) > [<8032136c>] (panic) from [<80549b24>] (mhi_pm_disable_transition+0x3b8/0x5b8) > [<80549b24>] (mhi_pm_disable_transition) from [<80549ddc>] (mhi_power_down+0xb8/0x100) > [<80549ddc>] (mhi_power_down) from [<7f5242b0>] (ath11k_mhi_op_status_cb+0x284/0x3ac [ath11k_pci]) > [E][__mhi_device_get_sync] Did not enter M0 state, cur_state:RESET pm_state:SHUTDOWN Process > [E][__mhi_device_get_sync] Did not enter M0 state, cur_state:RESET pm_state:SHUTDOWN Process > [E][__mhi_device_get_sync] Did not enter M0 state, cur_state:RESET pm_state:SHUTDOWN Process > [<7f5242b0>] (ath11k_mhi_op_status_cb [ath11k_pci]) from [<7f524878>] (ath11k_mhi_stop+0x10/0x20 [ath11k_pci]) > [<7f524878>] (ath11k_mhi_stop [ath11k_pci]) from [<7f525b94>] (ath11k_pci_power_down+0x54/0x90 [ath11k_pci]) > [<7f525b94>] (ath11k_pci_power_down [ath11k_pci]) from [<8056b2a8>] (pci_device_shutdown+0x30/0x44) > [<8056b2a8>] (pci_device_shutdown) from [<805cfa0c>] (device_shutdown+0x124/0x174) > [<805cfa0c>] (device_shutdown) from [<8033aaa4>] (kernel_restart+0xc/0x50) > [<8033aaa4>] (kernel_restart) from [<8033ada8>] (SyS_reboot+0x178/0x1ec) > [<8033ada8>] (SyS_reboot) from [<80301b80>] (ret_fast_syscall+0x0/0x34) > > Hence, disable wakeup/release mhi using hw_param for other hardwares. > > Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.5.0.1-01060-QCAHKSWPL_SILICONZ-1 > > Fixes: a05bd85133 ("ath11k: read and write registers below unwindowed address") > Signed-off-by: Seevalamuthu Mariappan <quic_seevalam@quicinc.com> The commit log is not quite clear, are you saying that commit a05bd85133 broke QCN9074 support altogether? Or it was failing only in some cases? I can update the commit log.
> Seevalamuthu Mariappan <quic_seevalam@quicinc.com> writes: > > > Wakeup mhi is needed before pci_read/write only for QCA6390 and > > WCN6855. Since wakeup & release mhi is enabled for all hardwares, > > below mhi assert is seen in QCN9074. > > > > Kernel panic - not syncing: dev_wake != 0 > > CPU: 2 PID: 13535 Comm: procd Not tainted 4.4.60 #1 > > Hardware name: Generic DT based system > > [<80316dac>] (unwind_backtrace) from [<80313700>] > (show_stack+0x10/0x14) > > [<80313700>] (show_stack) from [<805135dc>] > (dump_stack+0x7c/0x9c) > > [<805135dc>] (dump_stack) from [<8032136c>] (panic+0x84/0x1f8) > > [<8032136c>] (panic) from [<80549b24>] > (mhi_pm_disable_transition+0x3b8/0x5b8) > > [<80549b24>] (mhi_pm_disable_transition) from [<80549ddc>] > (mhi_power_down+0xb8/0x100) > > [<80549ddc>] (mhi_power_down) from [<7f5242b0>] > (ath11k_mhi_op_status_cb+0x284/0x3ac [ath11k_pci]) > > [E][__mhi_device_get_sync] Did not enter M0 state, cur_state:RESET > pm_state:SHUTDOWN Process > > [E][__mhi_device_get_sync] Did not enter M0 state, cur_state:RESET > pm_state:SHUTDOWN Process > > [E][__mhi_device_get_sync] Did not enter M0 state, cur_state:RESET > pm_state:SHUTDOWN Process > > [<7f5242b0>] (ath11k_mhi_op_status_cb [ath11k_pci]) from > [<7f524878>] (ath11k_mhi_stop+0x10/0x20 [ath11k_pci]) > > [<7f524878>] (ath11k_mhi_stop [ath11k_pci]) from [<7f525b94>] > (ath11k_pci_power_down+0x54/0x90 [ath11k_pci]) > > [<7f525b94>] (ath11k_pci_power_down [ath11k_pci]) from > [<8056b2a8>] (pci_device_shutdown+0x30/0x44) > > [<8056b2a8>] (pci_device_shutdown) from [<805cfa0c>] > (device_shutdown+0x124/0x174) > > [<805cfa0c>] (device_shutdown) from [<8033aaa4>] > (kernel_restart+0xc/0x50) > > [<8033aaa4>] (kernel_restart) from [<8033ada8>] > (SyS_reboot+0x178/0x1ec) > > [<8033ada8>] (SyS_reboot) from [<80301b80>] > > (ret_fast_syscall+0x0/0x34) > > > > Hence, disable wakeup/release mhi using hw_param for other hardwares. > > > > Tested-on: QCN9074 hw1.0 PCI > > WLAN.HK.2.5.0.1-01060-QCAHKSWPL_SILICONZ-1 > > > > Fixes: a05bd85133 ("ath11k: read and write registers below unwindowed > > address") > > Signed-off-by: Seevalamuthu Mariappan <quic_seevalam@quicinc.com> > > The commit log is not quite clear, are you saying that commit a05bd85133 > broke QCN9074 support altogether? Or it was failing only in some cases? > I can update the commit log. > [seevalam]: MHI assert seen during 'rmmod ath11k_pci' for QCN9074. > -- > https://patchwork.kernel.org/project/linux-wireless/list/ > > https://wireless.wiki.kernel.org/en/developers/documentation/submittingp > atches Regards, Seevalamuthu M
"Seevalamuthu Mariappan (Temp) (QUIC)" <quic_seevalam@quicinc.com> writes: >> Seevalamuthu Mariappan <quic_seevalam@quicinc.com> writes: >> >> > Wakeup mhi is needed before pci_read/write only for QCA6390 and >> > WCN6855. Since wakeup & release mhi is enabled for all hardwares, >> > below mhi assert is seen in QCN9074. >> > >> > Kernel panic - not syncing: dev_wake != 0 >> > CPU: 2 PID: 13535 Comm: procd Not tainted 4.4.60 #1 >> > Hardware name: Generic DT based system >> > [<80316dac>] (unwind_backtrace) from [<80313700>] >> (show_stack+0x10/0x14) >> > [<80313700>] (show_stack) from [<805135dc>] >> (dump_stack+0x7c/0x9c) >> > [<805135dc>] (dump_stack) from [<8032136c>] (panic+0x84/0x1f8) >> > [<8032136c>] (panic) from [<80549b24>] >> (mhi_pm_disable_transition+0x3b8/0x5b8) >> > [<80549b24>] (mhi_pm_disable_transition) from [<80549ddc>] >> (mhi_power_down+0xb8/0x100) >> > [<80549ddc>] (mhi_power_down) from [<7f5242b0>] >> (ath11k_mhi_op_status_cb+0x284/0x3ac [ath11k_pci]) >> > [E][__mhi_device_get_sync] Did not enter M0 state, cur_state:RESET >> pm_state:SHUTDOWN Process >> > [E][__mhi_device_get_sync] Did not enter M0 state, cur_state:RESET >> pm_state:SHUTDOWN Process >> > [E][__mhi_device_get_sync] Did not enter M0 state, cur_state:RESET >> pm_state:SHUTDOWN Process >> > [<7f5242b0>] (ath11k_mhi_op_status_cb [ath11k_pci]) from >> [<7f524878>] (ath11k_mhi_stop+0x10/0x20 [ath11k_pci]) >> > [<7f524878>] (ath11k_mhi_stop [ath11k_pci]) from [<7f525b94>] >> (ath11k_pci_power_down+0x54/0x90 [ath11k_pci]) >> > [<7f525b94>] (ath11k_pci_power_down [ath11k_pci]) from >> [<8056b2a8>] (pci_device_shutdown+0x30/0x44) >> > [<8056b2a8>] (pci_device_shutdown) from [<805cfa0c>] >> (device_shutdown+0x124/0x174) >> > [<805cfa0c>] (device_shutdown) from [<8033aaa4>] >> (kernel_restart+0xc/0x50) >> > [<8033aaa4>] (kernel_restart) from [<8033ada8>] >> (SyS_reboot+0x178/0x1ec) >> > [<8033ada8>] (SyS_reboot) from [<80301b80>] >> > (ret_fast_syscall+0x0/0x34) >> > >> > Hence, disable wakeup/release mhi using hw_param for other hardwares. >> > >> > Tested-on: QCN9074 hw1.0 PCI >> > WLAN.HK.2.5.0.1-01060-QCAHKSWPL_SILICONZ-1 >> > >> > Fixes: a05bd85133 ("ath11k: read and write registers below unwindowed >> > address") >> > Signed-off-by: Seevalamuthu Mariappan <quic_seevalam@quicinc.com> >> >> The commit log is not quite clear, are you saying that commit a05bd85133 >> broke QCN9074 support altogether? Or it was failing only in some cases? >> I can update the commit log. >> > > [seevalam]: MHI assert seen during 'rmmod ath11k_pci' for QCN9074. Thanks, I added that to the commit log.
Seevalamuthu Mariappan <quic_seevalam@quicinc.com> wrote: > Wakeup mhi is needed before pci_read/write only for QCA6390 and WCN6855. Since > wakeup & release mhi is enabled for all hardwares, below mhi assert is seen in > QCN9074 when doing 'rmmod ath11k_pci': > > Kernel panic - not syncing: dev_wake != 0 > CPU: 2 PID: 13535 Comm: procd Not tainted 4.4.60 #1 > Hardware name: Generic DT based system > [<80316dac>] (unwind_backtrace) from [<80313700>] (show_stack+0x10/0x14) > [<80313700>] (show_stack) from [<805135dc>] (dump_stack+0x7c/0x9c) > [<805135dc>] (dump_stack) from [<8032136c>] (panic+0x84/0x1f8) > [<8032136c>] (panic) from [<80549b24>] (mhi_pm_disable_transition+0x3b8/0x5b8) > [<80549b24>] (mhi_pm_disable_transition) from [<80549ddc>] (mhi_power_down+0xb8/0x100) > [<80549ddc>] (mhi_power_down) from [<7f5242b0>] (ath11k_mhi_op_status_cb+0x284/0x3ac [ath11k_pci]) > [E][__mhi_device_get_sync] Did not enter M0 state, cur_state:RESET pm_state:SHUTDOWN Process > [E][__mhi_device_get_sync] Did not enter M0 state, cur_state:RESET pm_state:SHUTDOWN Process > [E][__mhi_device_get_sync] Did not enter M0 state, cur_state:RESET pm_state:SHUTDOWN Process > [<7f5242b0>] (ath11k_mhi_op_status_cb [ath11k_pci]) from [<7f524878>] (ath11k_mhi_stop+0x10/0x20 [ath11k_pci]) > [<7f524878>] (ath11k_mhi_stop [ath11k_pci]) from [<7f525b94>] (ath11k_pci_power_down+0x54/0x90 [ath11k_pci]) > [<7f525b94>] (ath11k_pci_power_down [ath11k_pci]) from [<8056b2a8>] (pci_device_shutdown+0x30/0x44) > [<8056b2a8>] (pci_device_shutdown) from [<805cfa0c>] (device_shutdown+0x124/0x174) > [<805cfa0c>] (device_shutdown) from [<8033aaa4>] (kernel_restart+0xc/0x50) > [<8033aaa4>] (kernel_restart) from [<8033ada8>] (SyS_reboot+0x178/0x1ec) > [<8033ada8>] (SyS_reboot) from [<80301b80>] (ret_fast_syscall+0x0/0x34) > > Hence, disable wakeup/release mhi using hw_param for other hardwares. > > Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.5.0.1-01060-QCAHKSWPL_SILICONZ-1 > > Fixes: a05bd8513335 ("ath11k: read and write registers below unwindowed address") > Signed-off-by: Seevalamuthu Mariappan <quic_seevalam@quicinc.com> > Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Patch applied to ath-next branch of ath.git, thanks. 081e2d6476e3 ath11k: add hw_param for wakeup_mhi
diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c index bd77aed..4ac09f0 100644 --- a/drivers/net/wireless/ath/ath11k/core.c +++ b/drivers/net/wireless/ath/ath11k/core.c @@ -84,6 +84,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { .max_tx_ring = DP_TCL_NUM_RING_MAX, .hal_params = &ath11k_hw_hal_params_ipq8074, .supports_dynamic_smps_6ghz = false, + .wakeup_mhi = false, }, { .hw_rev = ATH11K_HW_IPQ6018_HW10, @@ -135,6 +136,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { .max_tx_ring = DP_TCL_NUM_RING_MAX, .hal_params = &ath11k_hw_hal_params_ipq8074, .supports_dynamic_smps_6ghz = false, + .wakeup_mhi = false, }, { .name = "qca6390 hw2.0", @@ -185,6 +187,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { .max_tx_ring = DP_TCL_NUM_RING_MAX_QCA6390, .hal_params = &ath11k_hw_hal_params_qca6390, .supports_dynamic_smps_6ghz = false, + .wakeup_mhi = true, }, { .name = "qcn9074 hw1.0", @@ -235,6 +238,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { .max_tx_ring = DP_TCL_NUM_RING_MAX, .hal_params = &ath11k_hw_hal_params_ipq8074, .supports_dynamic_smps_6ghz = true, + .wakeup_mhi = false, }, { .name = "wcn6855 hw2.0", @@ -285,6 +289,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { .max_tx_ring = DP_TCL_NUM_RING_MAX_QCA6390, .hal_params = &ath11k_hw_hal_params_qca6390, .supports_dynamic_smps_6ghz = false, + .wakeup_mhi = true, }, }; diff --git a/drivers/net/wireless/ath/ath11k/hw.h b/drivers/net/wireless/ath/ath11k/hw.h index 2c7bd7a..83b6240 100644 --- a/drivers/net/wireless/ath/ath11k/hw.h +++ b/drivers/net/wireless/ath/ath11k/hw.h @@ -178,6 +178,7 @@ struct ath11k_hw_params { u8 max_tx_ring; const struct ath11k_hw_hal_params *hal_params; bool supports_dynamic_smps_6ghz; + bool wakeup_mhi; }; struct ath11k_hw_ops { diff --git a/drivers/net/wireless/ath/ath11k/pci.c b/drivers/net/wireless/ath/ath11k/pci.c index 3d353e7..fadded5 100644 --- a/drivers/net/wireless/ath/ath11k/pci.c +++ b/drivers/net/wireless/ath/ath11k/pci.c @@ -182,7 +182,8 @@ void ath11k_pci_write32(struct ath11k_base *ab, u32 offset, u32 value) /* for offset beyond BAR + 4K - 32, may * need to wakeup MHI to access. */ - if (test_bit(ATH11K_PCI_FLAG_INIT_DONE, &ab_pci->flags) && + if (ab->hw_params.wakeup_mhi && + test_bit(ATH11K_PCI_FLAG_INIT_DONE, &ab_pci->flags) && offset >= ACCESS_ALWAYS_OFF) mhi_device_get_sync(ab_pci->mhi_ctrl->mhi_dev); @@ -206,7 +207,8 @@ void ath11k_pci_write32(struct ath11k_base *ab, u32 offset, u32 value) } } - if (test_bit(ATH11K_PCI_FLAG_INIT_DONE, &ab_pci->flags) && + if (ab->hw_params.wakeup_mhi && + test_bit(ATH11K_PCI_FLAG_INIT_DONE, &ab_pci->flags) && offset >= ACCESS_ALWAYS_OFF) mhi_device_put(ab_pci->mhi_ctrl->mhi_dev); } @@ -219,7 +221,8 @@ u32 ath11k_pci_read32(struct ath11k_base *ab, u32 offset) /* for offset beyond BAR + 4K - 32, may * need to wakeup MHI to access. */ - if (test_bit(ATH11K_PCI_FLAG_INIT_DONE, &ab_pci->flags) && + if (ab->hw_params.wakeup_mhi && + test_bit(ATH11K_PCI_FLAG_INIT_DONE, &ab_pci->flags) && offset >= ACCESS_ALWAYS_OFF) mhi_device_get_sync(ab_pci->mhi_ctrl->mhi_dev); @@ -243,7 +246,8 @@ u32 ath11k_pci_read32(struct ath11k_base *ab, u32 offset) } } - if (test_bit(ATH11K_PCI_FLAG_INIT_DONE, &ab_pci->flags) && + if (ab->hw_params.wakeup_mhi && + test_bit(ATH11K_PCI_FLAG_INIT_DONE, &ab_pci->flags) && offset >= ACCESS_ALWAYS_OFF) mhi_device_put(ab_pci->mhi_ctrl->mhi_dev);
Wakeup mhi is needed before pci_read/write only for QCA6390 and WCN6855. Since wakeup & release mhi is enabled for all hardwares, below mhi assert is seen in QCN9074. Kernel panic - not syncing: dev_wake != 0 CPU: 2 PID: 13535 Comm: procd Not tainted 4.4.60 #1 Hardware name: Generic DT based system [<80316dac>] (unwind_backtrace) from [<80313700>] (show_stack+0x10/0x14) [<80313700>] (show_stack) from [<805135dc>] (dump_stack+0x7c/0x9c) [<805135dc>] (dump_stack) from [<8032136c>] (panic+0x84/0x1f8) [<8032136c>] (panic) from [<80549b24>] (mhi_pm_disable_transition+0x3b8/0x5b8) [<80549b24>] (mhi_pm_disable_transition) from [<80549ddc>] (mhi_power_down+0xb8/0x100) [<80549ddc>] (mhi_power_down) from [<7f5242b0>] (ath11k_mhi_op_status_cb+0x284/0x3ac [ath11k_pci]) [E][__mhi_device_get_sync] Did not enter M0 state, cur_state:RESET pm_state:SHUTDOWN Process [E][__mhi_device_get_sync] Did not enter M0 state, cur_state:RESET pm_state:SHUTDOWN Process [E][__mhi_device_get_sync] Did not enter M0 state, cur_state:RESET pm_state:SHUTDOWN Process [<7f5242b0>] (ath11k_mhi_op_status_cb [ath11k_pci]) from [<7f524878>] (ath11k_mhi_stop+0x10/0x20 [ath11k_pci]) [<7f524878>] (ath11k_mhi_stop [ath11k_pci]) from [<7f525b94>] (ath11k_pci_power_down+0x54/0x90 [ath11k_pci]) [<7f525b94>] (ath11k_pci_power_down [ath11k_pci]) from [<8056b2a8>] (pci_device_shutdown+0x30/0x44) [<8056b2a8>] (pci_device_shutdown) from [<805cfa0c>] (device_shutdown+0x124/0x174) [<805cfa0c>] (device_shutdown) from [<8033aaa4>] (kernel_restart+0xc/0x50) [<8033aaa4>] (kernel_restart) from [<8033ada8>] (SyS_reboot+0x178/0x1ec) [<8033ada8>] (SyS_reboot) from [<80301b80>] (ret_fast_syscall+0x0/0x34) Hence, disable wakeup/release mhi using hw_param for other hardwares. Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.5.0.1-01060-QCAHKSWPL_SILICONZ-1 Fixes: a05bd85133 ("ath11k: read and write registers below unwindowed address") Signed-off-by: Seevalamuthu Mariappan <quic_seevalam@quicinc.com> --- drivers/net/wireless/ath/ath11k/core.c | 5 +++++ drivers/net/wireless/ath/ath11k/hw.h | 1 + drivers/net/wireless/ath/ath11k/pci.c | 12 ++++++++---- 3 files changed, 14 insertions(+), 4 deletions(-)