ACPI: quiet ACPI Exceptions due to no _PTC or _TSS

ACPI Exception (processor_throttling-0084): AE_NOT_FOUND, Evaluating _PTC [20070126]
ACPI Exception (processor_throttling-0147): AE_NOT_FOUND, Evaluating _TSS [20070126]

These methods are optional, so Linux should not
alarm users when they are not found.

http://bugzilla.kernel.org/show_bug.cgi?id=8802

Signed-off-by: Len Brown <len.brown@intel.com>
Acked-by: Luming Yu <luming.yu@intel.com>
This commit is contained in:
Len Brown 2007-07-25 00:57:46 -04:00
parent 3b0d71170d
commit c30c620ee1

View file

@ -47,6 +47,9 @@ ACPI_MODULE_NAME("processor_throttling");
static int acpi_processor_get_throttling(struct acpi_processor *pr); static int acpi_processor_get_throttling(struct acpi_processor *pr);
int acpi_processor_set_throttling(struct acpi_processor *pr, int state); int acpi_processor_set_throttling(struct acpi_processor *pr, int state);
/*
* _TPC - Throttling Present Capabilities
*/
static int acpi_processor_get_platform_limit(struct acpi_processor *pr) static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
{ {
acpi_status status = 0; acpi_status status = 0;
@ -55,8 +58,10 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
if (!pr) if (!pr)
return -EINVAL; return -EINVAL;
status = acpi_evaluate_integer(pr->handle, "_TPC", NULL, &tpc); status = acpi_evaluate_integer(pr->handle, "_TPC", NULL, &tpc);
if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) { if (ACPI_FAILURE(status)) {
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _TPC")); if (status != AE_NOT_FOUND) {
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _TPC"));
}
return -ENODEV; return -ENODEV;
} }
pr->throttling_platform_limit = (int)tpc; pr->throttling_platform_limit = (int)tpc;
@ -68,9 +73,9 @@ int acpi_processor_tstate_has_changed(struct acpi_processor *pr)
return acpi_processor_get_platform_limit(pr); return acpi_processor_get_platform_limit(pr);
} }
/* -------------------------------------------------------------------------- /*
_PTC, _TSS, _TSD support * _PTC - Processor Throttling Control (and status) register location
-------------------------------------------------------------------------- */ */
static int acpi_processor_get_throttling_control(struct acpi_processor *pr) static int acpi_processor_get_throttling_control(struct acpi_processor *pr)
{ {
int result = 0; int result = 0;
@ -81,7 +86,9 @@ static int acpi_processor_get_throttling_control(struct acpi_processor *pr)
status = acpi_evaluate_object(pr->handle, "_PTC", NULL, &buffer); status = acpi_evaluate_object(pr->handle, "_PTC", NULL, &buffer);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PTC")); if (status != AE_NOT_FOUND) {
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PTC"));
}
return -ENODEV; return -ENODEV;
} }
@ -132,6 +139,10 @@ static int acpi_processor_get_throttling_control(struct acpi_processor *pr)
return result; return result;
} }
/*
* _TSS - Throttling Supported States
*/
static int acpi_processor_get_throttling_states(struct acpi_processor *pr) static int acpi_processor_get_throttling_states(struct acpi_processor *pr)
{ {
int result = 0; int result = 0;
@ -144,7 +155,9 @@ static int acpi_processor_get_throttling_states(struct acpi_processor *pr)
status = acpi_evaluate_object(pr->handle, "_TSS", NULL, &buffer); status = acpi_evaluate_object(pr->handle, "_TSS", NULL, &buffer);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _TSS")); if (status != AE_NOT_FOUND) {
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _TSS"));
}
return -ENODEV; return -ENODEV;
} }
@ -201,6 +214,10 @@ static int acpi_processor_get_throttling_states(struct acpi_processor *pr)
return result; return result;
} }
/*
* _TSD - T-State Dependencies
*/
static int acpi_processor_get_tsd(struct acpi_processor *pr) static int acpi_processor_get_tsd(struct acpi_processor *pr)
{ {
int result = 0; int result = 0;
@ -213,6 +230,9 @@ static int acpi_processor_get_tsd(struct acpi_processor *pr)
status = acpi_evaluate_object(pr->handle, "_TSD", NULL, &buffer); status = acpi_evaluate_object(pr->handle, "_TSD", NULL, &buffer);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
if (status != AE_NOT_FOUND) {
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _TSD"));
}
return -ENODEV; return -ENODEV;
} }
@ -525,9 +545,6 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
int result = 0; int result = 0;
int step = 0; int step = 0;
int i = 0; int i = 0;
int no_ptc = 0;
int no_tss = 0;
int no_tsd = 0;
ACPI_DEBUG_PRINT((ACPI_DB_INFO, ACPI_DEBUG_PRINT((ACPI_DB_INFO,
"pblk_address[0x%08x] duty_offset[%d] duty_width[%d]\n", "pblk_address[0x%08x] duty_offset[%d] duty_width[%d]\n",
@ -538,12 +555,14 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
if (!pr) if (!pr)
return -EINVAL; return -EINVAL;
/* TBD: Support ACPI 2.0 objects */ /*
no_ptc = acpi_processor_get_throttling_control(pr); * Evaluate _PTC, _TSS and _TPC
no_tss = acpi_processor_get_throttling_states(pr); * They must all be present or none of them can be used.
no_tsd = acpi_processor_get_tsd(pr); */
if (acpi_processor_get_throttling_control(pr) ||
if (no_ptc || no_tss) { acpi_processor_get_throttling_states(pr) ||
acpi_processor_get_platform_limit(pr))
{
pr->throttling.acpi_processor_get_throttling = pr->throttling.acpi_processor_get_throttling =
&acpi_processor_get_throttling_fadt; &acpi_processor_get_throttling_fadt;
pr->throttling.acpi_processor_set_throttling = pr->throttling.acpi_processor_set_throttling =
@ -555,6 +574,8 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
&acpi_processor_set_throttling_ptc; &acpi_processor_set_throttling_ptc;
} }
acpi_processor_get_tsd(pr);
if (!pr->throttling.address) { if (!pr->throttling.address) {
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No throttling register\n")); ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No throttling register\n"));
return 0; return 0;