Hello everyone,
This is my first post here and I wanted to share my experiences with undervolting the W500 CPU. It is quite late now, so please excuse any typos or bad grammar.
DISCLAIMER: Use at your own risk. I do not take any responsibility of things you do to your CPUs, especially if you mess up with register values and end up overvolting and frying your CPU.
Credit for AMD undervolting goes to thierryg and StApostol from this thread: SPCR • View topic - hp dm1z undervolting and (limited) fan control, I just adapted registers values for C50.
Let's start with some background:
C50 support two P states - P0 and P1. P0 state corresponds to 1000 MHz and P1 corresponds to 800 MHz. For each state, there is an MSR register which defines CPU voltage and frequency for that state.
0xC0010064 defines voltage for P0 and 0xC0010065 defines voltage for P1. It is also possible to underclock the CPU by lowering the frequency for P0 and P1 states. For some reason, overclocking does not seem to work - CPU-Z shows higher frequency, however system performance remains the same and HWINFO32 shows that frequency is not increased.
I will dive into over/underclocking later, for now lets start with undervolting process:
1. Download RW-Everything application from RW - Read & Write - I've used portable version, RwPortableV1.5.7z;
CPU-Z (CPUID - System & hardware benchmark, monitoring, reporting) or HWInfo32 (HWiNFO32 Download) - to monitor current CPU voltage
and ORTHOS (Orthos - Overclock.net - Overclocking.net) or Prime95 (Free Software - GIMPS) for stability tests.
2. Unzip or install RW application. I've placed it to C:\UTILS\RW and will be referring to this path in this guide.
3. create new file called read.ro in directory where you placed RW application. Put following lines into it:
rdmsr 0xc0010064 reads MSR register data for P0 state and rdmsr 0xc0010065 reads register data for P1.Code:>cpu 1 >rdmsr 0xc0010064 >rdmsr 0xc0010065 >cpu 2 >rdmsr 0xc0010064 >rdmsr 0xc0010065 >RwExit
4. Start command line as Administrator - you need to run as admin, otherwise it would not be able to read/write to MSR registers. Go to RW directory (C:\utils\rw in my case). Run following command:
this would dump current MSR registers data for your C50 into results.log file. These registers contains configuration data for P0 and P1 states of AMD C-50. P0 corresponds to 1000 MHz frequency and P1 corresponds to 800 Mhz.Code:rw /Command=read.ro /Logfile=initial.txt
I am not sure if everyone's CPU is running on the same voltage, but mine was running at 1.0625 volt at 1 GHz and at 0.9375 volt at 800 Mhz.
We will be changing digits 5 and 6 in EAX value for each register - these are defining CPU voltage. Note that in order to lower the voltage, we will need to increase the value.Code:Current CPU = CPU1 Read MSR 0xC0010064 : High 32bit(EDX) = 0x8000029C, Low 32bit(EAX) = 0x00004E30 63 56 55 48 47 40 39 32 31 24 23 16 15 8 7 0 10000000-00000000-00000010-10011100-00000000-00000000-01001110-00110000 Read MSR 0xC0010065 : High 32bit(EDX) = 0x8000026F, Low 32bit(EAX) = 0x00006240 63 56 55 48 47 40 39 32 31 24 23 16 15 8 7 0 10000000-00000000-00000010-01101111-00000000-00000000-01100010-01000000 Current CPU = CPU2 Read MSR 0xC0010064 : High 32bit(EDX) = 0x8000029C, Low 32bit(EAX) = 0x00004E30 63 56 55 48 47 40 39 32 31 24 23 16 15 8 7 0 10000000-00000000-00000010-10011100-00000000-00000000-01001110-00110000 Read MSR 0xC0010065 : High 32bit(EDX) = 0x8000026F, Low 32bit(EAX) = 0x00006240 63 56 55 48 47 40 39 32 31 24 23 16 15 8 7 0 10000000-00000000-00000010-01101111-00000000-00000000-01100010-01000000
5. Copy/paste values from results.log to normal.rw file using template below, replacing columns 2 and 3 with EDX and EAX values from initial.txt
- this will be the configuration file to roll back to original MSR values. My normal.rw file looks like this:
Your EAX values may be slightly different if your CPU had different initial voltage (I don't know if all C-50 CPUs are equal).Code:>cpu 1 >wrmsr 0xc0010064 0x8000029C 0x00004E30 >wrmsr 0xc0010065 0x8000026F 0x00006240 >cpu 2 >wrmsr 0xc0010064 0x8000029C 0x00004E30 >wrmsr 0xc0010065 0x8000026F 0x00006240 >RwExit
6. Now create another copy of normal.rw file (I've called it low4.rw). We will be using it to find the lowest voltage your CPU can sustain.
7. Repeat following: Edit low4.rw and increase values 4E and 62 (refer to the table below for the actual voltage). Please remember that values should be even (otherwise you will downclock your CPU to ~200MHz).
Save low4.rw and load new values into MSR registers using following command:
8. Run orthos or prime95 stress test to ensure that your CPU is stable at this frequency. If it is stable, repeat step 7 increasing VID values even more. If it fails (or computer hangs), power it off by holding power key for few seconds and then power it on and return to last stable VID.Code:rw.exe /Command=low4.rw
The maximal stable voltage values for my W500 were 66 and 7A, so my CPU is running at 0.9125 volt at 1GHz and 0.7875 volt at 800MHz. You can try jumping to
VID 60 for P1 and VID 74 for P2 to see if it works for you and then work from there.
9. Once you are satisfied with your settings, we will need to make sure MSR registers are updated after each startup/wake up cycle. We will create a scheduled task to run on every startup/system unlock.>cpu 1
>wrmsr 0xc0010064 0x8000029C 0x00006630
>wrmsr 0xc0010065 0x8000026F 0x00007A40
>cpu 2
>wrmsr 0xc0010064 0x8000029C 0x00006630
>wrmsr 0xc0010065 0x8000026F 0x00007A40
>RwExit
The easiest way to create the task is to import Undervolting.xml attached with following command:
and then just edit the path to rw.exe and "Start in" path in Actions tab, or you can create it manually:Code:schtasks /Create /XML Undervolting.xml /TN Undervolting
9.1 Open task scheduler and create a new task. In General tab, enter task name, select "Run whether user is logged on or not", select "Do not store password. The task will only have access to local resources"
and "Run with highest privileges".
9.2 On Triggers tab, add following triggers: "At Startup", "On Connection to user session" and "On workstation unlock".
9.3 On Actions tab, add a new "Start a program" action. For Program script, enter [Your PATH to RW]\rw.exe (in my case it was c:\utils\rw\rw.exe).
For arguments, enter /Command=low4.rw /Logfile=log.txt
For Start in, enter the path to RW.EXE program (c:\utils\rw in my case).
In Conditions tab, uncheck "Start the task only if computer is on AC power".
10. Save this task and reboot your W500. Use CPU-Z or HWINFO to monitor if CPU voltages are changed. Please note that it may take up to 1 minute for this scheduled task to run, so wait for some time before you assume that it is not working at all.
Power savings:
When running ORTHOS load with W500 plugged in with fully charged battery and minimal screen brightness, my Kill A Watt device is showing 10W power consumption; with voltage lowered to 0.9125 it shows about 9W. HW Monitor shows that CPU temperature is about 4 degrees lower. Unfortunately this underclocking is not affecting GPU, so anything that utilizes GPU would not benefit from lower power consumption.
Code:Voltage/VID values: 1.3000 28 1.2875 2A 1.2750 2C 1.2625 2E 1.2500 30 1.2375 32 1.2250 34 1.2125 36 1.2000 38 1.1875 3A 1.1750 3C 1.1625 3E 1.1500 40 1.1375 42 1.1250 44 1.1125 46 1.1000 48 1.0875 4A 1.0750 4C 1.0625 4E 1.0500 50 1.0375 52 1.0250 54 1.0125 56 1.0000 58 0.9875 5A 0.9750 5C 0.9625 5E 0.9500 60 0.9375 62 0.9250 64 0.9125 66 0.9000 68 0.8875 6A 0.8750 6C 0.8625 6E 0.8500 70 0.8375 72 0.8250 74 0.8125 76 0.8000 78 0.7875 7A 0.7750 7C 0.7625 7E 0.7500 80 0.7375 82 0.7250 84 0.7125 86 0.7000 88



LinkBack URL
About LinkBacks
Reply With Quote
. You could say that I like tablets!

