Index: sys/dev/ahci/ahci.c =================================================================== --- sys/dev/ahci/ahci.c (revision 220643) +++ sys/dev/ahci/ahci.c (working copy) @@ -250,7 +250,7 @@ static struct { {0x0abe10de, 0x00, "NVIDIA MCP79", AHCI_Q_NOAA}, {0x0abf10de, 0x00, "NVIDIA MCP79", AHCI_Q_NOAA}, {0x0d8410de, 0x00, "NVIDIA MCP89", AHCI_Q_NOAA}, - {0x0d8510de, 0x00, "NVIDIA MCP89", AHCI_Q_NOAA}, + {0x0d8510de, 0x00, "NVIDIA MCP89", AHCI_Q_NOFORCE|AHCI_Q_NOAA}, {0x0d8610de, 0x00, "NVIDIA MCP89", AHCI_Q_NOAA}, {0x0d8710de, 0x00, "NVIDIA MCP89", AHCI_Q_NOAA}, {0x0d8810de, 0x00, "NVIDIA MCP89", AHCI_Q_NOAA}, Index: sys/dev/ata/chipsets/ata-nvidia.c =================================================================== --- sys/dev/ata/chipsets/ata-nvidia.c (revision 220643) +++ sys/dev/ata/chipsets/ata-nvidia.c (working copy) @@ -170,6 +170,8 @@ ata_nvidia_probe(device_t dev) { ATA_NFORCE_MCP89_AA, 0, NVAHCI, 0, ATA_SA300, "nForce MCP89" }, { ATA_NFORCE_MCP89_AB, 0, NVAHCI, 0, ATA_SA300, "nForce MCP89" }, { 0, 0, 0, 0, 0, 0}} ; + static struct ata_chip_id quirk_apple_mcp89 = + { ATA_NFORCE_MCP89_A1, 0, 0, 0, ATA_UDMA2, "nForce MCP89" }; if (pci_get_vendor(dev) != ATA_NVIDIA_ID) return ENXIO; @@ -177,6 +179,14 @@ ata_nvidia_probe(device_t dev) if (!(ctlr->chip = ata_match_chip(dev, ids))) return ENXIO; + /* + * XXX Recent Apple Mac with this chipset does not initialize AHCI mode + * unless it is started from EFI loader. However, ATA compat mode works. + */ + if (ctlr->chip->chipid == ATA_NFORCE_MCP89_A1 && + pci_get_subclass(dev) == PCIS_STORAGE_IDE) + ctlr->chip = &quirk_apple_mcp89; + ata_set_desc(dev); if (ctlr->chip->cfg1 & NVAHCI) ctlr->chipinit = ata_ahci_chipinit;