mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-11 23:50:25 +00:00
drm/msm/adreno: Convert the show/crash file format
Convert the format of the 'show' debugfs file and the crash dump to a format resembling YAML. This should be easier to parse and be more flexible for future changes and expansions. v2: Use a standard .rst for the msm crashdump documentation Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org> Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
c0fec7f562
commit
bcf1d9fa5d
71
Documentation/gpu/msm-crash-dump.rst
Normal file
71
Documentation/gpu/msm-crash-dump.rst
Normal file
@ -0,0 +1,71 @@
|
||||
=====================
|
||||
MSM Crash Dump Format
|
||||
=====================
|
||||
|
||||
Following a GPU hang the MSM driver outputs debugging information via
|
||||
/sys/kernel/dri/X/show or via devcoredump (/sys/class/devcoredump/dcdX/data).
|
||||
This document describes how the output is formatted.
|
||||
|
||||
Each entry is in the form key: value. Sections headers will not have a value
|
||||
and all the contents of a section will be indented two spaces from the header.
|
||||
Each section might have multiple array entries the start of which is designated
|
||||
by a (-).
|
||||
|
||||
Mappings
|
||||
--------
|
||||
|
||||
kernel
|
||||
The kernel version that generated the dump (UTS_RELEASE).
|
||||
|
||||
module
|
||||
The module that generated the crashdump.
|
||||
|
||||
time
|
||||
The kernel time at crash formated as seconds.microseconds.
|
||||
|
||||
comm
|
||||
Comm string for the binary that generated the fault.
|
||||
|
||||
cmdline
|
||||
Command line for the binary that generated the fault.
|
||||
|
||||
revision
|
||||
ID of the GPU that generated the crash formatted as
|
||||
core.major.minor.patchlevel separated by dots.
|
||||
|
||||
rbbm-status
|
||||
The current value of RBBM_STATUS which shows what top level GPU
|
||||
components are in use at the time of crash.
|
||||
|
||||
ringbuffer
|
||||
Section containing the contents of each ringbuffer. Each ringbuffer is
|
||||
identified with an id number.
|
||||
|
||||
id
|
||||
Ringbuffer ID (0 based index). Each ringbuffer in the section
|
||||
will have its own unique id.
|
||||
iova
|
||||
GPU address of the ringbuffer.
|
||||
|
||||
last-fence
|
||||
The last fence that was issued on the ringbuffer
|
||||
|
||||
retired-fence
|
||||
The last fence retired on the ringbuffer.
|
||||
|
||||
rptr
|
||||
The current read pointer (rptr) for the ringbuffer.
|
||||
|
||||
wptr
|
||||
The current write pointer (wptr) for the ringbuffer.
|
||||
|
||||
registers
|
||||
Set of registers values. Each entry is on its own line enclosed
|
||||
by brackets { }.
|
||||
|
||||
offset
|
||||
Byte offset of the register from the start of the
|
||||
GPU memory region.
|
||||
|
||||
value
|
||||
Hexadecimal value of the register.
|
@ -445,23 +445,28 @@ void adreno_show(struct msm_gpu *gpu, struct msm_gpu_state *state,
|
||||
if (IS_ERR_OR_NULL(state))
|
||||
return;
|
||||
|
||||
drm_printf(p, "status: %08x\n", state->rbbm_status);
|
||||
drm_printf(p, "revision: %d (%d.%d.%d.%d)\n",
|
||||
adreno_gpu->info->revn, adreno_gpu->rev.core,
|
||||
adreno_gpu->rev.major, adreno_gpu->rev.minor,
|
||||
adreno_gpu->rev.patchid);
|
||||
|
||||
for (i = 0; i < gpu->nr_rings; i++) {
|
||||
drm_printf(p, "rb %d: fence: %d/%d\n", i,
|
||||
state->ring[i].fence, state->ring[i].seqno);
|
||||
drm_printf(p, "rbbm-status: 0x%08x\n", state->rbbm_status);
|
||||
|
||||
drm_printf(p, " rptr: %d\n", state->ring[i].rptr);
|
||||
drm_printf(p, "rb wptr: %d\n", state->ring[i].wptr);
|
||||
drm_puts(p, "ringbuffer:\n");
|
||||
|
||||
for (i = 0; i < gpu->nr_rings; i++) {
|
||||
drm_printf(p, " - id: %d\n", i);
|
||||
drm_printf(p, " iova: 0x%016llx\n", state->ring[i].iova);
|
||||
drm_printf(p, " last-fence: %d\n", state->ring[i].seqno);
|
||||
drm_printf(p, " retired-fence: %d\n", state->ring[i].fence);
|
||||
drm_printf(p, " rptr: %d\n", state->ring[i].rptr);
|
||||
drm_printf(p, " wptr: %d\n", state->ring[i].wptr);
|
||||
}
|
||||
|
||||
drm_printf(p, "IO:region %s 00000000 00020000\n", gpu->name);
|
||||
drm_puts(p, "registers:\n");
|
||||
|
||||
for (i = 0; i < state->nr_registers; i++) {
|
||||
drm_printf(p, "IO:R %08x %08x\n",
|
||||
drm_printf(p, " - { offset: 0x%04x, value: 0x%08x }\n",
|
||||
state->registers[i * 2] << 2,
|
||||
state->registers[(i * 2) + 1]);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user