• Ville Syrjälä's avatar
    drm/i915: Don't try to use the hardware frame counter with i965gm TV output · 32db0b65
    Ville Syrjälä authored
    On i965gm the hardware frame counter does not work when
    the TV encoder is active. So let's not try to consult
    the hardware frame counter in that case. Instead we'll
    fall back to the timestamp based guesstimation method
    used on gen2.
    
    Note that the pipe timings generated by the TV encoder
    are also rather peculiar. Apparently the pipe wants to
    run at a much higher speed (related to the oversample
    clock somehow it seems) but during the vertical active
    period the TV encoder stalls the pipe every few lines
    to keep its speed in check. But once the vertical
    blanking period is reached the pipe gets to run at full
    speed. This means our vblank timestamp estimates are
    suspect. Fixing all that would require quite a bit
    more work. This simple fix at least avoids the nasty
    vblank timeouts that are happening currently.
    
    Curiously the frame counter works just fine on i945gm
    and gm45. I don't really understand what kind of mishap
    occurred with the hardware design on i965gm. Sadly
    I wasn't able to find any chicken bits etc. that would
    fix the frame counter :(
    
    v2: Move the zero vs. non-zero hw counter value handling
        into i915_get_vblank_counter() (Daniel)
        Use the per-crtc maximum exclusively, leaving the
        per-device maximum at zero
    v3: max_vblank_count not populated yet in intel_enable_pipe()
        use intel_crtc_max_vblank_count() instead
    
    Cc: stable@vger.kernel.org
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Fixes: 51e31d49 ("drm/i915: Use generic vblank wait")
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93782Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190122125149.GE5527@ideak-desk.fi.intel.comReviewed-by: default avatarImre Deak <imre.deak@intel.com>
    32db0b65
intel_display.c 461 KB