Diff
Modified: trunk/arch/blackfin/kernel/bfin_dma_5xx.c (4084 => 4085)
--- trunk/arch/blackfin/kernel/bfin_dma_5xx.c 2008-01-09 14:44:52 UTC (rev 4084)
+++ trunk/arch/blackfin/kernel/bfin_dma_5xx.c 2008-01-10 07:48:09 UTC (rev 4085)
@@ -339,13 +339,13 @@
unsigned short
set_bfin_dma_config(char direction, char flow_mode,
- char intr_mode, char dma_mode, char width)
+ char intr_mode, char dma_mode, char width, char syncmode)
{
unsigned short config;
config =
((direction << 1) | (width << 2) | (dma_mode << 4) |
- (intr_mode << 6) | (flow_mode << 12) | RESTART);
+ (intr_mode << 6) | (flow_mode << 12) | (syncmode << 5));
return config;
}
EXPORT_SYMBOL(set_bfin_dma_config);
Modified: trunk/drivers/char/bfin_ppi.c (4084 => 4085)
--- trunk/drivers/char/bfin_ppi.c 2008-01-09 14:44:52 UTC (rev 4084)
+++ trunk/drivers/char/bfin_ppi.c 2008-01-10 07:48:09 UTC (rev 4085)
@@ -805,7 +805,8 @@
DMAFLOW_STOP, // no chained DMA operation
INTR_ON_BUF, // interrupt when whole transfer complete
(pdev->numlines) ? DIMENSION_2D : DIMENSION_LINEAR, // 2D or 1D
- DATA_SIZE_16);
+ DATA_SIZE_16,
+ DMA_SYNC_RESTART);
pr_debug("dma_config = 0x%04X\n", pdev->dma_config);
set_dma_config(CH_PPI, pdev->dma_config);
set_dma_start_addr(CH_PPI, (unsigned long)buf);
Modified: trunk/drivers/serial/bfin_5xx.c (4084 => 4085)
--- trunk/drivers/serial/bfin_5xx.c 2008-01-09 14:44:52 UTC (rev 4084)
+++ trunk/drivers/serial/bfin_5xx.c 2008-01-10 07:48:09 UTC (rev 4085)
@@ -421,7 +421,8 @@
set_bfin_dma_config(DIR_READ, DMA_FLOW_STOP,
INTR_ON_BUF,
DIMENSION_LINEAR,
- DATA_SIZE_8));
+ DATA_SIZE_8,
+ DMA_SYNC_RESTART));
set_dma_start_addr(uart->tx_dma_channel, (unsigned long)(xmit->buf+xmit->tail));
set_dma_x_count(uart->tx_dma_channel, uart->tx_count);
set_dma_x_modify(uart->tx_dma_channel, 1);
@@ -669,7 +670,8 @@
set_dma_config(uart->rx_dma_channel,
set_bfin_dma_config(DIR_WRITE, DMA_FLOW_AUTO,
INTR_ON_ROW, DIMENSION_2D,
- DATA_SIZE_8));
+ DATA_SIZE_8,
+ DMA_SYNC_RESTART));
set_dma_x_count(uart->rx_dma_channel, DMA_RX_XCOUNT);
set_dma_x_modify(uart->rx_dma_channel, 1);
set_dma_y_count(uart->rx_dma_channel, DMA_RX_YCOUNT);
Modified: trunk/drivers/video/bf537-lq035.c (4084 => 4085)
--- trunk/drivers/video/bf537-lq035.c 2008-01-09 14:44:52 UTC (rev 4084)
+++ trunk/drivers/video/bf537-lq035.c 2008-01-10 07:48:09 UTC (rev 4085)
@@ -387,7 +387,12 @@
} else {
- set_dma_config(CH_PPI, set_bfin_dma_config(DIR_READ,DMA_FLOW_AUTO,INTR_DISABLE,DIMENSION_2D,DATA_SIZE_16));
+ set_dma_config(CH_PPI, set_bfin_dma_config(DIR_READ,
+ DMA_FLOW_AUTO,
+ INTR_DISABLE,
+ DIMENSION_2D,
+ DATA_SIZE_16,
+ DMA_NOSYNC_KEEP_DMA_BUF));
set_dma_x_count(CH_PPI, LCD_X_RES);
set_dma_x_modify(CH_PPI,LCD_BBP/8);
set_dma_y_count(CH_PPI, LCD_Y_RES+U_LINES);
Modified: trunk/drivers/video/bf54x-lq043.c (4084 => 4085)
--- trunk/drivers/video/bf54x-lq043.c 2008-01-09 14:44:52 UTC (rev 4084)
+++ trunk/drivers/video/bf54x-lq043.c 2008-01-10 07:48:09 UTC (rev 4085)
@@ -224,7 +224,8 @@
set_dma_config(CH_EPPI0,
set_bfin_dma_config(DIR_READ, DMA_FLOW_AUTO,
INTR_DISABLE, DIMENSION_2D,
- DATA_SIZE_32));
+ DATA_SIZE_32,
+ DMA_NOSYNC_KEEP_DMA_BUF));
set_dma_x_count(CH_EPPI0, (LCD_X_RES * LCD_BPP) / DMA_BUS_SIZE);
set_dma_x_modify(CH_EPPI0, DMA_BUS_SIZE / 8);
set_dma_y_count(CH_EPPI0, LCD_Y_RES);
Modified: trunk/drivers/video/bfin-t350mcqb-fb.c (4084 => 4085)
--- trunk/drivers/video/bfin-t350mcqb-fb.c 2008-01-09 14:44:52 UTC (rev 4084)
+++ trunk/drivers/video/bfin-t350mcqb-fb.c 2008-01-10 07:48:09 UTC (rev 4085)
@@ -171,7 +171,8 @@
set_dma_config(CH_PPI,
set_bfin_dma_config(DIR_READ, DMA_FLOW_AUTO,
INTR_DISABLE, DIMENSION_2D,
- DATA_SIZE_16));
+ DATA_SIZE_16,
+ DMA_NOSYNC_KEEP_DMA_BUF));
set_dma_x_count(CH_PPI, (LCD_X_RES * LCD_BPP) / DMA_BUS_SIZE);
set_dma_x_modify(CH_PPI, DMA_BUS_SIZE / 8);
set_dma_y_count(CH_PPI, V_LINES);
Modified: trunk/include/asm-blackfin/dma.h (4084 => 4085)
--- trunk/include/asm-blackfin/dma.h 2008-01-09 14:44:52 UTC (rev 4084)
+++ trunk/include/asm-blackfin/dma.h 2008-01-10 07:48:09 UTC (rev 4085)
@@ -76,6 +76,9 @@
#define INTR_ON_BUF 2
#define INTR_ON_ROW 3
+#define DMA_NOSYNC_KEEP_DMA_BUF 0
+#define DMA_SYNC_RESTART 1
+
struct dmasg {
unsigned long next_desc_addr;
unsigned long start_addr;
@@ -157,7 +160,8 @@
void set_dma_y_modify(unsigned int channel, short y_modify);
void set_dma_config(unsigned int channel, unsigned short config);
unsigned short set_bfin_dma_config(char direction, char flow_mode,
- char intr_mode, char dma_mode, char width);
+ char intr_mode, char dma_mode, char width,
+ char syncmode);
void set_dma_curr_addr(unsigned int channel, unsigned long addr);
/* get curr status for polling */