Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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=13259



Signed-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
Loading
Loading
Loading
Loading
+17 −0
Original line number Original line Diff line number Diff line
@@ -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)


	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)
		}
		}
		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)
	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 */