Commit 9337d27d authored by Dave Stevenson's avatar Dave Stevenson
Browse files

drm/vc4: crtc: Force trigger of dlist update on margins change



When the margins are changed, the dlist needs to be regenerated
with the changed updated dest regions for each of the planes.

Setting the zpos_changed flag is sufficient to trigger that
without doing a full modeset, therefore set it should the
margins be changed.

Reviewed-by: default avatarMaxime Ripard <mripard@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240621152055.4180873-4-dave.stevenson@raspberrypi.com


Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
parent ac69c01f
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -735,10 +735,17 @@ int vc4_crtc_atomic_check(struct drm_crtc *crtc,
		if (conn_state->crtc != crtc)
			continue;

		vc4_state->margins.left = conn_state->tv.margins.left;
		vc4_state->margins.right = conn_state->tv.margins.right;
		vc4_state->margins.top = conn_state->tv.margins.top;
		vc4_state->margins.bottom = conn_state->tv.margins.bottom;
		if (memcmp(&vc4_state->margins, &conn_state->tv.margins,
			   sizeof(vc4_state->margins))) {
			memcpy(&vc4_state->margins, &conn_state->tv.margins,
			       sizeof(vc4_state->margins));

			/*
			 * Need to force the dlist entries for all planes to be
			 * updated so that the dest rectangles are changed.
			 */
			crtc_state->zpos_changed = true;
		}
		break;
	}

+1 −6
Original line number Diff line number Diff line
@@ -598,12 +598,7 @@ struct vc4_crtc_state {
	bool txp_armed;
	unsigned int assigned_channel;

	struct {
		unsigned int left;
		unsigned int right;
		unsigned int top;
		unsigned int bottom;
	} margins;
	struct drm_connector_tv_margins margins;

	unsigned long hvs_load;