35
35
#include <linux/platform_device.h>
36
36
#include <linux/cpu.h>
37
37
#include <linux/pci.h>
38
#include <linux/smp.h>
38
39
#include <asm/msr.h>
39
40
#include <asm/processor.h>
42
42
#define DRVNAME "coretemp"
44
typedef enum { SHOW_TEMP, SHOW_TJMAX, SHOW_TTARGET, SHOW_LABEL,
44
#define BASE_SYSFS_ATTR_NO 2 /* Sysfs Base attr no for coretemp */
45
#define NUM_REAL_CORES 16 /* Number of Real cores per cpu */
46
#define CORETEMP_NAME_LENGTH 17 /* String Length of attrs */
47
#define MAX_ATTRS 5 /* Maximum no of per-core attrs */
48
#define MAX_CORE_DATA (NUM_REAL_CORES + BASE_SYSFS_ATTR_NO)
51
#define TO_PHYS_ID(cpu) cpu_data(cpu).phys_proc_id
52
#define TO_CORE_ID(cpu) cpu_data(cpu).cpu_core_id
53
#define TO_ATTR_NO(cpu) (TO_CORE_ID(cpu) + BASE_SYSFS_ATTR_NO)
54
#define for_each_sibling(i, cpu) for_each_cpu(i, cpu_sibling_mask(cpu))
56
#define TO_PHYS_ID(cpu) (cpu)
57
#define TO_CORE_ID(cpu) (cpu)
58
#define TO_ATTR_NO(cpu) (cpu)
59
#define for_each_sibling(i, cpu) for (i = 0; false; )
48
* Functions declaration
63
* Per-Core Temperature Data
64
* @last_updated: The time when the current temperature value was updated
65
* earlier (in jiffies).
66
* @cpu_core_id: The CPU Core from which temperature values should be read
67
* This value is passed as "id" field to rdmsr/wrmsr functions.
68
* @status_reg: One of IA32_THERM_STATUS or IA32_PACKAGE_THERM_STATUS,
69
* from where the temperature values should be read.
70
* @is_pkg_data: If this is 1, the temp_data holds pkgtemp data.
71
* Otherwise, temp_data holds coretemp data.
72
* @valid: If this is 1, the current temperature is valid.
51
static struct coretemp_data *coretemp_update_device(struct device *dev);
53
struct coretemp_data {
54
struct device *hwmon_dev;
55
struct mutex update_lock;
59
char valid; /* zero until following fields are valid */
60
unsigned long last_updated; /* in jiffies */
71
static ssize_t show_name(struct device *dev, struct device_attribute
75
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
76
struct coretemp_data *data = dev_get_drvdata(dev);
78
if (attr->index == SHOW_NAME)
79
ret = sprintf(buf, "%s\n", data->name);
81
ret = sprintf(buf, "Core %d\n", data->core_id);
85
static ssize_t show_alarm(struct device *dev, struct device_attribute
88
struct coretemp_data *data = coretemp_update_device(dev);
89
/* read the Out-of-spec log, never clear */
90
return sprintf(buf, "%d\n", data->alarm);
78
unsigned long last_updated;
84
struct sensor_device_attribute sd_attrs[MAX_ATTRS];
85
char attr_name[MAX_ATTRS][CORETEMP_NAME_LENGTH];
86
struct mutex update_lock;
89
/* Platform Data per Physical CPU */
90
struct platform_data {
91
struct device *hwmon_dev;
93
struct temp_data *core_data[MAX_CORE_DATA];
94
struct device_attribute name_attr;
98
struct list_head list;
99
struct platform_device *pdev;
103
static LIST_HEAD(pdev_list);
104
static DEFINE_MUTEX(pdev_list_mutex);
106
static ssize_t show_name(struct device *dev,
107
struct device_attribute *devattr, char *buf)
109
return sprintf(buf, "%s\n", DRVNAME);
112
static ssize_t show_label(struct device *dev,
113
struct device_attribute *devattr, char *buf)
115
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
116
struct platform_data *pdata = dev_get_drvdata(dev);
117
struct temp_data *tdata = pdata->core_data[attr->index];
119
if (tdata->is_pkg_data)
120
return sprintf(buf, "Physical id %u\n", pdata->phys_proc_id);
122
return sprintf(buf, "Core %u\n", tdata->cpu_core_id);
125
static ssize_t show_crit_alarm(struct device *dev,
126
struct device_attribute *devattr, char *buf)
129
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
130
struct platform_data *pdata = dev_get_drvdata(dev);
131
struct temp_data *tdata = pdata->core_data[attr->index];
133
rdmsr_on_cpu(tdata->cpu, tdata->status_reg, &eax, &edx);
135
return sprintf(buf, "%d\n", (eax >> 5) & 1);
138
static ssize_t show_tjmax(struct device *dev,
139
struct device_attribute *devattr, char *buf)
141
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
142
struct platform_data *pdata = dev_get_drvdata(dev);
144
return sprintf(buf, "%d\n", pdata->core_data[attr->index]->tjmax);
147
static ssize_t show_ttarget(struct device *dev,
148
struct device_attribute *devattr, char *buf)
150
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
151
struct platform_data *pdata = dev_get_drvdata(dev);
153
return sprintf(buf, "%d\n", pdata->core_data[attr->index]->ttarget);
93
156
static ssize_t show_temp(struct device *dev,
94
struct device_attribute *devattr, char *buf)
157
struct device_attribute *devattr, char *buf)
96
160
struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
97
struct coretemp_data *data = coretemp_update_device(dev);
100
if (attr->index == SHOW_TEMP)
101
err = data->valid ? sprintf(buf, "%d\n", data->temp) : -EAGAIN;
102
else if (attr->index == SHOW_TJMAX)
103
err = sprintf(buf, "%d\n", data->tjmax);
105
err = sprintf(buf, "%d\n", data->ttarget);
109
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL,
111
static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, show_temp, NULL,
113
static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, show_temp, NULL,
115
static DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL);
116
static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_name, NULL, SHOW_LABEL);
117
static SENSOR_DEVICE_ATTR(name, S_IRUGO, show_name, NULL, SHOW_NAME);
119
static struct attribute *coretemp_attributes[] = {
120
&sensor_dev_attr_name.dev_attr.attr,
121
&sensor_dev_attr_temp1_label.dev_attr.attr,
122
&dev_attr_temp1_crit_alarm.attr,
123
&sensor_dev_attr_temp1_input.dev_attr.attr,
124
&sensor_dev_attr_temp1_crit.dev_attr.attr,
128
static const struct attribute_group coretemp_group = {
129
.attrs = coretemp_attributes,
132
static struct coretemp_data *coretemp_update_device(struct device *dev)
134
struct coretemp_data *data = dev_get_drvdata(dev);
136
mutex_lock(&data->update_lock);
138
if (!data->valid || time_after(jiffies, data->last_updated + HZ)) {
142
rdmsr_on_cpu(data->id, MSR_IA32_THERM_STATUS, &eax, &edx);
143
data->alarm = (eax >> 5) & 1;
144
/* update only if data has been valid */
161
struct platform_data *pdata = dev_get_drvdata(dev);
162
struct temp_data *tdata = pdata->core_data[attr->index];
164
mutex_lock(&tdata->update_lock);
166
/* Check whether the time interval has elapsed */
167
if (!tdata->valid || time_after(jiffies, tdata->last_updated + HZ)) {
168
rdmsr_on_cpu(tdata->cpu, tdata->status_reg, &eax, &edx);
170
/* Check whether the data is valid */
145
171
if (eax & 0x80000000) {
146
data->temp = data->tjmax - (((eax >> 16)
150
dev_dbg(dev, "Temperature data invalid (0x%x)\n", eax);
172
tdata->temp = tdata->tjmax -
173
((eax >> 16) & 0x7f) * 1000;
152
data->last_updated = jiffies;
176
tdata->last_updated = jiffies;
155
mutex_unlock(&data->update_lock);
179
mutex_unlock(&tdata->update_lock);
180
return tdata->valid ? sprintf(buf, "%d\n", tdata->temp) : -EAGAIN;
159
static int __devinit adjust_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *dev)
183
static int adjust_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *dev)
161
185
/* The 100C is default for both mobile and non mobile CPUs */
300
316
rdmsr(MSR_IA32_UCODE_REV, eax, *(u32 *)edx);
303
static int __devinit coretemp_probe(struct platform_device *pdev)
305
struct coretemp_data *data;
319
static int get_pkg_tjmax(unsigned int cpu, struct device *dev)
324
err = rdmsr_safe_on_cpu(cpu, MSR_IA32_TEMPERATURE_TARGET, &eax, &edx);
326
val = (eax >> 16) & 0xff;
330
dev_warn(dev, "Unable to read Pkg-TjMax from CPU:%u\n", cpu);
331
return 100000; /* Default TjMax: 100 degree celsius */
334
static int create_name_attr(struct platform_data *pdata, struct device *dev)
336
sysfs_attr_init(&pdata->name_attr.attr);
337
pdata->name_attr.attr.name = "name";
338
pdata->name_attr.attr.mode = S_IRUGO;
339
pdata->name_attr.show = show_name;
340
return device_create_file(dev, &pdata->name_attr);
343
static int create_core_attrs(struct temp_data *tdata, struct device *dev,
347
static ssize_t (*rd_ptr[MAX_ATTRS]) (struct device *dev,
348
struct device_attribute *devattr, char *buf) = {
349
show_label, show_crit_alarm, show_ttarget,
350
show_temp, show_tjmax };
351
static const char *names[MAX_ATTRS] = {
352
"temp%d_label", "temp%d_crit_alarm",
353
"temp%d_max", "temp%d_input",
356
for (i = 0; i < MAX_ATTRS; i++) {
357
snprintf(tdata->attr_name[i], CORETEMP_NAME_LENGTH, names[i],
359
sysfs_attr_init(&tdata->sd_attrs[i].dev_attr.attr);
360
tdata->sd_attrs[i].dev_attr.attr.name = tdata->attr_name[i];
361
tdata->sd_attrs[i].dev_attr.attr.mode = S_IRUGO;
362
tdata->sd_attrs[i].dev_attr.show = rd_ptr[i];
363
tdata->sd_attrs[i].dev_attr.store = NULL;
364
tdata->sd_attrs[i].index = attr_no;
365
err = device_create_file(dev, &tdata->sd_attrs[i].dev_attr);
373
device_remove_file(dev, &tdata->sd_attrs[i].dev_attr);
377
static void update_ttarget(__u8 cpu_model, struct temp_data *tdata,
384
* Initialize ttarget value. Eventually this will be
385
* initialized with the value from MSR_IA32_THERM_INTERRUPT
386
* register. If IA32_TEMPERATURE_TARGET is supported, this
387
* value will be over written below.
388
* To Do: Patch to initialize ttarget from MSR_IA32_THERM_INTERRUPT
390
tdata->ttarget = tdata->tjmax - 20000;
393
* Read the still undocumented IA32_TEMPERATURE_TARGET. It exists
394
* on older CPUs but not in this register,
395
* Atoms don't have it either.
397
if (cpu_model > 0xe && cpu_model != 0x1c) {
398
err = rdmsr_safe_on_cpu(tdata->cpu,
399
MSR_IA32_TEMPERATURE_TARGET, &eax, &edx);
402
"Unable to read IA32_TEMPERATURE_TARGET MSR\n");
404
tdata->ttarget = tdata->tjmax -
405
((eax >> 8) & 0xff) * 1000;
410
static int __devinit chk_ucode_version(struct platform_device *pdev)
306
412
struct cpuinfo_x86 *c = &cpu_data(pdev->id);
310
if (!(data = kzalloc(sizeof(struct coretemp_data), GFP_KERNEL))) {
312
dev_err(&pdev->dev, "Out of memory\n");
318
data->core_id = c->cpu_core_id;
320
data->name = "coretemp";
321
mutex_init(&data->update_lock);
323
/* test if we can access the THERM_STATUS MSR */
324
err = rdmsr_safe_on_cpu(data->id, MSR_IA32_THERM_STATUS, &eax, &edx);
327
"Unable to access THERM_STATUS MSR, giving up\n");
331
/* Check if we have problem with errata AE18 of Core processors:
332
Readings might stop update when processor visited too deep sleep,
333
fixed for stepping D0 (6EC).
336
if ((c->x86_model == 0xe) && (c->x86_mask < 0xc)) {
417
* Check if we have problem with errata AE18 of Core processors:
418
* Readings might stop update when processor visited too deep sleep,
419
* fixed for stepping D0 (6EC).
421
if (c->x86_model == 0xe && c->x86_mask < 0xc) {
337
422
/* check for microcode update */
338
err = smp_call_function_single(data->id, get_ucode_rev_on_cpu,
423
err = smp_call_function_single(pdev->id, get_ucode_rev_on_cpu,
341
426
dev_err(&pdev->dev,
342
427
"Cannot determine microcode revision of "
343
"CPU#%u (%d)!\n", data->id, err);
428
"CPU#%u (%d)!\n", pdev->id, err);
346
430
} else if (edx < 0x39) {
348
431
dev_err(&pdev->dev,
349
432
"Errata AE18 not fixed, update BIOS or "
350
433
"microcode of the CPU!\n");
355
data->tjmax = get_tjmax(c, data->id, &pdev->dev);
356
platform_set_drvdata(pdev, data);
359
* read the still undocumented IA32_TEMPERATURE_TARGET. It exists
360
* on older CPUs but not in this register,
361
* Atoms don't have it either.
364
if ((c->x86_model > 0xe) && (c->x86_model != 0x1c)) {
365
err = rdmsr_safe_on_cpu(data->id, MSR_IA32_TEMPERATURE_TARGET,
368
dev_warn(&pdev->dev, "Unable to read"
369
" IA32_TEMPERATURE_TARGET MSR\n");
371
data->ttarget = data->tjmax -
372
(((eax >> 8) & 0xff) * 1000);
373
err = device_create_file(&pdev->dev,
374
&sensor_dev_attr_temp1_max.dev_attr);
380
if ((err = sysfs_create_group(&pdev->dev.kobj, &coretemp_group)))
383
data->hwmon_dev = hwmon_device_register(&pdev->dev);
384
if (IS_ERR(data->hwmon_dev)) {
385
err = PTR_ERR(data->hwmon_dev);
386
dev_err(&pdev->dev, "Class registration failed (%d)\n",
394
sysfs_remove_group(&pdev->dev.kobj, &coretemp_group);
396
device_remove_file(&pdev->dev, &sensor_dev_attr_temp1_max.dev_attr);
440
static struct platform_device *coretemp_get_pdev(unsigned int cpu)
442
u16 phys_proc_id = TO_PHYS_ID(cpu);
443
struct pdev_entry *p;
445
mutex_lock(&pdev_list_mutex);
447
list_for_each_entry(p, &pdev_list, list)
448
if (p->phys_proc_id == phys_proc_id) {
449
mutex_unlock(&pdev_list_mutex);
453
mutex_unlock(&pdev_list_mutex);
457
static struct temp_data *init_temp_data(unsigned int cpu, int pkg_flag)
459
struct temp_data *tdata;
461
tdata = kzalloc(sizeof(struct temp_data), GFP_KERNEL);
465
tdata->status_reg = pkg_flag ? MSR_IA32_PACKAGE_THERM_STATUS :
466
MSR_IA32_THERM_STATUS;
467
tdata->is_pkg_data = pkg_flag;
469
tdata->cpu_core_id = TO_CORE_ID(cpu);
470
mutex_init(&tdata->update_lock);
474
static int create_core_data(struct platform_data *pdata,
475
struct platform_device *pdev,
476
unsigned int cpu, int pkg_flag)
478
struct temp_data *tdata;
479
struct cpuinfo_x86 *c = &cpu_data(cpu);
484
* Find attr number for sysfs:
485
* We map the attr number to core id of the CPU
486
* The attr number is always core id + 2
487
* The Pkgtemp will always show up as temp1_*, if available
489
attr_no = pkg_flag ? 1 : TO_ATTR_NO(cpu);
491
if (attr_no > MAX_CORE_DATA - 1)
495
* Provide a single set of attributes for all HT siblings of a core
496
* to avoid duplicate sensors (the processor ID and core ID of all
497
* HT siblings of a core are the same).
498
* Skip if a HT sibling of this core is already registered.
499
* This is not an error.
501
if (pdata->core_data[attr_no] != NULL)
504
tdata = init_temp_data(cpu, pkg_flag);
508
/* Test if we can access the status register */
509
err = rdmsr_safe_on_cpu(cpu, tdata->status_reg, &eax, &edx);
513
/* We can access status register. Get Critical Temperature */
515
tdata->tjmax = get_pkg_tjmax(pdev->id, &pdev->dev);
517
tdata->tjmax = get_tjmax(c, cpu, &pdev->dev);
519
update_ttarget(c->x86_model, tdata, &pdev->dev);
520
pdata->core_data[attr_no] = tdata;
522
/* Create sysfs interfaces */
523
err = create_core_attrs(tdata, &pdev->dev, attr_no);
533
static void coretemp_add_core(unsigned int cpu, int pkg_flag)
535
struct platform_data *pdata;
536
struct platform_device *pdev = coretemp_get_pdev(cpu);
542
pdata = platform_get_drvdata(pdev);
544
err = create_core_data(pdata, pdev, cpu, pkg_flag);
546
dev_err(&pdev->dev, "Adding Core %u failed\n", cpu);
549
static void coretemp_remove_core(struct platform_data *pdata,
550
struct device *dev, int indx)
553
struct temp_data *tdata = pdata->core_data[indx];
555
/* Remove the sysfs attributes */
556
for (i = 0; i < MAX_ATTRS; i++)
557
device_remove_file(dev, &tdata->sd_attrs[i].dev_attr);
559
kfree(pdata->core_data[indx]);
560
pdata->core_data[indx] = NULL;
563
static int __devinit coretemp_probe(struct platform_device *pdev)
565
struct platform_data *pdata;
568
/* Check the microcode version of the CPU */
569
err = chk_ucode_version(pdev);
573
/* Initialize the per-package data structures */
574
pdata = kzalloc(sizeof(struct platform_data), GFP_KERNEL);
578
err = create_name_attr(pdata, &pdev->dev);
582
pdata->phys_proc_id = TO_PHYS_ID(pdev->id);
583
platform_set_drvdata(pdev, pdata);
585
pdata->hwmon_dev = hwmon_device_register(&pdev->dev);
586
if (IS_ERR(pdata->hwmon_dev)) {
587
err = PTR_ERR(pdata->hwmon_dev);
588
dev_err(&pdev->dev, "Class registration failed (%d)\n", err);
594
device_remove_file(&pdev->dev, &pdata->name_attr);
595
platform_set_drvdata(pdev, NULL);
403
601
static int __devexit coretemp_remove(struct platform_device *pdev)
405
struct coretemp_data *data = platform_get_drvdata(pdev);
407
hwmon_device_unregister(data->hwmon_dev);
408
sysfs_remove_group(&pdev->dev.kobj, &coretemp_group);
409
device_remove_file(&pdev->dev, &sensor_dev_attr_temp1_max.dev_attr);
603
struct platform_data *pdata = platform_get_drvdata(pdev);
606
for (i = MAX_CORE_DATA - 1; i >= 0; --i)
607
if (pdata->core_data[i])
608
coretemp_remove_core(pdata, &pdev->dev, i);
610
device_remove_file(&pdev->dev, &pdata->name_attr);
611
hwmon_device_unregister(pdata->hwmon_dev);
410
612
platform_set_drvdata(pdev, NULL);
507
static void __cpuinit coretemp_device_remove(unsigned int cpu)
670
static void coretemp_device_remove(unsigned int cpu)
509
struct pdev_entry *p;
672
struct pdev_entry *p, *n;
673
u16 phys_proc_id = TO_PHYS_ID(cpu);
512
675
mutex_lock(&pdev_list_mutex);
513
list_for_each_entry(p, &pdev_list, list) {
676
list_for_each_entry_safe(p, n, &pdev_list, list) {
677
if (p->phys_proc_id != phys_proc_id)
517
679
platform_device_unregister(p->pdev);
518
680
list_del(&p->list);
519
mutex_unlock(&pdev_list_mutex);
521
for_each_cpu(i, cpu_sibling_mask(cpu))
522
if (i != cpu && !coretemp_device_add(i))
526
683
mutex_unlock(&pdev_list_mutex);
686
static bool is_any_core_online(struct platform_data *pdata)
690
/* Find online cores, except pkgtemp data */
691
for (i = MAX_CORE_DATA - 1; i >= 0; --i) {
692
if (pdata->core_data[i] &&
693
!pdata->core_data[i]->is_pkg_data) {
700
static void __cpuinit get_core_online(unsigned int cpu)
702
struct cpuinfo_x86 *c = &cpu_data(cpu);
703
struct platform_device *pdev = coretemp_get_pdev(cpu);
707
* CPUID.06H.EAX[0] indicates whether the CPU has thermal
708
* sensors. We check this bit only, all the early CPUs
709
* without thermal sensors will be filtered out.
711
if (!cpu_has(c, X86_FEATURE_DTS))
716
* Alright, we have DTS support.
717
* We are bringing the _first_ core in this pkg
718
* online. So, initialize per-pkg data structures and
719
* then bring this core online.
721
err = coretemp_device_add(cpu);
725
* Check whether pkgtemp support is available.
726
* If so, add interfaces for pkgtemp.
728
if (cpu_has(c, X86_FEATURE_PTS))
729
coretemp_add_core(cpu, 1);
732
* Physical CPU device already exists.
733
* So, just add interfaces for this core.
735
coretemp_add_core(cpu, 0);
738
static void __cpuinit put_core_offline(unsigned int cpu)
741
struct platform_data *pdata;
742
struct platform_device *pdev = coretemp_get_pdev(cpu);
744
/* If the physical CPU device does not exist, just return */
748
pdata = platform_get_drvdata(pdev);
750
indx = TO_ATTR_NO(cpu);
752
if (pdata->core_data[indx] && pdata->core_data[indx]->cpu == cpu)
753
coretemp_remove_core(pdata, &pdev->dev, indx);
756
* If a HT sibling of a core is taken offline, but another HT sibling
757
* of the same core is still online, register the alternate sibling.
758
* This ensures that exactly one set of attributes is provided as long
759
* as at least one HT sibling of a core is online.
761
for_each_sibling(i, cpu) {
765
* Display temperature sensor data for one HT sibling
766
* per core only, so abort the loop after one such
767
* sibling has been found.
773
* If all cores in this pkg are offline, remove the device.
774
* coretemp_device_remove calls unregister_platform_device,
775
* which in turn calls coretemp_remove. This removes the
776
* pkgtemp entry and does other clean ups.
778
if (!is_any_core_online(pdata))
779
coretemp_device_remove(cpu);
529
782
static int __cpuinit coretemp_cpu_callback(struct notifier_block *nfb,
530
783
unsigned long action, void *hcpu)