Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
[linux-2.6-microblaze.git] / drivers / ata / ahci.c
index a0cc0ed..5f039f1 100644 (file)
@@ -790,7 +790,7 @@ static void ahci_pci_print_info(struct ata_host *host)
  */
 static void ahci_p5wdh_workaround(struct ata_host *host)
 {
-       static struct dmi_system_id sysids[] = {
+       static const struct dmi_system_id sysids[] = {
                {
                        .ident = "P5W DH Deluxe",
                        .matches = {
@@ -1221,6 +1221,9 @@ static int ahci_init_interrupts(struct pci_dev *pdev, unsigned int n_ports,
                goto single_msi;
        }
 
+       if (nvec > 1)
+               hpriv->flags |= AHCI_HFLAG_MULTI_MSI;
+
        return nvec;
 
 single_msi:
@@ -1233,71 +1236,6 @@ intx:
        return 0;
 }
 
-/**
- *     ahci_host_activate - start AHCI host, request IRQs and register it
- *     @host: target ATA host
- *     @irq: base IRQ number to request
- *     @n_msis: number of MSIs allocated for this host
- *     @irq_handler: irq_handler used when requesting IRQs
- *     @irq_flags: irq_flags used when requesting IRQs
- *
- *     Similar to ata_host_activate, but requests IRQs according to AHCI-1.1
- *     when multiple MSIs were allocated. That is one MSI per port, starting
- *     from @irq.
- *
- *     LOCKING:
- *     Inherited from calling layer (may sleep).
- *
- *     RETURNS:
- *     0 on success, -errno otherwise.
- */
-int ahci_host_activate(struct ata_host *host, int irq, unsigned int n_msis)
-{
-       int i, rc;
-
-       /* Sharing Last Message among several ports is not supported */
-       if (n_msis < host->n_ports)
-               return -EINVAL;
-
-       rc = ata_host_start(host);
-       if (rc)
-               return rc;
-
-       for (i = 0; i < host->n_ports; i++) {
-               struct ahci_port_priv *pp = host->ports[i]->private_data;
-
-               /* Do not receive interrupts sent by dummy ports */
-               if (!pp) {
-                       disable_irq(irq + i);
-                       continue;
-               }
-
-               rc = devm_request_threaded_irq(host->dev, irq + i,
-                                              ahci_hw_interrupt,
-                                              ahci_thread_fn, IRQF_SHARED,
-                                              pp->irq_desc, host->ports[i]);
-               if (rc)
-                       goto out_free_irqs;
-       }
-
-       for (i = 0; i < host->n_ports; i++)
-               ata_port_desc(host->ports[i], "irq %d", irq + i);
-
-       rc = ata_host_register(host, &ahci_sht);
-       if (rc)
-               goto out_free_all_irqs;
-
-       return 0;
-
-out_free_all_irqs:
-       i = host->n_ports;
-out_free_irqs:
-       for (i--; i >= 0; i--)
-               devm_free_irq(host->dev, irq + i, host->ports[i]);
-
-       return rc;
-}
-
 static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
        unsigned int board_id = ent->driver_data;
@@ -1306,7 +1244,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        struct device *dev = &pdev->dev;
        struct ahci_host_priv *hpriv;
        struct ata_host *host;
-       int n_ports, n_msis, i, rc;
+       int n_ports, i, rc;
        int ahci_pci_bar = AHCI_PCI_BAR_STANDARD;
 
        VPRINTK("ENTER\n");
@@ -1459,9 +1397,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
         */
        n_ports = max(ahci_nr_ports(hpriv->cap), fls(hpriv->port_map));
 
-       n_msis = ahci_init_interrupts(pdev, n_ports, hpriv);
-       if (n_msis > 1)
-               hpriv->flags |= AHCI_HFLAG_MULTI_MSI;
+       ahci_init_interrupts(pdev, n_ports, hpriv);
 
        host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports);
        if (!host)
@@ -1513,11 +1449,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 
        pci_set_master(pdev);
 
-       if (hpriv->flags & AHCI_HFLAG_MULTI_MSI)
-               return ahci_host_activate(host, pdev->irq, n_msis);
-
-       return ata_host_activate(host, pdev->irq, ahci_interrupt, IRQF_SHARED,
-                                &ahci_sht);
+       return ahci_host_activate(host, pdev->irq, &ahci_sht);
 }
 
 module_pci_driver(ahci_pci_driver);