4 Hosts

Contents of this section

This section gives specific information about the various host adapters that are supported in some way or another under linux.

4.1 Supported and Unsupported Hardware

Drivers in the distribution kernel :

Adaptec 152x, Adaptec 154x (including clones from Bustek and DTC 329x boards), Adaptec 174x, Adaptec 274x/284x/2940, EATA-DMA protocol compilant boards (all DPT PMXXXXX/XX and SKXXXXX/XX except the PM2001, some boards from NEC and ATT), Future Domain 850, 885, 950, and other boards in that series (but not the 840, 841, 880, and 881 boards unless you make the appropriate patch), Future Domain 16x0 with TMC-1800, TMC-18C30, or TMC-18C50 chips, NCR53c8xx,PAS16 SCSI ports, Seagate ST0x, Trantor T128/T130/T228 boards, Ultrastor 14F, 24F, and 34F, and Western Digital 7000.

Alpha drivers: Richoh GSI-8

Many of the ALPHA drivers are available via anonymous FTP from ftp://tsx-11.mit.edu:/pub/linux/ALPHA/scsi

Drivers that are being developed, but aren't publically available yet, and modifications needed to make existing drivers compatable with other boards: DPT PM2001

Announcements WILL be made when drivers are available for public alpha testing. Until then, please don't use up the developers' valuable time with mail asking for release dates, etc.

SCSI hosts that will not work :

SCSI hosts that will NEVER work:

If you want to run Linux on an unsupported piece of hardware, your options are to either write a driver yourself (Eric Youngdale and I are usually willing to answer technical questions concerning the Linux SCSI drivers) or to commision a driver.

Multiple host adapters

With some host adapters (see buyers guide : Buyers' Guide : Feature Comparison), you can use multiple host adapters of the same type in the same system. With multiple adapters of the same type in the same system, generally the one at the lowest address will be scsi0, the one at the next address scsi1, etc.

In all cases, it is possible to use multiple host adapters of different types, provided that none of their addresses conflict. SCSI controllers are scanned in the order specified in the builtin_scsi_hosts[ ]array in drivers/scsi/hosts.c, with the order currently being

  1. Ultrastor
  2. Adaptec 151x/152x
  3. Buslogic
  4. Adaptec 154x
  5. Adaptec 174x
  6. Future Domain 16x0
  7. Always IN2000
  8. Generic NCR5380
  9. PAS16
  10. Seagate
  11. Trantor T128/T130
  12. NCR53c8xx
  13. EATA-DMA
  14. WD7000
  15. debugging driver.

In most cases (ie, you aren't trying to use both Buslogic and Adaptec drivers), this can be changed to suit your needs (ie, keeping the same devices when new SCSI devices are added to the system on a new controller) by moving the individual entries.

4.2 Common Problems

SCSI timeouts

Make sure interrupts are enabled correctly, and there are no IRQ, DMA, or address conflicts with other boards.

Failure of autoprobe routines on boards that rely on

BIOS for autoprobe.

If your SCSI adapter is one of the following :

and it is not detected on bootup, ie you get a

scsi : 0 hosts

message or a

scsi%d : type

message is not printed for each supported SCSI adapter installed in the system, you may have a problem with the autoprobe routine not knowing about your board.

Autodetection will fail for drivers using the BIOS for autodetection if the BIOS is disabled. Double check that your BIOS is enabled, and not conflicting with any other peripherial BIOSes.

Autodetection will also fail if the board's ``signature'' and/or BIOS address don't match known ones.

If the BIOS is installed, please use DOS and DEBUG to find a signature that will detect your board -

Ie, if your board lives at 0xc8000, under DOS do

debug
d c800:0
q

and send a message to the SCSI channel of the mailing list with the ASCII message, with the length and offset from the base address (ie, 0xc8000). Note that the exact text is required, and you should provide both the hex and ASCII portions of the text.

If no BIOS is installed, and you are using an Adaptec 152x, Trantor T128, or Seagate driver, you can use command line or compile time overrides to force detection.

Please consult the appropriate subsection for your SCSI board as well as general flaky .

Failure of boards using memory mapped I/O

(This include the Trantor T128 and Seagate boards, but not the Adaptec, Generic NCR5380, PAS16, and Ultrastor drivers)

This is often caused when the memory mapped I/O ports are incorrectly cached. You should have the board's address space marked as uncachable in the XCMOS settings.

If this is not possible, you will have to disable cache entirely.

If you have manually specified the address of the board, remember that Linux needs the actual address of the board, and not the 16 byte segment the documentation may refer to. Ie, 0xc8000 would be correct, 0xc800 would not work and could cause memory corruption.

``kernel panic : cannot mount root device'' when booting

an ALPHA driver boot floppy

You'll need to edit the binary image of the kernel (before or after writing it out to disk), and modify a few two byte fields (little endian) to gurantee that it will work on your system.

  1. default swap device at offset 502, this should be set to 0x00 0x00
  2. ram disk size at offset 504, this should be set to the size of the boot floppy in K - ie, 5.25" = 1200, 3.5" = 1440. This means the bytes are
    3.5" : 0xA0 0x05
    5.25" : 0xB0  0x04
    
  3. root device offset at 508, this should be 0x00 0x00, ie the boot device.

dd or rawrite the file to a disk. Insert the disk in the first floppy drive, wait until it prompts you to insert the root disk, and insert the root floppy from your distribution.

Installing a device driver not included with the distribution kernel

You need to start with the version of the kernel used by the driver author. This revision may be alluded to in the documentation included with the driver.

Various recent kernel revisions can be found at ftp://nic.funet.fi/pub/OS/Linux/PEOPLE/Linus

as linux-version.tar.gz

They are also mirrored at tsx-11.mit.edu and various other sites.

cd to /usr/src.

Remove your old Linux sources, if you want to keep a backup copy of them

mv linux linux-old

Untar the archive

gunzip 

Apply the patches. The patches will be relative to some directory in the filesystem. By examining the output file lines in the patch file (grep for ˆ---), you can tell where this is - ie patches with these lines

--- ./kernel/blk_drv/scsi/Makefile

--- ./config.in Wed Sep  1 16:19:33 1993

would have the files relative to /usr/src/linux.

Untar the driver sources at an appropriate place - you can type

tar tfv patches.tar

to get a listing, and move files as necessary (The SCSI driver files should live in /usr/src/linux/kernel/drivers/scsi).

Either cd to the directory they are relative to and type

patch -p0 

or tell patch to strip off leading path components. Ie, if the files started with

--- linux-new/kernel/blk_drv/scsi/Makefile

and you wanted to apply them while in /usr/src/linux, you could cd to /usr/src/linux and type

patch -p1 < patches

to strip off the ``linux-new'' component.

After you have applied the patches, look for any patch rejects, which will be the name of the rejected file with a # suffix appended.

find /usr/src/linux/ -name ``*#'' -print

If any of these exist, look at them. In some cases, the differences will be in RCS identifiers and will be harmless, in other cases, you'll have to manually apply important parts. Documentation on diffs files and patch is beyond the scope of this document.

See also canb kernel : Configuring and building the kernel

Installing a driver that has no patches

In some cases, a driver author may not offer patches with the .c and .h files which comprise his driver, or the patches may be against an older revision of the kernel and not go in cleanly.

  1. Copy the .c and .h files into /usr/src/linux/drivers/scsi
  2. Add the configuration option Edit /usr/src/linux/config.in, and add a line in the
    * SCSI low-level drivers
    
    section, add a boolean configuration variable for your driver. Ie,
    bool 'Always IN2000 SCSI support' CONFIG_SCSI_IN2000 y
    
  3. Add the makefile entries Edit /usr/src/linux/drivers/scsi/Makefile, and add an entry like
    ifdef CONFIG_SCSI_IN2000
    SCSI_OBS := $(SCSI_OBJS) in2000.o
    SCSI_SRCS := $(SCSI_SRCS) in2000.c
    endif
    

    before the
    scsi.a: $(SCSI_OBJS)
    

    line in the makefile, where the .c file is the .c file you copied in, and the .o file is the basename of the .c file with a .o suffixed.
  4. Add the entry points Edit /usr/src/linux/drivers/scsi/hosts.c, and add a #include for the header file, conditional on the CONFIG_SCSI preprocessor define you added to the configuration file. Ie, after
    #ifdef CONFIG_SCSI_GENERIC_NCR5380
    #include ``g_NCR5380.h''
    #endif
    

    you might add
    #ifdef CONFIG_SCSI_IN2000
    #include ``in2000.h''
    #endif
    

    You will also need to add the Scsi_Host_Template entry into the scsi_hosts[ ] array. Take a look into the .h file, and you should find a # define that looks something like this :
    #define IN2000 {``Always IN2000'', in2000_detect, \
    in2000_info, in2000_command,    \
    in2000_queuecommand,            \
    in2000_abort,                   \
    in2000_reset,                   \
    NULL,                           \
    in2000_biosparam,               \
    1, 7, IN2000_SG, 1, 0, 0}
    

    the name of the preprocessor define, and add it into the scsi_hosts[ ] array, conditional on definition of the preprocessor symbol you used in the configuration file. Ie, after
    #ifdef CONFIG_SCSI_GENERIC_NCR5380
    GENERIC_NCR5380,
    #endif
    

    you might add
    #ifdef CONFIG_SCSI_IN2000
    IN2000,
    #endif
    

See also canb kernel : Configuring and building the kernel

4.3 Adaptec 152x, 151x, Sound Blaster 16 SCSI, SCSI Pro, Gigabyte, and other AIC 6260/6360 based products (Standard)

Supported Configurations :

BIOS addresses:

0xd8000, 0xdc000, 0xd0000, 0xd4000, 0xc8000, 0xcc000, 0xe0 000, 0xe4000.

Ports:

0x140, 0x340

IRQs:

9, 10, 11, 12

DMA:

is not used.

IO:

port mapped

Autoprobe:

Works with many boards with an installed BIOS. All other board s, including the Adaptec 1510, and Sound Blaster16 SCSI must use a kernel comma nd line or compile time override.

Autoprobe Override:

None

Compile time:

Define PORTBASE, IRQ, SCSI_ID, RECONNECT as appropriate, see Defines

kernel command line

aha152x=< PORTBASE> ,< IRQ> ,< SCSI-ID> , < RECONNECT> Usually, SCSI-ID will be 7 and RECONNECT non-zero. To force d etection at 0x340, IRQ 11, at SCSI-ID 7, allowing disconnect/reconnect, you wou ld use the following command line option :

aha152x=0x340,11,7,1

Antiquity Problems, fix by upgrading:

The driver fails with VLB boards. There was a timing problem in kernels older than revision 1.0.5.

Defines:

AUTOCONF:

use configuration the controller reports (only 152x)

IRQ:

override interrupt channel (9,10,11 or 12) (default 11)

SCSI_ID:

override scsiid of AIC-6260 (0-7) (default 7)

RECONNECT:

override target dis-/reconnection/multiple

outstanding command:

set to non-zero to enable, zero to disable.

DONT_SNARF:

Don't register ports (pl12 and below)

SKIP_BIOSTEST:

Don't test for BIOS signature (AHA-1510 or disabled BIOS)

PORTBASE:

Force port base. Don't try to probe

4.4 Adaptec 154x, AMI FastDisk VLB, Buslogic, DTC 329x (Standard)

Supported Configurations:

Ports:

0x330 and 0x334

IRQs:

9, 10, 11, 12, 14, 15

DMA channels:

5, 6, 7

IO:

port mapped, bus master

Autoprobe:

works with all supported configurations, does not require an installed BIOS.

Autoprobe override:

none

Note:

No suffix boards, and early 'A' suffix boards do not support scatter/gather, and thus don't work. However, they can be made to work for some definition of the word works if AHA1542_SCATTER is changed to 0 in drivers/scsi/aha1542.h.

Note:

Buslogic makes a series of boards that are software compatible with the Adaptec 1542, and these come in ISA, VLB and EISA flavors.

Antiquity Problems, fix by upgrading:

  1. Linux kernel revisions prior to .99.10 don't support the 'C' revision.
  2. Linux kernel revisions prior to .99.14k don't support the 'C' revision options for
    • BIOS support for the extended mapping for disks > 1G
    • BIOS support for > 2 drives
    • BIOS support for autoscanning the SCSI bus
  3. Linux kernel revisions prior to .99.15e don't support the 'C' with the BIOS support for > 2 drives turned on and the BIOS support for the extended mapping for disks > 1G turned off.
  4. Linux kernel revisions prior to .99.14u don't support the 'CF' revisions of the board.
  5. Linux kernel revisions prior to 1.0.5 have a race condition when multiple devices are accessed at the same time.

Common problems:

  1. There are unexpected errors with a 154xC or 154xCF board, Early examples of the 154xC boards have a high slew rate on one of the SCSI signals, which results in signal reflections when cables with the wrong impedance are used. Newer boards aren't much better, and also suffer from extreme cabling and termination sensitivity. See also Common Problems # 2 and # 3 and Section common problems : Common Problems, and Section general flaky : General Flakiness
  2. There are unexpected errors with a 154xC or 154x with both internal and external devices connected. This is probably a termination problem. In order to use the software option to disable host adapter termination, you must turn switch 1 off. See also Common Problems # 2 and # 3 and Section common problems : Common Problems, and Section general flaky : General Flakiness
  3. The SCSI subsystem locks up completely. There are cases where the lockups seem to occur when multiple devices are in use at the same time. In this case, you can try contacting the manufacturer of the devices and see if firmware upgrades are available which would correct the problem. As a last resort, you can go into aha1542.h and change AHA1542_MAILBOX to 1. This will effectively limit you to one outstanding command on the scsi bus at one time, and may help the situation. If you have tape drives or slow cdrom drives on the bus, this might not be a practical solution. See also Common Problems # 2 and # 3 and Section common problems : Common Problems, Section general flaky : General Flakiness and Section scsi lockup :SCSI Lockups.
  4. An ``Interrupt received, but no mail'' message is printed on bootup and your SCSI devices are not detected. Disable the BIOS options to support the extended mapping for disks > 1G, support for > 2 drives, and for autoscanning the bus. Or, upgrade to Linux .99.14k or newer.

4.5 Adaptec 174x

Supported Configurations:

Slots:

1-8

Ports:

EISA board, not applicable

IRQs:

9, 10, 11, 12, 14, 15

DMA Channels:

EISA board, not applicable

IO:

port mapped, bus master

Autoprobe:

works with all supported configurations

Autoprobe override:

none

Note:

This board has been discontinued by Adaptec.

Common Problems:

  1. If the Adaptec 1740 driver prints the message ``aha1740: Board detected, but EBCNTRL = % x, so disabled it.'' your board was disabled because it was not running in enhanced mode. Boards running in standard 1542 mode are not supported.

4.6 Adaptec 274x, 284x, 294x (Standard)

Newer revisions may be available at ftp://ftp.cpsc.ucalgary.ca/pub/systems/linux/aha274x/aha274x-pre-alpha.tar .gz

Supported Configurations:

274x:

EISA Slots:

1-12

IRQs:

ALL

IO:

port mapped, bus master

284x:

Ports:

All

IRQs:

All

DMA Channels:

All

294x

PCI

Note:

BIOS MUST be enabled

Note:

The B channel on 2742AT boards is ignored.

4.7 Always IN2000 (ALPHA)

ALPHA driver available at ftp://tsx-11.mit.edu/pub/linux/ALPHA/SCSI/in2000 . The driver is in2000.tar.z, bootable kernel zImage

Port:

0x100, 0x110, 0x200, 0x220

IRQs:

10, 11, 14, 15

DMA:

not used

IO:

port mapped

Autoprobe:

BIOS not required

Autoprobe override:

none

Common Problems:

  1. There are known problems in systems with IDE drives and with swapping.

4.8 EATA: DPT Smartcache, Smartcache Plus, Smartcache III (Standard)

Supported boards:

all, that support the EATA-DMA protocol (no PM2001).

DPT Smartcache:

PM2011 PM2012A PM2012B

Smartcache III:

PM2021 PM2022 PM2024 PM2122 PM2124 PM2322

SmartRAID:

PM3021 PM3222 PM3224 many of those boards are also available as SKXXXX versions, which are supported as well.

Supported Configurations:

Slots:

ALL

Ports:

ALL

IRQs:

ALL level & edge triggered

DMA Channels:

ISA ALL, EISA/PCI not applicable

IO:

port mapped, bus master

SCSI Channels:

ALL

Autoprobe:

works with all supported configurations

Compile time:

diskgeometry in eata_dma.h for unusual disk geometries which came from the usage of the old DPTFMT utility. The latest version of the EATA-DMA driver and a Slackware bootdisk should be available on: ftp://ftp.uni-mainz.de/pub/Linux/arch/i386/system/EATA/

Common Problems:

  1. The IDE driver detects the ST-506 interface of the EATA board.
    1. This will look like similar to one of the following 2 examples:
      hd.c: ST-506 interface disk with more than 16 heads detected,
      probably due to non-standard sector translation.  Giving up.
      (disk % d: cyl=% d, sect=63, head=64)
      
      hdc: probing with STATUS instead of ALTSTATUS
      hdc: MP0242 A, 0MB w/128KB Cache, CHS=0/0/0
      hdc: cannot handle disk with 0 physical heads
      hdd: probing with STATUS instead of ALTSTATUS
      hdd: MP0242 A, 0MB w/128KB Cache, CHS=0/0/0
      hdd: cannot handle disk with 0 physical heads
      
      If the IDE driver gets into trouble because of this, ie. you can't access your (real) IDE hardware, change the IO Port and/or the IRQ of the EATA board.
    2. If the IDE driver finds hardware it can handle ie. harddisks with a capacity < =504MB, it will allocate the IO Port and IRQ, so that the eata driver can't utilize them. In this case also change IO Port and IRQ (!= 14,15).
  2. Some old SK2011 boards have a broken firmware. Please contact DPT's customer support for an update.

4.9 Future Domain 16x0 with TMC-1800, TMC-18C30, TMC-18C50, or TMC-36C70 chi p

Supported Configurations:

BIOSs:

2.0, 3.0, 3.2, 3.4, 3.5

BIOS Addresses:

0xc8000, 0xca000, 0xce000, 0xde000

Ports:

0x140, 0x150, 0x160, 0x170

IRQs:

3, 5, 10, 11, 12, 14, 15

DMA:

not used

IO:

port mapped

Autoprobe:

works with all supported configurations, requires installed BIOS

Autoprobe Override:

none

Antiquity Problems, fix by upgrading:

  1. Old versions do not support the TMC-18C50 chip, and will fail with newer boards.
  2. Old versions will not have the most current BIOS signatures for autodetection.
  3. Versions prior to the one included in Linux 1.0.9 and 1.1.6 don't support the new SCSI chip or 3.4 BIOS.

4.10 Generic NCR5380 / T130B

Supported and Unsupported Configurations:

Ports:

all

IRQs:

all

DMA:

not used

IO:

port mapped

Autoprobe:

none

Autoprobe Override:

Compile time:

Define GENERIC_NCR5380_OVERRIDE to be an array of tupples with port, irq, dma, board type - ie


#define GENERIC_NCR5380_OVERRIDE {{0x330, 5, DMA_NONE, BOARD_NCR5380}}

for a NCR5380 board at port 330, IRQ 5.


#define GENERIC_NCR5380_OVERRIDE {{0x350, 5, DMA_NONE, BOARD_NCR53C400}}

for a T130B at port 0x350.

Older versions of the code eliminate the BOARD_* entry.

The symbolic IRQs IRQ_NONE and IRQ_AUTO may be used.

kernel command line:

  • ncr5380=port,irq
  • ncr5380=port,irq,dma
  • ncr53c400=port,irq
255 may be used for no irq, 254 for irq autoprobe.

Common Problems:

  1. Using the T130B board with the old (pre public release 6) generic NCR5380 driver which doesn't support the ncr53c400 command line option. The NCR5380 compatable registers are offset eight from the base address. So, if your address is 0x350, use
    ncr53480=0x358,254
    
    on the kernel command line.

Antiquity problems, fix by upgrading :

  1. The kernel locks up during disk access with T130B or other NCR53c400 boards Pre-public release 6 versions of the Generic NCR5380 driver didn't support interrupts on these boards. Upgrade.

Notes:

the generic driver doesn't support DMA yet, and pseudo-DMA isn't supported in the generic driver.

4.11 NCR53c8xx (Standard)

Supported and Unsupported Configurations:

Base addresses:

ALL

IRQs:

ALL

DMA channels:

PCI, not applicable

IO:

port mapped, busmastering

Autoprobe:

requires PCI BIOS, uses PCI BIOS routines to search for devices and read configuration space

The driver uses the pre-programmed values in some registers for initialization, so a BIOS must be installed.

Antiquity Problems, fix by upgrading:

  1. Older versions of Linux had a problem with swapping See Section swap hangs :System Hangs When Swapping
  2. Older versions of Linux didn't recognize '815 and '825 boards.

Common Problems:

  1. Many people have encountered problems where the chip worked fine under DOS, but failed under Linux with a timeout on test 1 due to a lost interrupt. This is often due to a mismatch between the IRQ hardware jumper for a slot or mainboard device and the value set in the CMOS setup. It may also be due to PCI INTB, INTC, or INTD being selected on a PCI board in a system which only supports PCI INTA. Finally, PCI should be using level-sensitive rather than edge triggered interrupts. Check that your board is jumpered for level-sensitive, and if that fails try edge-triggered because your system may be broken. This problem is especially common with Viglen some Viglen motherboards, where the mainboard IRQ jumper settings are NOT as documented in the manual. I've been told that what claims to be IRQ5 is really IRQ9, your mileage will vary.
  2. Lockups occur when using an S3928P, X11, and the NCR chip at the same time. There are hardware bugs in at least some S3928P chip. Don't do this.
  3. You get a message on boot up indicating that the I/O mapping was disabled because base address 0 bits 0..1 indicated a non I/O mapping This is due to a BIOS bug in some machines which results in dword reads of configuration regsisters returning the high and low 16 bit words swapped.
  4. Some systems have problems if PCI write posting, or CPU->PCI buffering are enabled. If you have problems, disable these options.
  5. Some systems with the NCR SDMS software in an onboard BIOS ROM and in the system BIOS are unable to boot DOS. Disabling the image in one place should rectify this problem.
  6. Some systems have hideous, broken, BIOS chips. Don't make any bug reports until you've made sure you have the newest ROM from your vendor.
    • Intel P90 boards require revision 1.00.04.AX1

4.12 Seagate ST0x/Future Domain TMC-8xx/TMC-9xx

Supported and Unsupported Configurations :

Base addresses:

0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000

IRQs:

3, 5

DMA:

not used

IO:

memory mapped

Autoprobe:

probes for address only, IRQ is assumed to be 5, requires installed BIOS.

Autoprobe Override:

Compile time:

Define OVERRIDE to be the base address, CONTROLLER to FD or SEAGATE as appropriate, and IRQ to the IRQ.

kernel command line:

st0x=address,irq or tmc8xx=address,irq (only works for .99.13b and newer)

Antiquity Problems, fix by upgrading:

  1. . Versions prior to the one in the Linux .99.12 kernel had a problem handshaking with some slow devices, where This is what happens when you write data out to the bus
    1. Write byte to data register, data register is asserted to bus
    2. time_remaining = 12us
    3. wait while time_remaining > 0 and REQ is not asserted
    4. if time_remaining > 0, assert ACK
    5. wait while time remaining > 0 and REQ is asserted
    6. deassert ACK
    The problem was encountered in slow devices that do the command processing as they read the command, where the REQ/ACK handshake takes over 12us - REQ didn't go false when the driver expected it to, so the driver ended up sending multiple bytes of data for each REQ pulse.
  2. With Linux .99.12, a bug was introduced when I fixed the arbitration code, resulting in failed selections on some systems. This was fixed in .99.13.

Common Problems

Command Timeouts

There are command timeouts when Linux attempts to read the partition table or do other disk access.

The board ships with the defaults set up for MSDOS, ie interrupts are disabled. To jumper the board for interrupts, on the Seagate use jumper W3 (ST01) or JP3 (ST02) and short pins F-G to select IRQ 5.

Some Devices Don't Work

The driver can't handle some devices, particularly cheap SCSI tapes and CDROMs.

The Seagate ties the SCSI bus REQ/ACK handshaking into the PC bus IO CHANNEL READY and (optionally) 0WS signals. Unfortunately, it doesn't tell you when the watchdog timer runs out, and you have no way of knowing for certain that REQ went low, and may end up seeing one REQ pulse as multiple REQ pulses.

Dealing with this means using a tight loop to look for REQ to go low, with a timeout incase you don't catch the transition due to an interrupt, etc. This results in a performance decrease, so it would be undesireable to apply this to all SCSI devices. Instead, it is selected on a per-device basis with the ``borken'' field for the given SCSI device in the scsi_devices array. If you run into problems, you should try adding your device to the list of devices for which borken is not reset to zero (currently, only the TENEX CDROM drives).

Future Domain does not work

A future domain board (specific examples include the 840,841, 880, and 881) doesn't work.

A few of the Future domain boards use the Seagate register mapping, and have the MSG and CD bits of the status register flipped.

You should edit seagate.h, swapping the definitions for STAT_MSG and STAT_CD, and recompile the kernel with CONTROLLER defined to SEAGATE and an appropriate IRQ and OVERRIDE specified.

HDIO_REQ or HDIO_GETGEO failed

When attempting to fdisk your drive, you get error messages indicating that the HDIO_REQ or HDIO_GETGEO ioctl failed, or

You must set heads sectors and cylinders. You can do this from the extra functions menu.

See Section partitioning : Partitioning

Fdisk fails

After manually specifying the drive geometry, subsequent attempts to read the partition table result in partition boundary not on a cylinder boundary, physical and logical boundaries don't match, etc. error messages.

See Section partitioning : Partitioning

Used to work but now it doesn't

Some systems which worked prior to .99.13 fail with newer versions of Linux. Older versions of Linux assigned the CONTROL and DATA registers in an order different than that outlined in the Seagate documentation, which broke on some systems. Newer versions make the assignment in the correct way, but this breaks other systems.

The code in seagate.c looks like this now :


cli();
DATA = (unsigned char) ((1 <

Changing this to


cli();
CONTROL = BASE_CMD | CMD_DRVR_ENABLE | CMD_SEL |
(reselect ? CMD_ATTN : 0);
DATA = (unsigned char) ((1 <

may fix your problem.

Defines

FAST or FAST32 will use blind transfers where possible

ARBITRATE will cause the host adapter to arbitrate for the bus for better SCSI-II compatability, rather than just waiting for BUS FREE and then doing its thing. Should let us do one command per Lun when I integrate my reorganization changes into the distribution sources.

SLOW_HANDSHAKE will allow compatability with broken devices that don't handshake fast enough (ie, some CD ROM's) for the Seagate code.

SLOW_RATE=x, x some number will let you specify a default transfer rate if handshaking isn't working correctly.

4.13 PAS16 SCSI

Supported and Unsupported Configurations:

Ports:

0x388, 0x384, 0x38x, 0x288

IRQs:

10, 12, 14, 15

IMPORTANT:

IRQ MUST be different from the IRQ used for the sound portion of the board.

DMA:

not used for the SCSI portion of the board

IO:

port mapped

Autoprobe:

does not require BIOS

Autoprobe Override:

Compile time:

Define PAS16_OVERRIDE to be an array of port, irq tupples. Ie


#define PAS16_OVERRIDE {{0x388, 10}}

for a board at port 0x388, IRQ 10.

kernel command line:

pas16=port,irq

Defines:

  • AUTOSENSE - if defined, REQUEST SENSE will be performed automatically for commands that return with a CHECK CONDITION status.
  • PSEUDO_DMA - enables PSEUDO-DMA hardware, should give a 3-4X performance increase compared to polled I/O.
  • PARITY - enable parity checking. Not supported
  • SCSI2 - enable support for SCSI-II tagged queueing. Untested
  • UNSAFE - leave interrupts enabled during pseudo-DMA transfers. You only really want to use this if you're having a problem with dropped characters during high speed communications, and even then, you're going to be better off twiddling with transfersize.
  • USLEEP - enable support for devices that don't disconnect. Untested.

Common problems:

  1. Command timeouts, aborts, etc. You should install the NCR5380 patches that I posted to the net some time ago, which should be integrated into some future alpha release. These patches fix a race condition in earlier NCR5380 driver cores, as well as fixing support for multiple devices on NCR5380 based boards. If that fails, you should disable the PSEUDO_DMA option by changing the # define PSEUDO_DMA line in drivers/scsi/pas16.c to # undef PSEUDO_DMA. Note that the later should be considered a last resort, because there will be a severe performance degradation.

4.14 Trantor T128/T128F/T228

Supported and Unsupported Configurations:

Base addresses:

0xcc000, 00xc8000, 0xdc000, 0xd8000

IRQs:

  • none, 3, 5, 7 (all boards)
  • 10, 12, 14, 15 (T128F only)

DMA:

not used.

IO:

memory mapped

Autoprobe:

works for all supported configurations, requires installed BIOS.

Autoprobe Override:

Compile time:

Define T128_OVERRIDE to be an array of address, irq tupples. Ie


#define T128_OVERRIDE {{0xcc000, 5}}

for a board at address 0xcc000, IRQ 5.

The symbolic IRQs IRQ_NONE and IRQ_AUTO may be used.

kernel command line:

t128=address,irq

-1 may be used for no irq, -2 for irq autoprobe.

Defines:

AUTOSENSE

if defined, REQUEST SENSE will be performed automatically for commands that return with a CHECK CONDITION status.

PSEUDO_DMA

enables PSEUDO-DMA hardware, should give a 3-4X performance increase compared to polled I/O.

PARITY

enable parity checking. Not supported

SCSI2

enable support for SCSI-II tagged queueing. Untested

UNSAFE

leave interrupts enabled during pseudo-DMA transfers. You only really want to use this if you're having a problem with dropped characters during high speed communications, and even then, you're going to be better off twiddling with transfersize.

USLEEP

enable support for devices that don't disconnect. Untested.

Common Problems:

  1. Command timeouts, aborts, etc. You should install the NCR5380 patches that I posted to the net some time ago, which should be integrated into some future alpha release. These patches fix a race condition in earlier NCR5380 driver cores, as well as fixing support for multiple devices on NCR5380 based boards. If that fails, you should disable the PSEUDO_DMA option by changing the # define PSEUDO_DMA line in drivers/scsi/pas16.c to # undef PSEUDO_DMA. Note that the later should be considered a last resort, because there will be a severe performance degradation.

4.15 Ultrastor 14f (ISA), 24f (EISA), 34f (VLB)

Supported Configurations:

Ports:

0x130, 0x140, 0x210, 0x230, 0x240, 0x310, 0x330, 0x340

IRQs:

10, 11, 14, 15

DMA channels:

5, 6, 7

IO:

port mapped, bus master

Autoprobe:

does not work for boards at port 0x310, BIOS not required.

Autoprobe override:

compile time only, define PORT_OVERRIDE

Common Problems :

  1. The address 0x310 is not supported by the autoprobe code, and may cause conflicts if networking is enabled. Please use a different address.
  2. Using an Ultrastor at address 0x330 may cause the system to hang when the sound drivers are autoprobing. Please use a different address.
  3. Various other drivers do unsafe probes at various addresses, if you are having problems with detection or the system is hanging at boot time, please try a different address. 0x340 is recommended as an address that is known to work.
  4. Linux detects no SCSI devices, but detects your SCSI hard disk on an Ultrastor SCSI board as a normal hard disk, and the hard disk driver refuses to support it. Note that when this occurs, you will probably also get a message hd.c: ST-506 interface disk with more than 16 heads detected, probably due to non-standard sector translation. Giving up. (disk % d: cyl=% d, sect=63, head=64) If this is the case, you are running the Ultrastor board in WD1003 emulation mode. You have to
    1. Switch the ultrastor into native mode. This is the recommended action, since the SCSI driver can be significantly faster than the IDE driver, especially with the clustered read/write patches installed. Some users have sustained in excess of 2M/sec through the file system using these patches. Note that this will be necessary if you wish to use any non- hard disk, or more than two hard disk devices on the Ultrastor.
    2. Use the kernel command line switch
      hd=cylinders,heads,sectors
      
      to override the default setting to bootstrap yourself, keeping number of cylinders < = 2048, number of heads < = 16, and number of sectors < = 255 such that cylinders * heads * sectors is the same for both mappings. You'll also have to manually specify the disk geometry when running fdisk under Linux. Failure to do so will result in incorrect partition entries being written, which will work correctly with Linux but fail under MSDOS which looks at the cylinder/head/sector entries in the table. Once Linux is up, you can avoid the inconvience of having to boot by hand by recompiling the kernel with an appropriately defined HD_TYPE macro in include/linux/config.h.

4.16 Western Digital 7000

Supported Configurations :

BIOS Addresses:

0xce000

Ports:

0x350

IRQs:

15

DMA Channels:

6

IO:

port mapped, bus master

Autoprobe:

requires installed BIOS

Common Problems :

  1. There are several revisisions of the chip and firmware. Supposedly, revision 3 boards do not work, revision 5 boards do, chips with no suffix do not work, chips with an 'A' suffix do.
  2. The board supports a few BIOS addresses which aren't on the list of supported addresses. If you run into this situation, please use one of the supported addresses and submit a bug report as outlined in Section 2, ``Bug Reports''

Next Chapter, Previous Chapter

Table of contents of this chapter, General table of contents

Top of the document, Beginning of this Chapter