Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 30 Apr 1995 18:49:30 +0200
From:      se@MI.Uni-Koeln.DE (Stefan Esser)
To:        Bill Fenner <fenner@parc.xerox.com>
Cc:        current@FreeBSD.org
Subject:   Re: NCR assertion fails?
Message-ID:  <199504301649.AA20198@FileServ1.MI.Uni-Koeln.DE>
In-Reply-To: Bill Fenner <fenner@parc.xerox.com> "Re: NCR assertion fails?" (Apr 30,  2:54)

next in thread | previous in thread | raw e-mail | index | archive | help
On Apr 30,  2:54, Bill Fenner wrote:
} Subject: Re: NCR assertion fails?

} It turns out that my bogus interrupt scheme was causing problems, perhaps
} because the NCR driver didn't like shared interrupts, perhaps because I
} had jumpered the NCR card to interrupt B so that it wouldn't lock up on
} probe.  I finally got my Plato motherboard to assign two different
} interrupts to the two cards, and now I am getting 3MB/sec reads =)

Ok. Should have read all replies first.

Your problem wasn't caused by sharing interrupts, 
but by using the PCI IntB line.

PCI is designed to work with multi function cards
(e.g. SCSI + Ethernet on one card, even implemented
on the same chip).

And only if there is more than one interrupt source
do you use not PCI IntA, but also IntB ...

The NCR is a single function chip and always should
use IntA only. This is even hard coded into some 
PCI configuration space register on the chip:

ncr0 <ncr 53c810 scsi> rev 1 int a irq 9 on pci0:14
                             ^^^^^
        reg20: virtual=0xf2aa2800 physical=0xffbff800 size=0x100
        using shared irq 9.

By making it drive the PCI IntB line, without having 
any IRQ line actually connected, the NCR was unable 
to issue any interrupts. This lead to timeouts and
command failure in the initialisation phase, were the
CPU still is involved in the transfers.

As soon as the system was going multi user, the NCR
did all the processing on its own, and thus there 
were no more timeouts. But since it took the CPU 
upto 1 second (the command timeout value) to check
for command completion by polling the device, you 
got that 1 transfer per second performance (50KB/s).

Anyway: I guess some comments on PCI setup rules 
ought to go into the FAQ, I guess:

1) Bus master slots required for most devices (which)
2) Only PCI IntA used by currently supported PCI cards
3) Shared interrupts supported, but shouldn't be used
   if there are plenty of free IRQs to assigne to PCI
4) PCI interrupts are assigned to slots on all currently
   sold motherboards. Level interrupts are used by all 
   PCI devices supported in FreeBSD.

I'll try to find time to write something about this 
before 2.1 comes out ...
But if anybody wants to beat me on that :)

STefan

-- 
 Stefan Esser				Internet:	<se@ZPR.Uni-Koeln.DE>
 Zentrum fuer Paralleles Rechnen	Tel:		+49 221 4706017
 Universitaet zu Koeln			FAX:		+49 221 4705160
 Weyertal 80
 50931 Koeln



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