Well, you are right about DMA mode, but not for 32 bit access. I searched in Internet about this problem and many people are on the same road. Most of them use libata patch:
http://www.linconsult.no/libata/
In this page is written: "Note: this whole issue has been fixed in kernel 2.6.15", which is still not true.
P.S. ghostdancer, I tried sdparm, it is not working with SATA drives. I think hdparm developers must improve SATA support, it is a shame - SATA drives are here for 4 years
Output of sdparm:
sdparm /dev/sda
/dev/sda: ATA ST3320620AS 3.AA
REQUEST SENSE failed, try again with '-v' option
sdparm -v /dev/sda
/dev/sda: ATA ST3320620AS 3.AA
Request Sense cmd: 03 00 00 00 40 00
request sense: Fixed format, current; Sense key: Illegal Request
Additional sense: Invalid command operation code
REQUEST SENSE failed
Output of hdparm:
hdparm /dev/sda
/dev/sda:
IO_support = 0 (default 16-bit)
readonly = 0 (off)
readahead = 256 (on)
geometry = 38913/255/63, sectors = 625142448, start = 0
hdparm -c3 /dev/sda (tried -c1 without success)
/dev/sda:
setting 32-bit IO_support flag to 3
HDIO_SET_32BIT failed: Invalid argument
IO_support = 0 (default 16-bit)
hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 2180 MB in 2.00 seconds = 1090.05 MB/sec
Timing buffered disk reads: 168 MB in 3.03 seconds = 55.50 MB/sec
hdparm -d1 /dev/sda
/dev/sda:
setting using_dma to 1 (on)
HDIO_SET_DMA failed: Inappropriate ioctl for device
The reason is clear for me - "Inappropriate ioctl for device", SATA drives are not well supported. So I have to use combined_mode=libata atapi_enable=1 in grub (I used primarly lilo till this installation.