The Linux NCR53C8XX driver README file Written by Gerard Roudier 21 Rue Carnot 95170 DEUIL LA BARRE - FRANCE 23 August 1997 =============================================================================== 1. Introduction 2. Supported chips and SCSI features 3. Summary of other supported features 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_sync) 8.8 Debug error recovery 9. Configuration parameters 10. Boot setup commands 10.1 Syntax 10.2 Available arguments 10.3 Advised boot setup commands 10.4 PCI configuration fix-up boot option 10.5 Serial NVRAM support boot option 11. Some constants and flags of the ncr53c8xx.h header file 12. Installation 12.1 Provided files 12.2 Installation procedure 13. Control commands under linux-1.2.13 14. Known problems 14.1 Tagged commands with Iomega Jaz device 14.2 Device names change when another controller is added 15. SCSI problem troubleshooting 16. Synchonous 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 This driver has been ported from FreeBSD to Linux and is currently maintained by: Gerard Roudier The original driver has been written for 386bsd and FreeBSD by: Wolfgang Stanglmeier Stefan Esser 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 SYMBIOS web server: http://www.symbios.com/ SCSI standard documentations are available at SYMBIOS ftp server: ftp://ftp.symbios.com/ Usefull 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 only describes the features of the NCR53C8XX driver, 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://linux.wauug.org/pub/roudier 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: On board Supported by Tested with Chip SDMS BIOS Wide Ultra SCSI the driver the driver ---- --------- ---- ---------- ------------ ----------- 810 N N N Y Y 810A N N N Y Y 815 Y N N Y Y 825 Y Y N Y Y 825A Y Y N Y Y 860 N N Y Y Y 875 Y Y Y Y Y 895 Y Y Y(1) Y not yet (1) The 895 chip is supported 'on paper'. 3. 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 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 Some SCSI devices do not properly support tagged command queuing. A safe configuration is to not enable tagged command queuing support at boot-up, and to enable support of it with the control command "settags" described further in this text. Once you are sure that all your devices properly support tagged command queuing, you can enable it by default with the CONFIG_SCSI_NCR53C8XX_TAGGED_QUEUE configuration option. The maximum number of simultaneous tagged commands queued to a device is currently set to 4 by default. It is defined in the file ncr53c8xx.h by SCSI_NCR_MAX_TAGS. This value is suitable for most SCSI disks. With large SCSI disks (> 2GB, cache > 512KB average seek time < 10 ms), 8 tagged commands may give better performance. 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 by the following heuristic: - Each time a QUEUE FULL status is returned, tagged command queueing is temporarily disabled. - Every 100 successfully completed SCSI commands, if allowed by the current limit, the maximum number of queueable commands is incremented and tagged command queueing is reenabled. 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 parity by choosing first "CONFIG_EXPERIMENTAL". Then, "make config" will allow to set the following configuration options: CONFIG_SCSI_NCR53C8XX_DISABLE_PARITY_CHECK (disable SCSI parity checking) CONFIG_SCSI_NCR53C8XX_DISABLE_MPARITY_CHECK (disable master parity checking) 7. Profiling information Profiling information is available through the proc SCSI file system. 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 " " >/proc/scsi/ncr53c8xx/0 (assumes controller number is 0) Using "all" for "" 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: 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: target number size: 0=8 bits, 1=16bits 8.3 Set maximum number of concurrent tagged commands settags target: target number tags: number of concurrent tagged commands must not be greater than SCSI_NCR_MAX_TAGS (default: 4) 8.4 Set order type for tagged command setorder 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 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 transfered 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_sync) setflag target: target number For the moment, only one flag is available: no_sync: not allow target to disconnect. Do not specify any flag in order to reset the flag. For example: - setflag 4 will reset no_sync flag for target 4, so will allow it disconnections. - setflag all will allow disconnection for all devices on the SCSI bus. 8.8 Debug error recovery debug_error_recovery Available error type to trigger: sge: SCSI gross error abort: abort command from the middle-level driver reset: reset command from the middle-level driver parity: scsi parity detected in DATA IN phase none: restore driver normal behaviour The code corresponding to this feature is normally not compiled. Its purpose is driver testing only. In order to compile the code that allows to trigger error recovery you must define at compile time SCSI_NCR_DEBUG_ERROR_RECOVERY. If you have compiled the driver with this option, nothing will happen as long as you donnot use the control command 'debug_error_recovery' with sge, abort, reset or parity as argument. If you select an error type, it will be triggered by the driver every 30 seconds. 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_TAGGED_QUEUE (default answer: n) Answer "y" if you are sure that all your SCSI devices that are able to accept tagged commands will proceed safely. CONFIG_SCSI_NCR53C8XX_MAX_TAGS (default answer: 4) This option allows you to specify the maximum number of tagged commands that can be queued to a device. 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 reasonnable 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 at boot time. A boot setup command for the ncr53c8xx driver begins with the driver name "ncr53c8xx=". The kernel syntax parser then expects an optionnal list of integers separated with comma followed by an optionnal 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. For the moment, the integer list of arguments is disgarded 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. 10.2 Available arguments Master parity checking mpar:y enabled mpar:n disabled Scsi parity checking spar:y enabled spar:n disabled Scsi disconnections disc:y enabled disc:n disabled Special features Only apply to 810A, 825A, 860 and 875 controllers. Have no effect with normal 810 and 825. specf:y enabled specf:n disabled Ultra SCSI support Only apply to 860 and 875 controllers. Have no effect with other ones. ultra:y enabled ultra:n disabled 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. If the driver is configured with a maximum of 4 queued commands, tags:4 is the right argument to specify. 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. Negotiate synchronous with all devices (force sync nego) fsn:y enabled fsn:n disabled Verbosity level verb:0 minimal verb:1 normal verb:2 too much 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. 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. 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') 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 helpfull. 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 IRQ mode irqm:0 always open drain irqm:1 same as initial settings (assumed BIOS settings) irqm:2 always totem pole 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. Fix up PCI configuration space pcifix: