[SeaBIOS] Geode register functions

Christian Gmeiner christian.gmeiner at gmail.com
Sat Sep 15 16:03:13 CEST 2012

Hi Kevin,

2012/9/11 Kevin O'Connor <kevin at koconnor.net>:
> On Mon, Sep 03, 2012 at 12:37:53PM -0400, Kevin O'Connor wrote:
>> Hi Christian,
>> It would be nice if the geode code could use the same style register
>> access functions that the stdvga code uses.  I put together a patch
>> (totally untested) below.  Is this okay?
> FYI - I pushed this patch.

something is wrong with this patch... or even logical :/

If I extend the function static u64 geode_msr_read(u32 msrAddr) to print
out the full 64 bit value and hi and lo 32 bit values I get some
strange results.

diff --git a/vgasrc/geodevga.c b/vgasrc/geodevga.c
index a5a577c..e4136cc 100644
--- a/vgasrc/geodevga.c
+++ b/vgasrc/geodevga.c
@@ -33,9 +33,30 @@ static u64 geode_msr_read(u32 msrAddr)
         : "c"(msrAddr)
         : "cc"
+    dprintf(1, "full: 0x%llx\n", val.val);
+    dprintf(1, "  hi: 0x%x\n", val.hi);
+    dprintf(1, "  lo: 0x%x\n", val.lo);
     return val.val;

full: 0x7fffd0002127e0fd
  hi: 0x2127e0fd
  lo: 0x7fffd000
pmax: 0x212
pmin: 0x7e0fd
2131032 KB of video memory at 0xfd000000

Following problems:
1) 2131032 KB is wrong
2) hi and lo are swapped

If I revert your patch I get this:

pmax: 0xfd7ff
pmin: 0xfd000
8192 KB of video memory at 0xfd000000

Any idea?
Christian Gmeiner, MSc

More information about the SeaBIOS mailing list