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

Commit 9aa8dcab authored by Sinclair Yeh's avatar Sinclair Yeh
Browse files

drm/vmwgfx: Explicityly track screen target width and height



We can no longer make the assumption that vmw_stdu_update_st() will
be called when there's a valid display surface attached.  So
instead of using display_srf for width and height, make a record of
these paremeters when the screen target is first defined.

Signed-off-by: default avatarSinclair Yeh <syeh@vmware.com>
Reviewed-by: default avatarThomas Hellstrom <thellstrom@vmware.com>
parent f7c478be
Loading
Loading
Loading
Loading
+8 −3
Original line number Original line Diff line number Diff line
@@ -106,6 +106,7 @@ struct vmw_screen_target_display_unit {
	struct vmw_display_unit base;
	struct vmw_display_unit base;
	const struct vmw_surface *display_srf;
	const struct vmw_surface *display_srf;
	enum stdu_content_type content_fb_type;
	enum stdu_content_type content_fb_type;
	s32 display_width, display_height;


	bool defined;
	bool defined;
};
};
@@ -184,6 +185,8 @@ static int vmw_stdu_define_st(struct vmw_private *dev_priv,
	vmw_fifo_commit(dev_priv, sizeof(*cmd));
	vmw_fifo_commit(dev_priv, sizeof(*cmd));


	stdu->defined = true;
	stdu->defined = true;
	stdu->display_width  = mode->hdisplay;
	stdu->display_height = mode->vdisplay;


	return 0;
	return 0;
}
}
@@ -281,7 +284,6 @@ static int vmw_stdu_update_st(struct vmw_private *dev_priv,
			      struct vmw_screen_target_display_unit *stdu)
			      struct vmw_screen_target_display_unit *stdu)
{
{
	struct vmw_stdu_update *cmd;
	struct vmw_stdu_update *cmd;
	struct drm_crtc *crtc = &stdu->base.crtc;


	if (!stdu->defined) {
	if (!stdu->defined) {
		DRM_ERROR("No screen target defined");
		DRM_ERROR("No screen target defined");
@@ -295,8 +297,9 @@ static int vmw_stdu_update_st(struct vmw_private *dev_priv,
		return -ENOMEM;
		return -ENOMEM;
	}
	}


	vmw_stdu_populate_update(cmd, stdu->base.unit, 0, crtc->mode.hdisplay,
	vmw_stdu_populate_update(cmd, stdu->base.unit,
				 0, crtc->mode.vdisplay);
				 0, stdu->display_width,
				 0, stdu->display_height);


	vmw_fifo_commit(dev_priv, sizeof(*cmd));
	vmw_fifo_commit(dev_priv, sizeof(*cmd));


@@ -346,6 +349,8 @@ static int vmw_stdu_destroy_st(struct vmw_private *dev_priv,
		DRM_ERROR("Failed to sync with HW");
		DRM_ERROR("Failed to sync with HW");


	stdu->defined = false;
	stdu->defined = false;
	stdu->display_width  = 0;
	stdu->display_height = 0;


	return ret;
	return ret;
}
}