mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
scsi: ufs: Add retry flow for failed HBA enabling
Once HBA enabling has failed, add retry mechanism and allow vendors to apply specific tweaks before the next retry. For example, vendors can do vendor-specific host reset flow in variant function "ufshcd_vops_hce_enable_notify()". Link: https://lore.kernel.org/r/20201112054537.22494-1-stanley.chu@mediatek.com Reviewed-by: Can Guo <cang@codeaurora.org> Signed-off-by: Stanley Chu <stanley.chu@mediatek.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
5443bdc4cc
commit
6081b12ceb
1 changed files with 10 additions and 4 deletions
|
@ -4328,8 +4328,10 @@ static inline void ufshcd_hba_stop(struct ufs_hba *hba)
|
|||
*/
|
||||
static int ufshcd_hba_execute_hce(struct ufs_hba *hba)
|
||||
{
|
||||
int retry;
|
||||
int retry_outer = 3;
|
||||
int retry_inner;
|
||||
|
||||
start:
|
||||
if (!ufshcd_is_hba_active(hba))
|
||||
/* change controller state to "reset state" */
|
||||
ufshcd_hba_stop(hba);
|
||||
|
@ -4355,13 +4357,17 @@ static int ufshcd_hba_execute_hce(struct ufs_hba *hba)
|
|||
ufshcd_delay_us(hba->vps->hba_enable_delay_us, 100);
|
||||
|
||||
/* wait for the host controller to complete initialization */
|
||||
retry = 50;
|
||||
retry_inner = 50;
|
||||
while (ufshcd_is_hba_active(hba)) {
|
||||
if (retry) {
|
||||
retry--;
|
||||
if (retry_inner) {
|
||||
retry_inner--;
|
||||
} else {
|
||||
dev_err(hba->dev,
|
||||
"Controller enable failed\n");
|
||||
if (retry_outer) {
|
||||
retry_outer--;
|
||||
goto start;
|
||||
}
|
||||
return -EIO;
|
||||
}
|
||||
usleep_range(1000, 1100);
|
||||
|
|
Loading…
Reference in a new issue