msm: kgsl: handle all indirect buffer types in postmortem
Postmortem dump was not parsing CP_INDIRECT_BUFFER_PFE commands. Snapshot was recently fixed to handle this, and this change extends support to postmortem dump.
This commit is contained in:
parent
543247cd01
commit
93d86da2ee
drivers/gpu/msm
@ -163,6 +163,13 @@
|
||||
|
||||
#define CP_LOAD_STATE 0x30 /* load high level sequencer command */
|
||||
|
||||
/* Conditionally load a IB based on a flag */
|
||||
#define CP_COND_INDIRECT_BUFFER_PFE 0x3A /* prefetch enabled */
|
||||
#define CP_COND_INDIRECT_BUFFER_PFD 0x32 /* prefetch disabled */
|
||||
|
||||
/* Load a buffer with pre-fetch enabled */
|
||||
#define CP_INDIRECT_BUFFER_PFE 0x3F
|
||||
|
||||
#define CP_LOADSTATE_DSTOFFSET_SHIFT 0x00000000
|
||||
#define CP_LOADSTATE_STATESRC_SHIFT 0x00000010
|
||||
#define CP_LOADSTATE_STATEBLOCKID_SHIFT 0x00000013
|
||||
@ -202,4 +209,14 @@
|
||||
/* gmem command buffer length */
|
||||
#define CP_REG(reg) ((0x4 << 16) | (SUBBLOCK_OFFSET(reg)))
|
||||
|
||||
|
||||
/* Return 1 if the command is an indirect buffer of any kind */
|
||||
static inline int adreno_cmd_is_ib(unsigned int cmd)
|
||||
{
|
||||
return (cmd == cp_type3_packet(CP_INDIRECT_BUFFER_PFE, 2) ||
|
||||
cmd == cp_type3_packet(CP_INDIRECT_BUFFER_PFD, 2) ||
|
||||
cmd == cp_type3_packet(CP_COND_INDIRECT_BUFFER_PFE, 2) ||
|
||||
cmd == cp_type3_packet(CP_COND_INDIRECT_BUFFER_PFD, 2));
|
||||
}
|
||||
|
||||
#endif /* __ADRENO_PM4TYPES_H */
|
||||
|
@ -288,7 +288,7 @@ static void dump_ib1(struct kgsl_device *device, uint32_t pt_base,
|
||||
|
||||
for (i = 0; i+3 < ib1_size; ) {
|
||||
value = ib1_addr[i++];
|
||||
if (value == cp_type3_packet(CP_INDIRECT_BUFFER_PFD, 2)) {
|
||||
if (adreno_cmd_is_ib(value)) {
|
||||
uint32_t ib2_base = ib1_addr[i++];
|
||||
uint32_t ib2_size = ib1_addr[i++];
|
||||
|
||||
@ -714,7 +714,7 @@ static int adreno_dump(struct kgsl_device *device)
|
||||
i = 0;
|
||||
for (read_idx = 0; read_idx < num_item; ) {
|
||||
uint32_t this_cmd = rb_copy[read_idx++];
|
||||
if (this_cmd == cp_type3_packet(CP_INDIRECT_BUFFER_PFD, 2)) {
|
||||
if (adreno_cmd_is_ib(this_cmd)) {
|
||||
uint32_t ib_addr = rb_copy[read_idx++];
|
||||
uint32_t ib_size = rb_copy[read_idx++];
|
||||
dump_ib1(device, cur_pt_base, (read_idx-3)<<2, ib_addr,
|
||||
@ -746,8 +746,7 @@ static int adreno_dump(struct kgsl_device *device)
|
||||
for (read_idx = NUM_DWORDS_OF_RINGBUFFER_HISTORY;
|
||||
read_idx >= 0; --read_idx) {
|
||||
uint32_t this_cmd = rb_copy[read_idx];
|
||||
if (this_cmd == cp_type3_packet(
|
||||
CP_INDIRECT_BUFFER_PFD, 2)) {
|
||||
if (adreno_cmd_is_ib(this_cmd)) {
|
||||
uint32_t ib_addr = rb_copy[read_idx+1];
|
||||
uint32_t ib_size = rb_copy[read_idx+2];
|
||||
if (ib_size && cp_ib1_base == ib_addr) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user