summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Kettenis <mark.kettenis@xs4all.nl>2009-11-02 11:08:13 -0500
committerAdam Jackson <ajax@redhat.com>2009-11-02 11:09:03 -0500
commitcc0682924e84006662d77557876123a88f76afa0 (patch)
tree5cfd097a812870bd222f5dd7508dd70f934c3c97
parent5b60ef6cbc140f95295e5a8c32625b4f572063e1 (diff)
Use hardware byteswap on big-endian platforms
Fixes 16 and 32 bit-per-pixel modes with a Tech Source Raptor GFX-8M board on OpenBSD/sparc64 Signed-off-by: Adam Jackson <ajax@redhat.com>
-rw-r--r--src/i128init.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/i128init.c b/src/i128init.c
index d57e295..1a34053 100644
--- a/src/i128init.c
+++ b/src/i128init.c
@@ -451,7 +451,20 @@ I128Init(ScrnInfoPtr pScrn, DisplayModePtr mode)
pI128->DoubleScan = FALSE;
pI128->mem.rbase_g[CRT_ZOOM] = (pI128->DoubleScan ? 0x00000001 : 0x00000000);
- pI128->mem.rbase_w[MW0_CTRL] = 0x00000000;
+ switch (pI128->bitsPerPixel) {
+#if X_BYTE_ORDER == X_BIG_ENDIAN
+ case 32:
+ pI128->mem.rbase_w[MW0_CTRL] = 0x00060000;
+ break;
+ case 16:
+ pI128->mem.rbase_w[MW0_CTRL] = 0x00020000;
+ break;
+#endif
+ default:
+ pI128->mem.rbase_w[MW0_CTRL] = 0x00000000;
+ break;
+ }
+
switch (pI128->MemorySize) {
case 2048:
pI128->mem.rbase_w[MW0_SZ] = 0x00000009;