OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [rc203soc/] [sw/] [uClinux/] [drivers/] [scsi/] [README.aic7xxx] - Blame information for rev 1777

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1626 jcastillo
                            AIC7xxx Driver for Linux
2
 
3
Introduction
4
----------------------------
5
The AIC7xxx SCSI driver adds support for Adaptec (http://www.adaptec.com)
6
SCSI controllers and chipsets. Major portions of the driver and driver
7
development are shared between both Linux and FreeBSD. Support for the
8
AIC-7xxx chipsets have been in the default Linux kernel since approximately
9
linux-1.1.x and fairly stable since linux-1.2.x, and are also in FreeBSD
10
2.1.0 or later.
11
 
12
  Supported cards/chipsets
13
  ----------------------------
14
    Adaptec Cards
15
    ----------------------------
16
    AHA-274x
17
    AHA-274xT
18
    AHA-2842
19
    AHA-2910B
20
    AHA-2920C
21
    AHA-2930
22
    AHA-2930U
23
    AHA-2930U2
24
    AHA-2940
25
    AHA-2940W
26
    AHA-2940U
27
    AHA-2940UW
28
    AHA-2940AU
29
    AHA-2940U2W
30
    AHA-2940U2
31
    AHA-2940U2B
32
    AHA-2940U2BOEM
33
    AHA-2944D
34
    AHA-2944WD
35
    AHA-2944UD
36
    AHA-2944UWD
37
    AHA-2950U2
38
    AHA-2950U2W
39
    AHA-2950U2B
40
    AHA-3940
41
    AHA-3940U
42
    AHA-3940W
43
    AHA-3940UW
44
    AHA-3940AUW
45
    AHA-3940U2W
46
    AHA-3950U2B
47
    AHA-3950U2D
48
    AHA-3985
49
    AHA-3985U
50
    AHA-3985W
51
    AHA-3985UW
52
 
53
    Motherboard Chipsets
54
    ----------------------------
55
    AIC-777x
56
    AIC-785x
57
    AIC-786x
58
    AIC-787x
59
    AIC-788x
60
    AIC-789x
61
    AIC-3860
62
 
63
    Bus Types
64
    ----------------------------
65
    W - Wide SCSI, SCSI-3, 16bit bus, 68pin connector, will also support
66
        SCSI-1/SCSI-2 50pin devices, transfer rates up to 20MB/s.
67
    U - Ultra SCSI, transfer rates up to 40MB/s.
68
    U2- Ultra 2 SCSI, transfer rates up to 80MB/s.
69
    D - Differential SCSI.
70
    T - Twin Channel SCSI. Up to 14 SCSI devices.
71
 
72
    AHA-274x - EISA SCSI controller
73
    AHA-284x - VLB SCSI controller
74
    AHA-29xx - PCI SCSI controller
75
    AHA-394x - PCI controllers with two separate SCSI controllers on-board.
76
    AHA-398x - PCI RAID controllers with three separate SCSI controllers
77
               on-board.
78
 
79
  Not Supported Devices
80
  ------------------------------
81
    Adaptec Cards
82
    ----------------------------
83
    AHA-2920 (Only the cards that use the Future Domain chipset are not
84
              supported, any 2920 cards based on Adaptec AIC chipsets,
85
              such as the 2920C, are supported)
86
    AAA-13x Raid Adapters
87
    AAA-113x Raid Port Card
88
 
89
    Motherboard Chipsets
90
    ----------------------------
91
    AIC-7810
92
 
93
    Bus Types
94
    ----------------------------
95
    R - Raid Port busses are not supported.
96
 
97
    The hardware RAID devices sold by Adaptec are *NOT* supported by this
98
    driver (and will people please stop emailing me about them, they are
99
    a totally separate beast from the bare SCSI controllers and this driver
100
    can not be retrofitted in any sane manner to support the hardware RAID
101
    features on those cards - Doug Ledford).
102
 
103
 
104
  People
105
  ------------------------------
106
    Justin T Gibbs  gibbs@plutotech.com
107
      (BSD Driver Author)
108
    Dan Eischen     deischen@iworks.InterWorks.org
109
      (Original Linux Driver Co-maintainer)
110
    Dean Gehnert    deang@teleport.com
111
      (Original Linux FTP/patch maintainer)
112
    Jess Johnson    jester@frenzy.com
113
      (AIC7xxx FAQ author)
114
    Doug Ledford    dledford@redhat.com
115
      (Current Linux aic7xxx-5.x.x Driver/Patch/FTP maintainer)
116
 
117
    Special thanks go to John Aycock (aycock@cpsc.ucalgary.ca), the original
118
    author of the driver. John has since retired from the project. Thanks
119
    again for all his work!
120
 
121
  Mailing list
122
  ------------------------------
123
    There is a mailing list available for users who want to track development
124
    and converse with other users and developers. This list is for both
125
    FreeBSD and Linux support of the AIC7xxx chipsets.
126
 
127
    To subscribe to the AIC7xxx mailing list send mail to the list server,
128
    with "subscribe AIC7xxx" in the body (no Subject: required):
129
        To: majordomo@FreeBSD.ORG
130
        ---
131
        subscribe AIC7xxx
132
 
133
    To unsubscribe from the list, send mail to the list server with:
134
        To: majordomo@FreeBSD.ORG
135
        ---
136
        unsubscribe AIC7xxx
137
 
138
    Send regular messages and replies to: AIC7xxx@FreeBSD.ORG
139
 
140
  Boot Command line options
141
  ------------------------------
142
    "aic7xxx=no_reset" -  Eliminate the SCSI bus reset during startup.
143
        Some SCSI devices need the initial reset that this option disables
144
        in order to work.  If you have problems at bootup, please make sure
145
        you aren't using this option.
146
 
147
    "aic7xxx=reverse_scan" - Certain PCI motherboards scan for devices at
148
        bootup by scanning from the highest numbered PCI device to the
149
        lowest numbered PCI device, others do just the opposite and scan
150
        from lowest to highest numbered PCI device.  There is no reliable
151
        way to autodetect this ordering.  So, we default to the most common
152
        order, which is lowest to highest.  Then, in case your motherboard
153
        scans from highest to lowest, we have this option.  If your BIOS
154
        finds the drives on controller A before controller B but the linux
155
        kernel finds your drives on controller B before A, then you should
156
        use this option.
157
 
158
    "aic7xxx=extended" - Force the driver to detect extended drive translation
159
        on your controller.  This helps those people who have cards without
160
        a SEEPROM make sure that linux and all other operating systems think
161
        the same way about your hard drives.
162
 
163
    "aic7xxx=irq_trigger:x" - Replace x with either 0 or 1 to force the kernel
164
        to use the correct IRQ type for your card.  This only applies to EISA
165
        based controllers.  On these controllers, 0 is for Edge triggered
166
        interrupts, and 1 is for Level triggered interrupts.  If you aren't
167
        sure or don't know which IRQ trigger type your EISA card uses, then
168
        let the kernel autodetect the trigger type.
169
 
170
    "aic7xxx=verbose" - This option can be used in one of two ways.  If you
171
        simply specify aic7xxx=verbose, then the kernel will automatically
172
        pick the default set of verbose messages for you to see.
173
        Alternatively, you can specify the command as
174
        "aic7xxx=verbose:0xXXXX" where the X entries are replaced with
175
        hexadecimal digits.  This option is a bit field type option.  For
176
        a full listing of the available options, search for the
177
        #define VERBOSE_xxxxxx lines in the aic7xxx.c file.  If you want
178
        verbose messages, then it is recommended that you simply use the
179
        aic7xxx=verbose variant of this command.
180
 
181
    "aic7xxx=pci_parity:x" - This option controls whether or not the driver
182
        enables PCI parity error checking on the PCI bus.  By default, this
183
        checking is disabled.  To enable the checks, simply specify pci_parity
184
        with no value afterwords.  To reverse the parity from even to odd,
185
        supply any number other than 0 or 255.  In short:
186
          pci_parity     - Even parity checking (even is the normal PCI parity)
187
          pci_parity:x   - Where x > 0, Odd parity checking
188
          pci_parity:0   - No check (default)
189
        NOTE: In order to get Even PCI parity checking, you must use the
190
        version of the option that does not include the : and a number at
191
        the end (unless you want to enter exactly 2^32 - 1 as the number).
192
 
193
    "aic7xxx=no_probe" - This option will disable the probing for any VLB
194
        based 2842 controllers and any EISA based controllers.  This is
195
        needed on certain newer motherboards where the normal EISA I/O ranges
196
        have been claimed by other PCI devices.  Probing on those machines
197
        will often result in the machine crashing or spontaneously rebooting
198
        during startup.  Examples of machines that need this are the
199
        Dell PowerEdge 6300 machines.
200
 
201
    "aic7xxx=panic_on_abort" - This option is for debugging and will cause
202
        the driver to panic the linux kernel and freeze the system the first
203
        time the drivers abort or reset routines are called.  This is most
204
        helpful when some problem causes infinite reset loops that scroll too
205
        fast to see.  By using this option, you can write down what the errors
206
        actually are and send that information to me so it can be fixed.
207
 
208
    "aic7xxx=dump_card" - This option will print out the *entire* set of
209
        configuration registers on the card during the init sequence.  This
210
        is a debugging aid used to see exactly what state the card is in
211
        when we finally finish our initialization routines.  If you don't
212
        have documentation on the chipsets, this will do you absolutely
213
        no good unless you are simply trying to write all the information
214
        down in order to send it to me.
215
 
216
    "aic7xxx=dump_sequencer" - This is the same as the above options except
217
        that instead of dumping the register contents on the card, this
218
        option dumps the contents of the sequencer program RAM.  This gives
219
        the ability to verify that the instructions downloaded to the
220
        card's sequencer are indeed what they are suppossed to be.  Again,
221
        unless you have documentation to tell you how to interpret these
222
        numbers, then it is totally useless.
223
 
224
    "aic7xxx=override_term:0xffffffff" - This option is used to force the
225
        termination on your SCSI controllers to a particular setting.  This
226
        is a bit mask variable that applies for up to 8 aic7xxx SCSI channels.
227
        Each channel gets 4 bits, divided as follows:
228
        bit   3   2   1   0
229
              |   |   |   Enable/Disable Single Ended Low Byte Termination
230
              |   |   En/Disable Single Ended High Byte Termination
231
              |   En/Disable Low Byte LVD Termination
232
              En/Disable High Byte LVD Termination
233
 
234
        The upper 2 bits that deal with LVD termination only apply to Ultra2
235
        controllers.  Futhermore, due to the current Ultra2 controller
236
        designs, these bits are tied together such that setting either bit
237
        enables both low and high byte LVD termination.  It is not possible
238
        to only set high or low byte LVD termination in this manner.  This is
239
        an artifact of the BIOS definition on Ultra2 controllers.  For other
240
        controllers, the only important bits are the two lowest bits.  Setting
241
        the higher bits on non-Ultra2 controllers has no effect.  A few
242
        examples of how to use this option:
243
 
244
        Enable low and high byte termination on a non-ultra2 controller that
245
        is the first aic7xxx controller (the correct bits are 0011),
246
        aic7xxx=override_term:0x3
247
 
248
        Enable all termination on the third aic7xxx controller, high byte
249
        termination on the second aic7xxx controller, and low and high byte
250
        SE termination on the first aic7xxx controller
251
        (bits are 1111 0010 0011),
252
        aic7xxx=override_term:0xf23
253
 
254
        No attempt has been made to make this option non-cryptic.  It really
255
        shouldn't be used except in dire circumstances, and if that happens,
256
        I'm probably going to be telling you what to set this to anyway :)
257
 
258
    "aic7xxx=stpwlev:0xffffffff" - This option is used to control the STPWLEV
259
        bit in the DEVCONFIG PCI register.  Currently, this is one of the
260
        very few registers that we have absolutely *no* way of detecting
261
        what the variable should be.  It depends entirely on how the chipset
262
        and external terminators were coupled by the card/motherboard maker.
263
        Further, a chip reset (at power up) always sets this bit to 0.  If
264
        there is no BIOS to run on the chipset/card (such as with a 2910C
265
        or a motherboard controller with the BIOS totally disabled) then
266
        the variable may not get set properly.  Of course, if the proper
267
        setting was 0, then that's what it would be after the reset, but if
268
        the proper setting is actually 1.....you get the picture.  Now, since
269
        we can't detect this at all, I've added this option to force the
270
        setting.  If you have a BIOS on your controller then you should never
271
        need to use this option.  However, if you are having lots of SCSI
272
        reset problems and can't seem to get them knocked out, this may help.
273
 
274
        Here's a test to know for certain if you need this option.  Make
275
        a boot floppy that you can use to boot your computer up and that
276
        will detect the aic7xxx controller.  Next, power down your computer.
277
        While it's down, unplug all SCSI cables from your Adaptec SCSI
278
        controller.  Boot the system back up to the Adaptec EZ-SCSI BIOS
279
        and then make sure that termination is enabled on your adapter (if
280
        you have an Adaptec BIOS of course).  Next, boot up the floppy you
281
        made and wait for it to detect the aic7xxx controller.  If the kernel
282
        finds the controller fine, says scsi : x hosts and then tries to
283
        detect your devices like normal, up to the point where it fails to
284
        mount your root file system and panics, then you're fine.  If, on
285
        the other hand, the system goes into an infinite reset loop, then
286
        you need to use this option and/or the previous option to force the
287
        proper termination settings on your controller.   If this happens,
288
        then you next need to figure out what your settings should be.
289
 
290
        To find the correct settings, power your machine back down, connect
291
        back up the SCSI cables, and boot back into your machine like normal.
292
        However, boot with the aic7xxx=verbose:0x39 option.  Record the
293
        initial DEVCONFIG values for each of your aic7xxx controllers as
294
        they are listed, and also record what the machine is detecting as
295
        the proper termination on your controllers.  NOTE: the order in
296
        which the initial DEVCONFIG values are printed out is not gauranteed
297
        to be the same order as the SCSI controllers are registered.  The
298
        above option and this option both work on the order of the SCSI
299
        controllers as they are registered, so make sure you match the right
300
        DEVCONFIG values with the right controllers if you have more than
301
        one aic7xxx controller.
302
 
303
        Once you have the detected termination settings and the initial
304
        DEVCONFIG values for each controller, then figure out what the
305
        termination on each of the controllers *should* be.  Hopefully, that
306
        part is correct, but it could possibly be wrong if there is
307
        bogus cable detection logic on your controller or something similar.
308
        If all the controllers have the correct termination settings, then
309
        don't set the aic7xxx=override_term variable at all, leave it alone.
310
        Next, on any controllers that go into an infinite reset loop when
311
        you unplug all the SCSI cables, get the starting DEVCONFIG value.
312
        If the initial DEVCONFIG value is divisible by 2, then the correct
313
        setting for that controller is 0.  If it's an odd number, then
314
        the correct setting for that controller is 1.  For any other
315
        controllers that didn't have an infinite reset problem, then reverse
316
        the above options.  If DEVCONFIG was even, then the correct setting
317
        is 1, if not then the correct setting is 0.
318
 
319
        Now that you know what the correct setting was for each controller,
320
        we need to encode that into the aic7xxx=stpwlev:0x... variable.
321
        This variable is a bit field encoded variable.  Bit 0 is for the first
322
        aic7xxx controller, bit 1 for the next, etc.  Put all these bits
323
        together and you get a number.  For example, if the third aic7xxx
324
        needed a 1, but the second and first both needed a 0, then the bits
325
        would be 100 in binary.  This then translates to 0x04.  You would
326
        therefore set aic7xxx=stpwlev:0x04.  This is fairly standard binary
327
        to hexadecimal conversions here.  If you aren't up to speed on the
328
        binary->hex conversion then send an email to the aic7xxx mailing
329
        list and someone can help you out.
330
 
331
    "aic7xxx=tag_info:{{8,8..},{8,8..},..}" - This option is used to disable
332
        or enable Tagged Command Queueing (TCQ) on specific devices.  As of
333
        driver version 5.1.11, TCQ is now either on or off by default
334
        according to the setting you choose during the make config process.
335
        In order to en/disable TCQ for certian devices at boot time, a user
336
        may use this boot param.  The driver will then parse this message out
337
        and en/disable the specific device entries that are present based upon
338
        the value given.  The param line is parsed in the following manner:
339
 
340
          { - first instance indicates the start of this parameter values
341
              second instance is the start of entries for a particular
342
              device entry
343
          } - end the entries for a particular host adapter, or end the entire
344
              set of parameter entries
345
          , - move to next entry.  Inside of a set of device entries, this
346
              moves us to the next device on the list.  Outside of device
347
              entries, this moves us to the next host adapter
348
          . - Same effect as , but is safe to use with insmod.
349
          x - the number to enter into the array at this position.
350
 
351
                  queue depth
352
              1-254 = Enable tagged queueing on this device and use this
353
                      number as the queue depth
354
              255 = Disable tagged queueing on this device.
355
              Note: anything above 32 for an actual queue depth is wasteful
356
                    and not recommended.
357
 
358
        A few examples of how this can be used:
359
 
360
        tag_info:{{8,12,,0,,255,4}}
361
          This line will only effect the first aic7xxx card registered.  It
362
          will set scsi id 0 to a queue depth of 8, id 1 to 12, leave id 2
363
          at the default, set id 3 to tagged queueing enabled and use the
364
          default queue depth, id 4 default, id 5 disabled, and id 6 to 4.
365
          Any not specified entries stay at the default value, repeated
366
          commas with no value specified will simply increment to the next id
367
          without changing anything for the missing values.
368
 
369
        tag_info:{,,,{,,,255}}
370
          First, second, and third adapters at default values.  Fourth
371
          adapter, id 3 is disabled.  Notice that leading commas simply
372
          increment what the first number effects, and there are no need
373
          for trailing commas.  When you close out an adapter, or the
374
          entire entry, anything not explicitly set stays at the default
375
          value.
376
 
377
        A final note on this option.  The scanner I used for this isn't
378
        perfect or highly robust.  If you mess the line up, the worst that
379
        should happen is that the line will get ignored.  If you don't
380
        close out the entire entry with the final bracket, then any other
381
        aic7xxx options after this will get ignored.  So, in general, be
382
        sure of what you are entering, and after you have it right, just
383
        add it to the lilo.conf file so there won't be any mistakes.  As
384
        a means of checking this parser, the entire tag_info array for
385
        each card is now printed out in the /proc/scsi/aic7xxx/x file.  You
386
        can use that to verify that your options were parsed correctly.
387
 
388
    Boot command line options may be combined to form the proper set of options
389
    a user might need.  For example, the following is valid:
390
 
391
    aic7xxx=verbose,extended,irq_trigger:1
392
 
393
    The only requirement is that individual options be separated by a comma or
394
    a period on the command line.
395
 
396
  Module Loading command options
397
  ------------------------------
398
    When loading the aic7xxx driver as a module, the exact same options are
399
    available to the user.  However, the syntax to specify the options changes
400
    slightly.  For insmod, you need to wrap the aic7xxx= argument in quotes
401
    and replace all ',' with '.'.  So, for example, a valid insmod line
402
    would be:
403
 
404
    insmod aic7xxx aic7xxx='verbose.irq_trigger:1.extended'
405
 
406
    This line should result in the *exact* same behaviour as if you typed
407
    it in at the lilo prompt and the driver was compiled into the kernel
408
    instead of being a module.  The reason for the single quote is so that
409
    the shell won't try to interpret anything in the line, such as {.
410
    Insmod assumes any options starting with a letter instead of a number
411
    is a character string (which is what we want) and by switching all of
412
    the commas to periods, insmod won't interpret this as more than one
413
    string and write junk into our binary image.  I consider it a bug in
414
    the insmod program that even if you wrap your string in quotes (quotes
415
    that pass the shell mind you and that insmod sees) it still treates
416
    a comma inside of those quotes as starting a new variable, resulting
417
    in memory scribbles if you don't switch the commas to periods.
418
 
419
 
420
  Kernel Compile options
421
  ------------------------------
422
    The various kernel compile time options for this driver are now fairly
423
    well documented in the file Documentation/Configure.help.  In order to
424
    see this documentation, you need to use one of the advanced configuration
425
    programs (menuconfig and xconfig).  If you are using the "make menuconfig"
426
    method of configuring your kernel, then you would simply highlight the
427
    option in question and hit the ? key.  If you are using the "make xconfig"
428
    method of configuring your kernel, then simply click on the help button
429
    next to the option you have questions about.  The help information from
430
    the Configure.help file will then get automatically displayed.
431
 
432
  /proc support
433
  ------------------------------
434
    The /proc support for the AIC7xxx can be found in the /proc/scsi/aic7xxx/
435
    directory. That directory contains a file for each SCSI controller in
436
    the system. Each file presents the current configuration and transfer
437
    statistics (enabled with #define in aic7xxx.c) for each controller.
438
 
439
    Thanks to Michael Neuffer for his upper-level SCSI help, and
440
    Matthew Jacob for statistics support.
441
 
442
  Debugging the driver
443
  ------------------------------
444
    Should you have problems with this driver, and would like some help in
445
    getting them solved, there are a couple debugging items built into
446
    the driver to facilitate getting the needed information from the system.
447
    In general, I need a complete description of the problem, with as many
448
    logs as possible concerning what happens.  To help with this, there is
449
    a command option aic7xxx=panic_on_abort.  This option, when set, forces
450
    the driver to panic the kernel on the first SCSI abort issued by the
451
    mid level SCSI code.  If your system is going to reset loops and you
452
    can't read the screen, then this is what you need.  Not only will it
453
    stop the system, but it also prints out a large amount of state
454
    information in the process.  Second, if you specify the option
455
    "aic7xxx=verbose:0x1ffff", the system will print out *SOOOO* much
456
    information as it runs that you won't be able to see anything.
457
    However, this can actually be very usefull if your machine simply
458
    locks up when trying to boot, since it will pin-point what was last
459
    happening (in regards to the aic7xxx driver) immediately prior to
460
    the lockup.  This is really only usefull if your machine simply can
461
    not boot up successfully.  If you can get your machine to run, then
462
    this will produce far too much information.
463
 
464
  FTP sites
465
  ------------------------------
466
    ftp://ftp.redhat.com/pub/aic/
467
      - Primary site for Doug Ledford developed driver releases
468
    ftp://ftp.dialnet.net/pub/linux/aic7xxx
469
      - Temporary mirror of the redhat.com ftp site while people
470
        get used to the new address
471
    ftp://ftp.pcnet.com/users/eischen/Linux/
472
      - Dan Eischen's driver distribution area
473
    ftp://ekf2.vsb.cz/pub/linux/kernel/aic7xxx/ftp.teleport.com/
474
      - European Linux mirror of Teleport site
475
 
476
  Web sites
477
  ------------------------------
478
    http://developer.redhat.com/aic7xxx/
479
      - Primary web site maintained by Doug Ledford.  I haven't actually
480
        put anything up yet....but I'm planning on it.  This information
481
        is put here as an add for the vapor page :)
482
 
483
Dean W. Gehnert
484
deang@teleport.com
485
 
486
$Revision: 1.1 $
487
 
488
Modified by Doug Ledford 1998-9

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.