From owner-freebsd-current@FreeBSD.ORG Tue Dec 28 14:16:28 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id DB45916A4CE; Tue, 28 Dec 2004 14:16:28 +0000 (GMT) Received: from relay.dk (relay.dk [80.63.235.130]) by mx1.FreeBSD.org (Postfix) with ESMTP id E7F5D43D2D; Tue, 28 Dec 2004 14:16:27 +0000 (GMT) (envelope-from ns@got2get.net) Received: from 12TICKETDEVEL (avizion@relay.dk [10.0.0.1]) by relay.dk (8.13.1/8.13.1) with SMTP id iBSEGKgG068613; Tue, 28 Dec 2004 15:16:20 +0100 (CET) (envelope-from ns@got2get.net) Message-ID: <00c601c4ece7$ce685100$c91b46d4@12TICKETDEVEL> From: "Nicolai Schlenzig" To: =?iso-8859-1?Q?S=F8ren_Schmidt?= , "Ruslan Ermilov" References: <20041223221047.GB6049@ip.net.ua><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> Date: Tue, 28 Dec 2004 15:16:20 +0100 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.2527 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2527 cc: current@freebsd.org Subject: Re: ATA regression [PATCH] X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 28 Dec 2004 14:16:29 -0000 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" To: "Ruslan Ermilov" Cc: ; "Soren Schmidt" 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"