{
        struct tty_struct* tty = port->info->tty;
        int cbRxMax = 256;      /* (Gross) limit on receive */
-       unsigned int data, flag;/* Received data and status */
+       unsigned int data;      /* Received data and status */
+       unsigned int flag;
 
        while (!(UR (port, UART_R_STATUS) & nRxRdy) && --cbRxMax) {
                data = UR (port, UART_R_DATA);
                flag = TTY_NORMAL;
                ++port->icount.rx;
 
-               if (unlikely(data & RxError)) { /* Quick check, short-circuit */
+               if (unlikely(data & RxError)) {
                        if (data & RxBreak) {
                                data &= ~(RxFramingError | RxParityError);
                                ++port->icount.brk;
        /* Note, kernel appears to be setting DTR and RTS on console. */
 
        /* *** FIXME: this deserves more work.  There's some work in
-               tracing all of the IO pins. */
+              tracing all of the IO pins. */
 #if 0
        if( port->mapbase == UART1_PHYS) {
                gpioRegs_t *gpio = (gpioRegs_t *)IO_ADDRESS(GPIO_PHYS);
        if (ret == 0) {
                int i;
 
-               for (i = 0; i < DEV_NR; i++)
+               for (i = 0; i < DEV_NR; i++) {
+                       /* UART3, when used, requires GPIO pin reallocation */
+                       if (lh7a40x_ports[i].port.mapbase == UART3_PHYS)
+                               GPIO_PINMUX |= 1<<3;
                        uart_add_one_port (&lh7a40x_reg,
                                           &lh7a40x_ports[i].port);
+               }
        }
        return ret;
 }