diff options
author | Marco Peereboom <marco@cvs.openbsd.org> | 2004-10-10 15:08:11 +0000 |
---|---|---|
committer | Marco Peereboom <marco@cvs.openbsd.org> | 2004-10-10 15:08:11 +0000 |
commit | dd1bf398eea19b08c6371a3c88909f6c902da672 (patch) | |
tree | 4a213607af81e78683f209f27d824cff8ef9afff | |
parent | 49e54e4a7c98aef3d912cadafc871368b98c938b (diff) |
Work around "overlapped command" issue on devices that are slower than U320. Committing this due to a preemptive "I don't like your fix" comment from krw@
Tested by pval@, krw@ and me, ok krw@
-rw-r--r-- | sys/dev/ic/aic79xx_openbsd.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/dev/ic/aic79xx_openbsd.c b/sys/dev/ic/aic79xx_openbsd.c index 406dacc7bef..3afd2a5201f 100644 --- a/sys/dev/ic/aic79xx_openbsd.c +++ b/sys/dev/ic/aic79xx_openbsd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: aic79xx_openbsd.c,v 1.8 2004/08/23 20:16:01 marco Exp $ */ +/* $OpenBSD: aic79xx_openbsd.c,v 1.9 2004/10/10 15:08:10 marco Exp $ */ /* * Copyright (c) 2004 Milos Urbanek, Kenneth R. Westerback & Marco Peereboom @@ -497,6 +497,14 @@ ahd_execute_scb(void *arg, bus_dma_segment_t *dm_segs, int nsegments) if ((tstate->tagenable & mask) != 0) scb->hscb->control |= TAG_ENB; + /* disable tags and disconection to work around overlapped commands + * for non U320 devices + */ + if ((tinfo->curr.ppr_options & MSG_EXT_PPR_PROT_IUS) == 0) { + scb->hscb->control &= ~TAG_ENB; + scb->hscb->control &= ~DISCENB; + } + if ((tinfo->curr.ppr_options & MSG_EXT_PPR_PROT_IUS) != 0) { scb->flags |= SCB_PACKETIZED; if (scb->hscb->task_management != 0) |