|
@@ -420,7 +420,7 @@ static const struct ata_port_info ahci_port_info[] = {
|
|
|
/* board_ahci_mv */
|
|
|
{
|
|
|
AHCI_HFLAGS (AHCI_HFLAG_NO_NCQ | AHCI_HFLAG_NO_MSI |
|
|
|
- AHCI_HFLAG_MV_PATA),
|
|
|
+ AHCI_HFLAG_MV_PATA | AHCI_HFLAG_NO_PMP),
|
|
|
.flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
|
|
|
ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA,
|
|
|
.pio_mask = 0x1f, /* pio0-4 */
|
|
@@ -487,7 +487,9 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
|
|
{ PCI_VDEVICE(INTEL, 0x3a05), board_ahci }, /* ICH10 */
|
|
|
{ PCI_VDEVICE(INTEL, 0x3a25), board_ahci }, /* ICH10 */
|
|
|
{ PCI_VDEVICE(INTEL, 0x3b24), board_ahci }, /* PCH RAID */
|
|
|
+ { PCI_VDEVICE(INTEL, 0x3b25), board_ahci }, /* PCH RAID */
|
|
|
{ PCI_VDEVICE(INTEL, 0x3b2b), board_ahci }, /* PCH RAID */
|
|
|
+ { PCI_VDEVICE(INTEL, 0x3b2c), board_ahci }, /* PCH RAID */
|
|
|
|
|
|
/* JMicron 360/1/3/5/6, match class to avoid IDE function */
|
|
|
{ PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
|
|
@@ -610,6 +612,15 @@ module_param(ahci_em_messages, int, 0444);
|
|
|
MODULE_PARM_DESC(ahci_em_messages,
|
|
|
"Set AHCI Enclosure Management Message type (0 = disabled, 1 = LED");
|
|
|
|
|
|
+#if defined(CONFIG_PATA_MARVELL) || defined(CONFIG_PATA_MARVELL_MODULE)
|
|
|
+static int marvell_enable;
|
|
|
+#else
|
|
|
+static int marvell_enable = 1;
|
|
|
+#endif
|
|
|
+module_param(marvell_enable, int, 0644);
|
|
|
+MODULE_PARM_DESC(marvell_enable, "Marvell SATA via AHCI (1 = enabled)");
|
|
|
+
|
|
|
+
|
|
|
static inline int ahci_nr_ports(u32 cap)
|
|
|
{
|
|
|
return (cap & 0x1f) + 1;
|
|
@@ -732,6 +743,8 @@ static void ahci_save_initial_config(struct pci_dev *pdev,
|
|
|
"MV_AHCI HACK: port_map %x -> %x\n",
|
|
|
port_map,
|
|
|
port_map & mv);
|
|
|
+ dev_printk(KERN_ERR, &pdev->dev,
|
|
|
+ "Disabling your PATA port. Use the boot option 'ahci.marvell_enable=0' to avoid this.\n");
|
|
|
|
|
|
port_map &= mv;
|
|
|
}
|
|
@@ -2533,6 +2546,12 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
|
if (!printed_version++)
|
|
|
dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
|
|
|
|
|
|
+ /* The AHCI driver can only drive the SATA ports, the PATA driver
|
|
|
+ can drive them all so if both drivers are selected make sure
|
|
|
+ AHCI stays out of the way */
|
|
|
+ if (pdev->vendor == PCI_VENDOR_ID_MARVELL && !marvell_enable)
|
|
|
+ return -ENODEV;
|
|
|
+
|
|
|
/* acquire resources */
|
|
|
rc = pcim_enable_device(pdev);
|
|
|
if (rc)
|