Bug 17173

Summary: 4.0-20000214-CURRENT: ata with Intel ICH ATA-66 -> UDMA33
Product: Base System Reporter: larse <larse>
Component: kernAssignee: Søren Schmidt <sos>
Status: Closed FIXED    
Severity: Affects Only Me    
Priority: Normal    
Version: Unspecified   
Hardware: Any   
OS: Any   

Description larse 2000-03-04 02:30:01 UTC
For some reason, the ata driver only supports UDMA33 on an Intel ICH 
ATA-66 controller together with an IBM-DPTA-372730 drive. Both drive
and controller should be UDMA66-capable.

The relevant lines from dmesg:

[hbo: /usr/src/sys] dmesg | grep ata
ata-pci0: <Intel ICH ATA-66 controller> port 0xffa0-0xffaf at device 31.1 on pci0
ata0 at 0x01f0 irq 14 on ata-pci0
ata1 at 0x0170 irq 15 on ata-pci0
ad0: 26105MB <IBM-DPTA-372730> [53040/16/63] at ata0-master using UDMA33
acd0: CD-RW <SONY CD-RW CRX140E> at ata1-master using UDMA33

The relevant lines from my kernel config file:

device          ata
device          atadisk                 # ATA disk drives
device          atapicd                 # ATAPI CDROM drives
options         ATA_STATIC_ID           #Static device numbering
options         ATA_ENABLE_ATAPI_DMA    #Enable DMA on ATAPI devices

I saw this note in ata(4):

     Remember that in order to use UDMA4 mode you have to use a special 80
     conductor cable, and the driver tries to determine if you have such a ca-
     ble attached before setting UDMA4 mode.

I'm *assuming* our machine has such a cable (it's a brand-new Dell 
workstation) - in any case, how do I verify that?

Thanks,
Lars

How-To-Repeat: n/a
Comment 1 cpiazza freebsd_committer freebsd_triage 2000-03-16 03:43:54 UTC
On Fri, Mar 03, 2000 at 06:27:54PM -0800, larse@isi.edu wrote:
> 
> >Description:
> For some reason, the ata driver only supports UDMA33 on an Intel ICH 
> ATA-66 controller together with an IBM-DPTA-372730 drive. Both drive
> and controller should be UDMA66-capable.
> 
> 
>      Remember that in order to use UDMA4 mode you have to use a special 80
>      conductor cable, and the driver tries to determine if you have such a ca-
>      ble attached before setting UDMA4 mode.
> 
> I'm *assuming* our machine has such a cable (it's a brand-new Dell 
> workstation) - in any case, how do I verify that?

Hi,

If you want to test that the cable is an ATA66 cable, you have to
boot in verbose mode and check the output of the cblid field.

ata0-master: success setting up UDMA2 mode on PIIX4 chip
ad0: <FUJITSU MPC3102AT E/6204> ATA-3 disk at ata0 as master
ad0: 9765MB (20000536 sectors), 19841 cyls, 16 heads, 63 S/T, 512 B/S
ad0: 16 secs/int, 1 depth queue, UDMA33
ad0: piomode=4 dmamode=2 udmamode=2 cblid=0

Obviously this is on an ATA33 controller without an ATA66 cable.

ata2-master: success setting up UDMA4 mode on HPT366 chip
ad4: <IBM-DJNA-371350/J76OA30K> ATA-4 disk at ata2 as master
ad4: 12949MB (26520480 sectors), 28064 cyls, 15 heads, 63 S/T, 512 B/S
ad4: 16 secs/int, 32 depth queue, UDMA66
ad4: piomode=4 dmamode=2 udmamode=4 cblid=1

Please reply with your findings so we know where to proceed from here. 

Thanks.
-Chris
-- 
cpiazza@jaxon.net   cpiazza@FreeBSD.org
        Abbotsford, BC, Canada
Comment 2 larse 2000-03-16 04:11:51 UTC
  chris> If you want to test that the cable is an ATA66 cable, you
  chris> have to boot in verbose mode and check the output of the
  chris> cblid field.
...
  chris> Please reply with your findings so we know where to proceed
  chris> from here.

No problem, please let me know if you need more info. (FYI, this is
still with 4.0-20000214-CURRENT, we will move to 4.0-RELEASE when the
ISO image is available.)

ata-pci0: <Intel ICH ATA-66 controller> port 0xffa0-0xffaf at device 31.1 on pci0
ata0: iobase=0x01f0 altiobase=0x03f6 bmaddr=0xffa0
ata0: mask=03 status0=50 status1=00
ata0: mask=03 status0=50 status1=00
ata0: devices = 0x1
ata0 at 0x01f0 irq 14 on ata-pci0
ata1: iobase=0x0170 altiobase=0x0376 bmaddr=0xffa8
ata1: mask=03 status0=50 status1=00
ata1: mask=03 status0=00 status1=00
ata1: devices = 0x4
ata1 at 0x0170 irq 15 on ata-pci0
ata0-master: success setting up UDMA2 mode on ICH chip
ad0: <IBM-DPTA-372730/P78DA32A> ATA-4 disk at ata0 as master
ad0: 26105MB (53464320 sectors), 53040 cyls, 16 heads, 63 S/T, 512 B/S
ad0: 16 secs/int, 1 depth queue, UDMA33
ad0: piomode=4 dmamode=2 udmamode=4 cblid=1
Creating DISK ad0
Creating DISK wd0
ata1-master: piomode=4 dmamode=2 udmamode=2 dmaflag=1
ata1-master: success setting up UDMA2 mode on ICH chip
acd0: <SONY CD-RW CRX140E/1.0h> CD-RW drive at ata1 as master
acd0: read 5512KB/s (5512KB/s) write 1377KB/s (1377KB/s), 4096KB buffer, UDMA33
acd0: Reads: CD-R, CD-RW, CD-DA stream, packet
acd0: Writes: CD-R, CD-RW, test write
acd0: Audio: play, 256 volume levels
acd0: Mechanism: ejectable tray
acd0: Medium: CD-ROM 120mm audio disc loaded, unlocked
Mounting root from ufs:/dev/ad0s2a
ad0s1: type 0x1b, start 63, end = 8418059, size 8417997 : OK
ad0s2: type 0xa5, start 8418060, end = 25205984, size 16787925 : OK
ad0s3: type 0xf, start 25205985, end = 53464319, size 28258335 : OK
ad0s5: type 0xb, start 25206048, end = 53464319, size 28258272 
ad0s5: C/H/S start 1023/1/1 (16434558) != start 25206048: invalid

Lars
________________________________________________________________________
Lars Eggert <larse@isi.edu>               Information Sciences Institute
http://www.isi.edu/~larse/             University of Southern California
Comment 3 cpiazza freebsd_committer freebsd_triage 2000-03-16 19:38:22 UTC
Responsible Changed
From-To: freebsd-bugs->sos

sos write the ata driver and is likely to be able to diagnose this 
Comment 4 Søren Schmidt freebsd_committer freebsd_triage 2000-03-16 19:47:11 UTC
State Changed
From-To: open->analyzed


Hmm, ata checks for the BIOS signature for an 80pin cable, and 
this indicates that the BIOS doesn't think you have one. 
Since the disks says OK for an 80pin cable the BIOS is 
probably to blaim. 
You should dso two things: 

1. verify physically if an 80 pin cable actually is present. 

2. Check the BIOS settings if it can be changed / setup there. 

If a 80 pin cable is present and the BIOS cannot be convinced 
to report this right in the ICH chip, you can try to get rid 
of the test in ata-dma.c line 105 by changing it to fx 
if (1/*word54 & (0x10 << devno)*/) { 
then it should do ata66.. 

Comment 5 larse 2000-03-16 21:28:52 UTC
Please close this item. I have upgraded to 4.0-RELEASE, and UDMA66 is
now working:

atapci0: <Intel ICH ATA66 controller> port 0xffa0-0xffaf at device 31.1 on pci0
ata0: at 0x1f0 irq 14 on atapci0
ad0: 26105MB <IBM-DPTA-372730> [53040/16/63] at ata0-master using UDMA66

Lars
________________________________________________________________________
Lars Eggert <larse@isi.edu>               Information Sciences Institute
http://www.isi.edu/~larse/             University of Southern California
Comment 6 Søren Schmidt freebsd_committer freebsd_triage 2000-03-16 21:44:44 UTC
State Changed
From-To: analyzed->closed

upgrading to 4.0-RELEASE solved the problem.