summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/ata/ata-disk.c10
-rw-r--r--sys/dev/ata/ata-dma.c6
-rw-r--r--sys/dev/ata/ata-pci.c10
3 files changed, 16 insertions, 10 deletions
diff --git a/sys/dev/ata/ata-disk.c b/sys/dev/ata/ata-disk.c
index 338485f..59aa250 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 d4dc3a5..4d52518 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 0697b97..c7ef296 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;
OpenPOWER on IntegriCloud