2021-11-12 07:27:14

by Seevalamuthu M (QUIC)

[permalink] [raw]
Subject: [PATCH] ath11k: add hw_param for wakeup_mhi

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 <[email protected]>
---
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(-)

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);

--
2.7.4



2021-11-15 10:21:48

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] ath11k: add hw_param for wakeup_mhi

Seevalamuthu Mariappan <[email protected]> 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 <[email protected]>

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.

--
https://patchwork.kernel.org/project/linux-wireless/list/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches

2021-11-16 08:05:05

by Seevalamuthu M (QUIC)

[permalink] [raw]
Subject: RE: [PATCH] ath11k: add hw_param for wakeup_mhi

> Seevalamuthu Mariappan <[email protected]> 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 <[email protected]>
>
> 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

2021-11-17 07:43:41

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] ath11k: add hw_param for wakeup_mhi

"Seevalamuthu Mariappan (Temp) (QUIC)" <[email protected]>
writes:

>> Seevalamuthu Mariappan <[email protected]> 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 <[email protected]>
>>
>> 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.

--
https://patchwork.kernel.org/project/linux-wireless/list/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches

2021-11-19 08:04:54

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] ath11k: add hw_param for wakeup_mhi

Seevalamuthu Mariappan <[email protected]> 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 <[email protected]>
> Signed-off-by: Kalle Valo <[email protected]>

Patch applied to ath-next branch of ath.git, thanks.

081e2d6476e3 ath11k: add hw_param for wakeup_mhi

--
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches