Forcing AHCI

sys/arch/i386/pci/pci_addr_fixup.c

+// jakllsch - ICH7M AHCI "fixup"
+#if 1
+
+       pcitag_t jakllsch_tag;
+       pcireg_t jakllsch_reg;
+       jakllsch_tag = pci_make_tag(pc, 0, 31, 2);
+
+       // MAP.SMS to AHCI mode, enable ports
+       jakllsch_reg = pci_conf_read(pc, jakllsch_tag, 0x90);
+       jakllsch_reg &= 0xffffff00;
+       jakllsch_reg |= (1 << 6);
+       jakllsch_reg |= (0xf << 16);
+       pci_conf_write(pc, jakllsch_tag, 0x90, jakllsch_reg);
+
+       // SIR.SCRAE set to enable fixup of AHCI ABAR
+       jakllsch_reg = pci_conf_read(pc, jakllsch_tag, 0x94);
+       jakllsch_reg |= 0x200;
+       pci_conf_write(pc, jakllsch_tag, 0x94, jakllsch_reg);
+
+#endif

i also had to do this a bit earlier:

-       start = x86_round_page(avail_end + 1);
+//XXX  start = x86_round_page(avail_end + 1);
+       start = x86_round_page(0x40000000 + 1);

sys/dev/ic/ahcisata_core.c

just after it tells the controller it's ahci from here on:

AHCI_WRITE(sc, AHCI_PI, 0xf);

jakllsch's wiki: NetBSD/AHCI (last edited 2007-07-08 02:00:04 by JonathanKollasch)