Re: 2.6.24-rc8 hangs at mfgpt-timer

From: Jordan Crouse
Date: Mon Jan 21 2008 - 18:28:08 EST


Okay - I've been exploring a little bit more. I talked to the TinyBIOS
developer, and he verified that TinyBIOS shouldn't use any MFGPT timers.
He also told me that the mysterious "MFGPT workaround" was in fact the
magic MFGPT erasing MSR that was in the old kernel driver.

So with the "MFGPT workaround" turned off, TinyBIOS should be acting like
the OLPC firmware with regards to timers, yet it is not. So that is
curious. I think I might have identified a race condition in the code,
but I'm not 100% sure thats the same problem that the ALIX platform is
seeing.

Anrd and others - will you please try the attached patch on your platform
with the "MFGPT workaround" turned off and mfgpts enabled, and send out
the dmesg?

This will give us some debug information that I can use to ensure that
the interrupts are set up correctly. You can leave the timer tick disabled
if you want.

Thanks,
Jordan

--
Jordan Crouse
Systems Software Development Engineer
Advanced Micro Devices, Inc.
diff --git a/arch/x86/kernel/mfgpt_32.c b/arch/x86/kernel/mfgpt_32.c
index 0ab680f..5b4fa24 100644
--- a/arch/x86/kernel/mfgpt_32.c
+++ b/arch/x86/kernel/mfgpt_32.c
@@ -74,18 +74,31 @@ int __init geode_mfgpt_detect(void)
{
int count = 0, i;
u16 val;
+ u32 hi, lo;

if (disable) {
printk(KERN_INFO "geode-mfgpt: Skipping MFGPT setup\n");
return 0;
}

+ rdmsr(0x51400028, lo, hi);
+ printk(KERN_INFO "geode-mfgpt: IRQ MSR=%x:%x\n", hi, lo);
+
+ rdmsr(0x51400029, lo, hi);
+ printk(KERN_INFO "geode-mfgpt: NMI MSR=%x:%x\n", hi, lo);
+
+ rdmsr(0x51400022, lo, hi);
+ printk(KERN_INFO "geode-mfgpt: Unrestricted sources=%x\n", lo);
+
for (i = 0; i < MFGPT_MAX_TIMERS; i++) {
val = geode_mfgpt_read(i, MFGPT_REG_SETUP);
if (!(val & MFGPT_SETUP_SETUP)) {
mfgpt_timers[i].flags = F_AVAIL;
count++;
}
+ else {
+ printk(KERN_INFO "geode-mfgpt: [%d] is already setup=%x\n", i, val);
+ }
}

/* set up clock event device, if desired */