diff options
-rw-r--r-- | drivers/ata/ahci.c | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index d75b7c9ea323..ac875c506740 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
@@ -1684,11 +1684,34 @@ static void ahci_port_init(struct device *dev, struct ata_port *ap, | |||
1684 | static void ahci_init_controller(struct ata_host *host) | 1684 | static void ahci_init_controller(struct ata_host *host) |
1685 | { | 1685 | { |
1686 | struct ahci_host_priv *hpriv = host->private_data; | 1686 | struct ahci_host_priv *hpriv = host->private_data; |
1687 | struct pci_dev *pdev = to_pci_dev(host->dev); | ||
1688 | void __iomem *mmio = hpriv->mmio; | 1687 | void __iomem *mmio = hpriv->mmio; |
1689 | int i; | 1688 | int i; |
1690 | void __iomem *port_mmio; | 1689 | void __iomem *port_mmio; |
1691 | u32 tmp; | 1690 | u32 tmp; |
1691 | |||
1692 | for (i = 0; i < host->n_ports; i++) { | ||
1693 | struct ata_port *ap = host->ports[i]; | ||
1694 | |||
1695 | port_mmio = ahci_port_base(ap); | ||
1696 | if (ata_port_is_dummy(ap)) | ||
1697 | continue; | ||
1698 | |||
1699 | ahci_port_init(host->dev, ap, i, mmio, port_mmio); | ||
1700 | } | ||
1701 | |||
1702 | tmp = readl(mmio + HOST_CTL); | ||
1703 | VPRINTK("HOST_CTL 0x%x\n", tmp); | ||
1704 | writel(tmp | HOST_IRQ_EN, mmio + HOST_CTL); | ||
1705 | tmp = readl(mmio + HOST_CTL); | ||
1706 | VPRINTK("HOST_CTL 0x%x\n", tmp); | ||
1707 | } | ||
1708 | |||
1709 | static void ahci_pci_init_controller(struct ata_host *host) | ||
1710 | { | ||
1711 | struct ahci_host_priv *hpriv = host->private_data; | ||
1712 | struct pci_dev *pdev = to_pci_dev(host->dev); | ||
1713 | void __iomem *port_mmio; | ||
1714 | u32 tmp; | ||
1692 | int mv; | 1715 | int mv; |
1693 | 1716 | ||
1694 | if (hpriv->flags & AHCI_HFLAG_MV_PATA) { | 1717 | if (hpriv->flags & AHCI_HFLAG_MV_PATA) { |
@@ -1707,21 +1730,7 @@ static void ahci_init_controller(struct ata_host *host) | |||
1707 | writel(tmp, port_mmio + PORT_IRQ_STAT); | 1730 | writel(tmp, port_mmio + PORT_IRQ_STAT); |
1708 | } | 1731 | } |
1709 | 1732 | ||
1710 | for (i = 0; i < host->n_ports; i++) { | 1733 | ahci_init_controller(host); |
1711 | struct ata_port *ap = host->ports[i]; | ||
1712 | |||
1713 | port_mmio = ahci_port_base(ap); | ||
1714 | if (ata_port_is_dummy(ap)) | ||
1715 | continue; | ||
1716 | |||
1717 | ahci_port_init(host->dev, ap, i, mmio, port_mmio); | ||
1718 | } | ||
1719 | |||
1720 | tmp = readl(mmio + HOST_CTL); | ||
1721 | VPRINTK("HOST_CTL 0x%x\n", tmp); | ||
1722 | writel(tmp | HOST_IRQ_EN, mmio + HOST_CTL); | ||
1723 | tmp = readl(mmio + HOST_CTL); | ||
1724 | VPRINTK("HOST_CTL 0x%x\n", tmp); | ||
1725 | } | 1734 | } |
1726 | 1735 | ||
1727 | static void ahci_dev_config(struct ata_device *dev) | 1736 | static void ahci_dev_config(struct ata_device *dev) |
@@ -2709,7 +2718,7 @@ static int ahci_pci_device_resume(struct pci_dev *pdev) | |||
2709 | if (rc) | 2718 | if (rc) |
2710 | return rc; | 2719 | return rc; |
2711 | 2720 | ||
2712 | ahci_init_controller(host); | 2721 | ahci_pci_init_controller(host); |
2713 | } | 2722 | } |
2714 | 2723 | ||
2715 | ata_host_resume(host); | 2724 | ata_host_resume(host); |
@@ -3449,7 +3458,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
3449 | if (rc) | 3458 | if (rc) |
3450 | return rc; | 3459 | return rc; |
3451 | 3460 | ||
3452 | ahci_init_controller(host); | 3461 | ahci_pci_init_controller(host); |
3453 | ahci_print_info(host); | 3462 | ahci_print_info(host); |
3454 | 3463 | ||
3455 | pci_set_master(pdev); | 3464 | pci_set_master(pdev); |