UDMA33 on older acer aladdin chips
Soren Schmidt
sos at spider.deepcore.dk
Thu Oct 9 01:02:19 PDT 2003
It seems Daniel Rock wrote:
> > 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;
Yep, thats close, I have a patch out for testing that looks semilar,
if you can confirm it works, I'll commit it asap:
And yes pointy hat to me :)
Index: ata-lowlevel.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/ata/ata-lowlevel.c,v
retrieving revision 1.18
diff -u -r1.18 ata-lowlevel.c
--- ata-lowlevel.c 7 Oct 2003 13:45:56 -0000 1.18
+++ ata-lowlevel.c 9 Oct 2003 06:32:14 -0000
@@ -73,8 +73,9 @@
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) &&
- request->device->channel->flags & ATA_ATAPI_DMA_RO)
+ if ((request->device->channel->flags & ATA_ATAPI_DMA_RO) &&
+ ((request->flags & (ATA_R_ATAPI | ATA_R_DMA | ATA_R_WRITE)) ==
+ (ATA_R_ATAPI | ATA_R_DMA | ATA_R_WRITE)))
request->flags &= ~ATA_R_DMA;
switch (request->flags & (ATA_R_ATAPI | ATA_R_DMA)) {
-Søren
More information about the freebsd-current
mailing list