Commit 3ab1c5cc authored by Rob Clark's avatar Rob Clark
Browse files

drm/msm: Add param for userspace to query suspend count



Performance counts, and ALWAYS_ON counters used for capturing GPU
timestamps, lose their state across suspend/resume cycles.  Userspace
tooling for performance monitoring needs to be aware of this.  For
example, after a suspend userspace needs to recalibrate it's offset
between CPU and GPU time.

Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
Acked-by: default avatarJordan Crouse <jordan@cosmicpenguin.net>
Link: https://lore.kernel.org/r/20210325012358.1759770-3-robdclark@gmail.com


Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
parent f5b1a878
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -273,6 +273,9 @@ int adreno_get_param(struct msm_gpu *gpu, uint32_t param, uint64_t *value)
	case MSM_PARAM_FAULTS:
		*value = gpu->global_faults;
		return 0;
	case MSM_PARAM_SUSPENDS:
		*value = gpu->suspend_count;
		return 0;
	default:
		DBG("%s: invalid param: %u", gpu->name, param);
		return -EINVAL;
+1 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@
 *           GEM object's debug name
 * - 1.5.0 - Add SUBMITQUERY_QUERY ioctl
 * - 1.6.0 - Syncobj support
 * - 1.7.0 - Add MSM_PARAM_SUSPENDS to access suspend count
 */
#define MSM_VERSION_MAJOR	1
#define MSM_VERSION_MINOR	6
+2 −0
Original line number Diff line number Diff line
@@ -251,6 +251,8 @@ int msm_gpu_pm_suspend(struct msm_gpu *gpu)
	if (ret)
		return ret;

	gpu->suspend_count++;

	return 0;
}

+2 −0
Original line number Diff line number Diff line
@@ -152,6 +152,8 @@ struct msm_gpu {
		ktime_t time;
	} devfreq;

	uint32_t suspend_count;

	struct msm_gpu_state *crashstate;
	/* True if the hardware supports expanded apriv (a650 and newer) */
	bool hw_apriv;
+1 −0
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ struct drm_msm_timespec {
#define MSM_PARAM_NR_RINGS   0x07
#define MSM_PARAM_PP_PGTABLE 0x08  /* => 1 for per-process pagetables, else 0 */
#define MSM_PARAM_FAULTS     0x09
#define MSM_PARAM_SUSPENDS   0x0a

struct drm_msm_param {
	__u32 pipe;           /* in, MSM_PIPE_x */