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>
This commit is contained in:
Родитель
da3dbb17a0
Коммит
274c1fde5c
|
@ -545,13 +545,19 @@ static void ahci_save_initial_config(struct pci_dev *pdev,
|
|||
hpriv->saved_cap = cap = readl(mmio + HOST_CAP);
|
||||
hpriv->saved_port_map = port_map = readl(mmio + HOST_PORTS_IMPL);
|
||||
|
||||
/* some chips lie about 64bit support */
|
||||
/* some chips have errata preventing 64bit use */
|
||||
if ((cap & HOST_CAP_64) && (pi->flags & AHCI_FLAG_32BIT_ONLY)) {
|
||||
dev_printk(KERN_INFO, &pdev->dev,
|
||||
"controller can't do 64bit DMA, forcing 32bit\n");
|
||||
cap &= ~HOST_CAP_64;
|
||||
}
|
||||
|
||||
if ((cap & HOST_CAP_NCQ) && (pi->flags & AHCI_FLAG_NO_NCQ)) {
|
||||
dev_printk(KERN_INFO, &pdev->dev,
|
||||
"controller can't do NCQ, turning off CAP_NCQ\n");
|
||||
cap &= ~HOST_CAP_NCQ;
|
||||
}
|
||||
|
||||
/* fixup zero port_map */
|
||||
if (!port_map) {
|
||||
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)
|
|||
ahci_save_initial_config(pdev, &pi, hpriv);
|
||||
|
||||
/* prepare host */
|
||||
if (!(pi.flags & AHCI_FLAG_NO_NCQ) && (hpriv->cap & HOST_CAP_NCQ))
|
||||
if (hpriv->cap & HOST_CAP_NCQ)
|
||||
pi.flags |= ATA_FLAG_NCQ;
|
||||
|
||||
host = ata_host_alloc_pinfo(&pdev->dev, ppi, fls(hpriv->port_map));
|
||||
|
|
Загрузка…
Ссылка в новой задаче