From: Ryan Zhang <[email protected]>

The first read of GPU_TIMESTAMP after the GPU has been idle can return a
value that lags the real counter, while a read issued immediately after is
accurate.

Userspace correlates this timestamp with the host clock, so a stale value
shows up as skew between the device and host time domains and makes
dEQP-VK.pipeline.monolithic.timestamp.calibrated.calibration_test fail
whenever a query happens to hit a large first-read error.

Signed-off-by: Ryan Zhang <[email protected]>
---
 drivers/gpu/drm/panthor/panthor_drv.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/gpu/drm/panthor/panthor_drv.c 
b/drivers/gpu/drm/panthor/panthor_drv.c
index 720bf889096d..956a147dc282 100644
--- a/drivers/gpu/drm/panthor/panthor_drv.c
+++ b/drivers/gpu/drm/panthor/panthor_drv.c
@@ -2,6 +2,7 @@
 /* Copyright 2018 Marty E. Plummer <[email protected]> */
 /* Copyright 2019 Linaro, Ltd., Rob Herring <[email protected]> */
 /* Copyright 2019 Collabora ltd. */
+/* Copyright 2026 NXP */
 
 #ifdef CONFIG_ARM_ARCH_TIMER
 #include <asm/arch_timer.h>
@@ -772,6 +773,10 @@ static int panthor_query_timestamp_info(struct 
panthor_device *ptdev,
 #else
        arg->timestamp_frequency = 0;
 #endif
+
+       /* Dummy read to avoid stale values. */
+       gpu_read64_counter(ptdev, GPU_TIMESTAMP);
+
        arg->current_timestamp = gpu_read64_counter(ptdev, GPU_TIMESTAMP);
        arg->timestamp_offset = gpu_read64(ptdev, GPU_TIMESTAMP_OFFSET);
 
-- 
2.43.0

Reply via email to