| 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 | 4706a7e | 2008-04-27 15:38:30 +0200 | [diff] [blame] | 85 | 	ide_core.chs=[interface_number.device_number]:cyls,heads,sects | 
 | 86 | or	ide_core.cdrom=[interface_number.device_number] | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 87 |  | 
| Bartlomiej Zolnierkiewicz | 4706a7e | 2008-04-27 15:38:30 +0200 | [diff] [blame] | 88 | For example: | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 89 |  | 
| Bartlomiej Zolnierkiewicz | 4706a7e | 2008-04-27 15:38:30 +0200 | [diff] [blame] | 90 | 	ide_core.chs=1.0:1050,32,64  ide_core.cdrom=1.1 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 91 |  | 
| Bartlomiej Zolnierkiewicz | 4706a7e | 2008-04-27 15:38:30 +0200 | [diff] [blame] | 92 | The results of successful auto-probing may override the physical geometry/irq | 
 | 93 | specified, though the "original" geometry may be retained as the "logical" | 
 | 94 | geometry for partitioning purposes (fdisk). | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 95 |  | 
 | 96 | If the auto-probing during boot time confuses a drive (ie. the drive works | 
 | 97 | with hd.c but not with ide.c), then an command line option may be specified | 
 | 98 | for each drive for which you'd like the drive to skip the hardware | 
 | 99 | probe/identification sequence.  For example: | 
 | 100 |  | 
| Bartlomiej Zolnierkiewicz | 6e87543 | 2008-04-27 15:38:30 +0200 | [diff] [blame] | 101 | 	ide_core.noprobe=0.1 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 102 | or | 
| Bartlomiej Zolnierkiewicz | 4706a7e | 2008-04-27 15:38:30 +0200 | [diff] [blame] | 103 | 	ide_core.chs=1.0:768,16,32 | 
| Bartlomiej Zolnierkiewicz | 6e87543 | 2008-04-27 15:38:30 +0200 | [diff] [blame] | 104 | 	ide_core.noprobe=1.0 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 105 |  | 
 | 106 | Note that when only one IDE device is attached to an interface, it should be | 
 | 107 | jumpered as "single" or "master", *not* "slave".  Many folks have had | 
 | 108 | "trouble" with cdroms because of this requirement, so the driver now probes | 
 | 109 | for both units, though success is more likely when the drive is jumpered | 
 | 110 | correctly. | 
 | 111 |  | 
 | 112 | Courtesy of Scott Snyder and others, the driver supports ATAPI cdrom drives | 
 | 113 | such as the NEC-260 and the new MITSUMI triple/quad speed drives. | 
 | 114 | Such drives will be identified at boot time, just like a hard disk. | 
 | 115 |  | 
 | 116 | If for some reason your cdrom drive is *not* found at boot time, you can force | 
 | 117 | the probe to look harder by supplying a kernel command line parameter | 
 | 118 | via LILO, such as: | 
 | 119 |  | 
| Bartlomiej Zolnierkiewicz | 4706a7e | 2008-04-27 15:38:30 +0200 | [diff] [blame] | 120 | 	ide_core.cdrom=1.0	/* "master" on second interface (hdc) */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 121 | or | 
| Bartlomiej Zolnierkiewicz | 4706a7e | 2008-04-27 15:38:30 +0200 | [diff] [blame] | 122 | 	ide_core.cdrom=1.1	/* "slave" on second interface (hdd) */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 123 |  | 
 | 124 | For example, a GW2000 system might have a hard drive on the primary | 
 | 125 | interface (/dev/hda) and an IDE cdrom drive on the secondary interface | 
 | 126 | (/dev/hdc).  To mount a CD in the cdrom drive, one would use something like: | 
 | 127 |  | 
 | 128 | 	ln -sf /dev/hdc /dev/cdrom | 
 | 129 | 	mkdir /mnt/cdrom | 
 | 130 | 	mount /dev/cdrom /mnt/cdrom -t iso9660 -o ro | 
 | 131 |  | 
 | 132 | If, after doing all of the above, mount doesn't work and you see | 
 | 133 | errors from the driver (with dmesg) complaining about `status=0xff', | 
 | 134 | this means that the hardware is not responding to the driver's attempts | 
 | 135 | to read it.  One of the following is probably the problem: | 
 | 136 |  | 
 | 137 |   - Your hardware is broken. | 
 | 138 |  | 
 | 139 |   - You are using the wrong address for the device, or you have the | 
 | 140 |     drive jumpered wrong.  Review the configuration instructions above. | 
 | 141 |  | 
 | 142 |   - Your IDE controller requires some nonstandard initialization sequence | 
 | 143 |     before it will work properly.  If this is the case, there will often | 
 | 144 |     be a separate MS-DOS driver just for the controller.  IDE interfaces | 
 | 145 |     on sound cards usually fall into this category.  Such configurations | 
 | 146 |     can often be made to work by first booting MS-DOS, loading the | 
 | 147 |     appropriate drivers, and then warm-booting linux (without powering | 
 | 148 |     off).  This can be automated using loadlin in the MS-DOS autoexec. | 
 | 149 |  | 
 | 150 | If you always get timeout errors, interrupts from the drive are probably | 
 | 151 | not making it to the host.  Check how you have the hardware jumpered | 
 | 152 | and make sure it matches what the driver expects (see the configuration | 
 | 153 | instructions above).  If you have a PCI system, also check the BIOS | 
 | 154 | setup; I've had one report of a system which was shipped with IRQ 15 | 
 | 155 | disabled by the BIOS. | 
 | 156 |  | 
 | 157 | The kernel is able to execute binaries directly off of the cdrom, | 
 | 158 | provided it is mounted with the default block size of 1024 (as above). | 
 | 159 |  | 
 | 160 | Please pass on any feedback on any of this stuff to the maintainer, | 
 | 161 | whose address can be found in linux/MAINTAINERS. | 
 | 162 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 163 | The IDE driver is modularized.  The high level disk/CD-ROM/tape/floppy | 
 | 164 | drivers can always be compiled as loadable modules, the chipset drivers | 
 | 165 | can only be compiled into the kernel, and the core code (ide.c) can be | 
 | 166 | compiled as a loadable module provided no chipset support is needed. | 
 | 167 |  | 
 | 168 | When using ide.c as a module in combination with kmod, add: | 
 | 169 |  | 
 | 170 | 	alias block-major-3 ide-probe | 
 | 171 |  | 
| Lucas De Marchi | 970e248 | 2012-03-30 13:37:16 -0700 | [diff] [blame] | 172 | to a configuration file in /etc/modprobe.d/. | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 173 |  | 
 | 174 | When ide.c is used as a module, you can pass command line parameters to the | 
 | 175 | driver using the "options=" keyword to insmod, while replacing any ',' with | 
| Bartlomiej Zolnierkiewicz | 6e87543 | 2008-04-27 15:38:30 +0200 | [diff] [blame] | 176 | ';'. | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 177 |  | 
 | 178 |  | 
 | 179 | ================================================================================ | 
 | 180 |  | 
 | 181 | Summary of ide driver parameters for kernel command line | 
 | 182 | -------------------------------------------------------- | 
 | 183 |  | 
| Bartlomiej Zolnierkiewicz | 8491388 | 2007-03-03 17:48:55 +0100 | [diff] [blame] | 184 | For legacy IDE VLB host drivers (ali14xx/dtc2278/ht6560b/qd65xx/umc8672) | 
 | 185 | you need to explicitly enable probing by using "probe" kernel parameter, | 
 | 186 | i.e. to enable probing for ALI M14xx chipsets (ali14xx host driver) use: | 
 | 187 |  | 
 | 188 | * "ali14xx.probe" boot option when ali14xx driver is built-in the kernel | 
 | 189 |  | 
 | 190 | * "probe" module parameter when ali14xx driver is compiled as module | 
 | 191 |   ("modprobe ali14xx probe") | 
 | 192 |  | 
| Bartlomiej Zolnierkiewicz | ade2daf | 2008-01-26 20:13:07 +0100 | [diff] [blame] | 193 | Also for legacy CMD640 host driver (cmd640) you need to use "probe_vlb" | 
 | 194 | kernel paremeter to enable probing for VLB version of the chipset (PCI ones | 
 | 195 | are detected automatically). | 
 | 196 |  | 
| Bartlomiej Zolnierkiewicz | ffd4f6f | 2008-04-18 00:46:34 +0200 | [diff] [blame] | 197 | You also need to use "probe" kernel parameter for ide-4drives driver | 
 | 198 | (support for IDE generic chipset with four drives on one port). | 
 | 199 |  | 
| Bartlomiej Zolnierkiewicz | 9dcba7f | 2008-04-27 15:38:30 +0200 | [diff] [blame] | 200 | To enable support for IDE doublers on Amiga use "doubler" kernel parameter | 
 | 201 | for gayle host driver (i.e. "gayle.doubler" if the driver is built-in). | 
 | 202 |  | 
| Bartlomiej Zolnierkiewicz | 9fd91d9 | 2008-04-27 15:38:23 +0200 | [diff] [blame] | 203 | To force ignoring cable detection (this should be needed only if you're using | 
 | 204 | short 40-wires cable which cannot be automatically detected - if this is not | 
 | 205 | a case please report it as a bug instead) use "ignore_cable" kernel parameter: | 
 | 206 |  | 
 | 207 | * "ide_core.ignore_cable=[interface_number]" boot option if IDE is built-in | 
 | 208 |   (i.e. "ide_core.ignore_cable=1" to force ignoring cable for "ide1") | 
 | 209 |  | 
 | 210 | * "ignore_cable=[interface_number]" module parameter (for ide_core module) | 
 | 211 |   if IDE is compiled as module | 
 | 212 |  | 
| Bartlomiej Zolnierkiewicz | 6e87543 | 2008-04-27 15:38:30 +0200 | [diff] [blame] | 213 | Other kernel parameters for ide_core are: | 
 | 214 |  | 
 | 215 | * "nodma=[interface_number.device_number]" to disallow DMA for a device | 
 | 216 |  | 
 | 217 | * "noflush=[interface_number.device_number]" to disable flush requests | 
 | 218 |  | 
| Bartlomiej Zolnierkiewicz | 075affc | 2009-06-07 13:52:52 +0200 | [diff] [blame] | 219 | * "nohpa=[interface_number.device_number]" to disable Host Protected Area | 
 | 220 |  | 
| Bartlomiej Zolnierkiewicz | 6e87543 | 2008-04-27 15:38:30 +0200 | [diff] [blame] | 221 | * "noprobe=[interface_number.device_number]" to skip probing | 
 | 222 |  | 
 | 223 | * "nowerr=[interface_number.device_number]" to ignore the WRERR_STAT bit | 
 | 224 |  | 
| Bartlomiej Zolnierkiewicz | 4706a7e | 2008-04-27 15:38:30 +0200 | [diff] [blame] | 225 | * "cdrom=[interface_number.device_number]" to force device as a CD-ROM | 
 | 226 |  | 
 | 227 | * "chs=[interface_number.device_number]" to force device as a disk (using CHS) | 
 | 228 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 229 | ================================================================================ | 
 | 230 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 231 | Some Terminology | 
 | 232 | ---------------- | 
 | 233 | IDE = Integrated Drive Electronics, meaning that each drive has a built-in | 
 | 234 | controller, which is why an "IDE interface card" is not a "controller card". | 
 | 235 |  | 
 | 236 | ATA = AT (the old IBM 286 computer) Attachment Interface, a draft American | 
 | 237 | National Standard for connecting hard drives to PCs.  This is the official | 
 | 238 | name for "IDE". | 
 | 239 |  | 
 | 240 | The latest standards define some enhancements, known as the ATA-6 spec, | 
 | 241 | which grew out of vendor-specific "Enhanced IDE" (EIDE) implementations. | 
 | 242 |  | 
 | 243 | ATAPI = ATA Packet Interface, a new protocol for controlling the drives, | 
 | 244 | similar to SCSI protocols, created at the same time as the ATA2 standard. | 
 | 245 | ATAPI is currently used for controlling CDROM, TAPE and FLOPPY (ZIP or | 
 | 246 | LS120/240) devices, removable R/W cartridges, and for high capacity hard disk | 
 | 247 | drives. | 
 | 248 |  | 
 | 249 | mlord@pobox.com | 
 | 250 | -- | 
 | 251 |  | 
 | 252 | Wed Apr 17 22:52:44 CEST 2002 edited by Marcin Dalecki, the current | 
 | 253 | maintainer. | 
 | 254 |  | 
| Matt LaPlante | 4ae0edc | 2006-11-30 04:58:40 +0100 | [diff] [blame] | 255 | 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] | 256 | comments at 2.6.0-test4 time. Maciej Soltysiak <solt@dns.toxicfilms.tv> |