1. 26 8月, 2015 5 次提交
    • V
      drm/i915: Implement PHY lane power gating for CHV · e0fce78f
      Ville Syrjälä 提交于
      Powergate the PHY lanes when they're not needed. For HDMI all four lanes
      are needed always, but for DP we can enable only the needed lanes. To
      power down the unused lanes we use some power down override bits in the
      DISPLAY_PHY_CONTROL register. Without the overrides it appears that the
      hardware always powers on all the lanes. When the port is disabled the
      power down override is not needed and the lanes will shut off on their
      own. That also means the override is critical to actually be able to
      access the DPIO registers before the port is actually enabled.
      
      Additionally the common lanes will power down when not needed. CL1
      remains on as long as anything else is on, CL2 will shut down when
      all the lanes in the same channel will shut down. There is one exception
      for CL2 that will be dealt in a separate patch for clarity.
      
      With potentially some lanes powered down, the DP code now has to check
      the number of active lanes before accessing PCS/TX registers. All
      registers in powered down blocks will reads as 0xffffffff, and soe we
      would drown in warnings from vlv_dpio_read() if we allowed the code
      to access all those registers.
      
      Another important detail in the DP code is the "TX latency optimal"
      setting. Normally the second TX lane acts as some kind of reset master,
      with the other lanes as slaves. But when only a single lane is enabled,
      that single lane obviously has to be the master.
      
      A bit of extra care is needed to reconstruct the initial state of the
      DISPLAY_PHY_CONTROL register since it can't be read safely. So instead
      read the actual lane status from the DPLL/PHY_STATUS registers and
      use that to determine which lanes ought to be powergated initially.
      
      We also need to switch the PHY power modes to "deep PSR" to avoid
      a hard system hang when powering down the single channel PHY.
      
      Also sprinkle a few debug prints around so that we can monitor the
      DISPLAY_PHY_STATUS changes without having to read it and risk
      corrupting it.
      
      v2: Add locking to chv_powergate_phy_lanes()
      v3: Actually enable dynamic powerdown in the PHY and deal with the
          fallout
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NDeepak S <deepak.s@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      e0fce78f
    • J
      drm/i915: move ibx_digital_port_connected to intel_dp.c · b93433cc
      Jani Nikula 提交于
      The function can be made static there. No functional changes.
      Reviewed-by: NDurgadoss R <durgadoss.r@intel.com>
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      b93433cc
    • V
      drm/i915: Add vlv_dport_to_phy() · 65d64cc5
      Ville Syrjälä 提交于
      Add vlv_dport_to_phy() and fix up the return values of
      vlv_dport_to_channel() and vlv_pipe_to_channel() to use
      the appropriate enums.
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NDeepak S <deepak.s@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      65d64cc5
    • V
      drm/i915: Add encoder->post_pll_disable() hooks and move CHV clock buffer disables there · d6db995f
      Ville Syrjälä 提交于
      Move the CHV clock buffer disable from chv_disable_pll() to the new
      encoder .post_pll_disable() hook. This is more symmetric since the
      clock buffer enable happens from the .pre_pll_enable() hook.
      
      We'll have more use for the new hook soon.
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NDeepak S <deepak.s@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      d6db995f
    • V
      drm/i915: Put back lane_count into intel_dp and add link_rate too · 901c2daf
      Ville Syrjälä 提交于
      With MST there won't be a crtc assigned to the main link encoder, so
      trying to dig up the pipe_config from there is a recipe for an oops.
      
      Instead store the parameters (lane_count and link_rate) in the encoder,
      and use those values during link training etc. Since those parameters
      are now assigned only when the link is actually enabled,
      .compute_config() won't clobber them as it did before.
      
      Hardware state readout is still bonkers though as we don't transfer the
      link parameters from pipe_config intel_dp. We should do that during
      encoder sanitation. But since we don't even do a proper job of reading
      out the main link encoder state for MST there's littel point in
      worrying about this now.
      
      Fixes a regression with MST caused by:
       commit 90a6b7b0
       Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
       Date:   Mon Jul 6 16:39:15 2015 +0300
      
          drm/i915: Move intel_dp->lane_count into pipe_config
      
      v2: Different apporoach that should keep intel_dp_check_mst_status()
          somewhat less oopsy
      
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Reported-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Tested-by: NMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      901c2daf
  2. 15 8月, 2015 5 次提交
  3. 14 8月, 2015 3 次提交
  4. 05 8月, 2015 1 次提交
    • P
      drm/i915: fix FBC frontbuffer tracking flushing code · 6f4551fe
      Paulo Zanoni 提交于
      Due to the way busy_bits was handled, we were not doing any flushes if
      we didn't previously get an invalidate. Since it's possible to get
      flushes without an invalidate first, remove the busy_bits early
      return.
      
      So now that we don't have the busy_bits guard anymore we'll need the
      origin check for the GTT tracking (we were not doing anything on GTT
      flushes due to the GTT check at invalidate()).
      
      As a last detail, since we can get multiple consecutive flushes,
      disable FBC before updating it, otherwise intel_fbc_update() will just
      keep FBC enabled instead of restarting it.
      
      Notice that this does not fix any of the current IGT tests due to the
      fact that we still have a few intel_fbc() calls at points where we
      also have the frontbuffer tracking calls: we didn't fully convert to
      frontbuffer tracking yet. Once we remove those calls and start relying
      only on the frontbuffer tracking infrastructure we'll need this patch.
      Signed-off-by: NPaulo Zanoni <paulo.r.zanoni@intel.com>
      Reviewed-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      6f4551fe
  5. 27 7月, 2015 1 次提交
  6. 21 7月, 2015 1 次提交
  7. 15 7月, 2015 4 次提交
  8. 14 7月, 2015 4 次提交
  9. 10 7月, 2015 1 次提交
  10. 09 7月, 2015 1 次提交
    • R
      drm/i915: PSR: Flush means invalidate + flush · 169de131
      Rodrigo Vivi 提交于
      Since flush actually means invalidate + flush we need to force psr
      exit on PSR flush.
      
      On Core platforms there is no way to disable hw tracking and
      do the pure sw tracking so we simulate it by fully disable psr and
      reschedule a enable back.
      So a good idea is to minimize sequential disable/enable in cases we
      know that HW tracking like when flush has been originated by a flip.
      Also flip had just invalidated it already.
      
      It also uses origin to minimize the a bit the amount of
      disable/enabled, mainly when flip already had invalidated.
      
      With this patch in place it is possible to do a flush on dirty areas
      properly in a following patch.
      
      v2: Remove duplicated exit on HSW+Sprites as pointed out by Paulo.
      
      Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Reviewed-by: NPaulo Zanoni <paulo.r.zanoni@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      169de131
  11. 08 7月, 2015 2 次提交
  12. 06 7月, 2015 2 次提交
    • P
      drm/i915: add the FBC mutex · 25ad93fd
      Paulo Zanoni 提交于
      Make sure we're not going to have weird races in really weird cases
      where a lot of different CRTCs are doing rendering and modesets at the
      same time.
      
      With this change and the stolen_lock from the previous patch, we can
      start removing the struct_mutex locking we have around FBC in the next
      patches.
      
      v2:
       - Rebase (6 months later)
       - Also lock debugfs and stolen.
      v3:
       - Don't lock a single value read (Chris).
       - Replace lockdep assertions with WARNs (Daniel).
       - Improve commit message.
       - Don't forget intel_pre_plane_update() locking.
      v4:
       - Don't remove struct_mutex at intel_pre_plane_update() (Chris).
       - Add comment regarding locking dependencies (Chris).
       - Rebase after the stolen code rework.
       - Rebase again after drm-intel-nightly changes.
      v5:
       - Rebase after the new stolen_lock patch.
      
      Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> (v4)
      Signed-off-by: NPaulo Zanoni <paulo.r.zanoni@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      25ad93fd
    • P
      drm/i915: move FBC code out of i915_gem_stolen.c · fc786728
      Paulo Zanoni 提交于
      With the abstractions created by the last patch, we can move this code
      and the only thing inside intel_fbc.c that knows about dev_priv->mm is
      the code that reads stolen_base.
      
      We also had to move a call to i915_gem_stolen_cleanup_compression()
      - now called intel_fbc_cleanup_cfb() - outside i915_gem_stolen.c.
      
      v2:
        - Rebase after the remove_node() changes on the previous patch.
      Requested-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NPaulo Zanoni <paulo.r.zanoni@intel.com>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      fc786728
  13. 30 6月, 2015 2 次提交
  14. 29 6月, 2015 5 次提交
  15. 26 6月, 2015 1 次提交
    • R
      drm/i915: Fix IPS related flicker · ac88cd73
      Rodrigo Vivi 提交于
      We cannot let IPS enabled with no plane on the pipe:
      
      BSpec: "IPS cannot be enabled until after at least one plane has
      been enabled for at least one vertical blank." and "IPS must be
      disabled while there is still at least one plane enabled on the
      same pipe as IPS." This restriction apply to HSW and BDW.
      
      However a shortcut path on update primary plane function
      to make primary plane invisible by setting DSPCTRL to 0
      was leting IPS enabled while there was no
      other plane enabled on the pipe causing flickerings that we were
      believing that it was caused by that other restriction where
      ips cannot be used when pixel rate is greater than 95% of cdclok.
      
      v2: Don't mess with Atomic path as pointed out by Ville.
      
      Reference: https://bugs.freedesktop.org/show_bug.cgi?id=85583
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      ac88cd73
  16. 25 6月, 2015 1 次提交
  17. 24 6月, 2015 1 次提交