0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 #ifndef F32_MES_PM4_PACKETS_H
0026 #define F32_MES_PM4_PACKETS_H
0027
0028 #ifndef PM4_MES_HEADER_DEFINED
0029 #define PM4_MES_HEADER_DEFINED
0030 union PM4_MES_TYPE_3_HEADER {
0031 struct {
0032 uint32_t reserved1 : 8;
0033 uint32_t opcode : 8;
0034 uint32_t count : 14;
0035
0036
0037 uint32_t type : 2;
0038
0039
0040 };
0041 uint32_t u32All;
0042 };
0043 #endif
0044
0045
0046
0047 #ifndef PM4_MES_SET_RESOURCES_DEFINED
0048 #define PM4_MES_SET_RESOURCES_DEFINED
0049 enum mes_set_resources_queue_type_enum {
0050 queue_type__mes_set_resources__kernel_interface_queue_kiq = 0,
0051 queue_type__mes_set_resources__hsa_interface_queue_hiq = 1,
0052 queue_type__mes_set_resources__hsa_debug_interface_queue = 4
0053 };
0054
0055
0056 struct pm4_mes_set_resources {
0057 union {
0058 union PM4_MES_TYPE_3_HEADER header;
0059 uint32_t ordinal1;
0060 };
0061
0062 union {
0063 struct {
0064 uint32_t vmid_mask:16;
0065 uint32_t unmap_latency:8;
0066 uint32_t reserved1:5;
0067 enum mes_set_resources_queue_type_enum queue_type:3;
0068 } bitfields2;
0069 uint32_t ordinal2;
0070 };
0071
0072 uint32_t queue_mask_lo;
0073 uint32_t queue_mask_hi;
0074 uint32_t gws_mask_lo;
0075 uint32_t gws_mask_hi;
0076
0077 union {
0078 struct {
0079 uint32_t oac_mask:16;
0080 uint32_t reserved2:16;
0081 } bitfields7;
0082 uint32_t ordinal7;
0083 };
0084
0085 union {
0086 struct {
0087 uint32_t gds_heap_base:10;
0088 uint32_t reserved3:1;
0089 uint32_t gds_heap_size:10;
0090 uint32_t reserved4:11;
0091 } bitfields8;
0092 uint32_t ordinal8;
0093 };
0094
0095 };
0096 #endif
0097
0098
0099
0100 #ifndef PM4_MES_RUN_LIST_DEFINED
0101 #define PM4_MES_RUN_LIST_DEFINED
0102
0103 struct pm4_mes_runlist {
0104 union {
0105 union PM4_MES_TYPE_3_HEADER header;
0106 uint32_t ordinal1;
0107 };
0108
0109 union {
0110 struct {
0111 uint32_t reserved1:2;
0112 uint32_t ib_base_lo:30;
0113 } bitfields2;
0114 uint32_t ordinal2;
0115 };
0116
0117 uint32_t ib_base_hi;
0118
0119 union {
0120 struct {
0121 uint32_t ib_size:20;
0122 uint32_t chain:1;
0123 uint32_t offload_polling:1;
0124 uint32_t chained_runlist_idle_disable:1;
0125 uint32_t valid:1;
0126 uint32_t process_cnt:4;
0127 uint32_t reserved3:4;
0128 } bitfields4;
0129 uint32_t ordinal4;
0130 };
0131
0132 };
0133 #endif
0134
0135
0136
0137 #ifndef PM4_MES_MAP_PROCESS_DEFINED
0138 #define PM4_MES_MAP_PROCESS_DEFINED
0139
0140 struct pm4_mes_map_process {
0141 union {
0142 union PM4_MES_TYPE_3_HEADER header;
0143 uint32_t ordinal1;
0144 };
0145
0146 union {
0147 struct {
0148 uint32_t pasid:16;
0149 uint32_t reserved1:8;
0150 uint32_t diq_enable:1;
0151 uint32_t process_quantum:7;
0152 } bitfields2;
0153 uint32_t ordinal2;
0154 };
0155
0156 uint32_t vm_context_page_table_base_addr_lo32;
0157
0158 uint32_t vm_context_page_table_base_addr_hi32;
0159
0160 uint32_t sh_mem_bases;
0161
0162 uint32_t sh_mem_config;
0163
0164 uint32_t sq_shader_tba_lo;
0165
0166 uint32_t sq_shader_tba_hi;
0167
0168 uint32_t sq_shader_tma_lo;
0169
0170 uint32_t sq_shader_tma_hi;
0171
0172 uint32_t reserved6;
0173
0174 uint32_t gds_addr_lo;
0175
0176 uint32_t gds_addr_hi;
0177
0178 union {
0179 struct {
0180 uint32_t num_gws:7;
0181 uint32_t sdma_enable:1;
0182 uint32_t num_oac:4;
0183 uint32_t gds_size_hi:4;
0184 uint32_t gds_size:6;
0185 uint32_t num_queues:10;
0186 } bitfields14;
0187 uint32_t ordinal14;
0188 };
0189
0190 uint32_t completion_signal_lo;
0191
0192 uint32_t completion_signal_hi;
0193
0194 };
0195
0196 #endif
0197
0198
0199
0200 #ifndef PM4_MES_MAP_PROCESS_VM_DEFINED
0201 #define PM4_MES_MAP_PROCESS_VM_DEFINED
0202
0203 struct PM4_MES_MAP_PROCESS_VM {
0204 union {
0205 union PM4_MES_TYPE_3_HEADER header;
0206 uint32_t ordinal1;
0207 };
0208
0209 uint32_t reserved1;
0210
0211 uint32_t vm_context_cntl;
0212
0213 uint32_t reserved2;
0214
0215 uint32_t vm_context_page_table_end_addr_lo32;
0216
0217 uint32_t vm_context_page_table_end_addr_hi32;
0218
0219 uint32_t vm_context_page_table_start_addr_lo32;
0220
0221 uint32_t vm_context_page_table_start_addr_hi32;
0222
0223 uint32_t reserved3;
0224
0225 uint32_t reserved4;
0226
0227 uint32_t reserved5;
0228
0229 uint32_t reserved6;
0230
0231 uint32_t reserved7;
0232
0233 uint32_t reserved8;
0234
0235 uint32_t completion_signal_lo32;
0236
0237 uint32_t completion_signal_hi32;
0238
0239 };
0240 #endif
0241
0242
0243
0244 #ifndef PM4_MES_MAP_QUEUES_VI_DEFINED
0245 #define PM4_MES_MAP_QUEUES_VI_DEFINED
0246 enum mes_map_queues_queue_sel_enum {
0247 queue_sel__mes_map_queues__map_to_specified_queue_slots_vi = 0,
0248 queue_sel__mes_map_queues__map_to_hws_determined_queue_slots_vi = 1
0249 };
0250
0251 enum mes_map_queues_queue_type_enum {
0252 queue_type__mes_map_queues__normal_compute_vi = 0,
0253 queue_type__mes_map_queues__debug_interface_queue_vi = 1,
0254 queue_type__mes_map_queues__normal_latency_static_queue_vi = 2,
0255 queue_type__mes_map_queues__low_latency_static_queue_vi = 3
0256 };
0257
0258 enum mes_map_queues_engine_sel_enum {
0259 engine_sel__mes_map_queues__compute_vi = 0,
0260 engine_sel__mes_map_queues__sdma0_vi = 2,
0261 engine_sel__mes_map_queues__sdma1_vi = 3
0262 };
0263
0264 enum mes_map_queues_extended_engine_sel_enum {
0265 extended_engine_sel__mes_map_queues__legacy_engine_sel = 0,
0266 extended_engine_sel__mes_map_queues__sdma0_to_7_sel = 1
0267 };
0268
0269 struct pm4_mes_map_queues {
0270 union {
0271 union PM4_MES_TYPE_3_HEADER header;
0272 uint32_t ordinal1;
0273 };
0274
0275 union {
0276 struct {
0277 uint32_t reserved1:2;
0278 enum mes_map_queues_extended_engine_sel_enum extended_engine_sel:2;
0279 enum mes_map_queues_queue_sel_enum queue_sel:2;
0280 uint32_t reserved5:6;
0281 uint32_t gws_control_queue:1;
0282 uint32_t reserved2:8;
0283 enum mes_map_queues_queue_type_enum queue_type:3;
0284 uint32_t reserved3:2;
0285 enum mes_map_queues_engine_sel_enum engine_sel:3;
0286 uint32_t num_queues:3;
0287 } bitfields2;
0288 uint32_t ordinal2;
0289 };
0290
0291 union {
0292 struct {
0293 uint32_t reserved3:1;
0294 uint32_t check_disable:1;
0295 uint32_t doorbell_offset:26;
0296 uint32_t reserved4:4;
0297 } bitfields3;
0298 uint32_t ordinal3;
0299 };
0300
0301 uint32_t mqd_addr_lo;
0302 uint32_t mqd_addr_hi;
0303 uint32_t wptr_addr_lo;
0304 uint32_t wptr_addr_hi;
0305 };
0306 #endif
0307
0308
0309
0310 #ifndef PM4_MES_QUERY_STATUS_DEFINED
0311 #define PM4_MES_QUERY_STATUS_DEFINED
0312 enum mes_query_status_interrupt_sel_enum {
0313 interrupt_sel__mes_query_status__completion_status = 0,
0314 interrupt_sel__mes_query_status__process_status = 1,
0315 interrupt_sel__mes_query_status__queue_status = 2
0316 };
0317
0318 enum mes_query_status_command_enum {
0319 command__mes_query_status__interrupt_only = 0,
0320 command__mes_query_status__fence_only_immediate = 1,
0321 command__mes_query_status__fence_only_after_write_ack = 2,
0322 command__mes_query_status__fence_wait_for_write_ack_send_interrupt = 3
0323 };
0324
0325 enum mes_query_status_engine_sel_enum {
0326 engine_sel__mes_query_status__compute = 0,
0327 engine_sel__mes_query_status__sdma0_queue = 2,
0328 engine_sel__mes_query_status__sdma1_queue = 3
0329 };
0330
0331 struct pm4_mes_query_status {
0332 union {
0333 union PM4_MES_TYPE_3_HEADER header;
0334 uint32_t ordinal1;
0335 };
0336
0337 union {
0338 struct {
0339 uint32_t context_id:28;
0340 enum mes_query_status_interrupt_sel_enum interrupt_sel:2;
0341 enum mes_query_status_command_enum command:2;
0342 } bitfields2;
0343 uint32_t ordinal2;
0344 };
0345
0346 union {
0347 struct {
0348 uint32_t pasid:16;
0349 uint32_t reserved1:16;
0350 } bitfields3a;
0351 struct {
0352 uint32_t reserved2:2;
0353 uint32_t doorbell_offset:26;
0354 enum mes_query_status_engine_sel_enum engine_sel:3;
0355 uint32_t reserved3:1;
0356 } bitfields3b;
0357 uint32_t ordinal3;
0358 };
0359
0360 uint32_t addr_lo;
0361 uint32_t addr_hi;
0362 uint32_t data_lo;
0363 uint32_t data_hi;
0364 };
0365 #endif
0366
0367
0368
0369 #ifndef PM4_MES_UNMAP_QUEUES_DEFINED
0370 #define PM4_MES_UNMAP_QUEUES_DEFINED
0371 enum mes_unmap_queues_action_enum {
0372 action__mes_unmap_queues__preempt_queues = 0,
0373 action__mes_unmap_queues__reset_queues = 1,
0374 action__mes_unmap_queues__disable_process_queues = 2,
0375 action__mes_unmap_queues__reserved = 3
0376 };
0377
0378 enum mes_unmap_queues_queue_sel_enum {
0379 queue_sel__mes_unmap_queues__perform_request_on_specified_queues = 0,
0380 queue_sel__mes_unmap_queues__perform_request_on_pasid_queues = 1,
0381 queue_sel__mes_unmap_queues__unmap_all_queues = 2,
0382 queue_sel__mes_unmap_queues__unmap_all_non_static_queues = 3
0383 };
0384
0385 enum mes_unmap_queues_engine_sel_enum {
0386 engine_sel__mes_unmap_queues__compute = 0,
0387 engine_sel__mes_unmap_queues__sdma0 = 2,
0388 engine_sel__mes_unmap_queues__sdmal = 3
0389 };
0390
0391 enum mes_unmap_queues_extended_engine_sel_enum {
0392 extended_engine_sel__mes_unmap_queues__legacy_engine_sel = 0,
0393 extended_engine_sel__mes_unmap_queues__sdma0_to_7_sel = 1
0394 };
0395
0396 struct pm4_mes_unmap_queues {
0397 union {
0398 union PM4_MES_TYPE_3_HEADER header;
0399 uint32_t ordinal1;
0400 };
0401
0402 union {
0403 struct {
0404 enum mes_unmap_queues_action_enum action:2;
0405 enum mes_unmap_queues_extended_engine_sel_enum extended_engine_sel:2;
0406 enum mes_unmap_queues_queue_sel_enum queue_sel:2;
0407 uint32_t reserved2:20;
0408 enum mes_unmap_queues_engine_sel_enum engine_sel:3;
0409 uint32_t num_queues:3;
0410 } bitfields2;
0411 uint32_t ordinal2;
0412 };
0413
0414 union {
0415 struct {
0416 uint32_t pasid:16;
0417 uint32_t reserved3:16;
0418 } bitfields3a;
0419 struct {
0420 uint32_t reserved4:2;
0421 uint32_t doorbell_offset0:26;
0422 int32_t reserved5:4;
0423 } bitfields3b;
0424 uint32_t ordinal3;
0425 };
0426
0427 union {
0428 struct {
0429 uint32_t reserved6:2;
0430 uint32_t doorbell_offset1:26;
0431 uint32_t reserved7:4;
0432 } bitfields4;
0433 uint32_t ordinal4;
0434 };
0435
0436 union {
0437 struct {
0438 uint32_t reserved8:2;
0439 uint32_t doorbell_offset2:26;
0440 uint32_t reserved9:4;
0441 } bitfields5;
0442 uint32_t ordinal5;
0443 };
0444
0445 union {
0446 struct {
0447 uint32_t reserved10:2;
0448 uint32_t doorbell_offset3:26;
0449 uint32_t reserved11:4;
0450 } bitfields6;
0451 uint32_t ordinal6;
0452 };
0453 };
0454 #endif
0455
0456 #ifndef PM4_MEC_RELEASE_MEM_DEFINED
0457 #define PM4_MEC_RELEASE_MEM_DEFINED
0458
0459 enum mec_release_mem_event_index_enum {
0460 event_index__mec_release_mem__end_of_pipe = 5,
0461 event_index__mec_release_mem__shader_done = 6
0462 };
0463
0464 enum mec_release_mem_cache_policy_enum {
0465 cache_policy__mec_release_mem__lru = 0,
0466 cache_policy__mec_release_mem__stream = 1
0467 };
0468
0469 enum mec_release_mem_pq_exe_status_enum {
0470 pq_exe_status__mec_release_mem__default = 0,
0471 pq_exe_status__mec_release_mem__phase_update = 1
0472 };
0473
0474 enum mec_release_mem_dst_sel_enum {
0475 dst_sel__mec_release_mem__memory_controller = 0,
0476 dst_sel__mec_release_mem__tc_l2 = 1,
0477 dst_sel__mec_release_mem__queue_write_pointer_register = 2,
0478 dst_sel__mec_release_mem__queue_write_pointer_poll_mask_bit = 3
0479 };
0480
0481 enum mec_release_mem_int_sel_enum {
0482 int_sel__mec_release_mem__none = 0,
0483 int_sel__mec_release_mem__send_interrupt_only = 1,
0484 int_sel__mec_release_mem__send_interrupt_after_write_confirm = 2,
0485 int_sel__mec_release_mem__send_data_after_write_confirm = 3,
0486 int_sel__mec_release_mem__unconditionally_send_int_ctxid = 4,
0487 int_sel__mec_release_mem__conditionally_send_int_ctxid_based_on_32_bit_compare = 5,
0488 int_sel__mec_release_mem__conditionally_send_int_ctxid_based_on_64_bit_compare = 6
0489 };
0490
0491 enum mec_release_mem_data_sel_enum {
0492 data_sel__mec_release_mem__none = 0,
0493 data_sel__mec_release_mem__send_32_bit_low = 1,
0494 data_sel__mec_release_mem__send_64_bit_data = 2,
0495 data_sel__mec_release_mem__send_gpu_clock_counter = 3,
0496 data_sel__mec_release_mem__send_cp_perfcounter_hi_lo = 4,
0497 data_sel__mec_release_mem__store_gds_data_to_memory = 5
0498 };
0499
0500 struct pm4_mec_release_mem {
0501 union {
0502 union PM4_MES_TYPE_3_HEADER header;
0503 unsigned int ordinal1;
0504 };
0505
0506 union {
0507 struct {
0508 unsigned int event_type:6;
0509 unsigned int reserved1:2;
0510 enum mec_release_mem_event_index_enum event_index:4;
0511 unsigned int tcl1_vol_action_ena:1;
0512 unsigned int tc_vol_action_ena:1;
0513 unsigned int reserved2:1;
0514 unsigned int tc_wb_action_ena:1;
0515 unsigned int tcl1_action_ena:1;
0516 unsigned int tc_action_ena:1;
0517 uint32_t reserved3:1;
0518 uint32_t tc_nc_action_ena:1;
0519 uint32_t tc_wc_action_ena:1;
0520 uint32_t tc_md_action_ena:1;
0521 uint32_t reserved4:3;
0522 enum mec_release_mem_cache_policy_enum cache_policy:2;
0523 uint32_t reserved5:2;
0524 enum mec_release_mem_pq_exe_status_enum pq_exe_status:1;
0525 uint32_t reserved6:2;
0526 } bitfields2;
0527 unsigned int ordinal2;
0528 };
0529
0530 union {
0531 struct {
0532 uint32_t reserved7:16;
0533 enum mec_release_mem_dst_sel_enum dst_sel:2;
0534 uint32_t reserved8:6;
0535 enum mec_release_mem_int_sel_enum int_sel:3;
0536 uint32_t reserved9:2;
0537 enum mec_release_mem_data_sel_enum data_sel:3;
0538 } bitfields3;
0539 unsigned int ordinal3;
0540 };
0541
0542 union {
0543 struct {
0544 uint32_t reserved10:2;
0545 unsigned int address_lo_32b:30;
0546 } bitfields4;
0547 struct {
0548 uint32_t reserved11:3;
0549 uint32_t address_lo_64b:29;
0550 } bitfields4b;
0551 uint32_t reserved12;
0552 unsigned int ordinal4;
0553 };
0554
0555 union {
0556 uint32_t address_hi;
0557 uint32_t reserved13;
0558 uint32_t ordinal5;
0559 };
0560
0561 union {
0562 uint32_t data_lo;
0563 uint32_t cmp_data_lo;
0564 struct {
0565 uint32_t dw_offset:16;
0566 uint32_t num_dwords:16;
0567 } bitfields6c;
0568 uint32_t reserved14;
0569 uint32_t ordinal6;
0570 };
0571
0572 union {
0573 uint32_t data_hi;
0574 uint32_t cmp_data_hi;
0575 uint32_t reserved15;
0576 uint32_t reserved16;
0577 uint32_t ordinal7;
0578 };
0579
0580 uint32_t int_ctxid;
0581
0582 };
0583
0584 #endif
0585
0586 enum {
0587 CACHE_FLUSH_AND_INV_TS_EVENT = 0x00000014
0588 };
0589 #endif
0590