[PATCH] bsps/aarch64/raspberrypi: Add system timer support
Kinsey Moore
kinsey.moore at oarcorp.com
Wed Apr 24 21:43:00 UTC 2024
Looks good, thanks!
Kinsey
On Tue, Apr 16, 2024 at 5:20 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.
> ---
> bsps/aarch64/raspberrypi/include/bsp/irq.h | 14 ++++++---
> .../raspberrypi/include/bsp/raspberrypi.h | 9 ++++++
> spec/build/bsps/aarch64/grp.yml | 3 --
> .../aarch64/raspberrypi/bspraspberrypi4.yml | 6 ++--
> .../bsps/aarch64/raspberrypi/objclock.yml | 31 +++++++++++++++++++
> .../aarch64/raspberrypi/objsystemtimer.yml | 23 ++++++++++++++
> .../aarch64/raspberrypi/optsystemtimer.yml | 24 ++++++++++++++
> 7 files changed, 100 insertions(+), 10 deletions(-)
> create mode 100644 spec/build/bsps/aarch64/raspberrypi/objclock.yml
> 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/irq.h
> b/bsps/aarch64/raspberrypi/include/bsp/irq.h
> index 1ff6ae80de..d493e83707 100644
> --- a/bsps/aarch64/raspberrypi/include/bsp/irq.h
> +++ b/bsps/aarch64/raspberrypi/include/bsp/irq.h
> @@ -9,6 +9,7 @@
> /**
> * Copyright (c) 2013 Alan Cudmore
> * Copyright (c) 2022 Mohd Noor Aman
> + * Copyright (c) 2024 Ning Yang
> *
> * The license and distribution terms for this file may be
> * found in the file LICENSE in this distribution or at
> @@ -33,15 +34,18 @@
> * @brief Interrupt support.
> */
>
> -#define BCM2835_INTC_TOTAL_IRQ (64 + 8)
> +#define BCM2835_INTC_TOTAL_IRQ 216
>
> #define BCM2835_IRQ_SET1_MIN 0
> #define BCM2835_IRQ_SET2_MIN 32
>
> -#define BCM2835_IRQ_ID_GPU_TIMER_M0 0
> -#define BCM2835_IRQ_ID_GPU_TIMER_M1 1
> -#define BCM2835_IRQ_ID_GPU_TIMER_M2 2
> -#define BCM2835_IRQ_ID_GPU_TIMER_M3 3
> +#define BCM2711_IRQ_VC_PERIPHERAL_BASE 96
> +
> +/* 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)
>
> #define BCM2835_IRQ_ID_USB 9
> #define BCM2835_IRQ_ID_AUX 29
> diff --git a/bsps/aarch64/raspberrypi/include/bsp/raspberrypi.h
> b/bsps/aarch64/raspberrypi/include/bsp/raspberrypi.h
> index 55dd9ed1e9..f185d1df57 100644
> --- a/bsps/aarch64/raspberrypi/include/bsp/raspberrypi.h
> +++ b/bsps/aarch64/raspberrypi/include/bsp/raspberrypi.h
> @@ -8,6 +8,7 @@
>
> /*
> * Copyright (c) 2022 Mohd Noor Aman
> + * Copyright (c) 2024 Ning Yang
> *
> * The license and distribution terms for this file may be
> * found in the file LICENSE in this distribution or at
> @@ -44,6 +45,7 @@
>
> #define BCM2711_REG(x) (*(volatile uint64_t *)(x))
> #define BCM2711_BIT(n) (1 << (n))
> +#define BCM2835_REG(addr) (*(volatile uint32_t*)(addr))
>
> /** @} */
>
> @@ -198,6 +200,13 @@
> #define BCM2711_GPU_TIMER_C2 (BCM2711_GPU_TIMER_BASE + 0x14)
> #define BCM2711_GPU_TIMER_C3 (BCM2711_GPU_TIMER_BASE + 0x18)
>
> +/**
> + * NOTE: compatible with the BCM2835 system timer
> + */
> +#define BCM2835_GPU_TIMER_CS_M3 BCM2711_GPU_TIMER_CS_M3
> +#define BCM2835_GPU_TIMER_C3 BCM2711_GPU_TIMER_C3
> +#define BCM2835_GPU_TIMER_CLO BCM2711_GPU_TIMER_CLO
> +#define BCM2835_GPU_TIMER_CS BCM2711_GPU_TIMER_CS
> /** @} */
>
> /**
> diff --git a/spec/build/bsps/aarch64/grp.yml
> b/spec/build/bsps/aarch64/grp.yml
> index 9428fb9435..8f40a9952e 100644
> --- a/spec/build/bsps/aarch64/grp.yml
> +++ b/spec/build/bsps/aarch64/grp.yml
> @@ -12,9 +12,6 @@ install:
> source:
> - bsps/aarch64/include/bsp/linker-symbols.h
> - bsps/aarch64/include/bsp/start.h
> -- destination: ${BSP_INCLUDEDIR}/dev/clock
> - source:
> - - bsps/include/dev/clock/arm-generic-timer.h
> - destination: ${BSP_INCLUDEDIR}/dev/irq
> source:
> - bsps/aarch64/include/dev/irq/arm-gic-arch.h
> diff --git a/spec/build/bsps/aarch64/raspberrypi/bspraspberrypi4.yml
> b/spec/build/bsps/aarch64/raspberrypi/bspraspberrypi4.yml
> index a579c094ba..7b6511a8cc 100644
> --- a/spec/build/bsps/aarch64/raspberrypi/bspraspberrypi4.yml
> +++ b/spec/build/bsps/aarch64/raspberrypi/bspraspberrypi4.yml
> @@ -19,6 +19,10 @@ install:
> - bsps/aarch64/raspberrypi/include/bsp/irq.h
> - bsps/aarch64/raspberrypi/include/bsp/raspberrypi.h
> links:
> +- role: build-dependency
> + uid: objclock
> +- role: build-dependency
> + uid: objsystemtimer
> - role: build-dependency
> uid: ../grp
> - role: build-dependency
> @@ -50,10 +54,8 @@ source:
> - bsps/aarch64/raspberrypi/start/bspstart.c
> - bsps/aarch64/raspberrypi/start/bspstarthooks.c
> - bsps/aarch64/raspberrypi/start/bspstartmmu.c
> -- bsps/aarch64/shared/clock/arm-generic-timer-aarch64.c
> - bsps/aarch64/shared/cache/cache.c
> - bsps/aarch64/shared/mmu/vmsav8-64.c
> -- bsps/shared/dev/clock/arm-generic-timer.c
> - bsps/shared/dev/irq/arm-gicv2.c
> - bsps/shared/dev/irq/arm-gicv2-get-attributes.c
> - bsps/shared/dev/serial/console-termios-init.c
> diff --git a/spec/build/bsps/aarch64/raspberrypi/objclock.yml
> b/spec/build/bsps/aarch64/raspberrypi/objclock.yml
> new file mode 100644
> index 0000000000..c4a8227bc9
> --- /dev/null
> +++ b/spec/build/bsps/aarch64/raspberrypi/objclock.yml
> @@ -0,0 +1,31 @@
> +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:
> + not: BSP_CLOCK_USE_SYSTEMTIMER
> +
> +build-type: objects
> +cflags: []
> +cppflags: []
> +cxxflags: []
> +includes: []
> +install:
> +- destination: ${BSP_INCLUDEDIR}/dev/clock
> + source:
> + - bsps/include/dev/clock/arm-generic-timer.h
> +
> +source:
> + - bsps/aarch64/shared/clock/arm-generic-timer-aarch64.c
> + - bsps/shared/dev/clock/arm-generic-timer.c
> +
> +links:
> + - role: build-dependency
> + uid: ../optgtusevirt
> + - role: build-dependency
> + uid: ../optgtuseps
> + - role: build-dependency
> + uid: optsystemtimer
> \ No newline at end of file
> diff --git a/spec/build/bsps/aarch64/raspberrypi/objsystemtimer.yml
> b/spec/build/bsps/aarch64/raspberrypi/objsystemtimer.yml
> new file mode 100644
> index 0000000000..8a91a0555a
> --- /dev/null
> +++ b/spec/build/bsps/aarch64/raspberrypi/objsystemtimer.yml
> @@ -0,0 +1,23 @@
> +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
> +
> +links:
> + - role: build-dependency
> + uid: optsystemtimer
> \ 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/20240424/f11aa8cd/attachment-0001.htm>
More information about the devel
mailing list