xref: /linux/drivers/gpu/drm/xe/abi/guc_lfd_abi.h (revision c17ee635fd3a482b2ad2bf5e269755c2eae5f25e)
17eeb0e54SZhanjun Dong /* SPDX-License-Identifier: MIT */
27eeb0e54SZhanjun Dong /*
37eeb0e54SZhanjun Dong  * Copyright © 2025 Intel Corporation
47eeb0e54SZhanjun Dong  */
57eeb0e54SZhanjun Dong 
67eeb0e54SZhanjun Dong #ifndef _ABI_GUC_LFD_ABI_H_
77eeb0e54SZhanjun Dong #define _ABI_GUC_LFD_ABI_H_
87eeb0e54SZhanjun Dong 
97eeb0e54SZhanjun Dong #include <linux/types.h>
107eeb0e54SZhanjun Dong 
117eeb0e54SZhanjun Dong #include "guc_lic_abi.h"
127eeb0e54SZhanjun Dong 
137eeb0e54SZhanjun Dong /* The current major version of GuC-Log-File format. */
147eeb0e54SZhanjun Dong #define GUC_LFD_FORMAT_VERSION_MAJOR		0x0001
157eeb0e54SZhanjun Dong /* The current minor version of GuC-Log-File format. */
167eeb0e54SZhanjun Dong #define GUC_LFD_FORMAT_VERSION_MINOR		0x0000
177eeb0e54SZhanjun Dong 
187eeb0e54SZhanjun Dong /** enum guc_lfd_type - Log format descriptor type */
197eeb0e54SZhanjun Dong enum guc_lfd_type {
207eeb0e54SZhanjun Dong 	/**
217eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_FW_REQUIRED_RANGE_START: Start of range for
227eeb0e54SZhanjun Dong 	 * required LFDs from GuC
237eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_FW_VERSION: GuC Firmware Version structure.
247eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_GUC_DEVICE_ID: GuC microcontroller device ID.
257eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_TSC_FREQUENCY: Frequency of GuC timestamps.
267eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_GMD_ID: HW GMD ID.
277eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_BUILD_PLATFORM_ID: GuC build platform ID.
287eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_FW_REQUIRED_RANGE_END: End of range for
297eeb0e54SZhanjun Dong 	 * required LFDs from GuC
307eeb0e54SZhanjun Dong 	 */
317eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_FW_REQUIRED_RANGE_START	= 0x1,
327eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_FW_VERSION			= 0x1,
337eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_GUC_DEVICE_ID		= 0x2,
347eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_TSC_FREQUENCY		= 0x3,
357eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_GMD_ID			= 0x4,
367eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_BUILD_PLATFORM_ID		= 0x5,
377eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_FW_REQUIRED_RANGE_END	= 0x1FFF,
387eeb0e54SZhanjun Dong 
397eeb0e54SZhanjun Dong 	/**
407eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_FW_OPTIONAL_RANGE_START: Start of range for
417eeb0e54SZhanjun Dong 	 * optional LFDs from GuC
427eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_LOG_EVENTS_BUFFER: Log-event-entries buffer.
437eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_FW_CRASH_DUMP: GuC generated crash-dump blob.
447eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_FW_OPTIONAL_RANGE_END: End of range for
457eeb0e54SZhanjun Dong 	 * optional LFDs from GuC
467eeb0e54SZhanjun Dong 	 */
477eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_FW_OPTIONAL_RANGE_START	= 0x2000,
487eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_LOG_EVENTS_BUFFER		= 0x2000,
497eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_FW_CRASH_DUMP		= 0x2001,
507eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_FW_OPTIONAL_RANGE_END	= 0x3FFF,
517eeb0e54SZhanjun Dong 
527eeb0e54SZhanjun Dong 	/**
537eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_KMD_REQUIRED_RANGE_START: Start of range for
547eeb0e54SZhanjun Dong 	 * required KMD LFDs
557eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_OS_ID: An identifier for the OS.
567eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_KMD_REQUIRED_RANGE_END: End of this range for
577eeb0e54SZhanjun Dong 	 * required KMD LFDs
587eeb0e54SZhanjun Dong 	 */
597eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_KMD_REQUIRED_RANGE_START	= 0x4000,
607eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_OS_ID			= 0x4000,
617eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_KMD_REQUIRED_RANGE_END	= 0x5FFF,
627eeb0e54SZhanjun Dong 
637eeb0e54SZhanjun Dong 	/**
647eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_KMD_OPTIONAL_RANGE_START: Start of range for
657eeb0e54SZhanjun Dong 	 * optional KMD LFDs
667eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_BINARY_SCHEMA_FORMAT: Binary representation of
677eeb0e54SZhanjun Dong 	 * GuC log-events schema.
687eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_HOST_COMMENT: ASCII string containing comments
697eeb0e54SZhanjun Dong 	 * from the host/KMD.
707eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_TIMESTAMP_ANCHOR: A timestamp anchor, to convert
717eeb0e54SZhanjun Dong 	 * between host and GuC timestamp.
727eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_TIMESTAMP_ANCHOR_CONFIG: Timestamp anchor
737eeb0e54SZhanjun Dong 	 * configuration, definition of timestamp frequency and bit width.
747eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_KMD_OPTIONAL_RANGE_END: End of this range for
757eeb0e54SZhanjun Dong 	 * optional KMD LFDs
767eeb0e54SZhanjun Dong 	 */
777eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_KMD_OPTIONAL_RANGE_START	= 0x6000,
787eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_BINARY_SCHEMA_FORMAT	= 0x6000,
797eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_HOST_COMMENT		= 0x6001,
807eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_TIMESTAMP_ANCHOR		= 0x6002,
817eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_TIMESTAMP_ANCHOR_CONFIG	= 0x6003,
827eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_KMD_OPTIONAL_RANGE_END	= 0x7FFF,
837eeb0e54SZhanjun Dong 
847eeb0e54SZhanjun Dong 	/*
857eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_RESERVED_RANGE_START: Start of reserved range
867eeb0e54SZhanjun Dong 	 * @GUC_LFD_TYPE_RESERVED_RANGE_END: End of reserved range
877eeb0e54SZhanjun Dong 	 */
887eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_RESERVED_RANGE_START	= 0x8000,
897eeb0e54SZhanjun Dong 	GUC_LFD_TYPE_RESERVED_RANGE_END		= 0xFFFF,
907eeb0e54SZhanjun Dong };
917eeb0e54SZhanjun Dong 
927eeb0e54SZhanjun Dong /** enum guc_lfd_os_type - OS Type LFD-ID */
937eeb0e54SZhanjun Dong enum guc_lfd_os_type {
947eeb0e54SZhanjun Dong 	/** @GUC_LFD_OS_TYPE_OSID_WIN: Windows OS */
957eeb0e54SZhanjun Dong 	GUC_LFD_OS_TYPE_OSID_WIN = 0x1,
967eeb0e54SZhanjun Dong 	/** @GUC_LFD_OS_TYPE_OSID_LIN: Linux OS */
977eeb0e54SZhanjun Dong 	GUC_LFD_OS_TYPE_OSID_LIN = 0x2,
987eeb0e54SZhanjun Dong 	/** @GUC_LFD_OS_TYPE_OSID_VMW: VMWare OS */
997eeb0e54SZhanjun Dong 	GUC_LFD_OS_TYPE_OSID_VMW = 0x3,
1007eeb0e54SZhanjun Dong 	/** @GUC_LFD_OS_TYPE_OSID_OTHER: Other */
1017eeb0e54SZhanjun Dong 	GUC_LFD_OS_TYPE_OSID_OTHER = 0x4,
1027eeb0e54SZhanjun Dong };
1037eeb0e54SZhanjun Dong 
1047eeb0e54SZhanjun Dong /** struct guc_lfd_data - A generic header structure for all LFD blocks */
1057eeb0e54SZhanjun Dong struct guc_lfd_data {
1067eeb0e54SZhanjun Dong 	/** @header: A 32 bits dword, contains multiple bit fields */
1077eeb0e54SZhanjun Dong 	u32 header;
1087eeb0e54SZhanjun Dong 	/* LFD type. See guc_lfd_type */
1097eeb0e54SZhanjun Dong #define GUC_LFD_DATA_HEADER_MASK_TYPE		GENMASK(31, 16)
1107eeb0e54SZhanjun Dong #define GUC_LFD_DATA_HEADER_MASK_MAGIC		GENMASK(15, 0)
1117eeb0e54SZhanjun Dong 
1127eeb0e54SZhanjun Dong 	/** @data_count: Number of dwords the `data` field contains. */
1137eeb0e54SZhanjun Dong 	u32 data_count;
1147eeb0e54SZhanjun Dong 	/** @data: Data defined by GUC_LFD_DATA_HEADER_MASK_TYPE */
1157eeb0e54SZhanjun Dong 	u32 data[] __counted_by(data_count);
1167eeb0e54SZhanjun Dong } __packed;
1177eeb0e54SZhanjun Dong 
1187eeb0e54SZhanjun Dong /**
1197eeb0e54SZhanjun Dong  * struct guc_lfd_data_log_events_buf - GuC Log Events Buffer.
1207eeb0e54SZhanjun Dong  * This is optional fw LFD data
1217eeb0e54SZhanjun Dong  */
1227eeb0e54SZhanjun Dong struct guc_lfd_data_log_events_buf {
1237eeb0e54SZhanjun Dong 	/**
1247eeb0e54SZhanjun Dong 	 * @log_events_format_version: version of GuC log format of buffer
1257eeb0e54SZhanjun Dong 	 */
1267eeb0e54SZhanjun Dong 	u32 log_events_format_version;
1277eeb0e54SZhanjun Dong 	/**
1287eeb0e54SZhanjun Dong 	 * @log_event: The log event data.
1297eeb0e54SZhanjun Dong 	 * Size in dwords is LFD block size - 1.
1307eeb0e54SZhanjun Dong 	 */
1317eeb0e54SZhanjun Dong 	u32 log_event[];
1327eeb0e54SZhanjun Dong } __packed;
1337eeb0e54SZhanjun Dong 
1347eeb0e54SZhanjun Dong /** struct guc_lfd_data_os_info - OS Version Information. */
1357eeb0e54SZhanjun Dong struct guc_lfd_data_os_info {
1367eeb0e54SZhanjun Dong 	/**
1377eeb0e54SZhanjun Dong 	 * @os_id: enum values to identify the OS brand.
1387eeb0e54SZhanjun Dong 	 * See guc_lfd_os_type for the range of types
1397eeb0e54SZhanjun Dong 	 */
1407eeb0e54SZhanjun Dong 	u32 os_id;
1417eeb0e54SZhanjun Dong 	/**
1427eeb0e54SZhanjun Dong 	 * @build_version: ASCII string containing OS build version
1437eeb0e54SZhanjun Dong 	 * information based on os_id. String is padded with null
1447eeb0e54SZhanjun Dong 	 * characters to ensure its DWORD aligned.
1457eeb0e54SZhanjun Dong 	 * Size in dwords is LFD block size - 1.
1467eeb0e54SZhanjun Dong 	 */
1477eeb0e54SZhanjun Dong 	char build_version[];
1487eeb0e54SZhanjun Dong } __packed;
1497eeb0e54SZhanjun Dong 
1507eeb0e54SZhanjun Dong /**
151*4cdcfa64SJani Nikula  * struct guc_lfd_file_header - Header of GuC Log Streaming-LFD-File Format.
1527eeb0e54SZhanjun Dong  * This structure encapsulates the layout of the guc-log-file format
1537eeb0e54SZhanjun Dong  */
1547eeb0e54SZhanjun Dong struct guc_lfd_file_header {
1557eeb0e54SZhanjun Dong 	/**
1567eeb0e54SZhanjun Dong 	 * @magic: A magic number set by producer of a GuC log file to
1577eeb0e54SZhanjun Dong 	 * identify that file is a valid guc-log-file containing a stream
1587eeb0e54SZhanjun Dong 	 * of LFDs.
1597eeb0e54SZhanjun Dong 	 */
1607eeb0e54SZhanjun Dong 	u64 magic;
1617eeb0e54SZhanjun Dong 	/** @version: Version of this file format layout */
1627eeb0e54SZhanjun Dong 	u32 version;
1637eeb0e54SZhanjun Dong #define GUC_LFD_FILE_HEADER_VERSION_MASK_MAJOR	GENMASK(31, 16)
1647eeb0e54SZhanjun Dong #define GUC_LFD_FILE_HEADER_VERSION_MASK_MINOR	GENMASK(15, 0)
1657eeb0e54SZhanjun Dong 
166*4cdcfa64SJani Nikula 	/** @stream: A stream of one or more guc_lfd_data LFD blocks */
1677eeb0e54SZhanjun Dong 	u32 stream[];
1687eeb0e54SZhanjun Dong } __packed;
1697eeb0e54SZhanjun Dong 
1707eeb0e54SZhanjun Dong #endif
171