mirror of
https://github.com/openwrt/openwrt.git
synced 2025-04-08 11:54:53 +00:00
kernel: add missing patch description
Add missing patch description, so all generic patches can be applied to a kernel tree using 'git am'. Fixes: d23e0a0086 ("kernel: backport MHI patch required by an upcoming mac80211 update") Signed-off-by: Daniel Golle <daniel@makrotopia.org>
This commit is contained in:
parent
2aba2b32ce
commit
ef22d4af1f
@ -1,3 +1,69 @@
|
||||
From 3471bba1b33a8b54cb0be9d30b7aac4fb2766365 Mon Sep 17 00:00:00 2001
|
||||
From: Baochen Qiang <quic_bqiang@quicinc.com>
|
||||
Date: Tue, 5 Mar 2024 10:13:18 +0800
|
||||
Subject: [PATCH] bus: mhi: host: Add mhi_power_down_keep_dev() API to support
|
||||
system suspend/hibernation
|
||||
|
||||
Currently, ath11k fails to resume from system suspend/hibernation on some
|
||||
the x86 host machines with below error message:
|
||||
|
||||
```
|
||||
ath11k_pci 0000:06:00.0: timeout while waiting for restart complete
|
||||
```
|
||||
|
||||
This happens because, ath11k powers down the MHI stack during suspend and
|
||||
that leads to destruction of the struct device associated with the MHI
|
||||
channels. And during resume, ath11k calls calling mhi_sync_power_up() to
|
||||
power up the MHI subsystem and that eventually calls the driver framework's
|
||||
device_add() API from mhi_create_devices(). But the PM framework blocks the
|
||||
struct device creation during device_add() and this leads to probe deferral
|
||||
as below:
|
||||
|
||||
```
|
||||
mhi mhi0_IPCR: Driver qcom_mhi_qrtr force probe deferral
|
||||
```
|
||||
|
||||
The reason for deferring device creation during resume is explained in
|
||||
dpm_prepare():
|
||||
|
||||
/*
|
||||
* It is unsafe if probing of devices will happen during suspend or
|
||||
* hibernation and system behavior will be unpredictable in this
|
||||
* case. So, let's prohibit device's probing here and defer their
|
||||
* probes instead. The normal behavior will be restored in
|
||||
* dpm_complete().
|
||||
*/
|
||||
|
||||
Due to the device probe deferral, qcom_mhi_qrtr_probe() API is not getting
|
||||
called during resume and thus MHI channels are not prepared. So this blocks
|
||||
the QMI messages from being transferred between ath11k and firmware,
|
||||
resulting in a firmware initialization failure.
|
||||
|
||||
After consulting with Rafael, it was decided to not destroy the struct
|
||||
device for the MHI channels during system suspend/hibernation because the
|
||||
device is bound to appear again during resume.
|
||||
|
||||
So to achieve this, a new API called mhi_power_down_keep_dev() is
|
||||
introduced for MHI controllers to keep the struct device when required.
|
||||
This API is similar to the existing mhi_power_down() API, except that it
|
||||
keeps the struct device associated with MHI channels instead of destroying
|
||||
them.
|
||||
|
||||
Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.30
|
||||
|
||||
Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com>
|
||||
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
|
||||
Reviewed-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20240305021320.3367-2-quic_bqiang@quicinc.com
|
||||
[mani: reworded the commit message and subject]
|
||||
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
|
||||
---
|
||||
drivers/bus/mhi/host/init.c | 1 +
|
||||
drivers/bus/mhi/host/internal.h | 1 +
|
||||
drivers/bus/mhi/host/pm.c | 42 ++++++++++++++++++++++++++++-----
|
||||
include/linux/mhi.h | 18 +++++++++++++-
|
||||
4 files changed, 55 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/bus/mhi/host/init.c
|
||||
+++ b/drivers/bus/mhi/host/init.c
|
||||
@@ -43,6 +43,7 @@ const char * const dev_state_tran_str[DE
|
||||
|
Loading…
x
Reference in New Issue
Block a user