Forums

Skip to content

Advanced search
  • Quick links
    • Unanswered topics
    • Active topics
    • Search
  • FAQ
  • Login
  • Register
  • Board index Assistance Kernel & Hardware
  • Search

user undervolting

Kernel not recognizing your hardware? Problems with power management or PCMCIA? What hardware is compatible with Gentoo? See here. (Only for kernels supported by Gentoo.)
Post Reply
Advanced search
340 posts
  • Page 1 of 14
    • Jump to page:
  • 1
  • 2
  • 3
  • 4
  • 5
  • …
  • 14
  • Next
Author
Message
albright
Advocate
Advocate
User avatar
Posts: 2588
Joined: Sun Nov 16, 2003 6:36 pm
Location: Near Toronto

user undervolting

  • Quote

Post by albright » Tue May 24, 2005 11:52 pm

I've got a fujitsu p7010 centrino and I've heard of a windows
utility that lets you "dynamically" set the cpu voltage (it's
called rightmark). This extends battery life, lowers temperatures,
and reduces fan noise (so I'm told).

Is there any equivalent utility for linux? Or some magic number
you could write to some magic place in /sys or something?

Just curious ...
Top
moocha
Watchman
Watchman
Posts: 5722
Joined: Tue Oct 21, 2003 6:45 pm

  • Quote

Post by moocha » Wed May 25, 2005 1:17 am

http://forums.gentoo.org/viewtopic-t-284375.html
http://forums.gentoo.org/viewtopic-t-329382.html
http://forums.gentoo.org/viewtopic-t-340193.html
http://www.gentoo.org/doc/en/power-management-guide.xml

Please don't be lazy. Search is there for a reason.
Military Commissions Act of 2006: http://tinyurl.com/jrcto

"Those who would give up essential liberty to purchase a little temporary safety deserve neither liberty nor safety."
-- attributed to Benjamin Franklin
Top
bollucks
l33t
l33t
Posts: 606
Joined: Wed Oct 27, 2004 11:49 pm

  • Quote

Post by bollucks » Wed May 25, 2005 2:43 am

Why assume that cpu frequency control==undervolting? Undervolting is changing the actual core voltage to reduce power usage more than cpu frequency alone can do, and thus also decrease heat and also noise from the cooling. I have yet to see anything that does it in software in linux. There is a utility for later amds on linux but not the centrino as far as I'm aware.
Top
ian!
Bodhisattva
Bodhisattva
User avatar
Posts: 3829
Joined: Tue Feb 25, 2003 9:52 am
Location: Essen, Germany
Contact:
Contact ian!
Website

  • Quote

Post by ian! » Wed May 25, 2005 9:18 am

moocha wrote:http://forums.gentoo.org/viewtopic-t-284375.html
http://forums.gentoo.org/viewtopic-t-329382.html
http://forums.gentoo.org/viewtopic-t-340193.html
http://www.gentoo.org/doc/en/power-management-guide.xml
Thanks moocha.
Moved from 'Kernel & Hardware'.
"To have a successful open source project, you need to be at least somewhat successful at getting along with people." -- Daniel Robbins
Top
albright
Advocate
Advocate
User avatar
Posts: 2588
Joined: Sun Nov 16, 2003 6:36 pm
Location: Near Toronto

clueless moderators

  • Quote

Post by albright » Wed May 25, 2005 11:57 am

I put up this post:

http://forums.gentoo.org/viewtopic-t-34 ... ight-.html

first in kernel and hardware. It was moved to
"redundant posts" after a "veteran"
gave a bunch of links to cpufreq discussions
which so far as I could see do not address my
issue ...

I call BS on this one. My question was: is there a utility
(like rightmark for windows) which allows the use
to control the core cpu voltage. This is NOT the same
as the cpufreq and speedstep technology. I wanted
to reduce the core voltage AND run the cpu at
top speed (for obvious reasons plus fun).

So I'm kind of bugged about this. :evil:
Top
pjp
Administrator
Administrator
User avatar
Posts: 20668
Joined: Tue Apr 16, 2002 10:35 pm

  • Quote

Post by pjp » Wed May 25, 2005 11:58 am

Clueless users (Moved from OTG).
Quis separabit? Quo animo?
Top
Naib
Watchman
Watchman
User avatar
Posts: 6101
Joined: Fri May 21, 2004 9:42 pm
Location: Removed by Neddy
Contact:
Contact Naib
Website

  • Quote

Post by Naib » Wed May 25, 2005 1:06 pm

reducing CORE voltage AND increasing switching freqency is not a good idea.

When you increase the switching freqency, the power avaialble in the syncronous clock cannot be gueneteed to be sufficent to ensure it shap is sufficent. Increasing CORE voltage ensure that the clock keeps its profile

That is why you have to increase CORE voltage with increase CPU speed.
This doesnt answer your question, just an aside.

have you googled?
and why insult admins?
#define HelloWorld int
#define Int main()
#define Return printf
#define Print return
#include <stdio>
HelloWorld Int {
Return("Hello, world!\n");
Print 0;
Top
albright
Advocate
Advocate
User avatar
Posts: 2588
Joined: Sun Nov 16, 2003 6:36 pm
Location: Near Toronto

  • Quote

Post by albright » Wed May 25, 2005 1:20 pm

yes, I've googled and I had searched the gentoo forums
At a site devoted to laptops I found that undervolting the fujitsu p7010 (centrino)
has been very successful in windows land. The system
remains stable and battery use, heat and hence fan use
are substantially decreased. So I thought it would be
fun to try in linux if there's a way to do it.

so I asked on kernel & hardware forum, and was moderated
"redundant" and post deleted.

I insult the moderator for not doing his/her job. My post had
nothing to do with cpufreq (ostensible reason for deletion).

I'm too easily annoyed I guess ...
Top
pilla
Bodhisattva
Bodhisattva
User avatar
Posts: 7732
Joined: Wed Aug 07, 2002 8:19 pm
Location: Underworld

  • Quote

Post by pilla » Wed May 25, 2005 3:48 pm

AFAIK, cpufreq does both voltage and clock scaling (together)


reference
"I'm just very selective about the reality I choose to accept." -- Calvin
Top
pilla
Bodhisattva
Bodhisattva
User avatar
Posts: 7732
Joined: Wed Aug 07, 2002 8:19 pm
Location: Underworld

  • Quote

Post by pilla » Wed May 25, 2005 3:51 pm

Naib wrote: and why insult admins?
It seems to be fashion these days...
"I'm just very selective about the reality I choose to accept." -- Calvin
Top
albright
Advocate
Advocate
User avatar
Posts: 2588
Joined: Sun Nov 16, 2003 6:36 pm
Location: Near Toronto

  • Quote

Post by albright » Wed May 25, 2005 5:48 pm

AFAIK, cpufreq does both voltage and clock scaling (together)
that's great ... now all I need to find out (why won't somebody
just give me a break and *tell* me) how to control the
voltage *independently* of the clock speed (which is what
I wanted and said I wanted in the first place) :wink:

If it can't be done ... well, then it can't be done

I was only wondering if there is a linux equivalent
to the windows utility called rightmark. I got the
idea when I happened upon a thread in a notebook
enthusiasts webpage and was struck by this comment:
Undervolting the CPU reduces power consumption, thus
allowing your laptop to run cooler and increasing battery life.
I was able to adjust the minimum voltage of my Pentium
M 760 (Dell Latitude D810) from 0.988V to 0.700V and the
maximum voltage from 1.308V to 1.068V. Your mileage may vary!
The fun of this game apparently is to see how low you can drop
the cpu voltage (not cpu speed) while still having a stable
system (I'm sure you've all fooled with this on your desktop)
but the utility in question lets you do it on laptops. I thought
it would be fun to try in linux but I am sorry to have caused
so much trouble with the moderators ... :roll:
Top
pilla
Bodhisattva
Bodhisattva
User avatar
Posts: 7732
Joined: Wed Aug 07, 2002 8:19 pm
Location: Underworld

  • Quote

Post by pilla » Wed May 25, 2005 6:28 pm

albright wrote:
AFAIK, cpufreq does both voltage and clock scaling (together)
that's great ... now all I need to find out (why won't somebody
just give me a break and *tell* me) how to control the
voltage *independently* of the clock speed (which is what
I wanted and said I wanted in the first place) :wink:

If it can't be done ... well, then it can't be done
I mean... it can't be done. If processors could work reliably with less voltage and the same clock, then I'm sure that the manufactures would release the processors with these settings.
"I'm just very selective about the reality I choose to accept." -- Calvin
Top
nixnut
Bodhisattva
Bodhisattva
User avatar
Posts: 10974
Joined: Fri Apr 09, 2004 1:43 pm
Location: the dutch mountains

  • Quote

Post by nixnut » Wed May 25, 2005 6:44 pm

pilla wrote:
albright wrote:
AFAIK, cpufreq does both voltage and clock scaling (together)
that's great ... now all I need to find out (why won't somebody
just give me a break and *tell* me) how to control the
voltage *independently* of the clock speed (which is what
I wanted and said I wanted in the first place) :wink:

If it can't be done ... well, then it can't be done
I mean... it can't be done. If processors could work reliably with less voltage and the same clock, then I'm sure that the manufactures would release the processors with these settings.
Hmm, not necessarily. When churning out wafers of chips, some of these chips will be able to run at different speeds and voltages than others. The selection process and the sorting of it is done not per chip, but usually based on their position on the wafer afaik. This means that you may find yourself in posession of a processor capable of more than it's signed off for. And while overclocking is a notoriously tricky thing for systems on which you compile, underclocking is not as dangerous. Though ofcourse you can take that too far too. Tweaking voltages etc can often be done via the bios screens, sometimes via a tool while an os is running. Finding one for linux however may prove impossible.

Er.. is this thread still in the right place? Not really forums feedback anymore is it? :wink:
Please add [solved] to the initial post's subject line if you feel your problem is resolved. Help answer the unanswered

talk is cheap. supply exceeds demand
Top
pilla
Bodhisattva
Bodhisattva
User avatar
Posts: 7732
Joined: Wed Aug 07, 2002 8:19 pm
Location: Underworld

  • Quote

Post by pilla » Wed May 25, 2005 6:57 pm

nixnut wrote:
Hmm, not necessarily. When churning out wafers of chips, some of these chips will be able to run at different speeds and voltages than others. The selection process and the sorting of it is done not per chip, but usually based on their position on the wafer afaik. This means that you may find yourself in posession of a processor capable of more than it's signed off for. And while overclocking is a notoriously tricky thing for systems on which you compile, underclocking is not as dangerous. Though ofcourse you can take that too far too. Tweaking voltages etc can often be done via the bios screens, sometimes via a tool while an os is running. Finding one for linux however may prove impossible.
I don't consider any overclocked chip to be reliable, and I don't consider undevoltaging processors under the manufacture specifications to be reliable too.

edit: fixed quotation
merged with the previous thread about this subject.
Last edited by pilla on Wed May 25, 2005 7:21 pm, edited 1 time in total.
"I'm just very selective about the reality I choose to accept." -- Calvin
Top
albright
Advocate
Advocate
User avatar
Posts: 2588
Joined: Sun Nov 16, 2003 6:36 pm
Location: Near Toronto

  • Quote

Post by albright » Wed May 25, 2005 7:20 pm

If processors could work reliably with less voltage and the same clock, then I'm sure that the manufactures would release the processors with these settings.
As we know from the experience of overclockers, the manufacturers
are usually very conservative in their settings. I suspect that just as overclocking
is possible with various degrees of success dependent on the particular
chip you have, so too undervolting is generally possible ... Anyway,
many people have reported success

For example, there is windows utility for amd processors called
CrystalCPUID which allows undervolting; one user writes:
CrystalCPUID's configuration process is very time-consuming, but the
rewards are beneficial. On my computer, while running at 2 GHz, I was
able to drop the voltage from 1.5 V to 1.3 V. This in turn dropped CPU
full load temperatures from 57°C to 47°C. This result cannot be achieved
with Cool 'n' Quiet.
The same person added:
there does not appear to be an equivalent utility for Linux users,
who have to resort to modifying the kernel code/driver to attain
similar functionality
I was asking whether this was still true .... I guess it is :cry:
Top
pilla
Bodhisattva
Bodhisattva
User avatar
Posts: 7732
Joined: Wed Aug 07, 2002 8:19 pm
Location: Underworld

  • Quote

Post by pilla » Wed May 25, 2005 7:22 pm

Brought back from Dup Threads as the same discussion was going on GFF.
"I'm just very selective about the reality I choose to accept." -- Calvin
Top
rschwarze
n00b
n00b
Posts: 63
Joined: Fri Jul 01, 2005 12:26 pm
Location: Germany

  • Quote

Post by rschwarze » Fri Jul 01, 2005 12:37 pm

You can change the voltage manually, if you use the file "speedstep-centrino.c". This file is in the kernel for the old banias centrino, but you could also use it for your dothan or sonoma centrino.

What you have to do:

X86_SPEEDSTEP_CENTRINO_ACPI =n in your kernel, so that the kernel doesn't use the acpi-tables to get the frequency-voltage pairs.

Then you have to edit /usr/src/linux/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c and recompile the kernel. thats all.

Here is the interesting part of my speedstep-centrino.c, I have already add some dothan and one sonoma centrino and edited the 1.4 Dothan voltages to my favourit values ;) it works very nice, my notebook is cool and quiet now!


struct cpu_id
{
__u8 x86; /* CPU family */
__u8 x86_model; /* model */
__u8 x86_mask; /* stepping */
};

enum {
CPU_BANIAS,
CPU_DOTHAN_A1,
CPU_DOTHAN_A2,
CPU_DOTHAN_B0,
CPU_DOTHAN_C0,
};

static const struct cpu_id cpu_ids[] = {
[CPU_BANIAS] = { 6, 9, 5 },
[CPU_DOTHAN_A1] = { 6, 13, 1 },
[CPU_DOTHAN_A2] = { 6, 13, 2 },
[CPU_DOTHAN_B0] = { 6, 13, 6 },
[CPU_DOTHAN_C0] = { 6, 13, 8 },
};
#define N_IDS (sizeof(cpu_ids)/sizeof(cpu_ids[0]))

struct cpu_model
{
const struct cpu_id *cpu_id;
const char *model_name;
unsigned max_freq; /* max clock in kHz */

struct cpufreq_frequency_table *op_points; /* clock/voltage pairs */
};
static int centrino_verify_cpu_id(const struct cpuinfo_x86 *c, const struct cpu_id *x);

/* Operating points for current CPU */
static struct cpu_model *centrino_model[NR_CPUS];
static const struct cpu_id *centrino_cpu[NR_CPUS];

static struct cpufreq_driver centrino_driver;

#ifdef CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE

/* Computes the correct form for IA32_PERF_CTL MSR for a particular
frequency/voltage operating point; frequency in MHz, volts in mV.
This is stored as "index" in the structure. */
#define OP(mhz, mv) \
{ \
.frequency = (mhz) * 1000, \
.index = (((mhz)/100) << 8) | ((mv - 700) / 16) \
}

/*
* These voltage tables were derived from the Intel Pentium M
* datasheet, document 25261202.pdf, Table 5. I have verified they
* are consistent with my IBM ThinkPad X31, which has a 1.3GHz Pentium
* M.
*/

/* Ultra Low Voltage Intel Pentium M processor 900MHz (Banias) */
static struct cpufreq_frequency_table banias_900[] =
{
OP(600, 844),
OP(800, 988),
OP(900, 1004),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Ultra Low Voltage Intel Pentium M processor 1000MHz (Banias) */
static struct cpufreq_frequency_table banias_1000[] =
{
OP(600, 844),
OP(800, 972),
OP(900, 988),
OP(1000, 1004),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Low Voltage Intel Pentium M processor 1.10GHz (Banias) */
static struct cpufreq_frequency_table banias_1100[] =
{
OP( 600, 956),
OP( 800, 1020),
OP( 900, 1100),
OP(1000, 1164),
OP(1100, 1180),
{ .frequency = CPUFREQ_TABLE_END }
};


/* Low Voltage Intel Pentium M processor 1.20GHz (Banias) */
static struct cpufreq_frequency_table banias_1200[] =
{
OP( 600, 956),
OP( 800, 1004),
OP( 900, 1020),
OP(1000, 1100),
OP(1100, 1164),
OP(1200, 1180),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 1.30GHz (Banias) */
static struct cpufreq_frequency_table banias_1300[] =
{
OP( 600, 956),
OP( 800, 1260),
OP(1000, 1292),
OP(1200, 1356),
OP(1300, 1388),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 1.40GHz (Banias) */
static struct cpufreq_frequency_table banias_1400[] =
{
OP( 600, 956),
OP( 800, 1180),
OP(1000, 1308),
OP(1200, 1436),
OP(1400, 1484),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 1.50GHz (Banias) */
static struct cpufreq_frequency_table banias_1500[] =
{
OP( 600, 956),
OP( 800, 1116),
OP(1000, 1228),
OP(1200, 1356),
OP(1400, 1452),
OP(1500, 1484),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 1.60GHz (Banias) */
static struct cpufreq_frequency_table banias_1600[] =
{
OP( 600, 956),
OP( 800, 1036),
OP(1000, 1164),
OP(1200, 1276),
OP(1400, 1420),
OP(1600, 1484),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 1.70GHz (Banias) */
static struct cpufreq_frequency_table banias_1700[] =
{
OP( 600, 956),
OP( 800, 1004),
OP(1000, 1116),
OP(1200, 1228),
OP(1400, 1308),
OP(1700, 1484),
{ .frequency = CPUFREQ_TABLE_END }
};
#undef OP

/* Dothan processor datasheet 30218903.pdf defines 4 voltages for each
frequency (VID#A through VID#D) - this macro allows us to define all
of these but we only use the VID#C voltages at compile time - this may
need some work if we want to select the voltage profile at runtime. */

#define OP(mhz, mva, mvb, mvc, mvd) \
{ \
.frequency = (mhz) * 1000, \
.index = (((mhz)/100) << 8) | ((mvc - 700) / 16) \
}

/* Intel Pentium M processor 710 / 1.40GHz (Dothan) */
static struct cpufreq_frequency_table dothan_1400[] =
{
OP( 600, 700, 700, 700, 700),
OP( 800, 770, 770, 770, 770),
OP(1000, 840, 840, 840, 840),
OP(1200, 910, 910, 910, 910),
OP(1400, 980, 980, 980, 980),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 715 / 1.50GHz (Dothan) */
static struct cpufreq_frequency_table dothan_1500[] =
{
OP( 600, 988, 988, 988, 988),
OP( 800, 1068, 1068, 1068, 1052),
OP(1000, 1148, 1148, 1132, 1116),
OP(1200, 1228, 1212, 1212, 1180),
OP(1500, 1340, 1324, 1308, 1276),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 725 / 1.60GHz (Dothan) */
static struct cpufreq_frequency_table dothan_1600[] =
{
OP( 600, 988, 988, 988, 988),
OP( 800, 1068, 1068, 1052, 1052),
OP(1000, 1132, 1132, 1116, 1116),
OP(1200, 1212, 1196, 1180, 1164),
OP(1400, 1276, 1260, 1244, 1228),
OP(1600, 1340, 1324, 1308, 1276),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 735 / 1.70GHz (Dothan) */
static struct cpufreq_frequency_table dothan_1700[] =
{
OP( 600, 988, 988, 988, 988),
OP( 800, 1052, 1052, 1052, 1052),
OP(1000, 1116, 1116, 1116, 1100),
OP(1200, 1180, 1180, 1164, 1148),
OP(1400, 1244, 1244, 1228, 1212),
OP(1700, 1340, 1324, 1308, 1276),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 745 / 1.80GHz (Dothan) */
static struct cpufreq_frequency_table dothan_1800[] =
{
OP( 600, 988, 988, 988, 988),
OP( 800, 1052, 1052, 1052, 1036),
OP(1000, 1116, 1100, 1100, 1084),
OP(1200, 1164, 1164, 1148, 1132),
OP(1400, 1228, 1212, 1212, 1180),
OP(1600, 1292, 1276, 1260, 1228),
OP(1800, 1340, 1324, 1308, 1276),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 755 / 2.00GHz (Dothan) */
static struct cpufreq_frequency_table dothan_2000[] =
{
OP( 600, 988, 988, 988, 988),
OP( 800, 1052, 1036, 1036, 1036),
OP(1000, 1100, 1084, 1084, 1084),
OP(1200, 1148, 1132, 1132, 1116),
OP(1400, 1196, 1180, 1180, 1164),
OP(1600, 1244, 1228, 1228, 1196),
OP(1800, 1292, 1276, 1276, 1244),
OP(2000, 1340, 1324, 1308, 1276),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 750 / 1.86GHz (Dothan) */
static struct cpufreq_frequency_table dothan_1867[] =
{
OP( 800, 880, 880, 880, 880),
OP(1333, 1010, 1010, 1010, 1010),
OP(1867, 1120, 1120, 1120, 1120),
{ .frequency = CPUFREQ_TABLE_END }
};
#undef OP

#define _BANIAS(cpuid, max, name) \
{ .cpu_id = cpuid, \
.model_name = "Intel(R) Pentium(R) M processor " name "MHz", \
.max_freq = (max)*1000, \
.op_points = banias_##max, \
}
#define BANIAS(max) _BANIAS(&cpu_ids[CPU_BANIAS], max, #max)

#define DOTHAN(cpuid, max, name) \
{ .cpu_id = cpuid, \
.model_name = "Intel(R) Pentium(R) M processor " name "GHz", \
.max_freq = (max)*1000, \
.op_points = dothan_##max, \
}

/* CPU models, their operating frequency range, and freq/voltage
operating points */
static struct cpu_model models[] =
{
_BANIAS(&cpu_ids[CPU_BANIAS], 900, " 900"),
BANIAS(1000),
BANIAS(1100),
BANIAS(1200),
BANIAS(1300),
BANIAS(1400),
BANIAS(1500),
BANIAS(1600),
BANIAS(1700),
DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 1400, "1.40"),
DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 1500, "1.50"),
DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 1600, "1.60"),
DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 1700, "1.70"),
DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 1800, "1.80"),
DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 2000, "2.00"),
DOTHAN(&cpu_ids[CPU_DOTHAN_C0], 1867, "1.86"),

/* NULL model_name is a wildcard */
{ &cpu_ids[CPU_DOTHAN_A1], NULL, 0, NULL },
{ &cpu_ids[CPU_DOTHAN_A2], NULL, 0, NULL },
{ &cpu_ids[CPU_DOTHAN_B0], NULL, 0, NULL },
{ &cpu_ids[CPU_DOTHAN_C0], NULL, 0, NULL },

{ NULL, }
};
#undef _BANIAS
#undef BANIAS
#undef DOTHAN
Top
Gentree
Watchman
Watchman
User avatar
Posts: 5350
Joined: Tue Jul 01, 2003 12:51 am
Location: France, Old Europe

  • Quote

Post by Gentree » Sat Jul 02, 2005 2:03 am

I don't consider any overclocked chip to be reliable
So my Athlon-XP 1800+ , official clock 1.667GHz that has been running at 2.2GHZ since about 10 months ago without a glitch is unreliable.

Phew , I'm glad you told me !

Luckily my mobo has not caught on yet (ssssh!) :wink:

Manufacturers have to design in some margin for error in other components so on most systems there is some possibility for fine tuning if you know how to adequately test the resulting config.

@albright: cant you alter Vcore from your BIOS? This is the sort I thing I like to handle directly at the lowest level possible and with max ammount of testing.

If the BIOS wont let you alter it I cant see any software being able to do it either .

I have no knowlege of Intel but I have u/c another athlon-xp by one step and it behaved perfectly at std clock rate.

You will need to do some _serious_ testing if you want to play around like this. Read up on cpuburn and memtest86+ for starters.

HTH 8)
Linux, because I'd rather own a free OS than steal one that's not worth paying for.
Gentoo because I'm a masochist
AthlonXP-M on A7N8X. Portage ~x86
Top
albright
Advocate
Advocate
User avatar
Posts: 2588
Joined: Sun Nov 16, 2003 6:36 pm
Location: Near Toronto

software undervolting

  • Quote

Post by albright » Sun Jul 10, 2005 12:19 pm

@albright: cant you alter Vcore from your BIOS? This is the sort I thing I like to handle directly at the lowest level possible and with max ammount of testing.

If the BIOS wont let you alter it I cant see any software being able to do it either .

I have no knowlege of Intel but I have u/c another athlon-xp by one step and it behaved perfectly at std clock rate.

You will need to do some _serious_ testing if you want to play around like this. Read up on cpuburn and memtest86+ for starters.
My fujitsu p7010 notebook does not have a very powerful bios
setup system and voltage cannot be manipulated.

But there are several windows programs that let you adjust voltage
for this intel chipset.

All I was asking was whether there is an equivalent linux utility. I guess
there is isn't :(

Thanks to rschwarze (earlier in thread) who gives some nice info about how to undervolt
via kernel configuration -- which means a recompile for every voltage
tweak -- not so much fun but worth a try! But maybe not this summer,
while my little fujitsu is my only available computer :wink:
Top
rschwarze
n00b
n00b
Posts: 63
Joined: Fri Jul 01, 2005 12:26 pm
Location: Germany

  • Quote

Post by rschwarze » Sun Jul 10, 2005 1:35 pm

you can test the vcore under windows with "centrino hardware control" and find out what sttings are best for your prcoessor. then change the vcore in the linux-kernel.
if you are interested i can mail you my speedstep-centrino.c file. put in in the kernelsource and recompile with your normal settings (just change the X86_SPEEDSTEP_CENTRINO_ACPI).

Then make a new entry in your bootmanager, and if your system doesn't start you can use the old kernel to boot.

I tried this hack with the kernelversions 2.6.11 and 2.6.12 (gentoo-sources) and it was very easy!

(There was no program like "centrino hardware control" under linux because only the kernel is allowed to change the vcore.)
Top
albright
Advocate
Advocate
User avatar
Posts: 2588
Joined: Sun Nov 16, 2003 6:36 pm
Location: Near Toronto

send it along!

  • Quote

Post by albright » Mon Jul 11, 2005 3:51 pm

if you are interested i can mail you my speedstep-centrino.c file. put in in the kernelsource and recompile with your normal settings (just change the X86_SPEEDSTEP_CENTRINO_ACPI).
thanks, that would be great. If you get a minute please send it
to cdbroad_at_gmail.com

if I get up the courage I'll post how things went ....
Top
BetterUnborn
n00b
n00b
User avatar
Posts: 57
Joined: Tue Sep 28, 2004 2:53 pm
Location: Germany
Contact:
Contact BetterUnborn
Website

  • Quote

Post by BetterUnborn » Wed Jul 13, 2005 1:10 pm

Hmm, very interesting for me, too.

But I can't get it working with my sonoma cntrino and pentium m 730 ... somehow kernel doesn't use the values from the table. In my kernel config, I have

Code: Select all

CPU_FREQ=y
X86_ACPI_CPUFREQ=y
X86_SPEEDSTEP_CENTRINO=y
X86_SPEEDSTEP_CENTRINO_ACPI=n
X86_SPEEDSTEP_CENTRINO_TABLE=y
So there should be nothing wrong with that. In my speedstep-centrino.c I use

Code: Select all

/* Intel Pentium M processor 730 / 1.60GHz (Dothan) */
static struct cpufreq_frequency_table dothan_1600[] =
{
OP( 800, 812, 812, 812, 812),
OP(1067, 700, 700, 700, 700),
OP(1333, 1004, 1004, 1004, 1004),
OP(1600, 1100, 1100, 1100, 1100),
{ .frequency = CPUFREQ_TABLE_END }
};
...
/* CPU models, their operating frequency range, and freq/voltage
   operating points */
static struct cpu_model models[] =
{
	_BANIAS(&cpu_ids[CPU_BANIAS], 900, " 900"),
	BANIAS(1000),
	BANIAS(1100),
	BANIAS(1200),
	BANIAS(1300),
	BANIAS(1400),
	BANIAS(1500),
	BANIAS(1600),
	BANIAS(1700),
	DOTHAN(&cpu_ids[CPU_DOTHAN_C0],1600,"1.60"),
	DOTHAN(&cpu_ids[CPU_DOTHAN_A1],1600,"1.60"),
	DOTHAN(&cpu_ids[CPU_DOTHAN_A2],1600,"1.60"),
	DOTHAN(&cpu_ids[CPU_DOTHAN_B0],1600,"1.60"),

	/* NULL model_name is a wildcard */
	{ &cpu_ids[CPU_DOTHAN_A1], NULL, 0, NULL },
	{ &cpu_ids[CPU_DOTHAN_A2], NULL, 0, NULL },
	{ &cpu_ids[CPU_DOTHAN_B0], NULL, 0, NULL },
	{ &cpu_ids[CPU_DOTHAN_C0], NULL, 0, NULL },
	{ &cpu_ids[CPU_MP4HT_D0], NULL, 0, NULL },
	{ &cpu_ids[CPU_MP4HT_E0], NULL, 0, NULL },

	{ NULL, }
};
I set the voltage for 1.067 GHz to 700mV for verifying the CPU actually uses the given values. From experiments under windows I know that the system should immediately freeze with that low voltage. But nothing happens!
I don't have any warnings or errors in dmesg.
btw, in the kernel help it says for X86_SPEEDSTEP_CENTRINO_ACPI:
...
It is required for the driver to work on non-Banias CPUs.
So no chance for getting it work for sonoma people??
Top
Devport
Guru
Guru
Posts: 361
Joined: Wed Dec 15, 2004 2:25 am

  • Quote

Post by Devport » Wed Jul 13, 2005 1:40 pm

I am in the same situation and try to achieve that with my nforce4 AMD64. Its another geek thing that can be done easily on windows only.

My findings as of yet were that to adjust the cpu voltage the way to go seems to be lmsensors. One needs a module for chipset / chip which sets the cpu voltage. Then there should be a writebale value "vcore" or similar with which one can set the voltage. For me that does not yet work because a pending lmsensors nforce4 patch has not yet been applied to the kernel and a compatible lm87 sensor does not permit to change vcore. But maybe theres a driver for Pentium-M / Intel Chipsets which allows to set vcore in which case one would have to use a patched version of cpufreqd which sets clock and voltage which can be found here

http://punnoor.de/linux_frameset.html
http://forums.gentoo.org/viewtopic-t-27 ... -atxp.html

However, changing the kernel voltage table probably is an easier way as long as it works.
Top
rschwarze
n00b
n00b
Posts: 63
Joined: Fri Jul 01, 2005 12:26 pm
Location: Germany

  • Quote

Post by rschwarze » Wed Jul 13, 2005 4:04 pm

you have to put X86_SPEEDSTEP_CENTRINO_ACPI to "no", because we want the kernel to use the speedstep file for the centrino.

have you change the entry of the sonoma to your values?

in the cpu-models section which you have posted there is no entry for your processor, i think.

edit: i think you should use 1599 mhz. because you have a frontside bus of 533 with a multiplikator of 3.
maybe this is the problem.

edit2: here my speedstep centrino datei. for the sonoma user: you have a frontsidebus of 533. all frequencies should be a multiple of 533. you can change the entry for the 1.87 ghz centrino, because that is a sonoma.

http://www.math.uni-bielefeld.de/~schwa ... centrino.c
Top
albright
Advocate
Advocate
User avatar
Posts: 2588
Joined: Sun Nov 16, 2003 6:36 pm
Location: Near Toronto

system won't crash

  • Quote

Post by albright » Wed Jul 13, 2005 7:54 pm

I have the same problem as BetterUnborn. My modified
speedstep-centrino.c file compiles fine and the
kernel boots properly.

I do have X86_SPEEDSTEP_CENTRINO_ACPI=n set.

But the voltages are not being set. I told the
chip to run on .812 volts at 1100 mhz. In windows,
this instantly crashes the machine. But my
system works normally :( (pretty weird, *wanting*
your system to crash)

Here's my modified speedstep-centrino.c file. Maybe
somebody can spot what's wrong - why the system isn't
setting the voltages as per my table


#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/cpufreq.h>
#include <linux/config.h>
#include <linux/delay.h>
#include <linux/compiler.h>

#ifdef CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI
#include <linux/acpi.h>
#include <acpi/processor.h>
#endif

#include <asm/msr.h>
#include <asm/processor.h>
#include <asm/cpufeature.h>

#include "speedstep-est-common.h"

#define PFX "speedstep-centrino: "
#define MAINTAINER "Jeremy Fitzhardinge <jeremy@goop.org>"

#define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER, "speedstep-centrino", msg)


struct cpu_id
{
__u8 x86; /* CPU family */
__u8 x86_model; /* model */
__u8 x86_mask; /* stepping */
};

enum {
CPU_BANIAS,
CPU_DOTHAN_A1,
CPU_DOTHAN_A2,
CPU_DOTHAN_B0,
CPU_DOTHAN_C0,
};

static const struct cpu_id cpu_ids[] = {
[CPU_BANIAS] = { 6, 9, 5 },
[CPU_DOTHAN_A1] = { 6, 13, 1 },
[CPU_DOTHAN_A2] = { 6, 13, 2 },
[CPU_DOTHAN_B0] = { 6, 13, 6 },
[CPU_DOTHAN_C0] = { 6, 13, 8 },
};
#define N_IDS (sizeof(cpu_ids)/sizeof(cpu_ids[0]))

struct cpu_model
{
const struct cpu_id *cpu_id;
const char *model_name;
unsigned max_freq; /* max clock in kHz */

struct cpufreq_frequency_table *op_points; /* clock/voltage pairs */
};
static int centrino_verify_cpu_id(const struct cpuinfo_x86 *c, const struct cpu_id *x);

/* Operating points for current CPU */
static struct cpu_model *centrino_model[NR_CPUS];
static const struct cpu_id *centrino_cpu[NR_CPUS];

static struct cpufreq_driver centrino_driver;

#ifdef CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE

/* Computes the correct form for IA32_PERF_CTL MSR for a particular
frequency/voltage operating point; frequency in MHz, volts in mV.
This is stored as "index" in the structure. */
#define OP(mhz, mv) \
{ \
.frequency = (mhz) * 1000, \
.index = (((mhz)/100) << 8) | ((mv - 700) / 16) \
}

/*
* These voltage tables were derived from the Intel Pentium M
* datasheet, document 25261202.pdf, Table 5. I have verified they
* are consistent with my IBM ThinkPad X31, which has a 1.3GHz Pentium
* M.
*/

/* Ultra Low Voltage Intel Pentium M processor 900MHz (Banias) */
static struct cpufreq_frequency_table banias_900[] =
{
OP(600, 844),
OP(800, 988),
OP(900, 1004),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Ultra Low Voltage Intel Pentium M processor 1000MHz (Banias) */
static struct cpufreq_frequency_table banias_1000[] =
{
OP(600, 844),
OP(800, 972),
OP(900, 988),
OP(1000, 1004),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Low Voltage Intel Pentium M processor 1.10GHz (Banias) */
static struct cpufreq_frequency_table banias_1100[] =
{
OP( 600, 956),
OP( 800, 1020),
OP( 900, 1100),
OP(1000, 1164),
OP(1100, 1180),
{ .frequency = CPUFREQ_TABLE_END }
};


/* Low Voltage Intel Pentium M processor 1.20GHz (Banias) */
static struct cpufreq_frequency_table banias_1200[] =
{
OP( 600, 956),
OP( 800, 1004),
OP( 900, 1020),
OP(1000, 1100),
OP(1100, 1164),
OP(1200, 1180),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 1.30GHz (Banias) */
static struct cpufreq_frequency_table banias_1300[] =
{
OP( 600, 956),
OP( 800, 1260),
OP(1000, 1292),
OP(1200, 1356),
OP(1300, 1388),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 1.40GHz (Banias) */
static struct cpufreq_frequency_table banias_1400[] =
{
OP( 600, 956),
OP( 800, 1180),
OP(1000, 1308),
OP(1200, 1436),
OP(1400, 1484),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 1.50GHz (Banias) */
static struct cpufreq_frequency_table banias_1500[] =
{
OP( 600, 956),
OP( 800, 1116),
OP(1000, 1228),
OP(1200, 1356),
OP(1400, 1452),
OP(1500, 1484),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 1.60GHz (Banias) */
static struct cpufreq_frequency_table banias_1600[] =
{
OP( 600, 956),
OP( 800, 1036),
OP(1000, 1164),
OP(1200, 1276),
OP(1400, 1420),
OP(1600, 1484),
{ .frequency = CPUFREQ_TABLE_END }
};

/* Intel Pentium M processor 1.70GHz (Banias) */
static struct cpufreq_frequency_table banias_1700[] =
{
OP( 600, 956),
OP( 800, 1004),
OP(1000, 1116),
OP(1200, 1228),
OP(1400, 1308),
OP(1700, 1484),
{ .frequency = CPUFREQ_TABLE_END }
};
#undef OP

/* Dothan processor datasheet 30218903.pdf defines 4 voltages for each
frequency (VID#A through VID#D) - this macro allows us to define all
of these but we only use the VID#C voltages at compile time - this may
need some work if we want to select the voltage profile at runtime. */

#define OP(mhz, mva, mvb, mvc, mvd) \
{ \
.frequency = (mhz) * 1000, \
.index = (((mhz)/100) << 8) | ((mvc - 700) / 16) \
}

/* Intel Pentium M processor 733 / 1.10GHz (Dothan) */
static struct cpufreq_frequency_table dothan_1100[] =
{
OP( 600, 700, 700, 700, 700),
OP( 800, 748, 748, 748, 748),
OP( 900, 780, 780, 780, 780),
OP(1000, 812, 812, 812, 812),
OP(1100, 812, 812, 812, 812),
{ .frequency = CPUFREQ_TABLE_END }
};

#undef OP

#define _BANIAS(cpuid, max, name) \
{ .cpu_id = cpuid, \
.model_name = "Intel(R) Pentium(R) M processor " name "MHz", \
.max_freq = (max)*1000, \
.op_points = banias_##max, \
}
#define BANIAS(max) _BANIAS(&cpu_ids[CPU_BANIAS], max, #max)

#define DOTHAN(cpuid, max, name) \
{ .cpu_id = cpuid, \
.model_name = "Intel(R) Pentium(R) M Processor " name "GHz", \
.max_freq = (max)*1000, \
.op_points = dothan_##max, \
}

/* CPU models, their operating frequency range, and freq/voltage
operating points */
static struct cpu_model models[] =
{
_BANIAS(&cpu_ids[CPU_BANIAS], 900, " 900"),
BANIAS(1000),
BANIAS(1100),
BANIAS(1200),
BANIAS(1300),
BANIAS(1400),
BANIAS(1500),
BANIAS(1600),
BANIAS(1700),
DOTHAN(&cpu_ids[CPU_DOTHAN_A1], 1100, "1.10"),
DOTHAN(&cpu_ids[CPU_DOTHAN_A2], 1100, "1.10"),
DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 1100, "1.10"),
DOTHAN(&cpu_ids[CPU_DOTHAN_C0], 1100, "1.10"),

/* NULL model_name is a wildcard */
{ &cpu_ids[CPU_DOTHAN_A1], NULL, 0, NULL },
{ &cpu_ids[CPU_DOTHAN_A2], NULL, 0, NULL },
{ &cpu_ids[CPU_DOTHAN_B0], NULL, 0, NULL },
{ &cpu_ids[CPU_DOTHAN_C0], NULL, 0, NULL },

{ NULL, }
};
#undef _BANIAS
#undef BANIAS
#undef DOTHAN
Top
Post Reply

340 posts
  • Page 1 of 14
    • Jump to page:
  • 1
  • 2
  • 3
  • 4
  • 5
  • …
  • 14
  • Next

Return to “Kernel & Hardware”

Jump to
  • Assistance
  • ↳   News & Announcements
  • ↳   Frequently Asked Questions
  • ↳   Installing Gentoo
  • ↳   Multimedia
  • ↳   Desktop Environments
  • ↳   Networking & Security
  • ↳   Kernel & Hardware
  • ↳   Portage & Programming
  • ↳   Gamers & Players
  • ↳   Other Things Gentoo
  • ↳   Unsupported Software
  • Discussion & Documentation
  • ↳   Documentation, Tips & Tricks
  • ↳   Gentoo Chat
  • ↳   Gentoo Forums Feedback
  • ↳   Duplicate Threads
  • International Gentoo Users
  • ↳   中文 (Chinese)
  • ↳   Dutch
  • ↳   Finnish
  • ↳   French
  • ↳   Deutsches Forum (German)
  • ↳   Diskussionsforum
  • ↳   Deutsche Dokumentation
  • ↳   Greek
  • ↳   Forum italiano (Italian)
  • ↳   Forum di discussione italiano
  • ↳   Risorse italiane (documentazione e tools)
  • ↳   Polskie forum (Polish)
  • ↳   Instalacja i sprzęt
  • ↳   Polish OTW
  • ↳   Portuguese
  • ↳   Documentação, Ferramentas e Dicas
  • ↳   Russian
  • ↳   Scandinavian
  • ↳   Spanish
  • ↳   Other Languages
  • Architectures & Platforms
  • ↳   Gentoo on ARM
  • ↳   Gentoo on PPC
  • ↳   Gentoo on Sparc
  • ↳   Gentoo on Alternative Architectures
  • ↳   Gentoo on AMD64
  • ↳   Gentoo for Mac OS X (Portage for Mac OS X)
  • Board index
  • All times are UTC
  • Delete cookies

© 2001–2026 Gentoo Foundation, Inc.

Powered by phpBB® Forum Software © phpBB Limited

Privacy Policy