Re: [patch NOT added to the 3.12 stable tree] drm/vmwgfx: Filter out modes those cannot be supported by the current VRAM size.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]