drm/i915: Unconfuse pipe vs. crtc->index in i915_get_crtc_scanoutpos()
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 21 Aug 2019 17:30:30 +0000 (20:30 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 23 Aug 2019 18:36:00 +0000 (21:36 +0300)
The "pipe" argument passed in by the vblank code is in fact the crtc
index. Don't assume that is the same as the pipe.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190821173033.24123-2-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/i915_irq.c

index 77391d8325bf3d1da5d6e53816a814dad5e8cb7b..8ac6f684998124a2dc33252502f0aa3cfea69cfa 100644 (file)
@@ -942,14 +942,14 @@ static int __intel_get_crtc_scanline(struct intel_crtc *crtc)
        return (position + crtc->scanline_offset) % vtotal;
 }
 
-bool i915_get_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe,
+bool i915_get_crtc_scanoutpos(struct drm_device *dev, unsigned int index,
                              bool in_vblank_irq, int *vpos, int *hpos,
                              ktime_t *stime, ktime_t *etime,
                              const struct drm_display_mode *mode)
 {
        struct drm_i915_private *dev_priv = to_i915(dev);
-       struct intel_crtc *intel_crtc = intel_get_crtc_for_pipe(dev_priv,
-                                                               pipe);
+       struct intel_crtc *crtc = to_intel_crtc(drm_crtc_from_index(dev, index));
+       enum pipe pipe = crtc->pipe;
        int position;
        int vbl_start, vbl_end, hsync_start, htotal, vtotal;
        unsigned long irqflags;
@@ -992,7 +992,7 @@ bool i915_get_crtc_scanoutpos(struct drm_device *dev, unsigned int pipe,
                /* No obvious pixelcount register. Only query vertical
                 * scanout position from Display scan line register.
                 */
-               position = __intel_get_crtc_scanline(intel_crtc);
+               position = __intel_get_crtc_scanline(crtc);
        } else {
                /* Have access to pixelcount since start of frame.
                 * We can split this into vertical and horizontal