diff options
author | Tejun Heo <htejun@gmail.com> | 2007-07-16 01:29:40 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-07-20 08:02:11 -0400 |
commit | 274c1fde5c775a53331427d454745b9ecc5c783b (patch) | |
tree | df39d94ac51195e25a04a7365ab88e2eb536d261 | |
parent | da3dbb17a0e9a9ec7f5aed95f1fddadb790edc9d (diff) |
ahci: make NO_NCQ handling more consistent
ahci_save_initial_config() is responsible for reading, screening the
host CAP register and storing the modified result into hpriv->cap for
the rest of the driver. Move ATA_FLAG_NO_NCQ handling into
ahci_save_initial_config(). It's more consistent this way and the
rest of the driver can always refer to hpriv->cap to determine
configured capability.
Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r-- | drivers/ata/ahci.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index e044d6477a0f..9475e5619af1 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
@@ -545,13 +545,19 @@ static void ahci_save_initial_config(struct pci_dev *pdev, | |||
545 | hpriv->saved_cap = cap = readl(mmio + HOST_CAP); | 545 | hpriv->saved_cap = cap = readl(mmio + HOST_CAP); |
546 | hpriv->saved_port_map = port_map = readl(mmio + HOST_PORTS_IMPL); | 546 | hpriv->saved_port_map = port_map = readl(mmio + HOST_PORTS_IMPL); |
547 | 547 | ||
548 | /* some chips lie about 64bit support */ | 548 | /* some chips have errata preventing 64bit use */ |
549 | if ((cap & HOST_CAP_64) && (pi->flags & AHCI_FLAG_32BIT_ONLY)) { | 549 | if ((cap & HOST_CAP_64) && (pi->flags & AHCI_FLAG_32BIT_ONLY)) { |
550 | dev_printk(KERN_INFO, &pdev->dev, | 550 | dev_printk(KERN_INFO, &pdev->dev, |
551 | "controller can't do 64bit DMA, forcing 32bit\n"); | 551 | "controller can't do 64bit DMA, forcing 32bit\n"); |
552 | cap &= ~HOST_CAP_64; | 552 | cap &= ~HOST_CAP_64; |
553 | } | 553 | } |
554 | 554 | ||
555 | if ((cap & HOST_CAP_NCQ) && (pi->flags & AHCI_FLAG_NO_NCQ)) { | ||
556 | dev_printk(KERN_INFO, &pdev->dev, | ||
557 | "controller can't do NCQ, turning off CAP_NCQ\n"); | ||
558 | cap &= ~HOST_CAP_NCQ; | ||
559 | } | ||
560 | |||
555 | /* fixup zero port_map */ | 561 | /* fixup zero port_map */ |
556 | if (!port_map) { | 562 | if (!port_map) { |
557 | port_map = (1 << ahci_nr_ports(cap)) - 1; | 563 | port_map = (1 << ahci_nr_ports(cap)) - 1; |
@@ -1822,7 +1828,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1822 | ahci_save_initial_config(pdev, &pi, hpriv); | 1828 | ahci_save_initial_config(pdev, &pi, hpriv); |
1823 | 1829 | ||
1824 | /* prepare host */ | 1830 | /* prepare host */ |
1825 | if (!(pi.flags & AHCI_FLAG_NO_NCQ) && (hpriv->cap & HOST_CAP_NCQ)) | 1831 | if (hpriv->cap & HOST_CAP_NCQ) |
1826 | pi.flags |= ATA_FLAG_NCQ; | 1832 | pi.flags |= ATA_FLAG_NCQ; |
1827 | 1833 | ||
1828 | host = ata_host_alloc_pinfo(&pdev->dev, ppi, fls(hpriv->port_map)); | 1834 | host = ata_host_alloc_pinfo(&pdev->dev, ppi, fls(hpriv->port_map)); |