Commit 2fc37adb authored by Jeff Garzik's avatar Jeff Garzik Committed by Jeff Garzik

[libata] sata_sil: disable DMA engine in sil_freeze()

We must disable the DMA engine before accessing taskfile registers.
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent 54c38444
...@@ -565,6 +565,19 @@ static void sil_freeze(struct ata_port *ap) ...@@ -565,6 +565,19 @@ static void sil_freeze(struct ata_port *ap)
tmp |= SIL_MASK_IDE0_INT << ap->port_no; tmp |= SIL_MASK_IDE0_INT << ap->port_no;
writel(tmp, mmio_base + SIL_SYSCFG); writel(tmp, mmio_base + SIL_SYSCFG);
readl(mmio_base + SIL_SYSCFG); /* flush */ readl(mmio_base + SIL_SYSCFG); /* flush */
/* Ensure DMA_ENABLE is off.
*
* This is because the controller will not give us access to the
* taskfile registers while a DMA is in progress
*/
iowrite8(ioread8(ap->ioaddr.bmdma_addr) & ~SIL_DMA_ENABLE,
ap->ioaddr.bmdma_addr);
/* According to ata_bmdma_stop, an HDMA transition requires
* on PIO cycle. But we can't read a taskfile register.
*/
ioread8(ap->ioaddr.bmdma_addr);
} }
static void sil_thaw(struct ata_port *ap) static void sil_thaw(struct ata_port *ap)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment