Commit 56c213fa authored by Zhang Rui's avatar Zhang Rui Committed by Len Brown

ACPI processor: introduce module parameter processor.ignore_tpc

Introduce module parameter processor.ignore_tpc.

Some laptops are shipped with buggy _TPC,
this module parameter is used to to disable the buggy support.

http://bugzilla.kernel.org/show_bug.cgi?id=13259Signed-off-by: default avatarZhang Rui <rui.zhang@intel.com>
Tested-by: default avatarJames Ettle <theholyettlz@googlemail.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent 091bf762
...@@ -45,6 +45,14 @@ ...@@ -45,6 +45,14 @@
#define _COMPONENT ACPI_PROCESSOR_COMPONENT #define _COMPONENT ACPI_PROCESSOR_COMPONENT
ACPI_MODULE_NAME("processor_throttling"); ACPI_MODULE_NAME("processor_throttling");
/* ignore_tpc:
* 0 -> acpi processor driver doesn't ignore _TPC values
* 1 -> acpi processor driver ignores _TPC values
*/
static int ignore_tpc;
module_param(ignore_tpc, int, 0644);
MODULE_PARM_DESC(ignore_tpc, "Disable broken BIOS _TPC throttling support");
struct throttling_tstate { struct throttling_tstate {
unsigned int cpu; /* cpu nr */ unsigned int cpu; /* cpu nr */
int target_state; /* target T-state */ int target_state; /* target T-state */
...@@ -283,6 +291,10 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr) ...@@ -283,6 +291,10 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
if (!pr) if (!pr)
return -EINVAL; return -EINVAL;
if (ignore_tpc)
goto end;
status = acpi_evaluate_integer(pr->handle, "_TPC", NULL, &tpc); status = acpi_evaluate_integer(pr->handle, "_TPC", NULL, &tpc);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
if (status != AE_NOT_FOUND) { if (status != AE_NOT_FOUND) {
...@@ -290,6 +302,8 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr) ...@@ -290,6 +302,8 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
} }
return -ENODEV; return -ENODEV;
} }
end:
pr->throttling_platform_limit = (int)tpc; pr->throttling_platform_limit = (int)tpc;
return 0; return 0;
} }
...@@ -302,6 +316,9 @@ int acpi_processor_tstate_has_changed(struct acpi_processor *pr) ...@@ -302,6 +316,9 @@ int acpi_processor_tstate_has_changed(struct acpi_processor *pr)
struct acpi_processor_limit *limit; struct acpi_processor_limit *limit;
int target_state; int target_state;
if (ignore_tpc)
return 0;
result = acpi_processor_get_platform_limit(pr); result = acpi_processor_get_platform_limit(pr);
if (result) { if (result) {
/* Throttling Limit is unsupported */ /* Throttling Limit is unsupported */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment