summaryrefslogtreecommitdiffstats
path: root/bsps/shared/dev/serial/zynq-uart-kernel-io.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2024-03-19 09:55:35 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2024-04-04 12:53:53 +0200
commit53d092471f6c791724a89ac3c3a0c6f2b9df0979 (patch)
treef12f87dbcfb7566c928031dabe9ad7359d7570a8 /bsps/shared/dev/serial/zynq-uart-kernel-io.c
parentdev/serial: Add ZYNQ_UART_[01]_BASE_ADDR (diff)
downloadrtems-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
);