drm/i915: stop killing pfit on i9xx
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 6 Jun 2013 20:22:47 +0000 (22:22 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 18 Jun 2013 12:05:20 +0000 (14:05 +0200)
Nowadays (i.e. with Valleyview) we also have edp on non-PCH_SPLIT
platforms, so just checking for LVDS is not good enough.

Secondly we have full pfit pipe config tracking, so we'll correctly
disable the pfit as part of the initial modeset.

For fastboot we need a bit of work here to correctly kill unsupported
configs (if e.g. the pfit is used on anything else than the built-in
panel). But since that's not yet supported we don't need to worry.

Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/i915/intel_drv.h
drivers/gpu/drm/i915/intel_lvds.c

index 06b1180c4c1685b60c48445aad89f8d410d0a9de..d617a72cc5c8a525fb2041217ac27a23c5acb461 100644 (file)
@@ -8959,13 +8959,8 @@ static void intel_setup_outputs(struct drm_device *dev)
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct intel_encoder *encoder;
        bool dpd_is_edp = false;
-       bool has_lvds;
 
-       has_lvds = intel_lvds_init(dev);
-       if (!has_lvds && !HAS_PCH_SPLIT(dev)) {
-               /* disable the panel fitter on everything but LVDS */
-               I915_WRITE(PFIT_CONTROL, 0);
-       }
+       intel_lvds_init(dev);
 
        if (!IS_ULT(dev))
                intel_crt_init(dev);
index 02e5d65570662230a7cff8f5d6c2d21c6e024711..ffe9d35b37b4a3482291d849224a604f0c53b6bd 100644 (file)
@@ -582,7 +582,7 @@ extern void intel_mark_busy(struct drm_device *dev);
 extern void intel_mark_fb_busy(struct drm_i915_gem_object *obj,
                               struct intel_ring_buffer *ring);
 extern void intel_mark_idle(struct drm_device *dev);
-extern bool intel_lvds_init(struct drm_device *dev);
+extern void intel_lvds_init(struct drm_device *dev);
 extern bool intel_is_dual_link_lvds(struct drm_device *dev);
 extern void intel_dp_init(struct drm_device *dev, int output_reg,
                          enum port port);
index 10c3d56332f56f638459db3e0e7c8a78e86aa509..eeff28ec2ff42468e2d2a076e35f863edefc22f6 100644 (file)
@@ -877,7 +877,7 @@ static bool intel_lvds_supported(struct drm_device *dev)
  * Create the connector, register the LVDS DDC bus, and try to figure out what
  * modes we can display on the LVDS panel (if present).
  */
-bool intel_lvds_init(struct drm_device *dev)
+void intel_lvds_init(struct drm_device *dev)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct intel_lvds_encoder *lvds_encoder;
@@ -895,35 +895,35 @@ bool intel_lvds_init(struct drm_device *dev)
        u8 pin;
 
        if (!intel_lvds_supported(dev))
-               return false;
+               return;
 
        /* Skip init on machines we know falsely report LVDS */
        if (dmi_check_system(intel_no_lvds))
-               return false;
+               return;
 
        pin = GMBUS_PORT_PANEL;
        if (!lvds_is_present_in_vbt(dev, &pin)) {
                DRM_DEBUG_KMS("LVDS is not present in VBT\n");
-               return false;
+               return;
        }
 
        if (HAS_PCH_SPLIT(dev)) {
                if ((I915_READ(PCH_LVDS) & LVDS_DETECTED) == 0)
-                       return false;
+                       return;
                if (dev_priv->vbt.edp_support) {
                        DRM_DEBUG_KMS("disable LVDS for eDP support\n");
-                       return false;
+                       return;
                }
        }
 
        lvds_encoder = kzalloc(sizeof(struct intel_lvds_encoder), GFP_KERNEL);
        if (!lvds_encoder)
-               return false;
+               return;
 
        lvds_connector = kzalloc(sizeof(struct intel_lvds_connector), GFP_KERNEL);
        if (!lvds_connector) {
                kfree(lvds_encoder);
-               return false;
+               return;
        }
 
        lvds_encoder->attached_connector = lvds_connector;
@@ -1094,7 +1094,7 @@ out:
        intel_panel_init(&intel_connector->panel, fixed_mode);
        intel_panel_setup_backlight(connector);
 
-       return true;
+       return;
 
 failed:
        DRM_DEBUG_KMS("No LVDS modes found, disabling.\n");
@@ -1104,5 +1104,5 @@ failed:
                drm_mode_destroy(dev, fixed_mode);
        kfree(lvds_encoder);
        kfree(lvds_connector);
-       return false;
+       return;
 }