summary refs log tree commit diff stats
path: root/hw/pl110.c
diff options
context:
space:
mode:
authorbalrog <balrog@c046a42c-6fe2-441c-8c8c-71466251a162>2007-10-04 23:45:31 +0000
committerbalrog <balrog@c046a42c-6fe2-441c-8c8c-71466251a162>2007-10-04 23:45:31 +0000
commite9c05b42e33e60a18e443d6526e9400ea2714444 (patch)
tree4f7a2c76e06ab7c9c0a33a51f3c69a01f13c5abb /hw/pl110.c
parent4d043a09007d4d06c07b941d881ee298a026961e (diff)
downloadfocaccia-qemu-e9c05b42e33e60a18e443d6526e9400ea2714444.tar.gz
focaccia-qemu-e9c05b42e33e60a18e443d6526e9400ea2714444.zip
Implement PL110 byte order config bit (original patch by Richard Purdie).
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3330 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'hw/pl110.c')
-rw-r--r--hw/pl110.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/hw/pl110.c b/hw/pl110.c
index 061ec7aba7..adaf1315fc 100644
--- a/hw/pl110.c
+++ b/hw/pl110.c
@@ -10,6 +10,7 @@
 #include "vl.h"
 
 #define PL110_CR_EN   0x001
+#define PL110_CR_BGR  0x100
 #define PL110_CR_BEBO 0x200
 #define PL110_CR_BEPO 0x400
 #define PL110_CR_PWR  0x800
@@ -114,6 +115,7 @@ static void pl110_update_display(void *opaque)
     int first, last = 0;
     int dirty, new_dirty;
     int i;
+    int bpp_offset;
 
     if (!pl110_enabled(s))
         return;
@@ -145,12 +147,17 @@ static void pl110_update_display(void *opaque)
         fprintf(stderr, "pl110: Bad color depth\n");
         exit(1);
     }
+    if (s->cr & PL110_CR_BGR)
+        bpp_offset = 0;
+    else
+        bpp_offset = 18;
+
     if (s->cr & PL110_CR_BEBO)
-      fn = fntable[s->bpp + 6];
+        fn = fntable[s->bpp + 6 + bpp_offset];
     else if (s->cr & PL110_CR_BEPO)
-      fn = fntable[s->bpp + 12];
+        fn = fntable[s->bpp + 12 + bpp_offset];
     else
-      fn = fntable[s->bpp];
+        fn = fntable[s->bpp + bpp_offset];
 
     src_width = s->cols;
     switch (s->bpp) {