aic Driver problems

Doug Ledford dledford at dialnet.net
Mon Sep 8 20:52:48 PDT 1997


--------

> Abort reset flags 0x401
> 
> while idle, 	LASTPHASE=0x1
> 		SCSISIGI=0xfa
> 		SEQADR=0x5
> 		SSTAT0=0x5
> 		SSTAT1=0x0

Now I'm starting to see what's going on.  LASTPHASE indicates BUSFREE, so 
nothing had been happening prior to the reset, SCSISIGI (which is the same 
as SCSISIGO and only depends on the current phase, in this case it is more 
appropriately SCSISIGO) indicates that we are requesting selection on a 
device on the bus, and it hasn't responded in 10 seconds time.  The bad 
thing here is, we should have gotten a selection timeout interrupt, and we 
didn't.  SSTAT1 confirms this (flag 0x80 in STAT1 is SELTO, but that isn't 
set, so we didn't get one).  So, seems to me the second bus on these cards 
is not properly getting or acknowledging the ENSELTIMO flag to enable 
timeouts on selections for bus B.

Now, as to Justin and Dan's comments about not downloading the sequencer 
program.  We are setting the p->bus_type = AIC_TWIN prior to our call to 
aic7xxx_loadseq(), which then uses the p->bus_type to set options |= 
TWIN_CHANNEL, so that should be working fine.  The aic7xxx.seq file also 
uses the TWIN_CHANNEL flag for those sections, so we shouldn't have a 
problem with flags not matching.  The only other thing I can think of is if 
the fact that we aic7xxx_loadseq();
outb( ENABLE, p->base + BCTL);
after we have done the board settings might cause the board to ignore 
settings passed in when the board was disabled (we used to download the 
sequencer prior to doing the settings of the SCSI registers on the card).

Also, the old driver used to explicitly gate us to the B bus before setting 
the SCSI flags for the B bus, maybe we need to do so now.

You could try this patch out and see how it goes then:

--- linux-2_0_31-pre/drivers/scsi/aic7xxx.c.old	Mon Sep  8 21:59:29 1997
+++ linux/drivers/scsi/aic7xxx.c	Mon Sep  8 22:40:46 1997
@@ -5088,4 +5088,6 @@
      * bus B values first.
      */
+    outb(SELBUSB, p->base + SBLKCTL);
+
     outb(p->scsi_id_b, p->base + SCSIID);
     scsi_conf = inb(p->base + SCSICONF + 1);


-- 
*****************************************************************************
* Doug Ledford                      *   Unix, Novell, Dos, Windows 3.x,     *
* dledford at dialnet.net    873-DIAL  *     WfW, Windows 95 & NT Technician   *
*   PPP access $14.95/month         *****************************************
*   Springfield, MO and surrounding * Usenet news, e-mail and shell account.*
*   communities.  Sign-up online at * Web page creation and hosting, other  *
*   873-9000 V.34                   * services available, call for info.    *
*****************************************************************************





More information about the aic7xxx mailing list