1. 03 9月, 2014 22 次提交
  2. 18 8月, 2014 5 次提交
    • I
      drm/i915: cancel hotplug and dig_port work during suspend and unload · 1d0d343a
      Imre Deak 提交于
      Make sure these work handlers don't run after we system suspend or
      unload the driver. Note that we don't cancel the handlers during runtime
      suspend. That could lead to a lockup, since we take a runtime PM ref
      from the handlers themselves. Fortunaltely canceling there is not needed
      since the RPM ref itself provides for the needed serialization.
      
      v2:
      - fix the order of canceling dig_port_work wrt. hotplug_work (Ville)
      - zero out {long,short}_hpd_port_mask and hpd_event_bits for speed
        (Ville)
      Signed-off-by: NImre Deak <imre.deak@intel.com>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Cc: stable@vger.kernel.org (3.16+)
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      1d0d343a
    • I
      drm/i915: fix HPD IRQ reenable work cancelation · 6323751d
      Imre Deak 提交于
      Atm, the HPD IRQ reenable timer can get rearmed right after it's
      canceled. Also to access the HPD IRQ mask registers we need to wake up
      the HW.
      
      Solve both issues by converting the reenable timer to a delayed work and
      grabbing a runtime PM reference in the work. By this we can also forgo
      canceling the timer during runtime suspend, since the only important
      thing there is that the HW is awake when we write the registers and
      that's ensured by the RPM ref. So do the cancelation only during driver
      unload time; this is also a requirement for an upcoming patch where we
      want to cancel all HPD related works only during system suspend and
      driver unload time, but not during runtime suspend.
      
      Note that there is still a race between the HPD IRQ reenable work and
      drm_irq_uninstall() during driver unload, where the work can reenable
      the HPD IRQs disabled by drm_irq_uninstall(). This isn't a problem since
      the HPD IRQs will still be effectively masked by the first level
      interrupt mask.
      
      v2-3:
      - unchanged
      v4:
      - use proper API for changing the expiration time for an already pending
        delayed work (Jani)
      Signed-off-by: NImre Deak <imre.deak@intel.com>
      Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> (v2)
      Cc: stable@vger.kernel.org (3.16+)
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      6323751d
    • V
      drm/i915: Don't try to enable cursor from setplane when crtc is disabled · 1add143c
      Ville Syrjälä 提交于
      Make sure the cursor gets fully clipped when enabling it on a disabled
      crtc via setplane. This will prevent the lower level code from
      attempting to enable the cursor in hardware.
      
      Cc: Paulo Zanoni <przanoni@gmail.com>
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Cc: stable@vger.kernel.org
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      1add143c
    • V
      drm/i915: Skip load detect when intel_crtc->new_enable==true · a459249c
      Ville Syrjälä 提交于
      During suspend we turn off the crtcs, but leave the staged config in
      place so that we can restore the display(s) to their previous state on
      resume.
      
      During resume when we attempt to apply the force pipe A quirk we use the
      load detect mechanism. That doesn't check whether there was an already
      staged configuration for the crtc since that's not even possible during
      normal runtime load detection. But during resume it is possible, and if
      we just blindly go and overwrite the staged crtc configuration for the
      load detection we can no longer restore the display to the correct
      state.
      
      Even worse, we don't even clear all the staged connector->encoder->crtc
      links so we may end up using a cloned setup for the load detection, and
      after we're done we just clear the links related to the VGA output
      leaving the links for the other outputs in place. This will eventually
      result in calling intel_set_mode() with mode==NULL but with valid
      connector->encoder->crtc links which will result in dereferencing the
      NULL mode since the code thinks it will have to a modeset.
      
      To avoid these problems don't use any crtc with new_enabled==true for
      load detection.
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Cc: stable@vger.kernel.org (for 3.16)
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      a459249c
    • V
      drm/i915: Fix locking for intel_enable_pipe_a() · 208bf9fd
      Ville Syrjälä 提交于
      intel_enable_pipe_a() gets called with all the modeset locks already
      held (by drm_modeset_lock_all()), so trying to grab the same
      locks using another drm_modeset_acquire_ctx is going to fail miserably.
      
      Move most of the drm_modeset_acquire_ctx handling (init/drop/fini)
      out from intel_{get,release}_load_detect_pipe() into the callers
      (intel_{crt,tv}_detect()). Only the actual locking and backoff
      handling is left in intel_get_load_detect_pipe(). And in
      intel_enable_pipe_a() we just share the mode_config.acquire_ctx from
      drm_modeset_lock_all() which is already holding all the relevant locks.
      
      It's perfectly legal to lock the same ww_mutex multiple times using the
      same ww_acquire_ctx. drm_modeset_lock() will convert the returned
      -EALREADY into 0, so the caller doesn't need to do antyhing special.
      
      Fixes a hang on resume on my 830.
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Cc: stable@vger.kernel.org
      Signed-off-by: NJani Nikula <jani.nikula@intel.com>
      208bf9fd
  3. 15 8月, 2014 1 次提交
  4. 13 8月, 2014 4 次提交
  5. 12 8月, 2014 1 次提交
  6. 11 8月, 2014 2 次提交
  7. 09 8月, 2014 2 次提交
  8. 08 8月, 2014 3 次提交
    • V
      drm/i915: Free pending page flip events at .preclose() · e2fcdaa9
      Ville Syrjälä 提交于
      If there are pending page flips when the fd gets closed those page
      flips may have events associated to them. When the page flip eventually
      completes it will queue the event to file_priv->event_list, but that
      may be too late and file_priv->event_list has already been cleaned up.
      Thus we leak a bit of kernel memory in the form of the event structure.
      
      To avoid such problems clear out such pending events from
      intel_crtc->unpin_work at ->preclose(). Any event that already made it
      to file_priv->event_list will get cleaned up by the drm_release_events()
      a bit later.
      
      We can ignore the file_priv->event_space accounting since file_priv is
      going away. This is already how drm core deals with pending vblank
      events, which are maintained by the drm core.
      
      What saves us from a total disaster (ie. dereferencing and alrady
      freed file_priv) is the fact that the fb descruction triggers a modeset
      and there we wait for pending flips.
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      e2fcdaa9
    • D
      drm/i915: Introduce a for_each_intel_encoder() macro · b2784e15
      Damien Lespiau 提交于
      Following the established idom, let's provide a macro to iterate through
      the encoders.
      
      spatch helps, once more, for the substitution:
      
        @@
        iterator name list_for_each_entry;
        iterator name for_each_intel_encoder;
        struct intel_encoder * encoder;
        struct drm_device * dev;
        @@
        -list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head) {
        +for_each_intel_encoder(dev, encoder) {
          ...
        }
      
      I also modified a few call sites by hand where a pointer to mode_config
      was directly used (to avoid overflowing 80 chars).
      Signed-off-by: NDamien Lespiau <damien.lespiau@intel.com>
      [danvet: Wrap paramters correctly in the macro and remove spurious
      space checkpatch noticed.]
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      b2784e15
    • V
      drm/i915: Split chv_update_pll() apart · 1ae0d137
      Ville Syrjälä 提交于
      Split chv_update_pll() into two parts ala:
       commit bdd4b6a6
       Author: Daniel Vetter <daniel.vetter@ffwll.ch>
       Date:   Thu Apr 24 23:55:11 2014 +0200
      
          drm/i915: Extract vlv_prepare_pll
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Reviewed-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      1ae0d137