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);