This commit add starthooks and MMU files for the BSP. The MMU sections include peripheral, ARM Local regs, FIQs-IRQs, Watchdog, Videocore Timer, System Timer, GIC Timer, EMMC and UART Addresses. --- bsps/aarch64/raspberrypi/start/bspstart.c | 49 ++++++++ .../aarch64/raspberrypi/start/bspstarthooks.c | 53 ++++++++ bsps/aarch64/raspberrypi/start/bspstartmmu.c | 119 ++++++++++++++++++ 3 files changed, 221 insertions(+) create mode 100644 bsps/aarch64/raspberrypi/start/bspstart.c create mode 100644 bsps/aarch64/raspberrypi/start/bspstarthooks.c create mode 100644 bsps/aarch64/raspberrypi/start/bspstartmmu.c
diff --git a/bsps/aarch64/raspberrypi/start/bspstart.c b/bsps/aarch64/raspberrypi/start/bspstart.c new file mode 100644 index 0000000000..56f52a2231 --- /dev/null +++ b/bsps/aarch64/raspberrypi/start/bspstart.c @@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup RTEMSBSPsAArch64Raspberrypi4 + * + * @brief BSP Startup + */ + +/* + * Copyright (C) 2022 Mohd Noor Aman + * + * + * 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.h> +#include <bsp/bootcard.h> +#include <bsp/irq-generic.h> +#include <bsp/linker-symbols.h> + +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/aarch64/raspberrypi/start/bspstarthooks.c b/bsps/aarch64/raspberrypi/start/bspstarthooks.c new file mode 100644 index 0000000000..fe0fe77c09 --- /dev/null +++ b/bsps/aarch64/raspberrypi/start/bspstarthooks.c @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup RTEMSBSPsAArch64Raspberrypi4 + * + * @brief BSP Startup Hooks + */ + +/* + * Copyright (C) 2022 Mohd Noor Aman + * + * + * 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.h> +#include <bsp/irq-generic.h> +#include <bsp/start.h> +#include <rtems/score/cpu.h> + +BSP_START_TEXT_SECTION void bsp_start_hook_0(void) +{ + /* Do nothing */ +} + +BSP_START_TEXT_SECTION void bsp_start_hook_1(void) +{ + AArch64_start_set_vector_base(); + bsp_start_copy_sections(); + raspberrypi_4_setup_mmu_and_cache(); + bsp_start_clear_bss(); +} \ No newline at end of file diff --git a/bsps/aarch64/raspberrypi/start/bspstartmmu.c b/bsps/aarch64/raspberrypi/start/bspstartmmu.c new file mode 100644 index 0000000000..cdf8b39d2d --- /dev/null +++ b/bsps/aarch64/raspberrypi/start/bspstartmmu.c @@ -0,0 +1,119 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup RTEMSBSPsAArch64Raspberrypi4 + * + * @brief This source file contains the default MMU tables and setup. + */ + +/* + * Copyright (C) 2022 Mohd Noor Aman + * + * + * 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.h> +#include <bsp/start.h> +#include <bsp/aarch64-mmu.h> +#include <bsp/raspberrypi.h> +#include <libcpu/mmu-vmsav8-64.h> + + +BSP_START_DATA_SECTION static const aarch64_mmu_config_entry +raspberrypi_4_mmu_config_table[] = { + AARCH64_MMU_DEFAULT_SECTIONS, + { /*RPI peripheral address*/ + .begin = (unsigned)RPI_PERIPHERAL_BASE, + .end = (unsigned)RPI_PERIPHERAL_BASE + (unsigned)RPI_PERIPHERAL_SIZE, + .flags = AARCH64_MMU_DEVICE + }, + + { /*RPI ARM local registers*/ + .begin = (unsigned)BCM2711_LOCAL_REGS_BASE, + .end = (unsigned)BCM2711_LOCAL_REGS_BASE + (unsigned)BCM2711_LOCAL_REGS_SIZE, + .flags = AARCH64_MMU_DEVICE + }, + + { /*RPI ARM_C FIQ and IRQ registers*/ + .begin = (unsigned)BCM2711_ARMC_REGS_BASE, + .end = (unsigned)BCM2711_ARMC_REGS_BASE + (unsigned)BCM2711_ARMC_REGS_SIZE, + .flags = AARCH64_MMU_DEVICE + }, + + { /*RPI Watchdog Timer*/ + .begin = (unsigned)BCM2711_PM_BASE, + .end = (unsigned)BCM2711_PM_BASE + 0x1000U, + .flags = AARCH64_MMU_DEVICE + }, + + { /*RPI GPU System Timer*/ + .begin = (unsigned)BCM2711_GPU_TIMER_BASE, + .end = (unsigned)BCM2711_GPU_TIMER_BASE + 0x200000U, + .flags = AARCH64_MMU_DEVICE + }, + + { /*RPI ARM System Timer*/ + .begin = (unsigned)BCM2711_TIMER_BASE, + .end = (unsigned)BCM2711_TIMER_BASE + 0x200000U, + .flags = AARCH64_MMU_DEVICE + }, + + { /*RPI GIC Timer*/ + .begin = 0xFF800000U, + .end = 0xFFA00000U, + .flags = AARCH64_MMU_DEVICE + }, + + { /*RPI MMC */ + .begin = 0xFE340000U, + .end = 0xFE340000U + 0x200000U, + .flags = AARCH64_MMU_DEVICE + }, + + { /*RPI UART*/ + .begin = 0xFE200000U, + .end = 0xFE200000U, + .flags = AARCH64_MMU_DEVICE + }, + +}; +/* + * Make weak and let the user override. + */ +BSP_START_TEXT_SECTION void +raspberrypi_4_setup_mmu_and_cache( void ) __attribute__ ((weak)); + +BSP_START_TEXT_SECTION void +raspberrypi_4_setup_mmu_and_cache( void ) +{ + aarch64_mmu_setup(); + + aarch64_mmu_setup_translation_table( + &raspberrypi_4_mmu_config_table[ 0 ], + RTEMS_ARRAY_SIZE( raspberrypi_4_mmu_config_table ) + ); + + aarch64_mmu_enable(); +} \ No newline at end of file -- 2.34.1 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel