2020-11-12 05:47:32

by Stanley Chu

[permalink] [raw]
Subject: [PATCH] scsi: ufs: Add retry flow for failed hba enabling

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 <[email protected]>
---
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);
--
2.18.0


2020-11-13 05:31:51

by Can Guo

[permalink] [raw]
Subject: Re: [PATCH] scsi: ufs: Add retry flow for failed hba enabling

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 <[email protected]>

Reviewed-by: Can Guo <[email protected]>

> ---
> 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);

2020-11-17 04:37:53

by Martin K. Petersen

[permalink] [raw]
Subject: Re: [PATCH] scsi: ufs: Add retry flow for failed hba enabling


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!

--
Martin K. Petersen Oracle Linux Engineering

2020-11-20 03:34:51

by Martin K. Petersen

[permalink] [raw]
Subject: Re: [PATCH] scsi: ufs: Add retry flow for failed hba enabling

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

--
Martin K. Petersen Oracle Linux Engineering