x86: GEODE add the "mfgptfix" boot time option to fix MFGPT timers
authorWilly Tarreau <w@1wt.eu>
Wed, 30 Jan 2008 12:33:33 +0000 (13:33 +0100)
committerIngo Molnar <mingo@elte.hu>
Wed, 30 Jan 2008 12:33:33 +0000 (13:33 +0100)
The new "mfgptfix" boot command line option may be usd to fix MFGPT
timers on AMD Geode platforms when the BIOS has incorrectly applied
a workaround. TinyBIOS version 0.98 is known to be affected, 0.99
fixes the problem by letting the user disable the workaround.

Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Documentation/kernel-parameters.txt
arch/x86/kernel/mfgpt_32.c

index fe3031d564317c637cda640db60a7824dcf33ed1..5d171b7b8393b95c857f9aad5945939a2c999e21 100644 (file)
@@ -1092,6 +1092,11 @@ and is between 256 and 4096 characters. It is defined in the file
                        Multi-Function General Purpose Timers on AMD Geode
                        platforms.
 
+       mfgptfix        [X86-32] Fix MFGPT timers on AMD Geode platforms when
+                       the BIOS has incorrectly applied a workaround. TinyBIOS
+                       version 0.98 is known to be affected, 0.99 fixes the
+                       problem by letting the user disable the workaround.
+
        mga=            [HW,DRM]
 
        mousedev.tap_time=
index 3960ab7e149773aa1c3dd4b7f3160cf9b76d944b..219f86eb612301766771651eb56cb1e8f98189ac 100644 (file)
@@ -63,6 +63,21 @@ static int __init mfgpt_disable(char *s)
 }
 __setup("nomfgpt", mfgpt_disable);
 
+/* Reset the MFGPT timers. This is required by some broken BIOSes which already
+ * do the same and leave the system in an unstable state. TinyBIOS 0.98 is
+ * affected at least (0.99 is OK with MFGPT workaround left to off).
+ */
+static int __init mfgpt_fix(char *s)
+{
+       u32 val, dummy;
+
+       /* The following udocumented bit resets the MFGPT timers */
+       val = 0xFF; dummy = 0;
+       wrmsr(0x5140002B, val, dummy);
+       return 1;
+}
+__setup("mfgptfix", mfgpt_fix);
+
 /*
  * Check whether any MFGPTs are available for the kernel to use.  In most
  * cases, firmware that uses AMD's VSA code will claim all timers during