accel/amdxdna: Add query functions
Add GET_INFO ioctl to retrieve hardware information, including AIE, clock, hardware context etc. Co-developed-by: Min Ma <min.ma@amd.com> Signed-off-by: Min Ma <min.ma@amd.com> Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com> Signed-off-by: Lizhi Hou <lizhi.hou@amd.com> Signed-off-by: Jeffrey Hugo <quic_jhugo@quicinc.com> Link: https://patchwork.freedesktop.org/patch/msgid/20241118172942.2014541-11-lizhi.hou@amd.com
This commit is contained in:
@@ -32,6 +32,7 @@ enum amdxdna_drm_ioctl_id {
|
||||
DRM_AMDXDNA_GET_BO_INFO,
|
||||
DRM_AMDXDNA_SYNC_BO,
|
||||
DRM_AMDXDNA_EXEC_CMD,
|
||||
DRM_AMDXDNA_GET_INFO,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -235,6 +236,167 @@ struct amdxdna_drm_exec_cmd {
|
||||
__u64 seq;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct amdxdna_drm_query_aie_status - Query the status of the AIE hardware
|
||||
* @buffer: The user space buffer that will return the AIE status.
|
||||
* @buffer_size: The size of the user space buffer.
|
||||
* @cols_filled: A bitmap of AIE columns whose data has been returned in the buffer.
|
||||
*/
|
||||
struct amdxdna_drm_query_aie_status {
|
||||
__u64 buffer; /* out */
|
||||
__u32 buffer_size; /* in */
|
||||
__u32 cols_filled; /* out */
|
||||
};
|
||||
|
||||
/**
|
||||
* struct amdxdna_drm_query_aie_version - Query the version of the AIE hardware
|
||||
* @major: The major version number.
|
||||
* @minor: The minor version number.
|
||||
*/
|
||||
struct amdxdna_drm_query_aie_version {
|
||||
__u32 major; /* out */
|
||||
__u32 minor; /* out */
|
||||
};
|
||||
|
||||
/**
|
||||
* struct amdxdna_drm_query_aie_tile_metadata - Query the metadata of AIE tile (core, mem, shim)
|
||||
* @row_count: The number of rows.
|
||||
* @row_start: The starting row number.
|
||||
* @dma_channel_count: The number of dma channels.
|
||||
* @lock_count: The number of locks.
|
||||
* @event_reg_count: The number of events.
|
||||
* @pad: Structure padding.
|
||||
*/
|
||||
struct amdxdna_drm_query_aie_tile_metadata {
|
||||
__u16 row_count;
|
||||
__u16 row_start;
|
||||
__u16 dma_channel_count;
|
||||
__u16 lock_count;
|
||||
__u16 event_reg_count;
|
||||
__u16 pad[3];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct amdxdna_drm_query_aie_metadata - Query the metadata of the AIE hardware
|
||||
* @col_size: The size of a column in bytes.
|
||||
* @cols: The total number of columns.
|
||||
* @rows: The total number of rows.
|
||||
* @version: The version of the AIE hardware.
|
||||
* @core: The metadata for all core tiles.
|
||||
* @mem: The metadata for all mem tiles.
|
||||
* @shim: The metadata for all shim tiles.
|
||||
*/
|
||||
struct amdxdna_drm_query_aie_metadata {
|
||||
__u32 col_size;
|
||||
__u16 cols;
|
||||
__u16 rows;
|
||||
struct amdxdna_drm_query_aie_version version;
|
||||
struct amdxdna_drm_query_aie_tile_metadata core;
|
||||
struct amdxdna_drm_query_aie_tile_metadata mem;
|
||||
struct amdxdna_drm_query_aie_tile_metadata shim;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct amdxdna_drm_query_clock - Metadata for a clock
|
||||
* @name: The clock name.
|
||||
* @freq_mhz: The clock frequency.
|
||||
* @pad: Structure padding.
|
||||
*/
|
||||
struct amdxdna_drm_query_clock {
|
||||
__u8 name[16];
|
||||
__u32 freq_mhz;
|
||||
__u32 pad;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct amdxdna_drm_query_clock_metadata - Query metadata for clocks
|
||||
* @mp_npu_clock: The metadata for MP-NPU clock.
|
||||
* @h_clock: The metadata for H clock.
|
||||
*/
|
||||
struct amdxdna_drm_query_clock_metadata {
|
||||
struct amdxdna_drm_query_clock mp_npu_clock;
|
||||
struct amdxdna_drm_query_clock h_clock;
|
||||
};
|
||||
|
||||
enum amdxdna_sensor_type {
|
||||
AMDXDNA_SENSOR_TYPE_POWER
|
||||
};
|
||||
|
||||
/**
|
||||
* struct amdxdna_drm_query_sensor - The data for single sensor.
|
||||
* @label: The name for a sensor.
|
||||
* @input: The current value of the sensor.
|
||||
* @max: The maximum value possible for the sensor.
|
||||
* @average: The average value of the sensor.
|
||||
* @highest: The highest recorded sensor value for this driver load for the sensor.
|
||||
* @status: The sensor status.
|
||||
* @units: The sensor units.
|
||||
* @unitm: Translates value member variables into the correct unit via (pow(10, unitm) * value).
|
||||
* @type: The sensor type from enum amdxdna_sensor_type.
|
||||
* @pad: Structure padding.
|
||||
*/
|
||||
struct amdxdna_drm_query_sensor {
|
||||
__u8 label[64];
|
||||
__u32 input;
|
||||
__u32 max;
|
||||
__u32 average;
|
||||
__u32 highest;
|
||||
__u8 status[64];
|
||||
__u8 units[16];
|
||||
__s8 unitm;
|
||||
__u8 type;
|
||||
__u8 pad[6];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct amdxdna_drm_query_hwctx - The data for single context.
|
||||
* @context_id: The ID for this context.
|
||||
* @start_col: The starting column for the partition assigned to this context.
|
||||
* @num_col: The number of columns in the partition assigned to this context.
|
||||
* @pad: Structure padding.
|
||||
* @pid: The Process ID of the process that created this context.
|
||||
* @command_submissions: The number of commands submitted to this context.
|
||||
* @command_completions: The number of commands completed by this context.
|
||||
* @migrations: The number of times this context has been moved to a different partition.
|
||||
* @preemptions: The number of times this context has been preempted by another context in the
|
||||
* same partition.
|
||||
* @errors: The errors for this context.
|
||||
*/
|
||||
struct amdxdna_drm_query_hwctx {
|
||||
__u32 context_id;
|
||||
__u32 start_col;
|
||||
__u32 num_col;
|
||||
__u32 pad;
|
||||
__s64 pid;
|
||||
__u64 command_submissions;
|
||||
__u64 command_completions;
|
||||
__u64 migrations;
|
||||
__u64 preemptions;
|
||||
__u64 errors;
|
||||
};
|
||||
|
||||
enum amdxdna_drm_get_param {
|
||||
DRM_AMDXDNA_QUERY_AIE_STATUS,
|
||||
DRM_AMDXDNA_QUERY_AIE_METADATA,
|
||||
DRM_AMDXDNA_QUERY_AIE_VERSION,
|
||||
DRM_AMDXDNA_QUERY_CLOCK_METADATA,
|
||||
DRM_AMDXDNA_QUERY_SENSORS,
|
||||
DRM_AMDXDNA_QUERY_HW_CONTEXTS,
|
||||
DRM_AMDXDNA_NUM_GET_PARAM,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct amdxdna_drm_get_info - Get some information from the AIE hardware.
|
||||
* @param: Value in enum amdxdna_drm_get_param. Specifies the structure passed in the buffer.
|
||||
* @buffer_size: Size of the input buffer. Size needed/written by the kernel.
|
||||
* @buffer: A structure specified by the param struct member.
|
||||
*/
|
||||
struct amdxdna_drm_get_info {
|
||||
__u32 param; /* in */
|
||||
__u32 buffer_size; /* in/out */
|
||||
__u64 buffer; /* in/out */
|
||||
};
|
||||
|
||||
#define DRM_IOCTL_AMDXDNA_CREATE_HWCTX \
|
||||
DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDXDNA_CREATE_HWCTX, \
|
||||
struct amdxdna_drm_create_hwctx)
|
||||
@@ -263,6 +425,10 @@ struct amdxdna_drm_exec_cmd {
|
||||
DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDXDNA_EXEC_CMD, \
|
||||
struct amdxdna_drm_exec_cmd)
|
||||
|
||||
#define DRM_IOCTL_AMDXDNA_GET_INFO \
|
||||
DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDXDNA_GET_INFO, \
|
||||
struct amdxdna_drm_get_info)
|
||||
|
||||
#if defined(__cplusplus)
|
||||
} /* extern c end */
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user