From 4c30acf2c840ab552a080fac156356331e795d63 Mon Sep 17 00:00:00 2001 From: Jeff Kubascik Date: Wed, 4 Dec 2019 09:29:33 -0500 Subject: bsp/xen: Create BSP Create the Xen BSP for Xen on ARM. --- bsps/arm/xen/config/xen_virtual.cfg | 14 ++++++ bsps/arm/xen/console/console.c | 63 +++++++++++++++++++++++++ bsps/arm/xen/headers.am | 10 ++++ bsps/arm/xen/include/bsp.h | 86 +++++++++++++++++++++++++++++++++++ bsps/arm/xen/include/bsp/irq.h | 62 +++++++++++++++++++++++++ bsps/arm/xen/include/tm27.h | 38 ++++++++++++++++ bsps/arm/xen/start/bsp_specs | 9 ++++ bsps/arm/xen/start/bspstart.c | 60 ++++++++++++++++++++++++ bsps/arm/xen/start/bspstarthooks.c | 44 ++++++++++++++++++ bsps/arm/xen/start/bspstartmmu.c | 73 +++++++++++++++++++++++++++++ bsps/arm/xen/start/linkcmds.in | 62 +++++++++++++++++++++++++ c/src/lib/libbsp/arm/acinclude.m4 | 2 + c/src/lib/libbsp/arm/xen/Makefile.am | 48 +++++++++++++++++++ c/src/lib/libbsp/arm/xen/configure.ac | 59 ++++++++++++++++++++++++ 14 files changed, 630 insertions(+) create mode 100644 bsps/arm/xen/config/xen_virtual.cfg create mode 100644 bsps/arm/xen/console/console.c create mode 100644 bsps/arm/xen/headers.am create mode 100644 bsps/arm/xen/include/bsp.h create mode 100644 bsps/arm/xen/include/bsp/irq.h create mode 100644 bsps/arm/xen/include/tm27.h create mode 100644 bsps/arm/xen/start/bsp_specs create mode 100644 bsps/arm/xen/start/bspstart.c create mode 100644 bsps/arm/xen/start/bspstarthooks.c create mode 100644 bsps/arm/xen/start/bspstartmmu.c create mode 100644 bsps/arm/xen/start/linkcmds.in create mode 100644 c/src/lib/libbsp/arm/xen/Makefile.am create mode 100644 c/src/lib/libbsp/arm/xen/configure.ac diff --git a/bsps/arm/xen/config/xen_virtual.cfg b/bsps/arm/xen/config/xen_virtual.cfg new file mode 100644 index 0000000000..1b5031c3f0 --- /dev/null +++ b/bsps/arm/xen/config/xen_virtual.cfg @@ -0,0 +1,14 @@ +# +# Configuration file for the "xen_virtual" target +# + +include $(RTEMS_ROOT)/make/custom/default.cfg + +RTEMS_CPU = arm + +CPU_CFLAGS = -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard + +CFLAGS_OPTIMIZE_V += -O2 -g +CFLAGS_OPTIMIZE_V += -ffunction-sections -fdata-sections + +LDFLAGS = -Wl,--gc-sections diff --git a/bsps/arm/xen/console/console.c b/bsps/arm/xen/console/console.c new file mode 100644 index 0000000000..786b98f3ba --- /dev/null +++ b/bsps/arm/xen/console/console.c @@ -0,0 +1,63 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2019 DornerWorks + * Written by Jeff Kubascik + * + * 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 + +#include +#include +#include +#include + +#include + +arm_pl011_context xen_vpl011_context = { + .base = RTEMS_TERMIOS_DEVICE_CONTEXT_INITIALIZER("PL011"), + .regs = (volatile pl011 *) BSP_XEN_VPL011_BASE, + .irq = GUEST_VPL011_SPI, + .initial_baud = 115200 +}; + +const console_device console_device_table[] = { + { + .device_file = "/dev/ttyS0", + .probe = console_device_probe_default, + .handler = &arm_pl011_fns, + .context = &xen_vpl011_context.base + } +}; + +const size_t console_device_count = RTEMS_ARRAY_SIZE(console_device_table); + +static void output_char( char c ) +{ + arm_pl011_write_polled(&xen_vpl011_context.base, c); +} + +BSP_output_char_function_type BSP_output_char = output_char; + +BSP_polling_getchar_function_type BSP_poll_char = NULL; diff --git a/bsps/arm/xen/headers.am b/bsps/arm/xen/headers.am new file mode 100644 index 0000000000..952fa37670 --- /dev/null +++ b/bsps/arm/xen/headers.am @@ -0,0 +1,10 @@ +## This file was generated by "./boostrap -H". + +include_HEADERS = +include_HEADERS += ../../../../../../bsps/arm/xen/include/bsp.h +include_HEADERS += include/bspopts.h +include_HEADERS += ../../../../../../bsps/arm/xen/include/tm27.h + +include_bspdir = $(includedir)/bsp +include_bsp_HEADERS = +include_bsp_HEADERS += ../../../../../../bsps/arm/xen/include/bsp/irq.h diff --git a/bsps/arm/xen/include/bsp.h b/bsps/arm/xen/include/bsp.h new file mode 100644 index 0000000000..e5b23a902e --- /dev/null +++ b/bsps/arm/xen/include/bsp.h @@ -0,0 +1,86 @@ +/** + * @file + * + * @ingroup RTEMSBSPsARMxen + * + * @brief Global BSP definitions. + */ + +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2019 DornerWorks + * Written by Jeff Kubascik + * + * 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_XEN_BSP_H +#define LIBBSP_ARM_XEN_BSP_H + +/** + * @addtogroup RTEMSBSPsARM + * + * @{ + */ + +#include + +#define BSP_FEATURE_IRQ_EXTENSION + +#ifndef ASM + +#include +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#define BSP_ARM_GIC_CPUIF_BASE 0x03002000 +#define BSP_ARM_GIC_CPUIF_LENGTH 0x1000 + +#define BSP_ARM_GIC_DIST_BASE 0x03001000 +#define BSP_ARM_GIC_DIST_LENGTH 0x1000 + +#define BSP_ARM_A9MPCORE_SCU_BASE 0 + +#define BSP_ARM_A9MPCORE_GT_BASE 0 + +#define BSP_XEN_VPL011_BASE 0x22000000 +#define BSP_XEN_VPL011_LENGTH 0x1000 + +void arm_generic_timer_get_config(uint32_t *frequency, uint32_t *irq); + +BSP_START_TEXT_SECTION void bsp_xen_setup_mmu_and_cache(void); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* ASM */ + +/** @} */ + +#endif /* LIBBSP_ARM_XEN_BSP_H */ diff --git a/bsps/arm/xen/include/bsp/irq.h b/bsps/arm/xen/include/bsp/irq.h new file mode 100644 index 0000000000..dc09e52373 --- /dev/null +++ b/bsps/arm/xen/include/bsp/irq.h @@ -0,0 +1,62 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2019 DornerWorks + * Written by Jeff Kubascik + * + * 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_XEN_IRQ_H +#define LIBBSP_ARM_XEN_IRQ_H + +#ifndef ASM + +#include +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#define BSP_INTERRUPT_VECTOR_MIN 0 +#define BSP_INTERRUPT_VECTOR_MAX 1023 + +/* Xen guest interrupts */ +#define GUEST_TIMER_VIRT_PPI 27 +#define GUEST_TIMER_PHYS_S_PPI 29 +#define GUEST_TIMER_PHYS_NS_PPI 30 +#define GUEST_EVTCHN_PPI 31 + +#define GUEST_VPL011_SPI 32 + +/** @} */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* ASM */ + +#endif /* LIBBSP_ARM_XEN_IRQ_H */ diff --git a/bsps/arm/xen/include/tm27.h b/bsps/arm/xen/include/tm27.h new file mode 100644 index 0000000000..2fc4afa4f2 --- /dev/null +++ b/bsps/arm/xen/include/tm27.h @@ -0,0 +1,38 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2019 DornerWorks + * Written by Jeff Kubascik + * + * 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 _RTEMS_TMTEST27 +#error "This is an RTEMS internal file you must not include directly." +#endif + +#ifndef __tm27_h +#define __tm27_h + +#include + +#endif /* __tm27_h */ diff --git a/bsps/arm/xen/start/bsp_specs b/bsps/arm/xen/start/bsp_specs new file mode 100644 index 0000000000..47dd31d46b --- /dev/null +++ b/bsps/arm/xen/start/bsp_specs @@ -0,0 +1,9 @@ +%rename endfile old_endfile +%rename startfile old_startfile + +*startfile: +%{!qrtems: %(old_startfile)} \ +%{!nostdlib: %{qrtems: crti.o%s crtbegin.o%s}} + +*endfile: +%{!qrtems: %(old_endfiles)} %{qrtems: crtend.o%s crtn.o%s} diff --git a/bsps/arm/xen/start/bspstart.c b/bsps/arm/xen/start/bspstart.c new file mode 100644 index 0000000000..6b826fc917 --- /dev/null +++ b/bsps/arm/xen/start/bspstart.c @@ -0,0 +1,60 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2019 DornerWorks + * Written by Jeff Kubascik + * + * 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 +#include +#include +#include + +#include + +void arm_generic_timer_get_config( uint32_t *frequency, uint32_t *irq ) +{ + *frequency = arm_cp15_get_counter_frequency(); + +#ifdef ARM_GENERIC_TIMER_USE_VIRTUAL + *irq = GUEST_TIMER_VIRT_PPI; +#else + *irq = GUEST_TIMER_PHYS_NS_PPI; +#endif +} + +/* + * bsp_start + * + * This routine does the bulk of the system initialization. + */ + +void bsp_start( void ) +{ + bsp_interrupt_initialize(); + rtems_cache_coherent_add_area( + bsp_section_nocacheheap_begin, + (uintptr_t) bsp_section_nocacheheap_size + ); +} diff --git a/bsps/arm/xen/start/bspstarthooks.c b/bsps/arm/xen/start/bspstarthooks.c new file mode 100644 index 0000000000..120535c60f --- /dev/null +++ b/bsps/arm/xen/start/bspstarthooks.c @@ -0,0 +1,44 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2019 DornerWorks + * Written by Jeff Kubascik + * + * 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 +#include +#include + +BSP_START_TEXT_SECTION void bsp_start_hook_0(void) +{ + /* Do nothing */ +} + +BSP_START_TEXT_SECTION void bsp_start_hook_1(void) +{ + arm_a9mpcore_start_set_vector_base(); + bsp_start_copy_sections(); + bsp_xen_setup_mmu_and_cache(); + bsp_start_clear_bss(); +} diff --git a/bsps/arm/xen/start/bspstartmmu.c b/bsps/arm/xen/start/bspstartmmu.c new file mode 100644 index 0000000000..b24af89d41 --- /dev/null +++ b/bsps/arm/xen/start/bspstartmmu.c @@ -0,0 +1,73 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2019 DornerWorks + * Written by Jeff Kubascik + * + * 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. + */ + +#define ARM_CP15_TEXT_SECTION BSP_START_TEXT_SECTION + +#include +#include +#include +#include + +BSP_START_DATA_SECTION static const arm_cp15_start_section_config +xen_bsp_mmu_config_table[] = { + ARMV7_CP15_START_DEFAULT_SECTIONS, + { + .begin = BSP_ARM_GIC_DIST_BASE, + .end = BSP_ARM_GIC_DIST_BASE + BSP_ARM_GIC_DIST_LENGTH, + .flags = ARMV7_MMU_DEVICE + }, { + .begin = BSP_ARM_GIC_CPUIF_BASE, + .end = BSP_ARM_GIC_CPUIF_BASE + BSP_ARM_GIC_CPUIF_LENGTH, + .flags = ARMV7_MMU_DEVICE + }, { + .begin = BSP_XEN_VPL011_BASE, + .end = BSP_XEN_VPL011_BASE + BSP_XEN_VPL011_LENGTH, + .flags = ARMV7_MMU_DEVICE + } +}; + +/* + * Make weak and let the user override. + */ +BSP_START_TEXT_SECTION void bsp_xen_setup_mmu_and_cache(void) __attribute__ ((weak)); + +BSP_START_TEXT_SECTION void bsp_xen_setup_mmu_and_cache(void) +{ + uint32_t ctrl = arm_cp15_start_setup_mmu_and_cache( + ARM_CP15_CTRL_TRE | ARM_CP15_CTRL_A, + ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_Z + ); + + arm_cp15_start_setup_translation_table_and_enable_mmu_and_cache( + ctrl, + (uint32_t *) bsp_translation_table_base, + ARM_MMU_DEFAULT_CLIENT_DOMAIN, + &xen_bsp_mmu_config_table[0], + RTEMS_ARRAY_SIZE(xen_bsp_mmu_config_table) + ); +} diff --git a/bsps/arm/xen/start/linkcmds.in b/bsps/arm/xen/start/linkcmds.in new file mode 100644 index 0000000000..944687679b --- /dev/null +++ b/bsps/arm/xen/start/linkcmds.in @@ -0,0 +1,62 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2019 DornerWorks + * Written by Jeff Kubascik + * + * 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. + */ + +MEMORY { + RAM_MMU : ORIGIN = @GUEST_RAM_BASE@, LENGTH = @GUEST_RAM_MMU_LENGTH@ + RAM : ORIGIN = @GUEST_RAM_BASE@ + @GUEST_LOAD_OFFSET@, LENGTH = @GUEST_RAM_LENGTH@ - @GUEST_LOAD_OFFSET@ - @GUEST_RAM_NOCACHE_LENGTH@ + NOCACHE : ORIGIN = @GUEST_RAM_BASE@ + @GUEST_RAM_LENGTH@ - @GUEST_RAM_NOCACHE_LENGTH@, LENGTH = @GUEST_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 diff --git a/c/src/lib/libbsp/arm/acinclude.m4 b/c/src/lib/libbsp/arm/acinclude.m4 index 04557a6d69..4d50477eb3 100644 --- a/c/src/lib/libbsp/arm/acinclude.m4 +++ b/c/src/lib/libbsp/arm/acinclude.m4 @@ -40,6 +40,8 @@ AC_DEFUN([RTEMS_CHECK_BSPDIR], AC_CONFIG_SUBDIRS([stm32f4]);; tms570 ) AC_CONFIG_SUBDIRS([tms570]);; + xen ) + AC_CONFIG_SUBDIRS([xen]);; xilinx-zynq ) AC_CONFIG_SUBDIRS([xilinx-zynq]);; xilinx-zynqmp ) diff --git a/c/src/lib/libbsp/arm/xen/Makefile.am b/c/src/lib/libbsp/arm/xen/Makefile.am new file mode 100644 index 0000000000..fecb665af4 --- /dev/null +++ b/c/src/lib/libbsp/arm/xen/Makefile.am @@ -0,0 +1,48 @@ +ACLOCAL_AMFLAGS = -I ../../../../aclocal + +include $(top_srcdir)/../../../../automake/compile.am +include $(top_srcdir)/../../bsp.am + +dist_project_lib_DATA = ../../../../../../bsps/arm/xen/start/bsp_specs + +noinst_PROGRAMS = + +start.$(OBJEXT): ../../../../../../bsps/arm/shared/start/start.S + $(CPPASCOMPILE) -o $@ -c $< +project_lib_DATA = start.$(OBJEXT) + +project_lib_DATA += linkcmds + +project_lib_LIBRARIES = librtemsbsp.a +librtemsbsp_a_SOURCES = + +# startup +librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspfatal-default.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspgetworkarea-default.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/xen/start/bspstart.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/xen/start/bspstarthooks.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/xen/start/bspstartmmu.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/getentropy/getentropy-cpucounter.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspreset-empty.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/start/bsp-start-memcpy.S +librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/cp15/arm-cp15-set-exception-handler.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c +# clock +librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/clock/clock-generic-timer.c +# cache +librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/cache/cache-cp15.c +# irq +librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/irq/irq-default-handler.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/irq/irq-gic.c +# console +librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/xen/console/console.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-termios-init.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/serial/arm-pl011.c +# timer +librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/btimer/btimer-stub.c + +include $(srcdir)/../../../../../../bsps/shared/irq-sources.am +include $(srcdir)/../../../../../../bsps/shared/shared-sources.am +include $(srcdir)/../../../../../../bsps/arm/xen/headers.am diff --git a/c/src/lib/libbsp/arm/xen/configure.ac b/c/src/lib/libbsp/arm/xen/configure.ac new file mode 100644 index 0000000000..effd4986bb --- /dev/null +++ b/c/src/lib/libbsp/arm/xen/configure.ac @@ -0,0 +1,59 @@ +## Process this file with autoconf to produce a configure script. + +AC_PREREQ([2.69]) +AC_INIT([rtems-c-src-lib-libbsp-arm-xen],[_RTEMS_VERSION],[https://devel.rtems.org/newticket]) +RTEMS_TOP(../../../../../..) +RTEMS_SOURCE_TOP +RTEMS_BUILD_TOP + +RTEMS_CANONICAL_TARGET_CPU +AM_INIT_AUTOMAKE([no-define nostdinc foreign 1.12.2]) +RTEMS_BSP_CONFIGURE + + + +RTEMS_BSPOPTS_SET([BSP_DATA_CACHE_ENABLED],[*qemu],[]) +RTEMS_BSPOPTS_SET([BSP_DATA_CACHE_ENABLED],[*],[1]) +RTEMS_BSPOPTS_HELP([BSP_DATA_CACHE_ENABLED],[enable data cache]) + +RTEMS_BSPOPTS_SET([BSP_INSTRUCTION_CACHE_ENABLED],[*qemu],[]) +RTEMS_BSPOPTS_SET([BSP_INSTRUCTION_CACHE_ENABLED],[*],[1]) +RTEMS_BSPOPTS_HELP([BSP_INSTRUCTION_CACHE_ENABLED],[enable instruction cache]) + +RTEMS_BSPOPTS_SET([ARM_GENERIC_TIMER_USE_VIRTUAL],[*],[1]) +RTEMS_BSPOPTS_HELP([ARM_GENERIC_TIMER_USE_VIRTUAL],[use virtual ARM generic timer]) + +RTEMS_BSPOPTS_SET([ARM_GENERIC_TIMER_UNMASK_AT_TICK],[*],[1]) +RTEMS_BSPOPTS_HELP([ARM_GENERIC_TIMER_UNMASK_AT_TICK],[unmask the timer in the tick handler, since Xen will mask the virtual timer before injecting the interrupt to the guest]) + +RTEMS_BSPOPTS_SET([BSP_START_ZIMAGE_HEADER],[*],[1]) +RTEMS_BSPOPTS_HELP([BSP_START_ZIMAGE_HEADER],[include zImage boot header]) + +RTEMS_BSPOPTS_SET([BSP_XEN_RAM_LENGTH],[*],[8M]) +RTEMS_BSPOPTS_HELP([BSP_XEN_RAM_LENGTH],[override a BSP's default RAM length]) + +RTEMS_BSPOPTS_SET([BSP_XEN_NOCACHE_LENGTH],[*],[1M]) +RTEMS_BSPOPTS_HELP([BSP_XEN_NOCACHE_LENGTH],[length of nocache RAM region]) + +GUEST_RAM_BASE="0x40000000" +GUEST_LOAD_OFFSET="0x8000" +GUEST_RAM_MMU_LENGTH="16k" + +AC_DEFUN([XEN_LINKCMD],[ +AC_ARG_VAR([$1],[$2; default $3])dnl +[$1]=[$]{[$1]:-[$3]} +]) + +XEN_LINKCMD([GUEST_RAM_BASE],[normal RAM region origin],[${GUEST_RAM_BASE}]) +XEN_LINKCMD([GUEST_RAM_LENGTH],[normal RAM region length],[${BSP_XEN_RAM_LENGTH}]) +XEN_LINKCMD([GUEST_LOAD_OFFSET],[entry point of guest],[${GUEST_LOAD_OFFSET}]) +XEN_LINKCMD([GUEST_RAM_MMU_LENGTH],[MMU region length],[${GUEST_RAM_MMU_LENGTH}]) +XEN_LINKCMD([GUEST_RAM_NOCACHE_LENGTH],[length of nocache RAM region],[${BSP_XEN_NOCACHE_LENGTH}]) + +RTEMS_BSP_CLEANUP_OPTIONS + +# Explicitly list all Makefiles here +AC_CONFIG_FILES([ +Makefile +linkcmds:../../../../../../bsps/arm/xen/start/linkcmds.in]) +AC_OUTPUT -- cgit v1.2.3