]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-boot: time measurements for the ARM64
authorMax Resch <resch.max@gmail.com>
Wed, 4 Aug 2021 15:23:27 +0000 (17:23 +0200)
committerLuca Boccassi <luca.boccassi@gmail.com>
Fri, 6 Aug 2021 12:40:00 +0000 (13:40 +0100)
This adds assembly to read the platform timer from the CP15 coprocessor
register `cntpct_el0` and the frequency from `cntfrq_el0`

src/boot/efi/util.c

index 6f4e5933d30506ffdd873f417ef73be56bddcba2..0ca4d17b37110ced3b996876766401f7f0183263 100644 (file)
@@ -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;