Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 05 Jun 1996 08:11:31 -0700
From:      "Justin T. Gibbs" <gibbs@freefall.freebsd.org>
To:        Beck Peccoz Amedeo <gea@masternet.it>
Cc:        freebsd-current@FreeBSD.org
Subject:   Re: CD-ROM hags the machine 
Message-ID:  <199606051511.IAA07388@freefall.freebsd.org>
In-Reply-To: Your message of "Wed, 05 Jun 1996 11:04:29 %2B0200." <31B54D9D.41C67EA6@masternet.it> 

next in thread | previous in thread | raw e-mail | index | archive | help
> The only way to get out of this is to shut the system down...
>
> I belive it's a software problem as:
>1) the CD-ROM works under two other operting systems on the same machine
>2) the CD-ROM works with 2.2 kernel.GENERIC

I'd be very surprised to see the same sources under a different
kernel config behave differently in this regard.

> Anyway my machine is configured as follows:
> - Controller SCSI Adaptech 2940 U/UW bios v1.21
> - HD SCSI Wide Seagate ST32550W (connected to the wide connector)
> - CD-ROM SCSI-II Sony CDU 76-S (connected to the standard connector)
>
> May this be due to actual VM problems? If not should I argue there's a
>bug in the ahc controller?

Its not a VM problem.  Here's a patch I've put out to some driver testers
that may address this problem.

>-- 
>
>Beck-Peccoz Amedeo
>GEA Software S.r.l.
>Via Deffeyes, 1
>11025 Gressoney Saint Jean (AO)
>ITALY
>
>Tel. ++39-125-366302 Fax. ++39-125-366415
>

--
Justin T. Gibbs
===========================================
  FreeBSD: Turning PCs into workstations
===========================================


Index: dev/aic7xxx/aic7xxx.seq
===================================================================
RCS file: /usr/cvs/src/sys/dev/aic7xxx/aic7xxx.seq,v
retrieving revision 1.40
diff -c -r1.40 aic7xxx.seq
*** aic7xxx.seq	1996/05/31 06:30:15	1.40
--- aic7xxx.seq	1996/06/04 20:06:33
***************
*** 83,88 ****
--- 83,93 ----
  start:
  	and	FLAGS,0x0f		/* clear target specific flags */
  	mvi	SCSISEQ,ENRSELI		/* Always allow reselection */
+ 	clr	SCSIRATE		/*
+ 					 * We don't know the target we will
+ 					 * connect to, so default to narrow
+ 					 * transfers to avoid parity problems.
+ 					 */
  poll_for_work:
  	/*
  	 * Are we a twin channel device?
***************
*** 274,282 ****
  set_sxfrctl0:
  	mov	SXFRCTL0,SINDEX
  
! 	mov	SCSISEQ,ALLZEROS		/*
! 						 * Don't allow (re)selections
! 						 * until after the next busfree.
  						 */
  	mvi	CLRSINT1,CLRBUSFREE
  	mvi	CLRSINT0,0x60			/* CLRSELDI|CLRSELDO */
--- 279,287 ----
  set_sxfrctl0:
  	mov	SXFRCTL0,SINDEX
  
! 	mov	SCSISEQ,ENAUTOATNP		/*
! 						 * ATN on parity errors
! 						 * for "in" phases
  						 */
  	mvi	CLRSINT1,CLRBUSFREE
  	mvi	CLRSINT0,0x60			/* CLRSELDI|CLRSELDO */
***************
*** 499,508 ****
   * a MESSAGE REJECT.
   */
  p_mesgout_loop:
  	test	SSTAT0,SPIORDY	jz p_mesgout_loop
  	cmp	DINDEX,1	jne p_mesgout_outb	/* last byte? */
  	mvi	CLRSINT1,CLRATNO			/* drop ATN */
- 	test	SSTAT1,PHASEMIS	jnz p_mesgout_phasemis
  p_mesgout_outb:
  	dec	DINDEX
  	or	CLRSINT0, CLRSPIORDY
--- 504,514 ----
   * a MESSAGE REJECT.
   */
  p_mesgout_loop:
+ 	test	SSTAT1,PHASEMIS	jnz p_mesgout_phasemis
  	test	SSTAT0,SPIORDY	jz p_mesgout_loop
+ 	test	SSTAT1,PHASEMIS	jnz p_mesgout_phasemis
  	cmp	DINDEX,1	jne p_mesgout_outb	/* last byte? */
  	mvi	CLRSINT1,CLRATNO			/* drop ATN */
  p_mesgout_outb:
  	dec	DINDEX
  	or	CLRSINT0, CLRSPIORDY
***************
*** 866,871 ****
--- 872,878 ----
  	or	CLRSINT0, CLRSPIORDY
  	mov	NONE,SCSIDATL			/*dummy read from latch to ACK*/
  inb_next_wait:
+ 	test	SSTAT1,PHASEMIS	jnz mesgin_phasemis
  	test	SSTAT0,SPIORDY	jz inb_next_wait /* wait for next byte */
  inb_first:
  	mov	DINDEX,SINDEX
Index: i386/scsi/aic7xxx.c
===================================================================
RCS file: /usr/cvs/src/sys/i386/scsi/aic7xxx.c,v
retrieving revision 1.72
diff -c -r1.72 aic7xxx.c
*** aic7xxx.c	1996/05/31 06:32:09	1.72
--- aic7xxx.c	1996/06/01 08:01:34
***************
*** 1744,1757 ****
                          printf("parity error during %s phase.\n", phase);
  
  			/*
! 			 * Assert ATN if we got a parity error in an "in"
! 			 * phase, and stuff the message buffer with
  			 * the appropriate message.  "In" phases have set
  			 * mesg_out to something other than MSG_NOP.
  			 */
  			if(mesg_out != MSG_NOP) {
- 				u_char scsisig = AHC_INB(ahc, SCSISIGI);
- 				AHC_OUTB(ahc, SCSISIGO, scsisig | ATNO);
  				AHC_OUTB(ahc, MSG0, mesg_out);
  				AHC_OUTB(ahc, MSG_LEN, 1);
  			}
--- 1744,1756 ----
                          printf("parity error during %s phase.\n", phase);
  
  			/*
! 			 * We've set the hardware to assert ATN if we   
! 			 * get a parity error on "in" phases, so all we  
! 			 * need to do is stuff the message buffer with
  			 * the appropriate message.  "In" phases have set
  			 * mesg_out to something other than MSG_NOP.
  			 */
  			if(mesg_out != MSG_NOP) {
  				AHC_OUTB(ahc, MSG0, mesg_out);
  				AHC_OUTB(ahc, MSG_LEN, 1);
  			}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199606051511.IAA07388>