diff options
| -rw-r--r-- | drivers/hwmon/coretemp.c | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c index 44b23917d4cc..cf5b1de32c0a 100644 --- a/drivers/hwmon/coretemp.c +++ b/drivers/hwmon/coretemp.c | |||
| @@ -377,9 +377,9 @@ exit_free: | |||
| 377 | } | 377 | } |
| 378 | 378 | ||
| 379 | 379 | ||
| 380 | static int __devinit chk_ucode_version(struct platform_device *pdev) | 380 | static int __cpuinit chk_ucode_version(unsigned int cpu) |
| 381 | { | 381 | { |
| 382 | struct cpuinfo_x86 *c = &cpu_data(pdev->id); | 382 | struct cpuinfo_x86 *c = &cpu_data(cpu); |
| 383 | int err; | 383 | int err; |
| 384 | u32 edx; | 384 | u32 edx; |
| 385 | 385 | ||
| @@ -390,17 +390,15 @@ static int __devinit chk_ucode_version(struct platform_device *pdev) | |||
| 390 | */ | 390 | */ |
| 391 | if (c->x86_model == 0xe && c->x86_mask < 0xc) { | 391 | if (c->x86_model == 0xe && c->x86_mask < 0xc) { |
| 392 | /* check for microcode update */ | 392 | /* check for microcode update */ |
| 393 | err = smp_call_function_single(pdev->id, get_ucode_rev_on_cpu, | 393 | err = smp_call_function_single(cpu, get_ucode_rev_on_cpu, |
| 394 | &edx, 1); | 394 | &edx, 1); |
| 395 | if (err) { | 395 | if (err) { |
| 396 | dev_err(&pdev->dev, | 396 | pr_err("Cannot determine microcode revision of " |
| 397 | "Cannot determine microcode revision of " | 397 | "CPU#%u (%d)!\n", cpu, err); |
| 398 | "CPU#%u (%d)!\n", pdev->id, err); | ||
| 399 | return -ENODEV; | 398 | return -ENODEV; |
| 400 | } else if (edx < 0x39) { | 399 | } else if (edx < 0x39) { |
| 401 | dev_err(&pdev->dev, | 400 | pr_err("Errata AE18 not fixed, update BIOS or " |
| 402 | "Errata AE18 not fixed, update BIOS or " | 401 | "microcode of the CPU!\n"); |
| 403 | "microcode of the CPU!\n"); | ||
| 404 | return -ENODEV; | 402 | return -ENODEV; |
| 405 | } | 403 | } |
| 406 | } | 404 | } |
| @@ -544,11 +542,6 @@ static int __devinit coretemp_probe(struct platform_device *pdev) | |||
| 544 | struct platform_data *pdata; | 542 | struct platform_data *pdata; |
| 545 | int err; | 543 | int err; |
| 546 | 544 | ||
| 547 | /* Check the microcode version of the CPU */ | ||
| 548 | err = chk_ucode_version(pdev); | ||
| 549 | if (err) | ||
| 550 | return err; | ||
| 551 | |||
| 552 | /* Initialize the per-package data structures */ | 545 | /* Initialize the per-package data structures */ |
| 553 | pdata = kzalloc(sizeof(struct platform_data), GFP_KERNEL); | 546 | pdata = kzalloc(sizeof(struct platform_data), GFP_KERNEL); |
| 554 | if (!pdata) | 547 | if (!pdata) |
| @@ -630,7 +623,7 @@ static int __cpuinit coretemp_device_add(unsigned int cpu) | |||
| 630 | } | 623 | } |
| 631 | 624 | ||
| 632 | pdev_entry->pdev = pdev; | 625 | pdev_entry->pdev = pdev; |
| 633 | pdev_entry->phys_proc_id = TO_PHYS_ID(cpu); | 626 | pdev_entry->phys_proc_id = pdev->id; |
| 634 | 627 | ||
| 635 | list_add_tail(&pdev_entry->list, &pdev_list); | 628 | list_add_tail(&pdev_entry->list, &pdev_list); |
| 636 | mutex_unlock(&pdev_list_mutex); | 629 | mutex_unlock(&pdev_list_mutex); |
| @@ -691,6 +684,10 @@ static void __cpuinit get_core_online(unsigned int cpu) | |||
| 691 | return; | 684 | return; |
| 692 | 685 | ||
| 693 | if (!pdev) { | 686 | if (!pdev) { |
| 687 | /* Check the microcode version of the CPU */ | ||
| 688 | if (chk_ucode_version(cpu)) | ||
| 689 | return; | ||
| 690 | |||
| 694 | /* | 691 | /* |
| 695 | * Alright, we have DTS support. | 692 | * Alright, we have DTS support. |
| 696 | * We are bringing the _first_ core in this pkg | 693 | * We are bringing the _first_ core in this pkg |
