[1620] in linux-scsi channel archive

home help back first fref pref prev next nref lref last post

Re: SCSI Host ordering...

daemon@ATHENA.MIT.EDU (Gerard Roudier)
Wed Mar 26 17:00:03 1997

Date: 	Wed, 26 Mar 1997 22:54:44 +0000 (GMT)
From: Gerard Roudier <groudier@club-internet.fr>
To: David Gray <davidg@newton.dialix.com.au>
cc: linux-scsi@vger.rutgers.edu
In-Reply-To: <3338E018.3E1AC2FA@newton.dialix.oz.au>


On Wed, 26 Mar 1997, David Gray wrote:

> Hi,
> 
> I have a system with two Symbios SCSI controllers in it, a 810a and a
> 875 ultra fast wide controller.

Me too.
 
> The system disk hangs off the 875 and the 810 has a couple of slower
> external shoeboxes on it.

Mine does not.
 
> The system is configured so that it expects to find the root filesystem
> + swap spaces on /dev/sda.
> 
> The PC's BIOS allows me to specify a 'boot order' for the two SCSI cards
> and I have it set to scan the 875 before the 810 so it boots off the
> fast wide system disk.

Aie!
 
> However, as soon as Linux comes up, the ncr53c8xx driver orders the two
> adaptors with the 810 as host-0 and the 875 as host-1. As soon as I
> attach any disks to the 810, they get assigned as /dev/sda, sdb etc, the
> system disk gets /dev/sdc, Linux can't find it's root filesystem and the
> system won't boot.

That's a general problem. There is no guarantee, the kernel always orders 
disks the same way BIOSes do. In fact, this order is decided by low-level 
drivers under Linux.

> Is there anything that I can do to change the ordering of the host
> adaptors? I am using the 1.18c drivers on a 2.0.29 kernel.

Yes. Since your adapters have different chips, you just have to make 
the driver detect first your 875.
When I've ported the BSD driver, I've trusted the way Drew's driver 
probed PCI NCR device IDs from the PCI configuration.
With SDMS BIOS 3.0, I noticed that 810 were always primary and 825 
secondary and that driver order was ok.
When I've installed my 875, I have had no problems since my 'sda' 
disk was the first TARLUN of the 810A and I (un)fortunately missed the 
problem you are reporting. :(
 
For the moment, you can apply manually the following change to ncr53c8xx.c:
I did not try it, but that should work.

 static struct {
      ushort pci_device_id;
      int chip;
      int max_revision;
      int min_revision;
 } pci_chip_ids[] = { 
-     {PCI_DEVICE_ID_NCR_53C810,   810, -1, -1}, 
+     {PCI_DEVICE_ID_NCR_53C875,   875, -1, -1}, 
/*   {PCI_DEVICE_ID_NCR_53C810AP, 810, -1, -1}, */
     {PCI_DEVICE_ID_NCR_53C815,   815, -1, -1},
     {PCI_DEVICE_ID_NCR_53C820,   820, -1, -1},
     {PCI_DEVICE_ID_NCR_53C825,   825, -1, -1},
     {PCI_DEVICE_ID_NCR_53C860,   860, -1, -1},
-     {PCI_DEVICE_ID_NCR_53C875,   875, -1, -1},
+     {PCI_DEVICE_ID_NCR_53C810,   810, -1, -1},
     {PCI_DEVICE_ID_NCR_53C885,   885, -1, -1},
     {PCI_DEVICE_ID_NCR_53C895,   895, -1, -1},
     {PCI_DEVICE_ID_NCR_53C896,   896, -1, -1}
 };

I will try to find something cleaner for the next driver release.

Thanks, for your report.

Regards,  Gerard.

home help back first fref pref prev next nref lref last post