aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiz Prucka <lizprucka@google.com>2024-01-10 13:03:11 -0600
committerAleksandr Nogikh <nogikh@google.com>2024-01-18 09:51:54 +0000
commit239abf840427841c91a546737fdcb9a1ed18bd39 (patch)
tree24f56cb7fe79203826c24b6fae24a074cf18b71e
parent1417953aed7e2cf2915fc27de870f3229f3cb66f (diff)
sys/linux: added descriptions for Mali GPU
Descriptions are used in addition to dev_bifrost ioctls.
-rw-r--r--sys/linux/dev_mali.txt343
-rw-r--r--sys/linux/dev_mali.txt.const62
2 files changed, 405 insertions, 0 deletions
diff --git a/sys/linux/dev_mali.txt b/sys/linux/dev_mali.txt
new file mode 100644
index 000000000..61ad8e1a4
--- /dev/null
+++ b/sys/linux/dev_mali.txt
@@ -0,0 +1,343 @@
+# Copyright 2024 syzkaller project authors. All rights reserved.
+# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+# Generated on android14-gs-pixel-5.15-udc-d1
+# CSF and non-csf builds have overlapping definitions. Must define
+# "MALI_USE_CSF" during generation.
+meta noextract
+
+include <gpu/common/include/uapi/gpu/arm/midgard/mali_kbase_hwcnt_reader.h>
+include <gpu/common/include/uapi/gpu/arm/midgard/mali_base_kernel.h>
+include <gpu/common/include/uapi/gpu/arm/midgard/mali_kbase_ioctl.h>
+include <gpu/mali_kbase/mali_kbase.h>
+include <uapi/linux/fcntl.h>
+
+define max_supported_streams (MAX_SUPPORTED_CSGS * MAX_SUPPORTED_STREAMS_PER_GROUP)
+
+resource gpu_heap_va[int64]
+resource kcpu_queue_id[int8]
+resource cs_queue_group_handle[int8]
+
+ioctl$KBASE_IOCTL_READ_USER_PAGE(fd fd_bifrost, cmd const[KBASE_IOCTL_READ_USER_PAGE], arg ptr[inout, kbase_ioctl_read_user_page])
+ioctl$KBASE_IOCTL_MEM_ALLOC_EX(fd fd_bifrost, cmd const[KBASE_IOCTL_MEM_ALLOC_EX], arg ptr[inout, kbase_ioctl_mem_alloc_ex])
+ioctl$KBASE_IOCTL_CS_CPU_QUEUE_DUMP(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_CPU_QUEUE_DUMP], arg ptr[in, kbase_ioctl_cs_cpu_queue_info])
+ioctl$KBASE_IOCTL_CS_GET_GLB_IFACE(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_GET_GLB_IFACE], arg ptr[inout, kbase_ioctl_cs_get_glb_iface])
+ioctl$KBASE_IOCTL_CS_TILER_HEAP_TERM(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_TILER_HEAP_TERM], arg ptr[in, kbase_ioctl_cs_tiler_heap_term])
+ioctl$KBASE_IOCTL_CS_TILER_HEAP_INIT_1_13(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_TILER_HEAP_INIT_1_13], arg ptr[inout, kbase_ioctl_cs_tiler_heap_init_1_13])
+ioctl$KBASE_IOCTL_CS_TILER_HEAP_INIT(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_TILER_HEAP_INIT], arg ptr[inout, kbase_ioctl_cs_tiler_heap_init])
+ioctl$KBASE_IOCTL_KCPU_QUEUE_ENQUEUE(fd fd_bifrost, cmd const[KBASE_IOCTL_KCPU_QUEUE_ENQUEUE], arg ptr[in, kbase_ioctl_kcpu_queue_enqueue])
+ioctl$KBASE_IOCTL_KCPU_QUEUE_DELETE(fd fd_bifrost, cmd const[KBASE_IOCTL_KCPU_QUEUE_DELETE], arg ptr[in, kbase_ioctl_kcpu_queue_delete])
+ioctl$KBASE_IOCTL_KCPU_QUEUE_CREATE(fd fd_bifrost, cmd const[KBASE_IOCTL_KCPU_QUEUE_CREATE], arg ptr[out, kbase_ioctl_kcpu_queue_new])
+ioctl$KBASE_IOCTL_CS_EVENT_SIGNAL(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_EVENT_SIGNAL])
+ioctl$KBASE_IOCTL_CS_QUEUE_GROUP_TERMINATE(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_GROUP_TERMINATE], arg ptr[in, kbase_ioctl_cs_queue_group_terminate])
+ioctl$KBASE_IOCTL_CS_QUEUE_GROUP_CREATE(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_GROUP_CREATE], arg ptr[inout, kbase_ioctl_cs_queue_group_create])
+ioctl$KBASE_IOCTL_CS_QUEUE_GROUP_CREATE_1_6(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_GROUP_CREATE_1_6], arg ptr[inout, kbase_ioctl_cs_queue_group_create_1_6])
+ioctl$KBASE_IOCTL_CS_QUEUE_TERMINATE(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_TERMINATE], arg ptr[in, kbase_ioctl_cs_queue_terminate])
+ioctl$KBASE_IOCTL_CS_QUEUE_REGISTER_EX(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_REGISTER_EX], arg ptr[in, kbase_ioctl_cs_queue_register_ex])
+ioctl$KBASE_IOCTL_CS_QUEUE_BIND(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_BIND], arg ptr[inout, kbase_ioctl_cs_queue_bind])
+ioctl$KBASE_IOCTL_CS_QUEUE_KICK(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_KICK], arg ptr[in, kbase_ioctl_cs_queue_kick])
+ioctl$KBASE_IOCTL_CS_QUEUE_REGISTER(fd fd_bifrost, cmd const[KBASE_IOCTL_CS_QUEUE_REGISTER], arg ptr[in, base_ioctl_cs_queue_register])
+ioctl$KBASE_IOCTL_VERSION_CHECK_RESERVED(fd fd_bifrost, cmd const[KBASE_IOCTL_VERSION_CHECK_RESERVED], arg ptr[inout, kbase_ioctl_version_check])
+ioctl$KBASE_IOCTL_BUFFER_LIVENESS_UPDATE(fd fd_bifrost, cmd const[KBASE_IOCTL_BUFFER_LIVENESS_UPDATE], arg ptr[in, kbase_ioctl_buffer_liveness_update])
+ioctl$KBASE_IOCTL_KINSTR_PRFCNT_SETUP(fd fd_bifrost, cmd const[KBASE_IOCTL_KINSTR_PRFCNT_SETUP], arg ptr[inout, kbase_ioctl_kinstr_prfcnt_setup])
+ioctl$KBASE_IOCTL_KINSTR_PRFCNT_ENUM_INFO(fd fd_bifrost, cmd const[KBASE_IOCTL_KINSTR_PRFCNT_ENUM_INFO], arg ptr[inout, kbase_ioctl_kinstr_prfcnt_enum_info])
+ioctl$KBASE_IOCTL_SET_LIMITED_CORE_COUNT(fd fd_bifrost, cmd const[KBASE_IOCTL_SET_LIMITED_CORE_COUNT], arg ptr[in, kbase_ioctl_set_limited_core_count])
+ioctl$KBASE_IOCTL_CONTEXT_PRIORITY_CHECK(fd fd_bifrost, cmd const[KBASE_IOCTL_CONTEXT_PRIORITY_CHECK], arg ptr[inout, kbase_ioctl_context_priority_check])
+ioctl$KBASE_HWCNT_READER_GET_BUFFER_WITH_CYCLES(fd fd_hwcnt, cmd const[KBASE_HWCNT_READER_GET_BUFFER_WITH_CYCLES], arg ptr[out, kbase_hwcnt_reader_metadata_with_cycles])
+ioctl$KBASE_HWCNT_READER_PUT_BUFFER_WITH_CYCLES(fd fd_hwcnt, cmd const[KBASE_HWCNT_READER_PUT_BUFFER_WITH_CYCLES], arg ptr[in, kbase_hwcnt_reader_metadata_with_cycles])
+ioctl$KBASE_HWCNT_READER_GET_API_VERSION_WITH_FEATURES(fd fd_hwcnt, cmd const[KBASE_HWCNT_READER_GET_API_VERSION], arg ptr[out, kbase_hwcnt_reader_api_version])
+
+kbase_hwcnt_reader_metadata_cycles {
+ top int64
+ shader_cores int64
+}
+
+kbase_hwcnt_reader_metadata_with_cycles {
+ timestamp int64
+ event_id int32
+ buffer_idx int32
+ cycles kbase_hwcnt_reader_metadata_cycles
+}
+
+kbase_hwcnt_reader_api_version {
+ version int32
+ features int32
+}
+
+kbase_ioctl_read_user_page {
+ offset flags[user_offsets, int32]
+ padding const[0, int32]
+ val_lo int32 (out_overlay)
+ val_hi int32
+}
+
+kbase_ioctl_mem_alloc_ex {
+ va_pages int64
+ commit_pages int64
+ extension int64
+ flags flags[base_mem_alloc_flags, int64]
+ fixed_address int64
+ extra array[const[0, int64], 3]
+ out_flags int64 (out_overlay)
+ gpu_va gpu_addr
+}
+
+kbase_ioctl_cs_cpu_queue_info {
+ buffer ptr64[in, array[int8]]
+ size len[buffer, int64]
+}
+
+kbase_ioctl_cs_get_glb_iface {
+ max_group_num int32[0:MAX_SUPPORTED_CSGS]
+ max_total_stream_num int32[0:max_supported_streams]
+ groups_ptr ptr64[out, int64]
+ streams_ptr ptr64[out, int64]
+ glb_version int32 (out_overlay)
+ features int32
+ group_num int32
+ prfcnt_size int32
+ total_stream_num int32
+ instr_featurs int32
+}
+
+kbase_ioctl_cs_tiler_heap_term {
+ gpu_heap_va gpu_heap_va
+}
+
+kbase_ioctl_cs_tiler_heap_init_1_13 {
+ chunk_size flags[tiler_heap_chunk_sizes, int32]
+ initial_chunks int32
+ max_chunks int32
+ target_in_flight int16
+ group_id int8[0:BASE_MEM_GROUP_COUNT]
+ padding const[0, int8]
+ gpu_heap_va gpu_heap_va (out_overlay)
+ first_chunk_va int64
+}
+
+kbase_ioctl_cs_tiler_heap_init {
+ chunk_size flags[tiler_heap_chunk_sizes, int32]
+ initial_chunks int32
+ max_chunks int32
+ target_in_flight int16
+ group_id int8[0:BASE_MEM_GROUP_COUNT]
+ padding const[0, int8]
+ buf_desc_va int64
+ gpu_heap_va gpu_heap_va (out_overlay)
+ first_chunk_va int64
+}
+
+kbase_ioctl_kcpu_queue_new {
+ id kcpu_queue_id
+ pad array[const[0, int8], 7]
+}
+
+kbase_ioctl_kcpu_queue_delete {
+ id kcpu_queue_id
+ pad array[const[0, int8], 7]
+}
+
+kbase_ioctl_kcpu_queue_enqueue {
+ addr gpu_addr
+ nr_commands len[addr, int32]
+ id kcpu_queue_id
+ padding array[const[0, int8], 3]
+}
+
+kbase_ioctl_cs_queue_terminate {
+ buffer_gpu_addr gpu_addr
+}
+
+kbase_ioctl_cs_queue_group_terminate {
+ group_handle cs_queue_group_handle
+ padding array[const[0, int8], 7]
+}
+
+kbase_ioctl_cs_queue_group_create {
+ tiler_mask int64
+ fragment_mask int64
+ compute_mask int64
+ cs_min int8
+ priority flags[queue_group_priority, int8]
+ tiler_max int8
+ fragment_max int8
+ compute_max int8
+ csi_handlers flags[csf_csi_flags, int8]
+ padding array[const[0, int8], 2]
+ reserved int64
+ group_handle cs_queue_group_handle (out_overlay)
+ padding_out array[const[0, int8], 3]
+ group_uid int32
+}
+
+kbase_ioctl_cs_queue_group_create_1_6 {
+ tiler_mask int64
+ fragment_mask int64
+ compute_mask int64
+ cs_min int8
+ priority flags[queue_group_priority, int8]
+ tiler_max int8
+ fragment_max int8
+ compute_max int8
+ padding array[const[0, int8], 2]
+ reserved int64
+ group_handle cs_queue_group_handle (out_overlay)
+ padding_out array[const[0, int8], 3]
+ group_uid int32
+}
+
+kbase_ioctl_cs_queue_register_ex {
+ buffer_gpu_addr gpu_addr
+ buffer_size int32
+ priority int8[0:BASE_QUEUE_MAX_PRIORITY]
+ padding array[const[0, int8], 3]
+ ex_offset_var_addr gpu_addr
+ ex_buffer_base gpu_addr
+ ex_buffer_size int32
+ ex_event_size int8
+ ex_event_state int8
+ ex_padding array[const[0, int8], 2]
+}
+
+kbase_ioctl_cs_queue_bind {
+ buffer_gpu_addr gpu_addr
+ group_handle cs_queue_group_handle
+ csi_index int8
+ padding array[const[0, int8], 6]
+ mmap_handle int64 (out_overlay)
+}
+
+kbase_ioctl_cs_queue_kick {
+ buffer_gpu_addr gpu_addr
+}
+
+base_ioctl_cs_queue_register {
+ buffer_gpu_addr gpu_addr
+ buffer_size int32
+ priority int8[0:BASE_QUEUE_MAX_PRIORITY]
+ padding array[const[0, int8], 6]
+}
+
+kbase_ioctl_buffer_liveness_update {
+ live_ranges_address ptr64[in, array[kbase_pixel_gpu_slc_liveness_mark]]
+ live_ranges_count len[live_ranges_address, int64]
+ buffer_va_address ptr64[in, array[gpu_addr]]
+ buffer_sizes_address ptr64[in, array[int64]]
+ buffer_count len[buffer_va_address, int64]
+}
+
+kbase_pixel_gpu_slc_liveness_mark {
+ type int32
+ index int32
+}
+
+kbase_ioctl_kinstr_prfcnt_setup {
+ request_item_count len[requests_ptr, int32]
+ request_item_size int32
+ requests_ptr ptr64[in, array[prfcnt_request_item]]
+ prfcnt_metadata_item_size int32 (out_overlay)
+ prfcnt_mmap_size_bytes int32
+}
+
+prfcnt_request_item {
+ hdr prfcnt_request_item_header
+ u prfcnt_request_union
+}
+
+prfcnt_request_item_header {
+ item_type flags[prfcnt_request_item_type, int16]
+ item_version const[0, int16]
+}
+
+prfcnt_request_union [
+ req_mode prfcnt_request_mode
+ req_enable prfcnt_request_enable
+ req_scope prfcnt_request_scope
+] [varlen]
+
+prfcnt_request_mode {
+ mode flags[prfcnt_mode, int8]
+ pad array[const[0, int8], 7]
+ mode_config prfcnt_request_mode_union
+}
+
+prfcnt_request_mode_union [
+ periodic periodic_config
+]
+
+periodic_config {
+ period_ns int64
+}
+
+prfcnt_request_enable {
+ block_type flags[prfcnt_block_type, int8]
+ set flags[prfcnt_set, int8]
+ pad array[const[0, int8], 6]
+ enable_mask array[int64, 2]
+}
+
+prfcnt_request_scope {
+ scope flags[prfcnt_scope, int8]
+ pad array[const[0, int8], 7]
+}
+
+kbase_ioctl_kinstr_prfcnt_enum_info {
+ info_item_size len[info_list_ptr, int32]
+ info_item_count bytesize[info_list_ptr, int32]
+ info_list_ptr ptr[out, array[prfcnt_enum_item]]
+}
+
+prfcnt_enum_item {
+ hdr prfcnt_enum_item_header
+ u prfcnt_enum_union
+}
+
+prfcnt_enum_item_header {
+ item_type flags[prfcnt_request_item_type, int16]
+ item_version const[0, int16]
+}
+
+prfcnt_enum_union [
+ block_counter prfcnt_enum_block_counter
+ request prfcnt_enum_request
+ sample_info prfcnt_enum_sample_info
+] [varlen]
+
+prfcnt_enum_block_counter {
+ block_type flags[prfcnt_block_type, int8]
+ set flags[prfcnt_set, int8]
+ pad array[const[0, int8], 2]
+ num_instances int16
+ num_values int16
+ counter_mask array[int64, 2]
+}
+
+prfcnt_enum_request {
+ request_item_type flags[prfcnt_request_enum_type, int16]
+ pad const[0, int16]
+ versions_mask const[0, int32]
+}
+
+prfcnt_enum_sample_info {
+ num_clock_domains int32
+ pad const[0, int32]
+}
+
+kbase_ioctl_set_limited_core_count {
+ max_core_count int8
+}
+
+kbase_ioctl_context_priority_check {
+ priority flags[queue_group_priority, int8]
+}
+
+csf_csi_flags = BASE_CSF_TILER_OOM_EXCEPTION_FLAG
+user_offsets = LATEST_FLUSH
+prfcnt_request_enum_type = PRFCNT_ENUM_TYPE_BLOCK, PRFCNT_ENUM_TYPE_REQUEST, PRFCNT_ENUM_TYPE_SAMPLE_INFO
+prfcnt_request_item_type = PRFCNT_REQUEST_TYPE_MODE, PRFCNT_REQUEST_TYPE_ENABLE, PRFCNT_REQUEST_TYPE_SCOPE
+prfcnt_scope = PRFCNT_SCOPE_GLOBAL, PRFCNT_SCOPE_RESERVED
+prfcnt_set = PRFCNT_SET_PRIMARY, PRFCNT_SET_SECONDARY, PRFCNT_SET_TERTIARY, PRFCNT_SET_RESERVED
+prfcnt_block_type = PRFCNT_BLOCK_TYPE_FE, PRFCNT_BLOCK_TYPE_TILER, PRFCNT_BLOCK_TYPE_MEMORY, PRFCNT_BLOCK_TYPE_SHADER_CORE, PRFCNT_BLOCK_TYPE_RESERVED
+prfcnt_mode = PRFCNT_MODE_MANUAL, PRFCNT_MODE_PERIODIC, PRFCNT_MODE_RESERVED
+tiler_heap_chunk_sizes = 2048, 4096
+queue_group_priority = KBASE_QUEUE_GROUP_PRIORITY_REALTIME, KBASE_QUEUE_GROUP_PRIORITY_HIGH, KBASE_QUEUE_GROUP_PRIORITY_MEDIUM, KBASE_QUEUE_GROUP_PRIORITY_LOW, KBASE_QUEUE_GROUP_PRIORITY_COUNT
diff --git a/sys/linux/dev_mali.txt.const b/sys/linux/dev_mali.txt.const
new file mode 100644
index 000000000..9eae42f13
--- /dev/null
+++ b/sys/linux/dev_mali.txt.const
@@ -0,0 +1,62 @@
+# Code generated by syz-sysgen. DO NOT EDIT.
+arches = amd64, arm64
+BASE_CSF_TILER_OOM_EXCEPTION_FLAG = 1
+BASE_MEM_GROUP_COUNT = 4
+BASE_QUEUE_MAX_PRIORITY = 15
+KBASE_HWCNT_READER_GET_API_VERSION = 1074052863
+KBASE_HWCNT_READER_GET_BUFFER_WITH_CYCLES = 2149629472
+KBASE_HWCNT_READER_PUT_BUFFER_WITH_CYCLES = 1075887649
+KBASE_IOCTL_BUFFER_LIVENESS_UPDATE = 1076396099
+KBASE_IOCTL_CONTEXT_PRIORITY_CHECK = 3221323830
+KBASE_IOCTL_CS_CPU_QUEUE_DUMP = 1074823221
+KBASE_IOCTL_CS_EVENT_SIGNAL = 32812
+KBASE_IOCTL_CS_GET_GLB_IFACE = 3222831155
+KBASE_IOCTL_CS_QUEUE_BIND = 3222306855
+KBASE_IOCTL_CS_QUEUE_GROUP_CREATE = 3223879738
+KBASE_IOCTL_CS_QUEUE_GROUP_CREATE_1_6 = 3223355434
+KBASE_IOCTL_CS_QUEUE_GROUP_TERMINATE = 1074298923
+KBASE_IOCTL_CS_QUEUE_KICK = 1074298917
+KBASE_IOCTL_CS_QUEUE_REGISTER = 1074823204
+KBASE_IOCTL_CS_QUEUE_REGISTER_EX = 1076396072
+KBASE_IOCTL_CS_QUEUE_TERMINATE = 1074298921
+KBASE_IOCTL_CS_TILER_HEAP_INIT = 3222831152
+KBASE_IOCTL_CS_TILER_HEAP_INIT_1_13 = 3222306864
+KBASE_IOCTL_CS_TILER_HEAP_TERM = 1074298929
+KBASE_IOCTL_KCPU_QUEUE_CREATE = 2148040749
+KBASE_IOCTL_KCPU_QUEUE_DELETE = 1074298926
+KBASE_IOCTL_KCPU_QUEUE_ENQUEUE = 1074823215
+KBASE_IOCTL_KINSTR_PRFCNT_ENUM_INFO = 3222306872
+KBASE_IOCTL_KINSTR_PRFCNT_SETUP = 3222306873
+KBASE_IOCTL_MEM_ALLOC_EX = 3225452603
+KBASE_IOCTL_READ_USER_PAGE = 3221782588
+KBASE_IOCTL_SET_LIMITED_CORE_COUNT = 1073840183
+KBASE_IOCTL_VERSION_CHECK_RESERVED = 3221520384
+KBASE_QUEUE_GROUP_PRIORITY_COUNT = 4
+KBASE_QUEUE_GROUP_PRIORITY_HIGH = 1
+KBASE_QUEUE_GROUP_PRIORITY_LOW = 3
+KBASE_QUEUE_GROUP_PRIORITY_MEDIUM = 2
+KBASE_QUEUE_GROUP_PRIORITY_REALTIME = 0
+LATEST_FLUSH = 0
+MAX_SUPPORTED_CSGS = 31
+PRFCNT_BLOCK_TYPE_FE = 0
+PRFCNT_BLOCK_TYPE_MEMORY = 2
+PRFCNT_BLOCK_TYPE_RESERVED = 255
+PRFCNT_BLOCK_TYPE_SHADER_CORE = 3
+PRFCNT_BLOCK_TYPE_TILER = 1
+PRFCNT_ENUM_TYPE_BLOCK = 0
+PRFCNT_ENUM_TYPE_REQUEST = 1
+PRFCNT_ENUM_TYPE_SAMPLE_INFO = 2
+PRFCNT_MODE_MANUAL = 0
+PRFCNT_MODE_PERIODIC = 1
+PRFCNT_MODE_RESERVED = 255
+PRFCNT_REQUEST_TYPE_ENABLE = 4097
+PRFCNT_REQUEST_TYPE_MODE = 4096
+PRFCNT_REQUEST_TYPE_SCOPE = 4098
+PRFCNT_SCOPE_GLOBAL = 0
+PRFCNT_SCOPE_RESERVED = 255
+PRFCNT_SET_PRIMARY = 0
+PRFCNT_SET_RESERVED = 255
+PRFCNT_SET_SECONDARY = 1
+PRFCNT_SET_TERTIARY = 2
+__NR_ioctl = amd64:16, arm64:29
+max_supported_streams = 992