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

Commit 912fd021 authored by Dhaval Patel's avatar Dhaval Patel Committed by Steve Cohen
Browse files

drm/msm/sde: print timeline status information for fence_timeout



Buffers shared between display and graphics modules are
used based on fence trigger status. It is useful to print
all display timeline information when input buffer fence
times out. That helps to identify the cases where display
is holding buffers and causing graphics to release the current
buffer for composition cycle.

Change-Id: I26f1f8997459e1463d6d121bf4abb78235dc1a49
Signed-off-by: default avatarDhaval Patel <pdhaval@codeaurora.org>
parent ec38c8b1
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -992,6 +992,19 @@ static int sde_connector_atomic_get_property(struct drm_connector *connector,
	return rc;
}

void sde_conn_timeline_status(struct drm_connector *conn)
{
	struct sde_connector *c_conn;

	if (!conn) {
		SDE_ERROR("invalid connector\n");
		return;
	}

	c_conn = to_sde_connector(conn);
	sde_fence_timeline_status(&c_conn->retire_fence, &conn->base);
}

void sde_connector_prepare_fence(struct drm_connector *connector)
{
	if (!connector) {
+5 −0
Original line number Diff line number Diff line
@@ -639,4 +639,9 @@ int sde_connector_helper_reset_custom_properties(
int sde_connector_get_mode_info(struct drm_connector_state *conn_state,
	struct msm_mode_info *mode_info);

/**
 * sde_conn_timeline_status - current buffer timeline status
 * conn: Pointer to drm_connector struct
 */
void sde_conn_timeline_status(struct drm_connector *conn);
#endif /* _SDE_CONNECTOR_H_ */
+13 −0
Original line number Diff line number Diff line
@@ -1841,6 +1841,19 @@ static int _sde_crtc_set_dest_scaler_lut(struct sde_crtc *sde_crtc,
	return ret;
}

void sde_crtc_timeline_status(struct drm_crtc *crtc)
{
	struct sde_crtc *sde_crtc;

	if (!crtc) {
		SDE_ERROR("invalid crtc\n");
		return;
	}

	sde_crtc = to_sde_crtc(crtc);
	sde_fence_timeline_status(&sde_crtc->output_fence, &crtc->base);
}

/**
 * sde_crtc_secure_ctrl - Initiates the operations to switch between secure
 *                       and non-secure mode
+5 −0
Original line number Diff line number Diff line
@@ -724,4 +724,9 @@ int sde_crtc_secure_ctrl(struct drm_crtc *crtc, bool post_commit);
int sde_crtc_helper_reset_custom_properties(struct drm_crtc *crtc,
		struct drm_crtc_state *crtc_state);

/**
 * sde_crtc_timeline_status - current buffer timeline status
 * @crtc: Pointer to crtc
 */
void sde_crtc_timeline_status(struct drm_crtc *crtc);
#endif /* _SDE_CRTC_H_ */
+27 −0
Original line number Diff line number Diff line
@@ -402,3 +402,30 @@ void sde_fence_signal(struct sde_fence_context *ctx, ktime_t ts,

	_sde_fence_trigger(ctx, ts);
}

void sde_fence_timeline_status(struct sde_fence_context *ctx,
					struct drm_mode_object *drm_obj)
{
	char *obj_name;

	if (!ctx || !drm_obj) {
		SDE_ERROR("invalid input params\n");
		return;
	}

	switch (drm_obj->type) {
	case DRM_MODE_OBJECT_CRTC:
		obj_name = "crtc";
		break;
	case DRM_MODE_OBJECT_CONNECTOR:
		obj_name = "connector";
		break;
	default:
		obj_name = "unknown";
		break;
	}

	SDE_ERROR("drm obj:%s id:%d type:0x%x done_count:%d commit_count:%d\n",
		obj_name, drm_obj->id, drm_obj->type, ctx->done_count,
		ctx->commit_count);
}
Loading