svn commit: r237203 - head/sys/dev/fb
Poul-Henning Kamp
phk at FreeBSD.org
Sun Jun 17 21:02:49 UTC 2012
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))
More information about the svn-src-all
mailing list