summaryrefslogtreecommitdiffstats
path: root/bsps/shared/dev/serial/zynq-uart.c
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/shared/dev/serial/zynq-uart.c')
-rw-r--r--bsps/shared/dev/serial/zynq-uart.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/bsps/shared/dev/serial/zynq-uart.c b/bsps/shared/dev/serial/zynq-uart.c
index cd0d0e7584..8503e31d49 100644
--- a/bsps/shared/dev/serial/zynq-uart.c
+++ b/bsps/shared/dev/serial/zynq-uart.c
@@ -214,9 +214,17 @@ static bool zynq_uart_set_attributes(
if (baud > 0) {
regs->baud_rate_gen = ZYNQ_UART_BAUD_RATE_GEN_CD(brgr);
regs->baud_rate_div = ZYNQ_UART_BAUD_RATE_DIV_BDIV(bauddiv);
+ regs->control |= ZYNQ_UART_CONTROL_RXRES
+ | ZYNQ_UART_CONTROL_TXRES;
}
regs->control |= ZYNQ_UART_CONTROL_RXEN | ZYNQ_UART_CONTROL_TXEN;
+ /*
+ * Some ZynqMP UARTs have a hardware bug that causes TX/RX logic restarts to
+ * require a kick after baud rate registers are initialized.
+ */
+ zynq_uart_write_polled(context, 0);
+
return true;
}