From fbbb5f71cd02e33a4dc7bb1be5b468e638df7670 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolai=20H=C3=A4hnle?= Date: Fri, 4 Aug 2017 18:55:39 +0200 Subject: [PATCH] amd/common: split out ac_parse_ib_chunk from ac_parse_ib MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Marek Olšák --- src/amd/common/ac_debug.c | 37 +++++++++++++++++++++++++++++-------- src/amd/common/ac_debug.h | 3 +++ 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/amd/common/ac_debug.c b/src/amd/common/ac_debug.c index 79473ec..42a72c0 100644 --- a/src/amd/common/ac_debug.c +++ b/src/amd/common/ac_debug.c @@ -390,12 +390,10 @@ static uint32_t *ac_parse_packet3(FILE *f, uint32_t *ib, int *num_dw, * be NULL. * \param addr_callback_data user data for addr_callback */ -void ac_parse_ib(FILE *f, uint32_t *ib, int num_dw, int trace_id, - const char *name, enum chip_class chip_class, - ac_debug_addr_callback addr_callback, void *addr_callback_data) +void ac_parse_ib_chunk(FILE *f, uint32_t *ib, int num_dw, int trace_id, + enum chip_class chip_class, + ac_debug_addr_callback addr_callback, void *addr_callback_data) { - fprintf(f, "------------------ %s begin ------------------\n", name); - while (num_dw > 0) { unsigned type = PKT_TYPE_G(ib[0]); @@ -420,10 +418,33 @@ void ac_parse_ib(FILE *f, uint32_t *ib, int num_dw, int trace_id, } } - fprintf(f, "------------------- %s end -------------------\n", name); if (num_dw < 0) { - printf("Packet ends after the end of IB.\n"); + printf("\nPacket ends after the end of IB.\n"); exit(0); } - fprintf(f, "\n"); +} + +/** + * Parse and print an IB into a file. + * + * \param f file + * \param ib IB + * \param num_dw size of the IB + * \param chip_class chip class + * \param trace_id the last trace ID that is known to have been reached + * and executed by the CP, typically read from a buffer + * \param addr_callback Get a mapped pointer of the IB at a given address. Can + * be NULL. + * \param addr_callback_data user data for addr_callback + */ +void ac_parse_ib(FILE *f, uint32_t *ib, int num_dw, int trace_id, + const char *name, enum chip_class chip_class, + ac_debug_addr_callback addr_callback, void *addr_callback_data) +{ + fprintf(f, "------------------ %s begin ------------------\n", name); + + ac_parse_ib_chunk(f, ib, num_dw, trace_id, chip_class, addr_callback, + addr_callback_data); + + fprintf(f, "------------------- %s end -------------------\n\n", name); } diff --git a/src/amd/common/ac_debug.h b/src/amd/common/ac_debug.h index 63ac4fa..872420d 100644 --- a/src/amd/common/ac_debug.h +++ b/src/amd/common/ac_debug.h @@ -39,6 +39,9 @@ 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_chunk(FILE *f, uint32_t *ib, int num_dw, int trace_id, + 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, int trace_id, const char *name, enum chip_class chip_class, ac_debug_addr_callback addr_callback, void *addr_callback_data); -- 2.7.4