[PATCH] UBUNTU: [Upstream] Adding support for Intel Atom core sensors

Tim Gardner tim.gardner at canonical.com
Mon Sep 21 22:28:13 UTC 2009


eugenesan at gmail.com wrote:
> From: Eugene San (eugenesan) <eugenesan at gmail.com>
> 
> OriginalAuthor: Rudolf Marek <r.marek at assembler.cz>
> OriginalLocation: http://mabene.icomedias.com/coretemp.patch
> Signed-off-by: Eugene San (eugenesan) <eugenesan at gmail.com>
> 
> I am pushing this tiny patch to make many NetBooks
> and Nettops owners happy with release of Karmic.
> Patch by original code maintainer.
> Works without issues on my Atom/ION based systems with 3 last snapshots in Karmic.
> 
> ---
>  Documentation/hwmon/coretemp |   14 ++++++++------
>  drivers/hwmon/coretemp.c     |   16 ++++++++++++----
>  2 files changed, 20 insertions(+), 10 deletions(-)
> 
> diff --git a/Documentation/hwmon/coretemp b/Documentation/hwmon/coretemp
> index dbbe6c7..d85c8fa 100644
> --- a/Documentation/hwmon/coretemp
> +++ b/Documentation/hwmon/coretemp
> @@ -4,7 +4,7 @@ Kernel driver coretemp
>  Supported chips:
>    * All Intel Core family
>      Prefix: 'coretemp'
> -    CPUID: family 0x6, models 0xe, 0xf, 0x16, 0x17
> +    CPUID: family 0x6, models 0xe, 0xf, 0x16, 0x17, 0x1c
>      Datasheet: Intel 64 and IA-32 Architectures Software Developer's Manual
>                 Volume 3A: System Programming Guide
>                 http://softwarecommunity.intel.com/Wiki/Mobility/720.htm
> @@ -14,10 +14,11 @@ Author: Rudolf Marek
>  Description
>  -----------
>  
> -This driver permits reading temperature sensor embedded inside Intel Core CPU.
> -Temperature is measured in degrees Celsius and measurement resolution is
> -1 degree C. Valid temperatures are from 0 to TjMax degrees C, because
> -the actual value of temperature register is in fact a delta from TjMax.
> +This driver permits reading temperature sensor embedded inside Intel
> +Core  and Intel Atom CPUs. Temperature is measured in degrees Celsius
> +and measurement resolution is 1 degree C. Valid temperatures are from 0
> +to TjMax degrees C, because the actual value of temperature register is
> +in fact a delta from TjMax.
>  
>  Temperature known as TjMax is the maximum junction temperature of processor.
>  Intel defines this temperature as 85C or 100C. At this temperature, protection
> @@ -35,4 +36,5 @@ temp1_label	 - Contains string "Core X", where X is processor
>  
>  The TjMax temperature is set to 85 degrees C if undocumented model specific
>  register (UMSR) 0xee has bit 30 set. If not the TjMax is 100 degrees C as
> -(sometimes) documented in processor datasheet.
> +(sometimes) documented in processor datasheet. The Intel Atom has TjMax 95C
> +as per the specification.
> diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
> index 93c1722..a5338a0 100644
> --- a/drivers/hwmon/coretemp.c
> +++ b/drivers/hwmon/coretemp.c
> @@ -1,7 +1,7 @@
>  /*
>   * coretemp.c - Linux kernel module for hardware monitoring
>   *
> - * Copyright (C) 2007 Rudolf Marek <r.marek at assembler.cz>
> + * Copyright (C) 2007, 2008 Rudolf Marek <r.marek at assembler.cz>
>   *
>   * Inspired from many hwmon drivers
>   *
> @@ -244,8 +244,14 @@ static int __devinit coretemp_probe(struct platform_device *pdev)
>  		}
>  	}
>  
> +	/* Intel Atom has only fixed TjMax at 95C */
> +
> +	if (c->x86_model == 0x1c) {
> +		data->tjmax = 95000;
> +	} else {
> +		/* Adjust the TjMax for the rest of Core2 family */
>  	data->tjmax = adjust_tjmax(c, data->id, &pdev->dev);
> -	platform_set_drvdata(pdev, data);
> +	}
>  
>  	/* read the still undocumented IA32_TEMPERATURE_TARGET it exists
>  	   on older CPUs but not in this register */
> @@ -265,6 +271,8 @@ static int __devinit coretemp_probe(struct platform_device *pdev)
>  		}
>  	}
>  
> +	platform_set_drvdata(pdev, data);
> +
>  	if ((err = sysfs_create_group(&pdev->dev.kobj, &coretemp_group)))
>  		goto exit_dev;
>  
> @@ -413,11 +421,11 @@ static int __init coretemp_init(void)
>  	for_each_online_cpu(i) {
>  		struct cpuinfo_x86 *c = &cpu_data(i);
>  
> -		/* check if family 6, models 0xe, 0xf, 0x16, 0x17, 0x1A */
> +		/* check if family 6, models 0xe, 0xf, 0x16, 0x17, 0x1A, 0x1C */
>  		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 == 0x1A) || (c->x86_model == 0x1C))) {
>  
>  			/* supported CPU not found, but report the unknown
>  			   family 6 CPU */

This patch seems to have multiple fixes embedded in it. For example, the 
changes to platform_set_drvdata(pdev, data) is unrelated to support for 
CPU model 0x1C. Is this really how the maintainer committed it? Can you 
point me at a git repository?

rtg

-- 
Tim Gardner tim.gardner at canonical.com




More information about the kernel-team mailing list