[SeaBIOS] [PATCH] geodevga: make use of readl and writel for mmio access

Christian Gmeiner christian.gmeiner at gmail.com
Tue Jul 17 12:08:59 CEST 2012


This commit just simplifies some code.

Signed-off-by: Christian Gmeiner <christian.gmeiner at gmail.com>
---
 vgasrc/geodevga.c | 48 +++++++++---------------------------------------
 1 file changed, 9 insertions(+), 39 deletions(-)

diff --git a/vgasrc/geodevga.c b/vgasrc/geodevga.c
index 5c6caf0..4e3d912 100644
--- a/vgasrc/geodevga.c
+++ b/vgasrc/geodevga.c
@@ -52,37 +52,6 @@ static void geode_msrWrite(u32 msrAddr,u32 andhi,
u32 andlo, u32 orhi, u32 orlo)
     );
 }

-static u32 geode_memRead(u32 addr)
-{
-    u32 val;
-    asm __volatile__ (
-        "movw   $0x0AC1C, %%dx          \n"
-        "movl   $0xFC530001, %%eax      \n"
-        "outl   %%eax, %%dx             \n"
-        "addb   $2, %%dl                \n"
-        "inw    %%dx, %%ax              \n"
-        : "=a" (val)
-        : "b"(addr)
-        : "cc"
-    );
-
-    return val;
-}
-
-static void geode_memWrite(u32 addr, u32 and, u32 or )
-{
-    asm __volatile__ (
-        "movw   $0x0AC1C, %%dx          \n"
-        "movl   $0xFC530001, %%eax      \n"
-        "outl   %%eax, %%dx             \n"
-        "addb   $2, %%dl                \n"
-        "outw   %%ax, %%dx              \n"
-        :
-        : "b"(addr), "S" (and), "D" (or)
-        : "%eax","cc"
-    );
-}
-
 static int legacyio_check(void)
 {
     int ret=0;
@@ -249,7 +218,8 @@ static int dc_setup(void)
 */
 int vp_setup(void)
 {
-    u32 reg,vp;
+    u32 reg;
+    void *vp;

     dprintf(2,"VP_SETUP\n");
     /* set output to crt and RGB/YUV */
@@ -259,23 +229,23 @@ int vp_setup(void)
         geode_msrWrite(VP_MSR_CONFIG_LX, ~0, ~0xf8, 0, 0);

     /* get vp register base from pci */
-    vp = pci_config_readl(GET_GLOBAL(VgaBDF), PCI_BASE_ADDRESS_3);
+    vp = (void *)pci_config_readl(GET_GLOBAL(VgaBDF), PCI_BASE_ADDRESS_3);

     /* Set mmio registers
     * there may be some timing issues here, the reads seem
     * to slow things down enough work reliably
     */

-    reg = geode_memRead(vp+VP_MISC);
+    reg = readl(vp+VP_MISC);
     dprintf(1,"VP_SETUP VP_MISC=0x%08x\n",reg);
-    geode_memWrite(vp+VP_MISC,0,VP_BYP_BOTH);
-    reg = geode_memRead(vp+VP_MISC);
+    writel(vp+VP_MISC,VP_BYP_BOTH);
+    reg = readl(vp+VP_MISC);
     dprintf(1,"VP_SETUP VP_MISC=0x%08x\n",reg);

-    reg = geode_memRead(vp+VP_DCFG);
+    reg = readl(vp+VP_DCFG);
     dprintf(1,"VP_SETUP VP_DCFG=0x%08x\n",reg);
-    geode_memWrite(vp+VP_DCFG,
~0,VP_CRT_EN+VP_HSYNC_EN+VP_VSYNC_EN+VP_DAC_BL_EN+VP_CRT_SKEW);
-    reg = geode_memRead(vp+VP_DCFG);
+    writel(vp+VP_DCFG,VP_CRT_EN+VP_HSYNC_EN+VP_VSYNC_EN+VP_DAC_BL_EN+VP_CRT_SKEW);
+    reg = readl(vp+VP_DCFG);
     dprintf(1,"VP_SETUP VP_DCFG=0x%08x\n",reg);

     return 0;
-- 
1.7.11.rc2.5.g68f532f



More information about the SeaBIOS mailing list