diff mbox

drm/i915: fixup fb bpp computation in pipe_config_set_bpp

Message ID 1364485088-12684-1-git-send-email-daniel.vetter@ffwll.ch (mailing list archive)
State New, archived
Headers show

Commit Message

Daniel Vetter March 28, 2013, 3:38 p.m. UTC
Ville pointed out that my assumption that no unsupported pixel format
can get past the pipe config computation stage to the platform
update_plane callbacks is wrong. The reason is that this function
still checks the old fb->depth value instead of the new pixel_format.

While checking with all the other places that use this I've noticed
that intel_framebuffer_init already has all the platform checks we
need, so replace those checks with a WARN_ON.

Since fb->depth isn't set for YUV pixel formats and since we already
can't create an fb with an rgb layout not support on the running
platform I /think/ this patch doesn't fix any bug.

But it surely looks better!

v2: BGR formats are also only gen4+, so add the corresponding WARN_ON,
too (Ville).

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
 drivers/gpu/drm/i915/intel_display.c |   31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

Comments

Ville Syrjala March 28, 2013, 3:45 p.m. UTC | #1
On Thu, Mar 28, 2013 at 04:38:08PM +0100, Daniel Vetter wrote:
> Ville pointed out that my assumption that no unsupported pixel format
> can get past the pipe config computation stage to the platform
> update_plane callbacks is wrong. The reason is that this function
> still checks the old fb->depth value instead of the new pixel_format.
> 
> While checking with all the other places that use this I've noticed
> that intel_framebuffer_init already has all the platform checks we
> need, so replace those checks with a WARN_ON.
> 
> Since fb->depth isn't set for YUV pixel formats and since we already
> can't create an fb with an rgb layout not support on the running
> platform I /think/ this patch doesn't fix any bug.
> 
> But it surely looks better!
> 
> v2: BGR formats are also only gen4+, so add the corresponding WARN_ON,
> too (Ville).
> 
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

> ---
>  drivers/gpu/drm/i915/intel_display.c |   31 +++++++++++++++++++++----------
>  1 file changed, 21 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 3f3a3dc..5e8b91f 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -7394,23 +7394,34 @@ pipe_config_set_bpp(struct drm_crtc *crtc,
>  	struct drm_connector *connector;
>  	int bpp;
>  
> -	switch (fb->depth) {
> -	case 8:
> +	switch (fb->pixel_format) {
> +	case DRM_FORMAT_C8:
>  		bpp = 8*3; /* since we go through a colormap */
>  		break;
> -	case 15:
> -	case 16:
> +	case DRM_FORMAT_XRGB1555:
> +	case DRM_FORMAT_ARGB1555:
> +		/* checked in intel_framebuffer_init already */
> +		if (WARN_ON(INTEL_INFO(dev)->gen > 3))
> +			return -EINVAL;
> +	case DRM_FORMAT_RGB565:
>  		bpp = 6*3; /* min is 18bpp */
>  		break;
> -	case 24:
> +	case DRM_FORMAT_XBGR8888:
> +	case DRM_FORMAT_ABGR8888:
> +		/* checked in intel_framebuffer_init already */
> +		if (WARN_ON(INTEL_INFO(dev)->gen < 4))
> +			return -EINVAL;
> +	case DRM_FORMAT_XRGB8888:
> +	case DRM_FORMAT_ARGB8888:
>  		bpp = 8*3;
>  		break;
> -	case 30:
> -		if (INTEL_INFO(dev)->gen < 4) {
> -			DRM_DEBUG_KMS("10 bpc not supported on gen2/3\n");
> +	case DRM_FORMAT_XRGB2101010:
> +	case DRM_FORMAT_ARGB2101010:
> +	case DRM_FORMAT_XBGR2101010:
> +	case DRM_FORMAT_ABGR2101010:
> +		/* checked in intel_framebuffer_init already */
> +		if (WARN_ON(INTEL_INFO(dev)->gen < 4))
>  			return -EINVAL;
> -		}
> -
>  		bpp = 10*3;
>  		break;
>  	/* TODO: gen4+ supports 16 bpc floating point, too. */
> -- 
> 1.7.10.4
Daniel Vetter March 28, 2013, 3:55 p.m. UTC | #2
On Thu, Mar 28, 2013 at 05:45:06PM +0200, Ville Syrjälä wrote:
> On Thu, Mar 28, 2013 at 04:38:08PM +0100, Daniel Vetter wrote:
> > Ville pointed out that my assumption that no unsupported pixel format
> > can get past the pipe config computation stage to the platform
> > update_plane callbacks is wrong. The reason is that this function
> > still checks the old fb->depth value instead of the new pixel_format.
> > 
> > While checking with all the other places that use this I've noticed
> > that intel_framebuffer_init already has all the platform checks we
> > need, so replace those checks with a WARN_ON.
> > 
> > Since fb->depth isn't set for YUV pixel formats and since we already
> > can't create an fb with an rgb layout not support on the running
> > platform I /think/ this patch doesn't fix any bug.
> > 
> > But it surely looks better!
> > 
> > v2: BGR formats are also only gen4+, so add the corresponding WARN_ON,
> > too (Ville).
> > 
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> 
> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Both patches merged to dinq, thanks for the review.
-Daniel
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 3f3a3dc..5e8b91f 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -7394,23 +7394,34 @@  pipe_config_set_bpp(struct drm_crtc *crtc,
 	struct drm_connector *connector;
 	int bpp;
 
-	switch (fb->depth) {
-	case 8:
+	switch (fb->pixel_format) {
+	case DRM_FORMAT_C8:
 		bpp = 8*3; /* since we go through a colormap */
 		break;
-	case 15:
-	case 16:
+	case DRM_FORMAT_XRGB1555:
+	case DRM_FORMAT_ARGB1555:
+		/* checked in intel_framebuffer_init already */
+		if (WARN_ON(INTEL_INFO(dev)->gen > 3))
+			return -EINVAL;
+	case DRM_FORMAT_RGB565:
 		bpp = 6*3; /* min is 18bpp */
 		break;
-	case 24:
+	case DRM_FORMAT_XBGR8888:
+	case DRM_FORMAT_ABGR8888:
+		/* checked in intel_framebuffer_init already */
+		if (WARN_ON(INTEL_INFO(dev)->gen < 4))
+			return -EINVAL;
+	case DRM_FORMAT_XRGB8888:
+	case DRM_FORMAT_ARGB8888:
 		bpp = 8*3;
 		break;
-	case 30:
-		if (INTEL_INFO(dev)->gen < 4) {
-			DRM_DEBUG_KMS("10 bpc not supported on gen2/3\n");
+	case DRM_FORMAT_XRGB2101010:
+	case DRM_FORMAT_ARGB2101010:
+	case DRM_FORMAT_XBGR2101010:
+	case DRM_FORMAT_ABGR2101010:
+		/* checked in intel_framebuffer_init already */
+		if (WARN_ON(INTEL_INFO(dev)->gen < 4))
 			return -EINVAL;
-		}
-
 		bpp = 10*3;
 		break;
 	/* TODO: gen4+ supports 16 bpc floating point, too. */