OSDN Git Service

drm/i915: Nuke lvds downclock support
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 18 Jun 2015 08:30:23 +0000 (10:30 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 24 Jun 2015 08:27:26 +0000 (10:27 +0200)
With the new DRRS code it kinda sticks out, and we never managed to
get this to work well enough without causing issues. Time to wave
goodbye.

I've decided to keep the logic for programming the reduced clocks
intact, but everything else is gone. If anyone ever wants to resurrect
this we need to redo it all anyway on top of the frontbuffer tracking.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_params.c
drivers/gpu/drm/i915/intel_bios.c
drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/i915/intel_frontbuffer.c
drivers/gpu/drm/i915/intel_lvds.c

index 92a38ff..ea9caf2 100644 (file)
@@ -1806,9 +1806,6 @@ struct drm_i915_private {
 
        /* Reclocking support */
        bool render_reclock_avail;
-       bool lvds_downclock_avail;
-       /* indicates the reduced downclock for LVDS*/
-       int lvds_downclock;
 
        struct i915_frontbuffer_tracking fb_tracking;
 
@@ -2562,7 +2559,6 @@ struct i915_params {
        int modeset;
        int panel_ignore_lid;
        int semaphores;
-       unsigned int lvds_downclock;
        int lvds_channel_mode;
        int panel_use_ssc;
        int vbt_sdvo_panel_type;
index 18f6559..7983fe4 100644 (file)
@@ -28,7 +28,6 @@ struct i915_params i915 __read_mostly = {
        .modeset = -1,
        .panel_ignore_lid = 1,
        .semaphores = -1,
-       .lvds_downclock = 0,
        .lvds_channel_mode = 0,
        .panel_use_ssc = -1,
        .vbt_sdvo_panel_type = -1,
@@ -84,11 +83,6 @@ MODULE_PARM_DESC(enable_fbc,
        "Enable frame buffer compression for power savings "
        "(default: -1 (use per-chip default))");
 
-module_param_named(lvds_downclock, i915.lvds_downclock, int, 0400);
-MODULE_PARM_DESC(lvds_downclock,
-       "Use panel (LVDS/eDP) downclocking for power savings "
-       "(default: false)");
-
 module_param_named(lvds_channel_mode, i915.lvds_channel_mode, int, 0600);
 MODULE_PARM_DESC(lvds_channel_mode,
         "Specify LVDS channel mode "
index 198fc3c..2ff9eb0 100644 (file)
@@ -122,42 +122,6 @@ fill_detail_timing_data(struct drm_display_mode *panel_fixed_mode,
        drm_mode_set_name(panel_fixed_mode);
 }
 
-static bool
-lvds_dvo_timing_equal_size(const struct lvds_dvo_timing *a,
-                          const struct lvds_dvo_timing *b)
-{
-       if (a->hactive_hi != b->hactive_hi ||
-           a->hactive_lo != b->hactive_lo)
-               return false;
-
-       if (a->hsync_off_hi != b->hsync_off_hi ||
-           a->hsync_off_lo != b->hsync_off_lo)
-               return false;
-
-       if (a->hsync_pulse_width != b->hsync_pulse_width)
-               return false;
-
-       if (a->hblank_hi != b->hblank_hi ||
-           a->hblank_lo != b->hblank_lo)
-               return false;
-
-       if (a->vactive_hi != b->vactive_hi ||
-           a->vactive_lo != b->vactive_lo)
-               return false;
-
-       if (a->vsync_off != b->vsync_off)
-               return false;
-
-       if (a->vsync_pulse_width != b->vsync_pulse_width)
-               return false;
-
-       if (a->vblank_hi != b->vblank_hi ||
-           a->vblank_lo != b->vblank_lo)
-               return false;
-
-       return true;
-}
-
 static const struct lvds_dvo_timing *
 get_lvds_dvo_timing(const struct bdb_lvds_lfp_data *lvds_lfp_data,
                    const struct bdb_lvds_lfp_data_ptrs *lvds_lfp_data_ptrs,
@@ -213,7 +177,7 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv,
        const struct lvds_dvo_timing *panel_dvo_timing;
        const struct lvds_fp_timing *fp_timing;
        struct drm_display_mode *panel_fixed_mode;
-       int i, downclock, drrs_mode;
+       int drrs_mode;
 
        lvds_options = find_section(bdb, BDB_LVDS_OPTIONS);
        if (!lvds_options)
@@ -272,30 +236,6 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv,
        DRM_DEBUG_KMS("Found panel mode in BIOS VBT tables:\n");
        drm_mode_debug_printmodeline(panel_fixed_mode);
 
-       /*
-        * Iterate over the LVDS panel timing info to find the lowest clock
-        * for the native resolution.
-        */
-       downclock = panel_dvo_timing->clock;
-       for (i = 0; i < 16; i++) {
-               const struct lvds_dvo_timing *dvo_timing;
-
-               dvo_timing = get_lvds_dvo_timing(lvds_lfp_data,
-                                                lvds_lfp_data_ptrs,
-                                                i);
-               if (lvds_dvo_timing_equal_size(dvo_timing, panel_dvo_timing) &&
-                   dvo_timing->clock < downclock)
-                       downclock = dvo_timing->clock;
-       }
-
-       if (downclock < panel_dvo_timing->clock && i915.lvds_downclock) {
-               dev_priv->lvds_downclock_avail = 1;
-               dev_priv->lvds_downclock = downclock * 10;
-               DRM_DEBUG_KMS("LVDS downclock is found in VBT. "
-                             "Normal Clock %dKHz, downclock %dKHz\n",
-                             panel_fixed_mode->clock, 10*downclock);
-       }
-
        fp_timing = get_lvds_fp_timing(bdb, lvds_lfp_data,
                                       lvds_lfp_data_ptrs,
                                       lvds_options->panel_type);
index 47c0501..6851943 100644 (file)
@@ -7754,9 +7754,9 @@ static int i9xx_crtc_compute_clock(struct intel_crtc *crtc,
        struct drm_device *dev = crtc->base.dev;
        struct drm_i915_private *dev_priv = dev->dev_private;
        int refclk, num_connectors = 0;
-       intel_clock_t clock, reduced_clock;
-       bool ok, has_reduced_clock = false;
-       bool is_lvds = false, is_dsi = false;
+       intel_clock_t clock;
+       bool ok;
+       bool is_dsi = false;
        struct intel_encoder *encoder;
        const intel_limit_t *limit;
        struct drm_atomic_state *state = crtc_state->base.state;
@@ -7774,9 +7774,6 @@ static int i9xx_crtc_compute_clock(struct intel_crtc *crtc,
                encoder = to_intel_encoder(connector_state->best_encoder);
 
                switch (encoder->type) {
-               case INTEL_OUTPUT_LVDS:
-                       is_lvds = true;
-                       break;
                case INTEL_OUTPUT_DSI:
                        is_dsi = true;
                        break;
@@ -7808,19 +7805,6 @@ static int i9xx_crtc_compute_clock(struct intel_crtc *crtc,
                        return -EINVAL;
                }
 
-               if (is_lvds && dev_priv->lvds_downclock_avail) {
-                       /*
-                        * Ensure we match the reduced clock's P to the target
-                        * clock.  If the clocks don't match, we can't switch
-                        * the display clock by using the FP0/FP1. In such case
-                        * we will disable the LVDS downclock feature.
-                        */
-                       has_reduced_clock =
-                               dev_priv->display.find_dpll(limit, crtc_state,
-                                                           dev_priv->lvds_downclock,
-                                                           refclk, &clock,
-                                                           &reduced_clock);
-               }
                /* Compat-code for transition, will disappear. */
                crtc_state->dpll.n = clock.n;
                crtc_state->dpll.m1 = clock.m1;
@@ -7830,16 +7814,14 @@ static int i9xx_crtc_compute_clock(struct intel_crtc *crtc,
        }
 
        if (IS_GEN2(dev)) {
-               i8xx_compute_dpll(crtc, crtc_state,
-                               has_reduced_clock ? &reduced_clock : NULL,
+               i8xx_compute_dpll(crtc, crtc_state, NULL,
                                  num_connectors);
        } else if (IS_CHERRYVIEW(dev)) {
                chv_compute_dpll(crtc, crtc_state);
        } else if (IS_VALLEYVIEW(dev)) {
                vlv_compute_dpll(crtc, crtc_state);
        } else {
-               i9xx_compute_dpll(crtc, crtc_state,
-                               has_reduced_clock ? &reduced_clock : NULL,
+               i9xx_compute_dpll(crtc, crtc_state, NULL,
                                  num_connectors);
        }
 
@@ -8651,9 +8633,7 @@ static bool ironlake_compute_clocks(struct drm_crtc *crtc,
        struct drm_i915_private *dev_priv = dev->dev_private;
        int refclk;
        const intel_limit_t *limit;
-       bool ret, is_lvds = false;
-
-       is_lvds = intel_pipe_will_have_type(crtc_state, INTEL_OUTPUT_LVDS);
+       bool ret;
 
        refclk = ironlake_get_refclk(crtc_state);
 
@@ -8669,20 +8649,6 @@ static bool ironlake_compute_clocks(struct drm_crtc *crtc,
        if (!ret)
                return false;
 
-       if (is_lvds && dev_priv->lvds_downclock_avail) {
-               /*
-                * Ensure we match the reduced clock's P to the target clock.
-                * If the clocks don't match, we can't switch the display clock
-                * by using the FP0/FP1. In such case we will disable the LVDS
-                * downclock feature.
-               */
-               *has_reduced_clock =
-                       dev_priv->display.find_dpll(limit, crtc_state,
-                                                   dev_priv->lvds_downclock,
-                                                   refclk, clock,
-                                                   reduced_clock);
-       }
-
        return true;
 }
 
@@ -10620,42 +10586,6 @@ struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
        return mode;
 }
 
-static void intel_decrease_pllclock(struct drm_crtc *crtc)
-{
-       struct drm_device *dev = crtc->dev;
-       struct drm_i915_private *dev_priv = dev->dev_private;
-       struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
-
-       if (!HAS_GMCH_DISPLAY(dev))
-               return;
-
-       if (!dev_priv->lvds_downclock_avail)
-               return;
-
-       /*
-        * Since this is called by a timer, we should never get here in
-        * the manual case.
-        */
-       if (!HAS_PIPE_CXSR(dev) && intel_crtc->lowfreq_avail) {
-               int pipe = intel_crtc->pipe;
-               int dpll_reg = DPLL(pipe);
-               int dpll;
-
-               DRM_DEBUG_DRIVER("downclocking LVDS\n");
-
-               assert_panel_unlocked(dev_priv, pipe);
-
-               dpll = I915_READ(dpll_reg);
-               dpll |= DISPLAY_RATE_SELECT_FPA1;
-               I915_WRITE(dpll_reg, dpll);
-               intel_wait_for_vblank(dev, pipe);
-               dpll = I915_READ(dpll_reg);
-               if (!(dpll & DISPLAY_RATE_SELECT_FPA1))
-                       DRM_DEBUG_DRIVER("failed to downclock LVDS!\n");
-       }
-
-}
-
 void intel_mark_busy(struct drm_device *dev)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
@@ -10673,20 +10603,12 @@ void intel_mark_busy(struct drm_device *dev)
 void intel_mark_idle(struct drm_device *dev)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
-       struct drm_crtc *crtc;
 
        if (!dev_priv->mm.busy)
                return;
 
        dev_priv->mm.busy = false;
 
-       for_each_crtc(dev, crtc) {
-               if (!crtc->primary->fb)
-                       continue;
-
-               intel_decrease_pllclock(crtc);
-       }
-
        if (INTEL_INFO(dev)->gen >= 6)
                gen6_rps_idle(dev->dev_private);
 
index 16e699d..6e90e2b 100644 (file)
 #include "intel_drv.h"
 #include "i915_drv.h"
 
-static void intel_increase_pllclock(struct drm_device *dev,
-                                   enum pipe pipe)
-{
-       struct drm_i915_private *dev_priv = dev->dev_private;
-       int dpll_reg = DPLL(pipe);
-       int dpll;
-
-       if (!HAS_GMCH_DISPLAY(dev))
-               return;
-
-       if (!dev_priv->lvds_downclock_avail)
-               return;
-
-       dpll = I915_READ(dpll_reg);
-       if (!HAS_PIPE_CXSR(dev) && (dpll & DISPLAY_RATE_SELECT_FPA1)) {
-               DRM_DEBUG_DRIVER("upclocking LVDS\n");
-
-               assert_panel_unlocked(dev_priv, pipe);
-
-               dpll &= ~DISPLAY_RATE_SELECT_FPA1;
-               I915_WRITE(dpll_reg, dpll);
-               intel_wait_for_vblank(dev, pipe);
-
-               dpll = I915_READ(dpll_reg);
-               if (dpll & DISPLAY_RATE_SELECT_FPA1)
-                       DRM_DEBUG_DRIVER("failed to upclock LVDS!\n");
-       }
-}
-
-/**
- * intel_mark_fb_busy - mark given planes as busy
- * @dev: DRM device
- * @frontbuffer_bits: bits for the affected planes
- *
- * This function gets called every time the screen contents change. It can be
- * used to keep e.g. the update rate at the nominal refresh rate with DRRS.
- */
-static void intel_mark_fb_busy(struct drm_device *dev,
-                              unsigned frontbuffer_bits)
-{
-       struct drm_i915_private *dev_priv = dev->dev_private;
-       enum pipe pipe;
-
-       for_each_pipe(dev_priv, pipe) {
-               if (!(frontbuffer_bits & INTEL_FRONTBUFFER_ALL_MASK(pipe)))
-                       continue;
-
-               intel_increase_pllclock(dev, pipe);
-       }
-}
-
 /**
  * intel_fb_obj_invalidate - invalidate frontbuffer object
  * @obj: GEM object to invalidate
@@ -147,8 +96,6 @@ void intel_fb_obj_invalidate(struct drm_i915_gem_object *obj,
                mutex_unlock(&dev_priv->fb_tracking.lock);
        }
 
-       intel_mark_fb_busy(dev, obj->frontbuffer_bits);
-
        intel_psr_invalidate(dev, obj->frontbuffer_bits);
        intel_edp_drrs_invalidate(dev, obj->frontbuffer_bits);
        intel_fbc_invalidate(dev_priv, obj->frontbuffer_bits, origin);
@@ -178,8 +125,6 @@ void intel_frontbuffer_flush(struct drm_device *dev,
        if (!frontbuffer_bits)
                return;
 
-       intel_mark_fb_busy(dev, frontbuffer_bits);
-
        intel_edp_drrs_flush(dev, frontbuffer_bits);
        intel_psr_flush(dev, frontbuffer_bits);
        intel_fbc_flush(dev_priv, frontbuffer_bits);
index bf1702a..ea85547 100644 (file)
@@ -1072,24 +1072,8 @@ void intel_lvds_init(struct drm_device *dev)
                        drm_mode_debug_printmodeline(scan);
 
                        fixed_mode = drm_mode_duplicate(dev, scan);
-                       if (fixed_mode) {
-                               downclock_mode =
-                                       intel_find_panel_downclock(dev,
-                                       fixed_mode, connector);
-                               if (downclock_mode != NULL &&
-                                       i915.lvds_downclock) {
-                                       /* We found the downclock for LVDS. */
-                                       dev_priv->lvds_downclock_avail = true;
-                                       dev_priv->lvds_downclock =
-                                               downclock_mode->clock;
-                                       DRM_DEBUG_KMS("LVDS downclock is found"
-                                       " in EDID. Normal clock %dKhz, "
-                                       "downclock %dKhz\n",
-                                       fixed_mode->clock,
-                                       dev_priv->lvds_downclock);
-                               }
+                       if (fixed_mode)
                                goto out;
-                       }
                }
        }