diff options
author | sos <sos@FreeBSD.org> | 2000-12-19 10:37:03 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2000-12-19 10:37:03 +0000 |
commit | 787bf26011614a81c16dfac1a27737c30d9c1583 (patch) | |
tree | 1bb01ffec70eb244d2c66fc6e7f018f555ff76f1 /sys | |
parent | 27b662b36f78ad5ffb9d63c225b14a39f683fc63 (diff) | |
download | FreeBSD-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.c | 5 | ||||
-rw-r--r-- | sys/dev/ata/ata-dma.c | 13 |
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 |