summaryrefslogtreecommitdiffstats
path: root/bsps/shared/dev
diff options
context:
space:
mode:
authorJan Sommer <jan.sommer@dlr.de>2021-02-22 16:39:59 +0100
committerJan Sommer <jan.sommer@dlr.de>2021-03-05 19:06:25 +0100
commit6ebf376bf221ed833f38e8427bfe7830d6b6fdd8 (patch)
tree2e1090d862f26036e8c1cc91a93733950a9a2bc1 /bsps/shared/dev
parentspec/aarch64: Rename ZynqMP QEMU BSPs (diff)
downloadrtems-6ebf376bf221ed833f38e8427bfe7830d6b6fdd8.tar.bz2
bsps/shared: Allow setting baud rate for zynq uart
Diffstat (limited to 'bsps/shared/dev')
-rw-r--r--bsps/shared/dev/serial/zynq-uart.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/bsps/shared/dev/serial/zynq-uart.c b/bsps/shared/dev/serial/zynq-uart.c
index 8f17d3ca65..cd0d0e7584 100644
--- a/bsps/shared/dev/serial/zynq-uart.c
+++ b/bsps/shared/dev/serial/zynq-uart.c
@@ -144,14 +144,22 @@ static bool zynq_uart_set_attributes(
{
zynq_uart_context *ctx = (zynq_uart_context *) context;
volatile zynq_uart *regs = ctx->regs;
+ int32_t baud;
uint32_t brgr = 0;
uint32_t bauddiv = 0;
uint32_t mode = 0;
int rc;
- rc = zynq_cal_baud_rate(115200, &brgr, &bauddiv, regs->mode);
- if (rc != 0)
- return rc;
+ /*
+ * Determine the baud rate
+ */
+ baud = rtems_termios_baud_to_number(term->c_ospeed);
+
+ if (baud > 0) {
+ rc = zynq_cal_baud_rate(baud, &brgr, &bauddiv, regs->mode);
+ if (rc != 0)
+ return rc;
+ }
/*
* Configure the mode register
@@ -202,8 +210,11 @@ static bool zynq_uart_set_attributes(
regs->control &= ~(ZYNQ_UART_CONTROL_RXEN | ZYNQ_UART_CONTROL_TXEN);
regs->mode = mode;
- regs->baud_rate_gen = ZYNQ_UART_BAUD_RATE_GEN_CD(brgr);
- regs->baud_rate_div = ZYNQ_UART_BAUD_RATE_DIV_BDIV(bauddiv);
+ /* Ignore baud rate of B0. There are no modem control lines to de-assert */
+ 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_RXEN | ZYNQ_UART_CONTROL_TXEN;
return true;