Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
user undervolting
View unanswered posts
View posts from last 24 hours

Goto page 1, 2, 3 ... 12, 13, 14  Next  
Reply to topic    Gentoo Forums Forum Index Kernel & Hardware
View previous topic :: View next topic  
Author Message
albright
Advocate
Advocate


Joined: 16 Nov 2003
Posts: 2586
Location: Near Toronto

PostPosted: Tue May 24, 2005 11:52 pm    Post subject: user undervolting Reply with quote

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 ...
Back to top
View user's profile Send private message
moocha
Watchman
Watchman


Joined: 21 Oct 2003
Posts: 5722

PostPosted: Wed May 25, 2005 1:17 am    Post subject: Reply with quote

https://forums.gentoo.org/viewtopic-t-284375.html
https://forums.gentoo.org/viewtopic-t-329382.html
https://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
Back to top
View user's profile Send private message
bollucks
l33t
l33t


Joined: 27 Oct 2004
Posts: 606

PostPosted: Wed May 25, 2005 2:43 am    Post subject: Reply with quote

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.
Back to top
View user's profile Send private message
ian!
Bodhisattva
Bodhisattva


Joined: 25 Feb 2003
Posts: 3829
Location: Essen, Germany

PostPosted: Wed May 25, 2005 9:18 am    Post subject: Reply with quote

moocha wrote:
https://forums.gentoo.org/viewtopic-t-284375.html
https://forums.gentoo.org/viewtopic-t-329382.html
https://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
Back to top
View user's profile Send private message
albright
Advocate
Advocate


Joined: 16 Nov 2003
Posts: 2586
Location: Near Toronto

PostPosted: Wed May 25, 2005 11:57 am    Post subject: clueless moderators Reply with quote

I put up this post:

https://forums.gentoo.org/viewtopic-t-341298-highlight-.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:
Back to top
View user's profile Send private message
pjp
Administrator
Administrator


Joined: 16 Apr 2002
Posts: 18439

PostPosted: Wed May 25, 2005 11:58 am    Post subject: Reply with quote

Clueless users (Moved from OTG).
_________________
The media sells it and you live the role.
Back to top
View user's profile Send private message
Naib
Watchman
Watchman


Joined: 21 May 2004
Posts: 5820
Location: Removed by Neddy

PostPosted: Wed May 25, 2005 1:06 pm    Post subject: Reply with quote

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?
_________________
The best argument against democracy is a five-minute conversation with the average voter
Great Britain is a republic, with a hereditary president, while the United States is a monarchy with an elective king
Back to top
View user's profile Send private message
albright
Advocate
Advocate


Joined: 16 Nov 2003
Posts: 2586
Location: Near Toronto

PostPosted: Wed May 25, 2005 1:20 pm    Post subject: Reply with quote

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 ...
Back to top
View user's profile Send private message
pilla
Administrator
Administrator


Joined: 07 Aug 2002
Posts: 7698
Location: Pelotas, BR

PostPosted: Wed May 25, 2005 3:48 pm    Post subject: Reply with quote

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


reference
_________________
"I'm just very selective about the reality I choose to accept." -- Calvin
Back to top
View user's profile Send private message
pilla
Administrator
Administrator


Joined: 07 Aug 2002
Posts: 7698
Location: Pelotas, BR

PostPosted: Wed May 25, 2005 3:51 pm    Post subject: Reply with quote

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
Back to top
View user's profile Send private message
albright
Advocate
Advocate


Joined: 16 Nov 2003
Posts: 2586
Location: Near Toronto

PostPosted: Wed May 25, 2005 5:48 pm    Post subject: Reply with quote

Quote:

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:
Quote:

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:
Back to top
View user's profile Send private message
pilla
Administrator
Administrator


Joined: 07 Aug 2002
Posts: 7698
Location: Pelotas, BR

PostPosted: Wed May 25, 2005 6:28 pm    Post subject: Reply with quote

albright wrote:
Quote:

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
Back to top
View user's profile Send private message
nixnut
Bodhisattva
Bodhisattva


Joined: 09 Apr 2004
Posts: 10974
Location: the dutch mountains

PostPosted: Wed May 25, 2005 6:44 pm    Post subject: Reply with quote

pilla wrote:
albright wrote:
Quote:

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
Back to top
View user's profile Send private message
pilla
Administrator
Administrator


Joined: 07 Aug 2002
Posts: 7698
Location: Pelotas, BR

PostPosted: Wed May 25, 2005 6:57 pm    Post subject: Reply with quote

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.
_________________
"I'm just very selective about the reality I choose to accept." -- Calvin


Last edited by pilla on Wed May 25, 2005 7:21 pm; edited 1 time in total
Back to top
View user's profile Send private message
albright
Advocate
Advocate


Joined: 16 Nov 2003
Posts: 2586
Location: Near Toronto

PostPosted: Wed May 25, 2005 7:20 pm    Post subject: Reply with quote

Quote:

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:

Quote:

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:

Quote:

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:
Back to top
View user's profile Send private message
pilla
Administrator
Administrator


Joined: 07 Aug 2002
Posts: 7698
Location: Pelotas, BR

PostPosted: Wed May 25, 2005 7:22 pm    Post subject: Reply with quote

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
Back to top
View user's profile Send private message
rschwarze
n00b
n00b


Joined: 01 Jul 2005
Posts: 63
Location: Germany

PostPosted: Fri Jul 01, 2005 12:37 pm    Post subject: Reply with quote

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
Back to top
View user's profile Send private message
Gentree
Watchman
Watchman


Joined: 01 Jul 2003
Posts: 5350
Location: France, Old Europe

PostPosted: Sat Jul 02, 2005 2:03 am    Post subject: Reply with quote

Quote:
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
Back to top
View user's profile Send private message
albright
Advocate
Advocate


Joined: 16 Nov 2003
Posts: 2586
Location: Near Toronto

PostPosted: Sun Jul 10, 2005 12:19 pm    Post subject: software undervolting Reply with quote

Quote:
@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:
Back to top
View user's profile Send private message
rschwarze
n00b
n00b


Joined: 01 Jul 2005
Posts: 63
Location: Germany

PostPosted: Sun Jul 10, 2005 1:35 pm    Post subject: Reply with quote

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.)
Back to top
View user's profile Send private message
albright
Advocate
Advocate


Joined: 16 Nov 2003
Posts: 2586
Location: Near Toronto

PostPosted: Mon Jul 11, 2005 3:51 pm    Post subject: send it along! Reply with quote

Quote:
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 ....
Back to top
View user's profile Send private message
BetterUnborn
n00b
n00b


Joined: 28 Sep 2004
Posts: 57
Location: Germany

PostPosted: Wed Jul 13, 2005 1:10 pm    Post subject: Reply with quote

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:

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:

/* 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:
Quote:

...
It is required for the driver to work on non-Banias CPUs.

So no chance for getting it work for sonoma people??
Back to top
View user's profile Send private message
Devport
Guru
Guru


Joined: 15 Dec 2004
Posts: 361

PostPosted: Wed Jul 13, 2005 1:40 pm    Post subject: Reply with quote

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
https://forums.gentoo.org/viewtopic-t-273047-highlight-atxp.html

However, changing the kernel voltage table probably is an easier way as long as it works.
Back to top
View user's profile Send private message
rschwarze
n00b
n00b


Joined: 01 Jul 2005
Posts: 63
Location: Germany

PostPosted: Wed Jul 13, 2005 4:04 pm    Post subject: Reply with quote

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/~schwarze/speedstep-centrino.c
Back to top
View user's profile Send private message
albright
Advocate
Advocate


Joined: 16 Nov 2003
Posts: 2586
Location: Near Toronto

PostPosted: Wed Jul 13, 2005 7:54 pm    Post subject: system won't crash Reply with quote

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
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Kernel & Hardware All times are GMT
Goto page 1, 2, 3 ... 12, 13, 14  Next
Page 1 of 14

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum