struct tty_port *tport = &port->state->port;
        unsigned char ch = 0;
        char flag = 0;
+       int ret;
 
        do {
                if (status & STAT_RX_RDY(port)) {
                                port->icount.parity++;
                }
 
+               /*
+                * For UART2, error bits are not cleared on buffer read.
+                * This causes interrupt loop and system hang.
+                */
+               if (IS_EXTENDED(port) && (status & STAT_BRK_ERR)) {
+                       ret = readl(port->membase + UART_STAT);
+                       ret |= STAT_BRK_ERR;
+                       writel(ret, port->membase + UART_STAT);
+               }
+
                if (status & STAT_BRK_DET) {
                        port->icount.brk++;
                        status &= ~(STAT_FRM_ERR | STAT_PAR_ERR);