Backport patch attached. On Thu, Nov 13, 2014 at 06:38:34PM +0100, Jiri Slaby wrote: > From: Sinclair Yeh <syeh@xxxxxxxxxx> > > This patch does NOT apply to the 3.12 stable tree. If you still want > it applied, please provide a backport. > > =============== > > commit 9a72384d86b26cb8a2b25106677e1197f606668f upstream. > > When screen objects are enabled, the bpp is assumed to be 32, otherwise > it is set to 16. > > v2: > * Use u32 instead of u64 for assumed_bpp. > * Fixed mechanism to check for screen objects > * Limit the back buffer size to VRAM. > > Signed-off-by: Sinclair Yeh <syeh@xxxxxxxxxx> > Reviewed-by: Thomas Hellstrom <thellstrom@xxxxxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 6 +++++- > drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 16 +++++++++++++--- > 2 files changed, 18 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c > index 7197af157313..25f3c250fd98 100644 > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c > @@ -688,7 +688,11 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset) > goto out_err0; > } > > - if (unlikely(dev_priv->prim_bb_mem < dev_priv->vram_size)) > + /* > + * Limit back buffer size to VRAM size. Remove this once > + * screen targets are implemented. > + */ > + if (dev_priv->prim_bb_mem > dev_priv->vram_size) > dev_priv->prim_bb_mem = dev_priv->vram_size; > > mutex_unlock(&dev_priv->hw_mutex); > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c > index 8fc1e38bbe44..941a7bc0b791 100644 > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c > @@ -1950,6 +1950,14 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector, > DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) > }; > int i; > + u32 assumed_bpp = 2; > + > + /* > + * If using screen objects, then assume 32-bpp because that's what the > + * SVGA device is assuming > + */ > + if (dev_priv->sou_priv) > + assumed_bpp = 4; > > /* Add preferred mode */ > { > @@ -1960,8 +1968,9 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector, > mode->vdisplay = du->pref_height; > vmw_guess_mode_timing(mode); > > - if (vmw_kms_validate_mode_vram(dev_priv, mode->hdisplay * 2, > - mode->vdisplay)) { > + if (vmw_kms_validate_mode_vram(dev_priv, > + mode->hdisplay * assumed_bpp, > + mode->vdisplay)) { > drm_mode_probed_add(connector, mode); > } else { > drm_mode_destroy(dev, mode); > @@ -1983,7 +1992,8 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector, > bmode->vdisplay > max_height) > continue; > > - if (!vmw_kms_validate_mode_vram(dev_priv, bmode->hdisplay * 2, > + if (!vmw_kms_validate_mode_vram(dev_priv, > + bmode->hdisplay * assumed_bpp, > bmode->vdisplay)) > continue; > > -- > 2.1.3 >
>From e9089aac0d6abd4f2d89da5c0f75a66dc64c19e9 Mon Sep 17 00:00:00 2001 From: Sinclair Yeh <syeh@xxxxxxxxxx> Date: Thu, 13 Nov 2014 14:22:10 -0800 Subject: [PATCH] When screen objects are enabled, the bpp is assumed to be 32, otherwise it is set to 16. v2: * Use u32 instead of u64 for assumed_bpp. * Fixed mechanism to check for screen objects * Limit the back buffer size to VRAM. v3: * Backported for 3.12-stable Signed-off-by: Sinclair Yeh <syeh@xxxxxxxxxx> Reviewed-by: Thomas Hellstrom <thellstrom@xxxxxxxxxx> Cc: <stable@xxxxxxxxxxxxxxx> --- drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c index fc43c06..dab6fab 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c @@ -1939,6 +1939,14 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) }; int i; + u32 assumed_bpp = 2; + + /* + * If using screen objects, then assume 32-bpp because that's what the + * SVGA device is assuming + */ + if (dev_priv->sou_priv) + assumed_bpp = 4; /* Add preferred mode */ { @@ -1949,8 +1957,9 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector, mode->vdisplay = du->pref_height; vmw_guess_mode_timing(mode); - if (vmw_kms_validate_mode_vram(dev_priv, mode->hdisplay * 2, - mode->vdisplay)) { + if (vmw_kms_validate_mode_vram(dev_priv, + mode->hdisplay * assumed_bpp, + mode->vdisplay)) { drm_mode_probed_add(connector, mode); } else { drm_mode_destroy(dev, mode); @@ -1972,7 +1981,8 @@ int vmw_du_connector_fill_modes(struct drm_connector *connector, bmode->vdisplay > max_height) continue; - if (!vmw_kms_validate_mode_vram(dev_priv, bmode->hdisplay * 2, + if (!vmw_kms_validate_mode_vram(dev_priv, + bmode->hdisplay * assumed_bpp, bmode->vdisplay)) continue; -- 1.9.1