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
