summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/vmwgfx
diff options
context:
space:
mode:
authorSinclair Yeh <syeh@vmware.com>2017-03-24 00:40:04 +0300
committerSinclair Yeh <syeh@vmware.com>2017-04-01 01:21:14 +0300
commit9aa8dcab7e44288c6fd620c5b831d2ca535866c2 (patch)
tree106fa9b8d158d6cdcabea3a7263c8d4b981ee420 /drivers/gpu/drm/vmwgfx
parentf7c478be0abb5f6db5dfa13bb8118628817b9afe (diff)
downloadlinux-9aa8dcab7e44288c6fd620c5b831d2ca535866c2.tar.xz
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: Sinclair Yeh <syeh@vmware.com> Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Diffstat (limited to 'drivers/gpu/drm/vmwgfx')
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
index e5a38f4ddb62..2757cda391bb 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
@@ -106,6 +106,7 @@ struct vmw_screen_target_display_unit {
struct vmw_display_unit base;
const struct vmw_surface *display_srf;
enum stdu_content_type content_fb_type;
+ s32 display_width, display_height;
bool defined;
};
@@ -184,6 +185,8 @@ static int vmw_stdu_define_st(struct vmw_private *dev_priv,
vmw_fifo_commit(dev_priv, sizeof(*cmd));
stdu->defined = true;
+ stdu->display_width = mode->hdisplay;
+ stdu->display_height = mode->vdisplay;
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_stdu_update *cmd;
- struct drm_crtc *crtc = &stdu->base.crtc;
if (!stdu->defined) {
DRM_ERROR("No screen target defined");
@@ -295,8 +297,9 @@ static int vmw_stdu_update_st(struct vmw_private *dev_priv,
return -ENOMEM;
}
- vmw_stdu_populate_update(cmd, stdu->base.unit, 0, crtc->mode.hdisplay,
- 0, crtc->mode.vdisplay);
+ vmw_stdu_populate_update(cmd, stdu->base.unit,
+ 0, stdu->display_width,
+ 0, stdu->display_height);
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");
stdu->defined = false;
+ stdu->display_width = 0;
+ stdu->display_height = 0;
return ret;
}