summaryrefslogtreecommitdiffstats
path: root/bsps/arm/xilinx-zynq
diff options
context:
space:
mode:
Diffstat (limited to 'bsps/arm/xilinx-zynq')
-rwxr-xr-xbsps/arm/xilinx-zynq/config/xilinx_zynq_microzed-testsuite.tcfg7
-rwxr-xr-xbsps/arm/xilinx-zynq/config/xilinx_zynq_microzed.cfg1
-rwxr-xr-xbsps/arm/xilinx-zynq/config/xilinx_zynq_picozed-testsuite.tcfg7
-rwxr-xr-xbsps/arm/xilinx-zynq/config/xilinx_zynq_picozed.cfg1
-rwxr-xr-xbsps/arm/xilinx-zynq/config/xilinx_zynq_pynq-testsuite.tcfg7
-rwxr-xr-xbsps/arm/xilinx-zynq/config/xilinx_zynq_pynq.cfg1
-rwxr-xr-xbsps/arm/xilinx-zynq/config/xilinx_zynq_zybo-testsuite.tcfg7
-rwxr-xr-xbsps/arm/xilinx-zynq/config/xilinx_zynq_zybo.cfg1
-rwxr-xr-xbsps/arm/xilinx-zynq/config/xilinx_zynq_zybo_z7-testsuite.tcfg7
-rwxr-xr-xbsps/arm/xilinx-zynq/config/xilinx_zynq_zybo_z7.cfg1
-rw-r--r--bsps/arm/xilinx-zynq/console/console-config.c41
-rw-r--r--bsps/arm/xilinx-zynq/console/console-init.c23
-rw-r--r--bsps/arm/xilinx-zynq/console/debug-console.c78
-rw-r--r--bsps/arm/xilinx-zynq/headers.am13
-rw-r--r--bsps/arm/xilinx-zynq/i2c/cadence-i2c.c482
-rw-r--r--bsps/arm/xilinx-zynq/include/bsp.h6
-rw-r--r--bsps/arm/xilinx-zynq/include/bsp/cadence-i2c-regs.h86
-rw-r--r--bsps/arm/xilinx-zynq/include/bsp/cadence-i2c.h48
-rw-r--r--bsps/arm/xilinx-zynq/include/bsp/i2c.h5
-rw-r--r--bsps/arm/xilinx-zynq/include/bsp/irq.h3
-rw-r--r--bsps/arm/xilinx-zynq/include/tm27.h2
-rw-r--r--bsps/arm/xilinx-zynq/start/bsp_specs0
-rw-r--r--bsps/arm/xilinx-zynq/start/bspreset.c20
-rw-r--r--bsps/arm/xilinx-zynq/start/bspsmp.c2
-rw-r--r--bsps/arm/xilinx-zynq/start/bspstart.c15
-rw-r--r--bsps/arm/xilinx-zynq/start/bspstarthooks.c15
-rw-r--r--bsps/arm/xilinx-zynq/start/bspstartmmu.c15
-rw-r--r--bsps/arm/xilinx-zynq/start/linkcmds.in36
28 files changed, 119 insertions, 811 deletions
diff --git a/bsps/arm/xilinx-zynq/config/xilinx_zynq_microzed-testsuite.tcfg b/bsps/arm/xilinx-zynq/config/xilinx_zynq_microzed-testsuite.tcfg
new file mode 100755
index 0000000000..ba80faab99
--- /dev/null
+++ b/bsps/arm/xilinx-zynq/config/xilinx_zynq_microzed-testsuite.tcfg
@@ -0,0 +1,7 @@
+#
+# Xilinx Zedboard RTEMS Test Database.
+#
+# Format is one line per test that is _NOT_ built.
+#
+
+include: xilinx_zynq-testsuite.tcfg
diff --git a/bsps/arm/xilinx-zynq/config/xilinx_zynq_microzed.cfg b/bsps/arm/xilinx-zynq/config/xilinx_zynq_microzed.cfg
new file mode 100755
index 0000000000..2de871d46e
--- /dev/null
+++ b/bsps/arm/xilinx-zynq/config/xilinx_zynq_microzed.cfg
@@ -0,0 +1 @@
+include $(RTEMS_ROOT)/make/custom/xilinx_zynq.inc
diff --git a/bsps/arm/xilinx-zynq/config/xilinx_zynq_picozed-testsuite.tcfg b/bsps/arm/xilinx-zynq/config/xilinx_zynq_picozed-testsuite.tcfg
new file mode 100755
index 0000000000..ba80faab99
--- /dev/null
+++ b/bsps/arm/xilinx-zynq/config/xilinx_zynq_picozed-testsuite.tcfg
@@ -0,0 +1,7 @@
+#
+# Xilinx Zedboard RTEMS Test Database.
+#
+# Format is one line per test that is _NOT_ built.
+#
+
+include: xilinx_zynq-testsuite.tcfg
diff --git a/bsps/arm/xilinx-zynq/config/xilinx_zynq_picozed.cfg b/bsps/arm/xilinx-zynq/config/xilinx_zynq_picozed.cfg
new file mode 100755
index 0000000000..2de871d46e
--- /dev/null
+++ b/bsps/arm/xilinx-zynq/config/xilinx_zynq_picozed.cfg
@@ -0,0 +1 @@
+include $(RTEMS_ROOT)/make/custom/xilinx_zynq.inc
diff --git a/bsps/arm/xilinx-zynq/config/xilinx_zynq_pynq-testsuite.tcfg b/bsps/arm/xilinx-zynq/config/xilinx_zynq_pynq-testsuite.tcfg
new file mode 100755
index 0000000000..ba80faab99
--- /dev/null
+++ b/bsps/arm/xilinx-zynq/config/xilinx_zynq_pynq-testsuite.tcfg
@@ -0,0 +1,7 @@
+#
+# Xilinx Zedboard RTEMS Test Database.
+#
+# Format is one line per test that is _NOT_ built.
+#
+
+include: xilinx_zynq-testsuite.tcfg
diff --git a/bsps/arm/xilinx-zynq/config/xilinx_zynq_pynq.cfg b/bsps/arm/xilinx-zynq/config/xilinx_zynq_pynq.cfg
new file mode 100755
index 0000000000..2de871d46e
--- /dev/null
+++ b/bsps/arm/xilinx-zynq/config/xilinx_zynq_pynq.cfg
@@ -0,0 +1 @@
+include $(RTEMS_ROOT)/make/custom/xilinx_zynq.inc
diff --git a/bsps/arm/xilinx-zynq/config/xilinx_zynq_zybo-testsuite.tcfg b/bsps/arm/xilinx-zynq/config/xilinx_zynq_zybo-testsuite.tcfg
new file mode 100755
index 0000000000..ba80faab99
--- /dev/null
+++ b/bsps/arm/xilinx-zynq/config/xilinx_zynq_zybo-testsuite.tcfg
@@ -0,0 +1,7 @@
+#
+# Xilinx Zedboard RTEMS Test Database.
+#
+# Format is one line per test that is _NOT_ built.
+#
+
+include: xilinx_zynq-testsuite.tcfg
diff --git a/bsps/arm/xilinx-zynq/config/xilinx_zynq_zybo.cfg b/bsps/arm/xilinx-zynq/config/xilinx_zynq_zybo.cfg
new file mode 100755
index 0000000000..2de871d46e
--- /dev/null
+++ b/bsps/arm/xilinx-zynq/config/xilinx_zynq_zybo.cfg
@@ -0,0 +1 @@
+include $(RTEMS_ROOT)/make/custom/xilinx_zynq.inc
diff --git a/bsps/arm/xilinx-zynq/config/xilinx_zynq_zybo_z7-testsuite.tcfg b/bsps/arm/xilinx-zynq/config/xilinx_zynq_zybo_z7-testsuite.tcfg
new file mode 100755
index 0000000000..ba80faab99
--- /dev/null
+++ b/bsps/arm/xilinx-zynq/config/xilinx_zynq_zybo_z7-testsuite.tcfg
@@ -0,0 +1,7 @@
+#
+# Xilinx Zedboard RTEMS Test Database.
+#
+# Format is one line per test that is _NOT_ built.
+#
+
+include: xilinx_zynq-testsuite.tcfg
diff --git a/bsps/arm/xilinx-zynq/config/xilinx_zynq_zybo_z7.cfg b/bsps/arm/xilinx-zynq/config/xilinx_zynq_zybo_z7.cfg
new file mode 100755
index 0000000000..2de871d46e
--- /dev/null
+++ b/bsps/arm/xilinx-zynq/config/xilinx_zynq_zybo_z7.cfg
@@ -0,0 +1 @@
+include $(RTEMS_ROOT)/make/custom/xilinx_zynq.inc
diff --git a/bsps/arm/xilinx-zynq/console/console-config.c b/bsps/arm/xilinx-zynq/console/console-config.c
deleted file mode 100644
index 0581247a2d..0000000000
--- a/bsps/arm/xilinx-zynq/console/console-config.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (C) 2013, 2017 embedded brains GmbH
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <bsp/irq.h>
-#include <dev/serial/zynq-uart.h>
-
-zynq_uart_context zynq_uart_instances[2] = {
- {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER( "Zynq UART 0" ),
- .regs = (volatile struct zynq_uart *) 0xe0000000,
- .irq = ZYNQ_IRQ_UART_0
- }, {
- .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER( "Zynq UART 1" ),
- .regs = (volatile struct zynq_uart *) 0xe0001000,
- .irq = ZYNQ_IRQ_UART_1
- }
-};
diff --git a/bsps/arm/xilinx-zynq/console/console-init.c b/bsps/arm/xilinx-zynq/console/console-init.c
index a3659e3906..2018aaa710 100644
--- a/bsps/arm/xilinx-zynq/console/console-init.c
+++ b/bsps/arm/xilinx-zynq/console/console-init.c
@@ -1,7 +1,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright (C) 2013, 2017 embedded brains GmbH
+ * Copyright (C) 2013, 2017 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -26,9 +26,25 @@
*/
#include <rtems/console.h>
+#include <rtems/termiostypes.h>
#include <bsp.h>
+#include <bsp/bootcard.h>
+#include <bsp/irq.h>
#include <dev/serial/zynq-uart.h>
+#include <dev/serial/zynq-uart-regs.h>
+
+static zynq_uart_context zynq_uart_instances[2] = {
+ {
+ .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER( "Zynq UART 0" ),
+ .regs = (volatile zynq_uart *) ZYNQ_UART_0_BASE_ADDR,
+ .irq = ZYNQ_IRQ_UART_0
+ }, {
+ .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER( "Zynq UART 1" ),
+ .regs = (volatile zynq_uart *) ZYNQ_UART_1_BASE_ADDR,
+ .irq = ZYNQ_IRQ_UART_1
+ }
+};
rtems_status_code console_initialize(
rtems_device_major_number major,
@@ -41,6 +57,7 @@ rtems_status_code console_initialize(
rtems_termios_initialize();
for (i = 0; i < RTEMS_ARRAY_SIZE(zynq_uart_instances); ++i) {
+ zynq_uart_context *ctx = &zynq_uart_instances[i];
char uart[] = "/dev/ttySX";
uart[sizeof(uart) - 2] = (char) ('0' + i);
@@ -48,10 +65,10 @@ rtems_status_code console_initialize(
&uart[0],
&zynq_uart_handler,
NULL,
- &zynq_uart_instances[i].base
+ &ctx->base
);
- if (i == BSP_CONSOLE_MINOR) {
+ if (ctx->regs == (zynq_uart *) ZYNQ_UART_KERNEL_IO_BASE_ADDR) {
link(&uart[0], CONSOLE_DEVICE_NAME);
}
}
diff --git a/bsps/arm/xilinx-zynq/console/debug-console.c b/bsps/arm/xilinx-zynq/console/debug-console.c
deleted file mode 100644
index 0e9b756f30..0000000000
--- a/bsps/arm/xilinx-zynq/console/debug-console.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (C) 2013, 2017 embedded brains GmbH
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <rtems/bspIo.h>
-#include <rtems/sysinit.h>
-
-#include <bsp.h>
-#include <dev/serial/zynq-uart.h>
-
-#include <bspopts.h>
-
-static void zynq_debug_console_out(char c)
-{
- rtems_termios_device_context *base =
- &zynq_uart_instances[BSP_CONSOLE_MINOR].base;
-
- zynq_uart_write_polled(base, c);
-}
-
-static void zynq_debug_console_init(void)
-{
- rtems_termios_device_context *base =
- &zynq_uart_instances[BSP_CONSOLE_MINOR].base;
-
- zynq_uart_initialize(base);
- BSP_output_char = zynq_debug_console_out;
-}
-
-static void zynq_debug_console_early_init(char c)
-{
- rtems_termios_device_context *base =
- &zynq_uart_instances[BSP_CONSOLE_MINOR].base;
-
- zynq_uart_initialize(base);
- zynq_debug_console_out(c);
-}
-
-static int zynq_debug_console_in(void)
-{
- rtems_termios_device_context *base =
- &zynq_uart_instances[BSP_CONSOLE_MINOR].base;
-
- return zynq_uart_read_polled(base);
-}
-
-BSP_output_char_function_type BSP_output_char = zynq_debug_console_early_init;
-
-BSP_polling_getchar_function_type BSP_poll_char = zynq_debug_console_in;
-
-RTEMS_SYSINIT_ITEM(
- zynq_debug_console_init,
- RTEMS_SYSINIT_BSP_START,
- RTEMS_SYSINIT_ORDER_LAST_BUT_5
-);
diff --git a/bsps/arm/xilinx-zynq/headers.am b/bsps/arm/xilinx-zynq/headers.am
deleted file mode 100644
index 47738c62be..0000000000
--- a/bsps/arm/xilinx-zynq/headers.am
+++ /dev/null
@@ -1,13 +0,0 @@
-## This file was generated by "./boostrap -H".
-
-include_HEADERS =
-include_HEADERS += ../../../../../../bsps/arm/xilinx-zynq/include/bsp.h
-include_HEADERS += include/bspopts.h
-include_HEADERS += ../../../../../../bsps/arm/xilinx-zynq/include/tm27.h
-
-include_bspdir = $(includedir)/bsp
-include_bsp_HEADERS =
-include_bsp_HEADERS += ../../../../../../bsps/arm/xilinx-zynq/include/bsp/cadence-i2c-regs.h
-include_bsp_HEADERS += ../../../../../../bsps/arm/xilinx-zynq/include/bsp/cadence-i2c.h
-include_bsp_HEADERS += ../../../../../../bsps/arm/xilinx-zynq/include/bsp/i2c.h
-include_bsp_HEADERS += ../../../../../../bsps/arm/xilinx-zynq/include/bsp/irq.h
diff --git a/bsps/arm/xilinx-zynq/i2c/cadence-i2c.c b/bsps/arm/xilinx-zynq/i2c/cadence-i2c.c
deleted file mode 100644
index 07379992ce..0000000000
--- a/bsps/arm/xilinx-zynq/i2c/cadence-i2c.c
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (C) 2014 embedded brains GmbH
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <bsp/cadence-i2c.h>
-#include <bsp/cadence-i2c-regs.h>
-
-#include <rtems/irq-extension.h>
-#include <rtems/score/assert.h>
-
-#include <dev/i2c/i2c.h>
-
-#define CADENCE_I2C_DIV_A_MAX 4
-
-#define CADENCE_I2C_DIV_B_MAX 64
-
-#define CADENCE_I2C_FIFO_DEPTH 16
-
-#define CADENCE_I2C_DATA_IRQ_DEPTH (CADENCE_I2C_FIFO_DEPTH - 2)
-
-#define CADENCE_I2C_TRANSFER_SIZE_MAX 255
-
-#define CADENCE_I2C_TRANSFER_SIZE_ONCE_MAX (18 * CADENCE_I2C_DATA_IRQ_DEPTH)
-
-#define CADENCE_I2C_IRQ_ERROR \
- (CADENCE_I2C_IXR_ARB_LOST \
- | CADENCE_I2C_IXR_RX_UNF \
- | CADENCE_I2C_IXR_TX_OVR \
- | CADENCE_I2C_IXR_RX_OVR \
- | CADENCE_I2C_IXR_NACK)
-
-#define CADENCE_I2C_IRQ_USED \
- (CADENCE_I2C_IRQ_ERROR \
- | CADENCE_I2C_IXR_DATA \
- | CADENCE_I2C_IXR_COMP)
-
-typedef struct {
- i2c_bus base;
- volatile cadence_i2c *regs;
- i2c_msg *msgs;
- uint32_t msg_todo;
- uint32_t current_msg_todo;
- uint8_t *current_msg_byte;
- uint32_t current_todo;
- uint32_t irqstatus;
- bool read;
- bool hold;
- rtems_id task_id;
- uint32_t input_clock;
- rtems_vector_number irq;
-} cadence_i2c_bus;
-
-static void cadence_i2c_disable_interrupts(volatile cadence_i2c *regs)
-{
- regs->irqdisable = 0xffff;
-}
-
-static void cadence_i2c_clear_irq_status(volatile cadence_i2c *regs)
-{
- regs->irqstatus = regs->irqstatus;
-}
-
-static void cadence_i2c_reset(cadence_i2c_bus *bus)
-{
- volatile cadence_i2c *regs = bus->regs;
- uint32_t val;
-
- cadence_i2c_disable_interrupts(regs);
-
- val = regs->control;
- val &= ~CADENCE_I2C_CONTROL_HOLD;
- val |= CADENCE_I2C_CONTROL_ACKEN
- | CADENCE_I2C_CONTROL_MS
- | CADENCE_I2C_CONTROL_CLR_FIFO;
- regs->control = val;
-
- regs->transfer_size = 0;
- regs->status = regs->status;
-
- cadence_i2c_clear_irq_status(regs);
-}
-
-static uint32_t cadence_i2c_set_address_size(
- const i2c_msg *msg,
- uint32_t control
-)
-{
- if ((msg->flags & I2C_M_TEN) == 0) {
- control |= CADENCE_I2C_CONTROL_NEA;
- } else {
- control &= ~CADENCE_I2C_CONTROL_NEA;
- }
-
- return control;
-}
-
-static void cadence_i2c_setup_read_transfer(
- cadence_i2c_bus *bus,
- volatile cadence_i2c *regs,
- uint32_t control
-)
-{
- control |= CADENCE_I2C_CONTROL_RW;
- regs->control = control;
-
- if (bus->current_todo <= CADENCE_I2C_TRANSFER_SIZE_MAX) {
- regs->transfer_size = bus->current_todo;
- } else {
- regs->transfer_size = CADENCE_I2C_TRANSFER_SIZE_ONCE_MAX;
- }
-}
-
-static void cadence_i2c_next_byte(cadence_i2c_bus *bus)
-{
- --bus->current_msg_todo;
- ++bus->current_msg_byte;
-
- if (bus->current_msg_todo == 0) {
- i2c_msg *msg;
-
- ++bus->msgs;
- --bus->msg_todo;
-
- msg = &bus->msgs[0];
-
- bus->current_msg_todo = msg->len;
- bus->current_msg_byte = msg->buf;
- }
-}
-
-static void cadence_i2c_write_to_fifo(
- cadence_i2c_bus *bus,
- volatile cadence_i2c *regs
-)
-{
- uint32_t space_available;
- uint32_t todo_now;
- uint32_t i;
-
- space_available = CADENCE_I2C_FIFO_DEPTH - regs->transfer_size;
-
- if (bus->current_todo > space_available) {
- todo_now = space_available;
- } else {
- todo_now = bus->current_todo;
- }
-
- bus->current_todo -= todo_now;
-
- for (i = 0; i < todo_now; ++i) {
- regs->data = *bus->current_msg_byte;
-
- cadence_i2c_next_byte(bus);
- }
-}
-
-static void cadence_i2c_setup_write_transfer(
- cadence_i2c_bus *bus,
- volatile cadence_i2c *regs,
- uint32_t control
-)
-{
- control &= ~CADENCE_I2C_CONTROL_RW;
- regs->control = control;
-
- cadence_i2c_write_to_fifo(bus, regs);
-}
-
-static void cadence_i2c_setup_transfer(
- cadence_i2c_bus *bus,
- volatile cadence_i2c *regs
-)
-{
- const i2c_msg *msgs = bus->msgs;
- uint32_t msg_todo = bus->msg_todo;
- uint32_t i;
- uint32_t control;
-
- bus->current_todo = msgs[0].len;
- for (i = 1; i < msg_todo && (msgs[i].flags & I2C_M_NOSTART) != 0; ++i) {
- bus->current_todo += msgs[i].len;
- }
-
- regs = bus->regs;
-
- control = regs->control;
- control |= CADENCE_I2C_CONTROL_CLR_FIFO;
-
- bus->hold = i < msg_todo;
-
- if (bus->hold || bus->current_todo > CADENCE_I2C_FIFO_DEPTH) {
- control |= CADENCE_I2C_CONTROL_HOLD;
- } else {
- control &= ~CADENCE_I2C_CONTROL_HOLD;
- }
-
- control = cadence_i2c_set_address_size(msgs, control);
-
- bus->read = (msgs->flags & I2C_M_RD) != 0;
- if (bus->read) {
- cadence_i2c_setup_read_transfer(bus, regs, control);
- } else {
- cadence_i2c_setup_write_transfer(bus, regs, control);
- }
-
- cadence_i2c_clear_irq_status(regs);
-
- regs->address = CADENCE_I2C_ADDRESS(msgs->addr);
-}
-
-static void cadence_i2c_continue_read_transfer(
- cadence_i2c_bus *bus,
- volatile cadence_i2c *regs
-)
-{
- uint32_t i;
-
- bus->current_todo -= CADENCE_I2C_DATA_IRQ_DEPTH;
-
- /*
- * This works since CADENCE_I2C_TRANSFER_SIZE_ONCE_MAX is an integral
- * multiple of CADENCE_I2C_DATA_IRQ_DEPTH.
- *
- * FIXME: Tests with a 1024 byte EEPROM show that this doesn't work. Needs
- * further investigations with an I2C analyser or an oscilloscope.
- */
- if (regs->transfer_size == 0) {
- if (bus->current_todo <= CADENCE_I2C_TRANSFER_SIZE_MAX) {
- regs->transfer_size = bus->current_todo;
- } else {
- regs->transfer_size = CADENCE_I2C_TRANSFER_SIZE_ONCE_MAX;
- }
- }
-
- for (i = 0; i < CADENCE_I2C_DATA_IRQ_DEPTH; ++i) {
- *bus->current_msg_byte = (uint8_t) regs->data;
-
- cadence_i2c_next_byte(bus);
- }
-
- if (!bus->hold && bus->current_todo <= CADENCE_I2C_FIFO_DEPTH) {
- regs->control &= ~CADENCE_I2C_CONTROL_HOLD;
- }
-}
-
-static void cadence_i2c_interrupt(void *arg)
-{
- cadence_i2c_bus *bus = arg;
- volatile cadence_i2c *regs = bus->regs;
- uint32_t irqstatus = regs->irqstatus;
- bool done = false;
-
- /* Clear interrupts */
- regs->irqstatus = irqstatus;
-
- if ((irqstatus & (CADENCE_I2C_IXR_ARB_LOST | CADENCE_I2C_IXR_NACK)) != 0) {
- done = true;
- }
-
- if (
- (irqstatus & CADENCE_I2C_IXR_DATA) != 0
- && bus->read
- && bus->current_todo >= CADENCE_I2C_DATA_IRQ_DEPTH
- ) {
- cadence_i2c_continue_read_transfer(bus, regs);
- }
-
- if ((irqstatus & CADENCE_I2C_IXR_COMP) != 0) {
- if (bus->read) {
- uint32_t todo_now = bus->current_todo;
- uint32_t i;
-
- for (i = 0; i < todo_now; ++i) {
- *bus->current_msg_byte = (uint8_t) regs->data;
-
- cadence_i2c_next_byte(bus);
- }
-
- bus->current_todo = 0;
-
- done = true;
- } else {
- if (bus->current_todo > 0) {
- cadence_i2c_write_to_fifo(bus, regs);
- } else {
- done = true;
- }
-
- if (!bus->hold && bus->current_todo == 0) {
- regs->control &= ~CADENCE_I2C_CONTROL_HOLD;
- }
- }
- }
-
- if (done) {
- uint32_t err = irqstatus & CADENCE_I2C_IRQ_ERROR;
-
- if (bus->msg_todo == 0 || err != 0) {
- rtems_status_code sc;
-
- cadence_i2c_disable_interrupts(regs);
-
- bus->irqstatus = err;
-
- sc = rtems_event_transient_send(bus->task_id);
- _Assert(sc == RTEMS_SUCCESSFUL);
- (void) sc;
- } else {
- cadence_i2c_setup_transfer(bus, regs);
- }
- }
-}
-
-static int cadence_i2c_transfer(
- i2c_bus *base,
- i2c_msg *msgs,
- uint32_t msg_count
-)
-{
- cadence_i2c_bus *bus = (cadence_i2c_bus *) base;
- volatile cadence_i2c *regs;
- rtems_status_code sc;
- uint32_t i;
-
- _Assert(msg_count > 0);
-
- for (i = 0; i < msg_count; ++i) {
- /* FIXME: Not sure if we can support this. */
- if ((msgs[i].flags & I2C_M_RECV_LEN) != 0) {
- return -EINVAL;
- }
- }
-
- bus->msgs = &msgs[0];
- bus->msg_todo = msg_count;
- bus->current_msg_todo = msgs[0].len;
- bus->current_msg_byte = msgs[0].buf;
- bus->task_id = rtems_task_self();
-
- regs = bus->regs;
- cadence_i2c_setup_transfer(bus, regs);
- regs->irqenable = CADENCE_I2C_IRQ_USED;
-
- sc = rtems_event_transient_receive(RTEMS_WAIT, bus->base.timeout);
- if (sc != RTEMS_SUCCESSFUL) {
- cadence_i2c_reset(bus);
- rtems_event_transient_clear();
-
- return -ETIMEDOUT;
- }
-
- return bus->irqstatus == 0 ? 0 : -EIO;
-}
-
-static int cadence_i2c_set_clock(i2c_bus *base, unsigned long clock)
-{
- cadence_i2c_bus *bus = (cadence_i2c_bus *) base;
- volatile cadence_i2c *regs = bus->regs;
- uint32_t error = 0xffffffff;
- uint32_t best_div_a = CADENCE_I2C_DIV_A_MAX - 1;
- uint32_t best_div_b = CADENCE_I2C_DIV_B_MAX - 1;
- uint32_t div = bus->input_clock / (22 * clock);
- uint32_t div_a;
- uint32_t control;
-
- if (div <= 0 || div > (CADENCE_I2C_DIV_A_MAX * CADENCE_I2C_DIV_B_MAX)) {
- return -EIO;
- }
-
- for (div_a = 0; div_a < CADENCE_I2C_DIV_A_MAX; ++div_a) {
- uint32_t a = 22 * clock * (div_a + 1);
- uint32_t b = (bus->input_clock + a - 1) / a;
-
- if (b > 0 && b <= CADENCE_I2C_DIV_B_MAX) {
- uint32_t actual_clock = bus->input_clock / (22 * (div_a + 1) * b);
- uint32_t e = clock < actual_clock ?
- actual_clock - clock : clock - actual_clock;
-
- /*
- * Favour greater div_a values according to UG585, Zynq-7000 AP SoC
- * Technical Reference Manual, Table 20-1: Calculated Values for Standard
- * and High Speed SCL Clock Values".
- */
- if (e <= error && actual_clock <= clock) {
- error = e;
- best_div_a = div_a;
- best_div_b = b - 1;
- }
- }
- }
-
- control = regs->control;
- control = CADENCE_I2C_CONTROL_DIV_A_SET(control, best_div_a);
- control = CADENCE_I2C_CONTROL_DIV_B_SET(control, best_div_b);
- regs->control = control;
-
- return 0;
-}
-
-static void cadence_i2c_destroy(i2c_bus *base)
-{
- cadence_i2c_bus *bus = (cadence_i2c_bus *) base;
- rtems_status_code sc;
-
- sc = rtems_interrupt_handler_remove(bus->irq, cadence_i2c_interrupt, bus);
- _Assert(sc == RTEMS_SUCCESSFUL);
- (void) sc;
-
- i2c_bus_destroy_and_free(&bus->base);
-}
-
-int i2c_bus_register_cadence(
- const char *bus_path,
- uintptr_t register_base,
- uint32_t input_clock,
- rtems_vector_number irq
-)
-{
- cadence_i2c_bus *bus;
- rtems_status_code sc;
- int err;
-
- bus = (cadence_i2c_bus *) i2c_bus_alloc_and_init(sizeof(*bus));
- if (bus == NULL) {
- return -1;
- }
-
- bus->regs = (volatile cadence_i2c *) register_base;
- bus->input_clock = input_clock;
- bus->irq = irq;
-
- cadence_i2c_reset(bus);
-
- err = cadence_i2c_set_clock(&bus->base, I2C_BUS_CLOCK_DEFAULT);
- if (err != 0) {
- (*bus->base.destroy)(&bus->base);
-
- rtems_set_errno_and_return_minus_one(-err);
- }
-
- sc = rtems_interrupt_handler_install(
- irq,
- "Cadence I2C",
- RTEMS_INTERRUPT_UNIQUE,
- cadence_i2c_interrupt,
- bus
- );
- if (sc != RTEMS_SUCCESSFUL) {
- (*bus->base.destroy)(&bus->base);
-
- rtems_set_errno_and_return_minus_one(EIO);
- }
-
- bus->base.transfer = cadence_i2c_transfer;
- bus->base.set_clock = cadence_i2c_set_clock;
- bus->base.destroy = cadence_i2c_destroy;
-
- return i2c_bus_register(&bus->base, bus_path);
-}
diff --git a/bsps/arm/xilinx-zynq/include/bsp.h b/bsps/arm/xilinx-zynq/include/bsp.h
index fde8d03130..151e603812 100644
--- a/bsps/arm/xilinx-zynq/include/bsp.h
+++ b/bsps/arm/xilinx-zynq/include/bsp.h
@@ -7,7 +7,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright (C) 2013, 2014 embedded brains GmbH
+ * Copyright (C) 2013, 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -54,7 +54,7 @@
#include <bsp/default-initial-extension.h>
#include <bsp/start.h>
-#include <dev/serial/zynq-uart.h>
+#include <dev/serial/zynq-uart-zynq.h>
#ifdef __cplusplus
extern "C" {
@@ -74,8 +74,6 @@ extern "C" {
#define BSP_ARM_L2C_310_ID 0x410000c8
-extern zynq_uart_context zynq_uart_instances[2];
-
/**
* @brief Zynq specific set up of the MMU.
*
diff --git a/bsps/arm/xilinx-zynq/include/bsp/cadence-i2c-regs.h b/bsps/arm/xilinx-zynq/include/bsp/cadence-i2c-regs.h
deleted file mode 100644
index 7d7c3b284a..0000000000
--- a/bsps/arm/xilinx-zynq/include/bsp/cadence-i2c-regs.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (C) 2014 embedded brains GmbH
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef LIBBSP_ARM_XILINX_ZYNQ_CADENCE_I2C_REGS_H
-#define LIBBSP_ARM_XILINX_ZYNQ_CADENCE_I2C_REGS_H
-
-#include <bsp/utility.h>
-
-typedef struct {
- uint32_t control;
-#define CADENCE_I2C_CONTROL_DIV_A(val) BSP_FLD32(val, 14, 15)
-#define CADENCE_I2C_CONTROL_DIV_A_GET(reg) BSP_FLD32GET(reg, 14, 15)
-#define CADENCE_I2C_CONTROL_DIV_A_SET(reg, val) BSP_FLD32SET(reg, val, 14, 15)
-#define CADENCE_I2C_CONTROL_DIV_B(val) BSP_FLD32(val, 8, 13)
-#define CADENCE_I2C_CONTROL_DIV_B_GET(reg) BSP_FLD32GET(reg, 8, 13)
-#define CADENCE_I2C_CONTROL_DIV_B_SET(reg, val) BSP_FLD32SET(reg, val, 8, 13)
-#define CADENCE_I2C_CONTROL_CLR_FIFO BSP_BIT32(6)
-#define CADENCE_I2C_CONTROL_SLVMON BSP_BIT32(5)
-#define CADENCE_I2C_CONTROL_HOLD BSP_BIT32(4)
-#define CADENCE_I2C_CONTROL_ACKEN BSP_BIT32(3)
-#define CADENCE_I2C_CONTROL_NEA BSP_BIT32(2)
-#define CADENCE_I2C_CONTROL_MS BSP_BIT32(1)
-#define CADENCE_I2C_CONTROL_RW BSP_BIT32(0)
- uint32_t status;
-#define CADENCE_I2C_STATUS_BA BSP_BIT32(8)
-#define CADENCE_I2C_STATUS_RXOVF BSP_BIT32(7)
-#define CADENCE_I2C_STATUS_TXDV BSP_BIT32(6)
-#define CADENCE_I2C_STATUS_RXDV BSP_BIT32(5)
-#define CADENCE_I2C_STATUS_RXRW BSP_BIT32(3)
- uint32_t address;
-#define CADENCE_I2C_ADDRESS(val) BSP_FLD32(val, 0, 9)
-#define CADENCE_I2C_ADDRESS_GET(reg) BSP_FLD32GET(reg, 0, 9)
-#define CADENCE_I2C_ADDRESS_SET(reg, val) BSP_FLD32SET(reg, val, 0, 9)
- uint32_t data;
- uint32_t irqstatus;
-#define CADENCE_I2C_IXR_ARB_LOST BSP_BIT32(9)
-#define CADENCE_I2C_IXR_RX_UNF BSP_BIT32(7)
-#define CADENCE_I2C_IXR_TX_OVR BSP_BIT32(6)
-#define CADENCE_I2C_IXR_RX_OVR BSP_BIT32(5)
-#define CADENCE_I2C_IXR_SLV_RDY BSP_BIT32(4)
-#define CADENCE_I2C_IXR_TO BSP_BIT32(3)
-#define CADENCE_I2C_IXR_NACK BSP_BIT32(2)
-#define CADENCE_I2C_IXR_DATA BSP_BIT32(1)
-#define CADENCE_I2C_IXR_COMP BSP_BIT32(0)
- uint32_t transfer_size;
-#define CADENCE_I2C_TRANSFER_SIZE(val) BSP_FLD32(val, 0, 7)
-#define CADENCE_I2C_TRANSFER_SIZE_GET(reg) BSP_FLD32GET(reg, 0, 7)
-#define CADENCE_I2C_TRANSFER_SIZE_SET(reg, val) BSP_FLD32SET(reg, val, 0, 7)
- uint32_t slave_mon_pause;
-#define CADENCE_I2C_SLAVE_MON_PAUSE(val) BSP_FLD32(val, 0, 3)
-#define CADENCE_I2C_SLAVE_MON_PAUSE_GET(reg) BSP_FLD32GET(reg, 0, 3)
-#define CADENCE_I2C_SLAVE_MON_PAUSE_SET(reg, val) BSP_FLD32SET(reg, val, 0, 3)
- uint32_t timeout;
-#define CADENCE_I2C_TIMEOUT(val) BSP_FLD32(val, 0, 7)
-#define CADENCE_I2C_TIMEOUT_GET(reg) BSP_FLD32GET(reg, 0, 7)
-#define CADENCE_I2C_TIMEOUT_SET(reg, val) BSP_FLD32SET(reg, val, 0, 7)
- uint32_t irqmask;
- uint32_t irqenable;
- uint32_t irqdisable;
-} cadence_i2c;
-
-#endif /* LIBBSP_ARM_XILINX_ZYNQ_CADENCE_I2C_REGS_H */
diff --git a/bsps/arm/xilinx-zynq/include/bsp/cadence-i2c.h b/bsps/arm/xilinx-zynq/include/bsp/cadence-i2c.h
deleted file mode 100644
index aff97237a4..0000000000
--- a/bsps/arm/xilinx-zynq/include/bsp/cadence-i2c.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (C) 2014 embedded brains GmbH
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef LIBBSP_ARM_XILINX_ZYNQ_CADENCE_I2C_H
-#define LIBBSP_ARM_XILINX_ZYNQ_CADENCE_I2C_H
-
-#include <rtems.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-int i2c_bus_register_cadence(
- const char *bus_path,
- uintptr_t register_base,
- uint32_t input_clock,
- rtems_vector_number irq
-);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* LIBBSP_ARM_XILINX_ZYNQ_CADENCE_I2C_H */
diff --git a/bsps/arm/xilinx-zynq/include/bsp/i2c.h b/bsps/arm/xilinx-zynq/include/bsp/i2c.h
index fbdf6ea2c0..93a8b364b1 100644
--- a/bsps/arm/xilinx-zynq/include/bsp/i2c.h
+++ b/bsps/arm/xilinx-zynq/include/bsp/i2c.h
@@ -1,7 +1,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright (C) 2014 embedded brains GmbH
+ * Copyright (C) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -28,10 +28,11 @@
#ifndef LIBBSP_ARM_XILINX_ZYNQ_I2C_H
#define LIBBSP_ARM_XILINX_ZYNQ_I2C_H
-#include <bsp/cadence-i2c.h>
#include <bsp/irq.h>
#include <bsp.h>
+#include <dev/i2c/cadence-i2c.h>
+
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
diff --git a/bsps/arm/xilinx-zynq/include/bsp/irq.h b/bsps/arm/xilinx-zynq/include/bsp/irq.h
index f4579ae614..61d47c529b 100644
--- a/bsps/arm/xilinx-zynq/include/bsp/irq.h
+++ b/bsps/arm/xilinx-zynq/include/bsp/irq.h
@@ -7,7 +7,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright (C) 2013 embedded brains GmbH
+ * Copyright (C) 2013 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -36,7 +36,6 @@
#ifndef ASM
-#include <rtems/irq.h>
#include <rtems/irq-extension.h>
#include <bsp/arm-a9mpcore-irq.h>
diff --git a/bsps/arm/xilinx-zynq/include/tm27.h b/bsps/arm/xilinx-zynq/include/tm27.h
index 7fc8dd7edd..9f3f846c87 100644
--- a/bsps/arm/xilinx-zynq/include/tm27.h
+++ b/bsps/arm/xilinx-zynq/include/tm27.h
@@ -7,7 +7,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright (C) 2013 embedded brains GmbH
+ * Copyright (C) 2013 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/bsps/arm/xilinx-zynq/start/bsp_specs b/bsps/arm/xilinx-zynq/start/bsp_specs
deleted file mode 100644
index e69de29bb2..0000000000
--- a/bsps/arm/xilinx-zynq/start/bsp_specs
+++ /dev/null
diff --git a/bsps/arm/xilinx-zynq/start/bspreset.c b/bsps/arm/xilinx-zynq/start/bspreset.c
index 3e797a137e..b6cf09ba02 100644
--- a/bsps/arm/xilinx-zynq/start/bspreset.c
+++ b/bsps/arm/xilinx-zynq/start/bspreset.c
@@ -1,7 +1,15 @@
-/*
- * SPDX-License-Identifier: BSD-2-Clause
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSBSPsARMZynq
*
- * Copyright (C) 2013 embedded brains GmbH
+ * @brief This source file contains the implementation of bsp_reset().
+ */
+
+/*
+ * Copyright (C) 2013 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -27,14 +35,16 @@
#include <bsp.h>
#include <bsp/bootcard.h>
-#include <dev/serial/zynq-uart.h>
+#include <dev/serial/zynq-uart-regs.h>
void bsp_reset(void)
{
+ volatile zynq_uart *regs =
+ (volatile zynq_uart *) ZYNQ_UART_KERNEL_IO_BASE_ADDR;
volatile uint32_t *slcr_unlock = (volatile uint32_t *) 0xf8000008;
volatile uint32_t *pss_rst_ctrl = (volatile uint32_t *) 0xf8000200;
- zynq_uart_reset_tx_flush(&zynq_uart_instances[BSP_CONSOLE_MINOR]);
+ zynq_uart_reset_tx_flush(regs);
while (true) {
*slcr_unlock = 0xdf0d;
diff --git a/bsps/arm/xilinx-zynq/start/bspsmp.c b/bsps/arm/xilinx-zynq/start/bspsmp.c
index fdb7f85ba6..294acb0083 100644
--- a/bsps/arm/xilinx-zynq/start/bspsmp.c
+++ b/bsps/arm/xilinx-zynq/start/bspsmp.c
@@ -1,7 +1,7 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
- * Copyright (C) 2014 embedded brains GmbH
+ * Copyright (C) 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/bsps/arm/xilinx-zynq/start/bspstart.c b/bsps/arm/xilinx-zynq/start/bspstart.c
index 68b0ef0b03..89926ce1f3 100644
--- a/bsps/arm/xilinx-zynq/start/bspstart.c
+++ b/bsps/arm/xilinx-zynq/start/bspstart.c
@@ -1,7 +1,16 @@
-/*
- * SPDX-License-Identifier: BSD-2-Clause
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSBSPsARMZynq
*
- * Copyright (C) 2013, 2015 embedded brains GmbH
+ * @brief This source file contains the implementation of zynq_clock_cpu_1x()
+ * and bsp_start().
+ */
+
+/*
+ * Copyright (C) 2013, 2015 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/bsps/arm/xilinx-zynq/start/bspstarthooks.c b/bsps/arm/xilinx-zynq/start/bspstarthooks.c
index c67ed4f93e..de6a4ccd54 100644
--- a/bsps/arm/xilinx-zynq/start/bspstarthooks.c
+++ b/bsps/arm/xilinx-zynq/start/bspstarthooks.c
@@ -1,7 +1,16 @@
-/*
- * SPDX-License-Identifier: BSD-2-Clause
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSBSPsARMZynq
*
- * Copyright (C) 2013, 2014 embedded brains GmbH
+ * @brief This source file contains the implementation of bsp_start_hook_0()
+ * and bsp_start_hook_1().
+ */
+
+/*
+ * Copyright (C) 2013, 2014 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/bsps/arm/xilinx-zynq/start/bspstartmmu.c b/bsps/arm/xilinx-zynq/start/bspstartmmu.c
index c18f8623f7..04d7586c1b 100644
--- a/bsps/arm/xilinx-zynq/start/bspstartmmu.c
+++ b/bsps/arm/xilinx-zynq/start/bspstartmmu.c
@@ -1,7 +1,16 @@
-/*
- * SPDX-License-Identifier: BSD-2-Clause
+/* SPDX-License-Identifier: BSD-2-Clause */
+
+/**
+ * @file
+ *
+ * @ingroup RTEMSBSPsARMZynq
*
- * Copyright (C) 2013 embedded brains GmbH
+ * @brief This source file contains the implementation of
+ * zynq_setup_mmu_and_cache().
+ */
+
+/*
+ * Copyright (C) 2013 embedded brains GmbH & Co. KG
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/bsps/arm/xilinx-zynq/start/linkcmds.in b/bsps/arm/xilinx-zynq/start/linkcmds.in
deleted file mode 100644
index fb841b93aa..0000000000
--- a/bsps/arm/xilinx-zynq/start/linkcmds.in
+++ /dev/null
@@ -1,36 +0,0 @@
-MEMORY {
- RAM_INT_0 : ORIGIN = @ZYNQ_RAM_INT_0_ORIGIN@, LENGTH = @ZYNQ_RAM_INT_0_LENGTH@
- RAM_INT_1 : ORIGIN = @ZYNQ_RAM_INT_1_ORIGIN@, LENGTH = @ZYNQ_RAM_INT_1_LENGTH@
- RAM_MMU : ORIGIN = @ZYNQ_RAM_ORIGIN@, LENGTH = @ZYNQ_RAM_MMU_LENGTH@
- RAM : ORIGIN = @ZYNQ_RAM_ORIGIN@ + @ZYNQ_RAM_MMU_LENGTH@, LENGTH = @BSP_ZYNQ_RAM_LENGTH@ - @ZYNQ_RAM_ORIGIN@ - @ZYNQ_RAM_MMU_LENGTH@ - @ZYNQ_RAM_NOCACHE_LENGTH@
- NOCACHE : ORIGIN = @BSP_ZYNQ_RAM_LENGTH@ - @ZYNQ_RAM_NOCACHE_LENGTH@, LENGTH = @ZYNQ_RAM_NOCACHE_LENGTH@
-}
-
-REGION_ALIAS ("REGION_START", RAM);
-REGION_ALIAS ("REGION_VECTOR", RAM);
-REGION_ALIAS ("REGION_TEXT", RAM);
-REGION_ALIAS ("REGION_TEXT_LOAD", RAM);
-REGION_ALIAS ("REGION_RODATA", RAM);
-REGION_ALIAS ("REGION_RODATA_LOAD", RAM);
-REGION_ALIAS ("REGION_DATA", RAM);
-REGION_ALIAS ("REGION_DATA_LOAD", RAM);
-REGION_ALIAS ("REGION_FAST_TEXT", RAM);
-REGION_ALIAS ("REGION_FAST_TEXT_LOAD", RAM);
-REGION_ALIAS ("REGION_FAST_DATA", RAM);
-REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
-REGION_ALIAS ("REGION_BSS", RAM);
-REGION_ALIAS ("REGION_WORK", RAM);
-REGION_ALIAS ("REGION_STACK", RAM);
-REGION_ALIAS ("REGION_NOCACHE", NOCACHE);
-REGION_ALIAS ("REGION_NOCACHE_LOAD", NOCACHE);
-
-bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024;
-
-bsp_section_rwbarrier_align = DEFINED (bsp_section_rwbarrier_align) ? bsp_section_rwbarrier_align : 1M;
-
-bsp_vector_table_in_start_section = 1;
-
-bsp_translation_table_base = ORIGIN (RAM_MMU);
-bsp_translation_table_end = ORIGIN (RAM_MMU) + LENGTH (RAM_MMU);
-
-INCLUDE linkcmds.armv4