Commit af1f5f12 authored by Rob Clark's avatar Rob Clark
Browse files

drm/msm/mdp5: fix unclocked register access in _cursor_set()



Fixes an insta-reboot when screen-blanking kicks in, due to cursor
updates without clocks enabled.

Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
parent 71e3dfa1
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -753,6 +753,7 @@ static int mdp5_crtc_cursor_set(struct drm_crtc *crtc,
	if (!handle) {
		DBG("Cursor off");
		cursor_enable = false;
		mdp5_enable(mdp5_kms);
		goto set_cursor;
	}

@@ -776,6 +777,8 @@ static int mdp5_crtc_cursor_set(struct drm_crtc *crtc,

	get_roi(crtc, &roi_w, &roi_h);

	mdp5_enable(mdp5_kms);

	mdp5_write(mdp5_kms, REG_MDP5_LM_CURSOR_STRIDE(lm), stride);
	mdp5_write(mdp5_kms, REG_MDP5_LM_CURSOR_FORMAT(lm),
			MDP5_LM_CURSOR_FORMAT_FORMAT(CURSOR_FMT_ARGB8888));
@@ -804,6 +807,7 @@ set_cursor:
	crtc_flush(crtc, flush_mask);

end:
	mdp5_disable(mdp5_kms);
	if (old_bo) {
		drm_flip_work_queue(&mdp5_crtc->unref_cursor_work, old_bo);
		/* enable vblank to complete cursor work: */
@@ -836,6 +840,8 @@ static int mdp5_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)

	get_roi(crtc, &roi_w, &roi_h);

	mdp5_enable(mdp5_kms);

	spin_lock_irqsave(&mdp5_crtc->cursor.lock, flags);
	mdp5_write(mdp5_kms, REG_MDP5_LM_CURSOR_SIZE(lm),
			MDP5_LM_CURSOR_SIZE_ROI_H(roi_h) |
@@ -847,6 +853,8 @@ static int mdp5_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)

	crtc_flush(crtc, flush_mask);

	mdp5_disable(mdp5_kms);

	return 0;
}