Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+31 −7
Original line number Diff line number Diff line
@@ -27,6 +27,11 @@
 * 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
 * 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
@@ -40,6 +45,10 @@
#include "msm_gpu.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 {
	RD_NONE,
	RD_TEST,       /* ascii text */
@@ -288,7 +297,12 @@ static void snapshot_buf(struct msm_rd_state *rd,
	if (IS_ERR(buf))
		return;

	if (iova) {
		buf += iova - submit->bos[idx].iova;
	} else {
		iova = submit->bos[idx].iova;
		size = obj->base.size;
	}

	rd_write_section(rd, RD_GPUADDR,
			(uint32_t[2]){ iova, size }, 8);
@@ -320,17 +334,27 @@ void msm_rd_dump_submit(struct msm_gem_submit *submit)

	rd_write_section(rd, RD_CMD, msg, ALIGN(n, 4));

	/* could be nice to have an option (module-param?) to snapshot
	 * all the bo's associated with the submit.  Handy to see vtx
	 * buffers, etc.  For now just the cmdstream bo's is enough.
	if (rd_full) {
		for (i = 0; i < submit->nr_bos; i++) {
			/* 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++) {
		uint32_t iova = submit->cmd[i].iova;
		uint32_t szd  = submit->cmd[i].size; /* in dwords */

		/* snapshot cmdstream bo's (if we haven't already): */
		if (!rd_full) {
			snapshot_buf(rd, submit, submit->cmd[i].idx,
					submit->cmd[i].iova, szd * 4);
		}

		switch (submit->cmd[i].type) {
		case MSM_SUBMIT_CMD_IB_TARGET_BUF: