Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 27 Sep 1998 21:42:18 +0200
From:      Tor.Egge@fast.no
To:        freebsd@magnet.geophysik.tu-freiberg.de
Cc:        freebsd-scsi@FreeBSD.ORG, freebsd-smp@FreeBSD.ORG
Subject:   Re: AHA 2742T+CAM+SMP problems 2nd. try #3
Message-ID:  <199809271942.VAA01789@midten.fast.no>
In-Reply-To: Your message of "Sun, 27 Sep 1998 13:14:06 %2B0200 (CEST)"
References:  <199809271114.NAA09487@magnet.geophysik.tu-freiberg.de>

next in thread | previous in thread | raw e-mail | index | archive | help
> EISA INTCONTROL = 00000e00

Interrupts 10, 11 and 12 are level sensitive.

> ahc0: <Adaptec 274X SCSI host adapter> at 0x1c00-0x1cff irq 11 on eisa0 slot 1
> ahc0: Using Level Sensitive Interrupts

The scsi card generates an active low/level interrupt 11.


With an MP table that says

I/O Ints:       Type    Polarity    Trigger     Bus ID   IRQ    APIC ID PIN#
                INT      conforms    conforms        0    11          2   11


this means that int pin 11 on the IOAPIC is currently programmed as 
active high/edge trigger.

It should probably be programmed as active high/level trigger. I assume
you have the MP spec document.

If you configure your scsi card to use edge interrupts, you'll probably
avoid this problem.

Index: mpapic.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/i386/mpapic.c,v
retrieving revision 1.32
diff -u -r1.32 mpapic.c
--- mpapic.c	1998/09/06 22:41:40	1.32
+++ mpapic.c	1998/09/27 18:39:04
@@ -303,12 +303,7 @@
 			printf("EISA INTCONTROL = %08x\n", intcontrol);
 		}
 
-		/*
-		 * EISA IRQ's are identical to ISA irq's, regardless of
-		 * whether they are edge or level since they go through
-		 * the level/polarity converter gadget.
-		 */
-		level = 0;
+		level = ((intcontrol >> eirq) & 1);
 
 		if (level)
 			*flags |= IOART_TRGRLVL;
@@ -378,7 +373,8 @@
 		 * level/polarity converter gadget. */
 
 		if (level == 1)			/* XXX Always false */
-			pol = 0;		/* if level, active low */
+			/* level => active high on IO APIC (low on EISA bus) */
+			pol = 1;		/* if level, active high */
 		else
 			pol = 1;		/* if edge, high edge */
 

- Tor Egge

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-scsi" in the body of the message



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