Problems with 53c810 SCSI Driver

Frohwalt Egerer (froh@devnull.franken.de)
Fri, 29 Sep 1995 06:13:34 +0100 (MET)


Has anybody ever successfully used two NCR 53c810 SCSI host adapters with
Linux?

I tried to, but had some problems. First it would pick the wrong interrupt
for the second host adapter until I changed 53c7,8xx.c from:

for (search = first_host; search && ((search->hostt != the_template) ||
(search->irq != host->irq)); search=search->next);

to

for (search = first_host; search && ((search->hostt != the_template) ||
(search->irq != host->irq) || (search == host)); search=search->next);

(Otherwise it would always report 'using interrupt handler previously
installed for scsi1')

The worse problem is, everything just locks up later on. I have
successfully used either of the controllers alone, but when both are
active testing the second one silently locks up my computer. _Where_
the lockup occurs depends on whether I cold or warm boot the machine.

scsi-ncr53c7,8xx : at PCI bus 0, device 1, function 0
scsi-ncr53c7,8xx : warning : revision of 2 is greater than 1.
scsi-ncr53c7,8xx : NCR53c810 at memory 0xfbfef000, io 0xe800, irq 10
scsi0 : using io mapped access
scsi0 : using initiator ID 7
scsi0 : using level active interrupts
scsi0 : burst length 8
scsi0 : using 40MHz SCSI clock
scsi0 : NCR code relocated to 0x002135a0
scsi0 : test 1 started
scsi-ncr53c7,8xx : at PCI bus 0, device 6, function 0
scsi-ncr53c7,8xx : warning : revision of 2 is greater than 1.
scsi-ncr53c7,8xx : NCR53c810 at memory 0xfafff000, io 0xe400, irq 11
(*** It locks up here after a 'reboot -r now' ***)
scsi1 : using io mapped access
scsi1 : using initiator ID 0
scsi1 : using level active interrupts
scsi1 : burst length 2
scsi1 : using 40MHz SCSI clock
scsi1 : NCR code relocated to 0x00215280
scsi1 : test 1 started
(*** It locks up here after a cold reset ***)

Note the second controller reports initiator ID 0 and burst length
2. This happens when I boot from LILO, when I boot via loadlin after
the DOS minicam.sys drivers are loaded the second controller also
reports initatior ID 7 and burst length 8. But it still locks up.

Btw. turning on OPTION_DEBUG_TRACE, OPTION_DEBUG_INTR and
OPTION_DEBUG_CORRUPTION doesn't reveal any further secrets.

Any ideas how to fix or debug this?

Froh

P.S.: Btw: It seems printk() can safely be used in an interrupt handler.
Is this correct? Any caveats?

-- 
  Frohwalt Egerer -- <http://home.pages.de/~froh> -- froh@devnull.franken.de

Parameter: What you get when you cross a paramedic and a meter maid. -- Larry Wall, Randal Schwartz: Programming Perl