drm/i915/skl: Don't expose the top most plane on gen9 display
authorDamien Lespiau <damien.lespiau@intel.com>
Thu, 16 Jul 2015 16:08:08 +0000 (17:08 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 17 Jul 2015 07:07:47 +0000 (09:07 +0200)
on SKL/BXT, the top most plane hardware is shared between the legacy
cursor registers and an actual plane. Daniel and Ville don't want to
expose 2 DRM planes and would rather expose a CURSOR plane that has all
the usual plane properties, and that's a blocker for lifting the
prelimary_hw_support flag.

Unfortunately noone has had the time to finish this yet, but lifting the
prelimary_hw_support flag is long overdue. As an intermediate solution
we can merely not expose the top most plane

Cc: Imre Deak <imre.deak@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_dma.c

index 5e63076cc7690e2d5c881da8681aecebbda43b70..b1f9e5561cf2c73d1a9ca62536663322cb370ec6 100644 (file)
@@ -726,11 +726,19 @@ static void intel_device_info_runtime_init(struct drm_device *dev)
 
        info = (struct intel_device_info *)&dev_priv->info;
 
+       /*
+        * Skylake and Broxton currently don't expose the topmost plane as its
+        * use is exclusive with the legacy cursor and we only want to expose
+        * one of those, not both. Until we can safely expose the topmost plane
+        * as a DRM_PLANE_TYPE_CURSOR with all the features exposed/supported,
+        * we don't expose the topmost plane at all to prevent ABI breakage
+        * down the line.
+        */
        if (IS_BROXTON(dev)) {
-               info->num_sprites[PIPE_A] = 3;
-               info->num_sprites[PIPE_B] = 3;
-               info->num_sprites[PIPE_C] = 2;
-       } else if (IS_VALLEYVIEW(dev) || INTEL_INFO(dev)->gen == 9)
+               info->num_sprites[PIPE_A] = 2;
+               info->num_sprites[PIPE_B] = 2;
+               info->num_sprites[PIPE_C] = 1;
+       } else if (IS_VALLEYVIEW(dev))
                for_each_pipe(dev_priv, pipe)
                        info->num_sprites[pipe] = 2;
        else