Commit c7a42156d99bcea7f8173ba7a6034bbaa2ecb77c
Committed by
Jeff Garzik
1 parent
55b637c6a0
Exists in
master
and in
7 other branches
ahci: disable 64bit dma on sb600
SB600 claims it can do 64bit DMA but it can't. Disable it. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Showing 1 changed file with 10 additions and 1 deletions Side-by-side Diff
drivers/ata/ahci.c
... | ... | @@ -170,6 +170,7 @@ |
170 | 170 | AHCI_FLAG_IGN_IRQ_IF_ERR = (1 << 25), /* ignore IRQ_IF_ERR */ |
171 | 171 | AHCI_FLAG_HONOR_PI = (1 << 26), /* honor PORTS_IMPL */ |
172 | 172 | AHCI_FLAG_IGN_SERR_INTERNAL = (1 << 27), /* ignore SERR_INTERNAL */ |
173 | + AHCI_FLAG_32BIT_ONLY = (1 << 28), /* force 32bit */ | |
173 | 174 | |
174 | 175 | AHCI_FLAG_COMMON = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | |
175 | 176 | ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA | |
... | ... | @@ -354,7 +355,8 @@ |
354 | 355 | /* board_ahci_sb600 */ |
355 | 356 | { |
356 | 357 | .flags = AHCI_FLAG_COMMON | |
357 | - AHCI_FLAG_IGN_SERR_INTERNAL, | |
358 | + AHCI_FLAG_IGN_SERR_INTERNAL | | |
359 | + AHCI_FLAG_32BIT_ONLY, | |
358 | 360 | .pio_mask = 0x1f, /* pio0-4 */ |
359 | 361 | .udma_mask = 0x7f, /* udma0-6 ; FIXME */ |
360 | 362 | .port_ops = &ahci_ops, |
... | ... | @@ -491,6 +493,13 @@ |
491 | 493 | */ |
492 | 494 | hpriv->saved_cap = cap = readl(mmio + HOST_CAP); |
493 | 495 | hpriv->saved_port_map = port_map = readl(mmio + HOST_PORTS_IMPL); |
496 | + | |
497 | + /* some chips lie about 64bit support */ | |
498 | + if ((cap & HOST_CAP_64) && (pi->flags & AHCI_FLAG_32BIT_ONLY)) { | |
499 | + dev_printk(KERN_INFO, &pdev->dev, | |
500 | + "controller can't do 64bit DMA, forcing 32bit\n"); | |
501 | + cap &= ~HOST_CAP_64; | |
502 | + } | |
494 | 503 | |
495 | 504 | /* fixup zero port_map */ |
496 | 505 | if (!port_map) { |