All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jean Delvare <khali@linux-fr.org>
To: lm-sensors@vger.kernel.org
Subject: Re: [lm-sensors] [PATCH] coretemp: Add TjMax detection for mobile
Date: Wed, 13 Feb 2008 21:56:24 +0000	[thread overview]
Message-ID: <20080213225624.49daef35@hyperion.delvare> (raw)
In-Reply-To: <478FE918.9030804@assembler.cz>

Hi Ruik,

> Following patch will finally solve the detection of Intel Mobile CPUs which
> share same CPUID with Desktop/Server CPUs. We need this information to test
> some bit so we know if TjMax is 100C or 85C. Intel claims this works for mobiles
> only, respect that and set for desktops the TjMax to 100C. Intel provided some
> table on their wiki based on my chat with them at:
> http://softwarecommunity.intel.com/isn/Community/en-US/forums/30247249/ShowThread.aspx#30247249
> 
> The patch is totally untested, please check the patch, test and report ;)

I have a Mobile Core CPU (not Core 2) so I can only test that there
is no regression for this CPU family (and I confirm that.)

> 
> Signed-off-by: Rudolf Marek <r.marek@assembler.cz>
> 
> Thanks,
> Rudolf
> 

Review: almost only style issues:

> Index: linux-2.6.24-rc7/drivers/hwmon/coretemp.c
> =================================> --- linux-2.6.24-rc7.orig/drivers/hwmon/coretemp.c	2008-01-18 00:19:34.899436907 +0100
> +++ linux-2.6.24-rc7/drivers/hwmon/coretemp.c	2008-01-18 00:32:26.147387823 +0100
> @@ -152,6 +152,57 @@
>  	return data;
>  }
>  
> +static int __devinit adjust_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *dev) {
> +

Curly brace goes at the beginning of next line.

> +	/* The 100C is default for both mobile and non mobile CPUs */
> +
> +	int tjmax = 100000;
> +	int ismobile = 1;
> +	int err;
> +	u32 eax, edx;
> +
> +	/* Early chips have no MSR for TjMax */
> +
> +	if (((c->x86_model = 0xf) && (c->x86_mask < 4)) ||
> +	      (c->x86_model < 0xe)) {

This driver doesn't actually support any model < 0xe, so this test is
always false.

> +		ismobile = 0;
> +	}
> +
> +	if ((c->x86_model > 0xe) && (ismobile)) {
> +
> +		/* Now we can detect the mobile CPU using Intel provided table
> +		   http://softwarecommunity.intel.com/Wiki/Mobility/720.htm
> +		   For Core2 cores, check MSR 0x17, bit 28 1 = Mobile CPU
> +		*/
> +
> +		err = rdmsr_safe_on_cpu(id, 0x17, &eax, &edx);
> +		if (err) {
> +			dev_warn(dev,
> +				 "Unable to access MSR 0x17, assuming desktop"
> +				 " CPU\n");
> +			ismobile = 0;
> +		} else if (!(eax & 0x10000000)) {
> +				ismobile = 0;

Bad indentation.

> +		}
> +	}
> +
> +	if (ismobile) {
> +
> +		err = rdmsr_safe_on_cpu(id, 0xee, &eax, &edx);
> +		if (err) {
> +			dev_warn(dev,
> +				 "Unable to access MSR 0xEE, for Tjmax, left"
> +				 " at default");
> +		} else if (eax & 0x40000000) {
> +			tjmax = 85000;
> +		}
> +	} else  {

Doubled space.

> +		dev_warn(dev, "Using relative temperature scale!\n");
> +	}
> +
> +	return tjmax;
> +}
> +
>  static int __devinit coretemp_probe(struct platform_device *pdev)
>  {
>  	struct coretemp_data *data;
> @@ -168,8 +219,6 @@
>  	data->id = pdev->id;
>  	data->name = "coretemp";
>  	mutex_init(&data->update_lock);
> -	/* Tjmax default is 100 degrees C */
> -	data->tjmax = 100000;
>  
>  	/* test if we can access the THERM_STATUS MSR */
>  	err = rdmsr_safe_on_cpu(data->id, MSR_IA32_THERM_STATUS, &eax, &edx);
> @@ -196,36 +245,7 @@
>  		}
>  	}
>  
> -	/* Some processors have Tjmax 85 following magic should detect it
> -	   Intel won't disclose the information without signed NDA, but
> -	   individuals cannot sign it. Catch(ed) 22.
> -	*/
> -
> -	if (((c->x86_model = 0xf) && (c->x86_mask > 3)) ||
> -		(c->x86_model = 0xe))  {
> -		err = rdmsr_safe_on_cpu(data->id, 0xee, &eax, &edx);
> -		if (err) {
> -			dev_warn(&pdev->dev,
> -				 "Unable to access MSR 0xEE, Tjmax left at %d "
> -				 "degrees C\n", data->tjmax/1000);
> -		} else if (eax & 0x40000000) {
> -			data->tjmax = 85000;
> -		}
> -	}
> -
> -	/* Intel says that above should not work for desktop Core2 processors,
> -	   but it seems to work. There is no other way how get the absolute
> -	   readings. Warn the user about this. First check if are desktop,
> -	   bit 50 of MSR_IA32_PLATFORM_ID should be 0.
> -	*/
> -
> -	rdmsr_safe_on_cpu(data->id, MSR_IA32_PLATFORM_ID, &eax, &edx);
> -
> -	if ((c->x86_model = 0xf) && (!(edx & 0x00040000))) {
> -		dev_warn(&pdev->dev, "Using undocumented features, absolute "
> -			 "temperature might be wrong!\n");
> -	}
> -
> +	data->tjmax = adjust_tjmax(c, data->id, &pdev->dev);
>  	platform_set_drvdata(pdev, data);
>  
>  	/* read the still undocumented IA32_TEMPERATURE_TARGET it exists


-- 
Jean Delvare

_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors

  reply	other threads:[~2008-02-13 21:56 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-17 23:47 [lm-sensors] [PATCH] coretemp: Add TjMax detection for mobile CPUs Rudolf Marek
2008-02-13 21:56 ` Jean Delvare [this message]
2008-02-17 21:59 ` [lm-sensors] [PATCH] coretemp: Add TjMax detection for mobile Rudolf Marek
2008-02-18  3:07 ` [lm-sensors] [PATCH] coretemp: Add TjMax detection for Mark M. Hoffman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080213225624.49daef35@hyperion.delvare \
    --to=khali@linux-fr.org \
    --cc=lm-sensors@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.