Message ID | 20220427233855.2685505-4-bvanassche@acm.org |
---|---|
State | Superseded |
Headers | show |
Series | Prepare for upstreaming Pixel 6 UFS support | expand |
> 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 --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;
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(-)