From: Faiz Abbas Date: Tue, 15 Oct 2019 12:54:34 +0000 (+0530) Subject: scsi: Retry inquiry 3 times to overcome Unit Attention condition X-Git-Url: http://git.dujemihanovic.xyz/?a=commitdiff_plain;h=d48f00ed11d04eb76d4510b3db1d7f36f758d4e9;p=u-boot.git scsi: Retry inquiry 3 times to overcome Unit Attention condition The UFS SCSI device LUNs are observed to return failure the first time a unit ready inquiry is sent and pass on the second try. Send this inquiry 3 times to make sure device is ready. Signed-off-by: Faiz Abbas --- diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c index e55bb256a9..0639eb6b31 100644 --- a/drivers/scsi/scsi.c +++ b/drivers/scsi/scsi.c @@ -481,6 +481,7 @@ static int scsi_detect_dev(struct udevice *dev, int target, int lun, lbaint_t capacity; unsigned long blksz; struct scsi_cmd *pccb = (struct scsi_cmd *)&tempccb; + int count, err; pccb->target = target; pccb->lun = lun; @@ -516,9 +517,14 @@ static int scsi_detect_dev(struct udevice *dev, int target, int lun, dev_desc->target = pccb->target; dev_desc->lun = pccb->lun; - pccb->datalen = 0; - scsi_setup_test_unit_ready(pccb); - if (scsi_exec(dev, pccb)) { + for (count = 0; count < 3; count++) { + pccb->datalen = 0; + scsi_setup_test_unit_ready(pccb); + err = scsi_exec(dev, pccb); + if (!err) + break; + } + if (err) { if (dev_desc->removable) { dev_desc->type = perq; goto removable;