The Linux NCR53C8XX/SYM53C8XX drivers README file Written by Gerard Roudier 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. 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 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 The original driver has been written for 386bsd and FreeBSD by: Wolfgang Stanglmeier Stefan Esser 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/ 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 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 painfull 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 kown 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 " " >/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: 8) 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 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: 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 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 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_PROFILE_SUPPORT (default answer: n) This option must be set for profiling information to be gathered and printed out through the proc file system. This features may impact performances. 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 optionnal 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 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 SA_SHIRQ flag when requesting irq irqm:0x20 driver will not use SA_INTERRUPT 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: