vgabios: Add the geode GX2 functionality.
authorNils <njacobs8@adsltotaal.nl>
Sat, 14 Jan 2012 17:15:14 +0000 (12:15 -0500)
committerKevin O'Connor <kevin@koconnor.net>
Sat, 14 Jan 2012 17:15:14 +0000 (12:15 -0500)
Signed-off-by: Nils Jacobs <njacobs8 at adsltotaal.nl>
src/Kconfig
vgasrc/geodevga.c
vgasrc/geodevga.h
vgasrc/vgahw.h

index 8fb9a6627050b2457274bca3a2e0c936bf4a34ff..099cd15a5bc27b1eab801bdbeacb978d8beb730f 100644 (file)
@@ -337,6 +337,12 @@ menu "VGA ROM"
         help
             Build support for Bochs DISPI interface.
 
+    config VGA_GEODEGX2
+        bool "GeodeGX2 interface VGA BIOS"
+        default n
+        help
+            Build support for Geode GX2 vga.
+
     config VGA_GEODELX
         bool "GeodeLX interface VGA BIOS"
         default n
@@ -355,6 +361,7 @@ menu "VGA ROM"
         hex "PCI Vendor ID"
         default 0x1013 if VGA_CIRRUS
         default 0x1234 if VGA_BOCHS
+        default 0x100b if VGA_GEODEGX2
         default 0x1022 if VGA_GEODELX
         default 0x0000
         help
@@ -365,6 +372,7 @@ menu "VGA ROM"
         hex "PCI Device ID"
         default 0x00b8 if VGA_CIRRUS
         default 0x1111 if VGA_BOCHS
+        default 0x0030 if VGA_GEODEGX2
         default 0x2081 if VGA_GEODELX
         default 0x0000
         help
index 0008abecf9bcee374eb076c45eb4cc3bc228a6c2..7735fdca628a2b872cf26a04b08ea128c9428358 100644 (file)
@@ -87,7 +87,10 @@ static int legacyio_check(void)
     int ret=0;
     union u64_u32_u val;
 
-    val=geode_msrRead(MSR_GLIU0_BASE4);
+    if (CONFIG_VGA_GEODEGX2)
+        val=geode_msrRead(GLIU0_P2D_BM_4);
+    else
+        val=geode_msrRead(MSR_GLIU0_BASE4);
     if (val.lo != 0x0A0fffe0)
         ret|=1;
 
@@ -255,7 +258,10 @@ int vp_setup(void)
 
     dprintf(2,"VP_SETUP\n");
     /* set output to crt and RGB/YUV */
-    geode_msrWrite(VP_MSR_CONFIG,~0 ,~0xf8,0,0);
+    if (CONFIG_VGA_GEODEGX2)
+    geode_msrWrite(VP_MSR_CONFIG_GX2,~0 ,~0xf8,0,0);
+    else
+    geode_msrWrite(VP_MSR_CONFIG_LX,~0 ,~0xf8,0,0);
 
     /* get vp register base from pci */
     outl(GEODE_PCI_VP,PORT_PCI_CMD);
index 65e698cdbd0d7db8395e0ec3b394e0ad18dd80ff..ec019a43a267f711de6a2e1f6938ced06e576ac3 100644 (file)
 
 /* LX MSRs */
 #define MSR_GLIU0                       (1 << 28)
-#define MSR_GLIU0_BASE4                 (MSR_GLIU0 + 0x23)
+#define MSR_GLIU0_BASE4                 (MSR_GLIU0 + 0x23)  /* LX */
+#define GLIU0_P2D_BM_4                  (MSR_GLIU0 + 0x24)  /* GX2 */
 #define GLIU0_IOD_BM_0                  (MSR_GLIU0 + 0xE0)
 #define GLIU0_IOD_BM_1                  (MSR_GLIU0 + 0xE1)
 #define DC_SPARE                        0x80000011
-#define VP_MSR_CONFIG                   0x48002001
+#define VP_MSR_CONFIG_GX2               0xc0002001  /* GX2 */
+#define VP_MSR_CONFIG_LX                0x48002001  /* LX */
 
 /* DC REG OFFSET */
 #define DC_UNLOCK                       0x0
index fea041a2df0ed5bad1c510bb6fa1aa81cf5c6725..23b4f135b310e9c459c77081b2067b9ef80b8ac6 100644 (file)
@@ -22,7 +22,7 @@ static inline int vgahw_init(void) {
         return clext_init();
     if (CONFIG_VGA_BOCHS)
         return bochsvga_init();
-    if (CONFIG_VGA_GEODELX)
+    if (CONFIG_VGA_GEODEGX2 || CONFIG_VGA_GEODELX)
         return geodevga_init();
     return stdvga_init();
 }