ANDROID: scsi: ufs: Add suspend/resume SCSI command processing support

This functionality is needed by UFS drivers to e.g. suspend SCSI command
processing while reprogramming encryption keys if the hardware does not
support concurrent I/O and key reprogramming.

Bug: 227177294
Change-Id: I10f11e67da81fae7063674838760903d2c178baf
Signed-off-by: Bart Van Assche <bvanassche@google.com>
This commit is contained in:
Bart Van Assche
2022-03-29 13:47:10 -07:00
committed by Todd Kjos
parent 64293a57f1
commit fae5207ecc
2 changed files with 23 additions and 0 deletions

View File

@@ -1700,6 +1700,26 @@ unblock_reqs:
ufshcd_scsi_unblock_requests(hba);
}
/*
* Block processing of new SCSI commands and wait until pending SCSI
* commands and TMFs have finished. ufshcd_exec_dev_cmd() and
* ufshcd_issue_devman_upiu_cmd() are not affected by this function.
*
* Return: 0 upon success; -EBUSY upon timeout.
*/
int ufshcd_freeze_scsi_devs(struct ufs_hba *hba, u64 timeout_us)
{
return ufshcd_clock_scaling_prepare(hba, timeout_us);
}
EXPORT_SYMBOL_GPL(ufshcd_freeze_scsi_devs);
/* Resume processing of SCSI commands. */
void ufshcd_unfreeze_scsi_devs(struct ufs_hba *hba)
{
ufshcd_clock_scaling_unprepare(hba, true);
}
EXPORT_SYMBOL_GPL(ufshcd_unfreeze_scsi_devs);
/**
* ufshcd_hold - Enable clocks that were gated earlier due to ufshcd_release.
* Also, exit from hibern8 mode and set the link as active.

View File

@@ -1241,6 +1241,9 @@ int ufshcd_read_string_desc(struct ufs_hba *hba, u8 desc_index,
int ufshcd_hold(struct ufs_hba *hba, bool async);
void ufshcd_release(struct ufs_hba *hba);
int ufshcd_freeze_scsi_devs(struct ufs_hba *hba, u64 timeout_us);
void ufshcd_unfreeze_scsi_devs(struct ufs_hba *hba);
void ufshcd_map_desc_id_to_length(struct ufs_hba *hba, enum desc_idn desc_id,
int *desc_length);