@@ -788,6 +788,7 @@ static void dma_rx_work(struct work_struct *w)
struct imx_port *sport = container_of(w, struct imx_port, tsk_dma_rx);
struct tty_struct *tty = sport->port.state->port.tty;
+ printk("%s uart: %d rx bytes %d\n",__FUNCTION__, sport->port.line, sport
if (sport->rx_bytes) {
tty_insert_flip_string(tty, sport->rx_buf, sport->rx_bytes);
@@ -1063,8 +1065,9 @@ static int imx_startup(struct uart_port *port)
temp |= UCR1_RRDYEN | UCR1_RTSDEN | UCR1_UARTEN;
if (sport->enable_dma) {
temp |= UCR1_RDMAEN | UCR1_TDMAEN;
- /* ICD,await 4 idle frames also enable AGING Timer */
- temp |= UCR1_ICD_REG(0)|UCR1_ATDMAEN;
+ /* ICD,await 32 idle frames. Disabling AGING Timer */
+ temp |= UCR1_ICD_REG(3) ;
+ temp &= ~(UCR1_ATDMAEN);
}
The above change in kernel/drivers/tty/serial/imx.c seems to resolve the problem, but if printk is removed the problem starts appearing again.
Can someone from freescale help me in identifying the real cause ?