Problems with SATA and Linux
Contents
|
Some ThinkPad models use an Intel ICH6-M SATA/PATA controller for the system hard disk. This causes several complications for Linux installation. The following lists these problems and known workarounds. Note that the details are often version- and distribution-specific. Models using a SATA disk interfaceModels using a SATA controller and a SATA system disk: Models using a SATA controller and a PATA (IDE) system disk with a SATA-to-PATA bridge:
NOTE!
Some of these problems (namely SMART support, power management and disk information) are solved in Linux 2.6.15 with the inclusion of libata pass-through. See the SATA driver features, software status and hardware status.
|
Hang on resume from suspend to RAM
Linux kernels prior to 2.6.16 do not support suspend and resume for SATA devices. As a result, the machine hangs upon the first disk access after resume. A kernel patch (LKML posting) fixes this by adding SATA power management support.
Kernel 2.6.16 and later fixes this problem for most systems. The Thinkpad T60 and X60s still need some patches to get resume working using 2.6.16, see here. The T60p resumes properly with 2.6.17-rc6, the T60 and X60 should also. You need to enable ata_piix and disable AHCI in the bios. The latest fedora (FC5) 2.6.17 kernel seems to have fixed the resume problem on the T60p, still need to disable AHCI though. Applying this FC5 patch makes suspend-to-ram work with AHCI enabled.
Patches
- Patch for kernel 2.6.12
- Patch for kernel 2.6.13-rc5
- Patch for kernel 2.6.14
- Patch for kernel 2.6.15-rc4
- Patch for kernels 2.6.15-rc6 through 2.6.15
Some distributions already include this patch (e.g., Ubuntu Breezy, Gentoo's gentoo-sources 2.6.15-r1), but some don't (e.g., Fedora 4). If your distribution doesn't include the patch, you will need to compile your own kernel with this patch included.
Links
- RedHat Bugzilla bug 169201: "SATA drives fail on laptop suspend"
- Fix to libata.h recommended on LKML in case you get "ata: abnormal state 0x80 on port 0x1F7"
- RedHat Bugzilla bug 183138": "SATA failure after pm-suspend/resume ata1: handling error/timeout"
Failed resume from suspend to disk
Suspend to disk (using swsusp or Software Suspend 2) needs to load the memory image from the SATA disk. For this to work, you either need an initrd with all the necessary SATA modules, or the SATA drivers compiled into the kernel.
DVD drive not recognized
The ata_piix SATA driver grabs ownership over the IDE ports when it is loaded, but (by default) does not support PATA ATAPI devices such as the Ultrabay optical drives. Thus, if the ide driver is compiled as a module and loaded after ata_piix, the DVD drive will not be recognized by either driver.
Either of the following configurations will work:
- For kernel 2.6.14 and newer: enable ATAPI support in the SATA system using
libata.atapi_enabled=1
(see below; this is experimental). - Compile IDE into the kernel (non-module).
- Compile both IDE and SATA as modules and make sure IDE is loaded first (the module is called 'ide_generic').
Note that the optical drive must be in the Ultrabay during system boot (Ultrabay device swapping is currently unsupported).
Problems with burning: cdrecord/wodim
No DMA on DVD drive
Using the IDE driver, DMA support cannot be enabled on an Ultrabay optical drive:
# hdparm -d1 /dev/hdc /dev/hdc: setting using_dma to 1 (on) HDIO_SET_DMA failed: Operation not permitted using_dma = 0 (off)
As a result, the optical drive is slow, and in particular, too slow to play video DVDs.
One workaround is to use employ the ata_piix driver (instead of the IDE driver) for the optical drive. This requires enabling the ATAPI support of the ata_piix driver, which is under active development and not yet stable. Using this will probably devour all your data and go on to eat all the food in your fridge. But if you have full backups and an empty fridge, do the following:
- Grab the latest kernel (must be 2.6.14 or newer; the relevant code is under active development).
- Do one of the following:
- Enable the ata_piix and libata drivers as built-in, and add
libata.atapi_enabled=1
to your kernel command line (e.g., in in /boot/grub/menu.lst). - Enable ata_piix and libata as modules (this is often the default) and add "options libata atapi_enabled=1" to your /etc/modprobe.conf (or the equivalent in your distribution).
- Note : if you are using a Debian Sid system, and want to use Debian precompiled kernels, then type the following command in a root shell :
- Enable the ata_piix and libata drivers as built-in, and add
# echo options libata atapi_enabled=1>/etc/modprobe.d/atapienable && update-initramfs -u
- Do one of the following:
- Disable the IDE system.
- Build the IDE driver as built-in (this is often the default) and add the
hdc=noprobe
kernel argument (e.g., in in /boot/grub/menu.lst). - Build the IDE driver as module and add "options ide hdc=noprobe" to your /etc/modprobe.conf (or the equivalent in your distribution).
- If you chose to use modules above, regenerate your initrd file.
If this doesn't work, use lspci -vn
to check whether one of the following chipsets is used in the Thinkpad:
PCI ID | Name |
---|---|
8086:7111 | Intel 82371AB/EB/MB PIIX4 IDE |
8086:24db | Intel 82801EB/ER (ICH5/ICH5R) IDE Controller |
8086:25a2 | Intel 6300ESB PATA Storage Controller |
If yes, enable support for these chipsets has to be enabled by setting
#define ATA_ENABLE_PATA
in include/linux/libata.h (and report your ThinkPad model in the discussion page).
There have been reports that DVD burning doesn't work under this configuration, but it seems to work with kernel 2.6.14 and later (tested on a ThinkPad T43 and T43p with a UltraBay Slim DVD Multi-Burner Plus).
Problem with kernel 2.6.16 kernel and suspend2 2.2.1
DVD access fails with kernel 2.6.16.* and suspend2 2.2.1. Thia is fixed by later versions of suspend2, or by deleting the 4000-libata-rollup-2616-rc3.patch (see this post notice by Alexander E. Patrakov).
Links
- RedHat Bugzilla bug 163418: "can't enable DMA on DVD drive"
No DMA on system hard disk
In recent Linux kernels, there are two modules capable of handling the ICH6 disk controller:
- ata_piix: the disk shows as /dev/sda and DMA is enabled.
- Generic IDE driver (ide-disk): the disk shows as /dev/hda and DMA is disabled.
The simplest way to enable DMA is to force the IDE driver to ignore the system hard disk by passing the hda=noprobe
kernel argument. The driver will then be handled by the ata_piix driver. Note that this will change its device name to /dev/sda (which may require changes in /etc/fstab and the boot loader) and may cause other problems as listed above.
(Observed on a ThinkPad T43 with Fedora Core kernel 2.6.13-1.1526_FC4.)
No SMART support
Prior to kernel 2.6.15, the Linux SATA system did not support SMART commands (e.g., via smartctl).
The necessary capability is "libata pass-through", which was incorporated into Linux 2.6.15-rc1 and later. A patch is available for older kernels:
- Kernel 2.6.12: http://rtr.ca/dell_i9300/kernel/kernel-2.6.12/03_libata_passthru.patch
- Kernel 2.6.13: http://rtr.ca/dell_i9300/kernel/kernel-2.6.13/02_libata_passthru.patch
- Kernel 2.6.14: http://www.foo.fh-furtwangen.de/~koenigr/02_libata_passthru.fixed.again.patch
- Kernel 2.6.14 with the above suspend-to-RAM patch: http://linux.spiney.org/system/files?file=02_libata_passthru.fixed.patch
After applying the patch, run smartctl with the "-d ata" parameter:
# smartctl -d ata -a /dev/sda
No disk power management
Prior to kernel 2.6.15, the Linux SATA system did not support power management commands on these models.
The above patches for SMART support resolves this, and in particular enables the following commands:
# hdparm -y
(spin down)# hdparm -S num
(automatic spin down timeout)# hdparm -B num
(advanced power management level)
Note that this command is still rejected:
# hdparm -M num
(acoustic management)
(Tested with patched kernels 2.6.13.1 and 2.6.12-4 and a 60GB 7200RPM disk model HTS726060M9AT00.)
Refer to How to make use of Harddisk Power Management features for details about using HD power management. Refer to Laptop-mode if you are interested into spinning down your HD.
No disk information
Prior to kernel 2.6.15, on these models the disk information could not be read by the standard commands such as:
# hdparm -i /dev/sda
# hdparm -I /dev/sda
The latter is fixed by the above patch for SMART support.
No swapping of UltraBay device
The ata_piix driver in mainline kernels does not yet support hot-swapping (or warm-swapping) of PATA devices. If you use a DVD or 2nd PATA HDD via the ata_piix driver, to swap them in or out you must power down the machine. This is scheduled to be fixed in Linux 2.6.18.
See How_to_hotswap_UltraBay_devices for further information and a pending solution.
If you use the ide driver for a PATA UltraBay device, hot-swapping might work using lt_hotswap, hdparm, idectl or hotswap (please report). However, since you use the ide driver, DMA will be disabled (see above).
Swapping of the UltraBay Slim Battery does work.
BIOS error 2010 on user-installed hard disk
While not a Linux issue, note that there is an issue with installing alternative PATA (IDE) hard disks as the system drive. Unless the disk is one of the few approved disks listed inside the BIOS, you will get an BIOS error 2010 during system boot, and the disk may operate unreliably. See Problem with non-ThinkPad hard disks.
RHEL3.0 Update 7 on T60p
RHEL3.0 Update 7 will install on a T60p, but you need to make an adjustment. Both uni-processor and SMP kernels get installed, with the SMP kerrnel the default. However, the SMP kernel can't seem to find the disk drive. You can work around this by use "e" at the GRUB kernel prompt, then on the "kernel" line appending " noapic". After the system boots, you'll want to edit /boot/grub/grub.conf to add the " noapic" option to the kernel line as well.
Mandriva 2006 on T60
Mandriva 2006.0 has a problem with SATA on a T60, to fix this you need to make an adjustment. The install procedure can't seem to find the SATA disk drive, you can work around this by adding the "noapic" kernel option during CD/DVD boot. You *might* need to add this to lilo or GRUB for normal operations, after install completes. The problem with not using apic during normal operations is that you might have problems with power management, please see article on Software Suspend 2