Commit 79c21187 authored by Rob Clark's avatar Rob Clark

drm/msm/rd: add module param to dump all bo's

By default, if using $debugfs/.../rd to log cmdstream, only the
cmdstream buffers themselves are logged.  But in some cases we want
to capture other buffers in the submit (to see VBO's or shaders).
So add a mod-param knob to control this.
Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
parent 6507e799
...@@ -27,6 +27,11 @@ ...@@ -27,6 +27,11 @@
* This bypasses drm_debugfs_create_files() mainly because we need to use * This bypasses drm_debugfs_create_files() mainly because we need to use
* our own fops for a bit more control. In particular, we don't want to * our own fops for a bit more control. In particular, we don't want to
* do anything if userspace doesn't have the debugfs file open. * do anything if userspace doesn't have the debugfs file open.
*
* The module-param "rd_full", which defaults to false, enables snapshotting
* all (non-written) buffers in the submit, rather than just cmdstream bo's.
* This is useful to capture the contents of (for example) vbo's or textures,
* or shader programs (if not emitted inline in cmdstream).
*/ */
#ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS
...@@ -40,6 +45,10 @@ ...@@ -40,6 +45,10 @@
#include "msm_gpu.h" #include "msm_gpu.h"
#include "msm_gem.h" #include "msm_gem.h"
static bool rd_full = false;
MODULE_PARM_DESC(rd_full, "If true, $debugfs/.../rd will snapshot all buffer contents");
module_param_named(rd_full, rd_full, bool, 0600);
enum rd_sect_type { enum rd_sect_type {
RD_NONE, RD_NONE,
RD_TEST, /* ascii text */ RD_TEST, /* ascii text */
...@@ -288,7 +297,12 @@ static void snapshot_buf(struct msm_rd_state *rd, ...@@ -288,7 +297,12 @@ static void snapshot_buf(struct msm_rd_state *rd,
if (IS_ERR(buf)) if (IS_ERR(buf))
return; return;
buf += iova - submit->bos[idx].iova; if (iova) {
buf += iova - submit->bos[idx].iova;
} else {
iova = submit->bos[idx].iova;
size = obj->base.size;
}
rd_write_section(rd, RD_GPUADDR, rd_write_section(rd, RD_GPUADDR,
(uint32_t[2]){ iova, size }, 8); (uint32_t[2]){ iova, size }, 8);
...@@ -320,17 +334,27 @@ void msm_rd_dump_submit(struct msm_gem_submit *submit) ...@@ -320,17 +334,27 @@ void msm_rd_dump_submit(struct msm_gem_submit *submit)
rd_write_section(rd, RD_CMD, msg, ALIGN(n, 4)); rd_write_section(rd, RD_CMD, msg, ALIGN(n, 4));
/* could be nice to have an option (module-param?) to snapshot if (rd_full) {
* all the bo's associated with the submit. Handy to see vtx for (i = 0; i < submit->nr_bos; i++) {
* buffers, etc. For now just the cmdstream bo's is enough. /* buffers that are written to probably don't start out
*/ * with anything interesting:
*/
if (submit->bos[i].flags & MSM_SUBMIT_BO_WRITE)
continue;
snapshot_buf(rd, submit, i, 0, 0);
}
}
for (i = 0; i < submit->nr_cmds; i++) { for (i = 0; i < submit->nr_cmds; i++) {
uint32_t iova = submit->cmd[i].iova; uint32_t iova = submit->cmd[i].iova;
uint32_t szd = submit->cmd[i].size; /* in dwords */ uint32_t szd = submit->cmd[i].size; /* in dwords */
snapshot_buf(rd, submit, submit->cmd[i].idx, /* snapshot cmdstream bo's (if we haven't already): */
submit->cmd[i].iova, szd * 4); if (!rd_full) {
snapshot_buf(rd, submit, submit->cmd[i].idx,
submit->cmd[i].iova, szd * 4);
}
switch (submit->cmd[i].type) { switch (submit->cmd[i].type) {
case MSM_SUBMIT_CMD_IB_TARGET_BUF: case MSM_SUBMIT_CMD_IB_TARGET_BUF:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment