Import 2.3.18pre1
[davej-history.git] / drivers / scsi / README.ncr53c8xx
blob2fa1956a2889321be004f0732a04ce64de62e0d6
1 The Linux NCR53C8XX driver README file
3 Written by Gerard Roudier <groudier@club-internet.fr>
4 21 Rue Carnot
5 95170 DEUIL LA BARRE - FRANCE
7 10 March 1999
8 ===============================================================================
10 1.  Introduction
11 2.  Supported chips and SCSI features
12 3.  Advantages of the enhanced 896 driver
13       3.1 Optimized SCSI SCRIPTS
14       3.2 New features of the SYM53C896 (64 bit PCI dual LVD SCSI controller)
15 4.  Memory mapped I/O versus normal I/O
16 5.  Tagged command queueing
17 6.  Parity checking
18 7.  Profiling information
19 8.  Control commands
20       8.1  Set minimum synchronous period
21       8.2  Set wide size
22       8.3  Set maximum number of concurrent tagged commands
23       8.4  Set order type for tagged command
24       8.5  Set debug mode
25       8.6  Clear profile counters
26       8.7  Set flag (no_disc)
27       8.8  Set verbose level
28 9.  Configuration parameters
29 10. Boot setup commands
30       10.1 Syntax
31       10.2 Available arguments
32       10.3 Advised boot setup commands
33       10.4 PCI configuration fix-up boot option
34       10.5 Serial NVRAM support boot option
35       10.6 SCSI BUS checking boot option
36 11. Some constants and flags of the ncr53c8xx.h header file
37 12. Installation
38 13. Architecture dependent features
39 14. Known problems
40       14.1 Tagged commands with Iomega Jaz device
41       14.2 Device names change when another controller is added
42       14.3 Using only 8 bit devices with a WIDE SCSI controller.
43       14.4 Possible data corruption during a Memory Write and Invalidate
44       14.5 IRQ sharing problems
45 15. SCSI problem troubleshooting
46 16. Synchonous transfer negotiation tables
47       16.1 Synchronous timings for 53C875 and 53C860 Ultra-SCSI controllers
48       16.2 Synchronous timings for fast SCSI-2 53C8XX controllers
49 17. Serial NVRAM support (by Richard Waltham)
50       17.1 Features
51       17.2 Symbios NVRAM layout
52       17.3 Tekram  NVRAM layout
53 18. Support for Big Endian
54       18.1 Big Endian CPU
55       18.2 NCR chip in Big Endian mode of operations
57 ===============================================================================
59 1. Introduction
61 The initial Linux ncr53c8xx driver has been a port of the ncr driver from 
62 FreeBSD that has been achieved in November 1995 by:
63           Gerard Roudier              <groudier@club-internet.fr>
65 The original driver has been written for 386bsd and FreeBSD by:
66           Wolfgang Stanglmeier        <wolf@cologne.de>
67           Stefan Esser                <se@mi.Uni-Koeln.de>
69 It is now available as a bundle of 2 drivers:
71 - ncr53c8xx generic driver that supports all the SYM53C8XX family including 
72   the ealiest 810 rev. 1 and the latest 896 2 channels LVD SCSI controller.
73 - sym53c8xx enhanced driver (a.k.a. 896 drivers) that drops support of oldest 
74   chips in order to gain advantage of new features, as LOAD/STORE intructions 
75   available since the 810A and hardware phase mismatch available with the 
76   latest 896.
78 You can find technical information about the NCR 8xx family in the
79 PCI-HOWTO written by Michael Will and in the SCSI-HOWTO written by
80 Drew Eckhardt.
82 Information about new chips is available at LSILOGIC web server:
84           http://www.lsilogic.com/
86 SCSI standard documentations are available at SYMBIOS ftp server:
88           ftp://ftp.symbios.com/
90 Usefull SCSI tools written by Eric Youngdale are available at tsx-11:
92           ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/scsiinfo-X.Y.tar.gz
93           ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/scsidev-X.Y.tar.gz
95 These tools are not ALPHA but quite clean and work quite well.
96 It is essential you have the 'scsiinfo' package.
98 This short documentation only describes the features of the NCR53C8XX
99 driver, configuration parameters and control commands available
100 through the proc SCSI file system read / write operations.
102 This driver has been tested OK with linux/i386, Linux/Alpha and Linux/PPC.
104 Latest driver version and patches are available at:
106           ftp://ftp.tux.org/pub/people/gerard-roudier
108 I am not a native speaker of English and there are probably lots of
109 mistakes in this README file. Any help will be welcome.
112 2. Supported chips and SCSI features
114 The following features are supported for all chips:
116         Synchronous negotiation
117         Disconnection
118         Tagged command queuing
119         SCSI parity checking
120         Master parity checking
122 "Wide negotiation" is supported for chips that allow it.  The
123 following table shows some characteristics of NCR 8xx family chips 
124 and what drivers support them.
126                                                   Supported by   Supported by
127        On board                                   the generic    the enhanced 
128 Chip   SDMS BIOS   Wide   SCSI std.   Max. sync   driver         driver
129 ----   ---------   ----   ---------   ----------  ------------   -------------
130 810        N         N      FAST10    10 MB/s        Y             N
131 810A       N         N      FAST10    10 MB/s        Y             Y
132 815        Y         N      FAST10    10 MB/s        Y             N
133 825        Y         Y      FAST10    20 MB/s        Y             N
134 825A       Y         Y      FAST10    20 MB/s        Y             Y
135 860        N         N      FAST20    20 MB/s        Y             Y
136 875        Y         Y      FAST20    40 MB/s        Y             Y
137 876        Y         Y      FAST20    40 MB/s        Y             Y
138 895        Y         Y      FAST40    80 MB/s        Y             Y
139 896        Y         Y      FAST40    80 MB/s        Y             Y
142 Summary of other supported features:
144 Module:                allow to load the driver
145 Memory mapped I/O:     increases performance
146 Profiling information: read operations from the proc SCSI file system
147 Control commands:      write operations to the proc SCSI file system
148 Debugging information: written to syslog (expert only)
149 Scatter / gather
150 Shared interrupt
151 Boot setup commands
152 Serial NVRAM:          Symbios and Tekram formats
155 3. Advantages of the enhanced 896 driver
157 3.1 Optimized SCSI SCRIPTS.
159 The 810A, 825A, 875, 895 and newest 896 support new SCSI SCRIPTS instructions 
160 named LOAD and STORE that allow to move 1 DWORD from/to an IO register to/from 
161 memory much faster that the MOVE MEMORY instruction that is supported by the 
162 53c7xx and 53c8xx family. The LOAD/STORE instructions support absolute and 
163 DSA relative addressing modes. The SCSI SCRIPTS had been entirely rewritten 
164 using LOAD/STORE instead of MOVE MEMORY instructions.
166 3.2 New features of the SYM53C896 (64 bit PCI dual LVD SCSI controller)
168 The 896 allows to handle the phase mismatch context saving from SCRIPTS 
169 (avoids the phase mismatch interrupt that stops the SCSI processor 
170 until the C code has saved the context of the transfer).
171 Implementing this without using LOAD/STORE instructions would be painfull 
172 and I did'nt even try it. This chip also supports 64 bit PCI transactions 
173 and addressing. The SCRIPTS processor is not true 64 bit, but uses segment 
174 registers for bit 32-63. Another interesting feature is that LOAD/STORE 
175 instructions that address the on-chip RAM (8k) remain internal to the chip.
177 Due to the use of LOAD/STORE SCRIPTS instructions, this driver does not 
178 support the following chips:
179 - SYM53C810 revision < 0x10 (16)
180 - SYM53C815 all revisions
181 - SYM53C825 revision < 0x10 (16)
183 4. Memory mapped I/O versus normal I/O
185 Memory mapped I/O has less latency than normal I/O.  Since
186 linux-1.3.x, memory mapped I/O is used rather than normal I/O.  Memory
187 mapped I/O seems to work fine on most hardware configurations, but
188 some poorly designed motherboards may break this feature.
190 The configuration option CONFIG_SCSI_NCR53C8XX_IOMAPPED forces the
191 driver to use normal I/O in all cases.
194 5. Tagged command queueing
196 Queuing more than 1 command at a time to a device allows it to perform 
197 optimizations based on actual head positions and its mechanical 
198 characteristics. This feature may also reduce average command latency.
199 In order to really gain advantage of this feature, devices must have 
200 a reasonnable cache size (No miracle is to be expected for a low-end 
201 hard disk with 128 KB or less).
202 Some kown SCSI devices do not properly support tagged command queuing.
203 Generally, firmware revisions that fix this kind of problems are available 
204 at respective vendor web/ftp sites.
205 All I can say is that the hard disks I use on my machines behave well with 
206 this driver with tagged command queuing enabled:
208 - IBM S12 0662
209 - Conner 1080S
210 - Quantum Atlas I
211 - Quantum Atlas II
213 If your controller has NVRAM, you can configure this feature per target 
214 from the user setup tool. The Tekram Setup program allows to tune the 
215 maximum number of queued commands up to 32. The Symbios Setup only allows 
216 to enable or disable this feature.
218 The maximum number of simultaneous tagged commands queued to a device
219 is currently set to 8 by default.  This value is suitable for most SCSI
220 disks.  With large SCSI disks (>= 2GB, cache >= 512KB, average seek time
221 <= 10 ms), using a larger value may give better performances.
222 The driver supports up to 64 commands per device, but using more than 
223 32 is generally not worth it, unless you are using a very large disk 
224 or disk array.
226 If your controller does not have NVRAM or if it is managed by the SDMS 
227 BIOS/SETUP, you can configure tagged queueing feature and device queue 
228 depths from the boot command-line. For example:
230   ncr53c8xx=tags:4/t2t3q15-t4q7/t1u0q32
232 will set tagged commands queue depths as follow:
234 - target 2  all luns  on controller 0 --> 15
235 - target 3  all luns  on controller 0 --> 15
236 - target 4  all luns  on controller 0 -->  7
237 - target 1  lun 0     on controller 1 --> 32
238 - all other target/lun                -->  4
240 In some special conditions, some SCSI disk firmwares may return a
241 QUEUE FULL status for a SCSI command. This behaviour is managed by the
242 driver using the following heuristic:
244 - Each time a QUEUE FULL status is returned, tagged queue depth is reduced 
245   to the actual number of disconnected commands. 
247 - Every 1000 successfully completed SCSI commands, if allowed by the
248   current limit, the maximum number of queueable commands is incremented.
250 Since QUEUE FULL status reception and handling is resource wasting, the 
251 driver notifies by default this problem to user by indicating the actual 
252 number of commands used and their status, as well as its decision on the 
253 device queue depth change.
254 The heuristic used by the driver in handling QUEUE FULL ensures that the 
255 impact on performances is not too bad. You can get rid of the messages by 
256 setting verbose level to zero, as follow:
258 1st method: boot your system using 'ncr53c8xx=verb:0' option.
259 2nd method: apply "setverbose 0" control command to the proc fs entry 
260             corresponding to your controller after boot-up.
262 6. Parity checking
264 The driver supports SCSI parity checking and PCI bus master parity
265 checking.  These features must be enabled in order to ensure safe data
266 transfers.  However, some flawed devices or mother boards will have
267 problems with parity. You can disable either PCI parity or SCSI parity 
268 checking by entering appropriate options from the boot command line.
269 (See 10: Boot setup commands).
271 7. Profiling information
273 Profiling information is available through the proc SCSI file system.
274 Since gathering profiling information may impact performances, this 
275 feature is disabled by default and requires a compilation configuration 
276 option to be set to Y.
278 The device associated with a host has the following pathname:
280           /proc/scsi/ncr53c8xx/N     (N=0,1,2 ....)
282 Generally, only 1 board is used on hardware configuration, and that device is:
283           /proc/scsi/ncr53c8xx/0
285 However, if the driver has been made as module, the number of the
286 hosts is incremented each time the driver is loaded.
288 In order to display profiling information, just enter:
290          cat /proc/scsi/ncr53c8xx/0
292 and you will get something like the following text:
294 -------------------------------------------------------
295 General information:
296   Chip NCR53C810, device id 0x1, revision id 0x2
297   IO port address 0x6000, IRQ number 10
298   Using memory mapped IO at virtual address 0x282c000
299   Synchronous transfer period 25, max commands per lun 4
300 Profiling information:
301   num_trans    = 18014
302   num_kbytes   = 671314
303   num_disc     = 25763
304   num_break    = 1673
305   num_int      = 1685
306   num_fly      = 18038
307   ms_setup     = 4940
308   ms_data      = 369940
309   ms_disc      = 183090
310   ms_post      = 1320
311 -------------------------------------------------------
313 General information is easy to understand. The device ID and the
314 revision ID identify the SCSI chip as follows:
316 Chip    Device id     Revision Id
317 ----    ---------     -----------
318 810       0x1            <  0x10
319 810A      0x1            >= 0x10
320 815       0x4
321 825       0x3            <  0x10
322 860       0x6
323 825A      0x3            >= 0x10
324 875       0xf
325 895       0xc
327 The profiling information is updated upon completion of SCSI commands.
328 A data structure is allocated and zeroed when the host adapter is
329 attached. So, if the driver is a module, the profile counters are
330 cleared each time the driver is loaded.  The "clearprof" command
331 allows you to clear these counters at any time.
333 The following counters are available:
335 ("num" prefix means "number of",
336 "ms" means milli-seconds)
338 num_trans
339         Number of completed commands
340         Example above: 18014 completed commands
342 num_kbytes
343         Number of kbytes transferred
344         Example above: 671 MB transferred
346 num_disc
347         Number of SCSI disconnections
348         Example above: 25763 SCSI disconnections
350 num_break
351         number of script interruptions (phase mismatch)
352         Example above: 1673 script interruptions
354 num_int
355         Number of interrupts other than "on the fly"
356         Example above: 1685 interruptions not "on the fly"
358 num_fly
359         Number of interrupts "on the fly"
360         Example above: 18038 interruptions "on the fly"
362 ms_setup
363         Elapsed time for SCSI commands setups
364         Example above: 4.94 seconds
366 ms_data
367         Elapsed time for data transfers
368         Example above: 369.94 seconds spent for data transfer
370 ms_disc
371         Elapsed time for SCSI disconnections
372         Example above: 183.09 seconds spent disconnected
374 ms_post
375         Elapsed time for command post processing
376         (time from SCSI status get to command completion call)
377         Example above: 1.32 seconds spent for post processing
379 Due to the 1/100 second tick of the system clock, "ms_post" time may
380 be wrong.
382 In the example above, we got 18038 interrupts "on the fly" and only
383 1673 script breaks generally due to disconnections inside a segment 
384 of the scatter list.
387 8. Control commands
389 Control commands can be sent to the driver with write operations to
390 the proc SCSI file system. The generic command syntax is the
391 following:
393       echo "<verb> <parameters>" >/proc/scsi/ncr53c8xx/0
394       (assumes controller number is 0)
396 Using "all" for "<target>" parameter with the commands below will
397 apply to all targets of the SCSI chain (except the controller).
399 Available commands:
401 8.1 Set minimum synchronous period factor
403     setsync <target> <period factor>
405     target:    target number
406     period:    minimum synchronous period.
407                Maximum speed = 1000/(4*period factor) except for special
408                cases below.
410     Specify a period of 255, to force asynchronous transfer mode.
412       10 means 25 nano-seconds synchronous period
413       11 means 30 nano-seconds synchronous period
414       12 means 50 nano-seconds synchronous period
416 8.2 Set wide size
418     setwide <target> <size>
420     target:    target number
421     size:      0=8 bits, 1=16bits
423 8.3 Set maximum number of concurrent tagged commands
425     settags <target> <tags>
427     target:    target number
428     tags:      number of concurrent tagged commands
429                must not be greater than SCSI_NCR_MAX_TAGS (default: 8)
431 8.4 Set order type for tagged command
433     setorder <order>
435     order:     3 possible values:
436                simple: use SIMPLE TAG for all operations (read and write)
437                ordered: use ORDERED TAG for all operations
438                default: use default tag type,
439                         SIMPLE  TAG for read  operations
440                         ORDERED TAG for write operations
443 8.5 Set debug mode
445     setdebug <list of debug flags>
447     Available debug flags:
448         alloc:   print info about memory allocations (ccb, lcb)
449         queue:   print info about insertions into the command start queue
450         result:  print sense data on CHECK CONDITION status
451         scatter: print info about the scatter process
452         scripts: print info about the script binding process
453         tiny:    print minimal debugging information
454         timing:  print timing information of the NCR chip
455         nego:    print information about SCSI negotiations
456         phase:   print information on script interruptions
458     Use "setdebug" with no argument to reset debug flags.
461 8.6 Clear profile counters
463     clearprof
465     The profile counters are automatically cleared when the amount of
466     data transfered reaches 1000 GB in order to avoid overflow.
467     The "clearprof" command allows you to clear these counters at any time.
470 8.7 Set flag (no_disc)
472     setflag <target> <flag>
474     target:    target number
476     For the moment, only one flag is available:
478         no_disc:   not allow target to disconnect.
480     Do not specify any flag in order to reset the flag. For example:
481     - setflag 4
482       will reset no_disc flag for target 4, so will allow it disconnections.
483     - setflag all
484       will allow disconnection for all devices on the SCSI bus.
487 8.8 Set verbose level
489     setverbose #level
491     The driver default verbose level is 1. This command allows to change 
492     th driver verbose level after boot-up.
494 9. Configuration parameters
496 If the firmware of all your devices is perfect enough, all the
497 features supported by the driver can be enabled at start-up.  However,
498 if only one has a flaw for some SCSI feature, you can disable the
499 support by the driver of this feature at linux start-up and enable
500 this feature after boot-up only for devices that support it safely.
502 CONFIG_SCSI_NCR53C8XX_PROFILE_SUPPORT  (default answer: n)
503     This option must be set for profiling information to be gathered 
504     and printed out through the proc file system. This features may 
505     impact performances.
507 CONFIG_SCSI_NCR53C8XX_IOMAPPED       (default answer: n)
508     Answer "y" if you suspect your mother board to not allow memory mapped I/O.
509     May slow down performance a little.  This option is required by
510     Linux/PPC and is used no matter what you select here.  Linux/PPC
511     suffers no performance loss with this option since all IO is memory
512     mapped anyway.
514 CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS    (default answer: 8)
515     Default tagged command queue depth.
517 CONFIG_SCSI_NCR53C8XX_MAX_TAGS         (default answer: 8)
518     This option allows you to specify the maximum number of tagged commands 
519     that can be queued to a device. The maximum supported value is 32.
521 CONFIG_SCSI_NCR53C8XX_SYNC            (default answer: 5)
522     This option allows you to specify the frequency in MHz the driver 
523     will use at boot time for synchronous data transfer negotiations.
524     This frequency can be changed later with the "setsync" control command.
525     0 means "asynchronous data transfers".
527 CONFIG_SCSI_NCR53C8XX_FORCE_SYNC_NEGO (default answer: n)
528     Force synchronous negotiation for all SCSI-2 devices.
529     Some SCSI-2 devices do not report this feature in byte 7 of inquiry 
530     response but do support it properly (TAMARACK scanners for example).
532 CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT   (default and only reasonnable answer: n)
533     If you suspect a device of yours does not properly support disconnections,
534     you can answer "y". Then, all SCSI devices will never disconnect the bus 
535     even while performing long SCSI operations.
537 CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT
538     Genuine SYMBIOS boards use GPIO0 in output for controller LED and GPIO3 
539     bit as a flag indicating singled-ended/differential interface.
540     If all the boards of your system are genuine SYMBIOS boards or use
541     BIOS and drivers from SYMBIOS, you would want to enable this option.
542     This option must NOT be enabled if your system has at least one 53C8XX 
543     based scsi board with a vendor-specific BIOS.
544     For example, Tekram DC-390/U, DC-390/W and DC-390/F scsi controllers 
545     use a vendor-specific BIOS and are known to not use SYMBIOS compatible 
546     GPIO wiring. So, this option must not be enabled if your system has 
547     such a board installed.
549 CONFIG_SCSI_NCR53C8XX_NVRAM_DETECT
550     Enable support for reading the serial NVRAM data on Symbios and
551     some Symbios compatible cards, and Tekram DC390W/U/F cards. Useful for
552     systems with more than one Symbios compatible controller where at least
553     one has a serial NVRAM, or for a system with a mixture of Symbios and
554     Tekram cards. Enables setting the boot order of host adaptors
555     to something other than the default order or "reverse probe" order. 
556     Also enables Symbios and Tekram cards to be distinguished so
557     CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT may be set in a system with a
558     mixture of Symbios and Tekram cards so the Symbios cards can make use of
559     the full range of Symbios features, differential, led pin, without
560     causing problems for the Tekram card(s).
562 10. Boot setup commands
564 10.1 Syntax
566 Setup commands can be passed to the driver either at boot time or as a 
567 string variable using 'insmod'.
569 A boot setup command for the ncr53c8xx driver begins with the driver name 
570 "ncr53c8xx=". The kernel syntax parser then expects an optionnal list of
571 integers separated with comma followed by an optionnal list of  comma- 
572 separated strings. Example of boot setup command under lilo prompt:
574 lilo: linux root=/dev/hda2 ncr53c8xx=tags:4,sync:10,debug:0x200
576 - enable tagged commands, up to 4 tagged commands queued.
577 - set synchronous negotiation speed to 10 Mega-transfers / second.
578 - set DEBUG_NEGO flag.
580 Since comma seems not to be allowed when defining a string variable using  
581 'insmod', the driver also accepts <space> as option separator. 
582 The following command will install driver module with the same options as 
583 above.
585 insmod ncr53c8xx.o ncr53c8xx="tags:4 sync:10 debug:0x200"
587 For the moment, the integer list of arguments is discarded by the driver. 
588 It will be used in the future in order to allow a per controller setup.
590 Each string argument must be specified as "keyword:value". Only lower-case 
591 characters and digits are allowed.
593 10.2 Available arguments
595 Master parity checking
596       mpar:y     enabled
597       mpar:n     disabled
599 Scsi parity checking
600       spar:y     enabled
601       spar:n     disabled
603 Scsi disconnections
604       disc:y     enabled
605       disc:n     disabled
607 Special features
608    Only apply to 810A, 825A, 860, 875 and 895 controllers.
609    Have no effect with other ones.
610       specf:y    (or 1) enabled
611       specf:n    (or 0) disabled
612       specf:3           enabled except Memory Write And Invalidate
613    The default driver setup is 'specf:3'. As a consequence, option 'specf:y' 
614    must be specified in the boot setup command to enable Memory Write And 
615    Invalidate.
617 Ultra SCSI support
618    Only apply to 860, 875 and 895 controllers.
619    Have no effect with other ones.
620       ultra:2    Ultra2 enabled
621       ultra:1    Ultra enabled
622       ultra:n    disabled
624 Default number of tagged commands
625       tags:0     (or tags:1 ) tagged command queuing disabled
626       tags:#tags (#tags  > 1) tagged command queuing enabled
627   #tags will be truncated to the max queued commands configuration parameter.
628   This option also allows to specify a command queue depth for each device 
629   that support tagged command queueing.
630   Example:
631       ncr53c8xx=tags:10/t2t3q16-t5q24/t1u2q32
632                will set devices queue depth as follow:
633       - controller #0 target #2 and target #3                  -> 16 commands,
634       - controller #0 target #5                                -> 24 commands,
635       - controller #1 target #1 logical unit #2                -> 32 commands,
636       - all other logical units (all targets, all controllers) -> 10 commands.
638 Default synchronous period factor
639       sync:255     disabled (asynchronous transfer mode)
640       sync:#factor
641   #factor = 10     Ultra-2 SCSI 40 Mega-transfers / second
642   #factor = 11     Ultra-2 SCSI 33 Mega-transfers / second
643   #factor < 25     Ultra   SCSI 20 Mega-transfers / second
644   #factor < 50     Fast    SCSI-2
646   In all cases, the driver will use the minimum transfer period supported by 
647   controllers according to NCR53C8XX chip type.
649 Negotiate synchronous with all devices
650   (force sync nego)
651       fsn:y      enabled
652       fsn:n      disabled
654 Verbosity level
655       verb:0     minimal
656       verb:1     normal
657       verb:2     too much
659 Debug mode
660       debug:0    clear debug flags
661       debug:#x   set debug flags
662   #x is an integer value combining the following power-of-2 values:
663   DEBUG_ALLOC       0x1
664   DEBUG_PHASE       0x2
665   DEBUG_POLL        0x4
666   DEBUG_QUEUE       0x8
667   DEBUG_RESULT     0x10
668   DEBUG_SCATTER    0x20
669   DEBUG_SCRIPT     0x40
670   DEBUG_TINY       0x80
671   DEBUG_TIMING    0x100
672   DEBUG_NEGO      0x200
673   DEBUG_TAGS      0x400
674   DEBUG_FREEZE    0x800
675   DEBUG_RESTART  0x1000
677   You can play safely with DEBUG_NEGO. However, some of these flags may 
678   generate bunches of syslog messages. 
680 Burst max
681       burst:0    burst disabled
682       burst:255  get burst length from initial IO register settings.
683       burst:#x   burst enabled (1<<#x burst transfers max)
684   #x is an integer value which is log base 2 of the burst transfers max.
685   The NCR53C875 and NCR53C825A support up to 128 burst transfers (#x = 7).
686   Other chips only support up to 16 (#x = 4).
687   This is a maximum value. The driver set the burst length according to chip 
688   and revision ids. By default the driver uses the maximum value supported 
689   by the chip.
691 LED support
692      led:1      enable  LED support
693      led:0      disable LED support
694   Donnot enable LED support if your scsi board does not use SDMS BIOS.
695   (See 'Configuration parameters')
697 Max wide
698     wide:1      wide scsi enabled
699     wide:0      wide scsi disabled
700   Some scsi boards use a 875 (ultra wide) and only supply narrow connectors.
701   If you have connected a wide device with a 50 pins to 68 pins cable 
702   converter, any accepted wide negotiation will break further data transfers.
703   In such a case, using "wide:0" in the bootup command will be helpfull. 
705 Differential mode
706     diff:0      never set up diff mode
707     diff:1      set up diff mode if BIOS set it
708     diff:2      always set up diff mode
709     diff:3      set diff mode if GPIO3 is not set
711 IRQ mode
712     irqm:0      always open drain
713     irqm:1      same as initial settings (assumed BIOS settings)
714     irqm:2      always totem pole
715     irqm:0x10   driver will not use SA_SHIRQ flag when requesting irq
716     irqm:0x20   driver will not use SA_INTERRUPT flag when requesting irq
718     (Bits 0x10 and 0x20 can be combined with hardware irq mode option)
720 Reverse probe
721     revprob:n   probe chip ids from the PCI configuration in this order:
722                 810, 815, 820, 860, 875, 885, 895, 896
723     revprob:y   probe chip ids in the reverse order.
725 Fix up PCI configuration space
726     pcifix:<option bits>
728     Available option bits:
729         0x0:   No attempt to fix PCI configuration space registers values.
730         0x1:   Set PCI cache-line size register if not set.
731         0x2:   Set write and invalidate bit in PCI command register.
732         0x4:   Increase if necessary PCI latency timer according to burst max.
734     Use 'pcifix:7' in order to allow the driver to fix up all PCI features.
736 Serial NVRAM
737     nvram:n     do not look for serial NVRAM
738     nvram:y     test controllers for onboard serial NVRAM
740 Check SCSI BUS 
741     buschk:<option bits>
743     Available option bits:
744         0x0:   No check.
745         0x1:   Check and donnot attach the controller on error.  
746         0x2:   Check and just warn on error.
748 Exclude hosts from being attached
749     excl=<io_address>
751     Prevent host at a given io address from being attached.
752     For example 'ncr53c8xx=excl:0xb400,excl:0xc000' indicate to the 
753     ncr53c8xx driver not to attach hosts at address 0xb400 and 0xc000.
755 Boot fail safe
756     safe:y      load the following assumed fail safe initial setup
758   master parity                 disabled                mpar:n
759   scsi parity                   enabled                 spar:y
760   disconnections                not allowed             disc:n
761   special features              disabled                specf:n
762   ultra scsi                    disabled                ultra:n
763   force sync negotiation        disabled                fsn:n
764   reverse probe                 disabled                revprob:n
765   PCI fix up                    disabled                pcifix:0
766   serial NVRAM                  enabled                 nvram:y
767   verbosity level               2                       verb:2
768   tagged command queuing        disabled                tags:0
769   synchronous negotiation       disabled                sync:255
770   debug flags                   none                    debug:0
771   burst length                  from BIOS settings      burst:255
772   LED support                   disabled                led:0
773   wide support                  disabled                wide:0
774   settle time                   10 seconds              settle:10
775   differential support          from BIOS settings      diff:1
776   irq mode                      from BIOS settings      irqm:1
777   SCSI BUS check                donnot attach on error  buschk:1
779 10.3 Advised boot setup commands
781 If the driver has been configured with default options, the equivalent 
782 boot setup is:
784    ncr53c8xx=mpar:y,spar:y,disc:y,specf:3,fsn:n,ultra:2,fsn:n,revprob:n,verb:1\
785              tags:0,sync:50,debug:0,burst:7,led:0,wide:1,settle:2,diff:0,irqm:0
787 For an installation diskette or a safe but not fast system,
788 boot setup can be:
790     ncr53c8xx=safe:y,mpar:y,disc:y
791     ncr53c8xx=safe:y,disc:y
792     ncr53c8xx=safe:y,mpar:y
793     ncr53c8xx=safe:y
795 My personnal system works flawlessly with the following equivalent setup:
797    ncr53c8xx=mpar:y,spar:y,disc:y,specf:1,fsn:n,ultra:2,fsn:n,revprob:n,verb:1\
798              tags:32,sync:12,debug:0,burst:7,led:1,wide:1,settle:2,diff:0,irqm:0
800 The driver prints its actual setup when verbosity level is 2. You can try 
801 "ncr53c8xx=verb:2" to get the "static" setup of the driver, or add "verb:2" 
802 to your boot setup command in order to check the actual setup the driver is 
803 using.
805 10.4 PCI configuration fix-up boot option
807 pcifix:<option bits>
809 Available option bits:
810     0x1:     Set PCI cache-line size register if not set.
811     0x2:     Set write and invalidate bit in PCI command register.
813 Use 'pcifix:3' in order to allow the driver to fix both PCI features.
815 These options only apply to new SYMBIOS chips 810A, 825A, 860, 875 
816 and 895 and are only supported for Pentium and 486 class processors.
817 Recent SYMBIOS 53C8XX scsi processors are able to use PCI read multiple 
818 and PCI write and invalidate commands. These features require the 
819 cache line size register to be properly set in the PCI configuration 
820 space of the chips. On the other hand, chips will use PCI write and 
821 invalidate commands only if the corresponding bit is set to 1 in the 
822 PCI command register.
824 Not all PCI bioses set the PCI cache line register and the PCI write and 
825 invalidate bit in the PCI configuration space of 53C8XX chips.
826 Optimized PCI accesses may be broken for some PCI/memory controllers or 
827 make problems with some PCI boards.
829 This fix-up worked flawlessly on my previous system.
830 (MB Triton HX / 53C875 / 53C810A)
831 I use these options at my own risks as you will do if you decide to 
832 use them too.
835 10.5 Serial NVRAM support boot option
837 nvram:n     do not look for serial NVRAM
838 nvram:y     test controllers for onboard serial NVRAM
840 This option is described below (see 17. Serial NVRAM support).
841 When this option is enabled, the driver tries to detect all boards using 
842 a Serial NVRAM. This memory is used to hold user set up parameters.
844 The parameters the driver is able to get from the NVRAM depend on the 
845 data format used, as follow:
847                                  Tekram format      Symbios format
848 General and host parameters
849     Boot order                         N                   Y
850     Host SCSI ID                       Y                   Y
851     SCSI parity checking               Y                   Y
852     Verbose boot messages              N                   Y
853 SCSI devices parameters
854     Synchronous transfer speed         Y                   Y
855     Wide 16 / Narrow                   Y                   Y
856     Tagged Command Queuing enabled     Y                   Y
857     Disconnections enabled             Y                   Y
858     Scan at boot time                  N                   Y
860 In order to speed up the system boot, for each device configured without 
861 the "scan at boot time" option, the driver forces an error on the 
862 first TEST UNIT READY command received for this device.
864 Some SDMS BIOS revisions seem to be unable to boot cleanly with very fast 
865 hard disks. In such a situation you cannot configure the NVRAM with 
866 optimized parameters value.
868 The 'nvram' boot option can be entered in hexadecimal form in order 
869 to ignore some options configured in the NVRAM, as follow:
871 mvram=<bits options>
872       0x01   look for NVRAM  (equivalent to nvram=y)
873       0x02   ignore NVRAM "Synchronous negotiation" parameters for all devices
874       0x04   ignore NVRAM "Wide negotiation"  parameter for all devices
875       0x08   ignore NVRAM "Scan at boot time" parameter for all devices
877 My Atlas Wide only boots cleanly in 8 bits asynchronous data transfer 
878 mode. However, it works flawlessly at 20 MB/second with the driver.
879 Using "nvram=0x7" allows me to boot in 8 bits/async and to let the driver 
880 use its setup for synchronous and wide negotiations.
883 10.6 SCSI BUS checking boot option.
885 When this option is set to a non-zero value, the driver checks SCSI lines 
886 logic state, 100 micro-seconds after having asserted the SCSI RESET line.
887 The driver just reads SCSI lines and checks all lines read FALSE except RESET.
888 Since SCSI devices shall release the BUS at most 800 nano-seconds after SCSI 
889 RESET has been asserted, any signal to TRUE may indicate a SCSI BUS problem.
890 Unfortunately, the following common SCSI BUS problems are not detected:
891 - Only 1 terminator installed.
892 - Misplaced terminators.
893 - Bad quality terminators.
894 On the other hand, either bad cabling, broken devices, not conformant 
895 devices, ... may cause a SCSI signal to be wrong when te driver reads it.
898 11. Some constants and flags of the ncr53c8xx.h header file
900 Some of these are defined from the configuration parameters.  To
901 change other "defines", you must edit the header file.  Do that only
902 if you know what you are doing.
904 SCSI_NCR_SETUP_SPECIAL_FEATURES (default: defined)
905         If defined, the driver will enable some special features according  
906         to chip and revision id.
907         For 810A, 860, 825A, 875 and 895 scsi chips, this option enables 
908         support of features that reduce load of PCI bus and memory accesses 
909         during  scsi transfer processing: burst op-code fetch, read multiple, 
910         read line, prefetch, cache line, write and invalidate, 
911         burst 128 (875 only), large dma fifo (875 only), offset 16 (875 only).
912         Can be changed by the following boot setup command:
913                 ncr53c8xx=specf:n
915 SCSI_NCR_IOMAPPED               (default: not defined)
916         If defined, normal I/O is forced.
918 SCSI_NCR_SHARE_IRQ              (default: defined)
919         If defined, request shared IRQ.
920         
921 SCSI_NCR_MAX_TAGS               (default: 8)
922         Maximum number of simultaneous tagged commands to a device.
923         Can be changed by "settags <target> <maxtags>"
925 SCSI_NCR_SETUP_DEFAULT_SYNC     (default: 50)
926         Transfer period factor the driver will use at boot time for synchronous 
927         negotiation. 0 means asynchronous.
928         Can be changed by "setsync <target> <period factor>"
930 SCSI_NCR_SETUP_DEFAULT_TAGS     (default: 8)
931         Default number of simultaneous tagged commands to a device.
932         < 1 means tagged command queuing disabled at start-up.
934 SCSI_NCR_ALWAYS_SIMPLE_TAG      (default: defined)
935         Use SIMPLE TAG for read and write commands.
936         Can be changed by "setorder <ordered|simple|default>"
938 SCSI_NCR_SETUP_DISCONNECTION    (default: defined)
939         If defined, targets are allowed to disconnect.
941 SCSI_NCR_SETUP_FORCE_SYNC_NEGO  (default: not defined)
942         If defined, synchronous negotiation is tried for all SCSI-2 devices.
943         Can be changed by "setsync <target> <period>"
945 SCSI_NCR_SETUP_MASTER_PARITY    (default: defined)
946         If defined, master parity checking is enabled.
948 SCSI_NCR_SETUP_MASTER_PARITY    (default: defined)
949         If defined, SCSI parity checking is enabled.
951 SCSI_NCR_PROFILE_SUPPORT        (default: not defined)
952         If defined, profiling information is gathered.
954 SCSI_NCR_MAX_SCATTER            (default: 128)
955         Scatter list size of the driver ccb.
957 SCSI_NCR_MAX_TARGET             (default: 16)
958         Max number of targets per host.
960 SCSI_NCR_MAX_HOST               (default: 2)
961         Max number of host controllers.
963 SCSI_NCR_SETTLE_TIME            (default: 2)
964         Number of seconds the driver will wait after reset.
966 SCSI_NCR_TIMEOUT_ALERT          (default: 3)
967         If a pending command will time out after this amount of seconds,
968         an ordered tag is used for the next command.
969         Avoids timeouts for unordered tagged commands.
971 SCSI_NCR_CAN_QUEUE              (default: 7*SCSI_NCR_MAX_TAGS)
972         Max number of commands that can be queued to a host.
974 SCSI_NCR_CMD_PER_LUN            (default: SCSI_NCR_MAX_TAGS)
975         Max number of commands queued to a host for a device.
977 SCSI_NCR_SG_TABLESIZE           (default: SCSI_NCR_MAX_SCATTER-1)
978         Max size of the Linux scatter/gather list.
980 SCSI_NCR_MAX_LUN        (default: 8)
981         Max number of LUNs per target.
984 12. Installation
986 This driver is part of the linux kernel distribution.
987 Driver files are located in the sub-directory "drivers/scsi" of the 
988 kernel source tree.
990 Driver files:
992         README.ncr53c8xx        : this file
993         ChangeLog.ncr53c8xx     : change log
994         ncr53c8xx.h             : definitions
995         ncr53c8xx.c             : the driver code
997 New driver versions are made available separately in order to allow testing 
998 changes and new features prior to including them into the linux kernel 
999 distribution. The following URL provides informations on latest avalaible 
1000 patches: 
1002       ftp://ftp.tux.org/pub/people/gerard-roudier/README
1005 13. Architecture dependent features.
1007 <Not yet written>
1010 14. Known problems
1012 14.1 Tagged commands with Iomega Jaz device
1014 I have not tried this device, however it has been reported to me the
1015 following: This device is capable of Tagged command queuing. However
1016 while spinning up, it rejects Tagged commands. This behaviour is
1017 conforms to 6.8.2 of SCSI-2 specifications. The current behaviour of
1018 the driver in that situation is not satisfying. So do not enable
1019 Tagged command queuing for devices that are able to spin down.  The
1020 other problem that may appear is timeouts. The only way to avoid
1021 timeouts seems to edit linux/drivers/scsi/sd.c and to increase the
1022 current timeout values.
1024 14.2 Device names change when another controller is added.
1026 When you add a new NCR53C8XX chip based controller to a system that already 
1027 has one or more controllers of this family, it may happen that the order 
1028 the driver registers them to the kernel causes problems due to device 
1029 name changes.
1030 When at least one controller uses NvRAM, SDMS BIOS version 4 allows you to 
1031 define the order the BIOS will scan the scsi boards. The driver attaches 
1032 controllers according to BIOS information if NvRAM detect option is set.
1034 If your controllers do not have NvRAM, you can:
1036 - Ask the driver to probe chip ids in reverse order from the boot command
1037   line: ncr53c8xx=revprob:y
1038 - Make appropriate changes in the fstab.
1039 - Use the 'scsidev' tool from Eric Youngdale.
1041 14.3 Using only 8 bit devices with a WIDE SCSI controller.
1043 When only 8 bit NARROW devices are connected to a 16 bit WIDE SCSI controller, 
1044 you must ensure that lines of the wide part of the SCSI BUS are pulled-up.
1045 This can be achieved by ENABLING the WIDE TERMINATOR portion of the SCSI 
1046 controller card.
1047 The TYAN 1365 documentation revision 1.2 is not correct about such settings.
1048 (page 10, figure 3.3).
1050 14.4 Possible data corruption during a Memory Write and Invalidate
1052 This problem is described in SYMBIOS DEL 397, Part Number 69-039241, ITEM 4.
1054 In some complex situations, 53C875 chips revision <= 3 may start a PCI 
1055 Write and Invalidate Command at a not cache-line-aligned 4 DWORDS boundary.
1056 This is only possible when Cache Line Size is 8 DWORDS or greater.
1057 Pentium systems use a 8 DWORDS cache line size and so are concerned by 
1058 this chip bug, unlike i486 systems that use a 4 DWORDS cache line size.
1060 When this situation occurs, the chip may complete the Write and Invalidate 
1061 command after having only filled part of the last cache line involved in 
1062 the transfer, leaving to data corruption the remainder of this cache line.
1064 Not using Write And Invalidate obviously gets rid of this chip bug, and so 
1065 it is now the default setting of the driver.
1066 However, for people like me who want to enable this feature, I have added 
1067 part of a work-around suggested by SYMBIOS. This work-around resets the 
1068 addressing logic when the DATA IN phase is entered and so prevents the bug 
1069 from being triggered for the first SCSI MOVE of the phase. This work-around 
1070 should be enough according to the following:
1072 The only driver internal data structure that is greater than 8 DWORDS  and 
1073 that is moved by the SCRIPTS processor is the 'CCB header' that contains 
1074 the context of the SCSI transfer. This data structure is aligned on 8 DWORDS 
1075 boundary (Pentium Cache Line Size), and so is immune to this chip bug, at 
1076 least on Pentium systems.
1077 But the conditions of this bug can be met when a SCSI read command is 
1078 performed using a buffer that is 4 DWORDS but not cache-line aligned.
1079 This cannot happen under Linux when scatter/gather lists are used since 
1080 they only refer to system buffers that are well aligned. So, a work around 
1081 may only be needed under Linux when a scatter/gather list is not used and 
1082 when the SCSI DATA IN phase is reentered after a phase mismatch.
1084 14.5 IRQ sharing problems
1086 When an IRQ is shared by devices that are handled by different drivers, it 
1087 may happen that one driver complains about the request of the IRQ having 
1088 failed. Inder Linux-2.0, this may be due to one driver having requested the 
1089 IRQ using the SA_INTERRUPT flag but some other having requested the same IRQ 
1090 without this flag. Under both Linux-2.0 and linux-2.2, this may be caused by 
1091 one driver not having requested the IRQ with the SA_SHIRQ flag.
1093 By default, the ncr53c8xx and sym53c8xx drivers request IRQs with both the 
1094 SA_INTERRUPT and the SA_SHIRQ flag under Linux-2.0 and with only the SA_SHIRQ 
1095 flag under Linux-2.2.
1097 Under Linux-2.0, you can disable use of SA_INTERRUPT flag from the boot 
1098 command line by using the following option:
1100      ncr53c8xx=irqm:0x20   (for the generic ncr53c8xx driver)
1101      sym53c8xx=irqm:0x20   (for the sym53c8xx driver)
1103 If this does not fix the problem, then you may want to check how all other 
1104 drivers are requesting the IRQ and report the problem. Note that if at least 
1105 a single driver does not request the IRQ with the SA_SHIRQ flag (share IRQ), 
1106 then the request of the IRQ obviously will not succeed for all the drivers.
1108 15. SCSI problem troubleshooting
1110 Most SCSI problems are due to a non conformant SCSI bus or to buggy
1111 devices.  If infortunately you have SCSI problems, you can check the
1112 following things:
1114 - SCSI bus cables
1115 - terminations at both end of the SCSI chain
1116 - linux syslog messages (some of them may help you)
1118 If you donnot find the source of problems, you can configure the
1119 driver with no features enabled.
1121 - only asynchronous data transfers
1122 - tagged commands disabled
1123 - disconnections not allowed
1125 Now, if your SCSI bus is ok, your system have every chance to work
1126 with this safe configuration but performances will not be optimal.
1128 If it still fails, then you can send your problem description to
1129 appropriate mailing lists or news-groups.  Send me a copy in order to
1130 be sure I will receive it.  Obviously, a bug in the driver code is
1131 possible.
1133      My email address: Gerard Roudier <groudier@club-internet.fr>
1135 Allowing disconnections is important if you use several devices on
1136 your SCSI bus but often causes problems with buggy devices.
1137 Synchronous data transfers increases throughput of fast devices like
1138 hard disks.  Good SCSI hard disks with a large cache gain advantage of
1139 tagged commands queuing.
1141 Try to enable one feature at a time with control commands.  For example:
1143 - echo "setsync all 25" >/proc/scsi/ncr53c8xx/0
1144   Will enable fast synchronous data transfer negotiation for all targets.
1146 - echo "setflag 3" >/proc/scsi/ncr53c8xx/0
1147   Will reset flags (no_disc) for target 3, and so will allow it to disconnect 
1148   the SCSI Bus.
1150 - echo "settags 3 8" >/proc/scsi/ncr53c8xx/0
1151   Will enable tagged command queuing for target 3 if that device supports it.
1153 Once you have found the device and the feature that cause problems, just 
1154 disable that feature for that device.
1157 16. Synchonous transfer negotiation tables
1159 Tables below have been created by calling the routine the driver uses
1160 for synchronisation negotiation timing calculation and chip setting.
1161 The first table corresponds to Ultra chips 53875 and 53C860 with 80 MHz 
1162 clock and 5 clock divisors.
1163 The second one has been calculated by setting the scsi clock to 40 Mhz 
1164 and using 4 clock divisors and so applies to all NCR53C8XX chips in fast 
1165 SCSI-2 mode.
1167 Periods are in nano-seconds and speeds are in Mega-transfers per second.
1168 1 Mega-transfers/second means 1 MB/s with 8 bits SCSI and 2 MB/s with 
1169 Wide16 SCSI.
1171 16.1 Synchronous timings for 53C895, 53C875 and 53C860 SCSI controllers
1173  ----------------------------------------------
1174  Negotiated                     NCR settings
1175  Factor   Period   Speed        Period   Speed
1176  ------   ------   ------       ------   ------
1177  10       25       40.000       25       40.000   (53C895 only)
1178  11       30.2     33.112       31.25    32.000   (53C895 only)
1179  12       50       20.000       50       20.000
1180  13       52       19.230       62       16.000
1181  14       56       17.857       62       16.000
1182  15       60       16.666       62       16.000
1183  16       64       15.625       75       13.333
1184  17       68       14.705       75       13.333
1185  18       72       13.888       75       13.333
1186  19       76       13.157       87       11.428
1187  20       80       12.500       87       11.428
1188  21       84       11.904       87       11.428
1189  22       88       11.363       93       10.666
1190  23       92       10.869       93       10.666
1191  24       96       10.416      100       10.000
1192  25      100       10.000      100       10.000
1193  26      104        9.615      112        8.888
1194  27      108        9.259      112        8.888
1195  28      112        8.928      112        8.888
1196  29      116        8.620      125        8.000
1197  30      120        8.333      125        8.000
1198  31      124        8.064      125        8.000
1199  32      128        7.812      131        7.619
1200  33      132        7.575      150        6.666
1201  34      136        7.352      150        6.666
1202  35      140        7.142      150        6.666
1203  36      144        6.944      150        6.666
1204  37      148        6.756      150        6.666
1205  38      152        6.578      175        5.714
1206  39      156        6.410      175        5.714
1207  40      160        6.250      175        5.714
1208  41      164        6.097      175        5.714
1209  42      168        5.952      175        5.714
1210  43      172        5.813      175        5.714
1211  44      176        5.681      187        5.333
1212  45      180        5.555      187        5.333
1213  46      184        5.434      187        5.333
1214  47      188        5.319      200        5.000
1215  48      192        5.208      200        5.000
1216  49      196        5.102      200        5.000
1219 16.2 Synchronous timings for fast SCSI-2 53C8XX controllers
1221  ----------------------------------------------
1222  Negotiated                     NCR settings
1223  Factor   Period   Speed        Period   Speed
1224  ------   ------   ------       ------   ------
1225  25      100       10.000      100       10.000
1226  26      104        9.615      125        8.000
1227  27      108        9.259      125        8.000
1228  28      112        8.928      125        8.000
1229  29      116        8.620      125        8.000
1230  30      120        8.333      125        8.000
1231  31      124        8.064      125        8.000
1232  32      128        7.812      131        7.619
1233  33      132        7.575      150        6.666
1234  34      136        7.352      150        6.666
1235  35      140        7.142      150        6.666
1236  36      144        6.944      150        6.666
1237  37      148        6.756      150        6.666
1238  38      152        6.578      175        5.714
1239  39      156        6.410      175        5.714
1240  40      160        6.250      175        5.714
1241  41      164        6.097      175        5.714
1242  42      168        5.952      175        5.714
1243  43      172        5.813      175        5.714
1244  44      176        5.681      187        5.333
1245  45      180        5.555      187        5.333
1246  46      184        5.434      187        5.333
1247  47      188        5.319      200        5.000
1248  48      192        5.208      200        5.000
1249  49      196        5.102      200        5.000
1252 17. Serial NVRAM (added by Richard Waltham: dormouse@farsrobt.demon.co.uk)
1254 17.1 Features
1256 Enabling serial NVRAM support enables detection of the serial NVRAM included
1257 on Symbios and some Symbios compatible host adaptors, and Tekram boards. The 
1258 serial NVRAM is used by Symbios and Tekram to hold set up parameters for the 
1259 host adaptor and it's attached drives.
1261 The Symbios NVRAM also holds data on the boot order of host adaptors in a
1262 system with more than one host adaptor. This enables the order of scanning
1263 the cards for drives to be changed from the default used during host adaptor
1264 detection.
1266 This can be done to a limited extent at the moment using "reverse probe" but
1267 this only changes the order of detection of different types of cards. The
1268 NVRAM boot order settings can do this as well as change the order the same
1269 types of cards are scanned in, something "reverse probe" cannot do.
1271 Tekram boards using Symbios chips, DC390W/F/U, which have NVRAM are detected
1272 and this is used to distinguish between Symbios compatible and Tekram host 
1273 adaptors. This is used to disable the Symbios compatible "diff" setting
1274 incorrectly set on Tekram boards if the CONFIG_SCSI_53C8XX_SYMBIOS_COMPAT 
1275 configuration parameter is set enabling both Symbios and Tekram boards to be 
1276 used together with the Symbios cards using all their features, including
1277 "diff" support. ("led pin" support for Symbios compatible cards can remain
1278 enabled when using Tekram cards. It does nothing useful for Tekram host
1279 adaptors but does not cause problems either.)
1282 17.2 Symbios NVRAM layout
1284 typical data at NVRAM address 0x100 (53c810a NVRAM)
1285 -----------------------------------------------------------
1286 00 00
1287 64 01
1288 8e 0b
1290 00 30 00 00 00 00 07 00 00 00 00 00 00 00 07 04 10 04 00 00 
1292 04 00 0f 00 00 10 00 50 00 00 01 00 00 62 
1293 04 00 03 00 00 10 00 58 00 00 01 00 00 63 
1294 04 00 01 00 00 10 00 48 00 00 01 00 00 61 
1295 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
1297 0f 00 08 08 64 00 0a 00
1298 0f 00 08 08 64 00 0a 00 
1299 0f 00 08 08 64 00 0a 00 
1300 0f 00 08 08 64 00 0a 00 
1301 0f 00 08 08 64 00 0a 00 
1302 0f 00 08 08 64 00 0a 00 
1303 0f 00 08 08 64 00 0a 00 
1304 0f 00 08 08 64 00 0a 00 
1306 0f 00 08 08 64 00 0a 00 
1307 0f 00 08 08 64 00 0a 00 
1308 0f 00 08 08 64 00 0a 00 
1309 0f 00 08 08 64 00 0a 00 
1310 0f 00 08 08 64 00 0a 00 
1311 0f 00 08 08 64 00 0a 00 
1312 0f 00 08 08 64 00 0a 00 
1313 0f 00 08 08 64 00 0a 00 
1315 00 00 00 00 00 00 00 00 
1316 00 00 00 00 00 00 00 00 
1317 00 00 00 00 00 00 00 00 
1318 00 00 00 00 00 00 00 00 
1319 00 00 00 00 00 00 00 00 
1320 00 00 00 00 00 00 00 00 
1321 00 00 00 00 00 00 00 00 
1322 00 00 00 00 00 00 00 00 
1324 00 00 00 00 00 00 00 00 
1325 00 00 00 00 00 00 00 00 
1326 00 00 00 00 00 00 00 00 
1327 00 00 00 00 00 00 00 00 
1328 00 00 00 00 00 00 00 00 
1329 00 00 00 00 00 00 00 00 
1330 00 00 00 00 00 00 00 00 
1331 00 00 00 00 00 00 00 00 
1333 00 00 00 00 00 00 00 00 
1334 00 00 00 00 00 00 00 00 
1335 00 00 00 00 00 00 00 00 
1337 fe fe
1338 00 00
1339 00 00
1340 -----------------------------------------------------------
1341 NVRAM layout details
1343 NVRAM Address 0x000-0x0ff not used
1344               0x100-0x26f initialised data
1345               0x270-0x7ff not used
1347 general layout
1349         header  -   6 bytes,
1350         data    - 356 bytes (checksum is byte sum of this data)
1351         trailer -   6 bytes
1352                   ---
1353         total     368 bytes
1355 data area layout
1357         controller set up  -  20 bytes
1358         boot configuration -  56 bytes (4x14 bytes)
1359         device set up      - 128 bytes (16x8 bytes)
1360         unused (spare?)    - 152 bytes (19x8 bytes)
1361                              ---
1362         total                356 bytes
1364 -----------------------------------------------------------
1365 header
1367 00 00   - ?? start marker
1368 64 01   - byte count (lsb/msb excludes header/trailer)
1369 8e 0b   - checksum (lsb/msb excludes header/trailer)
1370 -----------------------------------------------------------
1371 controller set up
1373 00 30 00 00 00 00 07 00 00 00 00 00 00 00 07 04 10 04 00 00
1374                    |     |           |     |
1375                    |     |           |      -- host ID
1376                    |     |           |
1377                    |     |            --Removable Media Support
1378                    |     |               0x00 = none
1379                    |     |               0x01 = Bootable Device
1380                    |     |               0x02 = All with Media
1381                    |     |
1382                    |      --flag bits 2
1383                    |        0x00000001= scan order hi->low
1384                    |            (default 0x00 - scan low->hi)
1385                     --flag bits 1
1386                        0x00000001 scam enable
1387                        0x00000010 parity enable
1388                        0x00000100 verbose boot msgs
1390 remaining bytes unknown - they do not appear to change in my
1391 current set up for any of the controllers.
1393 default set up is identical for 53c810a and 53c875 NVRAM
1394 (Removable Media added Symbios BIOS version 4.09)
1395 -----------------------------------------------------------
1396 boot configuration
1398 boot order set by order of the devices in this table
1400 04 00 0f 00 00 10 00 50 00 00 01 00 00 62 -- 1st controller
1401 04 00 03 00 00 10 00 58 00 00 01 00 00 63    2nd controller
1402 04 00 01 00 00 10 00 48 00 00 01 00 00 61    3rd controller
1403 00 00 00 00 00 00 00 00 00 00 00 00 00 00    4th controller
1404        |  |  |  |     |        |     |  |
1405        |  |  |  |     |        |      ---- PCI io port adr
1406        |  |  |  |     |         --0x01 init/scan at boot time
1407        |  |  |  |      --PCI device/function number (0xdddddfff)
1408        |  |   ----- ?? PCI vendor ID (lsb/msb)
1409         ----PCI device ID (lsb/msb)
1411 ?? use of this data is a guess but seems reasonable
1413 remaining bytes unknown - they do not appear to change in my
1414 current set up
1416 default set up is identical for 53c810a and 53c875 NVRAM
1417 -----------------------------------------------------------
1418 device set up (up to 16 devices - includes controller)
1420 0f 00 08 08 64 00 0a 00 - id 0
1421 0f 00 08 08 64 00 0a 00 
1422 0f 00 08 08 64 00 0a 00 
1423 0f 00 08 08 64 00 0a 00 
1424 0f 00 08 08 64 00 0a 00 
1425 0f 00 08 08 64 00 0a 00 
1426 0f 00 08 08 64 00 0a 00 
1427 0f 00 08 08 64 00 0a 00 
1429 0f 00 08 08 64 00 0a 00 
1430 0f 00 08 08 64 00 0a 00 
1431 0f 00 08 08 64 00 0a 00 
1432 0f 00 08 08 64 00 0a 00 
1433 0f 00 08 08 64 00 0a 00 
1434 0f 00 08 08 64 00 0a 00 
1435 0f 00 08 08 64 00 0a 00 
1436 0f 00 08 08 64 00 0a 00 - id 15
1437  |     |  |  |     |  |
1438  |     |  |  |      ----timeout (lsb/msb)
1439  |     |  |   --synch period (0x?? 40 Mtrans/sec- fast 40) (probably 0x28)
1440  |     |  |                  (0x30 20 Mtrans/sec- fast 20)
1441  |     |  |                  (0x64 10 Mtrans/sec- fast )
1442  |     |  |                  (0xc8  5 Mtrans/sec)
1443  |     |  |                  (0x00  asynchronous)
1444  |     |   -- ?? max sync offset (0x08 in NVRAM on 53c810a) 
1445  |     |                         (0x10 in NVRAM on 53c875)
1446  |      --device bus width (0x08 narrow)
1447  |                         (0x10 16 bit wide)
1448   --flag bits
1449     0x00000001 - disconnect enabled
1450     0x00000010 - scan at boot time
1451     0x00000100 - scan luns
1452     0x00001000 - queue tags enabled
1454 remaining bytes unknown - they do not appear to change in my
1455 current set up
1457 ?? use of this data is a guess but seems reasonable 
1458 (but it could be max bus width)
1460 default set up for 53c810a NVRAM
1461 default set up for 53c875 NVRAM - bus width     - 0x10
1462                                 - sync offset ? - 0x10
1463                                 - sync period   - 0x30
1464 -----------------------------------------------------------
1465 ?? spare device space (32 bit bus ??)
1467 00 00 00 00 00 00 00 00  (19x8bytes)
1470 00 00 00 00 00 00 00 00
1472 default set up is identical for 53c810a and 53c875 NVRAM
1473 -----------------------------------------------------------
1474 trailer
1476 fe fe   - ? end marker ?
1477 00 00
1478 00 00
1480 default set up is identical for 53c810a and 53c875 NVRAM
1481 -----------------------------------------------------------
1485 17.3 Tekram NVRAM layout
1487 nvram 64x16 (1024 bit)
1489 Drive settings
1491 Drive ID 0-15 (addr 0x0yyyy0 = device setup, yyyy = ID)
1492               (addr 0x0yyyy1 = 0x0000)
1494     x x x x  x x x x  x x x x  x x x x
1495                | | |      | |  | | | |
1496                | | |      | |  | | |  ----- parity check   0 - off
1497                | | |      | |  | | |                       1 - on
1498                | | |      | |  | | |
1499                | | |      | |  | |  ------- sync neg       0 - off
1500                | | |      | |  | |                         1 - on
1501                | | |      | |  | |
1502                | | |      | |  |  --------- disconnect     0 - off
1503                | | |      | |  |                           1 - on
1504                | | |      | |  |
1505                | | |      | |   ----------- start cmd      0 - off
1506                | | |      | |                              1 - on
1507                | | |      | |
1508                | | |      |  -------------- tagged cmds    0 - off
1509                | | |      |                                1 - on
1510                | | |      | 
1511                | | |       ---------------- wide neg       0 - off
1512                | | |                                       1 - on
1513                | | |
1514                 --------------------------- sync rate      0 - 10.0 Mtrans/sec
1515                                                            1 -  8.0
1516                                                            2 -  6.6
1517                                                            3 -  5.7
1518                                                            4 -  5.0
1519                                                            5 -  4.0
1520                                                            6 -  3.0
1521                                                            7 -  2.0
1522                                                            7 -  2.0
1523                                                            8 - 20.0
1524                                                            9 - 16.7
1525                                                            a - 13.9
1526                                                            b - 11.9
1528 Global settings
1530 Host flags 0 (addr 0x100000, 32) 
1532     x x x x  x x x x  x x x x  x x x x
1533     | | | |  | | | |           | | | |
1534     | | | |  | | | |            ----------- host ID    0x00 - 0x0f
1535     | | | |  | | | |
1536     | | | |  | | |  ----------------------- support for    0 - off
1537     | | | |  | | |                          > 2 drives     1 - on
1538     | | | |  | | | 
1539     | | | |  | |  ------------------------- support drives 0 - off
1540     | | | |  | |                            > 1Gbytes      1 - on
1541     | | | |  | |
1542     | | | |  |  --------------------------- bus reset on   0 - off
1543     | | | |  |                                power on     1 - on
1544     | | | |  |
1545     | | | |   ----------------------------- active neg     0 - off
1546     | | | |                                                1 - on
1547     | | | |
1548     | | |  -------------------------------- imm seek       0 - off
1549     | | |                                                  1 - on
1550     | | |
1551     | |  ---------------------------------- scan luns      0 - off
1552     | |                                                    1 - on
1553     | |
1554      -------------------------------------- removable      0 - disable
1555                                             as BIOS dev    1 - boot device
1556                                                            2 - all
1558 Host flags 1 (addr 0x100001, 33)
1560     x x x x  x x x x  x x x x  x x x x
1561                | | |             | | | 
1562                | | |              --------- boot delay     0 -   3 sec
1563                | | |                                       1 -   5
1564                | | |                                       2 -  10
1565                | | |                                       3 -  20
1566                | | |                                       4 -  30
1567                | | |                                       5 -  60
1568                | | |                                       6 - 120
1569                | | |
1570                 --------------------------- max tag cmds   0 -  2
1571                                                            1 -  4
1572                                                            2 -  8
1573                                                            3 - 16
1574                                                            4 - 32
1576 Host flags 2 (addr 0x100010, 34)
1578     x x x x  x x x x  x x x x  x x x x
1579                                      |
1580                                       ----- F2/F6 enable   0 - off ???
1581                                                            1 - on  ???
1583 checksum (addr 0x111111)
1585 checksum = 0x1234 - (sum addr 0-63)
1587 ----------------------------------------------------------------------------
1589 default nvram data:
1591 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000
1592 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000
1593 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000
1594 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 0x0037 0x0000 
1596 0x0f07 0x0400 0x0001 0x0000 0x0000 0x0000 0x0000 0x0000
1597 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
1598 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
1599 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0xfbbc
1602 18. Support for Big Endian
1604 The PCI local bus has been primarily designed for x86 architecture.
1605 As a consequence, PCI devices generally expect DWORDS using little endian 
1606 byte ordering.
1608 18.1 Big Endian CPU
1610 In order to support NCR chips on a Big Endian architecture the driver has to 
1611 perform byte reordering each time it is needed. This feature has been 
1612 added to the driver by Cort <cort@cs.nmt.edu> and is available in driver 
1613 version 2.5 and later ones. For the moment Big Endian support has only 
1614 been tested on Linux/PPC (PowerPC).
1616 18.2 NCR chip in Big Endian mode of operations
1618 It can be read in SYMBIOS documentation that some chips support a special 
1619 Big Endian mode, on paper: 53C815, 53C825A, 53C875, 53C875N, 53C895.
1620 This mode of operations is not software-selectable, but needs pin named 
1621 BigLit to be pulled-up. Using this mode, most of byte reorderings should 
1622 be avoided when the driver is running on a Big Endian CPU.
1623 Driver version 2.5 is also, in theory, ready for this feature.
1625 ===============================================================================
1626 End of NCR53C8XX driver README file