]> git.dujemihanovic.xyz Git - u-boot.git/commit
armv8: generic_timer: Use event stream for udelay
authorPeter Hoyes <Peter.Hoyes@arm.com>
Wed, 1 May 2024 08:16:33 +0000 (09:16 +0100)
committerTom Rini <trini@konsulko.com>
Mon, 13 May 2024 22:51:14 +0000 (16:51 -0600)
commitebc84d7b60c1ed3398e9f600fe3dc8406500bd35
tree468a362325dddfdb75c77c3674634d537cf81447
parentb18a3c183d20812933d192d4b0d622b11ef2bf29
armv8: generic_timer: Use event stream for udelay

Polling cntpct_el0 in a tight loop for delays is inefficient.
This is particularly apparent on Arm FVPs, which do not simulate
real time, meaning that a 1s sleep can take a couple of orders
of magnitude longer to execute in wall time.

If running at EL2 or above (where CNTHCTL_EL2 is available), enable
the cntpct_el0 event stream temporarily and use wfe to implement
the delay more efficiently. The event period is chosen as a
trade-off between efficiency and the fact that Arm FVPs do not
typically simulate real time.

This is only implemented for Armv8 boards, where an architectural
timer exists, and only enabled by default for the ARCH_VEXPRESS64
board family.

Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
arch/arm/cpu/armv8/Kconfig
arch/arm/cpu/armv8/generic_timer.c
arch/arm/include/asm/system.h