History

drm/panthor: Add DEV_QUERY_TIMESTAMP_INFO dev query

Expose timestamp information supported by the GPU with a new device query. Mali uses an external timer as GPU system time. On ARM, this is wired to the generic arch timer so we wire cntfrq_el0 as device frequency. This new uAPI will be used in Mesa to implement timestamp queries and VK_KHR_calibrated_timestamps. Since this extends the uAPI and because userland needs a way to advertise those features conditionally, this also bumps the driver minor version. v2: - Rewrote to use GPU timestamp register - Added timestamp_offset to drm_panthor_timestamp_info - Add missing include for arch_timer_get_cntfrq - Rework commit message v3: - Add panthor_gpu_read_64bit_counter - Change panthor_gpu_read_timestamp to use panthor_gpu_read_64bit_counter v4: - Fix multiple typos in uAPI documentation - Mention behavior when the timestamp frequency is unknown - Use u64 instead of unsigned long long for panthor_gpu_read_timestamp - Apply r-b from Mihail

Mary Guillemard committed 2 years ago

Commit a7780281 parent c6430a84 files · +115 −1Browse files

Showing the changes to include/uapi (1 of 4 files). Show all

Unified · Split

include/uapi/drm/panthor_drm.h+22−0
@@ -260,6 +260,9 @@ enum drm_panthor_dev_query_type { · 259 unmodified lines
260 260
261 /** @DRM_PANTHOR_DEV_QUERY_CSIF_INFO: Query command-stream interface information. */261 /** @DRM_PANTHOR_DEV_QUERY_CSIF_INFO: Query command-stream interface information. */
262 DRM_PANTHOR_DEV_QUERY_CSIF_INFO,262 DRM_PANTHOR_DEV_QUERY_CSIF_INFO,
263
264 /** @DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO: Query timestamp information. */
265 DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO,
263};266};
264 267
265/**268/**
@@ -377,6 +380,25 @@ struct drm_panthor_csif_info { · 111 unmodified lines
377 __u32 pad;380 __u32 pad;
378};381};
379 382
383/**
384 * struct drm_panthor_timestamp_info - Timestamp information
385 *
386 * Structure grouping all queryable information relating to the GPU timestamp.
387 */
388struct drm_panthor_timestamp_info {
389 /**
390 * @timestamp_frequency: The frequency of the timestamp timer or 0 if
391 * unknown.
392 */
393 __u64 timestamp_frequency;
394
395 /** @current_timestamp: The current timestamp. */
396 __u64 current_timestamp;
397
398 /** @timestamp_offset: The offset of the timestamp timer. */
399 __u64 timestamp_offset;
400};
401
380/**402/**
381 * struct drm_panthor_dev_query - Arguments passed to DRM_PANTHOR_IOCTL_DEV_QUERY403 * struct drm_panthor_dev_query - Arguments passed to DRM_PANTHOR_IOCTL_DEV_QUERY
382 */404 */