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>
