Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Jun 2013 20:19:09 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r251961 - in head/sys/dev: drm2/i915 syscons
Message-ID:  <201306182019.r5IKJ9YG097781@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Tue Jun 18 20:19:09 2013
New Revision: 251961
URL: http://svnweb.freebsd.org/changeset/base/251961

Log:
  On some generations of the Intel GPU, disabling of the VGA Display
  stops updating the vertical retrace indicator.  The text mouse
  renderer in syscons is executing from the callout and spins waiting
  for the start of next frame.  As result, after the X server finishes,
  since the VGA cannot be turned on, but syscons does not know about
  this, the clock swi spins forever.
  
  Hack around the problem by disabling wait for the retrace if KMS is
  activated.
  
  Diagnosed and tested by:	Michiel Boland <boland37@xs4all.nl>
  Sponsored by:	The FreeBSD Foundation
  MFC after:	2 weeks

Modified:
  head/sys/dev/drm2/i915/intel_fb.c
  head/sys/dev/syscons/scvgarndr.c

Modified: head/sys/dev/drm2/i915/intel_fb.c
==============================================================================
--- head/sys/dev/drm2/i915/intel_fb.c	Tue Jun 18 20:02:52 2013	(r251960)
+++ head/sys/dev/drm2/i915/intel_fb.c	Tue Jun 18 20:19:09 2013	(r251961)
@@ -207,6 +207,8 @@ static void intel_fbdev_destroy(struct d
 	}
 }
 
+extern int sc_txtmouse_no_retrace_wait;
+
 int intel_fbdev_init(struct drm_device *dev)
 {
 	struct intel_fbdev *ifbdev;
@@ -229,6 +231,7 @@ int intel_fbdev_init(struct drm_device *
 
 	drm_fb_helper_single_add_all_connectors(&ifbdev->helper);
 	drm_fb_helper_initial_config(&ifbdev->helper, 32);
+	sc_txtmouse_no_retrace_wait = 1;
 	return 0;
 }
 

Modified: head/sys/dev/syscons/scvgarndr.c
==============================================================================
--- head/sys/dev/syscons/scvgarndr.c	Tue Jun 18 20:02:52 2013	(r251960)
+++ head/sys/dev/syscons/scvgarndr.c	Tue Jun 18 20:19:09 2013	(r251961)
@@ -395,6 +395,8 @@ vga_txtblink(scr_stat *scp, int at, int 
 {
 }
 
+int sc_txtmouse_no_retrace_wait;
+
 #ifndef SC_NO_CUTPASTE
 
 static void
@@ -445,7 +447,9 @@ draw_txtmouse(scr_stat *scp, int x, int 
 #if 1
 	/* wait for vertical retrace to avoid jitter on some videocards */
 	crtc_addr = scp->sc->adp->va_crtc_addr;
-	while (!(inb(crtc_addr + 6) & 0x08)) /* idle */ ;
+	while (!sc_txtmouse_no_retrace_wait &&
+	    !(inb(crtc_addr + 6) & 0x08))
+		/* idle */ ;
 #endif
 	c = scp->sc->mouse_char;
 	vidd_load_font(scp->sc->adp, 0, 32, 8, font_buf, c, 4); 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201306182019.r5IKJ9YG097781>