Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 09 Oct 2003 00:42:37 +0200
From:      D.Rock@t-online.de (Daniel Rock)
To:        Andrew Gallatin <gallatin@cs.duke.edu>
Cc:        current@freebsd.org
Subject:   Re: UDMA33 on older acer aladdin chips
Message-ID:  <3F8492DD.9000407@t-online.de>
In-Reply-To: <16260.27697.175840.870364@grasshopper.cs.duke.edu>
References:  <16260.27697.175840.870364@grasshopper.cs.duke.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
Andrew Gallatin wrote:
> Hi,
> 
> I recently decided to update my alpha UP1000 to today's current from a
> mid-July build.  However, UDMA33 did not work on a hard disk attached
> to the built-in Acer Aladdin controller (verbose dmesg appended).
> 
> I think I have narrowed the problem down to this line of code:
> 
> 	atadev->channel->flags |= ATA_ATAPI_DMA_RO;
> 
> Removing this line gets my UDMA33 back.  

If I understand the code correctly, the right fix should more look like:

diff -u -r1.18 ata-lowlevel.c
--- ata-lowlevel.c      7 Oct 2003 13:45:56 -0000       1.18
+++ ata-lowlevel.c      8 Oct 2003 22:38:15 -0000
@@ -73,7 +73,8 @@
      request->device->channel->running = request;

      /* disable ATAPI DMA writes if HW doesn't support it */
-    if (request->flags & (ATA_R_ATAPI | ATA_R_DMA | ATA_R_WRITE) &&
+    if (((request->flags & (ATA_R_ATAPI | ATA_R_DMA | ATA_R_WRITE)) ==
+                         (ATA_R_ATAPI | ATA_R_DMA | ATA_R_WRITE)) &&
         request->device->channel->flags & ATA_ATAPI_DMA_RO)
         request->flags &= ~ATA_R_DMA;


But I don't have ATAPI devices attached to this machine to test.



Daniel



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