x86: GEODE: cache results from geode_has_vsa2() and uninline
authorAndres Salomon <dilinger@queued.net>
Wed, 7 May 2008 20:07:37 +0000 (13:07 -0700)
committerIngo Molnar <mingo@elte.hu>
Thu, 8 May 2008 13:43:50 +0000 (15:43 +0200)
This moves geode_has_vsa2 into a .c file, caches the result we get from
the VSA virtual registers, and causes the function to no longer be inline.

[akpm@linux-foundation.org: cleanup]

Signed-off-by: Andres Salomon <dilinger@debian.org>
Cc: Jordan Crouse <jordan.crouse@amd.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/geode_32.c
include/asm-x86/geode.h

index 9dad6ca..e8edd63 100644 (file)
@@ -161,6 +161,25 @@ void geode_gpio_setup_event(unsigned int gpio, int pair, int pme)
 }
 EXPORT_SYMBOL_GPL(geode_gpio_setup_event);
 
+int geode_has_vsa2(void)
+{
+       static int has_vsa2 = -1;
+
+       if (has_vsa2 == -1) {
+               /*
+                * The VSA has virtual registers that we can query for a
+                * signature.
+                */
+               outw(VSA_VR_UNLOCK, VSA_VRC_INDEX);
+               outw(VSA_VR_SIGNATURE, VSA_VRC_INDEX);
+
+               has_vsa2 = (inw(VSA_VRC_DATA) == VSA_SIG);
+       }
+
+       return has_vsa2;
+}
+EXPORT_SYMBOL_GPL(geode_has_vsa2);
+
 static int __init geode_southbridge_init(void)
 {
        if (!is_geode())
index 7154dc4..8a53bc8 100644 (file)
@@ -185,16 +185,7 @@ static inline int is_geode(void)
        return (is_geode_gx() || is_geode_lx());
 }
 
-/*
- * The VSA has virtual registers that we can query for a signature.
- */
-static inline int geode_has_vsa2(void)
-{
-       outw(VSA_VR_UNLOCK, VSA_VRC_INDEX);
-       outw(VSA_VR_SIGNATURE, VSA_VRC_INDEX);
-
-       return (inw(VSA_VRC_DATA) == VSA_SIG);
-}
+extern int geode_has_vsa2(void);
 
 /* MFGPTs */