diff options
| -rw-r--r-- | Documentation/hwmon/coretemp | 22 | ||||
| -rw-r--r-- | drivers/hwmon/coretemp.c | 33 |
2 files changed, 52 insertions, 3 deletions
diff --git a/Documentation/hwmon/coretemp b/Documentation/hwmon/coretemp index 84d46c0c71a3..c86b50c03ea8 100644 --- a/Documentation/hwmon/coretemp +++ b/Documentation/hwmon/coretemp | |||
| @@ -6,7 +6,9 @@ Supported chips: | |||
| 6 | Prefix: 'coretemp' | 6 | Prefix: 'coretemp' |
| 7 | CPUID: family 0x6, models 0xe (Pentium M DC), 0xf (Core 2 DC 65nm), | 7 | CPUID: family 0x6, models 0xe (Pentium M DC), 0xf (Core 2 DC 65nm), |
| 8 | 0x16 (Core 2 SC 65nm), 0x17 (Penryn 45nm), | 8 | 0x16 (Core 2 SC 65nm), 0x17 (Penryn 45nm), |
| 9 | 0x1a (Nehalem), 0x1c (Atom), 0x1e (Lynnfield) | 9 | 0x1a (Nehalem), 0x1c (Atom), 0x1e (Lynnfield), |
| 10 | 0x26 (Tunnel Creek Atom), 0x27 (Medfield Atom), | ||
| 11 | 0x36 (Cedar Trail Atom) | ||
| 10 | Datasheet: Intel 64 and IA-32 Architectures Software Developer's Manual | 12 | Datasheet: Intel 64 and IA-32 Architectures Software Developer's Manual |
| 11 | Volume 3A: System Programming Guide | 13 | Volume 3A: System Programming Guide |
| 12 | http://softwarecommunity.intel.com/Wiki/Mobility/720.htm | 14 | http://softwarecommunity.intel.com/Wiki/Mobility/720.htm |
| @@ -52,6 +54,17 @@ Some information comes from ark.intel.com | |||
| 52 | 54 | ||
| 53 | Process Processor TjMax(C) | 55 | Process Processor TjMax(C) |
| 54 | 56 | ||
| 57 | 22nm Core i5/i7 Processors | ||
| 58 | i7 3920XM, 3820QM, 3720QM, 3667U, 3520M 105 | ||
| 59 | i5 3427U, 3360M/3320M 105 | ||
| 60 | i7 3770/3770K 105 | ||
| 61 | i5 3570/3570K, 3550, 3470/3450 105 | ||
| 62 | i7 3770S 103 | ||
| 63 | i5 3570S/3550S, 3475S/3470S/3450S 103 | ||
| 64 | i7 3770T 94 | ||
| 65 | i5 3570T 94 | ||
| 66 | i5 3470T 91 | ||
| 67 | |||
| 55 | 32nm Core i3/i5/i7 Processors | 68 | 32nm Core i3/i5/i7 Processors |
| 56 | i7 660UM/640/620, 640LM/620, 620M, 610E 105 | 69 | i7 660UM/640/620, 640LM/620, 620M, 610E 105 |
| 57 | i5 540UM/520/430, 540M/520/450/430 105 | 70 | i5 540UM/520/430, 540M/520/450/430 105 |
| @@ -65,6 +78,11 @@ Process Processor TjMax(C) | |||
| 65 | U3400 105 | 78 | U3400 105 |
| 66 | P4505/P4500 90 | 79 | P4505/P4500 90 |
| 67 | 80 | ||
| 81 | 32nm Atom Processors | ||
| 82 | Z2460 90 | ||
| 83 | D2700/2550/2500 100 | ||
| 84 | N2850/2800/2650/2600 100 | ||
| 85 | |||
| 68 | 45nm Xeon Processors 5400 Quad-Core | 86 | 45nm Xeon Processors 5400 Quad-Core |
| 69 | X5492, X5482, X5472, X5470, X5460, X5450 85 | 87 | X5492, X5482, X5472, X5470, X5460, X5450 85 |
| 70 | E5472, E5462, E5450/40/30/20/10/05 85 | 88 | E5472, E5462, E5450/40/30/20/10/05 85 |
| @@ -85,6 +103,8 @@ Process Processor TjMax(C) | |||
| 85 | N475/470/455/450 100 | 103 | N475/470/455/450 100 |
| 86 | N280/270 90 | 104 | N280/270 90 |
| 87 | 330/230 125 | 105 | 330/230 125 |
| 106 | E680/660/640/620 90 | ||
| 107 | E680T/660T/640T/620T 110 | ||
| 88 | 108 | ||
| 89 | 45nm Core2 Processors | 109 | 45nm Core2 Processors |
| 90 | Solo ULV SU3500/3300 100 | 110 | Solo ULV SU3500/3300 100 |
diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c index b9d512331ed4..7f1feb2f467a 100644 --- a/drivers/hwmon/coretemp.c +++ b/drivers/hwmon/coretemp.c | |||
| @@ -191,6 +191,24 @@ static ssize_t show_temp(struct device *dev, | |||
| 191 | return tdata->valid ? sprintf(buf, "%d\n", tdata->temp) : -EAGAIN; | 191 | return tdata->valid ? sprintf(buf, "%d\n", tdata->temp) : -EAGAIN; |
| 192 | } | 192 | } |
| 193 | 193 | ||
| 194 | struct tjmax { | ||
| 195 | char const *id; | ||
| 196 | int tjmax; | ||
| 197 | }; | ||
| 198 | |||
| 199 | static struct tjmax __cpuinitconst tjmax_table[] = { | ||
| 200 | { "CPU D410", 100000 }, | ||
| 201 | { "CPU D425", 100000 }, | ||
| 202 | { "CPU D510", 100000 }, | ||
| 203 | { "CPU D525", 100000 }, | ||
| 204 | { "CPU N450", 100000 }, | ||
| 205 | { "CPU N455", 100000 }, | ||
| 206 | { "CPU N470", 100000 }, | ||
| 207 | { "CPU N475", 100000 }, | ||
| 208 | { "CPU 230", 100000 }, | ||
| 209 | { "CPU 330", 125000 }, | ||
| 210 | }; | ||
| 211 | |||
| 194 | static int __cpuinit adjust_tjmax(struct cpuinfo_x86 *c, u32 id, | 212 | static int __cpuinit adjust_tjmax(struct cpuinfo_x86 *c, u32 id, |
| 195 | struct device *dev) | 213 | struct device *dev) |
| 196 | { | 214 | { |
| @@ -202,6 +220,13 @@ static int __cpuinit adjust_tjmax(struct cpuinfo_x86 *c, u32 id, | |||
| 202 | int err; | 220 | int err; |
| 203 | u32 eax, edx; | 221 | u32 eax, edx; |
| 204 | struct pci_dev *host_bridge; | 222 | struct pci_dev *host_bridge; |
| 223 | int i; | ||
| 224 | |||
| 225 | /* explicit tjmax table entries override heuristics */ | ||
| 226 | for (i = 0; i < ARRAY_SIZE(tjmax_table); i++) { | ||
| 227 | if (strstr(c->x86_model_id, tjmax_table[i].id)) | ||
| 228 | return tjmax_table[i].tjmax; | ||
| 229 | } | ||
| 205 | 230 | ||
| 206 | /* Early chips have no MSR for TjMax */ | 231 | /* Early chips have no MSR for TjMax */ |
| 207 | 232 | ||
| @@ -210,7 +235,8 @@ static int __cpuinit adjust_tjmax(struct cpuinfo_x86 *c, u32 id, | |||
| 210 | 235 | ||
| 211 | /* Atom CPUs */ | 236 | /* Atom CPUs */ |
| 212 | 237 | ||
| 213 | if (c->x86_model == 0x1c) { | 238 | if (c->x86_model == 0x1c || c->x86_model == 0x26 |
| 239 | || c->x86_model == 0x27) { | ||
| 214 | usemsr_ee = 0; | 240 | usemsr_ee = 0; |
| 215 | 241 | ||
| 216 | host_bridge = pci_get_bus_and_slot(0, PCI_DEVFN(0, 0)); | 242 | host_bridge = pci_get_bus_and_slot(0, PCI_DEVFN(0, 0)); |
| @@ -223,6 +249,9 @@ static int __cpuinit adjust_tjmax(struct cpuinfo_x86 *c, u32 id, | |||
| 223 | tjmax = 90000; | 249 | tjmax = 90000; |
| 224 | 250 | ||
| 225 | pci_dev_put(host_bridge); | 251 | pci_dev_put(host_bridge); |
| 252 | } else if (c->x86_model == 0x36) { | ||
| 253 | usemsr_ee = 0; | ||
| 254 | tjmax = 100000; | ||
| 226 | } | 255 | } |
| 227 | 256 | ||
| 228 | if (c->x86_model > 0xe && usemsr_ee) { | 257 | if (c->x86_model > 0xe && usemsr_ee) { |
| @@ -772,7 +801,7 @@ MODULE_DEVICE_TABLE(x86cpu, coretemp_ids); | |||
| 772 | 801 | ||
| 773 | static int __init coretemp_init(void) | 802 | static int __init coretemp_init(void) |
| 774 | { | 803 | { |
| 775 | int i, err = -ENODEV; | 804 | int i, err; |
| 776 | 805 | ||
| 777 | /* | 806 | /* |
| 778 | * CPUID.06H.EAX[0] indicates whether the CPU has thermal | 807 | * CPUID.06H.EAX[0] indicates whether the CPU has thermal |
