diff options
Diffstat (limited to '')
-rw-r--r-- | bsps/aarch64/xilinx-zynqmp/console/console.c | 5 | ||||
-rw-r--r-- | bsps/shared/dev/serial/zynq-uart-polled.c | 6 | ||||
-rw-r--r-- | bsps/shared/dev/serial/zynq-uart.c | 8 |
3 files changed, 14 insertions, 5 deletions
diff --git a/bsps/aarch64/xilinx-zynqmp/console/console.c b/bsps/aarch64/xilinx-zynqmp/console/console.c index 9886a117dc..d1948f1a0c 100644 --- a/bsps/aarch64/xilinx-zynqmp/console/console.c +++ b/bsps/aarch64/xilinx-zynqmp/console/console.c @@ -113,11 +113,6 @@ static void zynqmp_debug_console_early_init(char c) zynq_uart_initialize(base); BSP_output_char = zynqmp_debug_console_out; - /* - * Some ZynqMP UARTs have a hardware bug that causes TX/RX logic restarts to - * require a kick after baud rate registers are initialized. - */ - zynqmp_debug_console_out(0); zynqmp_debug_console_out(c); } diff --git a/bsps/shared/dev/serial/zynq-uart-polled.c b/bsps/shared/dev/serial/zynq-uart-polled.c index 74e7255ec2..95c51dea11 100644 --- a/bsps/shared/dev/serial/zynq-uart-polled.c +++ b/bsps/shared/dev/serial/zynq-uart-polled.c @@ -144,6 +144,12 @@ void zynq_uart_initialize(rtems_termios_device_context *base) regs->control = ZYNQ_UART_CONTROL_RXEN | ZYNQ_UART_CONTROL_TXEN | ZYNQ_UART_CONTROL_RSTTO; + + /* + * 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(base, 0); } int zynq_uart_read_polled(rtems_termios_device_context *base) 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; } |