summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata/ata-dma.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/ata/ata-dma.c')
-rw-r--r--sys/dev/ata/ata-dma.c38
1 files changed, 22 insertions, 16 deletions
diff --git a/sys/dev/ata/ata-dma.c b/sys/dev/ata/ata-dma.c
index 0f430a5..dc96bde 100644
--- a/sys/dev/ata/ata-dma.c
+++ b/sys/dev/ata/ata-dma.c
@@ -280,7 +280,24 @@ ata_dmainit(struct ata_softc *scp, int32_t device,
/* we could set PIO mode timings, but we assume the BIOS did that */
break;
+ case 0x74091022: /* AMD 756 */
+ if (udmamode >= 4) {
+ error = ata_command(scp, device, ATA_C_SETFEATURES, 0, 0, 0,
+ ATA_UDMA4, ATA_C_F_SETXFER, ATA_WAIT_READY);
+ if (bootverbose)
+ ata_printf(scp, device,
+ "%s setting up UDMA4 mode on AMD chip\n",
+ (error) ? "failed" : "success");
+ if (!error) {
+ pci_write_config(parent, 0x53 - devno, 0xc3, 1);
+ scp->mode[ATA_DEV(device)] = ATA_UDMA4;
+ return;
+ }
+ }
+ goto via_82c586;
+
case 0x06861106: /* VIA 82C686 */
+via_82c686:
if (udmamode >= 4) {
error = ata_command(scp, device, ATA_C_SETFEATURES, 0, 0, 0,
ATA_UDMA4, ATA_C_F_SETXFER, ATA_WAIT_READY);
@@ -309,25 +326,14 @@ ata_dmainit(struct ata_softc *scp, int32_t device,
}
goto via_generic;
- case 0x74091022: /* AMD 756 */
- if (udmamode >= 4) {
- error = ata_command(scp, device, ATA_C_SETFEATURES, 0, 0, 0,
- ATA_UDMA4, ATA_C_F_SETXFER, ATA_WAIT_READY);
- if (bootverbose)
- ata_printf(scp, device,
- "%s setting up UDMA4 mode on AMD chip\n",
- (error) ? "failed" : "success");
- if (!error) {
- pci_write_config(parent, 0x53 - devno, 0xc3, 1);
- scp->mode[ATA_DEV(device)] = ATA_UDMA4;
- return;
- }
- }
+ case 0x05961106: /* VIA 82C596 */
+ /* 82c596 revision >= 0x12 is like the 82c686 */
+ if (ata_find_dev(parent, 0x05961106, 0x12))
+ goto via_82c686;
/* FALLTHROUGH */
- case 0x05961106: /* VIA 82C596 */
case 0x05861106: /* VIA 82C586 */
-
+via_82c586:
/* UDMA2 mode only on 82C586 > rev1, 82C596, AMD 756 */
if ((udmamode >= 2 && scp->chiptype == 0x05861106 &&
pci_read_config(scp->dev, 0x08, 1) >= 0x01) ||
OpenPOWER on IntegriCloud