[PATCH 6/7] bsp/aarch64: Starthooks and MMU Sections for Raspberry pi 4B AArch64 BSP

Kinsey Moore kinsey.moore at oarcorp.com
Thu Sep 22 13:14:58 UTC 2022


On 9/22/2022 01:20, Mohd Noor Aman wrote:
> 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*/
This is actually just the GIC CPU and Distributor interfaces. There is 
no "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,

.begin here is the same as .end which results in no additional mappings 
being generated. This is actually covered by RPI_PERIPHERAL_BASE above 
which is why it works. It covers FE000000 to FF800000 which also 
includes the MMC, BCM2711_TIMER_BASE (0xFE008400), 
BCM2711_GPU_TIMER_BASE (0xFE003000), BCM2711_PM_BASE (0xFE100000), and 
BCM2711_ARMC_REGS_BASE (0xFE00B200).

With duplicate entries removed, that leaves only 3 entries: 
RPI_PERIPHERAL_BASE, BCM2711_LOCAL_REGS_BASE, and the GIC interface.

> +    .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


More information about the devel mailing list