| |
| Information regarding the Enhanced IDE drive in Linux 2.6 |
| |
| ============================================================================== |
| |
| |
| The hdparm utility can be used to control various IDE features on a |
| running system. It is packaged separately. Please Look for it on popular |
| linux FTP sites. |
| |
| |
| |
| *** IMPORTANT NOTICES: BUGGY IDE CHIPSETS CAN CORRUPT DATA!! |
| *** ================= |
| *** PCI versions of the CMD640 and RZ1000 interfaces are now detected |
| *** automatically at startup when PCI BIOS support is configured. |
| *** |
| *** Linux disables the "prefetch" ("readahead") mode of the RZ1000 |
| *** to prevent data corruption possible due to hardware design flaws. |
| *** |
| *** For the CMD640, linux disables "IRQ unmasking" (hdparm -u1) on any |
| *** drive for which the "prefetch" mode of the CMD640 is turned on. |
| *** If "prefetch" is disabled (hdparm -p8), then "IRQ unmasking" can be |
| *** used again. |
| *** |
| *** For the CMD640, linux disables "32bit I/O" (hdparm -c1) on any drive |
| *** for which the "prefetch" mode of the CMD640 is turned off. |
| *** If "prefetch" is enabled (hdparm -p9), then "32bit I/O" can be |
| *** used again. |
| *** |
| *** The CMD640 is also used on some Vesa Local Bus (VLB) cards, and is *NOT* |
| *** automatically detected by Linux. For safe, reliable operation with such |
| *** interfaces, one *MUST* use the "cmd640.probe_vlb" kernel option. |
| *** |
| *** Use of the "serialize" option is no longer necessary. |
| |
| ================================================================================ |
| Common pitfalls: |
| |
| - 40-conductor IDE cables are capable of transferring data in DMA modes up to |
| udma2, but no faster. |
| |
| - If possible devices should be attached to separate channels if they are |
| available. Typically the disk on the first and CD-ROM on the second. |
| |
| - If you mix devices on the same cable, please consider using similar devices |
| in respect of the data transfer mode they support. |
| |
| - Even better try to stick to the same vendor and device type on the same |
| cable. |
| |
| ================================================================================ |
| |
| This is the multiple IDE interface driver, as evolved from hd.c. |
| |
| It supports up to 9 IDE interfaces per default, on one or more IRQs (usually |
| 14 & 15). There can be up to two drives per interface, as per the ATA-6 spec. |
| |
| Primary: ide0, port 0x1f0; major=3; hda is minor=0; hdb is minor=64 |
| Secondary: ide1, port 0x170; major=22; hdc is minor=0; hdd is minor=64 |
| Tertiary: ide2, port 0x1e8; major=33; hde is minor=0; hdf is minor=64 |
| Quaternary: ide3, port 0x168; major=34; hdg is minor=0; hdh is minor=64 |
| fifth.. ide4, usually PCI, probed |
| sixth.. ide5, usually PCI, probed |
| |
| To access devices on interfaces > ide0, device entries please make sure that |
| device files for them are present in /dev. If not, please create such |
| entries, by using /dev/MAKEDEV. |
| |
| This driver automatically probes for most IDE interfaces (including all PCI |
| ones), for the drives/geometries attached to those interfaces, and for the IRQ |
| lines being used by the interfaces (normally 14, 15 for ide0/ide1). |
| |
| For special cases, interfaces may be specified using kernel "command line" |
| options. For example, |
| |
| ide3=0x168,0x36e,10 /* ioports 0x168-0x16f,0x36e, irq 10 */ |
| |
| Normally the irq number need not be specified, as ide.c will probe for it: |
| |
| ide3=0x168,0x36e /* ioports 0x168-0x16f,0x36e */ |
| |
| The standard port, and irq values are these: |
| |
| ide0=0x1f0,0x3f6,14 |
| ide1=0x170,0x376,15 |
| ide2=0x1e8,0x3ee,11 |
| ide3=0x168,0x36e,10 |
| |
| Note that the first parameter reserves 8 contiguous ioports, whereas the |
| second value denotes a single ioport. If in doubt, do a 'cat /proc/ioports'. |
| |
| In all probability the device uses these ports and IRQs if it is attached |
| to the appropriate ide channel. Pass the parameter for the correct ide |
| channel to the kernel, as explained above. |
| |
| Any number of interfaces may share a single IRQ if necessary, at a slight |
| performance penalty, whether on separate cards or a single VLB card. |
| The IDE driver automatically detects and handles this. However, this may |
| or may not be harmful to your hardware.. two or more cards driving the same IRQ |
| can potentially burn each other's bus driver, though in practice this |
| seldom occurs. Be careful, and if in doubt, don't do it! |
| |
| Drives are normally found by auto-probing and/or examining the CMOS/BIOS data. |
| For really weird situations, the apparent (fdisk) geometry can also be specified |
| on the kernel "command line" using LILO. The format of such lines is: |
| |
| hdx=cyls,heads,sects |
| or hdx=cdrom |
| |
| where hdx can be any of hda through hdh, Three values are required |
| (cyls,heads,sects). For example: |
| |
| hdc=1050,32,64 hdd=cdrom |
| |
| either {hda,hdb} or {hdc,hdd}. The results of successful auto-probing may |
| override the physical geometry/irq specified, though the "original" geometry |
| may be retained as the "logical" geometry for partitioning purposes (fdisk). |
| |
| If the auto-probing during boot time confuses a drive (ie. the drive works |
| with hd.c but not with ide.c), then an command line option may be specified |
| for each drive for which you'd like the drive to skip the hardware |
| probe/identification sequence. For example: |
| |
| hdb=noprobe |
| or |
| hdc=768,16,32 |
| hdc=noprobe |
| |
| Note that when only one IDE device is attached to an interface, it should be |
| jumpered as "single" or "master", *not* "slave". Many folks have had |
| "trouble" with cdroms because of this requirement, so the driver now probes |
| for both units, though success is more likely when the drive is jumpered |
| correctly. |
| |
| Courtesy of Scott Snyder and others, the driver supports ATAPI cdrom drives |
| such as the NEC-260 and the new MITSUMI triple/quad speed drives. |
| Such drives will be identified at boot time, just like a hard disk. |
| |
| If for some reason your cdrom drive is *not* found at boot time, you can force |
| the probe to look harder by supplying a kernel command line parameter |
| via LILO, such as: |
| |
| hdc=cdrom /* hdc = "master" on second interface */ |
| or |
| hdd=cdrom /* hdd = "slave" on second interface */ |
| |
| For example, a GW2000 system might have a hard drive on the primary |
| interface (/dev/hda) and an IDE cdrom drive on the secondary interface |
| (/dev/hdc). To mount a CD in the cdrom drive, one would use something like: |
| |
| ln -sf /dev/hdc /dev/cdrom |
| mkdir /mnt/cdrom |
| mount /dev/cdrom /mnt/cdrom -t iso9660 -o ro |
| |
| If, after doing all of the above, mount doesn't work and you see |
| errors from the driver (with dmesg) complaining about `status=0xff', |
| this means that the hardware is not responding to the driver's attempts |
| to read it. One of the following is probably the problem: |
| |
| - Your hardware is broken. |
| |
| - You are using the wrong address for the device, or you have the |
| drive jumpered wrong. Review the configuration instructions above. |
| |
| - Your IDE controller requires some nonstandard initialization sequence |
| before it will work properly. If this is the case, there will often |
| be a separate MS-DOS driver just for the controller. IDE interfaces |
| on sound cards usually fall into this category. Such configurations |
| can often be made to work by first booting MS-DOS, loading the |
| appropriate drivers, and then warm-booting linux (without powering |
| off). This can be automated using loadlin in the MS-DOS autoexec. |
| |
| If you always get timeout errors, interrupts from the drive are probably |
| not making it to the host. Check how you have the hardware jumpered |
| and make sure it matches what the driver expects (see the configuration |
| instructions above). If you have a PCI system, also check the BIOS |
| setup; I've had one report of a system which was shipped with IRQ 15 |
| disabled by the BIOS. |
| |
| The kernel is able to execute binaries directly off of the cdrom, |
| provided it is mounted with the default block size of 1024 (as above). |
| |
| Please pass on any feedback on any of this stuff to the maintainer, |
| whose address can be found in linux/MAINTAINERS. |
| |
| Note that if BOTH hd.c and ide.c are configured into the kernel, |
| hd.c will normally be allowed to control the primary IDE interface. |
| This is useful for older hardware that may be incompatible with ide.c, |
| and still allows newer hardware to run on the 2nd/3rd/4th IDE ports |
| under control of ide.c. To have ide.c also "take over" the primary |
| IDE port in this situation, use the "command line" parameter: ide0=0x1f0 |
| |
| The IDE driver is modularized. The high level disk/CD-ROM/tape/floppy |
| drivers can always be compiled as loadable modules, the chipset drivers |
| can only be compiled into the kernel, and the core code (ide.c) can be |
| compiled as a loadable module provided no chipset support is needed. |
| |
| When using ide.c as a module in combination with kmod, add: |
| |
| alias block-major-3 ide-probe |
| |
| to /etc/modprobe.conf. |
| |
| When ide.c is used as a module, you can pass command line parameters to the |
| driver using the "options=" keyword to insmod, while replacing any ',' with |
| ';'. For example: |
| |
| insmod ide.o options="ide0=serialize ide1=serialize ide2=0x1e8;0x3ee;11" |
| |
| |
| ================================================================================ |
| |
| Summary of ide driver parameters for kernel command line |
| -------------------------------------------------------- |
| |
| "hdx=" is recognized for all "x" from "a" to "u", such as "hdc". |
| |
| "idex=" is recognized for all "x" from "0" to "9", such as "ide1". |
| |
| "hdx=noprobe" : drive may be present, but do not probe for it |
| |
| "hdx=none" : drive is NOT present, ignore cmos and do not probe |
| |
| "hdx=nowerr" : ignore the WRERR_STAT bit on this drive |
| |
| "hdx=cdrom" : drive is present, and is a cdrom drive |
| |
| "hdx=cyl,head,sect" : disk drive is present, with specified geometry |
| |
| "hdx=autotune" : driver will attempt to tune interface speed |
| to the fastest PIO mode supported, |
| if possible for this drive only. |
| Not fully supported by all chipset types, |
| and quite likely to cause trouble with |
| older/odd IDE drives. |
| |
| "hdx=nodma" : disallow DMA |
| |
| "idebus=xx" : inform IDE driver of VESA/PCI bus speed in MHz, |
| where "xx" is between 20 and 66 inclusive, |
| used when tuning chipset PIO modes. |
| For PCI bus, 25 is correct for a P75 system, |
| 30 is correct for P90,P120,P180 systems, |
| and 33 is used for P100,P133,P166 systems. |
| If in doubt, use idebus=33 for PCI. |
| As for VLB, it is safest to not specify it. |
| Bigger values are safer than smaller ones. |
| |
| "idex=base" : probe for an interface at the addr specified, |
| where "base" is usually 0x1f0 or 0x170 |
| and "ctl" is assumed to be "base"+0x206 |
| |
| "idex=base,ctl" : specify both base and ctl |
| |
| "idex=base,ctl,irq" : specify base, ctl, and irq number |
| |
| "idex=serialize" : do not overlap operations on idex. Please note |
| that you will have to specify this option for |
| both the respective primary and secondary channel |
| to take effect. |
| |
| "idex=four" : four drives on idex and ide(x^1) share same ports |
| |
| "idex=reset" : reset interface after probe |
| |
| "idex=ata66" : informs the interface that it has an 80c cable |
| for chipsets that are ATA-66 capable, but the |
| ability to bit test for detection is currently |
| unknown. |
| |
| "ide=reverse" : formerly called to pci sub-system, but now local. |
| |
| "ide=doubler" : probe/support IDE doublers on Amiga |
| |
| There may be more options than shown -- use the source, Luke! |
| |
| Everything else is rejected with a "BAD OPTION" message. |
| |
| For legacy IDE VLB host drivers (ali14xx/dtc2278/ht6560b/qd65xx/umc8672) |
| you need to explicitly enable probing by using "probe" kernel parameter, |
| i.e. to enable probing for ALI M14xx chipsets (ali14xx host driver) use: |
| |
| * "ali14xx.probe" boot option when ali14xx driver is built-in the kernel |
| |
| * "probe" module parameter when ali14xx driver is compiled as module |
| ("modprobe ali14xx probe") |
| |
| Also for legacy CMD640 host driver (cmd640) you need to use "probe_vlb" |
| kernel paremeter to enable probing for VLB version of the chipset (PCI ones |
| are detected automatically). |
| |
| ================================================================================ |
| |
| Some Terminology |
| ---------------- |
| IDE = Integrated Drive Electronics, meaning that each drive has a built-in |
| controller, which is why an "IDE interface card" is not a "controller card". |
| |
| ATA = AT (the old IBM 286 computer) Attachment Interface, a draft American |
| National Standard for connecting hard drives to PCs. This is the official |
| name for "IDE". |
| |
| The latest standards define some enhancements, known as the ATA-6 spec, |
| which grew out of vendor-specific "Enhanced IDE" (EIDE) implementations. |
| |
| ATAPI = ATA Packet Interface, a new protocol for controlling the drives, |
| similar to SCSI protocols, created at the same time as the ATA2 standard. |
| ATAPI is currently used for controlling CDROM, TAPE and FLOPPY (ZIP or |
| LS120/240) devices, removable R/W cartridges, and for high capacity hard disk |
| drives. |
| |
| mlord@pobox.com |
| -- |
| |
| Wed Apr 17 22:52:44 CEST 2002 edited by Marcin Dalecki, the current |
| maintainer. |
| |
| Wed Aug 20 22:31:29 CEST 2003 updated ide boot options to current ide.c |
| comments at 2.6.0-test4 time. Maciej Soltysiak <solt@dns.toxicfilms.tv> |