Date: Mon, 25 Sep 2000 09:02:28 -0600 From: "Justin T. Gibbs" <gibbs@plutotech.com> To: "Jonel Rienton" <jmr@freebsduser.org> Cc: stable@FreeBSD.org Subject: Re: MFC of ahc driver updates (long-ish) Message-ID: <200009251501.JAA44574@pluto.plutotech.com> In-Reply-To: Your message of "Mon, 25 Sep 2000 09:37:21 CDT." <009201c026fe$1ce9b1c0$17161d0a@jonelrienton.org>
next in thread | previous in thread | raw e-mail | index | archive | help
>Justin, > >i've attached the log today. thanks. In the future, send text as text. Using uudecode is a pain. I believe the your problem is caused by a firmware bug in the Seagate drive and perhaps the aic7xxx driver being overly strict in its conformance to the SPI-3 spec. If you search for this code in aic7xxx.c: /* * According to the spec, a DT only * period factor with no DT option * set implies async. */ if ((ppr_options & MSG_EXT_PPR_DT_REQ) == 0 && period == 9) offset = 0; And add braces and a printf to where offset is set to 0, I would bet money that your printf will get hit. The code might look like this: if ((ppr_options & MSG_EXT_PPR_DT_REQ) == 0 && period == 9) { printf("%s: target %d returned DT sync period " "without specifying DT transfers. " "Async transfers implied.\n", ahc_name(ahc), devinfo->target); offset = 0; } I can't see any other way for the driver to drop all the way to async like this. The funny thing is that the drive seems to be agreeing that transfers are now async since you are not getting parity errors for later I/O. Very odd. If the printf does get hit, you should be able to run the drive at 40MHz sync. Just lower the negotiated rate using SCSI-Select. I'm going to see if I can dig up one of these drives at work and see if I can get similar behavior out of it. -- Justin To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200009251501.JAA44574>