diff options
Diffstat (limited to 'drivers/acpi/processor_core.c')
-rw-r--r-- | drivers/acpi/processor_core.c | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c index 1278aca96fe3..99a3a28594da 100644 --- a/drivers/acpi/processor_core.c +++ b/drivers/acpi/processor_core.c | |||
@@ -253,31 +253,21 @@ static int acpi_processor_errata(struct acpi_processor *pr) | |||
253 | * _PDC is required for a BIOS-OS handshake for most of the newer | 253 | * _PDC is required for a BIOS-OS handshake for most of the newer |
254 | * ACPI processor features. | 254 | * ACPI processor features. |
255 | */ | 255 | */ |
256 | 256 | static int acpi_processor_set_pdc(struct acpi_processor *pr) | |
257 | int acpi_processor_set_pdc(struct acpi_processor *pr, | ||
258 | struct acpi_object_list *pdc_in) | ||
259 | { | 257 | { |
258 | struct acpi_object_list *pdc_in = pr->pdc; | ||
260 | acpi_status status = AE_OK; | 259 | acpi_status status = AE_OK; |
261 | u32 arg0_buf[3]; | ||
262 | union acpi_object arg0 = { ACPI_TYPE_BUFFER }; | ||
263 | struct acpi_object_list no_object = { 1, &arg0 }; | ||
264 | struct acpi_object_list *pdc; | ||
265 | 260 | ||
266 | ACPI_FUNCTION_TRACE("acpi_processor_set_pdc"); | 261 | ACPI_FUNCTION_TRACE("acpi_processor_set_pdc"); |
267 | 262 | ||
268 | arg0.buffer.length = 12; | 263 | if (!pdc_in) |
269 | arg0.buffer.pointer = (u8 *) arg0_buf; | 264 | return_VALUE(status); |
270 | arg0_buf[0] = ACPI_PDC_REVISION_ID; | ||
271 | arg0_buf[1] = 0; | ||
272 | arg0_buf[2] = 0; | ||
273 | |||
274 | pdc = (pdc_in) ? pdc_in : &no_object; | ||
275 | 265 | ||
276 | status = acpi_evaluate_object(pr->handle, "_PDC", pdc, NULL); | 266 | status = acpi_evaluate_object(pr->handle, "_PDC", pdc_in, NULL); |
277 | 267 | ||
278 | if ((ACPI_FAILURE(status)) && (pdc_in)) | 268 | if (ACPI_FAILURE(status)) |
279 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, | 269 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, |
280 | "Error evaluating _PDC, using legacy perf. control...\n")); | 270 | "Could not evaluate _PDC, using legacy perf. control...\n")); |
281 | 271 | ||
282 | return_VALUE(status); | 272 | return_VALUE(status); |
283 | } | 273 | } |
@@ -357,7 +347,6 @@ static int acpi_processor_add_fs(struct acpi_device *device) | |||
357 | ACPI_PROCESSOR_FILE_THROTTLING)); | 347 | ACPI_PROCESSOR_FILE_THROTTLING)); |
358 | else { | 348 | else { |
359 | entry->proc_fops = &acpi_processor_throttling_fops; | 349 | entry->proc_fops = &acpi_processor_throttling_fops; |
360 | entry->proc_fops->write = acpi_processor_write_throttling; | ||
361 | entry->data = acpi_driver_data(device); | 350 | entry->data = acpi_driver_data(device); |
362 | entry->owner = THIS_MODULE; | 351 | entry->owner = THIS_MODULE; |
363 | } | 352 | } |
@@ -372,7 +361,6 @@ static int acpi_processor_add_fs(struct acpi_device *device) | |||
372 | ACPI_PROCESSOR_FILE_LIMIT)); | 361 | ACPI_PROCESSOR_FILE_LIMIT)); |
373 | else { | 362 | else { |
374 | entry->proc_fops = &acpi_processor_limit_fops; | 363 | entry->proc_fops = &acpi_processor_limit_fops; |
375 | entry->proc_fops->write = acpi_processor_write_limit; | ||
376 | entry->data = acpi_driver_data(device); | 364 | entry->data = acpi_driver_data(device); |
377 | entry->owner = THIS_MODULE; | 365 | entry->owner = THIS_MODULE; |
378 | } | 366 | } |
@@ -589,6 +577,10 @@ static int acpi_processor_start(struct acpi_device *device) | |||
589 | "Error installing device notify handler\n")); | 577 | "Error installing device notify handler\n")); |
590 | } | 578 | } |
591 | 579 | ||
580 | /* _PDC call should be done before doing anything else (if reqd.). */ | ||
581 | arch_acpi_processor_init_pdc(pr); | ||
582 | acpi_processor_set_pdc(pr); | ||
583 | |||
592 | acpi_processor_power_init(pr, device); | 584 | acpi_processor_power_init(pr, device); |
593 | 585 | ||
594 | if (pr->flags.throttling) { | 586 | if (pr->flags.throttling) { |