--- linux-3.2.0/drivers/ata/ahci.c.orig 2012-08-29 13:40:26.046851693 +0800 +++ linux-3.2.0/drivers/ata/ahci.c 2012-08-30 17:23:10.207838960 +0800 @@ -430,6 +430,9 @@ static int marvell_enable = 1; module_param(marvell_enable, int, 0644); MODULE_PARM_DESC(marvell_enable, "Marvell SATA via AHCI (1 = enabled)"); +static int promise_enable; +module_param(promise_enable, int, 0644); +MODULE_PARM_DESC(promise_enable, "Promise SATA via AHCI (1 = enabled)"); static void ahci_pci_save_initial_config(struct pci_dev *pdev, struct ahci_host_priv *hpriv) @@ -1049,6 +1052,16 @@ static int ahci_init_one(struct pci_dev if (pdev->vendor == PCI_VENDOR_ID_MARVELL && !marvell_enable) return -ENODEV; + /* + * In RAID mode, Promise software RAID need to replace + * original AHCI module, but if AHCI driver build-in kernel, + * Promise AHCI module need a boot option to disable it + */ + if (promise_enable && + ((pdev->class >> 8) == PCI_CLASS_STORAGE_RAID) && + (pdev->vendor == PCI_VENDOR_ID_ATI || + pdev->vendor == PCI_VENDOR_ID_AMD)) + return -ENODEV; + /* * For some reason, MCP89 on MacBook 7,1 doesn't work with * ahci, use ata_generic instead.