bsps/aarch64/raspberrypi: Add system timer support

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.
This commit is contained in:
Ning Yang
2024-04-16 18:19:49 +08:00
committed by Amar Takhar
parent d7447b2a5e
commit 00f0d307b4
7 changed files with 101 additions and 10 deletions

View File

@@ -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

View File

@@ -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
/** @} */
/**

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,25 @@
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: []