[CPUFREQ] Longhaul: Magic timer frobbing.

As mandated by the spec, disable timer around transitions.

From code by : Ken Staton <ken_staton@agilent.com
Signed-off-by: Dave Jones <davej@redhat.com>

+9 -2
+9 -2
arch/i386/kernel/cpu/cpufreq/longhaul.c
··· 120 120 static void do_powersaver(union msr_longhaul *longhaul, 121 121 unsigned int clock_ratio_index) 122 122 { 123 - int version; 124 - unsigned long flags; 125 123 struct pci_dev *dev; 124 + unsigned long flags; 125 + unsigned int tmp_mask; 126 + int version; 126 127 int i; 127 128 u16 pci_cmd; 128 129 u16 cmd_state[64]; ··· 164 163 } 165 164 } while (dev != NULL); 166 165 166 + tmp_mask=inb(0x21); /* works on C3. save mask. */ 167 + outb(0xFE,0x21); /* TMR0 only */ 168 + outb(0xFF,0x80); /* delay */ 169 + 167 170 local_irq_enable(); 168 171 169 172 __hlt(); ··· 175 170 __hlt(); 176 171 177 172 local_irq_disable(); 173 + 174 + outb(tmp_mask,0x21); /* restore mask */ 178 175 179 176 /* restore pci bus master state for all devices */ 180 177 dev = NULL;