From: Max Resch Date: Wed, 4 Aug 2021 15:23:27 +0000 (+0200) Subject: sd-boot: time measurements for the ARM64 X-Git-Tag: v250-rc1~872 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3c79a56d53a722691c634a9d192dad9b58e182c9;p=thirdparty%2Fsystemd.git sd-boot: time measurements for the ARM64 This adds assembly to read the platform timer from the CP15 coprocessor register `cntpct_el0` and the frequency from `cntfrq_el0` --- diff --git a/src/boot/efi/util.c b/src/boot/efi/util.c index 6f4e5933d30..0ca4d17b371 100644 --- a/src/boot/efi/util.c +++ b/src/boot/efi/util.c @@ -17,6 +17,12 @@ UINT64 ticks_read(VOID) { __asm__ volatile ("rdtsc" : "=A" (val)); return val; } +#elif defined(__aarch64__) +UINT64 ticks_read(VOID) { + UINT64 val; + __asm__ volatile ("mrs %0, cntpct_el0" : "=r" (val)); + return val; +} #else UINT64 ticks_read(VOID) { UINT64 val = 1; @@ -24,6 +30,13 @@ UINT64 ticks_read(VOID) { } #endif +#if defined(__aarch64__) +UINT64 ticks_freq(VOID) { + UINT64 freq; + __asm__ volatile ("mrs %0, cntfrq_el0": "=r" (freq)); + return freq; +} +#else /* count TSC ticks during a millisecond delay */ UINT64 ticks_freq(VOID) { UINT64 ticks_start, ticks_end; @@ -34,6 +47,7 @@ UINT64 ticks_freq(VOID) { return (ticks_end - ticks_start) * 1000UL; } +#endif UINT64 time_usec(VOID) { UINT64 ticks;