Hi Huaxu, On Fri, 8 Jan 2010 17:23:27 +0800, Huaxu Wan wrote: > > hwmon: (coretemp) Check the sensor existence instead of enumeration. > > The processor supports a digital thermal sensor if CPUID.06H.EAX[0] = 1. > > Signed-off-by: Huaxu Wan <huaxu.wan@xxxxxxxxxxxxxxx> > > --- > Documentation/hwmon/coretemp | 3 --- > drivers/hwmon/coretemp.c | 24 +++++++----------------- > 2 files changed, 7 insertions(+), 20 deletions(-) > > diff --git a/Documentation/hwmon/coretemp b/Documentation/hwmon/coretemp > index 92267b6..09ff9cc 100644 > --- a/Documentation/hwmon/coretemp > +++ b/Documentation/hwmon/coretemp > @@ -4,9 +4,6 @@ Kernel driver coretemp > Supported chips: > * All Intel Core family > Prefix: 'coretemp' > - CPUID: family 0x6, models 0xe (Pentium M DC), 0xf (Core 2 DC 65nm), > - 0x16 (Core 2 SC 65nm), 0x17 (Penryn 45nm), > - 0x1a (Nehalem), 0x1c (Atom), 0x1e (Lynnfield) > Datasheet: Intel 64 and IA-32 Architectures Software Developer's Manual > Volume 3A: System Programming Guide > http://softwarecommunity.intel.com/Wiki/Mobility/720.htm > diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c > index caef39c..70e7af7 100644 > --- a/drivers/hwmon/coretemp.c > +++ b/drivers/hwmon/coretemp.c > @@ -428,6 +428,7 @@ static int __init coretemp_init(void) > { > int i, err = -ENODEV; > struct pdev_entry *p, *n; > + u32 eax; > > /* quick check if we run Intel */ > if (cpu_data(0).x86_vendor != X86_VENDOR_INTEL) > @@ -438,23 +439,12 @@ static int __init coretemp_init(void) > goto exit; > > for_each_online_cpu(i) { > - struct cpuinfo_x86 *c = &cpu_data(i); > - > - /* check if family 6, models 0xe (Pentium M DC), > - 0xf (Core 2 DC 65nm), 0x16 (Core 2 SC 65nm), > - 0x17 (Penryn 45nm), 0x1a (Nehalem), 0x1c (Atom), > - 0x1e (Lynnfield) */ > - 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 == 0x1c) || > - (c->x86_model == 0x1e))) { > - > - /* supported CPU not found, but report the unknown > - family 6 CPU */ > - if ((c->x86 == 0x6) && (c->x86_model > 0xf)) > - printk(KERN_WARNING DRVNAME ": Unknown CPU " > - "model %x\n", c->x86_model); > + > + /* check if the CPU has thermal sensor */ > + eax = cpuid_eax(0x06); > + if (!(eax & 0x01)) { > + struct cpuinfo_x86 *c = &cpu_data(i); > + printk(KERN_WARNING DRVNAME ": CPU (model=0x%x) has no thermal sensor!\n", c->x86_model); > continue; > } > Hmm. I don't like it for two reasons: * Which guarantee do we have that "the processor supports a digital thermal sensor" implies that this digital thermal sensor is compatible with what the Core/Core2/Atom have? Couldn't the format change in the future? * Each CPU model has its own high temperature limit, which we use to compute the current temperature. So we can't pretend that we support all future CPU models, we really do not. Just look at how complex function adjust_tjmax is. It would only make sense to have "universal" support if the driver could report a relative value. Unfortunately our sysfs interface doesn't support this, although there have been discussions on that topic lately: http://thread.gmane.org/gmane.linux.drivers.sensors/20721/focus=917317 -- Jean Delvare _______________________________________________ lm-sensors mailing list lm-sensors@xxxxxxxxxxxxxx http://lists.lm-sensors.org/mailman/listinfo/lm-sensors