From: Len Brown <lenb@kernel.org>
To: Zhao Yakui <yakui.zhao@intel.com>
Cc: Linux-acpi@vger.kernel.org, cpufreq <cpufreq@www.linux.org.uk>
Subject: Re: [RFC] [PATCH]:Obtain FSB ratio from model string
Date: Tue, 20 Nov 2007 14:34:56 -0500 [thread overview]
Message-ID: <200711201434.56358.lenb@kernel.org> (raw)
In-Reply-To: <1193377428.5254.19.camel@yakui_zhao.sh.intel.com>
On Friday 26 October 2007 01:43, Zhao Yakui wrote:
> Hi, all
> According to the document of 253369(intel), the ratio is
> undefined in MSR_FBC_REGSITER_ID. The following calculation is
> inappropriate.
> if (c->x86_model < 2)
> mult = msr_lo >> 27;
>
> There are two ways to fix this problem.
> a. use the following patch. the ratio is obtained from model string.
> b. revert the commit until the proper patch is available.
>
> http://git.kernel.org/?p=linux/kernel/git/torvalds/old-2.6-bkcvs.git;a=commit;h=3e4159ab35c88aef5e063ba78796b277b762a30a
Okay, I've reverted that patch -- so model 0&1 are back to where they were in 2005
and random MHz is replaced by other random MHz.
>
> Subject: ACPI :Obtain FSB ratio from model string when model is less than 2
> >From : Zhao Yakui <yakui.zhao@intel.com>
>
> The ratio is undefined in the register of MSR_FBC_REGSITER_ID
> when the model for P4 is less than 2. The following calculation is
> inappropriate.
> if (c->x86_model < 2)
> mult = msr_lo >> 27;
> In order to support the speedstep , the FSb ratio can be obtained from
> the model_id string.
> For example:
> The ratio is 13 for model string:"Intel(R) Pentium(R) 4 CPU 1300MHz"
>
> http://bugzilla.kernel.org/show_bug.cgi?id=7186
>
> Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
> ---
> arch/i386/kernel/cpu/cpufreq/speedstep-lib.c | 40 +++++++++++++++++++++++++--
> 1 file changed, 38 insertions(+), 2 deletions(-)
>
> Index: linux-2.6.23-rc9/arch/i386/kernel/cpu/cpufreq/speedstep-lib.c
> ===================================================================
> --- linux-2.6.23-rc9.orig/arch/i386/kernel/cpu/cpufreq/speedstep-lib.c
> +++ linux-2.6.23-rc9/arch/i386/kernel/cpu/cpufreq/speedstep-lib.c
> @@ -17,6 +17,7 @@
>
> #include <asm/msr.h>
> #include "speedstep-lib.h"
> +#include <linux/ctype.h>
>
> #define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER, "speedstep-lib", msg)
>
> @@ -151,7 +152,40 @@ static unsigned int pentium_core_get_fre
>
> return (msr_tmp * fsb);
> }
> -
> +/* When Model_id is less than 2, the FSB ratio is
> +obtained from the string of model_id */
> +static unsigned int p4_01_get_fsb_ratio(void)
> +{
> + struct cpuinfo_x86 *c = &boot_cpu_data;
> + unsigned int fsb_m;
> + char model_id[64];
> + unsigned int freq_mhz;
> + unsigned int max_ratio;
> + char *ptr;
> + int i = 0;
> +
> + ptr = model_id;
> + strncpy(ptr, c->x86_model_id, strlen(c->x86_model_id));
> + for (i = 0; i < strlen(model_id); i++)
> + model_id[i] = tolower(model_id[i]);
> + if (strstr(model_id, "mhz"))
> + fsb_m = 100;
> + else
> + fsb_m = 0;
> + if (!fsb_m) {
> + printk(KERN_DEBUG "CPU doesn't support speedstep\n");
> + return 0;
> + }
> + ptr = strstr(model_id, "hz");
> + if (ptr)
> + *ptr = '\0';
> + freq_mhz = 0;
> + ptr = strrchr(model_id, ' ');
> + if (ptr)
> + sscanf(ptr, "%d", &freq_mhz);
> + max_ratio = freq_mhz / fsb_m;
> + return max_ratio;
> +}
>
> static unsigned int pentium4_get_frequency(void)
> {
> @@ -189,8 +223,10 @@ static unsigned int pentium4_get_frequen
> printk(KERN_DEBUG "speedstep-lib: couldn't detect FSB speed. Please send an e-mail to <linux@brodo.de>\n");
>
> /* Multiplier. */
> + /* if Model is less than 2 , the ratio is obtained from the
> + * string of model_id */
> if (c->x86_model < 2)
> - mult = msr_lo >> 27;
> + mult = p4_01_get_fsb_ratio();
> else
> mult = msr_lo >> 24;
>
I'm not excited about adding code to parse the model string,
particularly when the justification is an early P4 model that
doesn't even support P-states.
I'd prefer to see p4-clockmod deleted from the kernel.
-Len
parent reply other threads:[~2007-11-20 19:34 UTC|newest]
Thread overview: expand[flat|nested] mbox.gz Atom feed
[parent not found: <1193377428.5254.19.camel@yakui_zhao.sh.intel.com>]
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=200711201434.56358.lenb@kernel.org \
--to=lenb@kernel.org \
--cc=Linux-acpi@vger.kernel.org \
--cc=cpufreq@www.linux.org.uk \
--cc=yakui.zhao@intel.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox