summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2013-03-28 16:38:08 +0100
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-03-28 16:55:25 +0100
commitd42264b1fcc0f7b2fc472af6694b098e86e63be0 (patch)
tree102c5ae0bf92c4248ac1239dabb9cc0c8bf74592
parentdrm/i915: check fb->pixel_format instead of bits_per_pixel (diff)
downloadlinux-d42264b1fcc0f7b2fc472af6694b098e86e63be0.tar.xz
linux-d42264b1fcc0f7b2fc472af6694b098e86e63be0.zip
drm/i915: fixup fb bpp computation in pipe_config_set_bpp
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> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/intel_display.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 3f3a3dc7b4da..5e8b91f2c529 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. */