i386/58458: ATAPI-CDROM DMA Support on ALi Aladdin V Chipset is
brocken
Bruce Evans
bde at zeta.org.au
Fri Oct 24 05:30:20 PDT 2003
The following reply was made to PR i386/58458; it has been noted by GNATS.
From: Bruce Evans <bde at zeta.org.au>
To: Rolf Witt <rowi at free.de>
Cc: freebsd-gnats-submit at freebsd.org
Subject: Re: i386/58458: ATAPI-CDROM DMA Support on ALi Aladdin V Chipset is
brocken
Date: Fri, 24 Oct 2003 22:19:44 +1000 (EST)
On Fri, 24 Oct 2003, Rolf Witt wrote:
> The following reply was made to PR i386/58458; it has been noted by GNATS.
>
> From: Rolf Witt <rowi at free.de>
>
> Nice text...
>
> I hope, i have you understand.
>
> I doesn't use wild gcc optimization flags.
Er, it was about missing break statements.
However, on closer inspection the missing break statements only affect
PIO modes (at best, all PIO modes are reduced to PIO0).
> I believe that someone forgot the Workarounds for the DMA mode with CD-
> Roms drive assemblies in the code. The Aladdin V chipsets has there a
> problem.
There seems to be only 1 significant change (an addition with no removals)
between RELENG_4_8_0_RELEASE and RELENG_4_9 for Aladdin IV/V chipsets for
DMA modes:
%%%
Index: ata-dma.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/ata/ata-dma.c,v
retrieving revision 1.35.2.29
retrieving revision 1.35.2.34
diff -u -2 -r1.35.2.29 -r1.35.2.34
--- ata-dma.c 2 Oct 2002 14:13:38 -0000 1.35.2.29
+++ ata-dma.c 22 Oct 2003 14:43:52 -0000 1.35.2.34
@@ -285,10 +392,12 @@
case 0x522910b9: /* AcerLabs Aladdin IV/V */
/* the older Aladdin doesn't support ATAPI DMA on both master & slave */
- if (pci_get_revid(parent) < 0xc2 &&
- ch->devices & ATA_ATAPI_MASTER && ch->devices & ATA_ATAPI_SLAVE) {
+ if (chiprev < 0xc2 &&
+ atadev->channel->devices & ATA_ATAPI_MASTER &&
+ atadev->channel->devices & ATA_ATAPI_SLAVE) {
ata_prtdev(atadev, "two atapi devices on this channel, no DMA\n");
break;
}
- if (udmamode >= 5 && pci_get_revid(parent) >= 0xc4) {
+ pci_write_config(parent, 0x58 + (channel << 2), 0x00310001, 4);
+ if (udmamode >= 5 && chiprev >= 0xc4) {
error = ata_command(atadev, ATA_C_SETFEATURES, 0,
ATA_UDMA5, ATA_C_F_SETXFER, ATA_WAIT_READY);
%%%
The pci_write_config() line is new.
Bruce
More information about the freebsd-i386
mailing list