From ef22d4af1f21a83e5981ee410b29c6e8bb55ec86 Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Tue, 18 Feb 2025 19:31:48 +0000 Subject: [PATCH] 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 --- ...-mhi_power_down_keep_dev-API-to-supp.patch | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/target/linux/generic/backport-6.6/853-v6.10-bus-mhi-host-Add-mhi_power_down_keep_dev-API-to-supp.patch b/target/linux/generic/backport-6.6/853-v6.10-bus-mhi-host-Add-mhi_power_down_keep_dev-API-to-supp.patch index 826b39b518..75c87e378b 100644 --- a/target/linux/generic/backport-6.6/853-v6.10-bus-mhi-host-Add-mhi_power_down_keep_dev-API-to-supp.patch +++ b/target/linux/generic/backport-6.6/853-v6.10-bus-mhi-host-Add-mhi_power_down_keep_dev-API-to-supp.patch @@ -1,3 +1,69 @@ +From 3471bba1b33a8b54cb0be9d30b7aac4fb2766365 Mon Sep 17 00:00:00 2001 +From: Baochen Qiang +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 +Reviewed-by: Manivannan Sadhasivam +Reviewed-by: Jeff Johnson +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 +--- + 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 -- 2.30.2