Update the Promise TX2 code to DTRT and not what I guessed earlier.
Allow tagged queing on the Promise TX2 as it seems to work. Cudos to promise for making the most simple to program ATA chip.
This commit is contained in:
parent
ad3a51b894
commit
a8ae536239
@ -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 &&
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user