1. 09 Apr, 2024 2 commits
    • Baochen Qiang's avatar
      wifi: ath11k: support hibernation · 166a490f
      Baochen Qiang authored
      Now that all infrastructure is in place and ath11k is fixed to handle all the
      corner cases, power down the ath11k firmware during suspend and power it back
      up during resume. This fixes the problem when using hibernation with ath11k PCI
      devices.
      
      For suspend, two conditions needs to be satisfied:
              1. since MHI channel unprepare would be done in late suspend stage,
                 ath11k needs to get all QMI-dependent things done before that stage.
              2. and because unprepare MHI channels requires a working MHI stack,
                 ath11k 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
      ath11k's suspend callback before all suspend_late callbacks, making the first
      condition happy. And because MHI devices are children of ath11k device
      (ab->dev), kernel guarantees that ath11k'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 ath11k's resume_early callback, due to the child-father relationship);
      the second part waits for the completion of restart, which won't fail now
      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 probe-defer issue when resume.
      
      Also change related code due to interface changes.
      
      Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.30
      Tested-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarBaochen Qiang <quic_bqiang@quicinc.com>
      Acked-by: default avatarJeff Johnson <quic_jjohnson@quicinc.com>
      Signed-off-by: default avatarKalle Valo <quic_kvalo@quicinc.com>
      Link: https://msgid.link/20240305021320.3367-4-quic_bqiang@quicinc.com
      166a490f
    • Baochen Qiang's avatar
      net: qrtr: support suspend/hibernation · e0cd1185
      Baochen Qiang authored
      MHI devices may not be destroyed during suspend/hibernation, so need
      to unprepare/prepare MHI channels throughout the transition, this is
      done by adding suspend/resume callbacks.
      
      The suspend callback is called in the late suspend stage, this means
      MHI channels are still alive at suspend stage, and that makes it
      possible for an MHI controller driver to communicate with others over
      those channels at suspend stage. While the resume callback is called
      in the early resume stage, for a similar reason.
      
      Also note that we won't do unprepare/prepare when MHI device is in
      suspend state because it's pointless if MHI is only meant to go through
      a suspend/resume transition, instead of a complete power cycle.
      
      Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.30
      Signed-off-by: default avatarBaochen Qiang <quic_bqiang@quicinc.com>
      Reviewed-by: default avatarManivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
      Reviewed-by: default avatarJeff Johnson <quic_jjohnson@quicinc.com>
      Signed-off-by: default avatarKalle Valo <quic_kvalo@quicinc.com>
      Link: https://msgid.link/20240305021320.3367-3-quic_bqiang@quicinc.com
      e0cd1185
  2. 08 Apr, 2024 2 commits
  3. 05 Apr, 2024 3 commits
  4. 04 Apr, 2024 33 commits