linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 1/2] scsi: ufs: export hibern8 entry and exit
@ 2019-10-23 16:39 Asutosh Das
  2019-10-23 16:39 ` [PATCH v2 2/2] scsi: ufs-qcom: enter and exit hibern8 during clock scaling Asutosh Das
  0 siblings, 1 reply; 6+ messages in thread
From: Asutosh Das @ 2019-10-23 16:39 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,
	Arnd Bergmann, Bjorn Andersson, 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] 6+ messages in thread

* [PATCH v2 2/2] scsi: ufs-qcom: enter and exit hibern8 during clock scaling
  2019-10-23 16:39 [PATCH v2 1/2] scsi: ufs: export hibern8 entry and exit Asutosh Das
@ 2019-10-23 16:39 ` Asutosh Das
  2019-10-23 16:47   ` asutoshd
  0 siblings, 1 reply; 6+ messages in thread
From: Asutosh Das @ 2019-10-23 16:39 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 | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
index a5b7148..d117088 100644
--- a/drivers/scsi/ufs/ufs-qcom.c
+++ b/drivers/scsi/ufs/ufs-qcom.c
@@ -1305,6 +1305,9 @@ 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
@@ -1324,6 +1327,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] 6+ messages in thread

* Re: [PATCH v2 2/2] scsi: ufs-qcom: enter and exit hibern8 during clock scaling
  2019-10-23 16:39 ` [PATCH v2 2/2] scsi: ufs-qcom: enter and exit hibern8 during clock scaling Asutosh Das
@ 2019-10-23 16:47   ` asutoshd
  0 siblings, 0 replies; 6+ messages in thread
From: asutoshd @ 2019-10-23 16:47 UTC (permalink / raw)
  To: cang, rnayak, vinholikatti, jejb, martin.petersen
  Cc: linux-scsi, kernel-team, saravanak, salyzyn, Andy Gross,
	Alim Akhtar, Avri Altman, Pedro Sousa, James E.J. Bottomley,
	linux-arm-msm, linux-kernel, linux-scsi-owner

On 2019-10-23 09:39, Asutosh Das wrote:
> 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 | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
> index a5b7148..d117088 100644
> --- a/drivers/scsi/ufs/ufs-qcom.c
> +++ b/drivers/scsi/ufs/ufs-qcom.c
> @@ -1305,6 +1305,9 @@ 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);
The error handling is not done here.

>  		else
> @@ -1324,6 +1327,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:

In the post-change condition as well, the error handling is not done.
On error, it should be brought out of hibernate.
I'll put up another change fixing that.

-asd

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

* RE: [PATCH v2 1/2] scsi: ufs: export hibern8 entry and exit
  2021-09-28  9:06 ` [PATCH v2 1/2] scsi: ufs: export hibern8 entry and exit Bao D. Nguyen
  2021-09-28 22:28   ` Bart Van Assche
@ 2021-09-29  3:13   ` Alim Akhtar
  1 sibling, 0 replies; 6+ messages in thread
From: Alim Akhtar @ 2021-09-29  3:13 UTC (permalink / raw)
  To: 'Bao D. Nguyen', cang, asutoshd, martin.petersen, linux-scsi
  Cc: linux-arm-msm, 'Avri Altman',
	'James E.J. Bottomley', 'Bean Huo',
	'Stanley Chu', 'Bart Van Assche',
	'Jaegeuk Kim', 'Adrian Hunter',
	'Keoseong Park', 'open list'


Hello,

>-----Original Message-----
>From: nguyenb=codeaurora.org@mg.codeaurora.org
>[mailto:nguyenb=codeaurora.org@mg.codeaurora.org] On Behalf Of Bao D.
>Nguyen
>Sent: Tuesday, September 28, 2021 2:36 PM
>To: cang@codeaurora.org; asutoshd@codeaurora.org;
>martin.petersen@oracle.com; linux-scsi@vger.kernel.org
>Cc: linux-arm-msm@vger.kernel.org; Bao D . Nguyen
><nguyenb@codeaurora.org>; Alim Akhtar <alim.akhtar@samsung.com>; Avri
>Altman <avri.altman@wdc.com>; James E.J. Bottomley <jejb@linux.ibm.com>;
>Bean Huo <beanhuo@micron.com>; Stanley Chu <stanley.chu@mediatek.com>;
>Bart Van Assche <bvanassche@acm.org>; Jaegeuk Kim <jaegeuk@kernel.org>;
>Adrian Hunter <adrian.hunter@intel.com>; Keoseong Park
><keosung.park@samsung.com>; open list <linux-kernel@vger.kernel.org>
>Subject: [PATCH v2 1/2] scsi: ufs: export hibern8 entry and exit
>
>From: Asutosh Das <asutoshd@codeaurora.org>
>
>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>
>Signed-off-by: Bao D. Nguyen <nguyenb@codeaurora.org>
>---

Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>

> drivers/scsi/ufs/ufshcd.c | 4 ++--
> drivers/scsi/ufs/ufshcd.h | 1 +
> 2 files changed, 3 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index
>3841ab49..f3aad32 100644
>--- a/drivers/scsi/ufs/ufshcd.c
>+++ b/drivers/scsi/ufs/ufshcd.c
>@@ -227,7 +227,6 @@ static void ufshcd_hba_exit(struct ufs_hba *hba);
static
>int ufshcd_clear_ua_wluns(struct ufs_hba *hba);  static int
>ufshcd_probe_hba(struct ufs_hba *hba, bool async);  static int
>ufshcd_setup_clocks(struct ufs_hba *hba, bool on); -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); @@ -4116,7 +4115,7 @@ int
>ufshcd_link_recovery(struct ufs_hba *hba)  }
>EXPORT_SYMBOL_GPL(ufshcd_link_recovery);
>
>-static int ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
>+int ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
> {
> 	int ret;
> 	struct uic_command uic_cmd = {0};
>@@ -4138,6 +4137,7 @@ static int ufshcd_uic_hibern8_enter(struct ufs_hba
>*hba)
>
> 	return ret;
> }
>+EXPORT_SYMBOL_GPL(ufshcd_uic_hibern8_enter);
>
> int ufshcd_uic_hibern8_exit(struct ufs_hba *hba)  { diff --git
>a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index
52ea6f3..124f50b
>100644
>--- a/drivers/scsi/ufs/ufshcd.h
>+++ b/drivers/scsi/ufs/ufshcd.h
>@@ -1001,6 +1001,7 @@ int ufshcd_init(struct ufs_hba *, void __iomem *,
>unsigned int);  int ufshcd_link_recovery(struct ufs_hba *hba);  int
>ufshcd_make_hba_operational(struct ufs_hba *hba);  void
ufshcd_remove(struct
>ufs_hba *);
>+int ufshcd_uic_hibern8_enter(struct ufs_hba *hba);
> int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);  void
>ufshcd_delay_us(unsigned long us, unsigned long tolerance);  int
>ufshcd_wait_for_register(struct ufs_hba *hba, u32 reg, u32 mask,
>--
>The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a
>Linux Foundation Collaborative Project



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

* Re: [PATCH v2 1/2] scsi: ufs: export hibern8 entry and exit
  2021-09-28  9:06 ` [PATCH v2 1/2] scsi: ufs: export hibern8 entry and exit Bao D. Nguyen
@ 2021-09-28 22:28   ` Bart Van Assche
  2021-09-29  3:13   ` Alim Akhtar
  1 sibling, 0 replies; 6+ messages in thread
From: Bart Van Assche @ 2021-09-28 22:28 UTC (permalink / raw)
  To: Bao D. Nguyen, cang, asutoshd, martin.petersen, linux-scsi
  Cc: linux-arm-msm, Alim Akhtar, Avri Altman, James E.J. Bottomley,
	Bean Huo, Stanley Chu, Jaegeuk Kim, Adrian Hunter, Keoseong Park,
	open list

On 9/28/21 2:06 AM, Bao D. Nguyen wrote:
> Qualcomm controllers need to be in hibern8 before scaling up
> or down the clocks. Hence, export the hibern8 entry and exit
> functions.
Reviewed-by: Bart Van Assche <bvanassche@acm.org>

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

* [PATCH v2 1/2] scsi: ufs: export hibern8 entry and exit
       [not found] <cover.1632818942.git.nguyenb@codeaurora.org>
@ 2021-09-28  9:06 ` Bao D. Nguyen
  2021-09-28 22:28   ` Bart Van Assche
  2021-09-29  3:13   ` Alim Akhtar
  0 siblings, 2 replies; 6+ messages in thread
From: Bao D. Nguyen @ 2021-09-28  9:06 UTC (permalink / raw)
  To: cang, asutoshd, martin.petersen, linux-scsi
  Cc: linux-arm-msm, Bao D . Nguyen, Alim Akhtar, Avri Altman,
	James E.J. Bottomley, Bean Huo, Stanley Chu, Bart Van Assche,
	Jaegeuk Kim, Adrian Hunter, Keoseong Park, open list

From: Asutosh Das <asutoshd@codeaurora.org>

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>
Signed-off-by: Bao D. Nguyen <nguyenb@codeaurora.org>
---
 drivers/scsi/ufs/ufshcd.c | 4 ++--
 drivers/scsi/ufs/ufshcd.h | 1 +
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 3841ab49..f3aad32 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -227,7 +227,6 @@ static void ufshcd_hba_exit(struct ufs_hba *hba);
 static int ufshcd_clear_ua_wluns(struct ufs_hba *hba);
 static int ufshcd_probe_hba(struct ufs_hba *hba, bool async);
 static int ufshcd_setup_clocks(struct ufs_hba *hba, bool on);
-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);
@@ -4116,7 +4115,7 @@ int ufshcd_link_recovery(struct ufs_hba *hba)
 }
 EXPORT_SYMBOL_GPL(ufshcd_link_recovery);
 
-static int ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
+int ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
 {
 	int ret;
 	struct uic_command uic_cmd = {0};
@@ -4138,6 +4137,7 @@ static int ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_uic_hibern8_enter);
 
 int ufshcd_uic_hibern8_exit(struct ufs_hba *hba)
 {
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index 52ea6f3..124f50b 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -1001,6 +1001,7 @@ int ufshcd_init(struct ufs_hba *, void __iomem *, unsigned int);
 int ufshcd_link_recovery(struct ufs_hba *hba);
 int ufshcd_make_hba_operational(struct ufs_hba *hba);
 void ufshcd_remove(struct ufs_hba *);
+int ufshcd_uic_hibern8_enter(struct ufs_hba *hba);
 int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);
 void ufshcd_delay_us(unsigned long us, unsigned long tolerance);
 int ufshcd_wait_for_register(struct ufs_hba *hba, u32 reg, u32 mask,
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project


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

end of thread, other threads:[~2021-09-29  3:24 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-23 16:39 [PATCH v2 1/2] scsi: ufs: export hibern8 entry and exit Asutosh Das
2019-10-23 16:39 ` [PATCH v2 2/2] scsi: ufs-qcom: enter and exit hibern8 during clock scaling Asutosh Das
2019-10-23 16:47   ` asutoshd
     [not found] <cover.1632818942.git.nguyenb@codeaurora.org>
2021-09-28  9:06 ` [PATCH v2 1/2] scsi: ufs: export hibern8 entry and exit Bao D. Nguyen
2021-09-28 22:28   ` Bart Van Assche
2021-09-29  3:13   ` Alim Akhtar

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).