← Documents Documentation/gpu/imagination/uapi.rst GitHub 원문 ↗

Linux 6.18.37 · GPU·DRM

PowerVR UAPI

PowerVR object, VM, context, HWRT dataset와 job submission IOCTL을 다루는 전문 번역입니다.

Source pathDocumentation/gpu/imagination/uapi.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

uapi.rst:1-171

PowerVR UAPI의 object array, device query, buffer object·VM, execution context·free list, HWRT dataset, job submission·sync와 ABI validation helper를 `pvr_drm.h` identifier 단위로 정리한 전문 번역입니다.

PowerVR UAPI lifecycle
단계Interface
DiscoveryDEV_QUERY
MemoryCREATE_BO·GET_BO_MMAP_OFFSET
Address spaceCREATE_VM_CONTEXT·VM_MAP
ExecutionCREATE_CONTEXT·CREATE_FREE_LIST
Render targetCREATE_HWRT_DATASET
SubmitSUBMIT_JOBS·drm_pvr_sync_op
Cleanup각 DESTROY·VM_UNMAP interface

Resource 생성부터 job submit과 해제까지의 상위 순서입니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 ====
2 UAPI
3 ====
4 The sources associated with this section can be found in ``pvr_drm.h``.
5
6 .. kernel-doc:: include/uapi/drm/pvr_drm.h
7 :doc: PowerVR UAPI
8
9 OBJECT ARRAYS
10 =============
11 .. kernel-doc:: include/uapi/drm/pvr_drm.h
12 :identifiers: drm_pvr_obj_array
13
14 .. kernel-doc:: include/uapi/drm/pvr_drm.h
15 :identifiers: DRM_PVR_OBJ_ARRAY
16
17 IOCTLS
18 ======
19 .. kernel-doc:: include/uapi/drm/pvr_drm.h
20 :doc: PowerVR IOCTL interface
21
22 .. kernel-doc:: include/uapi/drm/pvr_drm.h
23 :identifiers: PVR_IOCTL
24
25 DEV_QUERY
26 ---------
27 .. kernel-doc:: include/uapi/drm/pvr_drm.h
28 :doc: PowerVR IOCTL DEV_QUERY interface
29
30 .. kernel-doc:: include/uapi/drm/pvr_drm.h
31 :identifiers: drm_pvr_dev_query
32
33 .. kernel-doc:: include/uapi/drm/pvr_drm.h
34 :identifiers: drm_pvr_ioctl_dev_query_args
35
36 .. kernel-doc:: include/uapi/drm/pvr_drm.h
37 :identifiers: drm_pvr_dev_query_gpu_info
38 drm_pvr_dev_query_runtime_info
39 drm_pvr_dev_query_hwrt_info
40 drm_pvr_dev_query_quirks
41 drm_pvr_dev_query_enhancements
42
43 .. kernel-doc:: include/uapi/drm/pvr_drm.h
44 :identifiers: drm_pvr_heap_id
45 drm_pvr_heap
46 drm_pvr_dev_query_heap_info
47
48 .. kernel-doc:: include/uapi/drm/pvr_drm.h
49 :identifiers: drm_pvr_static_data_area_usage
50 drm_pvr_static_data_area
51 drm_pvr_dev_query_static_data_areas
52
53 CREATE_BO
54 ---------
55 .. kernel-doc:: include/uapi/drm/pvr_drm.h
56 :doc: PowerVR IOCTL CREATE_BO interface
57
58 .. kernel-doc:: include/uapi/drm/pvr_drm.h
59 :identifiers: drm_pvr_ioctl_create_bo_args
60
61 .. kernel-doc:: include/uapi/drm/pvr_drm.h
62 :doc: Flags for CREATE_BO
63
64 GET_BO_MMAP_OFFSET
65 ------------------
66 .. kernel-doc:: include/uapi/drm/pvr_drm.h
67 :doc: PowerVR IOCTL GET_BO_MMAP_OFFSET interface
68
69 .. kernel-doc:: include/uapi/drm/pvr_drm.h
70 :identifiers: drm_pvr_ioctl_get_bo_mmap_offset_args
71
72 CREATE_VM_CONTEXT and DESTROY_VM_CONTEXT
73 ----------------------------------------
74 .. kernel-doc:: include/uapi/drm/pvr_drm.h
75 :doc: PowerVR IOCTL CREATE_VM_CONTEXT and DESTROY_VM_CONTEXT interfaces
76
77 .. kernel-doc:: include/uapi/drm/pvr_drm.h
78 :identifiers: drm_pvr_ioctl_create_vm_context_args
79 drm_pvr_ioctl_destroy_vm_context_args
80
81 VM_MAP and VM_UNMAP
82 -------------------
83 .. kernel-doc:: include/uapi/drm/pvr_drm.h
84 :doc: PowerVR IOCTL VM_MAP and VM_UNMAP interfaces
85
86 .. kernel-doc:: include/uapi/drm/pvr_drm.h
87 :identifiers: drm_pvr_ioctl_vm_map_args
88 drm_pvr_ioctl_vm_unmap_args
89
90 CREATE_CONTEXT and DESTROY_CONTEXT
91 ----------------------------------
92 .. kernel-doc:: include/uapi/drm/pvr_drm.h
93 :doc: PowerVR IOCTL CREATE_CONTEXT and DESTROY_CONTEXT interfaces
94
95 .. kernel-doc:: include/uapi/drm/pvr_drm.h
96 :identifiers: drm_pvr_ioctl_create_context_args
97
98 .. kernel-doc:: include/uapi/drm/pvr_drm.h
99 :identifiers: drm_pvr_ctx_priority
100 drm_pvr_ctx_type
101 drm_pvr_static_render_context_state
102 drm_pvr_static_render_context_state_format
103 drm_pvr_reset_framework
104 drm_pvr_reset_framework_format
105
106 .. kernel-doc:: include/uapi/drm/pvr_drm.h
107 :identifiers: drm_pvr_ioctl_destroy_context_args
108
109 CREATE_FREE_LIST and DESTROY_FREE_LIST
110 --------------------------------------
111 .. kernel-doc:: include/uapi/drm/pvr_drm.h
112 :doc: PowerVR IOCTL CREATE_FREE_LIST and DESTROY_FREE_LIST interfaces
113
114 .. kernel-doc:: include/uapi/drm/pvr_drm.h
115 :identifiers: drm_pvr_ioctl_create_free_list_args
116
117 .. kernel-doc:: include/uapi/drm/pvr_drm.h
118 :identifiers: drm_pvr_ioctl_destroy_free_list_args
119
120 CREATE_HWRT_DATASET and DESTROY_HWRT_DATASET
121 --------------------------------------------
122 .. kernel-doc:: include/uapi/drm/pvr_drm.h
123 :doc: PowerVR IOCTL CREATE_HWRT_DATASET and DESTROY_HWRT_DATASET interfaces
124
125 .. kernel-doc:: include/uapi/drm/pvr_drm.h
126 :identifiers: drm_pvr_ioctl_create_hwrt_dataset_args
127
128 .. kernel-doc:: include/uapi/drm/pvr_drm.h
129 :identifiers: drm_pvr_create_hwrt_geom_data_args
130 drm_pvr_create_hwrt_rt_data_args
131
132 .. kernel-doc:: include/uapi/drm/pvr_drm.h
133 :identifiers: drm_pvr_ioctl_destroy_hwrt_dataset_args
134
135 SUBMIT_JOBS
136 -----------
137 .. kernel-doc:: include/uapi/drm/pvr_drm.h
138 :doc: PowerVR IOCTL SUBMIT_JOBS interface
139
140 .. kernel-doc:: include/uapi/drm/pvr_drm.h
141 :doc: Flags for the drm_pvr_sync_op object.
142
143 .. kernel-doc:: include/uapi/drm/pvr_drm.h
144 :identifiers: drm_pvr_ioctl_submit_jobs_args
145
146 .. kernel-doc:: include/uapi/drm/pvr_drm.h
147 :doc: Flags for SUBMIT_JOB ioctl geometry command.
148
149 .. kernel-doc:: include/uapi/drm/pvr_drm.h
150 :doc: Flags for SUBMIT_JOB ioctl fragment command.
151
152 .. kernel-doc:: include/uapi/drm/pvr_drm.h
153 :doc: Flags for SUBMIT_JOB ioctl compute command.
154
155 .. kernel-doc:: include/uapi/drm/pvr_drm.h
156 :doc: Flags for SUBMIT_JOB ioctl transfer command.
157
158 .. kernel-doc:: include/uapi/drm/pvr_drm.h
159 :identifiers: drm_pvr_sync_op
160 drm_pvr_job_type
161 drm_pvr_hwrt_data_ref
162 drm_pvr_job
163
164 Internal notes
165 ==============
166 .. kernel-doc:: drivers/gpu/drm/imagination/pvr_device.h
167 :doc: IOCTL validation helpers
168
169 .. kernel-doc:: drivers/gpu/drm/imagination/pvr_device.h
170 :identifiers: PVR_STATIC_ASSERT_64BIT_ALIGNED PVR_IOCTL_UNION_PADDING_CHECK
171 pvr_ioctl_union_padding_check
172

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

PowerVR UAPI와 object array

1-17

이 절의 source는 `include/uapi/drm/pvr_drm.h`입니다. PowerVR UAPI 전체 문서와 object array 표현을 구성하는 `drm_pvr_obj_array`, `DRM_PVR_OBJ_ARRAY` identifier를 연결합니다.

Object array abstraction은 여러 UAPI object를 pointer·count 형태로 전달하는 공통 표현을 문서화하는 출발점이며, 뒤의 query와 submission argument에서 사용하는 구조를 이해하는 데 필요합니다.

PowerVR UAPI 구성
pvr_drm.h 전체 UAPI 계약drm_pvr_obj_array 구조DRM_PVR_OBJ_ARRAY helper macroDevice·memory·VM·context·job IOCTL

Header에서 공통 object array와 개별 IOCTL로 확장되는 문서 흐름입니다.

Kernel-doc: UAPI와 object array
Source pathSelector·identifier포함 범위
include/uapi/drm/pvr_drm.h:doc: PowerVR UAPI문서 block
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_obj_array지정 identifier
include/uapi/drm/pvr_drm.h:identifiers: DRM_PVR_OBJ_ARRAY지정 identifier

PowerVR UAPI overview와 object array identifier 3개 block입니다.

====
UAPI
====
The sources associated with this section can be found in ``pvr_drm.h``.

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: PowerVR UAPI

OBJECT ARRAYS
=============
.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_obj_array

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: DRM_PVR_OBJ_ARRAY

IOCTLS

IOCTL dispatch와 DEV_QUERY

18-53

IOCTL 상위 절은 PowerVR IOCTL interface와 `PVR_IOCTL` identifier를 문서화합니다.

`DEV_QUERY`는 device capability와 runtime state를 조회하는 interface입니다. `drm_pvr_dev_query` command, 공통 argument `drm_pvr_ioctl_dev_query_args`, query result structure를 각 identifier group으로 나눕니다.

GPU·runtime·hardware render target 정보는 `drm_pvr_dev_query_gpu_info`, `drm_pvr_dev_query_runtime_info`, `drm_pvr_dev_query_hwrt_info`가 담당합니다. Hardware variation은 `drm_pvr_dev_query_quirks`와 `drm_pvr_dev_query_enhancements`로 표현합니다.

Heap query는 `drm_pvr_heap_id`, `drm_pvr_heap`, `drm_pvr_dev_query_heap_info`를 사용하고, firmware·hardware가 요구하는 static data area는 usage·area·query result identifier로 문서화합니다.

DEV_QUERY result group
GroupIdentifier
GPUdrm_pvr_dev_query_gpu_info
Runtimedrm_pvr_dev_query_runtime_info
HWRTdrm_pvr_dev_query_hwrt_info
Variationdrm_pvr_dev_query_quirks·drm_pvr_dev_query_enhancements
Heapdrm_pvr_heap_id·drm_pvr_heap·drm_pvr_dev_query_heap_info
Static datadrm_pvr_static_data_area_usage·area·query_static_data_areas

PowerVR device discovery에서 조회하는 정보 묶음입니다.

Device query
drm_pvr_ioctl_dev_query_args 준비drm_pvr_dev_query selector 지정PVR_IOCTL 경로로 DEV_QUERY 실행선택한 GPU·runtime·heap·static-data structure 해석

Userspace가 query selector와 output structure를 조합하는 개념적 흐름입니다.

Kernel-doc: IOCTL과 DEV_QUERY
Source pathSelector·identifier포함 범위
include/uapi/drm/pvr_drm.h:doc: PowerVR IOCTL interface문서 block
include/uapi/drm/pvr_drm.h:identifiers: PVR_IOCTL지정 identifier
include/uapi/drm/pvr_drm.h:doc: PowerVR IOCTL DEV_QUERY interface문서 block
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_dev_query지정 identifier
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_ioctl_dev_query_args지정 identifier
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_dev_query_gpu_info | drm_pvr_dev_query_runtime_info | drm_pvr_dev_query_hwrt_info | drm_pvr_dev_query_quirks | drm_pvr_dev_query_enhancements지정 identifier
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_heap_id | drm_pvr_heap | drm_pvr_dev_query_heap_info지정 identifier
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_static_data_area_usage | drm_pvr_static_data_area | drm_pvr_dev_query_static_data_areas지정 identifier

IOCTL dispatch와 device query structure의 8개 block입니다.

======
.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: PowerVR IOCTL interface

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: PVR_IOCTL

DEV_QUERY
---------
.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: PowerVR IOCTL DEV_QUERY interface

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_dev_query

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_ioctl_dev_query_args

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_dev_query_gpu_info
                 drm_pvr_dev_query_runtime_info
                 drm_pvr_dev_query_hwrt_info
                 drm_pvr_dev_query_quirks
                 drm_pvr_dev_query_enhancements

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_heap_id
                 drm_pvr_heap
                 drm_pvr_dev_query_heap_info

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_static_data_area_usage
                 drm_pvr_static_data_area
                 drm_pvr_dev_query_static_data_areas

CREATE_BO

Buffer object와 VM address-space

54-89

`CREATE_BO`는 PowerVR buffer object 생성 interface입니다. `drm_pvr_ioctl_create_bo_args` argument와 CREATE_BO flag 문서를 함께 제공합니다.

`GET_BO_MMAP_OFFSET`은 BO를 userspace에 mmap할 때 필요한 offset을 조회하며 `drm_pvr_ioctl_get_bo_mmap_offset_args`로 argument를 전달합니다.

`CREATE_VM_CONTEXT`와 `DESTROY_VM_CONTEXT`는 GPU virtual-memory context lifetime을 관리하며 각각의 argument structure를 문서화합니다.

`VM_MAP`과 `VM_UNMAP`은 BO 또는 memory range를 VM address space에 연결하거나 제거하는 interface이고 `drm_pvr_ioctl_vm_map_args`, `drm_pvr_ioctl_vm_unmap_args`를 사용합니다.

BO·VM IOCTL
IOCTLArgument·문서
CREATE_BOdrm_pvr_ioctl_create_bo_args + flags
GET_BO_MMAP_OFFSETdrm_pvr_ioctl_get_bo_mmap_offset_args
CREATE_VM_CONTEXTdrm_pvr_ioctl_create_vm_context_args
DESTROY_VM_CONTEXTdrm_pvr_ioctl_destroy_vm_context_args
VM_MAPdrm_pvr_ioctl_vm_map_args
VM_UNMAPdrm_pvr_ioctl_vm_unmap_args

Memory object 생성에서 GPU mapping까지의 UAPI 단계입니다.

PowerVR memory mapping
CREATE_BO로 buffer object 생성필요하면 GET_BO_MMAP_OFFSET으로 CPU mmap 준비CREATE_VM_CONTEXT로 GPU VM 생성VM_MAP으로 BO를 GPU address에 연결사용 종료 후 VM_UNMAP과 DESTROY_VM_CONTEXT

BO 생성과 CPU·GPU address-space 연결의 순서입니다.

Kernel-doc: BO와 VM
Source pathSelector·identifier포함 범위
include/uapi/drm/pvr_drm.h:doc: PowerVR IOCTL CREATE_BO interface문서 block
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_ioctl_create_bo_args지정 identifier
include/uapi/drm/pvr_drm.h:doc: Flags for CREATE_BO문서 block
include/uapi/drm/pvr_drm.h:doc: PowerVR IOCTL GET_BO_MMAP_OFFSET interface문서 block
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_ioctl_get_bo_mmap_offset_args지정 identifier
include/uapi/drm/pvr_drm.h:doc: PowerVR IOCTL CREATE_VM_CONTEXT and DESTROY_VM_CONTEXT interfaces문서 block
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_ioctl_create_vm_context_args | drm_pvr_ioctl_destroy_vm_context_args지정 identifier
include/uapi/drm/pvr_drm.h:doc: PowerVR IOCTL VM_MAP and VM_UNMAP interfaces문서 block
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_ioctl_vm_map_args | drm_pvr_ioctl_vm_unmap_args지정 identifier

BO create·mmap offset, VM context와 map/unmap의 9개 block입니다.

---------
.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: PowerVR IOCTL CREATE_BO interface

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_ioctl_create_bo_args

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: Flags for CREATE_BO

GET_BO_MMAP_OFFSET
------------------
.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: PowerVR IOCTL GET_BO_MMAP_OFFSET interface

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_ioctl_get_bo_mmap_offset_args

CREATE_VM_CONTEXT and DESTROY_VM_CONTEXT
----------------------------------------
.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: PowerVR IOCTL CREATE_VM_CONTEXT and DESTROY_VM_CONTEXT interfaces

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_ioctl_create_vm_context_args
                 drm_pvr_ioctl_destroy_vm_context_args

VM_MAP and VM_UNMAP
-------------------
.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: PowerVR IOCTL VM_MAP and VM_UNMAP interfaces

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_ioctl_vm_map_args
                 drm_pvr_ioctl_vm_unmap_args

Execution context와 free list

90-119

`CREATE_CONTEXT`와 `DESTROY_CONTEXT`는 PowerVR execution context lifetime을 관리합니다. Create argument 외에 context priority·type, static render context state와 format, reset framework와 format identifier를 연결합니다.

Destroy path는 `drm_pvr_ioctl_destroy_context_args`를 별도로 문서화합니다.

`CREATE_FREE_LIST`와 `DESTROY_FREE_LIST`는 hardware rendering에서 사용할 free-list resource lifetime을 관리하고 create·destroy argument structure를 각각 제공합니다.

Context UAPI 구성
영역Identifier
Create·destroydrm_pvr_ioctl_create_context_args·destroy_context_args
Schedulingdrm_pvr_ctx_priority·drm_pvr_ctx_type
Static render statedrm_pvr_static_render_context_state·format
Resetdrm_pvr_reset_framework·format
Free listdrm_pvr_ioctl_create_free_list_args·destroy_free_list_args

Execution state와 reset metadata를 구성하는 identifier입니다.

Context resource lifetime
VM context 준비Priority·type·static state로 CREATE_CONTEXTRendering용 CREATE_FREE_LISTJob submission에서 context·free list 사용DESTROY_FREE_LIST 후 DESTROY_CONTEXT

VM 위에 execution context와 free list를 만드는 일반적인 순서입니다.

Kernel-doc: context와 free list
Source pathSelector·identifier포함 범위
include/uapi/drm/pvr_drm.h:doc: PowerVR IOCTL CREATE_CONTEXT and DESTROY_CONTEXT interfaces문서 block
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_ioctl_create_context_args지정 identifier
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_ctx_priority | drm_pvr_ctx_type | drm_pvr_static_render_context_state | drm_pvr_static_render_context_state_format | drm_pvr_reset_framework | drm_pvr_reset_framework_format지정 identifier
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_ioctl_destroy_context_args지정 identifier
include/uapi/drm/pvr_drm.h:doc: PowerVR IOCTL CREATE_FREE_LIST and DESTROY_FREE_LIST interfaces문서 block
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_ioctl_create_free_list_args지정 identifier
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_ioctl_destroy_free_list_args지정 identifier

Execution context state·reset framework와 free-list lifetime의 7개 block입니다.

CREATE_CONTEXT and DESTROY_CONTEXT
----------------------------------
.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: PowerVR IOCTL CREATE_CONTEXT and DESTROY_CONTEXT interfaces

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_ioctl_create_context_args

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_ctx_priority
                 drm_pvr_ctx_type
                 drm_pvr_static_render_context_state
                 drm_pvr_static_render_context_state_format
                 drm_pvr_reset_framework
                 drm_pvr_reset_framework_format

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_ioctl_destroy_context_args

CREATE_FREE_LIST and DESTROY_FREE_LIST
--------------------------------------
.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: PowerVR IOCTL CREATE_FREE_LIST and DESTROY_FREE_LIST interfaces

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_ioctl_create_free_list_args

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_ioctl_destroy_free_list_args

HWRT dataset lifetime

120-135

`CREATE_HWRT_DATASET`과 `DESTROY_HWRT_DATASET`은 hardware render-target dataset lifetime을 관리합니다.

Create argument는 `drm_pvr_ioctl_create_hwrt_dataset_args`, geometry·render-target data는 `drm_pvr_create_hwrt_geom_data_args`와 `drm_pvr_create_hwrt_rt_data_args`, destroy argument는 `drm_pvr_ioctl_destroy_hwrt_dataset_args`로 문서화합니다.

HWRT dataset 구성
Geometry data argument 준비Render-target data argument 준비CREATE_HWRT_DATASET으로 dataset 생성Render job에서 dataset reference 사용DESTROY_HWRT_DATASET으로 해제

Geometry와 render-target data를 하나의 dataset으로 묶는 UAPI 흐름입니다.

HWRT identifier
단계Identifier
Createdrm_pvr_ioctl_create_hwrt_dataset_args
Geometrydrm_pvr_create_hwrt_geom_data_args
Render targetdrm_pvr_create_hwrt_rt_data_args
Destroydrm_pvr_ioctl_destroy_hwrt_dataset_args

Dataset 생성·구성·해제에 쓰는 structure입니다.

Kernel-doc: HWRT dataset
Source pathSelector·identifier포함 범위
include/uapi/drm/pvr_drm.h:doc: PowerVR IOCTL CREATE_HWRT_DATASET and DESTROY_HWRT_DATASET interfaces문서 block
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_ioctl_create_hwrt_dataset_args지정 identifier
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_create_hwrt_geom_data_args | drm_pvr_create_hwrt_rt_data_args지정 identifier
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_ioctl_destroy_hwrt_dataset_args지정 identifier

HWRT create, geometry·RT data와 destroy의 4개 block입니다.

CREATE_HWRT_DATASET and DESTROY_HWRT_DATASET
--------------------------------------------
.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: PowerVR IOCTL CREATE_HWRT_DATASET and DESTROY_HWRT_DATASET interfaces

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_ioctl_create_hwrt_dataset_args

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_create_hwrt_geom_data_args
                 drm_pvr_create_hwrt_rt_data_args

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_ioctl_destroy_hwrt_dataset_args

SUBMIT_JOBS

Job submission과 synchronization

136-164

`SUBMIT_JOBS`는 PowerVR job submission interface입니다. `drm_pvr_ioctl_submit_jobs_args`가 IOCTL argument를 정의합니다.

Synchronization은 `drm_pvr_sync_op` object와 그 flag로 표현합니다. Job type은 `drm_pvr_job_type`, hardware render-target reference는 `drm_pvr_hwrt_data_ref`, 개별 job은 `drm_pvr_job`이 나타냅니다.

Command 종류별 flag는 geometry, fragment, compute, transfer command 각각에 대해 별도 kernel-doc block으로 정의됩니다.

SUBMIT_JOBS 구성
Context와 필요한 HWRT dataset 준비drm_pvr_sync_op dependency·signal operation 구성Geometry·fragment·compute·transfer job과 flag 구성drm_pvr_ioctl_submit_jobs_args에 object array 연결SUBMIT_JOBS IOCTL 실행

여러 job과 synchronization operation을 하나의 submit argument로 묶습니다.

Job submission identifier
Identifier역할
drm_pvr_ioctl_submit_jobs_argsSubmission 전체 argument
drm_pvr_sync_opWait·signal synchronization operation
drm_pvr_job_typeJob command 종류
drm_pvr_hwrt_data_refHWRT dataset reference
drm_pvr_job개별 submitted job

Submit payload를 구성하는 핵심 object입니다.

Kernel-doc: SUBMIT_JOBS
Source pathSelector·identifier포함 범위
include/uapi/drm/pvr_drm.h:doc: PowerVR IOCTL SUBMIT_JOBS interface문서 block
include/uapi/drm/pvr_drm.h:doc: Flags for the drm_pvr_sync_op object.문서 block
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_ioctl_submit_jobs_args지정 identifier
include/uapi/drm/pvr_drm.h:doc: Flags for SUBMIT_JOB ioctl geometry command.문서 block
include/uapi/drm/pvr_drm.h:doc: Flags for SUBMIT_JOB ioctl fragment command.문서 block
include/uapi/drm/pvr_drm.h:doc: Flags for SUBMIT_JOB ioctl compute command.문서 block
include/uapi/drm/pvr_drm.h:doc: Flags for SUBMIT_JOB ioctl transfer command.문서 block
include/uapi/drm/pvr_drm.h:identifiers: drm_pvr_sync_op | drm_pvr_job_type | drm_pvr_hwrt_data_ref | drm_pvr_job지정 identifier

Submit interface, sync flag, command별 flag와 job structure의 8개 block입니다.

-----------
.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: PowerVR IOCTL SUBMIT_JOBS interface

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: Flags for the drm_pvr_sync_op object.

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_ioctl_submit_jobs_args

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: Flags for SUBMIT_JOB ioctl geometry command.

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: Flags for SUBMIT_JOB ioctl fragment command.

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: Flags for SUBMIT_JOB ioctl compute command.

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :doc: Flags for SUBMIT_JOB ioctl transfer command.

.. kernel-doc:: include/uapi/drm/pvr_drm.h
   :identifiers: drm_pvr_sync_op
                 drm_pvr_job_type
                 drm_pvr_hwrt_data_ref
                 drm_pvr_job

Internal notes

IOCTL ABI validation helper

165-171

Internal note는 `drivers/gpu/drm/imagination/pvr_device.h`의 IOCTL validation helper를 연결합니다.

`PVR_STATIC_ASSERT_64BIT_ALIGNED`, `PVR_IOCTL_UNION_PADDING_CHECK`, `pvr_ioctl_union_padding_check`는 UAPI structure의 64-bit alignment와 union padding을 compile-time 또는 validation path에서 확인하는 identifier입니다.

Validation helper
Identifier검사 목적
PVR_STATIC_ASSERT_64BIT_ALIGNED64-bit field alignment
PVR_IOCTL_UNION_PADDING_CHECKIOCTL union padding
pvr_ioctl_union_padding_checkPadding validation helper

ABI layout 안정성을 검사하는 internal identifier입니다.

Kernel-doc: IOCTL validation
Source pathSelector·identifier포함 범위
drivers/gpu/drm/imagination/pvr_device.h:doc: IOCTL validation helpers문서 block
drivers/gpu/drm/imagination/pvr_device.h:identifiers: PVR_STATIC_ASSERT_64BIT_ALIGNED PVR_IOCTL_UNION_PADDING_CHECK | pvr_ioctl_union_padding_check지정 identifier

Validation overview와 세 identifier를 포함하는 2개 block입니다.

==============
.. kernel-doc:: drivers/gpu/drm/imagination/pvr_device.h
   :doc: IOCTL validation helpers

.. kernel-doc:: drivers/gpu/drm/imagination/pvr_device.h
   :identifiers: PVR_STATIC_ASSERT_64BIT_ALIGNED PVR_IOCTL_UNION_PADDING_CHECK
                 pvr_ioctl_union_padding_check