[382] in linux-scsi channel archive

home help back first fref pref prev next nref lref last post

Re: Seagate vs. TMC-8xx device probing

daemon@ATHENA.MIT.EDU (Paul Gortmaker)
Sun Jul 16 03:40:03 1995

From: Paul Gortmaker <gpg109@rsphy1.anu.edu.au>
To: linux-scsi@vger.rutgers.edu
Date: Sun, 16 Jul 1995 15:03:27 +1000 (EST)
In-Reply-To: <199505262219.QAA20587@blade.boulder.openware.com> from "Drew Eckhardt" at May 26, 95 04:19:50 pm

A while ago, someone said:

> >Hi.  I have a strange problem with the installation of Linux on a
> >Compaq Deskpro 386/25 w/ a Future Domain TMC-830 SCSI card with a
> >single hard drive.  It comes up with 2 or 3 extra SCSI devices on
> >boot, which cause a kernel panic.  DOS, however, only finds one

and Drew replied:

> The Seagate/Future domain boards really suck, and don't allways work
> the way the programming manual says they should.  If you're having 
> problems, this may help -

[tip to swap CONTROL and DATA around deleted]

I just thought I'd mention that this fix works for me as well. The
card is an el-cheapo SB-Pro clone with a TMC-950 chip on it. Before I
would get bogus devices (and possibly not have my tape detected) about
60% of the time. Now it gets it right every boot. Perhaps the TMC chips
don't adhere 100% to the original Seacrate docos, and something like
the following is required.

Paul.

--- seagate.c~	Sun Jul 16 14:45:22 1995
+++ seagate.c	Sun Jul 16 14:50:05 1995
@@ -847,9 +847,15 @@
  *	going on.
  */
 	cli();
-	DATA = (unsigned char) ((1 << target) | (controller_type == SEAGATE ? 0x80 : 0x40));
-	CONTROL = BASE_CMD | CMD_DRVR_ENABLE | CMD_SEL | 
-		(reselect ? CMD_ATTN : 0);
+	if (controller_type == SEAGATE) {
+		DATA = (unsigned char) ((1 << target) | (controller_type == SEAGATE ? 0x80 : 0x40));
+		CONTROL = BASE_CMD | CMD_DRVR_ENABLE | CMD_SEL | 
+			(reselect ? CMD_ATTN : 0);
+	} else {
+		CONTROL = BASE_CMD | CMD_DRVR_ENABLE | CMD_SEL | 
+			(reselect ? CMD_ATTN : 0);
+		DATA = (unsigned char) ((1 << target) | (controller_type == SEAGATE ? 0x80 : 0x40));
+	}
 	sti();
 		while (!((status_read = STATUS) & STAT_BSY) && 
 			(jiffies < clock) && !st0x_aborted)

home help back first fref pref prev next nref lref last post