|
@@ -316,6 +316,18 @@ static int adjust_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *dev)
|
|
|
return tjmax;
|
|
|
}
|
|
|
|
|
|
+static bool cpu_has_tjmax(struct cpuinfo_x86 *c)
|
|
|
+{
|
|
|
+ u8 model = c->x86_model;
|
|
|
+
|
|
|
+ return model > 0xe &&
|
|
|
+ model != 0x1c &&
|
|
|
+ model != 0x26 &&
|
|
|
+ model != 0x27 &&
|
|
|
+ model != 0x35 &&
|
|
|
+ model != 0x36;
|
|
|
+}
|
|
|
+
|
|
|
static int get_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *dev)
|
|
|
{
|
|
|
int err;
|
|
@@ -328,7 +340,7 @@ static int get_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *dev)
|
|
|
*/
|
|
|
err = rdmsr_safe_on_cpu(id, MSR_IA32_TEMPERATURE_TARGET, &eax, &edx);
|
|
|
if (err) {
|
|
|
- if (c->x86_model > 0xe && c->x86_model != 0x1c)
|
|
|
+ if (cpu_has_tjmax(c))
|
|
|
dev_warn(dev, "Unable to read TjMax from CPU %u\n", id);
|
|
|
} else {
|
|
|
val = (eax >> 16) & 0xff;
|