[PATCH] sata_rcar: clear STOP bit in bmdma_start() method

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Iff bmdma_setup() has to stop a DMA transfer before starting a new one, then the
STOP bit in the ATAPI_CONTROL1 register will remain set (it's only cleared when
setting the START bit to 1) and then bmdma_start() method will set both START
and STOP bits simultaneously which should abort the transfer being just started.
Avoid that by explicitly clearing the STOP bit in bmdma_start() method (in this
case it will be ignored on write).

Signed-off-by: Sergei Shtylyov <sergei.shtylyov@xxxxxxxxxxxxxxxxxx>

---
This patch is against 'for-3.10-fixes' branch of Tejun Heo's 'libata.git' repo.

 drivers/ata/sata_rcar.c |    1 +
 1 file changed, 1 insertion(+)

Index: libata/drivers/ata/sata_rcar.c
===================================================================
--- libata.orig/drivers/ata/sata_rcar.c
+++ libata/drivers/ata/sata_rcar.c
@@ -549,6 +549,7 @@ static void sata_rcar_bmdma_start(struct
 
 	/* start host DMA transaction */
 	dmactl = ioread32(priv->base + ATAPI_CONTROL1_REG);
+	dmactl &= ~ATAPI_CONTROL1_STOP;
 	dmactl |= ATAPI_CONTROL1_START;
 	iowrite32(dmactl, priv->base + ATAPI_CONTROL1_REG);
 }
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux