The Linux NCR53C8XX/SYM53C8XX drivers README file

Written by Gerard Roudier <groudier@free.fr>
21 Rue Carnot
95170 DEUIL LA BARRE - FRANCE

29 May 1999
===============================================================================

1.  Introduction
2.  Supported chips and SCSI features
3.  Advantages of the enhanced 896 driver
      3.1 Optimized SCSI SCRIPTS
      3.2 New features of the SYM53C896 (64 bit PCI dual LVD SCSI controller)
4.  Memory mapped I/O versus normal I/O
5.  Tagged command queueing
6.  Parity checking
7.  Profiling information
8.  Control commands
      8.1  Set minimum synchronous period
      8.2  Set wide size
      8.3  Set maximum number of concurrent tagged commands
      8.4  Set order type for tagged command
      8.5  Set debug mode
      8.6  Clear profile counters
      8.7  Set flag (no_disc)
      8.8  Set verbose level
      8.9  Reset all logical units of a target
      8.10 Abort all tasks of all logical units of a target
9.  Configuration parameters
10. Boot setup commands
      10.1 Syntax
      10.2 Available arguments
             10.2.1  Master parity checking
             10.2.2  Scsi parity checking
             10.2.3  Scsi disconnections
             10.2.4  Special features
             10.2.5  Ultra SCSI support
             10.2.6  Default number of tagged commands
             10.2.7  Default synchronous period factor
             10.2.8  Negotiate synchronous with all devices
             10.2.9  Verbosity level
             10.2.10 Debug mode
             10.2.11 Burst max
             10.2.12 LED support
             10.2.13 Max wide
             10.2.14 Differential mode
             10.2.15 IRQ mode
             10.2.16 Reverse probe
             10.2.17 Fix up PCI configuration space
             10.2.18 Serial NVRAM
             10.2.19 Check SCSI BUS 
             10.2.20 Exclude a host from being attached
             10.2.21 Suggest a default SCSI id for hosts
             10.2.22 Enable use of IMMEDIATE ARBITRATION
      10.3 Advised boot setup commands
      10.4 PCI configuration fix-up boot option
      10.5 Serial NVRAM support boot option
      10.6 SCSI BUS checking boot option
      10.7 IMMEDIATE ARBITRATION boot option
11. Some constants and flags of the ncr53c8xx.h header file
12. Installation
13. Architecture dependent features
14. Known problems
      14.1 Tagged commands with Iomega Jaz device
      14.2 Device names change when another controller is added
      14.3 Using only 8 bit devices with a WIDE SCSI controller.
      14.4 Possible data corruption during a Memory Write and Invalidate
      14.5 IRQ sharing problems
15. SCSI problem troubleshooting
      15.1 Problem tracking
      15.2 Understanding hardware error reports
16. Synchronous transfer negotiation tables
      16.1 Synchronous timings for 53C875 and 53C860 Ultra-SCSI controllers
      16.2 Synchronous timings for fast SCSI-2 53C8XX controllers
17. Serial NVRAM support (by Richard Waltham)
      17.1 Features
      17.2 Symbios NVRAM layout
      17.3 Tekram  NVRAM layout
18. Support for Big Endian
      18.1 Big Endian CPU
      18.2 NCR chip in Big Endian mode of operations

===============================================================================

1. Introduction

The initial Linux ncr53c8xx driver has been a port of the ncr driver from 
FreeBSD that has been achieved in November 1995 by:
          Gerard Roudier              <groudier@free.fr>

The original driver has been written for 386bsd and FreeBSD by:
          Wolfgang Stanglmeier        <wolf@cologne.de>
          Stefan Esser                <se@mi.Uni-Koeln.de>

It is now available as a bundle of 2 drivers:

- ncr53c8xx generic driver that supports all the SYM53C8XX family including 
  the earliest 810 rev. 1, the latest 896 (2 channel LVD SCSI controller) and
  the new 895A (1 channel LVD SCSI controller).
- sym53c8xx enhanced driver (a.k.a. 896 drivers) that drops support of oldest 
  chips in order to gain advantage of new features, as LOAD/STORE instructions 
  available since the 810A and hardware phase mismatch available with the 
  896 and the 895A.

You can find technical information about the NCR 8xx family in the
PCI-HOWTO written by Michael Will and in the SCSI-HOWTO written by
Drew Eckhardt.

Information about new chips is available at LSILOGIC web server:

          http://www.lsilogic.com/

SCSI standard documentations are available at SYMBIOS ftp server:

          ftp://ftp.symbios.com/

Useful SCSI tools written by Eric Youngdale are available at tsx-11:

          ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/scsiinfo-X.Y.tar.gz
          ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/scsidev-X.Y.tar.gz

These tools are not ALPHA but quite clean and work quite well.
It is essential you have the 'scsiinfo' package.

This short documentation describes the features of the generic and enhanced
drivers, configuration parameters and control commands available through 
the proc SCSI file system read / write operations.

This driver has been tested OK with linux/i386, Linux/Alpha and Linux/PPC.

Latest driver version and patches are available at:

          ftp://ftp.tux.org/pub/people/gerard-roudier
or
          ftp://ftp.symbios.com/mirror/ftp.tux.org/pub/tux/roudier/drivers

I am not a native speaker of English and there are probably lots of
mistakes in this README file. Any help will be welcome.


2. Supported chips and SCSI features

The following features are supported for all chips:

	Synchronous negotiation
	Disconnection
	Tagged command queuing
	SCSI parity checking
	Master parity checking

"Wide negotiation" is supported for chips that allow it.  The
following table shows some characteristics of NCR 8xx family chips 
and what drivers support them.

                                                  Supported by   Supported by
       On board                                   the generic    the enhanced 
Chip   SDMS BIOS   Wide   SCSI std.   Max. sync   driver         driver
----   ---------   ----   ---------   ----------  ------------   -------------
810        N         N      FAST10    10 MB/s        Y             N
810A       N         N      FAST10    10 MB/s        Y             Y
815        Y         N      FAST10    10 MB/s        Y             N
825        Y         Y      FAST10    20 MB/s        Y             N
825A       Y         Y      FAST10    20 MB/s        Y             Y
860        N         N      FAST20    20 MB/s        Y             Y
875        Y         Y      FAST20    40 MB/s        Y             Y
876        Y         Y      FAST20    40 MB/s        Y             Y
895        Y         Y      FAST40    80 MB/s        Y             Y
895A       Y         Y      FAST40    80 MB/s        Y             Y
896        Y         Y      FAST40    80 MB/s        Y             Y
897        Y         Y      FAST40    80 MB/s        Y             Y
1510D      Y         Y      FAST40    80 MB/s        Y             Y
1010       Y         Y      FAST80   160 MB/s        N             Y
1010_66*   Y         Y      FAST80   160 MB/s        N             Y

* Chip supports 33MHz and 66MHz PCI buses.


Summary of other supported features:

Module:                allow to load the driver
Memory mapped I/O:     increases performance
Profiling information: read operations from the proc SCSI file system
Control commands:      write operations to the proc SCSI file system
Debugging information: written to syslog (expert only)
Scatter / gather
Shared interrupt
Boot setup commands
Serial NVRAM:          Symbios and Tekram formats


3. Advantages of the enhanced 896 driver

3.1 Optimized SCSI SCRIPTS.

The 810A, 825A, 875, 895, 896 and 895A support new SCSI SCRIPTS instructions 
named LOAD and STORE that allow to move up to 1 DWORD from/to an IO register 
to/from memory much faster that the MOVE MEMORY instruction that is supported 
by the 53c7xx and 53c8xx family.
The LOAD/STORE instructions support absolute and DSA relative addressing 
modes.  The SCSI SCRIPTS had been entirely rewritten using LOAD/STORE instead 
of MOVE MEMORY instructions.

3.2 New features of the SYM53C896 (64 bit PCI dual LVD SCSI controller)

The 896 and the 895A allows handling of the phase mismatch context from 
SCRIPTS (avoids the phase mismatch interrupt that stops the SCSI processor 
until the C code has saved the context of the transfer).
Implementing this without using LOAD/STORE instructions would be painful 
and I didn't even want to try it.

The 896 chip supports 64 bit PCI transactions and addressing, while the 
895A supports 32 bit PCI transactions and 64 bit addressing.
The SCRIPTS processor of these chips is not true 64 bit, but uses segment 
registers for bit 32-63. Another interesting feature is that LOAD/STORE 
instructions that address the on-chip RAM (8k) remain internal to the chip.

Due to the use of LOAD/STORE SCRIPTS instructions, this driver does not 
support the following chips:
- SYM53C810 revision < 0x10 (16)
- SYM53C815 all revisions
- SYM53C825 revision < 0x10 (16)

4. Memory mapped I/O versus normal I/O

Memory mapped I/O has less latency than normal I/O.  Since
linux-1.3.x, memory mapped I/O is used rather than normal I/O.  Memory
mapped I/O seems to work fine on most hardware configurations, but
some poorly designed motherboards may break this feature.

The configuration option CONFIG_SCSI_NCR53C8XX_IOMAPPED forces the
driver to use normal I/O in all cases.


5. Tagged command queueing

Queuing more than 1 command at a time to a device allows it to perform 
optimizations based on actual head positions and its mechanical 
characteristics. This feature may also reduce average command latency.
In order to really gain advantage of this feature, devices must have 
a reasonable cache size (No miracle is to be expected for a low-end 
hard disk with 128 KB or less).
Some known SCSI devices do not properly support tagged command queuing.
Generally, firmware revisions that fix this kind of problems are available 
at respective vendor web/ftp sites.
All I can say is that the hard disks I use on my machines behave well with 
this driver with tagged command queuing enabled:

- IBM S12 0662
- Conner 1080S
- Quantum Atlas I
- Quantum Atlas II

If your controller has NVRAM, you can configure this feature per target 
from the user setup tool. The Tekram Setup program allows to tune the 
maximum number of queued commands up to 32. The Symbios Setup only allows 
to enable or disable this feature.

The maximum number of simultaneous tagged commands queued to a device
is currently set to 8 by default.  This value is suitable for most SCSI
disks.  With large SCSI disks (>= 2GB, cache >= 512KB, average seek time
<= 10 ms), using a larger value may give better performances.

The sym53c8xx driver supports up to 255 commands per device, and the 
generic ncr53c8xx driver supports up to 64, but using more than 32 is 
generally not worth-while, unless you are using a very large disk or disk 
array. It is noticeable that most of recent hard disks seem not to accept 
more than 64 simultaneous commands. So, using more than 64 queued commands 
is probably just resource wasting.

If your controller does not have NVRAM or if it is managed by the SDMS 
BIOS/SETUP, you can configure tagged queueing feature and device queue 
depths from the boot command-line. For example:

  ncr53c8xx=tags:4/t2t3q15-t4q7/t1u0q32

will set tagged commands queue depths as follow:

- target 2  all luns  on controller 0 --> 15
- target 3  all luns  on controller 0 --> 15
- target 4  all luns  on controller 0 -->  7
- target 1  lun 0     on controller 1 --> 32
- all other target/lun                -->  4

In some special conditions, some SCSI disk firmwares may return a
QUEUE FULL status for a SCSI command. This behaviour is managed by the
driver using the following heuristic:

- Each time a QUEUE FULL status is returned, tagged queue depth is reduced 
  to the actual number of disconnected commands. 

- Every 1000 successfully completed SCSI commands, if allowed by the
  current limit, the maximum number of queueable commands is incremented.

Since QUEUE FULL status reception and handling is resource wasting, the 
driver notifies by default this problem to user by indicating the actual 
number of commands used and their status, as well as its decision on the 
device queue depth change.
The heuristic used by the driver in handling QUEUE FULL ensures that the 
impact on performances is not too bad. You can get rid of the messages by 
setting verbose level to zero, as follow:

1st method: boot your system using 'ncr53c8xx=verb:0' option.
2nd method: apply "setverbose 0" control command to the proc fs entry 
            corresponding to your controller after boot-up.

6. Parity checking

The driver supports SCSI parity checking and PCI bus master parity
checking.  These features must be enabled in order to ensure safe data
transfers.  However, some flawed devices or mother boards will have
problems with parity. You can disable either PCI parity or SCSI parity 
checking by entering appropriate options from the boot command line.
(See 10: Boot setup commands).

7. Profiling information

Profiling information is available through the proc SCSI file system.
Since gathering profiling information may impact performances, this 
feature is disabled by default and requires a compilation configuration 
option to be set to Y.

The device associated with a host has the following pathname:

          /proc/scsi/ncr53c8xx/N     (N=0,1,2 ....)

Generally, only 1 board is used on hardware configuration, and that device is:
          /proc/scsi/ncr53c8xx/0

However, if the driver has been made as module, the number of the
hosts is incremented each time the driver is loaded.

In order to display profiling information, just enter:

         cat /proc/scsi/ncr53c8xx/0

and you will get something like the following text:

-------------------------------------------------------
General information:
  Chip NCR53C810, device id 0x1, revision id 0x2
  IO port address 0x6000, IRQ number 10
  Using memory mapped IO at virtual address 0x282c000
  Synchronous transfer period 25, max commands per lun 4
Profiling information:
  num_trans    = 18014
  num_kbytes   = 671314
  num_disc     = 25763
  num_break    = 1673
  num_int      = 1685
  num_fly      = 18038
  ms_setup     = 4940
  ms_data      = 369940
  ms_disc      = 183090
  ms_post      = 1320
-------------------------------------------------------

General information is easy to understand. The device ID and the
revision ID identify the SCSI chip as follows:

Chip    Device id     Revision Id
----    ---------     -----------
810       0x1            <  0x10
810A      0x1            >= 0x10
815       0x4
825       0x3            <  0x10
860       0x6
825A      0x3            >= 0x10
875       0xf
895       0xc

The profiling information is updated upon completion of SCSI commands.
A data structure is allocated and zeroed when the host adapter is
attached. So, if the driver is a module, the profile counters are
cleared each time the driver is loaded.  The "clearprof" command
allows you to clear these counters at any time.

The following counters are available:

("num" prefix means "number of",
"ms" means milli-seconds)

num_trans
	Number of completed commands
	Example above: 18014 completed commands

num_kbytes
	Number of kbytes transferred
	Example above: 671 MB transferred

num_disc
	Number of SCSI disconnections
	Example above: 25763 SCSI disconnections

num_break
	number of script interruptions (phase mismatch)
	Example above: 1673 script interruptions

num_int
	Number of interrupts other than "on the fly"
	Example above: 1685 interruptions not "on the fly"

num_fly
	Number of interrupts "on the fly"
	Example above: 18038 interruptions "on the fly"

ms_setup
	Elapsed time for SCSI commands setups
	Example above: 4.94 seconds

ms_data
	Elapsed time for data transfers
	Example above: 369.94 seconds spent for data transfer

ms_disc
	Elapsed time for SCSI disconnections
	Example above: 183.09 seconds spent disconnected

ms_post
	Elapsed time for command post processing
	(time from SCSI status get to command completion call)
	Example above: 1.32 seconds spent for post processing

Due to the 1/100 second tick of the system clock, "ms_post" time may
be wrong.

In the example above, we got 18038 interrupts "on the fly" and only
1673 script breaks generally due to disconnections inside a segment 
of the scatter list.


8. Control commands

Control commands can be sent to the driver with write operations to
the proc SCSI file system. The generic command syntax is the
following:

      echo "<verb> <parameters>" >/proc/scsi/ncr53c8xx/0
      (assumes controller number is 0)

Using "all" for "<target>" parameter with the commands below will
apply to all targets of the SCSI chain (except the controller).

Available commands:

8.1 Set minimum synchronous period factor

    setsync <target> <period factor>

    target:    target number
    period:    minimum synchronous period.
               Maximum speed = 1000/(4*period factor) except for special
               cases below.

    Specify a period of 255, to force asynchronous transfer mode.

      10 means 25 nano-seconds synchronous period
      11 means 30 nano-seconds synchronous period
      12 means 50 nano-seconds synchronous period

8.2 Set wide size

    setwide <target> <size>

    target:    target number
    size:      0=8 bits, 1=16bits

8.3 Set maximum number of concurrent tagged commands
 
    settags <target> <tags>

    target:    target number
    tags:      number of concurrent tagged commands
               must not be greater than SCSI_NCR_MAX_TAGS (default: 8)

8.4 Set order type for tagged command

    setorder <order>

    order:     3 possible values:
               simple: use SIMPLE TAG for all operations (read and write)
               ordered: use ORDERED TAG for all operations
               default: use default tag type,
                        SIMPLE  TAG for read  operations
                        ORDERED TAG for write operations


8.5 Set debug mode

    setdebug <list of debug flags>

    Available debug flags:
        alloc:   print info about memory allocations (ccb, lcb)
        queue:   print info about insertions into the command start queue
        result:  print sense data on CHECK CONDITION status
        scatter: print info about the scatter process
        scripts: print info about the script binding process
	tiny:    print minimal debugging information
	timing:  print timing information of the NCR chip
	nego:    print information about SCSI negotiations
	phase:   print information on script interruptions

    Use "setdebug" with no argument to reset debug flags.


8.6 Clear profile counters

    clearprof

    The profile counters are automatically cleared when the amount of
    data transferred reaches 1000 GB in order to avoid overflow.
    The "clearprof" command allows you to clear these counters at any time.


8.7 Set flag (no_disc)
 
    setflag <target> <flag>

    target:    target number

    For the moment, only one flag is available:

        no_disc:   not allow target to disconnect.

    Do not specify any flag in order to reset the flag. For example:
    - setflag 4
      will reset no_disc flag for target 4, so will allow it disconnections.
    - setflag all
      will allow disconnection for all devices on the SCSI bus.


8.8 Set verbose level

    setverbose #level

    The driver default verbose level is 1. This command allows to change 
    th driver verbose level after boot-up.

8.9 Reset all logical units of a target

    resetdev <target>

    target:    target number
    The driver will try to send a BUS DEVICE RESET message to the target.
    (Only supported by the SYM53C8XX driver and provided for test purpose)

8.10 Abort all tasks of all logical units of a target

    cleardev <target>

    target:    target number
    The driver will try to send a ABORT message to all the logical units 
    of the target.
    (Only supported by the SYM53C8XX driver and provided for test purpose)


9. Configuration parameters

If the firmware of all your devices is perfect enough, all the
features supported by the driver can be enabled at start-up.  However,
if only one has a flaw for some SCSI feature, you can disable the
support by the driver of this feature at linux start-up and enable
this feature after boot-up only for devices that support it safely.

CONFIG_SCSI_NCR53C8XX_IOMAPPED       (default answer: n)
    Answer "y" if you suspect your mother board to not allow memory mapped I/O.
    May slow down performance a little.  This option is required by
    Linux/PPC and is used no matter what you select here.  Linux/PPC
    suffers no performance loss with this option since all IO is memory
    mapped anyway.

CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS    (default answer: 8)
    Default tagged command queue depth.

CONFIG_SCSI_NCR53C8XX_MAX_TAGS         (default answer: 8)
    This option allows you to specify the maximum number of tagged commands 
    that can be queued to a device. The maximum supported value is 32.

CONFIG_SCSI_NCR53C8XX_SYNC            (default answer: 5)
    This option allows you to specify the frequency in MHz the driver 
    will use at boot time for synchronous data transfer negotiations.
    This frequency can be changed later with the "setsync" control command.
    0 means "asynchronous data transfers".

CONFIG_SCSI_NCR53C8XX_FORCE_SYNC_NEGO (default answer: n)
    Force synchronous negotiation for all SCSI-2 devices.
    Some SCSI-2 devices do not report this feature in byte 7 of inquiry 
    response but do support it properly (TAMARACK scanners for example).

CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT   (default and only reasonable answer: n)
    If you suspect a device of yours does not properly support disconnections,
    you can answer "y". Then, all SCSI devices will never disconnect the bus 
    even while performing long SCSI operations.

CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT
    Genuine SYMBIOS boards use GPIO0 in output for controller LED and GPIO3 
    bit as a flag indicating singled-ended/differential interface.
    If all the boards of your system are genuine SYMBIOS boards or use
    BIOS and drivers from SYMBIOS, you would want to enable this option.
    This option must NOT be enabled if your system has at least one 53C8XX 
    based scsi board with a vendor-specific BIOS.
    For example, Tekram DC-390/U, DC-390/W and DC-390/F scsi controllers 
    use a vendor-specific BIOS and are known to not use SYMBIOS compatible 
    GPIO wiring. So, this option must not be enabled if your system has 
    such a board installed.

CONFIG_SCSI_NCR53C8XX_NVRAM_DETECT
    Enable support for reading the serial NVRAM data on Symbios and
    some Symbios compatible cards, and Tekram DC390W/U/F cards. Useful for
    systems with more than one Symbios compatible controller where at least
    one has a serial NVRAM, or for a system with a mixture of Symbios and
    Tekram cards. Enables setting the boot order of host adaptors
    to something other than the default order or "reverse probe" order. 
    Also enables Symbios and Tekram cards to be distinguished so
    CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT may be set in a system with a
    mixture of Symbios and Tekram cards so the Symbios cards can make use of
    the full range of Symbios features, differential, led pin, without
    causing problems for the Tekram card(s).

10. Boot setup commands

10.1 Syntax

Setup commands can be passed to the driver either at boot time or as a 
string variable using 'insmod'.

A boot setup command for the ncr53c8xx (sym53c8xx) driver begins with the 
driver name "ncr53c8xx="(sym53c8xx). The kernel syntax parser then expects 
an optional list of integers separated with comma followed by an optional 
list of comma-separated strings. Example of boot setup command under lilo 
prompt:

lilo: linux root=/dev/hda2 ncr53c8xx=tags:4,sync:10,debug:0x200

- enable tagged commands, up to 4 tagged commands queued.
- set synchronous negotiation speed to 10 Mega-transfers / second.
- set DEBUG_NEGO flag.

Since comma seems not to be allowed when defining a string variable using  
'insmod', the driver also accepts <space> as option separator. 
The following command will install driver module with the same options as 
above.

    insmod ncr53c8xx.o ncr53c8xx="tags:4 sync:10 debug:0x200"

For the moment, the integer list of arguments is discarded by the driver. 
It will be used in the future in order to allow a per controller setup.

Each string argument must be specified as "keyword:value". Only lower-case 
characters and digits are allowed.

In a system that contains multiple 53C8xx adapters insmod will install the 
specified driver on each adapter. To exclude a chip use the 'excl' keyword.

The sequence of commands, 

    insmod sym53c8xx sym53c8xx=excl:0x1400
    insmod ncr53c8xx

installs the sym53c8xx driver on all adapters except the one at IO port 
address 0x1400 and then installs the ncr53c8xx driver to the adapter at IO 
port address 0x1400.


10.2 Available arguments

10.2.1  Master parity checking
        mpar:y     enabled
        mpar:n     disabled

10.2.2  Scsi parity checking
        spar:y     enabled
        spar:n     disabled

10.2.3  Scsi disconnections
        disc:y     enabled
        disc:n     disabled
 
10.2.4  Special features
   Only apply to 810A, 825A, 860, 875 and 895 controllers.
   Have no effect with other ones.
        specf:y    (or 1) enabled
        specf:n    (or 0) disabled
        specf:3           enabled except Memory Write And Invalidate
   The default driver setup is 'specf:3'. As a consequence, option 'specf:y' 
   must be specified in the boot setup command to enable Memory Write And 
   Invalidate.

10.2.5  Ultra SCSI support
   Only apply to 860, 875, 895, 895a, 896, 1010 and 1010_66 controllers.
   Have no effect with other ones.
        ultra:n    All ultra speeds enabled
        ultra:2    Ultra2 enabled
        ultra:1    Ultra enabled
        ultra:0    Ultra speeds disabled

10.2.6  Default number of tagged commands
        tags:0     (or tags:1 ) tagged command queuing disabled
        tags:#tags (#tags  > 1) tagged command queuing enabled
  #tags will be truncated to the max queued commands configuration parameter.
  This option also allows to specify a command queue depth for each device 
  that support tagged command queueing.
  Example:
      ncr53c8xx=tags:10/t2t3q16-t5q24/t1u2q32
               will set devices queue depth as follow:
      - controller #0 target #2 and target #3                  -> 16 commands,
      - controller #0 target #5                                -> 24 commands,
      - controller #1 target #1 logical unit #2                -> 32 commands,
      - all other logical units (all targets, all controllers) -> 10 commands.

10.2.7  Default synchronous period factor
        sync:255     disabled (asynchronous transfer mode)
        sync:#factor
  #factor = 10     Ultra-2 SCSI 40 Mega-transfers / second
  #factor = 11     Ultra-2 SCSI 33 Mega-transfers / second
  #factor < 25     Ultra   SCSI 20 Mega-transfers / second
  #factor < 50     Fast    SCSI-2

  In all cases, the driver will use the minimum transfer period supported by 
  controllers according to NCR53C8XX chip type.

10.2.8  Negotiate synchronous with all devices
        (force sync nego)
        fsn:y      enabled
        fsn:n      disabled

10.2.9  Verbosity level
        verb:0     minimal
        verb:1     normal
        verb:2     too much

10.2.10 Debug mode
        debug:0	 clear debug flags
        debug:#x   set debug flags
  #x is an integer value combining the following power-of-2 values:
  DEBUG_ALLOC       0x1
  DEBUG_PHASE       0x2
  DEBUG_POLL        0x4
  DEBUG_QUEUE       0x8
  DEBUG_RESULT     0x10
  DEBUG_SCATTER    0x20
  DEBUG_SCRIPT     0x40
  DEBUG_TINY       0x80
  DEBUG_TIMING    0x100
  DEBUG_NEGO      0x200
  DEBUG_TAGS      0x400
  DEBUG_FREEZE    0x800
  DEBUG_RESTART  0x1000

  You can play safely with DEBUG_NEGO. However, some of these flags may 
  generate bunches of syslog messages. 

10.2.11 Burst max
        burst:0    burst disabled
        burst:255  get burst length from initial IO register settings.
        burst:#x   burst enabled (1<<#x burst transfers max)
  #x is an integer value which is log base 2 of the burst transfers max.
  The NCR53C875 and NCR53C825A support up to 128 burst transfers (#x = 7).
  Other chips only support up to 16 (#x = 4).
  This is a maximum value. The driver set the burst length according to chip 
  and revision ids. By default the driver uses the maximum value supported 
  by the chip.

10.2.12 LED support
        led:1      enable  LED support
        led:0      disable LED support
  Donnot enable LED support if your scsi board does not use SDMS BIOS.
  (See 'Configuration parameters')

10.2.13 Max wide
        wide:1      wide scsi enabled
        wide:0      wide scsi disabled
  Some scsi boards use a 875 (ultra wide) and only supply narrow connectors.
  If you have connected a wide device with a 50 pins to 68 pins cable 
  converter, any accepted wide negotiation will break further data transfers.
  In such a case, using "wide:0" in the bootup command will be helpful. 

10.2.14 Differential mode
        diff:0	never set up diff mode
        diff:1	set up diff mode if BIOS set it
        diff:2	always set up diff mode
        diff:3	set diff mode if GPIO3 is not set

10.2.15 IRQ mode
        irqm:0     always open drain
        irqm:1     same as initial settings (assumed BIOS settings)
        irqm:2     always totem pole
        irqm:0x10  driver will not use IRQF_SHARED flag when requesting irq
        irqm:0x20  driver will not use IRQF_DISABLED flag when requesting irq

    (Bits 0x10 and 0x20 can be combined with hardware irq mode option)

10.2.16 Reverse probe
        revprob:n   probe chip ids from the PCI configuration in this order:
                    810, 815, 820, 860, 875, 885, 895, 896
        revprob:y   probe chip ids in the reverse order.

10.2.17 Fix up PCI configuration space
        pcifix:<option bits>

    Available option bits:
        0x0:   No attempt to fix PCI configuration space registers values.
        0x1:   Set PCI cache-line size register if not set.
        0x2:   Set write and invalidate bit in PCI command register.
        0x4:   Increase if necessary PCI latency timer according to burst max.

    Use 'pcifix:7' in order to allow the driver to fix up all PCI features.

10.2.18 Serial NVRAM
        nvram:n     do not look for serial NVRAM
        nvram:y     test controllers for onboard serial NVRAM
        (alternate binary form)
        mvram=<bits options>
        0x01   look for NVRAM  (equivalent to nvram=y)
        0x02   ignore NVRAM "Synchronous negotiation" parameters for all devices
        0x04   ignore NVRAM "Wide negotiation"  parameter for all devices
        0x08   ignore NVRAM "Scan at boot time" parameter for all devices
        0x80   also attach controllers set to OFF in the NVRAM (sym53c8xx only)

10.2.19 Check SCSI BUS 
        buschk:<option bits>

    Available option bits:
        0x0:   No check.
        0x1:   Check and do not attach the controller on error.  
        0x2:   Check and just warn on error.
        0x4:   Disable SCSI bus integrity checking.

10.2.20 Exclude a host from being attached
        excl=<io_address>

    Prevent host at a given io address from being attached.
    For example 'ncr53c8xx=excl:0xb400,excl:0xc000' indicate to the 
    ncr53c8xx driver not to attach hosts at address 0xb400 and 0xc000.

10.2.21 Suggest a default SCSI id for hosts
        hostid:255	no id suggested.
        hostid:#x   (0 < x < 7) x suggested for hosts SCSI id.

    If a host SCSI id is available from the NVRAM, the driver will ignore 
    any value suggested as boot option. Otherwise, if a suggested value 
    different from 255 has been supplied, it will use it. Otherwise, it will 
    try to deduce the value previously set in the hardware and use value 
    7 if the hardware value is zero.

10.2.22 Enable use of IMMEDIATE ARBITRATION
        (only supported by the sym53c8xx driver. See 10.7 for more details)
        iarb:0    do not use this feature.
        iarb:#x   use this feature according to bit fields as follow:

    bit 0 (1) : enable IARB each time the initiator has been reselected 
                when it arbitrated for the SCSI BUS.
    (#x >> 4) : maximum number of successive settings of IARB if the initiator 
                win arbitration and it has other commands to send to a device.

Boot fail safe
    safe:y	load the following assumed fail safe initial setup

  master parity			disabled		mpar:n
  scsi parity			enabled			spar:y
  disconnections		not allowed		disc:n
  special features		disabled		specf:n
  ultra scsi			disabled		ultra:n
  force sync negotiation	disabled		fsn:n
  reverse probe			disabled		revprob:n
  PCI fix up                    disabled                pcifix:0
  serial NVRAM                  enabled                 nvram:y
  verbosity level		2			verb:2
  tagged command queuing	disabled		tags:0
  synchronous negotiation	disabled		sync:255
  debug flags			none			debug:0
  burst length			from BIOS settings	burst:255
  LED support			disabled		led:0
  wide support			disabled		wide:0
  settle time			10 seconds		settle:10
  differential support		from BIOS settings	diff:1
  irq mode			from BIOS settings	irqm:1
  SCSI BUS check		do not attach on error	buschk:1
  immediate arbitration		disabled		iarb:0

10.3 Advised boot setup commands

If the driver has been configured with default options, the equivalent 
boot setup is:

   ncr53c8xx=mpar:y,spar:y,disc:y,specf:3,fsn:n,ultra:2,fsn:n,revprob:n,verb:1\
             tags:0,sync:50,debug:0,burst:7,led:0,wide:1,settle:2,diff:0,irqm:0

For an installation diskette or a safe but not fast system,
boot setup can be:

    ncr53c8xx=safe:y,mpar:y,disc:y
    ncr53c8xx=safe:y,disc:y
    ncr53c8xx=safe:y,mpar:y
    ncr53c8xx=safe:y

My personal system works flawlessly with the following equivalent setup:

   ncr53c8xx=mpar:y,spar:y,disc:y,specf:1,fsn:n,ultra:2,fsn:n,revprob:n,verb:1\
             tags:32,sync:12,debug:0,burst:7,led:1,wide:1,settle:2,diff:0,irqm:0

The driver prints its actual setup when verbosity level is 2. You can try 
"ncr53c8xx=verb:2" to get the "static" setup of the driver, or add "verb:2" 
to your boot setup command in order to check the actual setup the driver is 
using.

10.4 PCI configuration fix-up boot option

pcifix:<option bits>

Available option bits:
    0x1:     Set PCI cache-line size register if not set.
    0x2:     Set write and invalidate bit in PCI command register.

Use 'pcifix:3' in order to allow the driver to fix both PCI features.

These options only apply to new SYMBIOS chips 810A, 825A, 860, 875 
and 895 and are only supported for Pentium and 486 class processors.
Recent SYMBIOS 53C8XX scsi processors are able to use PCI read multiple 
and PCI write and invalidate commands. These features require the 
cache line size register to be properly set in the PCI configuration 
space of the chips. On the other hand, chips will use PCI write and 
invalidate commands only if the corresponding bit is set to 1 in the 
PCI command register.

Not all PCI bioses set the PCI cache line register and the PCI write and 
invalidate bit in the PCI configuration space of 53C8XX chips.
Optimized PCI accesses may be broken for some PCI/memory controllers or 
make problems with some PCI boards.

This fix-up worked flawlessly on my previous system.
(MB Triton HX / 53C875 / 53C810A)
I use these options at my own risks as you will do if you decide to 
use them too.


10.5 Serial NVRAM support boot option

nvram:n     do not look for serial NVRAM
nvram:y     test controllers for onboard serial NVRAM

This option can also been entered as an hexadecimal value that allows 
to control what information the driver will get from the NVRAM and what 
information it will ignore.
For details see '17. Serial NVRAM support'.

When this option is enabled, the driver tries to detect all boards using 
a Serial NVRAM. This memory is used to hold user set up parameters.

The parameters the driver is able to get from the NVRAM depend on the 
data format used, as follow:

                                 Tekram format      Symbios format
General and host parameters
    Boot order                         N                   Y
    Host SCSI ID                       Y                   Y
    SCSI parity checking               Y                   Y
    Verbose boot messages              N                   Y
SCSI devices parameters
    Synchronous transfer speed         Y                   Y
    Wide 16 / Narrow                   Y                   Y
    Tagged Command Queuing enabled     Y                   Y
    Disconnections enabled             Y                   Y
    Scan at boot time                  N                   Y

In order to speed up the system boot, for each device configured without 
the "scan at boot time" option, the driver forces an error on the 
first TEST UNIT READY command received for this device.

Some SDMS BIOS revisions seem to be unable to boot cleanly with very fast 
hard disks. In such a situation you cannot configure the NVRAM with 
optimized parameters value.

The 'nvram' boot option can be entered in hexadecimal form in order 
to ignore some options configured in the NVRAM, as follow:

mvram=<bits options>
      0x01   look for NVRAM  (equivalent to nvram=y)
      0x02   ignore NVRAM "Synchronous negotiation" parameters for all devices
      0x04   ignore NVRAM "Wide negotiation"  parameter for all devices
      0x08   ignore NVRAM "Scan at boot time" parameter for all devices
      0x80   also attach controllers set to OFF in the NVRAM (sym53c8xx only)

Option 0x80 is only supported by the sym53c8xx driver and is disabled by 
default. Result is that, by default (option not set), the sym53c8xx driver 
will not attach controllers set to OFF in the NVRAM.

The ncr53c8xx always tries to attach all the controllers. Option 0x80 has 
not been added to the ncr53c8xx driver, since it has been reported to 
confuse users who use this driver since a long time. If you desire a 
controller not to be attached by the ncr53c8xx driver at Linux boot, you 
must use the 'excl' driver boot option.

10.6 SCSI BUS checking boot option.

When this option is set to a non-zero value, the driver checks SCSI lines 
logic state, 100 micro-seconds after having asserted the SCSI RESET line.
The driver just reads SCSI lines and checks all lines read FALSE except RESET.
Since SCSI devices shall release the BUS at most 800 nano-seconds after SCSI 
RESET has been asserted, any signal to TRUE may indicate a SCSI BUS problem.
Unfortunately, the following common SCSI BUS problems are not detected:
- Only 1 terminator installed.
- Misplaced terminators.
- Bad quality terminators.
On the other hand, either bad cabling, broken devices, not conformant 
devices, ... may cause a SCSI signal to be wrong when te driver reads it.

10.7 IMMEDIATE ARBITRATION boot option

This option is only supported by the SYM53C8XX driver (not by the NCR53C8XX).

SYMBIOS 53C8XX chips are able to arbitrate for the SCSI BUS as soon as they 
have detected an expected disconnection (BUS FREE PHASE). For this process 
to be started, bit 1 of SCNTL1 IO register must be set when the chip is 
connected to the SCSI BUS.

When this feature has been enabled for the current connection, the chip has 
every chance to win arbitration if only devices with lower priority are 
competing for the SCSI BUS. By the way, when the chip is using SCSI id 7, 
then it will for sure win the next SCSI BUS arbitration.

Since, there is no way to know what devices are trying to arbitrate for the 
BUS, using this feature can be extremely unfair. So, you are not advised
to enable it, or at most enable this feature for the case the chip lost 
the previous arbitration (boot option 'iarb:1').

This feature has the following advantages:

a) Allow the initiator with ID 7 to win arbitration when it wants so.
b) Overlap at least 4 micro-seconds of arbitration time with the execution 
   of SCRIPTS that deal with the end of the current connection and that 
   starts the next job.

Hmmm... But (a) may just prevent other devices from reselecting the initiator, 
and delay data transfers or status/completions, and (b) may just waste 
SCSI BUS bandwidth if the SCRIPTS execution lasts more than 4 micro-seconds.

The use of IARB needs the SCSI_NCR_IARB_SUPPORT option to have been defined 
at compile time and the 'iarb' boot option to have been set to a non zero 
value at boot time. It is not that useful for real work, but can be used 
to stress SCSI devices or for some applications that can gain advantage of 
it. By the way, if you experience badnesses like 'unexpected disconnections', 
'bad reselections', etc... when using IARB on heavy IO load, you should not 
be surprised, because force-feeding anything and blocking its arse at the 
same time cannot work for a long time. :-))


11. Some constants and flags of the ncr53c8xx.h header file

Some of these are defined from the configuration parameters.  To
change other "defines", you must edit the header file.  Do that only
if you know what you are doing.

SCSI_NCR_SETUP_SPECIAL_FEATURES	(default: defined)
	If defined, the driver will enable some special features according  
	to chip and revision id.
        For 810A, 860, 825A, 875 and 895 scsi chips, this option enables 
	support of features that reduce load of PCI bus and memory accesses 
	during  scsi transfer processing: burst op-code fetch, read multiple, 
        read line, prefetch, cache line, write and invalidate, 
        burst 128 (875 only), large dma fifo (875 only), offset 16 (875 only).
	Can be changed by the following boot setup command:
		ncr53c8xx=specf:n

SCSI_NCR_IOMAPPED		(default: not defined)
	If defined, normal I/O is forced.

SCSI_NCR_SHARE_IRQ		(default: defined)
	If defined, request shared IRQ.
	
SCSI_NCR_MAX_TAGS		(default: 8)
	Maximum number of simultaneous tagged commands to a device.
	Can be changed by "settags <target> <maxtags>"

SCSI_NCR_SETUP_DEFAULT_SYNC     (default: 50)
	Transfer period factor the driver will use at boot time for synchronous 
	negotiation. 0 means asynchronous.
	Can be changed by "setsync <target> <period factor>"

SCSI_NCR_SETUP_DEFAULT_TAGS     (default: 8)
	Default number of simultaneous tagged commands to a device.
	< 1 means tagged command queuing disabled at start-up.

SCSI_NCR_ALWAYS_SIMPLE_TAG	(default: defined)
	Use SIMPLE TAG for read and write commands.
	Can be changed by "setorder <ordered|simple|default>"

SCSI_NCR_SETUP_DISCONNECTION	(default: defined)
	If defined, targets are allowed to disconnect.

SCSI_NCR_SETUP_FORCE_SYNC_NEGO	(default: not defined)
	If defined, synchronous negotiation is tried for all SCSI-2 devices.
	Can be changed by "setsync <target> <period>"

SCSI_NCR_SETUP_MASTER_PARITY	(default: defined)
	If defined, master parity checking is enabled.

SCSI_NCR_SETUP_SCSI_PARITY	(default: defined)
	If defined, SCSI parity checking is enabled.

SCSI_NCR_PROFILE_SUPPORT	(default: not defined)
	If defined, profiling information is gathered.

SCSI_NCR_MAX_SCATTER		(default: 128)
	Scatter list size of the driver ccb.

SCSI_NCR_MAX_TARGET		(default: 16)
	Max number of targets per host.

SCSI_NCR_MAX_HOST		(default: 2)
	Max number of host controllers.

SCSI_NCR_SETTLE_TIME		(default: 2)
	Number of seconds the driver will wait after reset.

SCSI_NCR_TIMEOUT_ALERT		(default: 3)
	If a pending command will time out after this amount of seconds,
	an ordered tag is used for the next command.
	Avoids timeouts for unordered tagged commands.

SCSI_NCR_CAN_QUEUE		(default: 7*SCSI_NCR_MAX_TAGS)
	Max number of commands that can be queued to a host.

SCSI_NCR_CMD_PER_LUN		(default: SCSI_NCR_MAX_TAGS)
	Max number of commands queued to a host for a device.

SCSI_NCR_SG_TABLESIZE		(default: SCSI_NCR_MAX_SCATTER-1)
	Max size of the Linux scatter/gather list.

SCSI_NCR_MAX_LUN	(default: 8)
	Max number of LUNs per target.


12. Installation

This driver is part of the linux kernel distribution.
Driver files are located in the sub-directory "drivers/scsi" of the 
kernel source tree.

Driver files:

	README.ncr53c8xx	: this file
	ChangeLog.ncr53c8xx	: change log
	ncr53c8xx.h		: definitions
	ncr53c8xx.c		: the driver code

New driver versions are made available separately in order to allow testing 
changes and new features prior to including them into the linux kernel 
distribution. The following URL provides information on latest available 
patches: 

      ftp://ftp.tux.org/pub/people/gerard-roudier/README


13. Architecture dependent features.

<Not yet written>


14. Known problems

14.1 Tagged commands with Iomega Jaz device

I have not tried this device, however it has been reported to me the
following: This device is capable of Tagged command queuing. However
while spinning up, it rejects Tagged commands. This behaviour is
conforms to 6.8.2 of SCSI-2 specifications. The current behaviour of
the driver in that situation is not satisfying. So do not enable
Tagged command queuing for devices that are able to spin down.  The
other problem that may appear is timeouts. The only way to avoid
timeouts seems to edit linux/drivers/scsi/sd.c and to increase the
current timeout values.

14.2 Device names change when another controller is added.

When you add a new NCR53C8XX chip based controller to a system that already 
has one or more controllers of this family, it may happen that the order 
the driver registers them to the kernel causes problems due to device 
name changes.
When at least one controller uses NvRAM, SDMS BIOS version 4 allows you to 
define the order the BIOS will scan the scsi boards. The driver attaches 
controllers according to BIOS information if NvRAM detect option is set.

If your controllers do not have NvRAM, you can:

- Ask the driver to probe chip ids in reverse order from the boot command
  line: ncr53c8xx=revprob:y
- Make appropriate changes in the fstab.
- Use the 'scsidev' tool from Eric Youngdale.

14.3 Using only 8 bit devices with a WIDE SCSI controller.

When only 8 bit NARROW devices are connected to a 16 bit WIDE SCSI controller, 
you must ensure that lines of the wide part of the SCSI BUS are pulled-up.
This can be achieved by ENABLING the WIDE TERMINATOR portion of the SCSI 
controller card.
The TYAN 1365 documentation revision 1.2 is not correct about such settings.
(page 10, figure 3.3).

14.4 Possible data corruption during a Memory Write and Invalidate

This problem is described in SYMBIOS DEL 397, Part Number 69-039241, ITEM 4.

In some complex situations, 53C875 chips revision <= 3 may start a PCI 
Write and Invalidate Command at a not cache-line-aligned 4 DWORDS boundary.
This is only possible when Cache Line Size is 8 DWORDS or greater.
Pentium systems use a 8 DWORDS cache line size and so are concerned by 
this chip bug, unlike i486 systems that use a 4 DWORDS cache line size.

When this situation occurs, the chip may complete the Write and Invalidate 
command after having only filled part of the last cache line involved in 
the transfer, leaving to data corruption the remainder of this cache line.

Not using Write And Invalidate obviously gets rid of this chip bug, and so 
it is now the default setting of the driver.
However, for people like me who want to enable this feature, I have added 
part of a work-around suggested by SYMBIOS. This work-around resets the 
addressing logic when the DATA IN phase is entered and so prevents the bug 
from being triggered for the first SCSI MOVE of the phase. This work-around 
should be enough according to the following:

The only driver internal data structure that is greater than 8 DWORDS  and 
that is moved by the SCRIPTS processor is the 'CCB header' that contains 
the context of the SCSI transfer. This data structure is aligned on 8 DWORDS 
boundary (Pentium Cache Line Size), and so is immune to this chip bug, at 
least on Pentium systems.
But the conditions of this bug can be met when a SCSI read command is 
performed using a buffer that is 4 DWORDS but not cache-line aligned.
This cannot happen under Linux when scatter/gather lists are used since 
they only refer to system buffers that are well aligned. So, a work around 
may only be needed under Linux when a scatter/gather list is not used and 
when the SCSI DATA IN phase is reentered after a phase mismatch.

14.5 IRQ sharing problems

When an IRQ is shared by devices that are handled by different drivers, it 
may happen that one driver complains about the request of the IRQ having 
failed. Inder Linux-2.0, this may be due to one driver having requested the 
IRQ using the IRQF_DISABLED flag but some other having requested the same IRQ
without this flag. Under both Linux-2.0 and linux-2.2, this may be caused by 
one driver not having requested the IRQ with the IRQF_SHARED flag.

By default, the ncr53c8xx and sym53c8xx drivers request IRQs with both the 
IRQF_DISABLED and the IRQF_SHARED flag under Linux-2.0 and with only the IRQF_SHARED
flag under Linux-2.2.

Under Linux-2.0, you can disable use of IRQF_DISABLED flag from the boot
command line by using the following option:

     ncr53c8xx=irqm:0x20   (for the generic ncr53c8xx driver)
     sym53c8xx=irqm:0x20   (for the sym53c8xx driver)

If this does not fix the problem, then you may want to check how all other 
drivers are requesting the IRQ and report the problem. Note that if at least 
a single driver does not request the IRQ with the IRQF_SHARED flag (share IRQ),
then the request of the IRQ obviously will not succeed for all the drivers.

15. SCSI problem troubleshooting

15.1 Problem tracking

Most SCSI problems are due to a non conformant SCSI bus or to buggy
devices.  If unfortunately you have SCSI problems, you can check the
following things:

- SCSI bus cables
- terminations at both end of the SCSI chain
- linux syslog messages (some of them may help you)

If you do not find the source of problems, you can configure the
driver with no features enabled.

- only asynchronous data transfers
- tagged commands disabled
- disconnections not allowed

Now, if your SCSI bus is ok, your system have every chance to work
with this safe configuration but performances will not be optimal.

If it still fails, then you can send your problem description to
appropriate mailing lists or news-groups.  Send me a copy in order to
be sure I will receive it.  Obviously, a bug in the driver code is
possible.

     My email address: Gerard Roudier <groudier@free.fr>

Allowing disconnections is important if you use several devices on
your SCSI bus but often causes problems with buggy devices.
Synchronous data transfers increases throughput of fast devices like
hard disks.  Good SCSI hard disks with a large cache gain advantage of
tagged commands queuing.

Try to enable one feature at a time with control commands.  For example:

- echo "setsync all 25" >/proc/scsi/ncr53c8xx/0
  Will enable fast synchronous data transfer negotiation for all targets.

- echo "setflag 3" >/proc/scsi/ncr53c8xx/0
  Will reset flags (no_disc) for target 3, and so will allow it to disconnect 
  the SCSI Bus.

- echo "settags 3 8" >/proc/scsi/ncr53c8xx/0
  Will enable tagged command queuing for target 3 if that device supports it.

Once you have found the device and the feature that cause problems, just 
disable that feature for that device.

15.2 Understanding hardware error reports

When the driver detects an unexpected error condition, it may display a 
message of the following pattern.

sym53c876-0:1: ERROR (0:48) (1-21-65) (f/95) @ (script 7c0:19000000).
sym53c876-0: script cmd = 19000000
sym53c876-0: regdump: da 10 80 95 47 0f 01 07 75 01 81 21 80 01 09 00.

Some fields in such a message may help you understand the cause of the 
problem, as follows:

sym53c876-0:1: ERROR (0:48) (1-21-65) (f/95) @ (script 7c0:19000000).
............A.........B.C....D.E..F....G.H.......I.....J...K.......

Field A : target number.
  SCSI ID of the device the controller was talking with at the moment the 
  error occurs.

Field B : DSTAT io register (DMA STATUS)
  Bit 0x40 : MDPE Master Data Parity Error
             Data parity error detected on the PCI BUS.
  Bit 0x20 : BF   Bus Fault
             PCI bus fault condition detected
  Bit 0x01 : IID  Illegal Instruction Detected
             Set by the chip when it detects an Illegal Instruction format 
             on some condition that makes an instruction illegal.
  Bit 0x80 : DFE Dma Fifo Empty
             Pure status bit that does not indicate an error.
  If the reported DSTAT value contains a combination of MDPE (0x40), 
  BF (0x20), then the cause may be likely due to a PCI BUS problem.

Field C : SIST io register (SCSI Interrupt Status)
  Bit 0x08 : SGE  SCSI GROSS ERROR
             Indicates that the chip detected a severe error condition 
             on the SCSI BUS that prevents the SCSI protocol from functioning
             properly.
  Bit 0x04 : UDC  Unexpected Disconnection
             Indicates that the device released the SCSI BUS when the chip 
             was not expecting this to happen. A device may behave so to 
             indicate the SCSI initiator that an error condition not reportable              using the SCSI protocol has occurred.
  Bit 0x02 : RST  SCSI BUS Reset
             Generally SCSI targets do not reset the SCSI BUS, although any 
             device on the BUS can reset it at any time.
  Bit 0x01 : PAR  Parity
             SCSI parity error detected.
  On a faulty SCSI BUS, any error condition among SGE (0x08), UDC (0x04) and 
  PAR (0x01) may be detected by the chip. If your SCSI system sometimes 
  encounters such error conditions, especially SCSI GROSS ERROR, then a SCSI 
  BUS problem is likely the cause of these errors.

For fields D,E,F,G and H, you may look into the sym53c8xx_defs.h file 
that contains some minimal comments on IO register bits.
Field D : SOCL  Scsi Output Control Latch
          This register reflects the state of the SCSI control lines the 
          chip want to drive or compare against.
Field E : SBCL  Scsi Bus Control Lines
          Actual value of control lines on the SCSI BUS.
Field F : SBDL  Scsi Bus Data Lines
          Actual value of data lines on the SCSI BUS.
Field G : SXFER  SCSI Transfer
          Contains the setting of the Synchronous Period for output and 
          the current Synchronous offset (offset 0 means asynchronous).
Field H : SCNTL3 Scsi Control Register 3
          Contains the setting of timing values for both asynchronous and 
          synchronous data transfers. 

Understanding Fields I, J, K and dumps requires to have good knowledge of 
SCSI standards, chip cores functionnals and internal driver data structures.
You are not required to decode and understand them, unless you want to help 
maintain the driver code.

16. Synchronous transfer negotiation tables

Tables below have been created by calling the routine the driver uses
for synchronisation negotiation timing calculation and chip setting.
The first table corresponds to Ultra chips 53875 and 53C860 with 80 MHz 
clock and 5 clock divisors.
The second one has been calculated by setting the scsi clock to 40 Mhz 
and using 4 clock divisors and so applies to all NCR53C8XX chips in fast 
SCSI-2 mode.

Periods are in nano-seconds and speeds are in Mega-transfers per second.
1 Mega-transfers/second means 1 MB/s with 8 bits SCSI and 2 MB/s with 
Wide16 SCSI.

16.1 Synchronous timings for 53C895, 53C875 and 53C860 SCSI controllers

 ----------------------------------------------
 Negotiated                     NCR settings
 Factor   Period   Speed        Period   Speed
 ------   ------   ------       ------   ------
 10       25       40.000       25       40.000   (53C895 only)
 11       30.2     33.112       31.25    32.000   (53C895 only)
 12       50       20.000       50       20.000
 13       52       19.230       62       16.000
 14       56       17.857       62       16.000
 15       60       16.666       62       16.000
 16       64       15.625       75       13.333
 17       68       14.705       75       13.333
 18       72       13.888       75       13.333
 19       76       13.157       87       11.428
 20       80       12.500       87       11.428
 21       84       11.904       87       11.428
 22       88       11.363       93       10.666
 23       92       10.869       93       10.666
 24       96       10.416      100       10.000
 25      100       10.000      100       10.000
 26      104        9.615      112        8.888
 27      108        9.259      112        8.888
 28      112        8.928      112        8.888
 29      116        8.620      125        8.000
 30      120        8.333      125        8.000
 31      124        8.064      125        8.000
 32      128        7.812      131        7.619
 33      132        7.575      150        6.666
 34      136        7.352      150        6.666
 35      140        7.142      150        6.666
 36      144        6.944      150        6.666
 37      148        6.756      150        6.666
 38      152        6.578      175        5.714
 39      156        6.410      175        5.714
 40      160        6.250      175        5.714
 41      164        6.097      175        5.714
 42      168        5.952      175        5.714
 43      172        5.813      175        5.714
 44      176        5.681      187        5.333
 45      180        5.555      187        5.333
 46      184        5.434      187        5.333
 47      188        5.319      200        5.000
 48      192        5.208      200        5.000
 49      196        5.102      200        5.000


16.2 Synchronous timings for fast SCSI-2 53C8XX controllers

 ----------------------------------------------
 Negotiated                     NCR settings
 Factor   Period   Speed        Period   Speed
 ------   ------   ------       ------   ------
 25      100       10.000      100       10.000
 26      104        9.615      125        8.000
 27      108        9.259      125        8.000
 28      112        8.928      125        8.000
 29      116        8.620      125        8.000
 30      120        8.333      125        8.000
 31      124        8.064      125        8.000
 32      128        7.812      131        7.619
 33      132        7.575      150        6.666
 34      136        7.352      150        6.666
 35      140        7.142      150        6.666
 36      144        6.944      150        6.666
 37      148        6.756      150        6.666
 38      152        6.578      175        5.714
 39      156        6.410      175        5.714
 40      160        6.250      175        5.714
 41      164        6.097      175        5.714
 42      168        5.952      175        5.714
 43      172        5.813      175        5.714
 44      176        5.681      187        5.333
 45      180        5.555      187        5.333
 46      184        5.434      187        5.333
 47      188        5.319      200        5.000
 48      192        5.208      200        5.000
 49      196        5.102      200        5.000


17. Serial NVRAM (added by Richard Waltham: dormouse@farsrobt.demon.co.uk)

17.1 Features

Enabling serial NVRAM support enables detection of the serial NVRAM included
on Symbios and some Symbios compatible host adaptors, and Tekram boards. The 
serial NVRAM is used by Symbios and Tekram to hold set up parameters for the 
host adaptor and its attached drives.

The Symbios NVRAM also holds data on the boot order of host adaptors in a
system with more than one host adaptor. This enables the order of scanning
the cards for drives to be changed from the default used during host adaptor
detection.

This can be done to a limited extent at the moment using "reverse probe" but
this only changes the order of detection of different types of cards. The
NVRAM boot order settings can do this as well as change the order the same
types of cards are scanned in, something "reverse probe" cannot do.

Tekram boards using Symbios chips, DC390W/F/U, which have NVRAM are detected
and this is used to distinguish between Symbios compatible and Tekram host 
adaptors. This is used to disable the Symbios compatible "diff" setting
incorrectly set on Tekram boards if the CONFIG_SCSI_53C8XX_SYMBIOS_COMPAT 
configuration parameter is set enabling both Symbios and Tekram boards to be 
used together with the Symbios cards using all their features, including
"diff" support. ("led pin" support for Symbios compatible cards can remain
enabled when using Tekram cards. It does nothing useful for Tekram host
adaptors but does not cause problems either.)


17.2 Symbios NVRAM layout

typical data at NVRAM address 0x100 (53c810a NVRAM)
-----------------------------------------------------------
00 00
64 01
8e 0b

00 30 00 00 00 00 07 00 00 00 00 00 00 00 07 04 10 04 00 00 

04 00 0f 00 00 10 00 50 00 00 01 00 00 62 
04 00 03 00 00 10 00 58 00 00 01 00 00 63 
04 00 01 00 00 10 00 48 00 00 01 00 00 61 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 

0f 00 08 08 64 00 0a 00
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 

0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 

00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 

00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 

00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 

fe fe
00 00
00 00
-----------------------------------------------------------
NVRAM layout details

NVRAM Address 0x000-0x0ff not used
              0x100-0x26f initialised data
              0x270-0x7ff not used

general layout

        header  -   6 bytes,
        data    - 356 bytes (checksum is byte sum of this data)
        trailer -   6 bytes
                  ---
        total     368 bytes

data area layout

        controller set up  -  20 bytes
        boot configuration -  56 bytes (4x14 bytes)
        device set up      - 128 bytes (16x8 bytes)
        unused (spare?)    - 152 bytes (19x8 bytes)
                             ---
        total                356 bytes

-----------------------------------------------------------
header

00 00   - ?? start marker
64 01   - byte count (lsb/msb excludes header/trailer)
8e 0b   - checksum (lsb/msb excludes header/trailer)
-----------------------------------------------------------
controller set up

00 30 00 00 00 00 07 00 00 00 00 00 00 00 07 04 10 04 00 00
                   |     |           |     |
                   |     |           |      -- host ID
                   |     |           |
                   |     |            --Removable Media Support
                   |     |               0x00 = none
                   |     |               0x01 = Bootable Device
                   |     |               0x02 = All with Media
                   |     |
                   |      --flag bits 2
                   |        0x00000001= scan order hi->low
                   |            (default 0x00 - scan low->hi)
                    --flag bits 1
                       0x00000001 scam enable
                       0x00000010 parity enable
                       0x00000100 verbose boot msgs

remaining bytes unknown - they do not appear to change in my
current set up for any of the controllers.

default set up is identical for 53c810a and 53c875 NVRAM
(Removable Media added Symbios BIOS version 4.09)
-----------------------------------------------------------
boot configuration

boot order set by order of the devices in this table

04 00 0f 00 00 10 00 50 00 00 01 00 00 62 -- 1st controller
04 00 03 00 00 10 00 58 00 00 01 00 00 63    2nd controller
04 00 01 00 00 10 00 48 00 00 01 00 00 61    3rd controller
00 00 00 00 00 00 00 00 00 00 00 00 00 00    4th controller
       |  |  |  |     |        |     |  |
       |  |  |  |     |        |      ---- PCI io port adr
       |  |  |  |     |         --0x01 init/scan at boot time
       |  |  |  |      --PCI device/function number (0xdddddfff)
       |  |   ----- ?? PCI vendor ID (lsb/msb)
        ----PCI device ID (lsb/msb)

?? use of this data is a guess but seems reasonable

remaining bytes unknown - they do not appear to change in my
current set up

default set up is identical for 53c810a and 53c875 NVRAM
-----------------------------------------------------------
device set up (up to 16 devices - includes controller)

0f 00 08 08 64 00 0a 00 - id 0
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 

0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 
0f 00 08 08 64 00 0a 00 - id 15
 |     |  |  |     |  |
 |     |  |  |      ----timeout (lsb/msb)
 |     |  |   --synch period (0x?? 40 Mtrans/sec- fast 40) (probably 0x28)
 |     |  |                  (0x30 20 Mtrans/sec- fast 20)
 |     |  |                  (0x64 10 Mtrans/sec- fast )
 |     |  |                  (0xc8  5 Mtrans/sec)
 |     |  |                  (0x00  asynchronous)
 |     |   -- ?? max sync offset (0x08 in NVRAM on 53c810a) 
 |     |                         (0x10 in NVRAM on 53c875)
 |      --device bus width (0x08 narrow)
 |                         (0x10 16 bit wide)
  --flag bits
    0x00000001 - disconnect enabled
    0x00000010 - scan at boot time
    0x00000100 - scan luns
    0x00001000 - queue tags enabled

remaining bytes unknown - they do not appear to change in my
current set up

?? use of this data is a guess but seems reasonable 
(but it could be max bus width)

default set up for 53c810a NVRAM
default set up for 53c875 NVRAM - bus width     - 0x10
                                - sync offset ? - 0x10
                                - sync period   - 0x30
-----------------------------------------------------------
?? spare device space (32 bit bus ??)

00 00 00 00 00 00 00 00  (19x8bytes)
.
.
00 00 00 00 00 00 00 00

default set up is identical for 53c810a and 53c875 NVRAM
-----------------------------------------------------------
trailer

fe fe   - ? end marker ?
00 00
00 00

default set up is identical for 53c810a and 53c875 NVRAM
-----------------------------------------------------------



17.3 Tekram NVRAM layout

nvram 64x16 (1024 bit)

Drive settings

Drive ID 0-15 (addr 0x0yyyy0 = device setup, yyyy = ID)
              (addr 0x0yyyy1 = 0x0000)

    x x x x  x x x x  x x x x  x x x x
               | | |      | |  | | | |
               | | |      | |  | | |  ----- parity check   0 - off
               | | |      | |  | | |                       1 - on
               | | |      | |  | | |
               | | |      | |  | |  ------- sync neg       0 - off
               | | |      | |  | |                         1 - on
               | | |      | |  | |
               | | |      | |  |  --------- disconnect     0 - off
               | | |      | |  |                           1 - on
               | | |      | |  |
               | | |      | |   ----------- start cmd      0 - off
               | | |      | |                              1 - on
               | | |      | |
               | | |      |  -------------- tagged cmds    0 - off
               | | |      |                                1 - on
               | | |      | 
               | | |       ---------------- wide neg       0 - off
               | | |                                       1 - on
               | | |
                --------------------------- sync rate      0 - 10.0 Mtrans/sec
                                                           1 -  8.0
                                                           2 -  6.6
                                                           3 -  5.7
                                                           4 -  5.0
                                                           5 -  4.0
                                                           6 -  3.0
                                                           7 -  2.0
                                                           7 -  2.0
                                                           8 - 20.0
                                                           9 - 16.7
                                                           a - 13.9
                                                           b - 11.9

Global settings

Host flags 0 (addr 0x100000, 32) 

    x x x x  x x x x  x x x x  x x x x
    | | | |  | | | |           | | | |
    | | | |  | | | |            ----------- host ID    0x00 - 0x0f
    | | | |  | | | |
    | | | |  | | |  ----------------------- support for    0 - off
    | | | |  | | |                          > 2 drives     1 - on
    | | | |  | | | 
    | | | |  | |  ------------------------- support drives 0 - off
    | | | |  | |                            > 1Gbytes      1 - on
    | | | |  | |
    | | | |  |  --------------------------- bus reset on   0 - off
    | | | |  |                                power on     1 - on
    | | | |  |
    | | | |   ----------------------------- active neg     0 - off
    | | | |                                                1 - on
    | | | |
    | | |  -------------------------------- imm seek       0 - off
    | | |                                                  1 - on
    | | |
    | |  ---------------------------------- scan luns      0 - off
    | |                                                    1 - on
    | |
     -------------------------------------- removable      0 - disable
                                            as BIOS dev    1 - boot device
                                                           2 - all

Host flags 1 (addr 0x100001, 33)

    x x x x  x x x x  x x x x  x x x x
               | | |             | | | 
               | | |              --------- boot delay     0 -   3 sec
               | | |                                       1 -   5
               | | |                                       2 -  10
               | | |                                       3 -  20
               | | |                                       4 -  30
               | | |                                       5 -  60
               | | |                                       6 - 120
               | | |
                --------------------------- max tag cmds   0 -  2
                                                           1 -  4
                                                           2 -  8
                                                           3 - 16
                                                           4 - 32

Host flags 2 (addr 0x100010, 34)

    x x x x  x x x x  x x x x  x x x x
                                     |
                                      ----- F2/F6 enable   0 - off ???
                                                           1 - on  ???

checksum (addr 0x111111)

checksum = 0x1234 - (sum addr 0-63)

----------------------------------------------------------------------------

default nvram data:

0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000
0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000
0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000
0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 

0x0f07 0x0400 0x0001 0x0000 0x0000 0x0000 0x0000 0x0000
0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0xfbbc


18. Support for Big Endian

The PCI local bus has been primarily designed for x86 architecture.
As a consequence, PCI devices generally expect DWORDS using little endian 
byte ordering.

18.1 Big Endian CPU

In order to support NCR chips on a Big Endian architecture the driver has to 
perform byte reordering each time it is needed. This feature has been 
added to the driver by Cort <cort@cs.nmt.edu> and is available in driver 
version 2.5 and later ones. For the moment Big Endian support has only 
been tested on Linux/PPC (PowerPC).

18.2 NCR chip in Big Endian mode of operations

It can be read in SYMBIOS documentation that some chips support a special 
Big Endian mode, on paper: 53C815, 53C825A, 53C875, 53C875N, 53C895.
This mode of operations is not software-selectable, but needs pin named 
BigLit to be pulled-up. Using this mode, most of byte reorderings should 
be avoided when the driver is running on a Big Endian CPU.
Driver version 2.5 is also, in theory, ready for this feature.

===============================================================================
End of NCR53C8XX driver README file
