| From a613b49162379f8d31f42b76f04d1f458aeff7e3 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 27 Sep 2018 11:17:11 +1000 |
| Subject: scsi: NCR5380: Handle BUS FREE during reselection |
| |
| From: Finn Thain <fthain@telegraphics.com.au> |
| |
| [ Upstream commit ca694afad707cb3ae2fdef3b28454444d9ac726e ] |
| |
| The X3T9.2 specification (draft) says, under "6.1.4.2 RESELECTION time-out |
| procedure", that a target may assert RST or go to BUS FREE phase if the |
| initiator does not respond within 200 us. Something like this has been |
| observed with AztecMonster II target. When it happens, all we can do is wait |
| for the target to try again. |
| |
| Tested-by: Michael Schmitz <schmitzmic@gmail.com> |
| Signed-off-by: Finn Thain <fthain@telegraphics.com.au> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/scsi/NCR5380.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c |
| index 5c3ffb466bb10..bce6c990d060a 100644 |
| --- a/drivers/scsi/NCR5380.c |
| +++ b/drivers/scsi/NCR5380.c |
| @@ -2039,6 +2039,9 @@ static void NCR5380_reselect(struct Scsi_Host *instance) |
| |
| if (NCR5380_poll_politely(hostdata, |
| STATUS_REG, SR_REQ, SR_REQ, 2 * HZ) < 0) { |
| + if ((NCR5380_read(STATUS_REG) & (SR_BSY | SR_SEL)) == 0) |
| + /* BUS FREE phase */ |
| + return; |
| shost_printk(KERN_ERR, instance, "reselect: REQ timeout\n"); |
| do_abort(instance); |
| return; |
| -- |
| 2.20.1 |
| |