scsi: ufs: ufs-qcom: Enter and exit hibern8 during clock scaling
authorAsutosh Das <asutoshd@codeaurora.org>
Tue, 28 Sep 2021 09:06:13 +0000 (02:06 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 29 Sep 2021 03:33:32 +0000 (23:33 -0400)
Qualcomm controller needs to be in hibern8 before scaling clocks.  This
change puts the controller in hibern8 state before scaling and brings it
out after scaling of clocks.

Link: https://lore.kernel.org/r/212b7aaf6d834c4a8c682fdac4a59b84013ed573.1632818942.git.nguyenb@codeaurora.org
Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>
Signed-off-by: Asutosh Das <asutoshd@codeaurora.org>
Signed-off-by: Bao D. Nguyen <nguyenb@codeaurora.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/ufs/ufs-qcom.c

index 92d4c61..92f5bb4 100644 (file)
@@ -1212,24 +1212,34 @@ static int ufs_qcom_clk_scale_notify(struct ufs_hba *hba,
        int err = 0;
 
        if (status == PRE_CHANGE) {
+               err = ufshcd_uic_hibern8_enter(hba);
+               if (err)
+                       return err;
                if (scale_up)
                        err = ufs_qcom_clk_scale_up_pre_change(hba);
                else
                        err = ufs_qcom_clk_scale_down_pre_change(hba);
+               if (err)
+                       ufshcd_uic_hibern8_exit(hba);
+
        } else {
                if (scale_up)
                        err = ufs_qcom_clk_scale_up_post_change(hba);
                else
                        err = ufs_qcom_clk_scale_down_post_change(hba);
 
-               if (err || !dev_req_params)
+
+               if (err || !dev_req_params) {
+                       ufshcd_uic_hibern8_exit(hba);
                        goto out;
+               }
 
                ufs_qcom_cfg_timers(hba,
                                    dev_req_params->gear_rx,
                                    dev_req_params->pwr_rx,
                                    dev_req_params->hs_rate,
                                    false);
+               ufshcd_uic_hibern8_exit(hba);
        }
 
 out: