diff --git a/sys/dev/ata/ata-disk.c b/sys/dev/ata/ata-disk.c index 338485f74829..59aa2500b867 100644 --- a/sys/dev/ata/ata-disk.c +++ b/sys/dev/ata/ata-disk.c @@ -858,9 +858,13 @@ ad_tagsupported(struct ad_softc *adp) const char *drives[] = {"IBM-DPTA", "IBM-DTLA", NULL}; int i = 0; - /* Promise controllers doesn't work with tagged queuing */ - if ((adp->controller->chiptype & 0x0000ffff) == 0x0000105a) - return 0; + switch (adp->controller->chiptype) { + case 0x4d33105a: /* Promises before TX2 doesn't work with tagged queuing */ + case 0x4d38105a: + case 0x0d30105a: + case 0x4d30105a: + return 0; + } /* check that drive does DMA, has tags enabled, and is one we know works */ if (adp->controller->mode[ATA_DEV(adp->unit)] >= ATA_DMA && diff --git a/sys/dev/ata/ata-dma.c b/sys/dev/ata/ata-dma.c index d4dc3a57e2d7..4d52518d1392 100644 --- a/sys/dev/ata/ata-dma.c +++ b/sys/dev/ata/ata-dma.c @@ -1045,8 +1045,6 @@ promise_timing(struct ata_softc *scp, int devno, int mode) case 0x4d38105a: /* Promise Ultra/Fasttrak 66 */ case 0x4d30105a: /* Promise Ultra/Fasttrak 100 */ case 0x0d30105a: /* Promise OEM ATA 100 */ - case 0x4d68105a: /* Promise TX2 ATA 100 */ - case 0x6268105a: /* Promise TX2v2 ATA 100 */ switch (mode) { default: case ATA_PIO0: t->pa = 15; t->pb = 31; t->mb = 7; t->mc = 15; break; @@ -1060,6 +1058,10 @@ promise_timing(struct ata_softc *scp, int devno, int mode) case ATA_UDMA5: t->pa = 3; t->pb = 7; t->mb = 1; t->mc = 1; break; } break; + + case 0x4d68105a: /* Promise TX2 ATA 100 */ + case 0x6268105a: /* Promise TX2v2 ATA 100 */ + return; } pci_write_config(device_get_parent(scp->dev), 0x60 + (devno<<2), timing, 4); } diff --git a/sys/dev/ata/ata-pci.c b/sys/dev/ata/ata-pci.c index 0697b9771265..c7ef29641151 100644 --- a/sys/dev/ata/ata-pci.c +++ b/sys/dev/ata/ata-pci.c @@ -173,9 +173,11 @@ ata_pci_match(device_t dev) case 0x0d30105a: case 0x4d30105a: + return "Promise ATA100 controller"; + case 0x4d68105a: case 0x6268105a: - return "Promise ATA100 controller"; + return "Promise TX2 ATA100 controller"; case 0x00041103: switch (pci_get_revid(dev)) { @@ -278,15 +280,13 @@ ata_pci_attach(device_t dev) (pci_read_config(dev, 0x53, 1) & ~0x01) | 0x02, 1); break; - case 0x4d38105a: /* Promise 66 & 100 need their clock changed */ + case 0x4d38105a: /* Promise 66 & 100 (before TX2) need the clock changed */ case 0x4d30105a: case 0x0d30105a: - case 0x4d68105a: - case 0x6268105a: ATA_OUTB(sc->bmio, 0x11, ATA_INB(sc->bmio, 0x11) | 0x0a); /* FALLTHROUGH */ - case 0x4d33105a: /* Promise (all) need burst mode to be turned on */ + case 0x4d33105a: /* Promise (before TX2) need burst mode turned on */ ATA_OUTB(sc->bmio, 0x1f, ATA_INB(sc->bmio, 0x1f) | 0x01); break;