diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/debug_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/debug_gk20a.c | 59 |
1 files changed, 28 insertions, 31 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/debug_gk20a.c b/drivers/gpu/nvgpu/gk20a/debug_gk20a.c index c2285c8a..a3fa2ea5 100644 --- a/drivers/gpu/nvgpu/gk20a/debug_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/debug_gk20a.c | |||
@@ -36,7 +36,7 @@ unsigned int gk20a_debug_trace_cmdbuf; | |||
36 | struct ch_state { | 36 | struct ch_state { |
37 | int pid; | 37 | int pid; |
38 | int refs; | 38 | int refs; |
39 | u8 inst_block[0]; | 39 | u32 inst_block[0]; |
40 | }; | 40 | }; |
41 | 41 | ||
42 | static const char * const ccsr_chan_status_str[] = { | 42 | static const char * const ccsr_chan_status_str[] = { |
@@ -108,15 +108,15 @@ static void gk20a_debug_show_channel(struct gk20a *g, | |||
108 | u32 channel = gk20a_readl(g, ccsr_channel_r(hw_chid)); | 108 | u32 channel = gk20a_readl(g, ccsr_channel_r(hw_chid)); |
109 | u32 status = ccsr_channel_status_v(channel); | 109 | u32 status = ccsr_channel_status_v(channel); |
110 | u32 syncpointa, syncpointb; | 110 | u32 syncpointa, syncpointb; |
111 | void *inst_ptr; | 111 | u32 *inst_mem; |
112 | 112 | ||
113 | if (!ch_state) | 113 | if (!ch_state) |
114 | return; | 114 | return; |
115 | 115 | ||
116 | inst_ptr = &ch_state->inst_block[0]; | 116 | inst_mem = &ch_state->inst_block[0]; |
117 | 117 | ||
118 | syncpointa = gk20a_mem_rd32(inst_ptr, ram_fc_syncpointa_w()); | 118 | syncpointa = inst_mem[ram_fc_syncpointa_w()]; |
119 | syncpointb = gk20a_mem_rd32(inst_ptr, ram_fc_syncpointb_w()); | 119 | syncpointb = inst_mem[ram_fc_syncpointb_w()]; |
120 | 120 | ||
121 | gk20a_debug_output(o, "%d-%s, pid %d, refs: %d: ", hw_chid, | 121 | gk20a_debug_output(o, "%d-%s, pid %d, refs: %d: ", hw_chid, |
122 | dev_name(g->dev), | 122 | dev_name(g->dev), |
@@ -129,23 +129,22 @@ static void gk20a_debug_show_channel(struct gk20a *g, | |||
129 | gk20a_debug_output(o, "TOP: %016llx PUT: %016llx GET: %016llx " | 129 | gk20a_debug_output(o, "TOP: %016llx PUT: %016llx GET: %016llx " |
130 | "FETCH: %016llx\nHEADER: %08x COUNT: %08x\n" | 130 | "FETCH: %016llx\nHEADER: %08x COUNT: %08x\n" |
131 | "SYNCPOINT %08x %08x SEMAPHORE %08x %08x %08x %08x\n", | 131 | "SYNCPOINT %08x %08x SEMAPHORE %08x %08x %08x %08x\n", |
132 | (u64)gk20a_mem_rd32(inst_ptr, ram_fc_pb_top_level_get_w()) + | 132 | (u64)inst_mem[ram_fc_pb_top_level_get_w()] + |
133 | ((u64)gk20a_mem_rd32(inst_ptr, | 133 | ((u64)inst_mem[ram_fc_pb_top_level_get_hi_w()] << 32ULL), |
134 | ram_fc_pb_top_level_get_hi_w()) << 32ULL), | 134 | (u64)inst_mem[ram_fc_pb_put_w()] + |
135 | (u64)gk20a_mem_rd32(inst_ptr, ram_fc_pb_put_w()) + | 135 | ((u64)inst_mem[ram_fc_pb_put_hi_w()] << 32ULL), |
136 | ((u64)gk20a_mem_rd32(inst_ptr, ram_fc_pb_put_hi_w()) << 32ULL), | 136 | (u64)inst_mem[ram_fc_pb_get_w()] + |
137 | (u64)gk20a_mem_rd32(inst_ptr, ram_fc_pb_get_w()) + | 137 | ((u64)inst_mem[ram_fc_pb_get_hi_w()] << 32ULL), |
138 | ((u64)gk20a_mem_rd32(inst_ptr, ram_fc_pb_get_hi_w()) << 32ULL), | 138 | (u64)inst_mem[ram_fc_pb_fetch_w()] + |
139 | (u64)gk20a_mem_rd32(inst_ptr, ram_fc_pb_fetch_w()) + | 139 | ((u64)inst_mem[ram_fc_pb_fetch_hi_w()] << 32ULL), |
140 | ((u64)gk20a_mem_rd32(inst_ptr, ram_fc_pb_fetch_hi_w()) << 32ULL), | 140 | inst_mem[ram_fc_pb_header_w()], |
141 | gk20a_mem_rd32(inst_ptr, ram_fc_pb_header_w()), | 141 | inst_mem[ram_fc_pb_count_w()], |
142 | gk20a_mem_rd32(inst_ptr, ram_fc_pb_count_w()), | ||
143 | syncpointa, | 142 | syncpointa, |
144 | syncpointb, | 143 | syncpointb, |
145 | gk20a_mem_rd32(inst_ptr, ram_fc_semaphorea_w()), | 144 | inst_mem[ram_fc_semaphorea_w()], |
146 | gk20a_mem_rd32(inst_ptr, ram_fc_semaphoreb_w()), | 145 | inst_mem[ram_fc_semaphoreb_w()], |
147 | gk20a_mem_rd32(inst_ptr, ram_fc_semaphorec_w()), | 146 | inst_mem[ram_fc_semaphorec_w()], |
148 | gk20a_mem_rd32(inst_ptr, ram_fc_semaphored_w())); | 147 | inst_mem[ram_fc_semaphored_w()]); |
149 | 148 | ||
150 | #ifdef CONFIG_TEGRA_GK20A | 149 | #ifdef CONFIG_TEGRA_GK20A |
151 | if ((pbdma_syncpointb_op_v(syncpointb) == pbdma_syncpointb_op_wait_v()) | 150 | if ((pbdma_syncpointb_op_v(syncpointb) == pbdma_syncpointb_op_wait_v()) |
@@ -246,17 +245,15 @@ void gk20a_debug_show_dump(struct gk20a *g, struct gk20a_debug_output *o) | |||
246 | 245 | ||
247 | for (chid = 0; chid < f->num_channels; chid++) { | 246 | for (chid = 0; chid < f->num_channels; chid++) { |
248 | struct channel_gk20a *ch = &f->channel[chid]; | 247 | struct channel_gk20a *ch = &f->channel[chid]; |
249 | if (ch_state[chid]) { | 248 | if (!ch_state[chid]) |
250 | if (ch->inst_block.cpu_va) { | 249 | continue; |
251 | ch_state[chid]->pid = ch->pid; | 250 | |
252 | ch_state[chid]->refs = | 251 | ch_state[chid]->pid = ch->pid; |
253 | atomic_read(&ch->ref_count); | 252 | ch_state[chid]->refs = atomic_read(&ch->ref_count); |
254 | memcpy(&ch_state[chid]->inst_block[0], | 253 | gk20a_mem_rd_n(g, &ch->inst_block, 0, |
255 | ch->inst_block.cpu_va, | 254 | &ch_state[chid]->inst_block[0], |
256 | ram_in_alloc_size_v()); | 255 | ram_in_alloc_size_v()); |
257 | } | 256 | gk20a_channel_put(ch); |
258 | gk20a_channel_put(ch); | ||
259 | } | ||
260 | } | 257 | } |
261 | for (chid = 0; chid < f->num_channels; chid++) { | 258 | for (chid = 0; chid < f->num_channels; chid++) { |
262 | if (ch_state[chid]) { | 259 | if (ch_state[chid]) { |