On 4/11/2024 11:06 PM, Baochen Qiang wrote: > Now that all infrastructure is in place and ath12k is fixed to handle all the > corner cases, power down the ath12k firmware during suspend and power it back > up during resume. > > For suspend, two conditions needs to be satisfied: > > 1. since MHI channel unprepare would be done in late suspend stage, > ath12k needs to get all QMI-dependent things done before that stage. > 2. and because unprepare MHI channels requires a working MHI stack, > ath12k is not allowed to call mhi_power_down() until that finishes. > > So the original suspend callback is separated into two parts: the first part > handles all QMI-dependent things in suspend callback; while the second part > powers down MHI in suspend_late callback. This is valid because kernel calls > ath12k's suspend callback before calling all suspend_late callbacks, making > the first condition satisfied. And because MHI devices are children of ath12k > device (ab->dev), kernel guarantees that ath12k's suspend_late callback is > called after QRTR's suspend_late callback, this satisfies the second condition. > > Above analysis also applies to resume process. so the original resume > callback is separated into two parts: the first part powers up MHI stack > in resume_early callback, this guarantees MHI stack is working when > QRTR tries to prepare MHI channels (kernel calls QRTR's resume_early callback > after ath12k's resume_early callback, due to the child-father relationship); > the second part waits for the completion of restart, which would succeed > since MHI channels are ready for use by QMI. > > Another notable change is in power down path, we tell mhi_power_down() to not > to destroy MHI devices, making it possible for QRTR to help unprepare/prepare > MHI channels, and finally get us rid of the potential probe-defer issue when > resume. > > Also change related code due to interface changes. > > Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0-03427-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.15378.4 > Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1 > > Signed-off-by: Baochen Qiang <quic_bqiang@xxxxxxxxxxx> Acked-by: Jeff Johnson <quic_jjohnson@xxxxxxxxxxx>