diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2024-03-19 09:55:35 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2024-04-04 12:53:53 +0200 |
commit | 53d092471f6c791724a89ac3c3a0c6f2b9df0979 (patch) | |
tree | f12f87dbcfb7566c928031dabe9ad7359d7570a8 /bsps/shared/dev/serial/zynq-uart-kernel-io.c | |
parent | dev/serial: Add ZYNQ_UART_[01]_BASE_ADDR (diff) | |
download | rtems-53d092471f6c791724a89ac3c3a0c6f2b9df0979.tar.bz2 |
dev/serial: Add Zynq UART kernel I/O support
Replace the BSP_CONSOLE_MINOR BSP option for the Xilinx Zynq BSPs with the new
BSP option ZYNQ_UART_KERNEL_IO_BASE_ADDR. Move the kernel I/O support to a
shared file.
Diffstat (limited to '')
-rw-r--r-- | bsps/shared/dev/serial/zynq-uart-kernel-io.c (renamed from bsps/arm/xilinx-zynq/console/debug-console.c) | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/bsps/arm/xilinx-zynq/console/debug-console.c b/bsps/shared/dev/serial/zynq-uart-kernel-io.c index 4c636038af..61b1043cd2 100644 --- a/bsps/arm/xilinx-zynq/console/debug-console.c +++ b/bsps/shared/dev/serial/zynq-uart-kernel-io.c @@ -3,14 +3,14 @@ /** * @file * - * @ingroup RTEMSBSPsARMZynq + * @ingroup zynq_uart * * @brief This source file contains the definition of ::BSP_output_char and * ::BSP_poll_char. */ /* - * Copyright (C) 2013, 2017 embedded brains GmbH & Co. KG + * Copyright (C) 2013, 2024 embedded brains GmbH & Co. KG * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -35,47 +35,54 @@ */ #include <rtems/bspIo.h> -#include <rtems/sysinit.h> #include <bsp.h> -#include <dev/serial/zynq-uart.h> +#include <dev/serial/zynq-uart-regs.h> +#include <rtems/sysinit.h> -#include <bspopts.h> +static void zynq_uart_kernel_output_char(char c) +{ + volatile zynq_uart *regs = + (volatile zynq_uart *) ZYNQ_UART_KERNEL_IO_BASE_ADDR; + + zynq_uart_write_char_polled(regs, c); +} -static void zynq_debug_console_out(char c) +static int zynq_uart_kernel_poll_char(void) { - zynq_uart_write_char_polled(zynq_uart_instances[BSP_CONSOLE_MINOR].regs, c); + volatile zynq_uart *regs = + (volatile zynq_uart *) ZYNQ_UART_KERNEL_IO_BASE_ADDR; + + return zynq_uart_read_char_polled(regs); } -static void zynq_debug_console_early_init(char c); +static void zynq_uart_kernel_early_init(char c); -static void zynq_debug_console_init(void) +static void zynq_uart_kernel_init(void) { - if (BSP_output_char != zynq_debug_console_early_init) { + volatile zynq_uart *regs = + (volatile zynq_uart *) ZYNQ_UART_KERNEL_IO_BASE_ADDR; + + if (BSP_output_char != zynq_uart_kernel_early_init) { return; } - zynq_uart_initialize(zynq_uart_instances[BSP_CONSOLE_MINOR].regs); - BSP_output_char = zynq_debug_console_out; -} - -static void zynq_debug_console_early_init(char c) -{ - zynq_debug_console_init(); - zynq_debug_console_out(c); + zynq_uart_initialize(regs); + BSP_output_char = zynq_uart_kernel_output_char; } -static int zynq_debug_console_in(void) +static void zynq_uart_kernel_early_init(char c) { - return zynq_uart_read_char_polled(zynq_uart_instances[BSP_CONSOLE_MINOR].regs); + zynq_uart_kernel_init(); + zynq_uart_kernel_output_char(c); } -BSP_output_char_function_type BSP_output_char = zynq_debug_console_early_init; +BSP_output_char_function_type BSP_output_char = zynq_uart_kernel_early_init; -BSP_polling_getchar_function_type BSP_poll_char = zynq_debug_console_in; +BSP_polling_getchar_function_type BSP_poll_char = zynq_uart_kernel_poll_char; RTEMS_SYSINIT_ITEM( - zynq_debug_console_init, + zynq_uart_kernel_init, RTEMS_SYSINIT_BSP_START, RTEMS_SYSINIT_ORDER_LAST_BUT_5 ); |