summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata/ata-chipset.c
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2003-02-25 12:56:37 +0000
committersos <sos@FreeBSD.org>2003-02-25 12:56:37 +0000
commit855a905ec2a217490e4babe36983a424d2a91c43 (patch)
treef5957b1137863b1c3ca441f54ef9864c853b4cf5 /sys/dev/ata/ata-chipset.c
parent0553f85eca20830d038f52d5c33066fef820ca73 (diff)
downloadFreeBSD-src-855a905ec2a217490e4babe36983a424d2a91c43.zip
FreeBSD-src-855a905ec2a217490e4babe36983a424d2a91c43.tar.gz
Fix support for the old CMD 646 chips, interrupt setup was wrong.
Diffstat (limited to 'sys/dev/ata/ata-chipset.c')
-rw-r--r--sys/dev/ata/ata-chipset.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/sys/dev/ata/ata-chipset.c b/sys/dev/ata/ata-chipset.c
index 7456bf3..968cf24 100644
--- a/sys/dev/ata/ata-chipset.c
+++ b/sys/dev/ata/ata-chipset.c
@@ -314,10 +314,10 @@ ata_ali_ident(device_t dev)
struct ata_pci_controller *ctlr = device_get_softc(dev);
struct ata_chip_id *idx;
static struct ata_chip_id ids[] =
- {{ ATA_ALI_5229, 0xc4, 0, ALICABLE, ATA_UDMA5, "AcerLabs Aladdin" },
- { ATA_ALI_5229, 0xc2, 0, ALICABLE, ATA_UDMA4, "AcerLabs Aladdin" },
- { ATA_ALI_5229, 0x20, 0, ALIOLD, ATA_UDMA2, "AcerLabs Aladdin" },
- { ATA_ALI_5229, 0x00, 0, ALIOLD, ATA_WDMA2, "AcerLabs Aladdin" },
+ {{ ATA_ALI_5229, 0xc4, 0, ALICABLE, ATA_UDMA5, "AcerLabs Aladdin" },
+ { ATA_ALI_5229, 0xc2, 0, ALICABLE, ATA_UDMA4, "AcerLabs Aladdin" },
+ { ATA_ALI_5229, 0x20, 0, ALIOLD, ATA_UDMA2, "AcerLabs Aladdin" },
+ { ATA_ALI_5229, 0x00, 0, ALIOLD, ATA_WDMA2, "AcerLabs Aladdin" },
{ 0, 0, 0, 0, 0, 0}};
char buffer[64];
@@ -1276,11 +1276,11 @@ ata_sii_ident(device_t dev)
struct ata_pci_controller *ctlr = device_get_softc(dev);
struct ata_chip_id *idx;
static struct ata_chip_id ids[] =
- {{ ATA_SII0680, 0x00, SII_SETCLK, 0x00, ATA_UDMA6, "SiI 0680" },
- { ATA_CMD649, 0x00, 0, SII_INTR, ATA_UDMA5, "CMD 649" },
- { ATA_CMD648, 0x00, 0, SII_INTR, ATA_UDMA4, "CMD 648" },
- { ATA_CMD646, 0x07, 0, 0x00, ATA_UDMA2, "CMD 646U2" },
- { ATA_CMD646, 0x00, 0, 0x00, ATA_WDMA2, "CMD 646" },
+ {{ ATA_SII0680, 0x00, 0, SII_SETCLK, ATA_UDMA6, "SiI 0680" },
+ { ATA_CMD649, 0x00, 0, SII_INTR, ATA_UDMA5, "CMD 649" },
+ { ATA_CMD648, 0x00, 0, SII_INTR, ATA_UDMA4, "CMD 648" },
+ { ATA_CMD646, 0x07, 0, SII_ENINTR, ATA_UDMA2, "CMD 646U2" },
+ { ATA_CMD646, 0x00, 0, SII_ENINTR, ATA_WDMA2, "CMD 646" },
{ 0, 0, 0, 0, 0, 0}};
char buffer[64];
@@ -1313,7 +1313,10 @@ ata_sii_chipinit(device_t dev)
return ENXIO;
}
- if (ctlr->chip->cfg1 == SII_SETCLK) {
+ if (ctlr->chip->cfg2 & SII_ENINTR)
+ pci_write_config(dev, 0x71, 0x01, 1);
+
+ if (ctlr->chip->cfg2 & SII_SETCLK) {
if ((pci_read_config(dev, 0x8a, 1) & 0x30) != 0x10)
pci_write_config(dev, 0x8a,
(pci_read_config(dev, 0x8a, 1) & 0x0F) | 0x10, 1);
OpenPOWER on IntegriCloud