diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-05 14:16:25 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-05 14:16:25 -0400 |
| commit | 32fb6c17566ec66de87324a834c7776f40e35e78 (patch) | |
| tree | 87b8ed5d66495536fbb452255c3eacd1cfb0c43a /arch/x86/kernel/cpu/cpufreq | |
| parent | 45e36c1666aa6c8b0c538abcf984b336184d8c3f (diff) | |
| parent | 7ec0a7290797f57b780f792d12f4bcc19c83aa4f (diff) | |
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6: (140 commits)
ACPI: processor: use .notify method instead of installing handler directly
ACPI: button: use .notify method instead of installing handler directly
ACPI: support acpi_device_ops .notify methods
toshiba-acpi: remove MAINTAINERS entry
ACPI: battery: asynchronous init
acer-wmi: Update copyright notice & documentation
acer-wmi: Cleanup the failure cleanup handling
acer-wmi: Blacklist Acer Aspire One
video: build fix
thinkpad-acpi: rework brightness support
thinkpad-acpi: enhanced debugging messages for the fan subdriver
thinkpad-acpi: enhanced debugging messages for the hotkey subdriver
thinkpad-acpi: enhanced debugging messages for rfkill subdrivers
thinkpad-acpi: restrict access to some firmware LEDs
thinkpad-acpi: remove HKEY disable functionality
thinkpad-acpi: add new debug helpers and warn of deprecated atts
thinkpad-acpi: add missing log levels
thinkpad-acpi: cleanup debug helpers
thinkpad-acpi: documentation cleanup
thinkpad-acpi: drop ibm-acpi alias
...
Diffstat (limited to 'arch/x86/kernel/cpu/cpufreq')
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | 12 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/longhaul.c | 6 |
2 files changed, 15 insertions, 3 deletions
diff --git a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c index 05209b5cc6ca..19f6b9d27e83 100644 --- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c +++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | |||
| @@ -682,6 +682,18 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) | |||
| 682 | perf->states[i].transition_latency * 1000; | 682 | perf->states[i].transition_latency * 1000; |
| 683 | } | 683 | } |
| 684 | 684 | ||
| 685 | /* Check for high latency (>20uS) from buggy BIOSes, like on T42 */ | ||
| 686 | if (perf->control_register.space_id == ACPI_ADR_SPACE_FIXED_HARDWARE && | ||
| 687 | policy->cpuinfo.transition_latency > 20 * 1000) { | ||
| 688 | static int print_once; | ||
| 689 | policy->cpuinfo.transition_latency = 20 * 1000; | ||
| 690 | if (!print_once) { | ||
| 691 | print_once = 1; | ||
| 692 | printk(KERN_INFO "Capping off P-state tranision latency" | ||
| 693 | " at 20 uS\n"); | ||
| 694 | } | ||
| 695 | } | ||
| 696 | |||
| 685 | data->max_freq = perf->states[0].core_frequency * 1000; | 697 | data->max_freq = perf->states[0].core_frequency * 1000; |
| 686 | /* table init */ | 698 | /* table init */ |
| 687 | for (i = 0; i < perf->state_count; i++) { | 699 | for (i = 0; i < perf->state_count; i++) { |
diff --git a/arch/x86/kernel/cpu/cpufreq/longhaul.c b/arch/x86/kernel/cpu/cpufreq/longhaul.c index f1c51aea064d..0bd48e65a0ca 100644 --- a/arch/x86/kernel/cpu/cpufreq/longhaul.c +++ b/arch/x86/kernel/cpu/cpufreq/longhaul.c | |||
| @@ -305,7 +305,7 @@ retry_loop: | |||
| 305 | outb(3, 0x22); | 305 | outb(3, 0x22); |
| 306 | } else if ((pr != NULL) && pr->flags.bm_control) { | 306 | } else if ((pr != NULL) && pr->flags.bm_control) { |
| 307 | /* Disable bus master arbitration */ | 307 | /* Disable bus master arbitration */ |
| 308 | acpi_set_register(ACPI_BITREG_ARB_DISABLE, 1); | 308 | acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE, 1); |
| 309 | } | 309 | } |
| 310 | switch (longhaul_version) { | 310 | switch (longhaul_version) { |
| 311 | 311 | ||
| @@ -328,7 +328,7 @@ retry_loop: | |||
| 328 | case TYPE_POWERSAVER: | 328 | case TYPE_POWERSAVER: |
| 329 | if (longhaul_flags & USE_ACPI_C3) { | 329 | if (longhaul_flags & USE_ACPI_C3) { |
| 330 | /* Don't allow wakeup */ | 330 | /* Don't allow wakeup */ |
| 331 | acpi_set_register(ACPI_BITREG_BUS_MASTER_RLD, 0); | 331 | acpi_write_bit_register(ACPI_BITREG_BUS_MASTER_RLD, 0); |
| 332 | do_powersaver(cx->address, mults_index, dir); | 332 | do_powersaver(cx->address, mults_index, dir); |
| 333 | } else { | 333 | } else { |
| 334 | do_powersaver(0, mults_index, dir); | 334 | do_powersaver(0, mults_index, dir); |
| @@ -341,7 +341,7 @@ retry_loop: | |||
| 341 | outb(0, 0x22); | 341 | outb(0, 0x22); |
| 342 | } else if ((pr != NULL) && pr->flags.bm_control) { | 342 | } else if ((pr != NULL) && pr->flags.bm_control) { |
| 343 | /* Enable bus master arbitration */ | 343 | /* Enable bus master arbitration */ |
| 344 | acpi_set_register(ACPI_BITREG_ARB_DISABLE, 0); | 344 | acpi_write_bit_register(ACPI_BITREG_ARB_DISABLE, 0); |
| 345 | } | 345 | } |
| 346 | outb(pic2_mask, 0xA1); /* restore mask */ | 346 | outb(pic2_mask, 0xA1); /* restore mask */ |
| 347 | outb(pic1_mask, 0x21); | 347 | outb(pic1_mask, 0x21); |
