Message ID | 20250211194407.2577252-8-sohil.mehta@intel.com |
---|---|
State | New |
Headers | show |
Series | Prepare for new Intel Family numbers | expand |
On 2/11/25 11:43, Sohil Mehta wrote: > + /* > + * Return without adjustment if the Family isn't 6. > + * The rest of the function assumes Family 6. > + */ > + if (c->x86 != 6) > + return tjmax; Shouldn't we be converting this over to the vfm matches? This is kinda icky: > + return family > 15 || > + (family == 6 && > + model > 0xe && > + model != 0x1c && > + model != 0x26 && > + model != 0x27 && > + model != 0x35 && > + model != 0x36); > } I'm not sure how this escaped so far. Probably because it's not in arch/x86.
On 2/11/2025 12:58 PM, Dave Hansen wrote: > On 2/11/25 11:43, Sohil Mehta wrote: >> + /* >> + * Return without adjustment if the Family isn't 6. >> + * The rest of the function assumes Family 6. >> + */ >> + if (c->x86 != 6) >> + return tjmax; > > Shouldn't we be converting this over to the vfm matches? > For drivers/, I mainly focused on fixes instead of cleanups. Converting drivers over to VFM checks is significant work. There are a lot of such comparisons and switch cases (probably more than 50) across drivers/cpufreq/ and drivers/hwmon/. Some of the functions might need significant refactoring and rewrites. I think someone with expertise in that particular driver should probably do it. I did start with it initially but it is beyond my bandwidth at the moment. > This is kinda icky: > >> + return family > 15 || >> + (family == 6 && >> + model > 0xe && >> + model != 0x1c && >> + model != 0x26 && >> + model != 0x27 && >> + model != 0x35 && >> + model != 0x36); >> } > > I'm not sure how this escaped so far. Probably because it's not in arch/x86. >
diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c index 1b9203b20d70..1aa67a2b5f18 100644 --- a/drivers/hwmon/coretemp.c +++ b/drivers/hwmon/coretemp.c @@ -185,6 +185,13 @@ static int adjust_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *dev) return tjmax_table[i].tjmax; } + /* + * Return without adjustment if the Family isn't 6. + * The rest of the function assumes Family 6. + */ + if (c->x86 != 6) + return tjmax; + for (i = 0; i < ARRAY_SIZE(tjmax_model_table); i++) { const struct tjmax_model *tm = &tjmax_model_table[i]; if (c->x86_model == tm->model && @@ -260,14 +267,17 @@ static int adjust_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *dev) static bool cpu_has_tjmax(struct cpuinfo_x86 *c) { + u8 family = c->x86; u8 model = c->x86_model; - return model > 0xe && - model != 0x1c && - model != 0x26 && - model != 0x27 && - model != 0x35 && - model != 0x36; + return family > 15 || + (family == 6 && + model > 0xe && + model != 0x1c && + model != 0x26 && + model != 0x27 && + model != 0x35 && + model != 0x36); } static int get_tjmax(struct temp_data *tdata, struct device *dev) @@ -460,7 +470,7 @@ static int chk_ucode_version(unsigned int cpu) * Readings might stop update when processor visited too deep sleep, * fixed for stepping D0 (6EC). */ - if (c->x86_model == 0xe && c->x86_stepping < 0xc && c->microcode < 0x39) { + if (c->x86 == 6 && c->x86_model == 0xe && c->x86_stepping < 0xc && c->microcode < 0x39) { pr_err("Errata AE18 not fixed, update BIOS or microcode of the CPU!\n"); return -ENODEV; } @@ -580,7 +590,7 @@ static int create_core_data(struct platform_device *pdev, unsigned int cpu, * MSR_IA32_TEMPERATURE_TARGET register. Atoms don't have the register * at all. */ - if (c->x86_model > 0xe && c->x86_model != 0x1c) + if (c->x86 > 15 || (c->x86 == 6 && c->x86_model > 0xe && c->x86_model != 0x1c)) if (get_ttarget(tdata, &pdev->dev) >= 0) tdata->attr_size++;