From owner-freebsd-bugs@FreeBSD.ORG Wed Dec 3 00:20:23 2003 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D554A16A4CE for ; Wed, 3 Dec 2003 00:20:23 -0800 (PST) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 74F6243FE5 for ; Wed, 3 Dec 2003 00:20:18 -0800 (PST) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.9/8.12.9) with ESMTP id hB38KIFY034708 for ; Wed, 3 Dec 2003 00:20:18 -0800 (PST) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.9/8.12.9/Submit) id hB38KIR8034707; Wed, 3 Dec 2003 00:20:18 -0800 (PST) (envelope-from gnats) Resent-Date: Wed, 3 Dec 2003 00:20:18 -0800 (PST) Resent-Message-Id: <200312030820.hB38KIR8034707@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Divacky Roman Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5D32616A4CE for ; Wed, 3 Dec 2003 00:16:57 -0800 (PST) Received: from eva.fit.vutbr.cz (eva.fit.vutbr.cz [147.229.10.14]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7F85943FDD for ; Wed, 3 Dec 2003 00:16:55 -0800 (PST) (envelope-from xdivac02@stud.fit.vutbr.cz) Received: from eva.fit.vutbr.cz (localhost [127.0.0.1]) by eva.fit.vutbr.cz (8.12.10/8.12.9) with ESMTP id hB38GqJE002760 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Wed, 3 Dec 2003 09:16:52 +0100 (CET) Received: (from xdivac02@localhost) by eva.fit.vutbr.cz (8.12.10/8.12.5/Submit) id hB38Gqpb002759; Wed, 3 Dec 2003 09:16:52 +0100 (CET) Message-Id: <200312030816.hB38Gqpb002759@eva.fit.vutbr.cz> Date: Wed, 3 Dec 2003 09:16:52 +0100 (CET) From: Divacky Roman To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Subject: kern/59917: ata reset update in ATAng X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: Divacky Roman List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Dec 2003 08:20:24 -0000 >Number: 59917 >Category: kern >Synopsis: ata reset update in ATAng >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: update >Submitter-Id: current-users >Arrival-Date: Wed Dec 03 00:20:17 PST 2003 >Closed-Date: >Last-Modified: >Originator: Divacky Roman >Release: FreeBSD 5.2-BETA i386 >Organization: home >Environment: FreeBSD 5.2-BETA >Description: I have PIIX4 ata controller has very slow ata-reset under ATAng >How-To-Repeat: this is default behaviour >Fix: this patch fixes it: --- /tmp/ata-lowlevel.c Sat Nov 22 16:48:27 2003 +++ /sys/dev/ata/ata-lowlevel.c Sat Nov 22 17:06:45 2003 @@ -549,19 +549,22 @@ ATA_IDX_INB(ch, ATA_ERROR); /* wait for BUSY to go inactive */ - for (timeout = 0; timeout < 310; timeout++) { + /* Hacked by neologism... too slow for me ;) */ + for (timeout = 0; timeout < 31000; timeout++) { if (stat0 & ATA_S_BUSY) { ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_MASTER); DELAY(10); - err = ATA_IDX_INB(ch, ATA_ERROR); - lsb = ATA_IDX_INB(ch, ATA_CYL_LSB); - msb = ATA_IDX_INB(ch, ATA_CYL_MSB); stat0 = ATA_IDX_INB(ch, ATA_STATUS); - if (bootverbose) - ata_printf(ch, ATA_MASTER, - "stat=0x%02x err=0x%02x lsb=0x%02x msb=0x%02x\n", - stat0, err, lsb, msb); if (!(stat0 & ATA_S_BUSY)) { + /* this should be there because of that condition... + dont know why sos did this... */ + err = ATA_IDX_INB(ch, ATA_ERROR); + lsb = ATA_IDX_INB(ch, ATA_CYL_LSB); + msb = ATA_IDX_INB(ch, ATA_CYL_MSB); + if (bootverbose) + ata_printf(ch, ATA_MASTER, + "stat=0x%02x err=0x%02x lsb=0x%02x msb=0x%02x\n", + stat0, err, lsb, msb); if ((err & 0x7f) == ATA_E_ILI) { if (lsb == ATAPI_MAGIC_LSB && msb == ATAPI_MAGIC_MSB) { ch->devices |= ATA_ATAPI_MASTER; @@ -578,15 +581,16 @@ if (stat1 & ATA_S_BUSY) { ATA_IDX_OUTB(ch, ATA_DRIVE, ATA_D_IBM | ATA_SLAVE); DELAY(10); - err = ATA_IDX_INB(ch, ATA_ERROR); - lsb = ATA_IDX_INB(ch, ATA_CYL_LSB); - msb = ATA_IDX_INB(ch, ATA_CYL_MSB); stat1 = ATA_IDX_INB(ch, ATA_STATUS); - if (bootverbose) - ata_printf(ch, ATA_SLAVE, - " stat=0x%02x err=0x%02x lsb=0x%02x msb=0x%02x\n", - stat1, err, lsb, msb); if (!(stat1 & ATA_S_BUSY)) { + /* Ditto */ + err = ATA_IDX_INB(ch, ATA_ERROR); + lsb = ATA_IDX_INB(ch, ATA_CYL_LSB); + msb = ATA_IDX_INB(ch, ATA_CYL_MSB); + if (bootverbose) + ata_printf(ch, ATA_SLAVE, + " stat=0x%02x err=0x%02x lsb=0x%02x msb=0x%02x\n", + stat1, err, lsb, msb); if ((err & 0x7f) == ATA_E_ILI) { if (lsb == ATAPI_MAGIC_LSB && msb == ATAPI_MAGIC_MSB) { ch->devices |= ATA_ATAPI_SLAVE; @@ -610,7 +614,7 @@ if ((!(stat0 & ATA_S_BUSY) || (stat0 == 0xff && timeout > 20)) && (!(stat1 & ATA_S_BUSY) || (stat1 == 0xff && timeout > 20))) break; - DELAY(100000); + DELAY(1000); } if (stat0 & ATA_S_BUSY) >Release-Note: >Audit-Trail: >Unformatted: