[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