linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/2] scsi: ufs: export hibern8 entry and exit
@ 2019-10-23 16:49 Asutosh Das
  2019-10-23 16:49 ` [PATCH v3 2/2] scsi: ufs-qcom: enter and exit hibern8 during clock scaling Asutosh Das
  2019-11-11 15:27 ` [PATCH v3 1/2] scsi: ufs: export hibern8 entry and exit Pedro Sousa
  0 siblings, 2 replies; 5+ messages in thread
From: Asutosh Das @ 2019-10-23 16:49 UTC (permalink / raw)
  To: cang, rnayak, vinholikatti, jejb, martin.petersen
  Cc: linux-scsi, kernel-team, saravanak, salyzyn, Asutosh Das,
	Alim Akhtar, Avri Altman, Pedro Sousa, James E.J. Bottomley,
	Stanley Chu, Bean Huo, Tomas Winkler, Subhash Jadavani,
	Bjorn Andersson, Arnd Bergmann, open list

Qualcomm controllers need to be in hibern8 before scaling up
or down the clocks. Hence, export the hibern8 entry and exit
functions.

Signed-off-by: Asutosh Das <asutoshd@codeaurora.org>
---
 drivers/scsi/ufs/ufshcd.c | 8 ++++----
 drivers/scsi/ufs/ufshcd.h | 3 ++-
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index c28c144..57d9315 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -250,8 +250,6 @@ static int ufshcd_probe_hba(struct ufs_hba *hba);
 static int __ufshcd_setup_clocks(struct ufs_hba *hba, bool on,
 				 bool skip_ref_clk);
 static int ufshcd_setup_clocks(struct ufs_hba *hba, bool on);
-static int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);
-static int ufshcd_uic_hibern8_enter(struct ufs_hba *hba);
 static inline void ufshcd_add_delay_before_dme_cmd(struct ufs_hba *hba);
 static int ufshcd_host_reset_and_restore(struct ufs_hba *hba);
 static void ufshcd_resume_clkscaling(struct ufs_hba *hba);
@@ -3904,7 +3902,7 @@ static int __ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
 	return ret;
 }
 
-static int ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
+int ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
 {
 	int ret = 0, retries;
 
@@ -3916,8 +3914,9 @@ static int ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
 out:
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_uic_hibern8_enter);
 
-static int ufshcd_uic_hibern8_exit(struct ufs_hba *hba)
+int ufshcd_uic_hibern8_exit(struct ufs_hba *hba)
 {
 	struct uic_command uic_cmd = {0};
 	int ret;
@@ -3943,6 +3942,7 @@ static int ufshcd_uic_hibern8_exit(struct ufs_hba *hba)
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_uic_hibern8_exit);
 
 static void ufshcd_auto_hibern8_enable(struct ufs_hba *hba)
 {
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index e0fe247..1e3daf5 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -1107,5 +1107,6 @@ static inline u8 ufshcd_scsi_to_upiu_lun(unsigned int scsi_lun)
 
 int ufshcd_dump_regs(struct ufs_hba *hba, size_t offset, size_t len,
 		     const char *prefix);
-
+int ufshcd_uic_hibern8_enter(struct ufs_hba *hba);
+int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);
 #endif /* End of Header */
-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v3 2/2] scsi: ufs-qcom: enter and exit hibern8 during clock scaling
  2019-10-23 16:49 [PATCH v3 1/2] scsi: ufs: export hibern8 entry and exit Asutosh Das
@ 2019-10-23 16:49 ` Asutosh Das
  2019-11-11 15:54   ` Pedro Sousa
  2019-11-11 15:27 ` [PATCH v3 1/2] scsi: ufs: export hibern8 entry and exit Pedro Sousa
  1 sibling, 1 reply; 5+ messages in thread
From: Asutosh Das @ 2019-10-23 16:49 UTC (permalink / raw)
  To: cang, rnayak, vinholikatti, jejb, martin.petersen
  Cc: linux-scsi, kernel-team, saravanak, salyzyn, Asutosh Das,
	Andy Gross, Alim Akhtar, Avri Altman, Pedro Sousa,
	James E.J. Bottomley, open list:ARM/QUALCOMM SUPPORT, open list

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.

Signed-off-by: Asutosh Das <asutoshd@codeaurora.org>
---
 drivers/scsi/ufs/ufs-qcom.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
index a5b7148..55b1de5 100644
--- a/drivers/scsi/ufs/ufs-qcom.c
+++ b/drivers/scsi/ufs/ufs-qcom.c
@@ -1305,18 +1305,27 @@ 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,
@@ -1324,6 +1333,7 @@ static int ufs_qcom_clk_scale_notify(struct ufs_hba *hba,
 				    dev_req_params->hs_rate,
 				    false);
 		ufs_qcom_update_bus_bw_vote(host);
+		ufshcd_uic_hibern8_exit(hba);
 	}
 
 out:
-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* RE: [PATCH v3 1/2] scsi: ufs: export hibern8 entry and exit
  2019-10-23 16:49 [PATCH v3 1/2] scsi: ufs: export hibern8 entry and exit Asutosh Das
  2019-10-23 16:49 ` [PATCH v3 2/2] scsi: ufs-qcom: enter and exit hibern8 during clock scaling Asutosh Das
@ 2019-11-11 15:27 ` Pedro Sousa
  1 sibling, 0 replies; 5+ messages in thread
From: Pedro Sousa @ 2019-11-11 15:27 UTC (permalink / raw)
  To: Asutosh Das, cang, rnayak, vinholikatti, jejb, martin.petersen
  Cc: linux-scsi, kernel-team, saravanak, salyzyn, Alim Akhtar,
	Avri Altman, James E.J. Bottomley, Stanley Chu, Bean Huo,
	Tomas Winkler, Subhash Jadavani, Bjorn Andersson, Arnd Bergmann,
	open list

Hi Asutosh,

Reviewed-by: Pedro Sousa <pedrom.sousa@synopsys.com>

Thanks!
Pedro Sousa

-----Original Message-----
From: Asutosh Das <asutoshd@codeaurora.org> 
Sent: Wednesday, October 23, 2019 5:49 PM
To: cang@codeaurora.org; rnayak@codeaurora.org; vinholikatti@gmail.com; jejb@linux.vnet.ibm.com; martin.petersen@oracle.com
Cc: linux-scsi@vger.kernel.org; kernel-team@android.com; saravanak@google.com; salyzyn@google.com; Asutosh Das <asutoshd@codeaurora.org>; Alim Akhtar <alim.akhtar@samsung.com>; Avri Altman <avri.altman@wdc.com>; Pedro Sousa <pedrom.sousa@synopsys.com>; James E.J. Bottomley <jejb@linux.ibm.com>; Stanley Chu <stanley.chu@mediatek.com>; Bean Huo <beanhuo@micron.com>; Tomas Winkler <tomas.winkler@intel.com>; Subhash Jadavani <subhashj@codeaurora.org>; Bjorn Andersson <bjorn.andersson@linaro.org>; Arnd Bergmann <arnd@arndb.de>; open list <linux-kernel@vger.kernel.org>
Subject: [PATCH v3 1/2] scsi: ufs: export hibern8 entry and exit

Qualcomm controllers need to be in hibern8 before scaling up
or down the clocks. Hence, export the hibern8 entry and exit
functions.

Signed-off-by: Asutosh Das <asutoshd@codeaurora.org>
---
 drivers/scsi/ufs/ufshcd.c | 8 ++++----
 drivers/scsi/ufs/ufshcd.h | 3 ++-
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index c28c144..57d9315 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -250,8 +250,6 @@ static int ufshcd_probe_hba(struct ufs_hba *hba);
 static int __ufshcd_setup_clocks(struct ufs_hba *hba, bool on,
 				 bool skip_ref_clk);
 static int ufshcd_setup_clocks(struct ufs_hba *hba, bool on);
-static int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);
-static int ufshcd_uic_hibern8_enter(struct ufs_hba *hba);
 static inline void ufshcd_add_delay_before_dme_cmd(struct ufs_hba *hba);
 static int ufshcd_host_reset_and_restore(struct ufs_hba *hba);
 static void ufshcd_resume_clkscaling(struct ufs_hba *hba);
@@ -3904,7 +3902,7 @@ static int __ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
 	return ret;
 }
 
-static int ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
+int ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
 {
 	int ret = 0, retries;
 
@@ -3916,8 +3914,9 @@ static int ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
 out:
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_uic_hibern8_enter);
 
-static int ufshcd_uic_hibern8_exit(struct ufs_hba *hba)
+int ufshcd_uic_hibern8_exit(struct ufs_hba *hba)
 {
 	struct uic_command uic_cmd = {0};
 	int ret;
@@ -3943,6 +3942,7 @@ static int ufshcd_uic_hibern8_exit(struct ufs_hba *hba)
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_uic_hibern8_exit);
 
 static void ufshcd_auto_hibern8_enable(struct ufs_hba *hba)
 {
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index e0fe247..1e3daf5 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -1107,5 +1107,6 @@ static inline u8 ufshcd_scsi_to_upiu_lun(unsigned int scsi_lun)
 
 int ufshcd_dump_regs(struct ufs_hba *hba, size_t offset, size_t len,
 		     const char *prefix);
-
+int ufshcd_uic_hibern8_enter(struct ufs_hba *hba);
+int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);
 #endif /* End of Header */
-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* RE: [PATCH v3 2/2] scsi: ufs-qcom: enter and exit hibern8 during clock scaling
  2019-10-23 16:49 ` [PATCH v3 2/2] scsi: ufs-qcom: enter and exit hibern8 during clock scaling Asutosh Das
@ 2019-11-11 15:54   ` Pedro Sousa
  2020-05-20 16:55     ` Asutosh Das (asd)
  0 siblings, 1 reply; 5+ messages in thread
From: Pedro Sousa @ 2019-11-11 15:54 UTC (permalink / raw)
  To: Asutosh Das, cang, rnayak, vinholikatti, jejb, martin.petersen
  Cc: linux-scsi, kernel-team, saravanak, salyzyn, Andy Gross,
	Alim Akhtar, Avri Altman, James E.J. Bottomley,
	open list:ARM/QUALCOMM SUPPORT, open list

Hi Asutosh,

Please check comments.

-----Original Message-----
From: Asutosh Das <asutoshd@codeaurora.org> 
Sent: Wednesday, October 23, 2019 5:49 PM
To: cang@codeaurora.org; rnayak@codeaurora.org; vinholikatti@gmail.com; jejb@linux.vnet.ibm.com; martin.petersen@oracle.com
Cc: linux-scsi@vger.kernel.org; kernel-team@android.com; saravanak@google.com; salyzyn@google.com; Asutosh Das <asutoshd@codeaurora.org>; Andy Gross <agross@kernel.org>; Alim Akhtar <alim.akhtar@samsung.com>; Avri Altman <avri.altman@wdc.com>; Pedro Sousa <pedrom.sousa@synopsys.com>; James E.J. Bottomley <jejb@linux.ibm.com>; open list:ARM/QUALCOMM SUPPORT <linux-arm-msm@vger.kernel.org>; open list <linux-kernel@vger.kernel.org>
Subject: [PATCH v3 2/2] scsi: ufs-qcom: enter and exit hibern8 during clock scaling

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.

Signed-off-by: Asutosh Das <asutoshd@codeaurora.org>
---
 drivers/scsi/ufs/ufs-qcom.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
index a5b7148..55b1de5 100644
--- a/drivers/scsi/ufs/ufs-qcom.c
+++ b/drivers/scsi/ufs/ufs-qcom.c
@@ -1305,18 +1305,27 @@ 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,
@@ -1324,6 +1333,7 @@ static int ufs_qcom_clk_scale_notify(struct ufs_hba *hba,
 				    dev_req_params->hs_rate,
 				    false);
 		ufs_qcom_update_bus_bw_vote(host);
+		ufshcd_uic_hibern8_exit(hba);

Here you are creating the possibility of returning a success even if hibern8 exit fails.
If hibern8 exit fails the ufs recovery will be triggered and "err" variable will not get updated 
in this function, how is this handled? Did you tested this possibility?

 	}
 
 out:
-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.

This is just a doubt, it might make sense in this use case, please give me your thoughts.

Thank you,
Pedro Sousa




^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v3 2/2] scsi: ufs-qcom: enter and exit hibern8 during clock scaling
  2019-11-11 15:54   ` Pedro Sousa
@ 2020-05-20 16:55     ` Asutosh Das (asd)
  0 siblings, 0 replies; 5+ messages in thread
From: Asutosh Das (asd) @ 2020-05-20 16:55 UTC (permalink / raw)
  To: Pedro Sousa, cang, rnayak, vinholikatti, jejb, martin.petersen
  Cc: linux-scsi, kernel-team, saravanak, salyzyn, Andy Gross,
	Alim Akhtar, Avri Altman, James E.J. Bottomley,
	open list:ARM/QUALCOMM SUPPORT, open list

Hi Pedro,

On 11/11/2019 7:54 AM, Pedro Sousa wrote:
> Hi Asutosh,
> 
> Please check comments.
Sorry for missing out on this and thanks for your review.

> 
> -----Original Message-----
> From: Asutosh Das <asutoshd@codeaurora.org>
> Sent: Wednesday, October 23, 2019 5:49 PM
> To: cang@codeaurora.org; rnayak@codeaurora.org; vinholikatti@gmail.com; jejb@linux.vnet.ibm.com; martin.petersen@oracle.com
> Cc: linux-scsi@vger.kernel.org; kernel-team@android.com; saravanak@google.com; salyzyn@google.com; Asutosh Das <asutoshd@codeaurora.org>; Andy Gross <agross@kernel.org>; Alim Akhtar <alim.akhtar@samsung.com>; Avri Altman <avri.altman@wdc.com>; Pedro Sousa <pedrom.sousa@synopsys.com>; James E.J. Bottomley <jejb@linux.ibm.com>; open list:ARM/QUALCOMM SUPPORT <linux-arm-msm@vger.kernel.org>; open list <linux-kernel@vger.kernel.org>
> Subject: [PATCH v3 2/2] scsi: ufs-qcom: enter and exit hibern8 during clock scaling
> 
> 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.
> 
> Signed-off-by: Asutosh Das <asutoshd@codeaurora.org>
> ---
>   drivers/scsi/ufs/ufs-qcom.c | 12 +++++++++++-
>   1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
> index a5b7148..55b1de5 100644
> --- a/drivers/scsi/ufs/ufs-qcom.c
> +++ b/drivers/scsi/ufs/ufs-qcom.c
> @@ -1305,18 +1305,27 @@ 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,
> @@ -1324,6 +1333,7 @@ static int ufs_qcom_clk_scale_notify(struct ufs_hba *hba,
>   				    dev_req_params->hs_rate,
>   				    false);
>   		ufs_qcom_update_bus_bw_vote(host);
> +		ufshcd_uic_hibern8_exit(hba);
> 
> Here you are creating the possibility of returning a success even if hibern8 exit fails.
> If hibern8 exit fails the ufs recovery will be triggered and "err" variable will not get updated
> in this function, how is this handled? Did you tested this possibility?
> 
>   	}
>   
>   out:
> 


Yes - I agree with your comment. The error should be propagated from 
this function correctly to the caller. I'll push another version.

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
Linux Foundation Collaborative Project

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-05-20 16:55 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-23 16:49 [PATCH v3 1/2] scsi: ufs: export hibern8 entry and exit Asutosh Das
2019-10-23 16:49 ` [PATCH v3 2/2] scsi: ufs-qcom: enter and exit hibern8 during clock scaling Asutosh Das
2019-11-11 15:54   ` Pedro Sousa
2020-05-20 16:55     ` Asutosh Das (asd)
2019-11-11 15:27 ` [PATCH v3 1/2] scsi: ufs: export hibern8 entry and exit Pedro Sousa

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).