Message ID | 20201112054537.22494-1-stanley.chu@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | scsi: ufs: Add retry flow for failed hba enabling | expand |
On 2020-11-12 13:45, Stanley Chu wrote: > Once hba enabling is failed, add retry mechanism and in the > meanwhile allow vendors to apply specific handlings before > the next retry. For example, vendors can do vendor-specific > host reset flow in variant function "ufshcd_vops_hce_enable_notify()". > > Signed-off-by: Stanley Chu <stanley.chu@mediatek.com> Reviewed-by: Can Guo <cang@codeaurora.org> > --- > drivers/scsi/ufs/ufshcd.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > index 8001bbfec5c0..9186ee01379a 100644 > --- a/drivers/scsi/ufs/ufshcd.c > +++ b/drivers/scsi/ufs/ufshcd.c > @@ -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);
Stanley, > Once hba enabling is failed, add retry mechanism and in the meanwhile > allow vendors to apply specific handlings before the next retry. For > example, vendors can do vendor-specific host reset flow in variant > function "ufshcd_vops_hce_enable_notify()". Applied to 5.11/scsi-staging, thanks!
On Thu, 12 Nov 2020 13:45:37 +0800, Stanley Chu wrote: > Once hba enabling is failed, add retry mechanism and in the > meanwhile allow vendors to apply specific handlings before > the next retry. For example, vendors can do vendor-specific > host reset flow in variant function "ufshcd_vops_hce_enable_notify()". Applied to 5.11/scsi-queue, thanks! [1/1] scsi: ufs: Add retry flow for failed HBA enabling https://git.kernel.org/mkp/scsi/c/6081b12ceb7d
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 8001bbfec5c0..9186ee01379a 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -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);
Once hba enabling is failed, add retry mechanism and in the meanwhile allow vendors to apply specific handlings before the next retry. For example, vendors can do vendor-specific host reset flow in variant function "ufshcd_vops_hce_enable_notify()". Signed-off-by: Stanley Chu <stanley.chu@mediatek.com> --- drivers/scsi/ufs/ufshcd.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)