diff --git a/arch/arm/include/asm/arch-qca-common/uart.h b/arch/arm/include/asm/arch-qca-common/uart.h index cf9e839f6e..1062421131 100644 --- a/arch/arm/include/asm/arch-qca-common/uart.h +++ b/arch/arm/include/asm/arch-qca-common/uart.h @@ -251,6 +251,7 @@ struct ipq_serial_platdata { #define MSM_BOOT_UART_DM_RX_BREAK (1 << 6) #define MSM_BOOT_UART_DM_HUNT_CHAR (1 << 7) #define MSM_BOOT_UART_DM_RX_BRK_START_LAST (1 << 8) +#define MSM_BOOT_UART_DM_RX_STALE_TIMEOUT (2 << 10) /* UART Receive FIFO Registers - 4 in numbers */ #if PERIPH_BLK_BLSP diff --git a/drivers/serial/qca_uart.c b/drivers/serial/qca_uart.c index 77acd785a0..b04c68031a 100644 --- a/drivers/serial/qca_uart.c +++ b/drivers/serial/qca_uart.c @@ -113,6 +113,15 @@ msm_boot_uart_dm_read(unsigned int *data, int *count, int wait, /* Check for DM_RXSTALE for RX transfer to finish */ while (!(status_reg & MSM_BOOT_UART_DM_RXSTALE)) { + status_reg = readl(MSM_BOOT_UART_DM_SR(base)); + if((status_reg & MSM_BOOT_UART_DM_RX_STALE_TIMEOUT) && \ + (status_reg & MSM_BOOT_UART_DM_SR_RXFULL)) { + printf("Console buffer overflow occured!!"); + msm_boot_uart_dm_init_rx_transfer(base); + total_rx_data = rx_data_read = 0; + return MSM_BOOT_UART_DM_E_RX_NOT_READY; + } + status_reg = readl(MSM_BOOT_UART_DM_MISR(base)); if (!wait) return MSM_BOOT_UART_DM_E_RX_NOT_READY;