Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/ic Fix for a driver bug provided by Jon W Grubbs (jg...



details:   https://anonhg.NetBSD.org/src/rev/f350f21d12ec
branches:  trunk
changeset: 486616:f350f21d12ec
user:      ragge <ragge%NetBSD.org@localhost>
date:      Fri May 26 21:11:00 2000 +0000

description:
Fix for a driver bug provided by Jon W Grubbs (jgrubbs%megsinet.net@localhost).

This bug is only visible on some disks, and I have verified that it works
correctly on VAX. However, du to the author, it is a problem on other
machines/disks as well. Here's the author's comments:

> The MI code for the NCR5380 has a small bug in it  The RZ56 wants to
> negotiate for Synchronous Data Transfers and when it does, the current code
> looks like it will send a REJECT message as the spec calls for when we cant
> handle the request.  However, a couple of lines of code in the
> ncr5380_msg_in routine are missing wrt the PARITY message and anything that
> wants to send a REJECT message.  The ATN setup that is done in
> ncr_sched_msgout is immediately negated by the final byte ACK sequence in
> this routine.  This causes bad things to happen to an RZ56.

diffstat:

 sys/dev/ic/ncr5380sbc.c |  6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diffs (27 lines):

diff -r 4d740c990367 -r f350f21d12ec sys/dev/ic/ncr5380sbc.c
--- a/sys/dev/ic/ncr5380sbc.c   Fri May 26 21:05:23 2000 +0000
+++ b/sys/dev/ic/ncr5380sbc.c   Fri May 26 21:11:00 2000 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ncr5380sbc.c,v 1.36 2000/03/29 13:09:02 tsutsui Exp $  */
+/*     $NetBSD: ncr5380sbc.c,v 1.37 2000/05/26 21:11:00 ragge Exp $    */
 
 /*
  * Copyright (c) 1995 David Jones, Gordon W. Ross
@@ -1685,6 +1685,8 @@
                NCR_TRACE("msg_in: PARITY_ERROR\n", 0);
                /* Resend the last message. */
                ncr_sched_msgout(sc, sc->sc_msgout);
+               /* Reset icmd after scheduling the REJECT cmd - jwg */
+               icmd = NCR5380_READ(sc, sci_icmd) & SCI_ICMD_RMASK;
                break;
 
        case MSG_MESSAGE_REJECT:
@@ -1746,6 +1748,8 @@
                /* fallthrough */
        reject:
                ncr_sched_msgout(sc, SEND_REJECT);
+               /* Reset icmd after scheduling the REJECT cmd - jwg */
+               icmd = NCR5380_READ(sc, sci_icmd) & SCI_ICMD_RMASK;
                break;
 
        abort:



Home | Main Index | Thread Index | Old Index