]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
kern/riscv/efi/init: Use time register in grub_efi_get_time_ms()
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Mon, 12 Aug 2024 14:13:18 +0000 (16:13 +0200)
committerDaniel Kiper <daniel.kiper@oracle.com>
Thu, 10 Oct 2024 10:13:37 +0000 (12:13 +0200)
The cycle register is not guaranteed to count at constant frequency.
If it is counting at all depends on the state the performance monitoring
unit. Use the time register to measure time.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/kern/riscv/efi/init.c

index 38795fe674189eae19ac687d33627e2d4b6428a6..0d7de4f541a0755425185240997041e8851cd6f6 100644 (file)
@@ -33,16 +33,15 @@ grub_efi_get_time_ms (void)
   grub_uint64_t tmr;
 
 #if __riscv_xlen == 64
-  asm volatile ("rdcycle %0" : "=r" (tmr));
+  asm volatile ("rdtime %0" : "=r"(tmr));
 #else
   grub_uint32_t lo, hi, tmp;
-  asm volatile (
-    "1:\n"
-    "rdcycleh %0\n"
-    "rdcycle %1\n"
-    "rdcycleh %2\n"
-    "bne %0, %2, 1b"
-    : "=&r" (hi), "=&r" (lo), "=&r" (tmp));
+  asm volatile ("1:\n"
+                "rdtimeh %0\n"
+                "rdtime %1\n"
+                "rdtimeh %2\n"
+                "bne %0, %2, 1b"
+                : "=&r" (hi), "=&r" (lo), "=&r" (tmp));
   tmr = ((grub_uint64_t)hi << 32) | lo;
 #endif