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