Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Dec 2004 15:16:20 +0100
From:      "Nicolai Schlenzig" <ns@got2get.net>
To:        =?iso-8859-1?Q?S=F8ren_Schmidt?= <sos@DeepCore.dk>, "Ruslan Ermilov" <ru@freebsd.org>
Cc:        current@freebsd.org
Subject:   Re: ATA regression [PATCH]
Message-ID:  <00c601c4ece7$ce685100$c91b46d4@12TICKETDEVEL>
References:  <20041223221047.GB6049@ip.net.ua><!~!UENERkVCMDkAAQACAAAAAAAAAAAAAAAAABgAAAAAAAAA0VcX9IoJqUaXPS8MjT1PdsKAAAAQAAAArxJ5PgcqDkuBy1s4qQ6S8AEAAAAA@telia.com><20041224094127.GA75931@ip.net.ua> <41CC425C.7050906@DeepCore.dk><20041224220821.GB86330@ip.net.ua> <41CC9BDA.7020203@DeepCore.dk><20041224233021.GA43419@ip.net.ua> <41CFEFAF.8040100@DeepCore.dk><20041227141310.GA95767@ip.net.ua> <41D03AA4.3020908@DeepCore.dk><20041228110644.GB14010@ip.net.ua> <41D15650.7080504@DeepCore.dk>

next in thread | previous in thread | raw e-mail | index | archive | help
Is there any way for me to compile just this little part of world and install it (after applying that patch)?

Doing "make buildworld" for CURRENT takes 8+ hours on my system... but this is exactly what I'm looking for. My Promise 
SATA TX2IIplus 150 gives "ATA_IDENTIFY" timeouts for anything I attach.

I'd sure like to give it a try - but if you guys find a new and better patch within, say, 4 hours - I have to sit tight 
for 4 more only to restart my compile ;)

Thanks in advance.

// Nicolai

----- Original Message ----- 
From: "Søren Schmidt" <sos@DeepCore.dk>
To: "Ruslan Ermilov" <ru@freebsd.org>
Cc: <current@freebsd.org>; "Soren Schmidt" <sos@freebsd.org>
Sent: Tuesday, December 28, 2004 1:49 PM
Subject: Re: ATA regression [PATCH]


Ruslan Ermilov wrote:

> So I analyzed what was changed in this ata-chipset.c revision
> when it comes to my chip, and tried the following patch, and
> it brought me back my ad8 drive:

Hmm, there are grimlins in there alright. Could you try the attached
patch as thats what I have in my WIP and it cleans up the code a bit as
well..

-- 

-Søren




--------------------------------------------------------------------------------


Index: ata-chipset.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/ata/ata-chipset.c,v
retrieving revision 1.97
diff -u -r1.97 ata-chipset.c
--- ata-chipset.c 24 Dec 2004 13:36:04 -0000 1.97
+++ ata-chipset.c 28 Dec 2004 12:47:10 -0000
@@ -1367,6 +1367,11 @@
  return ENXIO;
     }

+    if (ctlr->chip->max_dma >= ATA_SA150)
+ ctlr->setmode = ata_sata_setmode;
+    else
+ ctlr->setmode = ata_promise_setmode;
+
     switch  (ctlr->chip->cfg1) {
     case PRNEW:
  /* setup clocks */
@@ -1413,22 +1418,33 @@
  ctlr->dmainit = ata_promise_mio_dmainit;
  ctlr->allocate = ata_promise_mio_allocate;

- if (ctlr->chip->cfg2 & PRPATA) {
-     ctlr->channels = ((ATA_INL(ctlr->r_res2, 0x48) & 0x01) > 0) +
-      ((ATA_INL(ctlr->r_res2, 0x48) & 0x02) > 0) + 2;
- }
- else if (ctlr->chip->cfg2 & PRCMBO) {
-     ATA_OUTL(ctlr->r_res2, 0x06c, 0x000000ff);
-     ctlr->channels = ((ATA_INL(ctlr->r_res2, 0x48) & 0x02) > 0) + 3;
- }
- else if (ctlr->chip->cfg2 & PRCMBO2) {
-     ATA_OUTL(ctlr->r_res2, 0x060, 0x000000ff);
-     ctlr->channels = 3;
- }
- else
-     ctlr->channels = 4;
+ switch (ctlr->chip->cfg2) {
+ case PRPATA:
+            ctlr->channels = ((ATA_INL(ctlr->r_res2, 0x48) & 0x01) > 0) +
+                             ((ATA_INL(ctlr->r_res2, 0x48) & 0x02) > 0) + 2;
+     break;

- if (ctlr->chip->cfg2 & PRSX4X) {
+ case PRCMBO:
+            ATA_OUTL(ctlr->r_res2, 0x06c, 0x000000ff);
+            ctlr->channels = ((ATA_INL(ctlr->r_res2, 0x48) & 0x02) > 0) + 3;
+     break;
+
+ case PRSATA:
+            ATA_OUTL(ctlr->r_res2, 0x06c, 0x000000ff);
+            ctlr->channels = 4;
+     break;
+
+ case PRCMBO2:
+            ATA_OUTL(ctlr->r_res2, 0x060, 0x000000ff);
+            ctlr->channels = 3;
+     break;
+
+ case PRSATA2:
+            ATA_OUTL(ctlr->r_res2, 0x060, 0x000000ff);
+            ctlr->channels = 4;
+     break;
+
+ case PRSX4X: {
      struct ata_promise_sx4 *hpkt;
      u_int32_t dimm = ATA_INL(ctlr->r_res2, 0x000c0080);

@@ -1448,26 +1464,25 @@
      mtx_init(&hpkt->mtx, "ATA promise HPKT lock", NULL, MTX_DEF);
      hpkt->busy = hpkt->head = hpkt->tail = 0;

+            ctlr->channels = 4;
+
      if ((bus_setup_intr(dev, ctlr->r_irq, ATA_INTR_FLAGS,
  ata_promise_sx4_intr, ctlr, &ctlr->handle))) {
  device_printf(dev, "unable to setup interrupt\n");
  return ENXIO;
      }
- }
- else {
-     if ((bus_setup_intr(dev, ctlr->r_irq, ATA_INTR_FLAGS,
- ata_promise_mio_intr, ctlr, &ctlr->handle))) {
- device_printf(dev, "unable to setup interrupt\n");
- return ENXIO;
+     return 0;
      }
  }
- break;
+
+ if ((bus_setup_intr(dev, ctlr->r_irq, ATA_INTR_FLAGS,
+     ata_promise_mio_intr, ctlr, &ctlr->handle))) {
+     device_printf(dev, "unable to setup interrupt\n");
+     return ENXIO;
+ }
+ return 0;
     }
-    if (ctlr->chip->max_dma >= ATA_SA150)
- ctlr->setmode = ata_sata_setmode;
-    else
- ctlr->setmode = ata_promise_setmode;
-    return 0;
+    return ENXIO;
 }

 static int



--------------------------------------------------------------------------------


_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?00c601c4ece7$ce685100$c91b46d4>