rk_serial:serial rx use new dma interface rk29_dma_enqueue_ring
authorhhb <hhb@rock-chips.com>
Tue, 28 Aug 2012 08:34:02 +0000 (16:34 +0800)
committerhhb <hhb@rock-chips.com>
Tue, 28 Aug 2012 08:34:02 +0000 (16:34 +0800)
drivers/tty/serial/rk_serial.c

index 558abd77faf58ea9c47193fbac09e1f804e86f64..c45c927b489906d282401db72702f1fd03ea2e6f 100644 (file)
 *              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
@@ -651,7 +653,7 @@ static int serial_rk_init_dma_rx(struct uart_port *port) {
                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
@@ -674,19 +676,23 @@ static int serial_rk_start_rx_dma(struct uart_port *port)
                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
@@ -1838,7 +1844,6 @@ static int __devinit serial_rk_probe(struct platform_device *pdev)
        /* 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
@@ -1848,7 +1853,7 @@ static int __devinit serial_rk_probe(struct platform_device *pdev)
                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
@@ -1857,8 +1862,8 @@ static int __devinit serial_rk_probe(struct platform_device *pdev)
                        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