Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 22 Jan 1999 23:54:59 +1100
From:      Bruce Evans <bde@zeta.org.au>
To:        current@FreeBSD.ORG, dawes@rf900.physics.usyd.edu.au
Subject:   Re: Promise FastTrack PCI IDE controller
Message-ID:  <199901221254.XAA23422@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
>I've been playing with a Promise FastTrack RAID (IDE) controller with
>3.0-current as of yesterday.  Although it is recognised in the PCI bus
>probe as a "Promise Ultra/33" (it has the same vendor/chip ID as the
>non-RAID card), the probes in i386/isa/wd.c fail.  I added some debugging
>printfs to the code, and have found that wdreset() is failing.  By
>changing the code to ignore that failure, it gets further, and correctly
>identifies the attached disks.  I can even access the disks sufficiently
>to read the partition table with fdisk (but with timeouts).

Errors in wdreset() for the Promise (at least for the Ultra/33)
probably mean that du->dk_altport is not initialized properly.  (Setting
du->dk_altport is the only thing that is very special for the Promise,
and wdreset() is the only function that uses du->dk_altport for anything
except debugging.)  The wrong setting of du->dk_altport may be caused by
the section of code in pci/ide_pci.c described by  "/* This code below
is mighty bogus. ...".  Bugs there may also break DMA capability.

>...
>promise_status: port0: 0xeff0, port0_alt: 0xefe4, port1: 0xefa8, port1_alt: 0xefe0
>...
>wdc2: wdd_candma is set for ide_pci1
>wdc2: I/O to 0xeff0 does work
>wdc2: reset failed

If the main block of ports is really at 0xeff0, as it probably must be
since something worked, the altport is probably at port 0xefe4 and
initializing du->dk_altport to this manually should fix wdreset().

>ide_pci: generic_dmainit eff0:0: warning, IDE controller timing not set
>wd4: wdsetmode() setting transfer mode to 22

I don't see how the Promise can work right if generic_dmainit()
gets called.  generic_dmainit() never sets UltraDMA mode.  It only
sets mode 22, which is twice as slow.  There is no special support for
seting the IDE controller timing for the Promise, so generic_dmainit()
gets called unless the BIOS has already set the IDE controller timing.

Bruce

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199901221254.XAA23422>