]> git.sur5r.net Git - u-boot/commitdiff
axs101: flush DMA buffer descriptors before DMA transactons starts
authorAlexey Brodkin <Alexey.Brodkin@synopsys.com>
Fri, 21 Mar 2014 12:57:47 +0000 (16:57 +0400)
committerTom Rini <trini@ti.com>
Fri, 28 Mar 2014 19:06:30 +0000 (15:06 -0400)
CPU sets DMA buffer descriptors with data required for inetrnal DMA such as:
 * Ownership of BD
 * Buffer size
 * Pointer to data buffer in memory

Then we need to make sure DMA engine of NAND controller gets proper data.
For this we flush buffer rescriptor.

Then we're  ready for DMA transaction.

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Cc: Vineet Gupta <vgupta@synopsys.com>
Cc: Tom Rini <trini@ti.com>
board/synopsys/axs101/nand.c

index 8672803871d298a5cf54c939586d6b319599f615..c7f90c4400d48a3e5e3a4a08d4a139becb5b4016 100644 (file)
@@ -107,6 +107,10 @@ static void axs101_nand_write_buf(struct mtd_info *mtd, const u_char *buf,
        writel(bbstate.bounce_buffer, &bd->buffer_ptr0);
        writel(0, &bd->buffer_ptr1);
 
+       /* Flush modified buffer descriptor */
+       flush_dcache_range((unsigned long)bd,
+                          (unsigned long)bd + sizeof(struct nand_bd));
+
        /* Issue "write" command */
        NAND_REG_WRITE(AC_FIFO, B_CT_WRITE | B_WFR | B_IWC | B_LC | (len-1));
 
@@ -137,6 +141,10 @@ static void axs101_nand_read_buf(struct mtd_info *mtd, u_char *buf, int len)
        writel(bbstate.bounce_buffer, &bd->buffer_ptr0);
        writel(0, &bd->buffer_ptr1);
 
+       /* Flush modified buffer descriptor */
+       flush_dcache_range((unsigned long)bd,
+                          (unsigned long)bd + sizeof(struct nand_bd));
+
        /* Issue "read" command */
        NAND_REG_WRITE(AC_FIFO, B_CT_READ | B_WFR | B_IWC | B_LC | (len - 1));