X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Famd%2Fcommon%2Fac_debug.h;h=23343fe130468dee4fdcba32c362ec6504822203;hb=80e8dfe9dead5a034f8e5ae3f92cc60e99de88b6;hp=63ac4fa84d18c09e0906b177c0f45bc108d45df5;hpb=8cb60c7dd3cb608615d3e5f89ad4198c0babdb3d;p=mesa.git diff --git a/src/amd/common/ac_debug.h b/src/amd/common/ac_debug.h index 63ac4fa84d1..23343fe1304 100644 --- a/src/amd/common/ac_debug.h +++ b/src/amd/common/ac_debug.h @@ -19,15 +19,14 @@ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Authors: - * Marek Olšák */ + #ifndef AC_DEBUG_H #define AC_DEBUG_H #include #include +#include #include "amd_family.h" @@ -35,12 +34,36 @@ #define AC_IS_TRACE_POINT(x) (((x) & 0xcafe0000) == 0xcafe0000) #define AC_GET_TRACE_POINT_ID(x) ((x) & 0xffff) +#define AC_MAX_WAVES_PER_CHIP (64 * 40) + +struct ac_wave_info { + unsigned se; /* shader engine */ + unsigned sh; /* shader array */ + unsigned cu; /* compute unit */ + unsigned simd; + unsigned wave; + uint32_t status; + uint64_t pc; /* program counter */ + uint32_t inst_dw0; + uint32_t inst_dw1; + uint64_t exec; + bool matched; /* whether the wave is used by a currently-bound shader */ +}; + typedef void *(*ac_debug_addr_callback)(void *data, uint64_t addr); -void ac_dump_reg(FILE *file, unsigned offset, uint32_t value, - uint32_t field_mask); -void ac_parse_ib(FILE *f, uint32_t *ib, int num_dw, int trace_id, - const char *name, enum chip_class chip_class, +void ac_dump_reg(FILE *file, enum chip_class chip_class, unsigned offset, + uint32_t value, uint32_t field_mask); +void ac_parse_ib_chunk(FILE *f, uint32_t *ib, int num_dw, const int *trace_ids, + unsigned trace_id_count, enum chip_class chip_class, + ac_debug_addr_callback addr_callback, void *addr_callback_data); +void ac_parse_ib(FILE *f, uint32_t *ib, int num_dw, const int *trace_ids, + unsigned trace_id_count, const char *name, enum chip_class chip_class, ac_debug_addr_callback addr_callback, void *addr_callback_data); +bool ac_vm_fault_occured(enum chip_class chip_class, + uint64_t *old_dmesg_timestamp, uint64_t *out_addr); + +unsigned ac_get_wave_info(struct ac_wave_info waves[AC_MAX_WAVES_PER_CHIP]); + #endif