|
@@ -826,6 +826,9 @@ static int cdns_uart_startup(struct uart_port *port)
|
|
|
static void cdns_uart_shutdown(struct uart_port *port)
|
|
|
{
|
|
|
int status;
|
|
|
+ unsigned long flags;
|
|
|
+
|
|
|
+ spin_lock_irqsave(&port->lock, flags);
|
|
|
|
|
|
/* Disable interrupts */
|
|
|
status = readl(port->membase + CDNS_UART_IMR_OFFSET);
|
|
@@ -835,6 +838,9 @@ static void cdns_uart_shutdown(struct uart_port *port)
|
|
|
/* Disable the TX and RX */
|
|
|
writel(CDNS_UART_CR_TX_DIS | CDNS_UART_CR_RX_DIS,
|
|
|
port->membase + CDNS_UART_CR_OFFSET);
|
|
|
+
|
|
|
+ spin_unlock_irqrestore(&port->lock, flags);
|
|
|
+
|
|
|
free_irq(port->irq, port);
|
|
|
}
|
|
|
|