mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
FROMGIT: scsi: ufs: core: Pass the clock scaling timeout as an argument
Prepare for adding an additional ufshcd_clock_scaling_prepare() call with a
different timeout.
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Change-Id: I598d940c34b70b8fa05e4039fcd651ecf601208f
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Bug: 267974767
(cherry picked from commit b434ecfb73 git://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next)
Signed-off-by: Bart Van Assche <bvanassche@google.com>
This commit is contained in:
committed by
Todd Kjos
parent
8c47a2d09f
commit
511cfcf182
@@ -1131,6 +1131,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)
|
||||
{
|
||||
@@ -1235,9 +1241,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
|
||||
@@ -1248,7 +1259,7 @@ static int ufshcd_clock_scaling_prepare(struct ufs_hba *hba)
|
||||
down_write(&hba->clk_scaling_lock);
|
||||
|
||||
if (!hba->clk_scaling.is_allowed ||
|
||||
ufshcd_wait_for_doorbell_clr(hba, DOORBELL_CLR_TOUT_US)) {
|
||||
ufshcd_wait_for_doorbell_clr(hba, timeout_us)) {
|
||||
ret = -EBUSY;
|
||||
up_write(&hba->clk_scaling_lock);
|
||||
mutex_unlock(&hba->wb_mutex);
|
||||
@@ -1290,7 +1301,7 @@ static int ufshcd_devfreq_scale(struct ufs_hba *hba, bool scale_up)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
ret = ufshcd_clock_scaling_prepare(hba);
|
||||
ret = ufshcd_clock_scaling_prepare(hba, 1 * USEC_PER_SEC);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user