Le 22/02/2016 15:18, Ludovic Desroches a écrit : > With SAMA5D2, the UART has hw timeout but the offset of the register to > define this value is not the same as the one for USART. > When using the new UART, the value of this register was 0 so we never > get timeout irqs. It involves that when using DMA, we were stuck until > the execution of the dma callback which happens when a buffer is full > (so after receiving 2048 bytes). > > Signed-off-by: Ludovic Desroches <ludovic.desroches@xxxxxxxxx> Yes, sure: it fixes my previous patch "[PATCH v2 2/2] serial: atmel: add support for new UART version" that Greg had already included in his tty-testing and tty-next branches. Greg, it could be interesting to stick this fix with the patch cited above. Acked-by: Nicolas Ferre <nicolas.ferre@xxxxxxxxx> Thanks, bye. > --- > drivers/tty/serial/atmel_serial.c | 19 +++++++++++++------ > include/linux/atmel_serial.h | 3 ++- > 2 files changed, 15 insertions(+), 7 deletions(-) > > diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c > index b30c93f..4b6f04a 100644 > --- a/drivers/tty/serial/atmel_serial.c > +++ b/drivers/tty/serial/atmel_serial.c > @@ -159,6 +159,7 @@ struct atmel_uart_port { > u32 rts_high; > u32 rts_low; > bool ms_irq_enabled; > + u32 rtor; /* address of receiver timeout register if it exists */ > bool has_hw_timer; > struct timer_list uart_timer; > > @@ -1718,12 +1719,16 @@ static void atmel_get_ip_name(struct uart_port *port) > > atmel_port->has_hw_timer = false; > > - if (name == usart || name == new_uart) { > - dev_dbg(port->dev, "Usart or uart with hw timer\n"); > + if (name == new_uart) { > + dev_dbg(port->dev, "Uart with hw timer"); > atmel_port->has_hw_timer = true; > + atmel_port->rtor = ATMEL_UA_RTOR; > + } else if (name == usart) { > + dev_dbg(port->dev, "Usart\n"); > + atmel_port->has_hw_timer = true; > + atmel_port->rtor = ATMEL_US_RTOR; > } else if (name == dbgu_uart) { > dev_dbg(port->dev, "Dbgu or uart without hw timer\n"); > - atmel_port->has_hw_timer = false; > } else { > /* fallback for older SoCs: use version field */ > version = atmel_uart_readl(port, ATMEL_US_VERSION); > @@ -1732,11 +1737,11 @@ static void atmel_get_ip_name(struct uart_port *port) > case 0x10213: > dev_dbg(port->dev, "This version is usart\n"); > atmel_port->has_hw_timer = true; > + atmel_port->rtor = ATMEL_US_RTOR; > break; > case 0x203: > case 0x10202: > dev_dbg(port->dev, "This version is uart\n"); > - atmel_port->has_hw_timer = false; > break; > default: > dev_err(port->dev, "Not supported ip name nor version, set to uart\n"); > @@ -1841,7 +1846,8 @@ static int atmel_startup(struct uart_port *port) > jiffies + uart_poll_timeout(port)); > /* set USART timeout */ > } else { > - atmel_uart_writel(port, ATMEL_US_RTOR, PDC_RX_TIMEOUT); > + atmel_uart_writel(port, atmel_port->rtor, > + PDC_RX_TIMEOUT); > atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTTO); > > atmel_uart_writel(port, ATMEL_US_IER, > @@ -1856,7 +1862,8 @@ static int atmel_startup(struct uart_port *port) > jiffies + uart_poll_timeout(port)); > /* set USART timeout */ > } else { > - atmel_uart_writel(port, ATMEL_US_RTOR, PDC_RX_TIMEOUT); > + atmel_uart_writel(port, atmel_port->rtor, > + PDC_RX_TIMEOUT); > atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_STTTO); > > atmel_uart_writel(port, ATMEL_US_IER, > diff --git a/include/linux/atmel_serial.h b/include/linux/atmel_serial.h > index ee696d7..5a4d664 100644 > --- a/include/linux/atmel_serial.h > +++ b/include/linux/atmel_serial.h > @@ -119,7 +119,8 @@ > #define ATMEL_US_BRGR 0x20 /* Baud Rate Generator Register */ > #define ATMEL_US_CD GENMASK(15, 0) /* Clock Divider */ > > -#define ATMEL_US_RTOR 0x24 /* Receiver Time-out Register */ > +#define ATMEL_US_RTOR 0x24 /* Receiver Time-out Register for USART */ > +#define ATMEL_UA_RTOR 0x28 /* Receiver Time-out Register for UART */ > #define ATMEL_US_TO GENMASK(15, 0) /* Time-out Value */ > > #define ATMEL_US_TTGR 0x28 /* Transmitter Timeguard Register */ > -- Nicolas Ferre -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html