From 2ca38c74dfada497bbd0673cfab21737229c0325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Schmidt?= Date: Mon, 13 Feb 2006 13:47:58 +0000 Subject: [PATCH] Add a reset of the AHCI machinery to the ICH6/ICH7 support. This should fix the missed devices on some systems. --- sys/dev/ata/ata-chipset.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/sys/dev/ata/ata-chipset.c b/sys/dev/ata/ata-chipset.c index 6ccd064e1bd..2936534a1dc 100644 --- a/sys/dev/ata/ata-chipset.c +++ b/sys/dev/ata/ata-chipset.c @@ -1658,6 +1658,18 @@ ata_intel_chipinit(device_t dev) RF_ACTIVE))) { /* is AHCI or RAID mode enabled in BIOS ? */ if (pci_read_config(dev, 0x90, 1) & 0xc0) { + + /* reset AHCI controller */ + ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC, + ATA_INL(ctlr->r_res2, ATA_AHCI_GHC) | ATA_AHCI_GHC_HR); + DELAY(1000000); + if (ATA_INL(ctlr->r_res2, ATA_AHCI_GHC) & ATA_AHCI_GHC_HR) { + bus_release_resource(dev, ctlr->r_type2, + ctlr->r_rid2, ctlr->r_res2); + device_printf(dev, "AHCI controller reset failure\n"); + return ENXIO; + } + /* enable AHCI mode */ ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC, ATA_AHCI_GHC_AE);