Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | |
| 2 | Information regarding the Enhanced IDE drive in Linux 2.6 |
| 3 | |
| 4 | ============================================================================== |
| 5 | |
Randy Dunlap | 331a5ad | 2008-03-07 21:53:50 +0100 | [diff] [blame] | 6 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 7 | The hdparm utility can be used to control various IDE features on a |
| 8 | running system. It is packaged separately. Please Look for it on popular |
| 9 | linux FTP sites. |
Randy Dunlap | 331a5ad | 2008-03-07 21:53:50 +0100 | [diff] [blame] | 10 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 11 | |
| 12 | |
| 13 | *** IMPORTANT NOTICES: BUGGY IDE CHIPSETS CAN CORRUPT DATA!! |
| 14 | *** ================= |
| 15 | *** PCI versions of the CMD640 and RZ1000 interfaces are now detected |
| 16 | *** automatically at startup when PCI BIOS support is configured. |
| 17 | *** |
| 18 | *** Linux disables the "prefetch" ("readahead") mode of the RZ1000 |
| 19 | *** to prevent data corruption possible due to hardware design flaws. |
| 20 | *** |
| 21 | *** For the CMD640, linux disables "IRQ unmasking" (hdparm -u1) on any |
| 22 | *** drive for which the "prefetch" mode of the CMD640 is turned on. |
| 23 | *** If "prefetch" is disabled (hdparm -p8), then "IRQ unmasking" can be |
| 24 | *** used again. |
| 25 | *** |
| 26 | *** For the CMD640, linux disables "32bit I/O" (hdparm -c1) on any drive |
| 27 | *** for which the "prefetch" mode of the CMD640 is turned off. |
| 28 | *** If "prefetch" is enabled (hdparm -p9), then "32bit I/O" can be |
| 29 | *** used again. |
| 30 | *** |
| 31 | *** The CMD640 is also used on some Vesa Local Bus (VLB) cards, and is *NOT* |
| 32 | *** automatically detected by Linux. For safe, reliable operation with such |
Bartlomiej Zolnierkiewicz | ade2daf | 2008-01-26 20:13:07 +0100 | [diff] [blame] | 33 | *** interfaces, one *MUST* use the "cmd640.probe_vlb" kernel option. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 34 | *** |
| 35 | *** Use of the "serialize" option is no longer necessary. |
| 36 | |
| 37 | ================================================================================ |
| 38 | Common pitfalls: |
| 39 | |
| 40 | - 40-conductor IDE cables are capable of transferring data in DMA modes up to |
| 41 | udma2, but no faster. |
| 42 | |
| 43 | - If possible devices should be attached to separate channels if they are |
| 44 | available. Typically the disk on the first and CD-ROM on the second. |
| 45 | |
| 46 | - If you mix devices on the same cable, please consider using similar devices |
| 47 | in respect of the data transfer mode they support. |
| 48 | |
| 49 | - Even better try to stick to the same vendor and device type on the same |
| 50 | cable. |
| 51 | |
| 52 | ================================================================================ |
| 53 | |
Randy Dunlap | 331a5ad | 2008-03-07 21:53:50 +0100 | [diff] [blame] | 54 | This is the multiple IDE interface driver, as evolved from hd.c. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 55 | |
| 56 | It supports up to 9 IDE interfaces per default, on one or more IRQs (usually |
| 57 | 14 & 15). There can be up to two drives per interface, as per the ATA-6 spec. |
| 58 | |
| 59 | Primary: ide0, port 0x1f0; major=3; hda is minor=0; hdb is minor=64 |
| 60 | Secondary: ide1, port 0x170; major=22; hdc is minor=0; hdd is minor=64 |
| 61 | Tertiary: ide2, port 0x1e8; major=33; hde is minor=0; hdf is minor=64 |
| 62 | Quaternary: ide3, port 0x168; major=34; hdg is minor=0; hdh is minor=64 |
| 63 | fifth.. ide4, usually PCI, probed |
| 64 | sixth.. ide5, usually PCI, probed |
| 65 | |
| 66 | To access devices on interfaces > ide0, device entries please make sure that |
| 67 | device files for them are present in /dev. If not, please create such |
| 68 | entries, by using /dev/MAKEDEV. |
| 69 | |
| 70 | This driver automatically probes for most IDE interfaces (including all PCI |
| 71 | ones), for the drives/geometries attached to those interfaces, and for the IRQ |
| 72 | lines being used by the interfaces (normally 14, 15 for ide0/ide1). |
| 73 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 74 | Any number of interfaces may share a single IRQ if necessary, at a slight |
| 75 | performance penalty, whether on separate cards or a single VLB card. |
| 76 | The IDE driver automatically detects and handles this. However, this may |
| 77 | or may not be harmful to your hardware.. two or more cards driving the same IRQ |
| 78 | can potentially burn each other's bus driver, though in practice this |
| 79 | seldom occurs. Be careful, and if in doubt, don't do it! |
| 80 | |
| 81 | Drives are normally found by auto-probing and/or examining the CMOS/BIOS data. |
| 82 | For really weird situations, the apparent (fdisk) geometry can also be specified |
| 83 | on the kernel "command line" using LILO. The format of such lines is: |
| 84 | |
Bartlomiej Zolnierkiewicz | ad1c53b | 2008-03-22 16:40:21 +0100 | [diff] [blame] | 85 | hdx=cyls,heads,sects |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 86 | or hdx=cdrom |
| 87 | |
| 88 | where hdx can be any of hda through hdh, Three values are required |
| 89 | (cyls,heads,sects). For example: |
| 90 | |
| 91 | hdc=1050,32,64 hdd=cdrom |
| 92 | |
| 93 | either {hda,hdb} or {hdc,hdd}. The results of successful auto-probing may |
| 94 | override the physical geometry/irq specified, though the "original" geometry |
| 95 | may be retained as the "logical" geometry for partitioning purposes (fdisk). |
| 96 | |
| 97 | If the auto-probing during boot time confuses a drive (ie. the drive works |
| 98 | with hd.c but not with ide.c), then an command line option may be specified |
| 99 | for each drive for which you'd like the drive to skip the hardware |
| 100 | probe/identification sequence. For example: |
| 101 | |
| 102 | hdb=noprobe |
| 103 | or |
| 104 | hdc=768,16,32 |
| 105 | hdc=noprobe |
| 106 | |
| 107 | Note that when only one IDE device is attached to an interface, it should be |
| 108 | jumpered as "single" or "master", *not* "slave". Many folks have had |
| 109 | "trouble" with cdroms because of this requirement, so the driver now probes |
| 110 | for both units, though success is more likely when the drive is jumpered |
| 111 | correctly. |
| 112 | |
| 113 | Courtesy of Scott Snyder and others, the driver supports ATAPI cdrom drives |
| 114 | such as the NEC-260 and the new MITSUMI triple/quad speed drives. |
| 115 | Such drives will be identified at boot time, just like a hard disk. |
| 116 | |
| 117 | If for some reason your cdrom drive is *not* found at boot time, you can force |
| 118 | the probe to look harder by supplying a kernel command line parameter |
| 119 | via LILO, such as: |
| 120 | |
| 121 | hdc=cdrom /* hdc = "master" on second interface */ |
| 122 | or |
| 123 | hdd=cdrom /* hdd = "slave" on second interface */ |
| 124 | |
| 125 | For example, a GW2000 system might have a hard drive on the primary |
| 126 | interface (/dev/hda) and an IDE cdrom drive on the secondary interface |
| 127 | (/dev/hdc). To mount a CD in the cdrom drive, one would use something like: |
| 128 | |
| 129 | ln -sf /dev/hdc /dev/cdrom |
| 130 | mkdir /mnt/cdrom |
| 131 | mount /dev/cdrom /mnt/cdrom -t iso9660 -o ro |
| 132 | |
| 133 | If, after doing all of the above, mount doesn't work and you see |
| 134 | errors from the driver (with dmesg) complaining about `status=0xff', |
| 135 | this means that the hardware is not responding to the driver's attempts |
| 136 | to read it. One of the following is probably the problem: |
| 137 | |
| 138 | - Your hardware is broken. |
| 139 | |
| 140 | - You are using the wrong address for the device, or you have the |
| 141 | drive jumpered wrong. Review the configuration instructions above. |
| 142 | |
| 143 | - Your IDE controller requires some nonstandard initialization sequence |
| 144 | before it will work properly. If this is the case, there will often |
| 145 | be a separate MS-DOS driver just for the controller. IDE interfaces |
| 146 | on sound cards usually fall into this category. Such configurations |
| 147 | can often be made to work by first booting MS-DOS, loading the |
| 148 | appropriate drivers, and then warm-booting linux (without powering |
| 149 | off). This can be automated using loadlin in the MS-DOS autoexec. |
| 150 | |
| 151 | If you always get timeout errors, interrupts from the drive are probably |
| 152 | not making it to the host. Check how you have the hardware jumpered |
| 153 | and make sure it matches what the driver expects (see the configuration |
| 154 | instructions above). If you have a PCI system, also check the BIOS |
| 155 | setup; I've had one report of a system which was shipped with IRQ 15 |
| 156 | disabled by the BIOS. |
| 157 | |
| 158 | The kernel is able to execute binaries directly off of the cdrom, |
| 159 | provided it is mounted with the default block size of 1024 (as above). |
| 160 | |
| 161 | Please pass on any feedback on any of this stuff to the maintainer, |
| 162 | whose address can be found in linux/MAINTAINERS. |
| 163 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 164 | The IDE driver is modularized. The high level disk/CD-ROM/tape/floppy |
| 165 | drivers can always be compiled as loadable modules, the chipset drivers |
| 166 | can only be compiled into the kernel, and the core code (ide.c) can be |
| 167 | compiled as a loadable module provided no chipset support is needed. |
| 168 | |
| 169 | When using ide.c as a module in combination with kmod, add: |
| 170 | |
| 171 | alias block-major-3 ide-probe |
| 172 | |
| 173 | to /etc/modprobe.conf. |
| 174 | |
| 175 | When ide.c is used as a module, you can pass command line parameters to the |
| 176 | driver using the "options=" keyword to insmod, while replacing any ',' with |
| 177 | ';'. For example: |
| 178 | |
Bartlomiej Zolnierkiewicz | 9a0e77f | 2008-04-18 00:46:24 +0200 | [diff] [blame] | 179 | insmod ide.o options="hda=nodma hdb=nodma" |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 180 | |
| 181 | |
| 182 | ================================================================================ |
| 183 | |
| 184 | Summary of ide driver parameters for kernel command line |
| 185 | -------------------------------------------------------- |
| 186 | |
Bartlomiej Zolnierkiewicz | ad1c53b | 2008-03-22 16:40:21 +0100 | [diff] [blame] | 187 | "hdx=" is recognized for all "x" from "a" to "u", such as "hdc". |
Randy Dunlap | 331a5ad | 2008-03-07 21:53:50 +0100 | [diff] [blame] | 188 | |
Bartlomiej Zolnierkiewicz | ad1c53b | 2008-03-22 16:40:21 +0100 | [diff] [blame] | 189 | "idex=" is recognized for all "x" from "0" to "9", such as "ide1". |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 190 | |
| 191 | "hdx=noprobe" : drive may be present, but do not probe for it |
Randy Dunlap | 331a5ad | 2008-03-07 21:53:50 +0100 | [diff] [blame] | 192 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 193 | "hdx=none" : drive is NOT present, ignore cmos and do not probe |
Randy Dunlap | 331a5ad | 2008-03-07 21:53:50 +0100 | [diff] [blame] | 194 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 195 | "hdx=nowerr" : ignore the WRERR_STAT bit on this drive |
Randy Dunlap | 331a5ad | 2008-03-07 21:53:50 +0100 | [diff] [blame] | 196 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 197 | "hdx=cdrom" : drive is present, and is a cdrom drive |
Randy Dunlap | 331a5ad | 2008-03-07 21:53:50 +0100 | [diff] [blame] | 198 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 199 | "hdx=cyl,head,sect" : disk drive is present, with specified geometry |
| 200 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 201 | "hdx=autotune" : driver will attempt to tune interface speed |
| 202 | to the fastest PIO mode supported, |
| 203 | if possible for this drive only. |
| 204 | Not fully supported by all chipset types, |
| 205 | and quite likely to cause trouble with |
| 206 | older/odd IDE drives. |
| 207 | |
Bartlomiej Zolnierkiewicz | c223701 | 2007-10-16 22:29:58 +0200 | [diff] [blame] | 208 | "hdx=nodma" : disallow DMA |
| 209 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 210 | "idebus=xx" : inform IDE driver of VESA/PCI bus speed in MHz, |
| 211 | where "xx" is between 20 and 66 inclusive, |
| 212 | used when tuning chipset PIO modes. |
| 213 | For PCI bus, 25 is correct for a P75 system, |
| 214 | 30 is correct for P90,P120,P180 systems, |
| 215 | and 33 is used for P100,P133,P166 systems. |
| 216 | If in doubt, use idebus=33 for PCI. |
| 217 | As for VLB, it is safest to not specify it. |
| 218 | Bigger values are safer than smaller ones. |
| 219 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 220 | "idex=serialize" : do not overlap operations on idex. Please note |
| 221 | that you will have to specify this option for |
Matt LaPlante | d6bc8ac | 2006-10-03 22:54:15 +0200 | [diff] [blame] | 222 | both the respective primary and secondary channel |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 223 | to take effect. |
| 224 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 225 | "idex=reset" : reset interface after probe |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 226 | |
| 227 | "idex=ata66" : informs the interface that it has an 80c cable |
| 228 | for chipsets that are ATA-66 capable, but the |
| 229 | ability to bit test for detection is currently |
| 230 | unknown. |
| 231 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 232 | "ide=doubler" : probe/support IDE doublers on Amiga |
| 233 | |
| 234 | There may be more options than shown -- use the source, Luke! |
| 235 | |
| 236 | Everything else is rejected with a "BAD OPTION" message. |
| 237 | |
Bartlomiej Zolnierkiewicz | 8491388 | 2007-03-03 17:48:55 +0100 | [diff] [blame] | 238 | For legacy IDE VLB host drivers (ali14xx/dtc2278/ht6560b/qd65xx/umc8672) |
| 239 | you need to explicitly enable probing by using "probe" kernel parameter, |
| 240 | i.e. to enable probing for ALI M14xx chipsets (ali14xx host driver) use: |
| 241 | |
| 242 | * "ali14xx.probe" boot option when ali14xx driver is built-in the kernel |
| 243 | |
| 244 | * "probe" module parameter when ali14xx driver is compiled as module |
| 245 | ("modprobe ali14xx probe") |
| 246 | |
Bartlomiej Zolnierkiewicz | ade2daf | 2008-01-26 20:13:07 +0100 | [diff] [blame] | 247 | Also for legacy CMD640 host driver (cmd640) you need to use "probe_vlb" |
| 248 | kernel paremeter to enable probing for VLB version of the chipset (PCI ones |
| 249 | are detected automatically). |
| 250 | |
Bartlomiej Zolnierkiewicz | ffd4f6f | 2008-04-18 00:46:34 +0200 | [diff] [blame^] | 251 | You also need to use "probe" kernel parameter for ide-4drives driver |
| 252 | (support for IDE generic chipset with four drives on one port). |
| 253 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 254 | ================================================================================ |
| 255 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 256 | Some Terminology |
| 257 | ---------------- |
| 258 | IDE = Integrated Drive Electronics, meaning that each drive has a built-in |
| 259 | controller, which is why an "IDE interface card" is not a "controller card". |
| 260 | |
| 261 | ATA = AT (the old IBM 286 computer) Attachment Interface, a draft American |
| 262 | National Standard for connecting hard drives to PCs. This is the official |
| 263 | name for "IDE". |
| 264 | |
| 265 | The latest standards define some enhancements, known as the ATA-6 spec, |
| 266 | which grew out of vendor-specific "Enhanced IDE" (EIDE) implementations. |
| 267 | |
| 268 | ATAPI = ATA Packet Interface, a new protocol for controlling the drives, |
| 269 | similar to SCSI protocols, created at the same time as the ATA2 standard. |
| 270 | ATAPI is currently used for controlling CDROM, TAPE and FLOPPY (ZIP or |
| 271 | LS120/240) devices, removable R/W cartridges, and for high capacity hard disk |
| 272 | drives. |
| 273 | |
| 274 | mlord@pobox.com |
| 275 | -- |
| 276 | |
| 277 | Wed Apr 17 22:52:44 CEST 2002 edited by Marcin Dalecki, the current |
| 278 | maintainer. |
| 279 | |
Matt LaPlante | 4ae0edc | 2006-11-30 04:58:40 +0100 | [diff] [blame] | 280 | Wed Aug 20 22:31:29 CEST 2003 updated ide boot options to current ide.c |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 281 | comments at 2.6.0-test4 time. Maciej Soltysiak <solt@dns.toxicfilms.tv> |