1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
diff -ubr orig/linux-2.6.28/Documentation/hwmon/coretemp linux-2.6.28/Documentation/hwmon/coretemp
--- orig/linux-2.6.28/Documentation/hwmon/coretemp 2008-12-25 00:26:37.000000000 +0100
+++ linux-2.6.28/Documentation/hwmon/coretemp 2009-07-18 07:29:37.000000000 +0200
@@ -4,7 +4,7 @@
Supported chips:
* All Intel Core family
Prefix: 'coretemp'
- CPUID: family 0x6, models 0xe, 0xf, 0x16, 0x17
+ CPUID: family 0x6, models 0xe, 0xf, 0x16, 0x17, 0x1c
Datasheet: Intel 64 and IA-32 Architectures Software Developer's Manual
Volume 3A: System Programming Guide
http://softwarecommunity.intel.com/Wiki/Mobility/720.htm
@@ -14,10 +14,11 @@
Description
-----------
-This driver permits reading temperature sensor embedded inside Intel Core CPU.
-Temperature is measured in degrees Celsius and measurement resolution is
-1 degree C. Valid temperatures are from 0 to TjMax degrees C, because
-the actual value of temperature register is in fact a delta from TjMax.
+This driver permits reading temperature sensor embedded inside Intel
+Core and Intel Atom CPUs. Temperature is measured in degrees Celsius
+and measurement resolution is 1 degree C. Valid temperatures are from 0
+to TjMax degrees C, because the actual value of temperature register is
+in fact a delta from TjMax.
Temperature known as TjMax is the maximum junction temperature of processor.
Intel defines this temperature as 85C or 100C. At this temperature, protection
@@ -35,4 +36,5 @@
The TjMax temperature is set to 85 degrees C if undocumented model specific
register (UMSR) 0xee has bit 30 set. If not the TjMax is 100 degrees C as
-(sometimes) documented in processor datasheet.
+(sometimes) documented in processor datasheet. The Intel Atom has TjMax 95C
+as per the specification.
diff -ubr orig/linux-2.6.28/drivers/hwmon/coretemp.c linux-2.6.28/drivers/hwmon/coretemp.c
--- orig/linux-2.6.28/drivers/hwmon/coretemp.c 2008-12-25 00:26:37.000000000 +0100
+++ linux-2.6.28/drivers/hwmon/coretemp.c 2009-07-18 08:12:16.000000000 +0200
@@ -1,7 +1,7 @@
/*
* coretemp.c - Linux kernel module for hardware monitoring
*
- * Copyright (C) 2007 Rudolf Marek <r.marek@assembler.cz>
+ * Copyright (C) 2007, 2008 Rudolf Marek <r.marek@assembler.cz>
*
* Inspired from many hwmon drivers
*
@@ -244,8 +244,14 @@
}
}
+ /* Intel Atom has only fixed TjMax at 95C */
+
+ if (c->x86_model == 0x1c) {
+ data->tjmax = 95000;
+ } else {
+ /* Adjust the TjMax for the rest of Core2 family */
data->tjmax = adjust_tjmax(c, data->id, &pdev->dev);
- platform_set_drvdata(pdev, data);
+ }
/* read the still undocumented IA32_TEMPERATURE_TARGET it exists
on older CPUs but not in this register */
@@ -265,6 +271,8 @@
}
}
+ platform_set_drvdata(pdev, data);
+
if ((err = sysfs_create_group(&pdev->dev.kobj, &coretemp_group)))
goto exit_dev;
@@ -413,11 +421,11 @@
for_each_online_cpu(i) {
struct cpuinfo_x86 *c = &cpu_data(i);
- /* check if family 6, models 0xe, 0xf, 0x16, 0x17, 0x1A */
+ /* check if family 6, models 0xe, 0xf, 0x16, 0x17, 0x1A, 0x1C */
if ((c->cpuid_level < 0) || (c->x86 != 0x6) ||
!((c->x86_model == 0xe) || (c->x86_model == 0xf) ||
(c->x86_model == 0x16) || (c->x86_model == 0x17) ||
- (c->x86_model == 0x1A))) {
+ (c->x86_model == 0x1A) || (c->x86_model == 0x1C))) {
/* supported CPU not found, but report the unknown
family 6 CPU */
|