From 5d8d55a1cd10979d664f565c0f79e253df3e1983 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 30 Aug 2024 09:29:00 +0200 Subject: [PATCH] dev/serial: Simplify zynq_uart_reset_tx_flush() Load the status register only once. Use _IO_Relax() to reduce bus traffic while waiting and simplify testing. --- bsps/shared/dev/serial/zynq-uart-polled.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/bsps/shared/dev/serial/zynq-uart-polled.c b/bsps/shared/dev/serial/zynq-uart-polled.c index b55ed7067c..34cbc62d8f 100644 --- a/bsps/shared/dev/serial/zynq-uart-polled.c +++ b/bsps/shared/dev/serial/zynq-uart-polled.c @@ -131,11 +131,7 @@ void zynq_uart_initialize(volatile zynq_uart *regs) uint32_t bauddiv = 0x6; uint32_t mode_clks = regs->mode & ZYNQ_UART_MODE_CLKS; - while ((regs->channel_sts & ZYNQ_UART_CHANNEL_STS_TEMPTY) == 0 || - (regs->channel_sts & ZYNQ_UART_CHANNEL_STS_TACTIVE) != 0) { - /* Wait */ - } - + zynq_uart_reset_tx_flush(regs); zynq_cal_baud_rate(ZYNQ_UART_DEFAULT_BAUD, &brgr, &bauddiv, mode_clks); regs->control = 0; @@ -174,9 +170,10 @@ void zynq_uart_write_char_polled(volatile zynq_uart *regs, char c) void zynq_uart_reset_tx_flush(volatile zynq_uart *regs) { - - while ((regs->channel_sts & ZYNQ_UART_CHANNEL_STS_TEMPTY) == 0 || - (regs->channel_sts & ZYNQ_UART_CHANNEL_STS_TACTIVE) != 0) { - /* Wait */ + while ( + (regs->channel_sts & + (ZYNQ_UART_CHANNEL_STS_TEMPTY | ZYNQ_UART_CHANNEL_STS_TACTIVE)) != + ZYNQ_UART_CHANNEL_STS_TEMPTY) { + _IO_Relax(); } }