summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2000-12-19 10:37:03 +0000
committersos <sos@FreeBSD.org>2000-12-19 10:37:03 +0000
commit787bf26011614a81c16dfac1a27737c30d9c1583 (patch)
tree1bb01ffec70eb244d2c66fc6e7f018f555ff76f1 /sys
parent27b662b36f78ad5ffb9d63c225b14a39f683fc63 (diff)
downloadFreeBSD-src-787bf26011614a81c16dfac1a27737c30d9c1583.zip
FreeBSD-src-787bf26011614a81c16dfac1a27737c30d9c1583.tar.gz
Proberly back down DMA modes on the Acer Aladdin.
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/ata/ata-all.c5
-rw-r--r--sys/dev/ata/ata-dma.c13
2 files changed, 13 insertions, 5 deletions
diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c
index 1d147f5..1ab81e4 100644
--- a/sys/dev/ata/ata-all.c
+++ b/sys/dev/ata/ata-all.c
@@ -264,7 +264,10 @@ ata_pci_match(device_t dev)
return "Intel ICH2 ATA100 controller";
case 0x522910b9:
- return "AcerLabs Aladdin ATA33 controller";
+ if (pci_get_revid(dev) < 0x20)
+ return "AcerLabs Aladdin ATA controller";
+ else
+ return "AcerLabs Aladdin ATA33 controller";
case 0x05711106:
if (ata_find_dev(dev, 0x05861106, 0))
diff --git a/sys/dev/ata/ata-dma.c b/sys/dev/ata/ata-dma.c
index 90c68db..8e818ba 100644
--- a/sys/dev/ata/ata-dma.c
+++ b/sys/dev/ata/ata-dma.c
@@ -311,6 +311,11 @@ ata_dmainit(struct ata_softc *scp, int device,
return;
}
}
+
+ /* make sure eventual UDMA mode from the BIOS is disabled */
+ pci_write_config(parent, 0x54,
+ pci_read_config(parent, 0x54, 4) & ~0x88880000, 4);
+
if (wdmamode >= 2 && apiomode >= 4) {
error = ata_command(scp, device, ATA_C_SETFEATURES, 0, 0, 0,
ATA_WDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
@@ -577,8 +582,6 @@ via_82c586:
case 0x02111166: /* ServerWorks ROSB4 ATA33 controller */
if (udmamode >= 2) {
- u_int16_t reg56;
-
error = ata_command(scp, device, ATA_C_SETFEATURES, 0, 0, 0,
ATA_UDMA2, ATA_C_F_SETXFER, ATA_WAIT_READY);
if (bootverbose)
@@ -586,6 +589,8 @@ via_82c586:
"%s setting UDMA2 on ServerWorks chip\n",
(error) ? "failed" : "success");
if (!error) {
+ u_int16_t reg56;
+
pci_write_config(parent, 0x54,
pci_read_config(parent, 0x54, 1) |
(0x01 << devno), 1);
@@ -897,8 +902,8 @@ cyrix_timing(struct ata_softc *scp, int devno, int mode)
case ATA_WDMA2: reg24 = 0x00002020; break;
case ATA_UDMA2: reg24 = 0x00911030; break;
}
- outl(scp->bmaddr + (devno * 8) + 0x20, reg20);
- outl(scp->bmaddr + (devno * 8) + 0x24, reg24);
+ outl(scp->bmaddr + (devno << 3) + 0x20, reg20);
+ outl(scp->bmaddr + (devno << 3) + 0x24, reg24);
}
static void
OpenPOWER on IntegriCloud