1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright 2012 Advanced Micro Devices, Inc. 3*61046927SAndroid Build Coastguard Worker * 4*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT 5*61046927SAndroid Build Coastguard Worker */ 6*61046927SAndroid Build Coastguard Worker 7*61046927SAndroid Build Coastguard Worker #ifndef AC_PM4_H 8*61046927SAndroid Build Coastguard Worker #define AC_PM4_H 9*61046927SAndroid Build Coastguard Worker 10*61046927SAndroid Build Coastguard Worker #include "ac_gpu_info.h" 11*61046927SAndroid Build Coastguard Worker 12*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 13*61046927SAndroid Build Coastguard Worker extern "C" { 14*61046927SAndroid Build Coastguard Worker #endif 15*61046927SAndroid Build Coastguard Worker 16*61046927SAndroid Build Coastguard Worker struct ac_pm4_state { 17*61046927SAndroid Build Coastguard Worker const struct radeon_info *info; 18*61046927SAndroid Build Coastguard Worker 19*61046927SAndroid Build Coastguard Worker /* PKT3_SET_*_REG handling */ 20*61046927SAndroid Build Coastguard Worker uint16_t last_reg; /* register offset in dwords */ 21*61046927SAndroid Build Coastguard Worker uint16_t last_pm4; 22*61046927SAndroid Build Coastguard Worker uint16_t ndw; /* number of dwords in pm4 */ 23*61046927SAndroid Build Coastguard Worker uint8_t last_opcode; 24*61046927SAndroid Build Coastguard Worker uint8_t last_idx; 25*61046927SAndroid Build Coastguard Worker bool is_compute_queue; 26*61046927SAndroid Build Coastguard Worker bool packed_is_padded; /* whether SET_*_REG_PAIRS_PACKED is padded to an even number of regs */ 27*61046927SAndroid Build Coastguard Worker 28*61046927SAndroid Build Coastguard Worker /* commands for the DE */ 29*61046927SAndroid Build Coastguard Worker uint16_t max_dw; 30*61046927SAndroid Build Coastguard Worker 31*61046927SAndroid Build Coastguard Worker /* Used by SQTT to override the shader address */ 32*61046927SAndroid Build Coastguard Worker bool debug_sqtt; 33*61046927SAndroid Build Coastguard Worker uint32_t spi_shader_pgm_lo_reg; 34*61046927SAndroid Build Coastguard Worker 35*61046927SAndroid Build Coastguard Worker /* This must be the last field because the array can continue after the structure. */ 36*61046927SAndroid Build Coastguard Worker uint32_t pm4[64]; 37*61046927SAndroid Build Coastguard Worker }; 38*61046927SAndroid Build Coastguard Worker 39*61046927SAndroid Build Coastguard Worker void 40*61046927SAndroid Build Coastguard Worker ac_pm4_set_reg(struct ac_pm4_state *state, unsigned reg, uint32_t val); 41*61046927SAndroid Build Coastguard Worker 42*61046927SAndroid Build Coastguard Worker void 43*61046927SAndroid Build Coastguard Worker ac_pm4_set_reg_custom(struct ac_pm4_state *state, unsigned reg, uint32_t val, 44*61046927SAndroid Build Coastguard Worker unsigned opcode, unsigned idx); 45*61046927SAndroid Build Coastguard Worker 46*61046927SAndroid Build Coastguard Worker void 47*61046927SAndroid Build Coastguard Worker ac_pm4_set_reg_idx3(struct ac_pm4_state *state, unsigned reg, uint32_t val); 48*61046927SAndroid Build Coastguard Worker 49*61046927SAndroid Build Coastguard Worker void 50*61046927SAndroid Build Coastguard Worker ac_pm4_clear_state(struct ac_pm4_state *state, const struct radeon_info *info, 51*61046927SAndroid Build Coastguard Worker bool debug_sqtt, bool is_compute_queue); 52*61046927SAndroid Build Coastguard Worker 53*61046927SAndroid Build Coastguard Worker void 54*61046927SAndroid Build Coastguard Worker ac_pm4_cmd_begin(struct ac_pm4_state *state, unsigned opcode); 55*61046927SAndroid Build Coastguard Worker 56*61046927SAndroid Build Coastguard Worker void 57*61046927SAndroid Build Coastguard Worker ac_pm4_cmd_add(struct ac_pm4_state *state, uint32_t dw); 58*61046927SAndroid Build Coastguard Worker 59*61046927SAndroid Build Coastguard Worker void 60*61046927SAndroid Build Coastguard Worker ac_pm4_cmd_end(struct ac_pm4_state *state, bool predicate); 61*61046927SAndroid Build Coastguard Worker 62*61046927SAndroid Build Coastguard Worker void 63*61046927SAndroid Build Coastguard Worker ac_pm4_finalize(struct ac_pm4_state *state); 64*61046927SAndroid Build Coastguard Worker 65*61046927SAndroid Build Coastguard Worker struct ac_pm4_state * 66*61046927SAndroid Build Coastguard Worker ac_pm4_create_sized(const struct radeon_info *info, bool debug_sqtt, 67*61046927SAndroid Build Coastguard Worker unsigned max_dw, bool is_compute_queue); 68*61046927SAndroid Build Coastguard Worker 69*61046927SAndroid Build Coastguard Worker void 70*61046927SAndroid Build Coastguard Worker ac_pm4_free_state(struct ac_pm4_state *state); 71*61046927SAndroid Build Coastguard Worker 72*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 73*61046927SAndroid Build Coastguard Worker } 74*61046927SAndroid Build Coastguard Worker #endif 75*61046927SAndroid Build Coastguard Worker 76*61046927SAndroid Build Coastguard Worker #endif 77