From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH] drm/i915: Show cursor status in debugfs/i915_display_info Date: Wed, 12 Mar 2014 11:29:35 +0200 Message-ID: <20140312092935.GG20292@intel.com> References: <1394615593-15230-1-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: Received: from mga14.intel.com (unknown [143.182.124.37]) by gabe.freedesktop.org (Postfix) with ESMTP id 73224FAC9E for ; Wed, 12 Mar 2014 02:29:45 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1394615593-15230-1-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces@lists.freedesktop.org Errors-To: intel-gfx-bounces@lists.freedesktop.org To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org On Wed, Mar 12, 2014 at 09:13:13AM +0000, Chris Wilson wrote: > I have the occasional absent cursor on i845 and I want to know why. > This should help by revealing the last known cursor state. > = > Signed-off-by: Chris Wilson Reviewed-by: Ville Syrj=E4l=E4 > --- > drivers/gpu/drm/i915/i915_debugfs.c | 57 +++++++++++++++++++++++++++++++= +----- > 1 file changed, 50 insertions(+), 7 deletions(-) > = > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i= 915_debugfs.c > index 72c866a41e27..5df093d178a9 100644 > --- a/drivers/gpu/drm/i915/i915_debugfs.c > +++ b/drivers/gpu/drm/i915/i915_debugfs.c > @@ -2383,24 +2383,67 @@ static void intel_connector_info(struct seq_file = *m, > intel_seq_print_mode(m, 2, mode); > } > = > +static bool cursor_active(struct drm_device *dev, int pipe) > +{ > + struct drm_i915_private *dev_priv =3D dev->dev_private; > + u32 state; > + > + if (IS_845G(dev) || IS_I865G(dev)) > + state =3D I915_READ(_CURACNTR) & CURSOR_ENABLE; > + else if (INTEL_INFO(dev)->gen <=3D 6 || IS_VALLEYVIEW(dev)) > + state =3D I915_READ(CURCNTR(pipe)) & CURSOR_MODE; > + else > + state =3D I915_READ(CURCNTR_IVB(pipe)) & CURSOR_MODE; > + > + return state; > +} > + > +static bool cursor_position(struct drm_device *dev, int pipe, int *x, in= t *y) > +{ > + struct drm_i915_private *dev_priv =3D dev->dev_private; > + u32 pos; > + > + if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev) || IS_BROADWELL(dev)) > + pos =3D I915_READ(CURPOS_IVB(pipe)); > + else > + pos =3D I915_READ(CURPOS(pipe)); > + > + *x =3D (pos >> CURSOR_X_SHIFT) & CURSOR_POS_MASK; > + if (pos & (CURSOR_POS_SIGN << CURSOR_X_SHIFT)) > + *x =3D -*x; > + > + *y =3D (pos >> CURSOR_Y_SHIFT) & CURSOR_POS_MASK; > + if (pos & (CURSOR_POS_SIGN << CURSOR_Y_SHIFT)) > + *y =3D -*y; > + > + return cursor_active(dev, pipe); > +} > + > static int i915_display_info(struct seq_file *m, void *unused) > { > struct drm_info_node *node =3D (struct drm_info_node *) m->private; > struct drm_device *dev =3D node->minor->dev; > - struct drm_crtc *crtc; > + struct intel_crtc *crtc; > struct drm_connector *connector; > = > drm_modeset_lock_all(dev); > seq_printf(m, "CRTC info\n"); > seq_printf(m, "---------\n"); > - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { > - struct intel_crtc *intel_crtc =3D to_intel_crtc(crtc); > + list_for_each_entry(crtc, &dev->mode_config.crtc_list, base.head) { > + bool active; > + int x, y; > = > seq_printf(m, "CRTC %d: pipe: %c, active: %s\n", > - crtc->base.id, pipe_name(intel_crtc->pipe), > - intel_crtc->active ? "yes" : "no"); > - if (intel_crtc->active) > - intel_crtc_info(m, intel_crtc); > + crtc->base.base.id, pipe_name(crtc->pipe), > + yesno(crtc->active)); > + if (crtc->active) > + intel_crtc_info(m, crtc); > + > + active =3D cursor_position(dev, crtc->pipe, &x, &y); > + seq_printf(m, "\tcursor visible? %s, position (%d, %d), addr 0x%08x, a= ctive? %s\n", > + yesno(crtc->cursor_visible), > + x, y, crtc->cursor_addr, > + yesno(active)); > } > = > seq_printf(m, "\n"); > -- = > 1.9.0 > = > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- = Ville Syrj=E4l=E4 Intel OTC