Install AHCI Support for ATI SB600 SATA Controllers on Existing Windows Installations

Revision as of 00:44, 12 January 2016 by Kipkis (Kipkis | contribs) (importing article from wikihow)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

SATA is the new standard for communication between a computer system and hard drives, CD and DVD drives, etc., and replaces the slower IDE standard. However, many people do not realize that SATA comes in two flavours: AHCI mode, or "real" SATA mode, and a form of IDE emulation over the SATA bus. Windows XP does not have native support for AHCI. Booting the Windows XP Professional x64 CD actually bluescreens when AHCI mode is enabled from the BIOS.

When AHCI is disabled in the BIOS, booting Windows works just fine, but as soon as you try to install AHCI drivers for your chipset they fail - because no AHCI support is detected, since it's disabled. When you reboot and enable AHCI support in the BIOS, Windows dies early in the boot process because it can no longer read from its installation partition, since it doesn't have AHCI drivers.

The ugly and unfortunate truth: the only way to properly install AHCI support for many chipsets involves registry editing. In effect, you're doing a hack job temporary manual installation of the drivers for Windows to load so that you can have the drivers install properly.

NOTE: These instructions are probably correct for XP and Vista. However, for Windows 7 there appears to be a different method, at least for x64 Win 7. The problem with using this method described here with Windows 7 is that AMD does not make an ahcix64.sys driver for the SB600 chip under Windows 7. They do make an AHCI driver, called amdsata.sys, but rather than adapting this procedure for that driver, a simpler procedure works. There is a need for a separate page for Windows 7 installations on this chip.

Steps

  1. Back up your critical data, and especially your registry. There are lots of programs out there to do it. Hopefully you won't have to use your backup, and the procedure is pretty safe, but consider yourself warned anyway.
  2. Make sure AHCI is disabled in the BIOS. If it's enabled and you can boot into windows, you don't need this walkthrough.
  3. Download the drivers for the M3A/ATI SB600 from here: http://support.asus.com/download/download.aspx?SLanguage=en-us&model=M3A
  4. Extract the zip file.
  5. Copy the appropriate .sys (in my case, ahcix64.sys) to C:\Windows\System32\drivers\.
  6. Copy the following text, paste it into Notepad, and save it to a .reg file (for instance, ahci.reg):

    </li>
  7. Download a handy Linux-based live CD (or even better, dual-boot with Linux), boot it, and run something to the effect of
    <code>sudo lspci -vvnn | less
    to make sure that the device and subsystem numbers are correct. This will list, in great detail, all of your PCI devices and their properties. Your AHCI controller will be in there somewhere, and its subsystem and device number will be listed. Edit the registry file as necessary.
  8. Double-click on the registry file to add its entries to your registry.
  9. *After modifying the registry, you must do this on the next boot. If you don't, it is likely that your changes will be lost and you'll have to install the .reg file again. Reboot, go into the BIOS and enable AHCI. Then squint, pray, and let Windows boot.
  10. Disable AHCI in the BIOS, if Windows bluescreens and reboots your system. If it does fail, tweak the registry file a little and try again.
  11. Replace the ugly hack job of a driver "installation" with a true installation by running AsusSetup.exe (or the like) from the driver zip. and let the official driver install on the computer.
  12. Reboot the computer, to have the driver take effect.

Tips

  • Did work fine on SB700 on MSI KA790GX the only thing is that linux does display the subsystem in reverse order. like mine was shown as subsystem 1462:7510 in linux and in the registry file it should be 75101462.
  • I've verified success with the same procedure, replacing all instances of *64 with *86 for Windows XP Professional (32-bit).
  • Try going into the registry and setting EnableHIPM and EnableDIPM to "1". HIPM and DIPM stand for Host-Initiated Power Management and Device-Initiated Power Management, respectively. If this SATA controller is in a laptop, you might improve power consumption or behaviour of sleep modes.
  • You can double check the correct combination in the txtsetup.oem file that in the driver package. Mine was listed as:
  • id = "PCI\VEN_1002&DEV_4391&SUBSYS_75011462", "ahcix86"
  • Only after i matched the VEN DEV and SUBSYS numbers the Windows xp booted. I had to retry exactly 4 times. First i just inserted the reg as it is. 2nd i corrected the PCI IDs, 3rd i corrected the Subsystem but had it in incorrect order, than i read the txtsetup.oem and found my subsystem that matched the linux output. Thanks very much.
  • Instead of booting into Linux, if you can manage to boot into Windows 10 (which will have working a standard AHCI driver) you can also use either Device Manager or msinfo32 to look at the device ID. Make sure you have the BIOS set to AHCI before you boot into Windows 10 and don't forget to change it back to IDE emulation before booting back into Windows XP.

Warnings

  • As a disclaimer, this has been tried on an Asus M3A motherboard with Windows XP Professional x64 edition and a SATA/AHCI-capable hard drive. Thankfully, it worked the first time. There is no guarantee that this will work at all, much less that it will work if your setup is different.

Related Articles

Sources and Citations