.line           = 2,
                },
        },
+       [3] = {
+               .port = {
+                       .iotype         = UPIO_MEM,
+                       .flags          = UPF_BOOT_AUTOCONF,
+                       .line           = 3,
+               },
+       },
+       [4] = {
+               .port = {
+                       .iotype         = UPIO_MEM,
+                       .flags          = UPF_BOOT_AUTOCONF,
+                       .line           = 4,
+               },
+       },
 };
 
 static inline struct sirfsoc_uart_port *to_sirfport(struct uart_port *port)
        struct uart_port *port = &sirfport->port;
        struct uart_state *state = port->state;
        struct circ_buf *xmit = &port->state->xmit;
+       spin_lock(&port->lock);
        intr_status = rd_regl(port, SIRFUART_INT_STATUS);
        wr_regl(port, SIRFUART_INT_STATUS, intr_status);
        intr_status &= rd_regl(port, SIRFUART_INT_EN);
                                goto recv_char;
                        uart_insert_char(port, intr_status,
                                        SIRFUART_RX_OFLOW, 0, TTY_BREAK);
+                       spin_unlock(&port->lock);
                        return IRQ_HANDLED;
                }
                if (intr_status & SIRFUART_RX_OFLOW)
                sirfsoc_uart_pio_rx_chars(port, SIRFSOC_UART_IO_RX_MAX_CNT);
        if (intr_status & SIRFUART_TX_INT_EN) {
                if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
+                       spin_unlock(&port->lock);
                        return IRQ_HANDLED;
                } else {
                        sirfsoc_uart_pio_tx_chars(sirfport,
                                sirfsoc_uart_stop_tx(port);
                }
        }
+       spin_unlock(&port->lock);
        return IRQ_HANDLED;
 }
 
 
 static struct of_device_id sirfsoc_uart_ids[] = {
        { .compatible = "sirf,prima2-uart", },
+       { .compatible = "sirf,marco-uart", },
        {}
 };
 MODULE_DEVICE_TABLE(of, sirfsoc_serial_of_match);
 
 #define SIRFSOC_UART_MINOR                     0
 #define SIRFUART_PORT_NAME                     "sirfsoc-uart"
 #define SIRFUART_MAP_SIZE                      0x200
-#define SIRFSOC_UART_NR                                3
+#define SIRFSOC_UART_NR                                5
 #define SIRFSOC_PORT_TYPE                      0xa5
 
 /* Baud Rate Calculation */