drm/i915: DRM_FORMAT_C8 is not possible with Yf tiling
authorPaulo Zanoni <paulo.r.zanoni@intel.com>
Tue, 25 Sep 2018 00:19:11 +0000 (17:19 -0700)
committerPaulo Zanoni <paulo.r.zanoni@intel.com>
Thu, 11 Oct 2018 21:23:02 +0000 (14:23 -0700)
Function intel_framebuffer_init() checks for the possibilities during
framebuffer creation (addfb ioctl time). It is missing the fact that
the indexed format is not supported with Yf tiling.

It is worth noticing that skl_plane_format_mod_supported() correctly
handles for the C8/Yf combination, but this function runs during
modeset time, so we only reject the combination later.

Ville recently proposed a new IGT test that only uses addfb to assert
supported formats, so that IGT was failing. Add the check so we get
green squares right from the start after Ville merges his test.

Also drive-by fix the missing /* fall through */ in the chunk we
modified by just turning it into a "break;" since IMHO breaks are
easier to read than fall-throughs.

BSpec: 18565
Testcase: igt/kms_addfb_basic/expected-formats (not merged yet)
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180925001913.29460-1-paulo.r.zanoni@intel.com
drivers/gpu/drm/i915/intel_display.c

index 2acbba1..980f4ea 100644 (file)
@@ -14278,13 +14278,19 @@ static int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
                        goto err;
                }
                /* fall through */
-       case I915_FORMAT_MOD_Y_TILED:
        case I915_FORMAT_MOD_Yf_TILED:
+               if (mode_cmd->pixel_format == DRM_FORMAT_C8) {
+                       DRM_DEBUG_KMS("Indexed format does not support Yf tiling\n");
+                       goto err;
+               }
+               /* fall through */
+       case I915_FORMAT_MOD_Y_TILED:
                if (INTEL_GEN(dev_priv) < 9) {
                        DRM_DEBUG_KMS("Unsupported tiling 0x%llx!\n",
                                      mode_cmd->modifier[0]);
                        goto err;
                }
+               break;
        case DRM_FORMAT_MOD_LINEAR:
        case I915_FORMAT_MOD_X_TILED:
                break;