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

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
...@@ -106,6 +106,7 @@ struct vmw_screen_target_display_unit { ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment