From 7f822a3368fcfabc7bb0f316a9eafba5a0604f43 Mon Sep 17 00:00:00 2001 From: Subrata Banik Date: Wed, 10 Jul 2024 17:29:38 +0000 Subject: [PATCH] libpayload/x86: Add x86-64 support to rdtsc() This patch adds support for x86-64 to the rdtsc() function, allowing it to correctly read the Time Stamp Counter (TSC) on both 32-bit and 64-bit x86 architectures. BUG=b:242829490, b:351851626 TEST=Builds and boots on google/rex0 and google/rex64 systems and manually verified correct TSC readings on x86-32 and x86-64 hardware. Change-Id: I0afac3db2e82a245a37c2e5cf2302bf1dad62c01 Signed-off-by: Subrata Banik Reviewed-on: https://review.coreboot.org/c/coreboot/+/83414 Tested-by: build bot (Jenkins) Reviewed-by: Julius Werner --- payloads/libpayload/include/x86/arch/rdtsc.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/payloads/libpayload/include/x86/arch/rdtsc.h b/payloads/libpayload/include/x86/arch/rdtsc.h index 41ab24a9c7..2c92a9f4d4 100644 --- a/payloads/libpayload/include/x86/arch/rdtsc.h +++ b/payloads/libpayload/include/x86/arch/rdtsc.h @@ -33,9 +33,9 @@ static u64 rdtsc(void) { - u64 val; - __asm__ __volatile__ ("rdtsc" : "=A" (val)); - return val; + u32 lo, hi; + __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi)); + return (u64)hi << 32 | lo; } #endif