* 1.modify dma dirver;\r
* 2.enable Programmable THRE Interrupt Mode, so we can just judge ((up->iir & 0x0f) == 0x02) when transmit\r
* 3.reset uart and set it to loopback state to ensure setting baud rate sucessfully \r
-*v1.1 : 2012-08-23
-* 1. dma driver:make "when tx dma is only enable" work functionally
+*v1.1 : 2012-08-23\r
+* 1. dma driver:make "when tx dma is only enable" work functionally \r
+*v1.2 : 2012-08-28\r
+* 1. dma driver:serial rx use new dma interface rk29_dma_enqueue_ring \r
*/\r
-#define VERSION_AND_TIME "rk_serial.c v1.1 2012-08-23"\r
+#define VERSION_AND_TIME "rk_serial.c v1.2 2012-08-28"\r
\r
#define PORT_RK 90\r
#define UART_USR 0x1F /* UART Status Register */\r
return -1;\r
}\r
\r
- rk29_dma_setflags(uart_dma->rx_dmach, RK29_DMAF_CIRCULAR);\r
+ //rk29_dma_setflags(uart_dma->rx_dmach, RK29_DMAF_CIRCULAR);\r
\r
uart_dma->rx_dma_inited = 1;\r
dev_info(up->port.dev, "serial_rk_init_dma_rx sucess\n");\r
dev_info(up->port.dev, "*******serial_rk_init_dma_rx*******error*******\n");\r
return -1;\r
}\r
+ \r
+#if 0 \r
+ if (rk29_dma_enqueue(uart_dma->rx_dmach, (void *)up, uart_dma->rx_phy_addr,\r
+ uart_dma->rb_size/2)) {\r
+ dev_info(up->port.dev, "*******rk29_dma_enqueue fail*****\n");\r
+ return -1;\r
+ }\r
\r
- if (rk29_dma_enqueue(uart_dma->rx_dmach, (void *)up, uart_dma->rx_phy_addr,\r
- uart_dma->rb_size/2)) {\r
- dev_info(up->port.dev, "*******rk29_dma_enqueue fail*****\n");\r
- return -1;\r
- }\r
-\r
- if (rk29_dma_enqueue(uart_dma->rx_dmach, (void *)up,\r
- uart_dma->rx_phy_addr+uart_dma->rb_size/2, uart_dma->rb_size/2)) {\r
- dev_info(up->port.dev, "*******rk29_dma_enqueue fail*****\n");\r
- return -1;\r
- }\r
+ if (rk29_dma_enqueue(uart_dma->rx_dmach, (void *)up,\r
+ uart_dma->rx_phy_addr+uart_dma->rb_size/2, uart_dma->rb_size/2)) {\r
+ dev_info(up->port.dev, "*******rk29_dma_enqueue fail*****\n");\r
+ return -1;\r
+ }\r
\r
+#else\r
+ rk29_dma_enqueue_ring(uart_dma->rx_dmach, (void *)up, uart_dma->rx_phy_addr, uart_dma->rb_size/4, 4, false);\r
+#endif\r
rk29_dma_ctrl(uart_dma->rx_dmach, RK29_DMAOP_START);\r
uart_dma->rx_dma_used = 1;\r
if(uart_dma->use_timer == 1){\r
/* set dma config */
pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);\r
if(up->dma->use_dma & RX_DMA) {\r
- pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);\r
//timer\r
up->dma->use_timer = USE_TIMER;\r
up->dma->rx_timer.function = serial_rk_report_dma_rx;\r
init_timer(&up->dma->rx_timer);\r
\r
//rx buffer\r
- up->dma->rb_size = UART_XMIT_SIZE*8;\r
+ up->dma->rb_size = UART_XMIT_SIZE*2;\r
up->dma->rx_buffer = dmam_alloc_coherent(up->port.dev, up->dma->rb_size,\r
&up->dma->rx_phy_addr, DMA_MEMORY_MAP);\r
up->dma->rb_tail = 0;\r
dev_info(up->port.dev, "dmam_alloc_coherent dma_rx_buffer fail\n");\r
}\r
else {\r
- dev_info(up->port.dev, "dma_rx_buffer 0x%08x, phy:0x%08x\n", (unsigned) up->dma->rx_buffer, (unsigned)up->dma->rx_phy_addr);\r
- //dev_info(up->port.dev, "up 0x%08x\n", (unsigned)up->dma);\r
+ dev_info(up->port.dev, "dma_rx_buffer 0x%08x\n", (unsigned) up->dma->rx_buffer);\r
+ dev_info(up->port.dev, "dma_rx_phy 0x%08x\n", (unsigned)up->dma->rx_phy_addr);\r
}\r
\r
// work queue\r