diff mbox series

[3/4] scsi: ufs: Pass the clock scaling timeout as an argument

Message ID 20220427233855.2685505-4-bvanassche@acm.org
State Superseded
Headers show
Series Prepare for upstreaming Pixel 6 UFS support | expand

Commit Message

Bart Van Assche April 27, 2022, 11:38 p.m. UTC
Prepare for adding an additional ufshcd_clock_scaling_prepare() call
with a different timeout.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/ufs/ufshcd.c | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

Comments

Avri Altman April 28, 2022, 7:16 a.m. UTC | #1
> Prepare for adding an additional ufshcd_clock_scaling_prepare() call
> with a different timeout.
> 
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Avri Altman <avri.altman@wdc.com>

> ---
>  drivers/scsi/ufs/ufshcd.c | 19 +++++++++++++++----
>  1 file changed, 15 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
> index 3c83f4049031..60ba11b68735 100644
> --- a/drivers/scsi/ufs/ufshcd.c
> +++ b/drivers/scsi/ufs/ufshcd.c
> @@ -1108,6 +1108,12 @@ static u32 ufshcd_pending_cmds(struct ufs_hba
> *hba)
>         return pending;
>  }
> 
> +/*
> + * Wait until all pending SCSI commands and TMFs have finished or the
> timeout
> + * has expired.
> + *
> + * Return: 0 upon success; -EBUSY upon timeout.
> + */
>  static int ufshcd_wait_for_doorbell_clr(struct ufs_hba *hba,
>                                         u64 wait_timeout_us)
>  {
> @@ -1212,9 +1218,14 @@ static int ufshcd_scale_gear(struct ufs_hba *hba,
> bool scale_up)
>         return ret;
>  }
> 
> -static int ufshcd_clock_scaling_prepare(struct ufs_hba *hba)
> +/*
> + * Wait until all pending SCSI commands and TMFs have finished or the
> timeout
> + * has expired.
> + *
> + * Return: 0 upon success; -EBUSY upon timeout.
> + */
> +static int ufshcd_clock_scaling_prepare(struct ufs_hba *hba, u64
> timeout_us)
>  {
> -       #define DOORBELL_CLR_TOUT_US            (1000 * 1000) /* 1 sec */
>         int ret = 0;
>         /*
>          * make sure that there are no outstanding requests when
> @@ -1223,7 +1234,7 @@ static int ufshcd_clock_scaling_prepare(struct
> ufs_hba *hba)
>         ufshcd_scsi_block_requests(hba);
>         down_write(&hba->clk_scaling_lock);
> 
> -       if (ufshcd_wait_for_doorbell_clr(hba, DOORBELL_CLR_TOUT_US)) {
> +       if (ufshcd_wait_for_doorbell_clr(hba, timeout_us)) {
>                 ret = -EBUSY;
>                 up_write(&hba->clk_scaling_lock);
>                 ufshcd_scsi_unblock_requests(hba);
> @@ -1264,7 +1275,7 @@ static int ufshcd_devfreq_scale(struct ufs_hba *hba,
> bool scale_up)
>         if (!hba->clk_scaling.is_allowed)
>                 return -EBUSY;
> 
> -       ret = ufshcd_clock_scaling_prepare(hba);
> +       ret = ufshcd_clock_scaling_prepare(hba, 1 * USEC_PER_SEC);
>         if (ret)
>                 return ret;
diff mbox series

Patch

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 3c83f4049031..60ba11b68735 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -1108,6 +1108,12 @@  static u32 ufshcd_pending_cmds(struct ufs_hba *hba)
 	return pending;
 }
 
+/*
+ * Wait until all pending SCSI commands and TMFs have finished or the timeout
+ * has expired.
+ *
+ * Return: 0 upon success; -EBUSY upon timeout.
+ */
 static int ufshcd_wait_for_doorbell_clr(struct ufs_hba *hba,
 					u64 wait_timeout_us)
 {
@@ -1212,9 +1218,14 @@  static int ufshcd_scale_gear(struct ufs_hba *hba, bool scale_up)
 	return ret;
 }
 
-static int ufshcd_clock_scaling_prepare(struct ufs_hba *hba)
+/*
+ * Wait until all pending SCSI commands and TMFs have finished or the timeout
+ * has expired.
+ *
+ * Return: 0 upon success; -EBUSY upon timeout.
+ */
+static int ufshcd_clock_scaling_prepare(struct ufs_hba *hba, u64 timeout_us)
 {
-	#define DOORBELL_CLR_TOUT_US		(1000 * 1000) /* 1 sec */
 	int ret = 0;
 	/*
 	 * make sure that there are no outstanding requests when
@@ -1223,7 +1234,7 @@  static int ufshcd_clock_scaling_prepare(struct ufs_hba *hba)
 	ufshcd_scsi_block_requests(hba);
 	down_write(&hba->clk_scaling_lock);
 
-	if (ufshcd_wait_for_doorbell_clr(hba, DOORBELL_CLR_TOUT_US)) {
+	if (ufshcd_wait_for_doorbell_clr(hba, timeout_us)) {
 		ret = -EBUSY;
 		up_write(&hba->clk_scaling_lock);
 		ufshcd_scsi_unblock_requests(hba);
@@ -1264,7 +1275,7 @@  static int ufshcd_devfreq_scale(struct ufs_hba *hba, bool scale_up)
 	if (!hba->clk_scaling.is_allowed)
 		return -EBUSY;
 
-	ret = ufshcd_clock_scaling_prepare(hba);
+	ret = ufshcd_clock_scaling_prepare(hba, 1 * USEC_PER_SEC);
 	if (ret)
 		return ret;