mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 06:12:08 +00:00
ACPI: processor: Get rid of ACPICA message printing
The ACPI_DEBUG_PRINT() and ACPI_EXCEPTION() macros are used for message printing in the ACPICA code and they should not be used elsewhere. Special configuration (either kernel command line or sysfs-based) is needed to see the messages printed by them and the format of those messages is also special and convoluted. For this reason, replace all of the ACPI_DEBUG_PRINT() and ACPI_EXCEPTION() instances in the ACPI processor driver with corresponding dev_*(), acpi_handle_*() and pr_*() calls depending on the context in which they appear. Also drop the ACPI_PROCESSOR_COMPONENT definition that is not going to be necessary any more. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Hanjun Guo <guohanjun@huawei.com>
This commit is contained in:
parent
54e0519207
commit
52af99c3f5
@ -58,7 +58,6 @@ shows the supported mask values, currently these::
|
|||||||
ACPI_CONTAINER_COMPONENT 0x01000000
|
ACPI_CONTAINER_COMPONENT 0x01000000
|
||||||
ACPI_SYSTEM_COMPONENT 0x02000000
|
ACPI_SYSTEM_COMPONENT 0x02000000
|
||||||
ACPI_MEMORY_DEVICE_COMPONENT 0x08000000
|
ACPI_MEMORY_DEVICE_COMPONENT 0x08000000
|
||||||
ACPI_PROCESSOR_COMPONENT 0x20000000
|
|
||||||
|
|
||||||
debug_level
|
debug_level
|
||||||
===========
|
===========
|
||||||
|
@ -22,10 +22,6 @@
|
|||||||
|
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
#define _COMPONENT ACPI_PROCESSOR_COMPONENT
|
|
||||||
|
|
||||||
ACPI_MODULE_NAME("processor");
|
|
||||||
|
|
||||||
DEFINE_PER_CPU(struct acpi_processor *, processors);
|
DEFINE_PER_CPU(struct acpi_processor *, processors);
|
||||||
EXPORT_PER_CPU_SYMBOL(processors);
|
EXPORT_PER_CPU_SYMBOL(processors);
|
||||||
|
|
||||||
@ -51,19 +47,19 @@ static int acpi_processor_errata_piix4(struct pci_dev *dev)
|
|||||||
|
|
||||||
switch (dev->revision) {
|
switch (dev->revision) {
|
||||||
case 0:
|
case 0:
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4 A-step\n"));
|
dev_dbg(&dev->dev, "Found PIIX4 A-step\n");
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4 B-step\n"));
|
dev_dbg(&dev->dev, "Found PIIX4 B-step\n");
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4E\n"));
|
dev_dbg(&dev->dev, "Found PIIX4E\n");
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4M\n"));
|
dev_dbg(&dev->dev, "Found PIIX4M\n");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found unknown PIIX4\n"));
|
dev_dbg(&dev->dev, "Found unknown PIIX4\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,11 +125,9 @@ static int acpi_processor_errata_piix4(struct pci_dev *dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (errata.piix4.bmisx)
|
if (errata.piix4.bmisx)
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
dev_dbg(&dev->dev, "Bus master activity detection (BM-IDE) erratum enabled\n");
|
||||||
"Bus master activity detection (BM-IDE) erratum enabled\n"));
|
|
||||||
if (errata.piix4.fdma)
|
if (errata.piix4.fdma)
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
dev_dbg(&dev->dev, "Type-F DMA livelock erratum (C3 disabled)\n");
|
||||||
"Type-F DMA livelock erratum (C3 disabled)\n"));
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -244,11 +238,9 @@ static int acpi_processor_get_info(struct acpi_device *device)
|
|||||||
*/
|
*/
|
||||||
if (acpi_gbl_FADT.pm2_control_block && acpi_gbl_FADT.pm2_control_length) {
|
if (acpi_gbl_FADT.pm2_control_block && acpi_gbl_FADT.pm2_control_length) {
|
||||||
pr->flags.bm_control = 1;
|
pr->flags.bm_control = 1;
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
dev_dbg(&device->dev, "Bus mastering arbitration control present\n");
|
||||||
"Bus mastering arbitration control present\n"));
|
|
||||||
} else
|
} else
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
dev_dbg(&device->dev, "No bus mastering arbitration control\n");
|
||||||
"No bus mastering arbitration control\n"));
|
|
||||||
|
|
||||||
if (!strcmp(acpi_device_hid(device), ACPI_PROCESSOR_OBJECT_HID)) {
|
if (!strcmp(acpi_device_hid(device), ACPI_PROCESSOR_OBJECT_HID)) {
|
||||||
/* Declared with "Processor" statement; match ProcessorID */
|
/* Declared with "Processor" statement; match ProcessorID */
|
||||||
@ -291,7 +283,7 @@ static int acpi_processor_get_info(struct acpi_device *device)
|
|||||||
pr->phys_id = acpi_get_phys_id(pr->handle, device_declaration,
|
pr->phys_id = acpi_get_phys_id(pr->handle, device_declaration,
|
||||||
pr->acpi_id);
|
pr->acpi_id);
|
||||||
if (invalid_phys_cpuid(pr->phys_id))
|
if (invalid_phys_cpuid(pr->phys_id))
|
||||||
acpi_handle_debug(pr->handle, "failed to get CPU physical ID.\n");
|
dev_dbg(&device->dev, "Failed to get CPU physical ID.\n");
|
||||||
|
|
||||||
pr->id = acpi_map_cpuid(pr->phys_id, pr->acpi_id);
|
pr->id = acpi_map_cpuid(pr->phys_id, pr->acpi_id);
|
||||||
if (!cpu0_initialized && !acpi_has_cpu_in_madt()) {
|
if (!cpu0_initialized && !acpi_has_cpu_in_madt()) {
|
||||||
@ -328,11 +320,10 @@ static int acpi_processor_get_info(struct acpi_device *device)
|
|||||||
* CPU+CPU ID.
|
* CPU+CPU ID.
|
||||||
*/
|
*/
|
||||||
sprintf(acpi_device_bid(device), "CPU%X", pr->id);
|
sprintf(acpi_device_bid(device), "CPU%X", pr->id);
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Processor [%d:%d]\n", pr->id,
|
dev_dbg(&device->dev, "Processor [%d:%d]\n", pr->id, pr->acpi_id);
|
||||||
pr->acpi_id));
|
|
||||||
|
|
||||||
if (!object.processor.pblk_address)
|
if (!object.processor.pblk_address)
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No PBLK (NULL address)\n"));
|
dev_dbg(&device->dev, "No PBLK (NULL address)\n");
|
||||||
else if (object.processor.pblk_length != 6)
|
else if (object.processor.pblk_length != 6)
|
||||||
dev_err(&device->dev, "Invalid PBLK length [%d]\n",
|
dev_err(&device->dev, "Invalid PBLK length [%d]\n",
|
||||||
object.processor.pblk_length);
|
object.processor.pblk_length);
|
||||||
|
@ -28,9 +28,6 @@
|
|||||||
#define ACPI_PROCESSOR_NOTIFY_POWER 0x81
|
#define ACPI_PROCESSOR_NOTIFY_POWER 0x81
|
||||||
#define ACPI_PROCESSOR_NOTIFY_THROTTLING 0x82
|
#define ACPI_PROCESSOR_NOTIFY_THROTTLING 0x82
|
||||||
|
|
||||||
#define _COMPONENT ACPI_PROCESSOR_COMPONENT
|
|
||||||
ACPI_MODULE_NAME("processor_driver");
|
|
||||||
|
|
||||||
MODULE_AUTHOR("Paul Diefenbaugh");
|
MODULE_AUTHOR("Paul Diefenbaugh");
|
||||||
MODULE_DESCRIPTION("ACPI Processor Driver");
|
MODULE_DESCRIPTION("ACPI Processor Driver");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
@ -87,8 +84,7 @@ static void acpi_processor_notify(acpi_handle handle, u32 event, void *data)
|
|||||||
dev_name(&device->dev), event, 0);
|
dev_name(&device->dev), event, 0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(handle, "Unsupported event [0x%x]\n", event);
|
||||||
"Unsupported event [0x%x]\n", event));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,9 +31,6 @@
|
|||||||
#include <asm/apic.h>
|
#include <asm/apic.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define _COMPONENT ACPI_PROCESSOR_COMPONENT
|
|
||||||
ACPI_MODULE_NAME("processor_idle");
|
|
||||||
|
|
||||||
#define ACPI_IDLE_STATE_START (IS_ENABLED(CONFIG_ARCH_HAS_CPU_RELAX) ? 1 : 0)
|
#define ACPI_IDLE_STATE_START (IS_ENABLED(CONFIG_ARCH_HAS_CPU_RELAX) ? 1 : 0)
|
||||||
|
|
||||||
static unsigned int max_cstate __read_mostly = ACPI_PROCESSOR_MAX_POWER;
|
static unsigned int max_cstate __read_mostly = ACPI_PROCESSOR_MAX_POWER;
|
||||||
@ -239,8 +236,8 @@ static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
|
|||||||
* 100 microseconds.
|
* 100 microseconds.
|
||||||
*/
|
*/
|
||||||
if (acpi_gbl_FADT.c2_latency > ACPI_PROCESSOR_MAX_C2_LATENCY) {
|
if (acpi_gbl_FADT.c2_latency > ACPI_PROCESSOR_MAX_C2_LATENCY) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle, "C2 latency too large [%d]\n",
|
||||||
"C2 latency too large [%d]\n", acpi_gbl_FADT.c2_latency));
|
acpi_gbl_FADT.c2_latency);
|
||||||
/* invalidate C2 */
|
/* invalidate C2 */
|
||||||
pr->power.states[ACPI_STATE_C2].address = 0;
|
pr->power.states[ACPI_STATE_C2].address = 0;
|
||||||
}
|
}
|
||||||
@ -250,16 +247,15 @@ static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
|
|||||||
* 1000 microseconds.
|
* 1000 microseconds.
|
||||||
*/
|
*/
|
||||||
if (acpi_gbl_FADT.c3_latency > ACPI_PROCESSOR_MAX_C3_LATENCY) {
|
if (acpi_gbl_FADT.c3_latency > ACPI_PROCESSOR_MAX_C3_LATENCY) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle, "C3 latency too large [%d]\n",
|
||||||
"C3 latency too large [%d]\n", acpi_gbl_FADT.c3_latency));
|
acpi_gbl_FADT.c3_latency);
|
||||||
/* invalidate C3 */
|
/* invalidate C3 */
|
||||||
pr->power.states[ACPI_STATE_C3].address = 0;
|
pr->power.states[ACPI_STATE_C3].address = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle, "lvl2[0x%08x] lvl3[0x%08x]\n",
|
||||||
"lvl2[0x%08x] lvl3[0x%08x]\n",
|
|
||||||
pr->power.states[ACPI_STATE_C2].address,
|
pr->power.states[ACPI_STATE_C2].address,
|
||||||
pr->power.states[ACPI_STATE_C3].address));
|
pr->power.states[ACPI_STATE_C3].address);
|
||||||
|
|
||||||
snprintf(pr->power.states[ACPI_STATE_C2].desc,
|
snprintf(pr->power.states[ACPI_STATE_C2].desc,
|
||||||
ACPI_CX_DESC_LEN, "ACPI P_LVL2 IOPORT 0x%x",
|
ACPI_CX_DESC_LEN, "ACPI P_LVL2 IOPORT 0x%x",
|
||||||
@ -324,8 +320,8 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
|
|||||||
* devices thus we take the conservative approach.
|
* devices thus we take the conservative approach.
|
||||||
*/
|
*/
|
||||||
else if (errata.piix4.fdma) {
|
else if (errata.piix4.fdma) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle,
|
||||||
"C3 not supported on PIIX4 with Type-F DMA\n"));
|
"C3 not supported on PIIX4 with Type-F DMA\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -344,13 +340,13 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
|
|||||||
if (!pr->flags.bm_control) {
|
if (!pr->flags.bm_control) {
|
||||||
if (pr->flags.has_cst != 1) {
|
if (pr->flags.has_cst != 1) {
|
||||||
/* bus mastering control is necessary */
|
/* bus mastering control is necessary */
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle,
|
||||||
"C3 support requires BM control\n"));
|
"C3 support requires BM control\n");
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
/* Here we enter C3 without bus mastering */
|
/* Here we enter C3 without bus mastering */
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle,
|
||||||
"C3 support without BM control\n"));
|
"C3 support without BM control\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -359,9 +355,9 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
|
|||||||
* supported on when bm_check is not required.
|
* supported on when bm_check is not required.
|
||||||
*/
|
*/
|
||||||
if (!(acpi_gbl_FADT.flags & ACPI_FADT_WBINVD)) {
|
if (!(acpi_gbl_FADT.flags & ACPI_FADT_WBINVD)) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle,
|
||||||
"Cache invalidation should work properly"
|
"Cache invalidation should work properly"
|
||||||
" for C3 to be enabled on SMP systems\n"));
|
" for C3 to be enabled on SMP systems\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -843,7 +839,7 @@ static int acpi_processor_evaluate_lpi(acpi_handle handle,
|
|||||||
|
|
||||||
status = acpi_evaluate_object(handle, "_LPI", NULL, &buffer);
|
status = acpi_evaluate_object(handle, "_LPI", NULL, &buffer);
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No _LPI, giving up\n"));
|
acpi_handle_debug(handle, "No _LPI, giving up\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,9 +16,6 @@
|
|||||||
|
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
#define _COMPONENT ACPI_PROCESSOR_COMPONENT
|
|
||||||
ACPI_MODULE_NAME("processor_pdc");
|
|
||||||
|
|
||||||
static bool __init processor_physically_present(acpi_handle handle)
|
static bool __init processor_physically_present(acpi_handle handle)
|
||||||
{
|
{
|
||||||
int cpuid, type;
|
int cpuid, type;
|
||||||
@ -132,8 +129,8 @@ acpi_processor_eval_pdc(acpi_handle handle, struct acpi_object_list *pdc_in)
|
|||||||
status = acpi_evaluate_object(handle, "_PDC", pdc_in, NULL);
|
status = acpi_evaluate_object(handle, "_PDC", pdc_in, NULL);
|
||||||
|
|
||||||
if (ACPI_FAILURE(status))
|
if (ACPI_FAILURE(status))
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(handle,
|
||||||
"Could not evaluate _PDC, using legacy perf. control.\n"));
|
"Could not evaluate _PDC, using legacy perf control\n");
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
@ -23,8 +23,6 @@
|
|||||||
#define PREFIX "ACPI: "
|
#define PREFIX "ACPI: "
|
||||||
|
|
||||||
#define ACPI_PROCESSOR_FILE_PERFORMANCE "performance"
|
#define ACPI_PROCESSOR_FILE_PERFORMANCE "performance"
|
||||||
#define _COMPONENT ACPI_PROCESSOR_COMPONENT
|
|
||||||
ACPI_MODULE_NAME("processor_perflib");
|
|
||||||
|
|
||||||
static DEFINE_MUTEX(performance_mutex);
|
static DEFINE_MUTEX(performance_mutex);
|
||||||
|
|
||||||
@ -70,7 +68,8 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
|
|||||||
acpi_processor_ppc_in_use = true;
|
acpi_processor_ppc_in_use = true;
|
||||||
|
|
||||||
if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
|
if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
|
||||||
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PPC"));
|
acpi_handle_warn(pr->handle, "_PPC evaluation failed: %s\n",
|
||||||
|
acpi_format_exception(status));
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,7 +198,8 @@ static int acpi_processor_get_performance_control(struct acpi_processor *pr)
|
|||||||
|
|
||||||
status = acpi_evaluate_object(pr->handle, "_PCT", NULL, &buffer);
|
status = acpi_evaluate_object(pr->handle, "_PCT", NULL, &buffer);
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PCT"));
|
acpi_handle_warn(pr->handle, "_PCT evaluation failed: %s\n",
|
||||||
|
acpi_format_exception(status));
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,7 +299,8 @@ static int acpi_processor_get_performance_states(struct acpi_processor *pr)
|
|||||||
|
|
||||||
status = acpi_evaluate_object(pr->handle, "_PSS", NULL, &buffer);
|
status = acpi_evaluate_object(pr->handle, "_PSS", NULL, &buffer);
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PSS"));
|
acpi_handle_warn(pr->handle, "_PSS evaluation failed: %s\n",
|
||||||
|
acpi_format_exception(status));
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -310,8 +311,8 @@ static int acpi_processor_get_performance_states(struct acpi_processor *pr)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found %d performance states\n",
|
acpi_handle_debug(pr->handle, "Found %d performance states\n",
|
||||||
pss->package.count));
|
pss->package.count);
|
||||||
|
|
||||||
pr->performance->state_count = pss->package.count;
|
pr->performance->state_count = pss->package.count;
|
||||||
pr->performance->states =
|
pr->performance->states =
|
||||||
@ -330,12 +331,13 @@ static int acpi_processor_get_performance_states(struct acpi_processor *pr)
|
|||||||
state.length = sizeof(struct acpi_processor_px);
|
state.length = sizeof(struct acpi_processor_px);
|
||||||
state.pointer = px;
|
state.pointer = px;
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Extracting state %d\n", i));
|
acpi_handle_debug(pr->handle, "Extracting state %d\n", i);
|
||||||
|
|
||||||
status = acpi_extract_package(&(pss->package.elements[i]),
|
status = acpi_extract_package(&(pss->package.elements[i]),
|
||||||
&format, &state);
|
&format, &state);
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
ACPI_EXCEPTION((AE_INFO, status, "Invalid _PSS data"));
|
acpi_handle_warn(pr->handle, "Invalid _PSS data: %s\n",
|
||||||
|
acpi_format_exception(status));
|
||||||
result = -EFAULT;
|
result = -EFAULT;
|
||||||
kfree(pr->performance->states);
|
kfree(pr->performance->states);
|
||||||
goto end;
|
goto end;
|
||||||
@ -343,14 +345,14 @@ static int acpi_processor_get_performance_states(struct acpi_processor *pr)
|
|||||||
|
|
||||||
amd_fixup_frequency(px, i);
|
amd_fixup_frequency(px, i);
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle,
|
||||||
"State [%d]: core_frequency[%d] power[%d] transition_latency[%d] bus_master_latency[%d] control[0x%x] status[0x%x]\n",
|
"State [%d]: core_frequency[%d] power[%d] transition_latency[%d] bus_master_latency[%d] control[0x%x] status[0x%x]\n",
|
||||||
i,
|
i,
|
||||||
(u32) px->core_frequency,
|
(u32) px->core_frequency,
|
||||||
(u32) px->power,
|
(u32) px->power,
|
||||||
(u32) px->transition_latency,
|
(u32) px->transition_latency,
|
||||||
(u32) px->bus_master_latency,
|
(u32) px->bus_master_latency,
|
||||||
(u32) px->control, (u32) px->status));
|
(u32) px->control, (u32) px->status);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check that ACPI's u64 MHz will be valid as u32 KHz in cpufreq
|
* Check that ACPI's u64 MHz will be valid as u32 KHz in cpufreq
|
||||||
@ -400,8 +402,8 @@ int acpi_processor_get_performance_info(struct acpi_processor *pr)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (!acpi_has_method(pr->handle, "_PCT")) {
|
if (!acpi_has_method(pr->handle, "_PCT")) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle,
|
||||||
"ACPI-based processor performance control unavailable\n"));
|
"ACPI-based processor performance control unavailable\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -442,18 +444,17 @@ int acpi_processor_pstate_control(void)
|
|||||||
if (!acpi_gbl_FADT.smi_command || !acpi_gbl_FADT.pstate_control)
|
if (!acpi_gbl_FADT.smi_command || !acpi_gbl_FADT.pstate_control)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
pr_debug("Writing pstate_control [0x%x] to smi_command [0x%x]\n",
|
||||||
"Writing pstate_control [0x%x] to smi_command [0x%x]\n",
|
acpi_gbl_FADT.pstate_control, acpi_gbl_FADT.smi_command);
|
||||||
acpi_gbl_FADT.pstate_control, acpi_gbl_FADT.smi_command));
|
|
||||||
|
|
||||||
status = acpi_os_write_port(acpi_gbl_FADT.smi_command,
|
status = acpi_os_write_port(acpi_gbl_FADT.smi_command,
|
||||||
(u32)acpi_gbl_FADT.pstate_control, 8);
|
(u32)acpi_gbl_FADT.pstate_control, 8);
|
||||||
if (ACPI_SUCCESS(status))
|
if (ACPI_SUCCESS(status))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
ACPI_EXCEPTION((AE_INFO, status,
|
pr_warn("Failed to write pstate_control [0x%x] to smi_command [0x%x]: %s\n",
|
||||||
"Failed to write pstate_control [0x%x] to smi_command [0x%x]",
|
acpi_gbl_FADT.pstate_control, acpi_gbl_FADT.smi_command,
|
||||||
acpi_gbl_FADT.pstate_control, acpi_gbl_FADT.smi_command));
|
acpi_format_exception(status));
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -485,7 +486,7 @@ int acpi_processor_notify_smm(struct module *calling_module)
|
|||||||
|
|
||||||
result = acpi_processor_pstate_control();
|
result = acpi_processor_pstate_control();
|
||||||
if (!result) {
|
if (!result) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No SMI port or pstate_control\n"));
|
pr_debug("No SMI port or pstate_control\n");
|
||||||
module_put(calling_module);
|
module_put(calling_module);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -22,9 +22,6 @@
|
|||||||
|
|
||||||
#define PREFIX "ACPI: "
|
#define PREFIX "ACPI: "
|
||||||
|
|
||||||
#define _COMPONENT ACPI_PROCESSOR_COMPONENT
|
|
||||||
ACPI_MODULE_NAME("processor_throttling");
|
|
||||||
|
|
||||||
/* ignore_tpc:
|
/* ignore_tpc:
|
||||||
* 0 -> acpi processor driver doesn't ignore _TPC values
|
* 0 -> acpi processor driver doesn't ignore _TPC values
|
||||||
* 1 -> acpi processor driver ignores _TPC values
|
* 1 -> acpi processor driver ignores _TPC values
|
||||||
@ -196,10 +193,8 @@ err_ret:
|
|||||||
*/
|
*/
|
||||||
void acpi_processor_throttling_init(void)
|
void acpi_processor_throttling_init(void)
|
||||||
{
|
{
|
||||||
if (acpi_processor_update_tsd_coord()) {
|
if (acpi_processor_update_tsd_coord())
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
pr_debug("Assume no T-state coordination\n");
|
||||||
"Assume no T-state coordination\n"));
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -216,12 +211,13 @@ static int acpi_processor_throttling_notifier(unsigned long event, void *data)
|
|||||||
cpu = p_tstate->cpu;
|
cpu = p_tstate->cpu;
|
||||||
pr = per_cpu(processors, cpu);
|
pr = per_cpu(processors, cpu);
|
||||||
if (!pr) {
|
if (!pr) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Invalid pr pointer\n"));
|
pr_debug("Invalid pr pointer\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!pr->flags.throttling) {
|
if (!pr->flags.throttling) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Throttling control is "
|
acpi_handle_debug(pr->handle,
|
||||||
"unsupported on CPU %d\n", cpu));
|
"Throttling control unsupported on CPU %d\n",
|
||||||
|
cpu);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
target_state = p_tstate->target_state;
|
target_state = p_tstate->target_state;
|
||||||
@ -245,9 +241,9 @@ static int acpi_processor_throttling_notifier(unsigned long event, void *data)
|
|||||||
target_state = p_throttling->state_count - 1;
|
target_state = p_throttling->state_count - 1;
|
||||||
}
|
}
|
||||||
p_tstate->target_state = target_state;
|
p_tstate->target_state = target_state;
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "PreChange Event:"
|
acpi_handle_debug(pr->handle,
|
||||||
"target T-state of CPU %d is T%d\n",
|
"PreChange Event: target T-state of CPU %d is T%d\n",
|
||||||
cpu, target_state));
|
cpu, target_state);
|
||||||
break;
|
break;
|
||||||
case THROTTLING_POSTCHANGE:
|
case THROTTLING_POSTCHANGE:
|
||||||
/*
|
/*
|
||||||
@ -255,9 +251,9 @@ static int acpi_processor_throttling_notifier(unsigned long event, void *data)
|
|||||||
* T-state flag of acpi_processor_throttling.
|
* T-state flag of acpi_processor_throttling.
|
||||||
*/
|
*/
|
||||||
p_throttling->state = target_state;
|
p_throttling->state = target_state;
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "PostChange Event:"
|
acpi_handle_debug(pr->handle,
|
||||||
"CPU %d is switched to T%d\n",
|
"PostChange Event: CPU %d is switched to T%d\n",
|
||||||
cpu, target_state));
|
cpu, target_state);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
@ -284,9 +280,11 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
|
|||||||
|
|
||||||
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)
|
||||||
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _TPC"));
|
acpi_handle_warn(pr->handle,
|
||||||
}
|
"_TPC evaluation failed: %s\n",
|
||||||
|
acpi_format_exception(status));
|
||||||
|
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -417,9 +415,11 @@ 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)) {
|
||||||
if (status != AE_NOT_FOUND) {
|
if (status != AE_NOT_FOUND)
|
||||||
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PTC"));
|
acpi_handle_warn(pr->handle,
|
||||||
}
|
"_PTC evaluation failed: %s\n",
|
||||||
|
acpi_format_exception(status));
|
||||||
|
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -502,9 +502,11 @@ 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)) {
|
||||||
if (status != AE_NOT_FOUND) {
|
if (status != AE_NOT_FOUND)
|
||||||
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _TSS"));
|
acpi_handle_warn(pr->handle,
|
||||||
}
|
"_TSS evaluation failed: %s\n",
|
||||||
|
acpi_format_exception(status));
|
||||||
|
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -515,8 +517,8 @@ static int acpi_processor_get_throttling_states(struct acpi_processor *pr)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found %d throttling states\n",
|
acpi_handle_debug(pr->handle, "Found %d throttling states\n",
|
||||||
tss->package.count));
|
tss->package.count);
|
||||||
|
|
||||||
pr->throttling.state_count = tss->package.count;
|
pr->throttling.state_count = tss->package.count;
|
||||||
pr->throttling.states_tss =
|
pr->throttling.states_tss =
|
||||||
@ -537,12 +539,13 @@ static int acpi_processor_get_throttling_states(struct acpi_processor *pr)
|
|||||||
state.length = sizeof(struct acpi_processor_tx_tss);
|
state.length = sizeof(struct acpi_processor_tx_tss);
|
||||||
state.pointer = tx;
|
state.pointer = tx;
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Extracting state %d\n", i));
|
acpi_handle_debug(pr->handle, "Extracting state %d\n", i);
|
||||||
|
|
||||||
status = acpi_extract_package(&(tss->package.elements[i]),
|
status = acpi_extract_package(&(tss->package.elements[i]),
|
||||||
&format, &state);
|
&format, &state);
|
||||||
if (ACPI_FAILURE(status)) {
|
if (ACPI_FAILURE(status)) {
|
||||||
ACPI_EXCEPTION((AE_INFO, status, "Invalid _TSS data"));
|
acpi_handle_warn(pr->handle, "Invalid _TSS data: %s\n",
|
||||||
|
acpi_format_exception(status));
|
||||||
result = -EFAULT;
|
result = -EFAULT;
|
||||||
kfree(pr->throttling.states_tss);
|
kfree(pr->throttling.states_tss);
|
||||||
goto end;
|
goto end;
|
||||||
@ -582,9 +585,11 @@ 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) {
|
if (status != AE_NOT_FOUND)
|
||||||
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _TSD"));
|
acpi_handle_warn(pr->handle,
|
||||||
}
|
"_TSD evaluation failed: %s\n",
|
||||||
|
acpi_format_exception(status));
|
||||||
|
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -698,9 +703,9 @@ static int acpi_processor_get_throttling_fadt(struct acpi_processor *pr)
|
|||||||
|
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle,
|
||||||
"Throttling state is T%d (%d%% throttling applied)\n",
|
"Throttling state is T%d (%d%% throttling applied)\n",
|
||||||
state, pr->throttling.states[state].performance));
|
state, pr->throttling.states[state].performance);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -875,8 +880,8 @@ static int acpi_processor_get_throttling_ptc(struct acpi_processor *pr)
|
|||||||
if (ret >= 0) {
|
if (ret >= 0) {
|
||||||
state = acpi_get_throttling_state(pr, value);
|
state = acpi_get_throttling_state(pr, value);
|
||||||
if (state == -1) {
|
if (state == -1) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle,
|
||||||
"Invalid throttling state, reset\n"));
|
"Invalid throttling state, reset\n");
|
||||||
state = 0;
|
state = 0;
|
||||||
ret = __acpi_processor_set_throttling(pr, state, true,
|
ret = __acpi_processor_set_throttling(pr, state, true,
|
||||||
true);
|
true);
|
||||||
@ -921,10 +926,10 @@ static int acpi_processor_get_fadt_info(struct acpi_processor *pr)
|
|||||||
int i, step;
|
int i, step;
|
||||||
|
|
||||||
if (!pr->throttling.address) {
|
if (!pr->throttling.address) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No throttling register\n"));
|
acpi_handle_debug(pr->handle, "No throttling register\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
} else if (!pr->throttling.duty_width) {
|
} else if (!pr->throttling.duty_width) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No throttling states\n"));
|
acpi_handle_debug(pr->handle, "No throttling states\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
/* TBD: Support duty_cycle values that span bit 4. */
|
/* TBD: Support duty_cycle values that span bit 4. */
|
||||||
@ -1015,10 +1020,10 @@ static int acpi_processor_set_throttling_fadt(struct acpi_processor *pr,
|
|||||||
|
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle,
|
||||||
"Throttling state set to T%d (%d%%)\n", state,
|
"Throttling state set to T%d (%d%%)\n", state,
|
||||||
(pr->throttling.states[state].performance ? pr->
|
(pr->throttling.states[state].performance ? pr->
|
||||||
throttling.states[state].performance / 10 : 0)));
|
throttling.states[state].performance / 10 : 0));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1129,8 +1134,8 @@ static int __acpi_processor_set_throttling(struct acpi_processor *pr,
|
|||||||
* error message and continue.
|
* error message and continue.
|
||||||
*/
|
*/
|
||||||
if (!match_pr) {
|
if (!match_pr) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle,
|
||||||
"Invalid Pointer for CPU %d\n", i));
|
"Invalid Pointer for CPU %d\n", i);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@ -1138,9 +1143,8 @@ static int __acpi_processor_set_throttling(struct acpi_processor *pr,
|
|||||||
* we will report the error message and continue.
|
* we will report the error message and continue.
|
||||||
*/
|
*/
|
||||||
if (!match_pr->flags.throttling) {
|
if (!match_pr->flags.throttling) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle,
|
||||||
"Throttling Control is unsupported "
|
"Throttling Control unsupported on CPU %d\n", i);
|
||||||
"on CPU %d\n", i));
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1177,11 +1181,11 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
|
|||||||
int result = 0;
|
int result = 0;
|
||||||
struct acpi_processor_throttling *pthrottling;
|
struct acpi_processor_throttling *pthrottling;
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle,
|
||||||
"pblk_address[0x%08x] duty_offset[%d] duty_width[%d]\n",
|
"pblk_address[0x%08x] duty_offset[%d] duty_width[%d]\n",
|
||||||
pr->throttling.address,
|
pr->throttling.address,
|
||||||
pr->throttling.duty_offset,
|
pr->throttling.duty_offset,
|
||||||
pr->throttling.duty_width));
|
pr->throttling.duty_width);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Evaluate _PTC, _TSS and _TPC
|
* Evaluate _PTC, _TSS and _TPC
|
||||||
@ -1221,13 +1225,13 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
|
|||||||
* used this part.
|
* used this part.
|
||||||
*/
|
*/
|
||||||
if (errata.piix4.throttle) {
|
if (errata.piix4.throttle) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle,
|
||||||
"Throttling not supported on PIIX4 A- or B-step\n"));
|
"Throttling not supported on PIIX4 A- or B-step\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found %d throttling states\n",
|
acpi_handle_debug(pr->handle, "Found %d throttling states\n",
|
||||||
pr->throttling.state_count));
|
pr->throttling.state_count);
|
||||||
|
|
||||||
pr->flags.throttling = 1;
|
pr->flags.throttling = 1;
|
||||||
|
|
||||||
@ -1242,9 +1246,9 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
|
|||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
if (pr->throttling.state) {
|
if (pr->throttling.state) {
|
||||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
acpi_handle_debug(pr->handle,
|
||||||
"Disabling throttling (was T%d)\n",
|
"Disabling throttling (was T%d)\n",
|
||||||
pr->throttling.state));
|
pr->throttling.state);
|
||||||
result = acpi_processor_set_throttling(pr, 0, false);
|
result = acpi_processor_set_throttling(pr, 0, false);
|
||||||
if (result)
|
if (result)
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -58,7 +58,6 @@ static const struct acpi_dlayer acpi_debug_layers[] = {
|
|||||||
ACPI_DEBUG_INIT(ACPI_CONTAINER_COMPONENT),
|
ACPI_DEBUG_INIT(ACPI_CONTAINER_COMPONENT),
|
||||||
ACPI_DEBUG_INIT(ACPI_SYSTEM_COMPONENT),
|
ACPI_DEBUG_INIT(ACPI_SYSTEM_COMPONENT),
|
||||||
ACPI_DEBUG_INIT(ACPI_MEMORY_DEVICE_COMPONENT),
|
ACPI_DEBUG_INIT(ACPI_MEMORY_DEVICE_COMPONENT),
|
||||||
ACPI_DEBUG_INIT(ACPI_PROCESSOR_COMPONENT),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct acpi_dlevel acpi_debug_levels[] = {
|
static const struct acpi_dlevel acpi_debug_levels[] = {
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
#define ACPI_CONTAINER_COMPONENT 0x01000000
|
#define ACPI_CONTAINER_COMPONENT 0x01000000
|
||||||
#define ACPI_SYSTEM_COMPONENT 0x02000000
|
#define ACPI_SYSTEM_COMPONENT 0x02000000
|
||||||
#define ACPI_MEMORY_DEVICE_COMPONENT 0x08000000
|
#define ACPI_MEMORY_DEVICE_COMPONENT 0x08000000
|
||||||
#define ACPI_PROCESSOR_COMPONENT 0x20000000
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* _HID definitions
|
* _HID definitions
|
||||||
|
Loading…
Reference in New Issue
Block a user