[PATCH] bsps/aarch64/raspberrypi: Add system timer support
Kinsey Moore
kinsey.moore at oarcorp.com
Thu Apr 11 15:22:46 UTC 2024
I couldn't get this patch to apply. Are you sure it came from the right
branch and has no merge commits ahead of it?
Kinsey
On Wed, Apr 10, 2024 at 9:24 AM Ning Yang <yangn0 at qq.com> wrote:
> The clock from the ARM timer is derived from the system clock. This clock
> can change dynamically e.g. if the system goes into reduced power or in low
> power mode. Thus the clock speed adapts to the overall system performance
> capabilities. For accurate timing it is recommended to use the system
> timers.
>
> if BSP_CLOCK_USE_SYSTEMTIMER = 1, use the System Timer, otherwise use the
> ARM Timer.
> ---
> .../aarch64/raspberrypi/include/bsp/bcm2711.h | 28 ++++++++++++
> .../raspberrypi/include/bsp/raspberrypi.h | 43 +++++++++++++++++++
> bsps/aarch64/raspberrypi/start/bspstartmmu.c | 8 ++++
> spec/build/bsps/aarch64/raspberrypi/bsp4b.yml | 1 +
> spec/build/bsps/aarch64/raspberrypi/obj.yml | 3 ++
> .../bsps/aarch64/raspberrypi/objclock.yml | 4 +-
> .../aarch64/raspberrypi/objsystemtimer.yml | 22 ++++++++++
> .../aarch64/raspberrypi/optsystemtimer.yml | 24 +++++++++++
> 8 files changed, 132 insertions(+), 1 deletion(-)
> create mode 100644 bsps/aarch64/raspberrypi/include/bsp/raspberrypi.h
> create mode 100644 spec/build/bsps/aarch64/raspberrypi/objsystemtimer.yml
> create mode 100644 spec/build/bsps/aarch64/raspberrypi/optsystemtimer.yml
>
> diff --git a/bsps/aarch64/raspberrypi/include/bsp/bcm2711.h
> b/bsps/aarch64/raspberrypi/include/bsp/bcm2711.h
> index e6c77fa025..8707582ebb 100644
> --- a/bsps/aarch64/raspberrypi/include/bsp/bcm2711.h
> +++ b/bsps/aarch64/raspberrypi/include/bsp/bcm2711.h
> @@ -11,6 +11,7 @@
> /*
> * Copyright (C) 2022 Mohd Noor Aman
> * Copyright (C) 2023 Utkarsh Verma
> + * Copyright (C) 2024 Ning Yang
> *
> *
> * Redistribution and use in source and binary forms, with or without
> @@ -91,6 +92,27 @@
> #define BCM2711_UART5_BASE (BCM2711_PL011_BASE + 0xa00)
> #define BCM2711_UART5_SIZE BCM2711_PL011_DEVICE_SIZE
>
> +/* System Timer */
> +/**
> + * NOTE: The GPU uses Compare registers 0 and 2 for
> + * it's own RTOS. 1 and 3 are available for use in
> + * RTEMS.
> + */
> +#define BCM2835_GPU_TIMER_BASE (BCM2711_PERIPHERAL_BASE + 0x2000000+
> 0x3000)
> +#define BCM2835_GPU_TIMER_SIZE 0x1C
> +
> +#define BCM2835_GPU_TIMER_CS (BCM2835_GPU_TIMER_BASE + 0x00)
> +#define BCM2835_GPU_TIMER_CS_M0 0x00000001
> +#define BCM2835_GPU_TIMER_CS_M1 0x00000002
> +#define BCM2835_GPU_TIMER_CS_M2 0x00000004
> +#define BCM2835_GPU_TIMER_CS_M3 0x00000008
> +#define BCM2835_GPU_TIMER_CLO (BCM2835_GPU_TIMER_BASE + 0x04)
> +#define BCM2835_GPU_TIMER_CHI (BCM2835_GPU_TIMER_BASE + 0x08)
> +#define BCM2835_GPU_TIMER_C0 (BCM2835_GPU_TIMER_BASE + 0x0C)
> +#define BCM2835_GPU_TIMER_C1 (BCM2835_GPU_TIMER_BASE + 0x10)
> +#define BCM2835_GPU_TIMER_C2 (BCM2835_GPU_TIMER_BASE + 0x14)
> +#define BCM2835_GPU_TIMER_C3 (BCM2835_GPU_TIMER_BASE + 0x18)
> +
> /* ARM Local */
> #define BCM2711_ARM_LOCAL_BASE 0xff800000LL
> #define BCM2711_ARM_LOCAL_SIZE 0x800000
> @@ -114,4 +136,10 @@
> #define BCM2711_IRQ_AUX (BCM2711_IRQ_VC_PERIPHERAL_BASE +
> 29)
> #define BCM2711_IRQ_PL011_UART (BCM2711_IRQ_VC_PERIPHERAL_BASE +
> 57)
>
> +/* Interrupt Vectors: System Timer */
> +#define BCM2835_IRQ_ID_GPU_TIMER_M0 (BCM2711_IRQ_VC_PERIPHERAL_BASE +
> 0)
> +#define BCM2835_IRQ_ID_GPU_TIMER_M1 (BCM2711_IRQ_VC_PERIPHERAL_BASE +
> 1)
> +#define BCM2835_IRQ_ID_GPU_TIMER_M2 (BCM2711_IRQ_VC_PERIPHERAL_BASE +
> 2)
> +#define BCM2835_IRQ_ID_GPU_TIMER_M3 (BCM2711_IRQ_VC_PERIPHERAL_BASE +
> 3)
> +
> #endif /* LIBBSP_AARCH64_RASPBERRYPI_BSP_BCM2711_H */
> diff --git a/bsps/aarch64/raspberrypi/include/bsp/raspberrypi.h
> b/bsps/aarch64/raspberrypi/include/bsp/raspberrypi.h
> new file mode 100644
> index 0000000000..2e1c673bfb
> --- /dev/null
> +++ b/bsps/aarch64/raspberrypi/include/bsp/raspberrypi.h
> @@ -0,0 +1,43 @@
> +/* SPDX-License-Identifier: BSD-2-Clause */
> +
> +/**
> + * @file
> + *
> + * @ingroup RTEMSBSPsAArch64RaspberryPi
> + *
> + * @brief RaspberryPi shared Register Definitions
> + */
> +
> +/*
> + * Copyright (C) 2024 Ning Yang
> + *
> + *
> + * 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_AARCH64_RASPBERRYPI_RASPBERRYPI_H
> +#define LIBBSP_AARCH64_RASPBERRYPI_RASPBERRYPI_H
> +
> +#include <bsp/bcm2711.h>
> +#define BCM2835_REG(addr) *(volatile uint32_t*)(addr)
> +
> +#endif /* LIBBSP_AARCH64_RASPBERRYPI_RASPBERRYPI_H */
> \ No newline at end of file
> diff --git a/bsps/aarch64/raspberrypi/start/bspstartmmu.c
> b/bsps/aarch64/raspberrypi/start/bspstartmmu.c
> index d5d1381357..eb59b8f31b 100644
> --- a/bsps/aarch64/raspberrypi/start/bspstartmmu.c
> +++ b/bsps/aarch64/raspberrypi/start/bspstartmmu.c
> @@ -11,6 +11,7 @@
> /*
> * Copyright (C) 2022 Mohd Noor Aman
> * Copyright (C) 2023 Utkarsh Verma
> + * Copyright (C) 2024 Ning Yang
> *
> *
> * Redistribution and use in source and binary forms, with or without
> @@ -45,6 +46,7 @@
> #include "bsp/irq.h"
> #include "bsp/mbox.h"
> #include "bsp/rpi-gpio.h"
> +#include "bsp/bcm2711.h"
>
> #define CONSOLE_DEVICE_MMU_CONFIG(_port, _file, base, size, ...) \
> {.begin = base, .end = base + size, .flags = AARCH64_MMU_DEVICE},
> @@ -52,6 +54,12 @@
> BSP_START_DATA_SECTION static const aarch64_mmu_config_entry
> bsp_mmu_config_table[] = {
> AARCH64_MMU_DEFAULT_SECTIONS,
> + {
> + /* System Timer */
> + .begin = BCM2835_GPU_TIMER_BASE,
> + .end = BCM2835_GPU_TIMER_BASE + BCM2835_GPU_TIMER_SIZE,
> + .flags = AARCH64_MMU_DEVICE,
> + },
>
> /* clang-format off */
> CONSOLE_DEVICES(CONSOLE_DEVICE_MMU_CONFIG)
> diff --git a/spec/build/bsps/aarch64/raspberrypi/bsp4b.yml
> b/spec/build/bsps/aarch64/raspberrypi/bsp4b.yml
> index 4347235208..fd1f1ab33f 100644
> --- a/spec/build/bsps/aarch64/raspberrypi/bsp4b.yml
> +++ b/spec/build/bsps/aarch64/raspberrypi/bsp4b.yml
> @@ -17,6 +17,7 @@ includes: []
> install:
> - destination: ${BSP_INCLUDEDIR}/bsp
> source:
> + - bsps/aarch64/raspberrypi/include/bsp/raspberrypi.h
> - bsps/aarch64/raspberrypi/include/bsp/bcm2711.h
>
> source: []
> diff --git a/spec/build/bsps/aarch64/raspberrypi/obj.yml
> b/spec/build/bsps/aarch64/raspberrypi/obj.yml
> index 4a320336b7..9692cc955f 100644
> --- a/spec/build/bsps/aarch64/raspberrypi/obj.yml
> +++ b/spec/build/bsps/aarch64/raspberrypi/obj.yml
> @@ -2,6 +2,7 @@ SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
> copyrights:
> - Copyright (C) 2022 Mohd Noor Aman
> - Copyright (C) 2023 Utkarsh Verma
> + - Copyright (C) 2024 Ning Yang
>
> type: build
> enabled-by: true
> @@ -31,6 +32,8 @@ links:
> uid: objcache
> - role: build-dependency
> uid: objclock
> + - role: build-dependency
> + uid: objsystemtimer
> - role: build-dependency
> uid: objconsole
> - role: build-dependency
> diff --git a/spec/build/bsps/aarch64/raspberrypi/objclock.yml
> b/spec/build/bsps/aarch64/raspberrypi/objclock.yml
> index 550df8029a..317919026e 100644
> --- a/spec/build/bsps/aarch64/raspberrypi/objclock.yml
> +++ b/spec/build/bsps/aarch64/raspberrypi/objclock.yml
> @@ -2,9 +2,11 @@ SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
> copyrights:
> - Copyright (C) 2022 Mohd Noor Aman
> - Copyright (C) 2023 Utkarsh Verma
> + - Copyright (C) 2024 Ning Yang
>
> type: build
> -enabled-by: true
> +enabled-by:
> + not: BSP_CLOCK_USE_SYSTEMTIMER
>
> build-type: objects
> cflags: []
> diff --git a/spec/build/bsps/aarch64/raspberrypi/objsystemtimer.yml
> b/spec/build/bsps/aarch64/raspberrypi/objsystemtimer.yml
> new file mode 100644
> index 0000000000..7fc4118d0e
> --- /dev/null
> +++ b/spec/build/bsps/aarch64/raspberrypi/objsystemtimer.yml
> @@ -0,0 +1,22 @@
> +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
> +copyrights:
> + - Copyright (C) 2024 Ning Yang
> +
> +type: build
> +enabled-by:
> +- BSP_CLOCK_USE_SYSTEMTIMER
> +
> +build-type: objects
> +cflags: []
> +cppflags: []
> +cxxflags: []
> +includes: []
> +install: []
> +
> +source:
> + - bsps/shared/dev/clock/bcm2835-system-timer.c
> + - bsps/shared/dev/cpucounter/cpucounterfrequency.c
> + - bsps/shared/dev/cpucounter/cpucounterread.c
> + - bsps/shared/dev/getentropy/getentropy-cpucounter.c
> +
> +links: []
> \ No newline at end of file
> diff --git a/spec/build/bsps/aarch64/raspberrypi/optsystemtimer.yml
> b/spec/build/bsps/aarch64/raspberrypi/optsystemtimer.yml
> new file mode 100644
> index 0000000000..1cceebf22b
> --- /dev/null
> +++ b/spec/build/bsps/aarch64/raspberrypi/optsystemtimer.yml
> @@ -0,0 +1,24 @@
> +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
> +copyrights:
> + - Copyright (C) 2024 Ning Yang
> +
> +type: build
> +build-type: option
> +
> +enabled-by: true
> +name: BSP_CLOCK_USE_SYSTEMTIMER
> +description: |
> + The clock from the ARM timer is derived from the system clock. This
> clock can change dynamically e.g. if the system
> + goes into reduced power or in low power mode. Thus the clock speed
> adapts to the overall system performance
> + capabilities. For accurate timing it is recommended to use the system
> timers.
> +
> +actions:
> + - get-boolean: null
> + - define-condition: null
> + - env-enable: null
> +default:
> + - enabled-by:
> + - aarch64/raspberrypi4b
> + value: false
> +
> +links: []
> \ No newline at end of file
> --
> 2.34.1
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20240411/ecc0e3f0/attachment-0001.htm>
More information about the devel
mailing list