Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 18 Oct 1999 13:14:55 -0700
From:      kachun@pathlink.com (Kachun Lee)
To:        freebsd-stable@freebsd.org
Subject:   Re: Promise Ultra66
Message-ID:  <199910182015.NAA46986@pathlink.net>
In-Reply-To: <Pine.BSF.4.10.9705051758380.283-100000@gravy.kishka.net>
References:  <Pine.BSF.4.10.9705051758380.283-100000@gravy.kishka.net>

next in thread | previous in thread | raw e-mail | index | archive | help
In article <Pine.BSF.4.10.9705051758380.283-100000@gravy.kishka.net>, you 
say...
>
>I am trying to get FreeBSD 3.3-stable to detect a Promise Ultra66 IDE
>adapter.  I searched through the mailing list archives, but could not
>find an answer.  I tried the configuration detailed in LINT, but it still
>isn't detected.  On boot, the card announces itself and detects my Western
>Digital AC29100 and sets it up for UDMA mode 4.  The kernel will start to
>load, then panic because it cannot see a hard disk controller.
>
>Anyone out there have success with this, and if so, can I have a peek at
>your config file?
>
>
>==========================================================
>= Bryan D. Liesner         LeezSoft Communications, Inc. =
>=                          A subsidiary of LeezSoft Inc. =
>= bleez@netaxs.com         Home of the Gipper            =
>==========================================================
>
>
>
>To Unsubscribe: send mail to majordomo@FreeBSD.org
>with "unsubscribe freebsd-stable" in the body of the message

A similar post I made to comp.unix.bsd.freebsd.misc... I am trying to get some 
comment about if there is any side effect in the wd.c patch...

I got the Promise Ultra66 working with the ide_pci.c patch below. I was using 
v3.3, but I believe it should work with v3.2. But with ATAPI option set, the 
wd.c needed to be patched (same with Promise Ultra33) also, or else the 
controller would fail the wdreset. I did not know the full ramification of the 
wd.c patch to other controllers and ATAPI devices... I only tried it with a 
CDROM.

*** ide_pci.c   Wed Oct 13 15:27:44 1999
--- ide_pci.c.01        Mon Oct 18 10:44:31 1999
***************
*** 61,66 ****
--- 61,67 ----
  #endif
  
  #define PROMISE_ULTRA33 0x4d33105a
+ #define PROMISE_ULTRA66       0x4d38105a
  
  struct ide_pci_cookie;  /* structs vendor_fns, ide_pci_cookie are recursive 
*/
  
***************
*** 1217,1222 ****
--- 1218,1224 ----
  
        if ((data & PCI_CLASS_MASK) == PCI_CLASS_MASS_STORAGE &&
            ((data & PCI_SUBCLASS_MASK) == 0x00010000 ||
+               ((data & PCI_SUBCLASS_MASK) == 0x00800000) ||
            ((data & PCI_SUBCLASS_MASK) == 0x00040000))) {
                if (type == 0x71118086)
                        return ("Intel PIIX4 Bus-master IDE controller");
***************
*** 1226,1231 ****
--- 1228,1235 ----
                        return ("Intel PIIX Bus-master IDE controller");
                if (type == PROMISE_ULTRA33)
                        return ("Promise Ultra/33 IDE controller");
+               if (type == PROMISE_ULTRA66)
+                       return ("Promise Ultra/66 IDE controller");
                if (type == 0x05711106)
                      return ("VIA 82C586x (Apollo) Bus-master IDE 
controller");
                if (type == 0x01021078)
***************
*** 1263,1269 ****
        /* set up vendor-specific stuff */
        type = pci_conf_read(tag, PCI_ID_REG);
  
!       if (type != PROMISE_ULTRA33) {
        /* is it busmaster capable?  bail if not */
                class = pci_conf_read(tag, PCI_CLASS_REG);
                if (!(class & 0x8000)) {
--- 1267,1279 ----
        /* set up vendor-specific stuff */
        type = pci_conf_read(tag, PCI_ID_REG);
  
!       switch(type)
!       {
!       case PROMISE_ULTRA33:
!       case PROMISE_ULTRA66:
!               break;
! 
!       default:
        /* is it busmaster capable?  bail if not */
                class = pci_conf_read(tag, PCI_CLASS_REG);
                if (!(class & 0x8000)) {
***************
*** 1291,1296 ****
--- 1301,1307 ----
                break;
  
        case PROMISE_ULTRA33:
+       case PROMISE_ULTRA66:
                /* Promise controllers */
                vp = &vs_promise;
                break;
***************
*** 1308,1314 ****
                break;
        }
  
!       if (type != PROMISE_ULTRA33) {
                if ((class & 0x100) == 0) {
                        iobase_wd_1 = IO_WD1;
                        altiobase_wd_1 = iobase_wd_1 + wd_altsts;
--- 1319,1326 ----
                break;
        }
  
!       switch(type) {
!       default:
                if ((class & 0x100) == 0) {
                        iobase_wd_1 = IO_WD1;
                        altiobase_wd_1 = iobase_wd_1 + wd_altsts;
***************
*** 1324,1330 ****
                        iobase_wd_2 = pci_conf_read(tag, 0x18) & 0xfffc;
                        altiobase_wd_2 = pci_conf_read(tag, 0x1c) & 0xfffc;
                }
!       } else {
                iobase_wd_1 = pci_conf_read(tag, 0x10) & 0xfffc;
                altiobase_wd_1 = pci_conf_read(tag, 0x14) & 0xfffc;
                iobase_wd_2 = pci_conf_read(tag, 0x18) & 0xfffc;
--- 1336,1344 ----
                        iobase_wd_2 = pci_conf_read(tag, 0x18) & 0xfffc;
                        altiobase_wd_2 = pci_conf_read(tag, 0x1c) & 0xfffc;
                }
!               break;
!       case PROMISE_ULTRA33:
!       case PROMISE_ULTRA66:
                iobase_wd_1 = pci_conf_read(tag, 0x10) & 0xfffc;
                altiobase_wd_1 = pci_conf_read(tag, 0x14) & 0xfffc;
                iobase_wd_2 = pci_conf_read(tag, 0x18) & 0xfffc;

-----------------------------------------------------------------------
wd.c patch - only need when ATAPI is set... see caution above.

*** wd.c        Mon Aug 30 17:24:28 1999
--- wd.c.01     Mon Oct 18 11:03:05 1999
***************
*** 2302,2310 ****
--- 2302,2312 ----
  #ifdef ATAPI
        if (wdwait(du, 0, TIMEOUT) != 0)
                err = 1;                /* no IDE drive found */
        du->dk_error = inb(du->dk_port + wd_error);
+ #if 0 /* Promise Ultra33/66 would not pass this */
        if (du->dk_error != 0x01)
                err = 1;                /* the drive is incompatible */
+ #endif
  #else
        if (wdwait(du, WDCS_READY | WDCS_SEEKCMPLT, TIMEOUT) != 0) {
                printf("wdreset: error1: 0x%x\n", du->dk_error);




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




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