summaryrefslogtreecommitdiffstats
path: root/sys/dev/aic7xxx
diff options
context:
space:
mode:
authorgibbs <gibbs@FreeBSD.org>1998-06-28 02:58:57 +0000
committergibbs <gibbs@FreeBSD.org>1998-06-28 02:58:57 +0000
commit110fbf62fd06296eec10ec704fa82036d8ec4807 (patch)
tree15c36e950c8fabedbf47f3972f9d876ea3b351ff /sys/dev/aic7xxx
parentb82eb9a541c5e7dd2d75fe7888eb2e8ca62885f1 (diff)
downloadFreeBSD-src-110fbf62fd06296eec10ec704fa82036d8ec4807.zip
FreeBSD-src-110fbf62fd06296eec10ec704fa82036d8ec4807.tar.gz
Some revisions of the aic7880 have a problem where, if the
data fifo is full, but the PCI input latch is not empty, HDMAEN cannot be cleared. The fix used here is to attempt to drain the data fifo until there is space for the input latch to drain and HDMAEN de-asserts. This is a 1 instruction fix, so it should have no performance impact.
Diffstat (limited to 'sys/dev/aic7xxx')
-rw-r--r--sys/dev/aic7xxx/aic7xxx.seq12
1 files changed, 10 insertions, 2 deletions
diff --git a/sys/dev/aic7xxx/aic7xxx.seq b/sys/dev/aic7xxx/aic7xxx.seq
index d7338a5..f3fad03 100644
--- a/sys/dev/aic7xxx/aic7xxx.seq
+++ b/sys/dev/aic7xxx/aic7xxx.seq
@@ -35,7 +35,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: aic7xxx.seq,v 1.75 1997/08/13 17:02:28 gibbs Exp $
+ * $Id: aic7xxx.seq,v 1.76 1997/09/27 19:37:27 gibbs Exp $
*/
#include <dev/aic7xxx/aic7xxx.reg>
@@ -944,7 +944,15 @@ dma_fifoempty:
dma_dmadone:
and DFCNTRL, ~(SCSIEN|SDMAEN|HDMAEN);
dma_halt:
- test DFCNTRL, (SCSIEN|SDMAEN|HDMAEN) jnz dma_halt;
+ /*
+ * Some revisions of the aic7880 have a problem where, if the
+ * data fifo is full, but the PCI input latch is not empty,
+ * HDMAEN cannot be cleared. The fix used here is to attempt
+ * to drain the data fifo until there is space for the input
+ * latch to drain and HDMAEN de-asserts.
+ */
+ mov NONE, DFDAT;
+ test DFCNTRL, HDMAEN jnz dma_halt;
return:
ret;
OpenPOWER on IntegriCloud