Well, I compiled both your c7temp driver and Harald's via_cputemp driver and neither one gives useful CPU temp data on my system. I'm going to add some debug printk's to both to see if I can see any difference on this particular system; but, I am not hopeful. My thought right now is that the only significant difference is that via_cputemp.ko checks to see which CPU family we are on since there are differences in the thermal monitoring mechanisms between C7-A, C7-D and Nano if I recall the Via documentation correctly. Since neither works on my particular platform at this time; and, since Harald is apparently difficult to find; I think that Juerg's c7temp driver would be the one to push into the kernel. via_cputemp.ko acpitz-virtual-0 Adapter: Virtual device temp1: +52.0?C (crit = +105.0?C) via_cputemp-isa-0000 Adapter: ISA adapter Core 0: +0.1?C c7temp.ko acpitz-virtual-0 Adapter: Virtual device temp1: +52.0?C (crit = +105.0?C) c7temp-isa-0000 Adapter: ISA adapter in0: +0.80 V temp1: +0.0?C Thanks, -- Justin Chudgar Information Technology Consultant 5040 Saddlehorn Rd, Weed, CA 96084 530-938-9692 (Home Office) On Monday 10 August 2009 02:30:29 pm you wrote: > Justin, > > No progress. I'm waiting for some answers from Harald. In fact I was > about to suggest to Jean to push my driver upstream since Harald is > not very responsive (or just too busy). > > But please give Harald's driver a try. I'd be curious to know if you > get anything with his driver. > The patch for his driver is here: > http://lists.lm-sensors.org/pipermail/lm-sensors/2009-June/026037.html > > ...juerg > > On Mon, Aug 10, 2009 at 2:16 PM, Justin Chudgar<justin at justinzane.com> wrote: > > Has any progress been made in getting a module selected for the VIA C7 > > processors? I had attempted to use Juerg's c7temp, however, due to HP's > > thermal monitoring BIOS settings, I did not get data. > > > > I would be interesting in testing Harald's module, if it has been > > selected. Could someone help direct me in this? > > -- > > > > Justin Chudgar > > Information Technology Consultant > > 5040 Saddlehorn Rd, Weed, CA 96084 > > 530-938-9692 (Home Office) > > > > On Friday 10 July 2009 03:00:02 am lm-sensors-request at lm-sensors.org wrote: > >> Send lm-sensors mailing list submissions to > >> l > >> > >> To subscribe or unsubscribe via the World Wide Web, visit > >> http://lists.lm-sensors.org/mailman/listinfo/lm-sensors > >> or, via email, send a message with subject or body 'help' to > >> lm-sensors-request at lm-sensors.org > >> > >> You can reach the person managing the list at > >> lm-sensors-owner at lm-sensors.org > >> > >> When replying, please edit your Subject line so it is more specific > >> than "Re: Contents of lm-sensors digest..." > >> > >> > >> Today's Topics: > >> > >> 1. [PATCH 2.6.31-rc2] hwmon: add support for GM/GME965 IGP > >> temperature report. (lu zhihe) > >> 2. Re: sensors-detect and c7temp (Juerg Haefliger) > >> 3. Re: [PATCH 2.6.31-rc2] hwmon: add support for GM/GME965 IGP > >> temperature report. (Jean Delvare) > >> 4. lm-sensors, RHEL 5.3, 32bit (Bill Nackers) > >> > >> > >> ---------------------------------------------------------------------- > >> > >> Message: 1 > >> Date: Thu, 9 Jul 2009 13:41:38 +0000 > >> From: lu zhihe <tombowfly at gmail.com> > >> Subject: [PATCH 2.6.31-rc2] hwmon: add support for > >> GM/GME965 IGP temperature report. > >> To: lm-sensors at lm-sensors.org > >> Message-ID: > >> <73511e6c0907090641v506ba4a2pa9a1e93a69dd2fd1 at mail.gmail.com> > >> Content-Type: text/plain; charset=ISO-8859-1 > >> > >> From: Lu Zhihe <tombowfly at gmail.com> > >> > >> Subject: [PATCH] hwmon: add support for GM/GME965 IGP temperature > >> report. > >> > >> Exported the graphics hot spot temperature report via sysfs. > >> > >> Signed-off-by: Lu Zhihe <tombowfly at gmail.com> > >> --- > >> > >> > >> Add GM/GME965 IGP temperature report for hwmon. > >> > >> The GM/GME965 datasheet can get from: > >> http://www.intel.com/Assets/PDF/datasheet/316273.pdf > >> > >> The Calibration Fomula comes from a earlier version: > >> http://www.intel.com/design/chipsets/datashts/313053.htm > >> Page 358. > >> > >> > >> diff -uprN linux-2.6.31-rc2.orig/drivers/hwmon/Kconfig > >> linux-2.6.31-rc2/drivers/hwmon/Kconfig > >> --- linux-2.6.31-rc2.orig/drivers/hwmon/Kconfig 2009-07-08 > >> 23:26:56.000000000 +0000 > >> +++ linux-2.6.31-rc2/drivers/hwmon/Kconfig 2009-07-08 22:49:37.000000000 > >> +0000 @@ -401,6 +401,16 @@ config SENSORS_GL520SM > >> This driver can also be built as a module. If so, the module > >> will be called gl520sm. > >> > >> +config SENSORS_GM965 > >> + tristate "Intel GM965 temperature sensor" > >> + depends on PCI > >> + help > >> + If you say yes here you get support for GM965 IGP temperatue > >> + sensor. > >> + > >> + This driver can also be built as a module. If so, the module > >> + will be called gm965temp. > >> + > >> config SENSORS_CORETEMP > >> tristate "Intel Core (2) Duo/Solo temperature sensor" > >> depends on X86 && EXPERIMENTAL > >> diff -uprN linux-2.6.31-rc2.orig/drivers/hwmon/Makefile > >> linux-2.6.31-rc2/drivers/hwmon/Makefile > >> --- linux-2.6.31-rc2.orig/drivers/hwmon/Makefile 2009-07-08 > >> 23:27:07.000000000 +0000 > >> +++ linux-2.6.31-rc2/drivers/hwmon/Makefile 2009-07-08 > >> 22:48:02.000000000 +0000 @@ -46,6 +46,7 @@ obj-$(CONFIG_SENSORS_FSCPOS) > >> += fscpos.o obj-$(CONFIG_SENSORS_G760A) += g760a.o > >> obj-$(CONFIG_SENSORS_GL518SM) += gl518sm.o > >> obj-$(CONFIG_SENSORS_GL520SM) += gl520sm.o > >> +obj-$(CONFIG_SENSORS_GM965) += gm965temp.o > >> obj-$(CONFIG_SENSORS_ULTRA45) += ultra45_env.o > >> obj-$(CONFIG_SENSORS_HDAPS) += hdaps.o > >> obj-$(CONFIG_SENSORS_I5K_AMB) += i5k_amb.o > >> diff -uprN linux-2.6.31-rc2.orig/drivers/hwmon/gm965temp.c > >> linux-2.6.31-rc2/drivers/hwmon/gm965temp.c > >> --- linux-2.6.31-rc2.orig/drivers/hwmon/gm965temp.c 1970-01-01 > >> 00:00:00.000000000 +0000 > >> +++ linux-2.6.31-rc2/drivers/hwmon/gm965temp.c 2009-07-09 > >> 20:25:12.000000000 +0000 > >> @@ -0,0 +1,348 @@ > >> +/* > >> + * A hwmon driver for the Intel GM/GME965 chipset IGP > >> + * temperature sensors > >> + * > >> + * Copyright (C) 2009 Lu Zhihe <tombowfly at gmail.com> > >> + * > >> + * This program is free software; you can redistribute it and/or modify > >> + * it under the terms of the GNU General Public License as published by > >> + * the Free Software Foundation; either version 2 of the License, or > >> + * (at your option) any later version. > >> + * > >> + * This program is distributed in the hope that it will be useful, > >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of > >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > >> + * GNU General Public License for more details. > >> + * > >> + * You should have received a copy of the GNU General Public License > >> + * along with this program; if not, write to the Free Software > >> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 > >> USA + */ > >> + > >> +#include <linux/module.h> > >> +#include <linux/jiffies.h> > >> +#include <linux/hwmon.h> > >> +#include <linux/hwmon-sysfs.h> > >> +#include <linux/err.h> > >> +#include <linux/mutex.h> > >> +#include <linux/delay.h> > >> +#include <linux/pci.h> > >> +#include <linux/platform_device.h> > >> + > >> +#define DRVNAME "gm965temp" > >> + > >> +enum { SHOW_TEMP, SHOW_LABEL } SHOW; > >> + > >> +#define PCI_DEVICE_ID_INTEL_82965GM 0x2a00 > >> +#define PCI_DEVICE_ID_INTEL_82965GME 0x2a10 > >> +#define GM965_SYSFS_NAME_LEN 16 > >> + > >> +#define MCHBAR_I965 0x48 /* MCH Memory Mapped Register BAR */ > >> +#define MCHBAR_MASK 0xfffffc000ULL /* bits 35:14 */ > >> + > >> +static ssize_t show_label(struct device *dev, > >> + struct device_attribute *devattr, > >> + char *buf); > >> + > >> +static ssize_t show_igp_temp(struct device *dev, > >> + struct device_attribute *devattr, > >> + char *buf); > >> + > >> +struct gm965temp_data { > >> + struct device *hwmon_dev; > >> + struct mutex update_lock; > >> + > >> + u64 igp_base; > >> + unsigned long igp_len; > >> + void __iomem *igp_mmio; > >> + unsigned long chipset_id; > >> +}; > >> + > >> +static ssize_t show_name(struct device *dev, struct device_attribute > >> *devattr, + char *buf) > >> +{ > >> + return sprintf(buf, "%s\n", DRVNAME); > >> +} > >> + > >> +static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_igp_temp, NULL, > >> SHOW_TEMP); > >> +static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_label, NULL, > >> SHOW_LABEL); +static DEVICE_ATTR(name, S_IRUGO, show_name, NULL); > >> + > >> +static struct attribute *gm965temp_attributes[] = { > >> + &sensor_dev_attr_temp1_label.dev_attr.attr, > >> + &sensor_dev_attr_temp1_input.dev_attr.attr, > >> + NULL > >> +}; > >> + > >> +static const struct attribute_group gm965temp_group = { > >> + .attrs = gm965temp_attributes, > >> +}; > >> + > >> +static struct platform_device *igp_pdev; > >> + > >> +static u8 igp_read_byte(struct gm965temp_data *data, unsigned long > >> offset) > >> +{ > >> + return ioread8(data->igp_mmio + offset); > >> +} > >> + > >> +static u16 igp_read_short(struct gm965temp_data *data, unsigned long > >> offset) +{ > >> + return ioread16(data->igp_mmio + offset); > >> +} > >> + > >> +static void igp_write_short(struct gm965temp_data *data, unsigned long > >> offset, + u16 val) > >> +{ > >> + iowrite16(val, data->igp_mmio + offset); > >> +} > >> + > >> +static ssize_t show_label(struct device *dev, > >> + struct device_attribute *devattr, > >> + char *buf) > >> +{ > >> + return sprintf(buf, "GM965 IGP temperature report\n"); > >> +} > >> + > >> +#define TSC1 0x1001 > >> +#define TSS1 0x1004 > >> +#define TR1 0x1006 > >> + > >> +#define TSE 0x8000 > >> +#define TMOV (0x01 << 10) > >> + > >> +#define MAX_RETRIS 3 > >> + > >> +static ssize_t show_igp_temp(struct device *dev, > >> + struct device_attribute *devattr, > >> + char *buf) > >> +{ > >> + struct gm965temp_data *data = dev_get_drvdata(dev); > >> + unsigned short tsc1_val = 0; > >> + unsigned char tr1_val = 0; > >> + unsigned short tss1_val = 0; > >> + unsigned long temp = 0; > >> + int i = 0; > >> + i = MAX_RETRIS; > >> + > >> + mutex_lock(&data->update_lock); > >> + > >> + tsc1_val = igp_read_short(data, TSC1); > >> + > >> + if (!(tsc1_val & TSE)) { > >> + igp_write_short(data, TSC1, tsc1_val|TSE); > >> + tsc1_val = igp_read_short(data, TSC1); > >> + } else { > >> +try_againt: > >> + tss1_val = igp_read_short(data, TSS1); > >> + > >> + if (tss1_val & TMOV) { > >> + tr1_val = igp_read_byte(data, TR1); > >> + if ((tr1_val != 0xFF) && (tr1_val != 0x0)) > >> + temp = (16*tr1_val*tr1_val - 11071*tr1_val + 1610500) > >> + /10; > >> + } else { > >> + do { > >> + mdelay(1); > >> + udelay(300); > >> + goto try_againt; > >> + } while (i--); > >> + } > >> + } > >> + > >> + mutex_unlock(&data->update_lock); > >> + return sprintf(buf, "%d\n", (unsigned int)temp); > >> +} > >> + > >> +static int __devinit gm965temp_hwmon_init(struct platform_device *pdev) > >> +{ > >> + int res = 0; > >> + struct gm965temp_data *data = platform_get_drvdata(pdev); > >> + > >> + res = device_create_file(&pdev->dev, &dev_attr_name); > >> + if (res) > >> + goto exit_remove; > >> + > >> + res = sysfs_create_group(&pdev->dev.kobj, &gm965temp_group); > >> + if (res) > >> + goto exit_dev; > >> + > >> + data->hwmon_dev = hwmon_device_register(&pdev->dev); > >> + if (IS_ERR(data->hwmon_dev)) { > >> + res = PTR_ERR(data->hwmon_dev); > >> + goto exit_remove; > >> + } > >> + > >> + return res; > >> + > >> +exit_remove: > >> + sysfs_remove_group(&pdev->dev.kobj, &gm965temp_group); > >> +exit_dev: > >> + device_remove_file(&pdev->dev, &dev_attr_name); > >> + > >> + return res; > >> +} > >> + > >> +static int __devinit gm965temp_add(void) > >> +{ > >> + int res = -ENODEV; > >> + > >> + /* only ever going to be one of these */ > >> + igp_pdev = platform_device_alloc(DRVNAME, 0); > >> + if (!igp_pdev) > >> + return -ENOMEM; > >> + > >> + res = platform_device_add(igp_pdev); > >> + if (res) > >> + goto err; > >> + return 0; > >> + > >> +err: > >> + platform_device_put(igp_pdev); > >> + return res; > >> +} > >> + > >> +static int __devinit gm965_find_igp_registers(struct gm965temp_data > >> *data, > >> + unsigned long devid) > >> +{ > >> + struct pci_dev *pcidev; > >> + u32 val32; > >> + u64 val64 = 0x0ULL; > >> + int res = -ENODEV; > >> + > >> + pcidev = pci_get_device(PCI_VENDOR_ID_INTEL, > >> + devid, > >> + NULL); > >> + if (!pcidev) { > >> + printk(KERN_ERR "pci_get_device failed\n"); > >> + return -ENODEV; > >> + } > >> + > >> + if (pci_read_config_dword(pcidev, MCHBAR_I965 + 4, &val32)) > >> + goto out; > >> + val64 = (u64)val32; > >> + val64 <<= 32; > >> + if (pci_read_config_dword(pcidev, MCHBAR_I965, &val32)) > >> + goto out; > >> + > >> + val64 |= val32; > >> + data->igp_base = val64 & MCHBAR_MASK; > >> + data->igp_len = 16*1024; > >> + > >> + data->chipset_id = devid; > >> + > >> + res = 0; > >> +out: > >> + pci_dev_put(pcidev); > >> + return res; > >> +} > >> + > >> +static unsigned long chipset_ids[] = { > >> + PCI_DEVICE_ID_INTEL_82965GM, > >> + PCI_DEVICE_ID_INTEL_82965GME, > >> + 0 > >> +}; > >> + > >> +static int __devinit gm965temp_probe(struct platform_device *pdev) > >> +{ > >> + struct gm965temp_data *data; > >> + struct resource *reso; > >> + int i; > >> + int res = -ENODEV; > >> + > >> + data = kzalloc(sizeof(*data), GFP_KERNEL); > >> + if (!data) > >> + return -ENOMEM; > >> + > >> + i = 0; > >> + do { > >> + res = gm965_find_igp_registers(data, chipset_ids[i]); > >> + i++; > >> + } while (res && chipset_ids[i]); > >> + > >> + if (res) > >> + goto err; > >> + /* Set up resource regions */ > >> + reso = request_mem_region(data->igp_base, data->igp_len, DRVNAME); > >> + if (!reso) { > >> + printk(KERN_ERR "request_mem_region failed\n"); > >> + res = -EBUSY; > >> + goto err; > >> + } > >> + > >> + data->igp_mmio = ioremap_nocache(data->igp_base, data->igp_len); > >> + if (!data->igp_mmio) { > >> + printk(KERN_ERR "ioremap_nocache failed\n"); > >> + res = -EBUSY; > >> + goto err_map_failed; > >> + } > >> + > >> + platform_set_drvdata(pdev, data); > >> + > >> + mutex_init(&data->update_lock); > >> + > >> + res = gm965temp_hwmon_init(pdev); > >> + if (res) > >> + goto err_init_failed; > >> + > >> + return res; > >> + > >> +err_init_failed: > >> + iounmap(data->igp_mmio); > >> + platform_set_drvdata(pdev, NULL); > >> +err_map_failed: > >> + release_mem_region(data->igp_base, data->igp_len); > >> +err: > >> + kfree(data); > >> + return res; > >> +} > >> + > >> +static int __devexit gm965temp_remove(struct platform_device *pdev) > >> +{ > >> + struct gm965temp_data *data = platform_get_drvdata(pdev); > >> + hwmon_device_unregister(data->hwmon_dev); > >> + device_remove_file(&pdev->dev, &dev_attr_name); > >> + > >> + iounmap(data->igp_mmio); > >> + release_mem_region(data->igp_base, data->igp_len); > >> + platform_set_drvdata(pdev, NULL); > >> + kfree(data); > >> + return 0; > >> +} > >> + > >> +static struct platform_driver gm965temp_driver = { > >> + .driver = { > >> + .owner = THIS_MODULE, > >> + .name = DRVNAME, > >> + }, > >> + .probe = gm965temp_probe, > >> + .remove = __devexit_p(gm965temp_remove), > >> +}; > >> + > >> +static int __init gm965temp_init(void) > >> +{ > >> + int res; > >> + > >> + res = platform_driver_register(&gm965temp_driver); > >> + if (res) > >> + return res; > >> + > >> + res = gm965temp_add(); > >> + if (res) > >> + platform_driver_unregister(&gm965temp_driver); > >> + > >> + return res; > >> +} > >> + > >> +static void __exit gm965temp_exit(void) > >> +{ > >> + platform_device_unregister(igp_pdev); > >> + platform_driver_unregister(&gm965temp_driver); > >> +} > >> + > >> +MODULE_AUTHOR("Lu Zhihe"); > >> +MODULE_DESCRIPTION("Intel GM965 chipset IGP temperature sensor"); > >> +MODULE_LICENSE("GPL"); > >> + > >> +module_init(gm965temp_init); > >> +module_exit(gm965temp_exit); > >> + > >> > >> > >> > >> ------------------------------ > >> > >> Message: 2 > >> Date: Thu, 9 Jul 2009 07:19:09 -0700 > >> From: Juerg Haefliger <juergh at gmail.com> > >> Subject: Re: sensors-detect and c7temp > >> To: Hans de Goede <hdegoede at redhat.com>, Nicolas Chauvet > >> <kwizart at gmail.com> > >> Cc: LM Sensors <lm-sensors at lm-sensors.org> > >> Message-ID: > >> <191fb4ca0907090719u4b4994b6x33a12874b83aaf04 at mail.gmail.com> > >> Content-Type: text/plain; charset=UTF-8 > >> > >> Hans, Nicholas, > >> > >> Hans, you reviewed it already a long time ago :-) > >> (http://article.gmane.org/gmane.linux.drivers.sensors/17029/match=c7temp > >>) I personally don't have a C7 and the driver did never make it into > >> mainline I guess mainly because there were quite a few testers that > >> reported 0 C temp readings. Some C7 don't seem to have the SW readable > >> temp sensor enabled and I couldn't/never had the time to figure out what > >> is going on. On top of that, Harald from VIA posted a patch for a > >> different driver for the C7. > >> http://lists.lm-sensors.org/pipermail/lm-sensors/2009-June/026037.html > >> > >> Jean was asking which one he should pick to include and I replied with > >> a few questions for Harald and we are waiting on a response. The ball > >> is in Harald's court. > >> http://lists.lm-sensors.org/pipermail/lm-sensors/2009-June/026167.html > >> > >> Nicholas, feel free to test either or both drivers. > >> > >> It's time to get either one of them into the kernel. If we don't hear > >> from Harald I suggest to pick mine :-) > >> > >> ...juerg > >> > >> On Thu, Jul 9, 2009 at 6:13 AM, Hans de Goede<hdegoede at redhat.com> wrote: > >> > Hi, > >> > > >> > On 06/25/2009 09:48 PM, Nicolas Chauvet wrote: > >> >> Hello Hans! > >> >> > >> >> ?From http://www.lm-sensors.org/wiki/Device and about C7 (Esther) > >> >> > >> >> I own such device, and it seems still requesting testers for the > >> >> c7temp driver ? > >> > > >> > I'm not sure what the status of this driver is, it seems it never made > >> > it > >> > into > >> > the mainline kernel, which is a petty. I hope the author of the driver > >> > (Juerg Haefliger <juergh at gmail.com>, in the CC) can answer this. > >> > > >> > Juerg, what ever happened to the c7temp driver ? Are you still > >> > interested > >> > in getting it into the mainline? If so Nicolas can test it and I can > >> > review it. > >> > > >> > Thanks & Regards, > >> > > >> > Hans > >> > >> ------------------------------ > >> > >> Message: 3 > >> Date: Thu, 9 Jul 2009 17:33:48 +0200 > >> From: Jean Delvare <khali at linux-fr.org> > >> Subject: Re: [PATCH 2.6.31-rc2] hwmon: add support for > >> GM/GME965 IGP temperature report. > >> To: lu zhihe <tombowfly at gmail.com> > >> Cc: lm-sensors at lm-sensors.org > >> Message-ID: <20090709173348.5bec7f14 at hyperion.delvare> > >> Content-Type: text/plain; charset=US-ASCII > >> > >> Hi Lu, > >> > >> On Thu, 9 Jul 2009 13:41:38 +0000, lu zhihe wrote: > >> > From: Lu Zhihe <tombowfly at gmail.com> > >> > > >> > Subject: [PATCH] hwmon: add support for GM/GME965 IGP temperature > >> > report. > >> > > >> > Exported the graphics hot spot temperature report via sysfs. > >> > > >> > Signed-off-by: Lu Zhihe <tombowfly at gmail.com> > >> > --- > >> > (...) > >> > +static unsigned long chipset_ids[] = { > >> > + PCI_DEVICE_ID_INTEL_82965GM, > >> > + PCI_DEVICE_ID_INTEL_82965GME, > >> > + 0 > >> > +}; > >> > >> These defines do not exist in the current kernel tree. I presume you > >> forgot to includes changes to include/linux/pci_ids.h? > >> > >> I am also curious what these PCI devices are. We do not want to have > >> driver conflicts, so it might make more sense to add hardware > >> monitoring functionality to an existing driver than writing a brand new > >> driver. > > > > _______________________________________________ > > lm-sensors mailing list > > lm-sensors at lm-sensors.org > > http://lists.lm-sensors.org/mailman/listinfo/lm-sensors -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.lm-sensors.org/pipermail/lm-sensors/attachments/20090821/8cf75dee/attachment-0001.html