Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 17 Jun 2012 21:02:48 +0000 (UTC)
From:      Poul-Henning Kamp <phk@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r237203 - head/sys/dev/fb
Message-ID:  <201206172102.q5HL2mG9032399@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: phk
Date: Sun Jun 17 21:02:48 2012
New Revision: 237203
URL: http://svn.freebsd.org/changeset/base/237203

Log:
  On certain newer Intel Atom based motherboards, for instance the
  D2500CC which I have, syscons in text-mode fails to show the expected
  contents due to write errors into video-memory.
  
  At least one of the causes is that we copy from syscons internal buffer
  to the video memory with optimized bcopy(9) which uses >16bit operations.
  
  Until now, 32bit and wider operations have always worked on the video
  memory, but since I cannot find a single source which says that this
  SHALL work, and since these chipsets/bugs are now out there, this
  commit changes syscons to always use 16bit copies on i386 & amd64.
  
  This may be relevevant for PR's:
  	166262
  	166639
  and various other bug reports floating elsewhere on the net, but
  I lack hardware to test those.

Modified:
  head/sys/dev/fb/fbreg.h

Modified: head/sys/dev/fb/fbreg.h
==============================================================================
--- head/sys/dev/fb/fbreg.h	Sun Jun 17 20:45:45 2012	(r237202)
+++ head/sys/dev/fb/fbreg.h	Sun Jun 17 21:02:48 2012	(r237203)
@@ -35,9 +35,16 @@
 
 /* some macros */
 #if defined(__amd64__) || defined(__i386__)
-#define bcopy_io(s, d, c)	bcopy((void *)(s), (void *)(d), (c))
-#define bcopy_toio(s, d, c)	bcopy((void *)(s), (void *)(d), (c))
-#define bcopy_fromio(s, d, c)	bcopy((void *)(s), (void *)(d), (c))
+
+static __inline void
+copyw(uint16_t *src, uint16_t *dst, size_t size)
+{
+	while (size--)
+		*dst++ = *src++;
+}
+#define bcopy_io(s, d, c)	copyw((void*)(s), (void*)(d), (c))
+#define bcopy_toio(s, d, c)	copyw((void*)(s), (void*)(d), (c))
+#define bcopy_fromio(s, d, c)	copyw((void*)(s), (void*)(d), (c))
 #define bzero_io(d, c)		bzero((void *)(d), (c))
 #define fill_io(p, d, c)	fill((p), (void *)(d), (c))
 #define fillw_io(p, d, c)	fillw((p), (void *)(d), (c))



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