[ONE General] Mnt-XDA:
MSM8974AC Snapdragon 801 CPU Binning

​

Hello XDA Friends,

I just collected some information related to CPU Binning and undervolting. Different sections of this POST is collected from different internet sources.

All Source Links are given below in each section. I am just the info collector and all credits goes to them (Original Author in different sources...)

Please share your views and updated information here

*** I don’t know, this thread should be in "General" or in "Android Development". Request to Moderators: please move this to proper thread-category***

Apps

[ROOT] Kernel Tweaker -- Google Play - https://play.google.com/store/apps/details?id=com.dsht.kerneltweaker

Trickster MOD Kernel Settings --- Google Play - https://play.google.com/store/apps/details?id=com.bigeyes0x0.trickstermod

Custom Kernel with UV Support (undervolting)

Franco Kernel -- http://xdaforums.com/oneplus-one/orig-development/kernel-franco-kernel-r1-t2800871

[SIZE=4][B]Source[/B]: [URL]https://forums.oneplus.net/threads/check-your-opo-cpu-binning.33330/[/URL][/SIZE]

CPU binning quality defines the quality of a semiconductor processor.. like if it needs more voltage

to run stable than others of the same version.

it normally means, the lesser demanding stable vcore on stock clock, the higher binning

the cpu got and more capable it could be in terms of overclocking.

it's like intel processors. the i5 4570 has lessened stock clock than a i5 4670 for example and this is due to the

chip quality of the i5 4570 didn't turn out as good as the i5 4670 to operate at targeted stock clock

think of it like cutting out a perfect circle out of paper with a normal pair of scissors.

would every circle look the same by your hand by their tiniest nanometers?

no they probably wouldn't unless you're chuck norris but this is the same which applies to creating semi conductors..

they don't turn out perfect all the time and get sorted out but still are usable.

this is also why some i5 4670k hit a 4.3ghz overclock on air whilst other 4670k might reach even higher 4.7ghz

because their binning rate/grade of quality is actually higher

other than that there was once a great news about the nexus 4 because some people felt betrayed since the variety of

fast and slow snapdragon processors differed very much and geeks wanted to exchange it

because of that since it really made a slight difference in processor power

Phone must be rooted!!

1. Install Busybox

2. Install a Terminal Emulator

3. Reboot

4. Open Terminal and type:

su
dmesg | grep PVS

5. A line should be outputted that tells you what type you have.

1= slow

2= nominal

3= fast

4= faster

dmesg is a limited buffer of kernel messages so if the phone has been on for a while the command suggested may not show anything.

An alternative command is:

grep PVS /proc/kmsg

This is where all the kernel messages are stored (similar to /var/log/messages on linux).

PVS Bins for MSM8974AC are --> 0 to 15

Snapdragon 801 2.5ghz MSM8974AC v3

=======================================

MSM8974AC 2.5ghz PVS 0 - 422mhz
MSM8974AC 2.5ghz PVS 1 - 499mhz
MSM8974AC 2.5ghz PVS 2 - 576mhz
MSM8974AC 2.5ghz PVS 3 - 652mhz
MSM8974AC 2.5ghz PVS 4 - 729mhz
MSM8974AC 2.5ghz PVS 5 - 806mhz
MSM8974AC 2.5ghz PVS 6 - 652mhz
MSM8974AC 2.5ghz PVS 7 - 729mhz
MSM8974AC 2.5ghz PVS 8 - 806mhz
MSM8974AC 2.5ghz PVS 9 - 883mhz
MSM8974AC 2.5ghz PVS 10 - 960mhz
MSM8974AC 2.5ghz PVS 11 - 1036mhz
MSM8974AC 2.5ghz PVS 12 - 1113mhz
MSM8974AC 2.5ghz PVS 13 - 1190mhz
MSM8974AC 2.5ghz PVS 14 - 1113mhz
MSM8974AC 2.5ghz PVS 15 - 1190mhz

========= By XDA Recognized Developer @HD2Owner (Thank You Sir) =================

Best max frequency (sweet performance/power spot):

MSM8974AC 2.5ghz - 1.57ghz

How to get the maximum battery life:

if you have a MSM8974AB pvs 6 for example, try the following steps:

try the next higher pvs levels (pvs7). don't try AC pvs values on AB chips.

AB chips are binned for lower frequencies while AC are binned for higher frequencies (duh).

so if you have a AB chip, work your way up the AB pvs values until you have freezes or similar and move back.

if you have a AC chip, work your way up the AC pvs values etc...

if you found highest setting that does not cause any problems after intensive testing and usage:

congratulations, you did it. :svetius:

How to get the maximum frequency:

first try higher than stock maximum clock and see how it behaves.

if you don't reach your desired clockspeed, try the next lower pvs setting of your chip. yes, i said LOWER.

this gives the processor more voltage to reach higher overclocks.

i don't recommend it tho since we all want our phones to last as long as possible usually.

==========================================================

Source -- XDA

http://xdaforums.com/htc-one-m8/general/guide-snapdragon-801-clocking-voltage-t2807173

I have one question ...Higher Bin indicates higher quality chip ?

Similar question asked here.... see details...

https://developer.qualcomm.com/forum/qdn-forums/general-discussion/27244

Another nice command to get binning info is

su
cat /sys/module/clock_krait_8974/parameters/table_name

It's said that the higher the PVS bin value the better - in terms of it gives of less heat and requires less voltage:

0 requires the MOST/HIGHEST voltage range to boot, and 7 required the LEAST/LOWEST voltage range to boot.

Because lower binning SOCs use higher voltage values, they tend to run hotter than higher binning versions.

===================

Source: XDA

http://xdaforums.com/showthread.php?t=2786841

users with CPU

Binning 0 running @ 2.3 GHz is using 1.100 volts

Binning 1 running @ 2.3 GHz is using 1.075 volts

...

Binning 6 running @ 2.3 GHz is using 0.95 volts

so if you take binning 6 compare to binning 0, you are "effectively" pre-undervolted from the factory by 150mv ALREADY! Wow...

So users with binning 0's MASSIVE -150mv undervolt compare to binning 6's STOCK voltage is effectively the SAME!

Wait a second... Isn't Binning 0 designed to run @ higher voltage? SO the massive undervoltage should crash correct?

Answer: Yes and No...

Lower Binning SOCs may need higher voltage to BOOT, but when running, it may use the same nominal voltage as the higher binning SOCs.

So once successfully booted, you can run the lower binning SOCs at lower voltage values than during boot.

===========================

Source: Google+

https://plus.google.com/+PaulReioux/posts/YXxQnnZxC7j

Snapdragon 801 2.5ghz MSM8974AC v3 --- Also Known As ---- MSM8974Pro AC Rev 1

(Two Revisions are available 0, 1)

============================

/* 8974Pro AC 2.5GHz */ (REV 0)
[0][3][0] = { pro_rev0_2p5g_pvs0, sizeof(pro_rev0_2p5g_pvs0) },
[0][3][1] = { pro_rev0_2p5g_pvs1, sizeof(pro_rev0_2p5g_pvs1) },
[0][3][2] = { pro_rev0_2p5g_pvs2, sizeof(pro_rev0_2p5g_pvs2) },
[0][3][3] = { pro_rev0_2p5g_pvs3, sizeof(pro_rev0_2p5g_pvs3) },
[0][3][4] = { pro_rev0_2p5g_pvs4, sizeof(pro_rev0_2p5g_pvs4) },
[0][3][5] = { pro_rev0_2p5g_pvs5, sizeof(pro_rev0_2p5g_pvs5) },
[0][3][6] = { pro_rev0_2p5g_pvs6, sizeof(pro_rev0_2p5g_pvs6) },
[0][3][7] = { pro_rev0_2p5g_pvs6, sizeof(pro_rev0_2p5g_pvs6) },

/* 8974Pro AC 2.5GHz */ (REV 1)
[1][3][0] = { pro_rev1_2p5g_pvs0, sizeof(pro_rev1_2p5g_pvs0) },
[1][3][1] = { pro_rev1_2p5g_pvs1, sizeof(pro_rev1_2p5g_pvs1) },
[1][3][2] = { pro_rev1_2p5g_pvs2, sizeof(pro_rev1_2p5g_pvs2) },
[1][3][3] = { pro_rev1_2p5g_pvs3, sizeof(pro_rev1_2p5g_pvs3) },
[1][3][4] = { pro_rev1_2p5g_pvs4, sizeof(pro_rev1_2p5g_pvs4) },
[1][3][5] = { pro_rev1_2p5g_pvs5, sizeof(pro_rev1_2p5g_pvs5) },
[1][3][6] = { pro_rev1_2p5g_pvs6, sizeof(pro_rev1_2p5g_pvs6) },
[1][3][7] = { pro_rev1_2p5g_pvs7, sizeof(pro_rev1_2p5g_pvs7) },
[1][3][8] = { pro_rev1_2p5g_pvs8, sizeof(pro_rev1_2p5g_pvs8) },
[1][3][9] = { pro_rev1_2p5g_pvs9, sizeof(pro_rev1_2p5g_pvs9) },
[1][3][10] = { pro_rev1_2p5g_pvs10, sizeof(pro_rev1_2p5g_pvs10) },
[1][3][11] = { pro_rev1_2p5g_pvs11, sizeof(pro_rev1_2p5g_pvs11) },
[1][3][12] = { pro_rev1_2p5g_pvs12, sizeof(pro_rev1_2p5g_pvs12) },
[1][3][13] = { pro_rev1_2p5g_pvs13, sizeof(pro_rev1_2p5g_pvs13) },
[1][3][14] = { pro_rev1_2p5g_pvs14, sizeof(pro_rev1_2p5g_pvs14) },
[1][3][15] = { pro_rev1_2p5g_pvs15, sizeof(pro_rev1_2p5g_pvs15) },

Voltage Table of REV 0 and REV 1 are following....

For Rev 0
------------------------------
Ordinary 8974AC PVS 0
static struct acpu_level pro_rev0_2p5g_pvs0 [] __ initdata = {
{1, {300000, PLL_0, 0, 0}, L2 (0), 800000, 76},
{1, {422400, HFPLL, 2, 44}, L2 (2), 800000, 106},
{1, {652800, HFPLL, 1, 34}, L2 (3), 810000, 165},
{1, {729600, HFPLL, 1, 38}, L2 (4), 820000, 186},
{1, {883200, HFPLL, 1, 46}, L2 (4), 840000, 229},
{1, {960000, HFPLL, 1, 50}, L2 (9), 850000, 251},
{1, {1036800, HFPLL, 1, 54}, L2 (10), 860000, 273},
{1, {1190400, HFPLL, 1, 62}, L2 (10), 880000, 319},
{1, {1267200, HFPLL, 1, 66}, L2 (13), 890000, 342},
{1, {1497600, HFPLL, 1, 78}, L2 (16), 920000, 415},
{1, {1574400, HFPLL, 1, 82}, L2 (17), 930000, 439},
{1, {1728000, HFPLL, 1, 90}, L2 (18), 960000, 493},
{1, {1958400, HFPLL, 1, 102}, L2 (19), 1005000, 579},
{1, {2265600, HFPLL, 1, 118}, L2 (19), 1065000, 700},
{1, {2457600, HFPLL, 1, 128}, L2 (19), 1100000, 785},
{0, 0}} {
};

Common 8974AC PVS 6/7
static struct acpu_level pro_rev0_2p5g_pvs6 [] __ initdata = {
{1, {300000, PLL_0, 0, 0}, L2 (0), 750000, 76},
{1, {422400, HFPLL, 2, 44}, L2 (2), 750000, 106},
{1, {652800, HFPLL, 1, 34}, L2 (3), 750000, 165},
{1, {729600, HFPLL, 1, 38}, L2 (4), 750000, 186},
{1, {883200, HFPLL, 1, 46}, L2 (4), 750000, 229},
{1, {960000, HFPLL, 1, 50}, L2 (9), 750000, 251},
{1, {1036800, HFPLL, 1, 54}, L2 (10), 750000, 273},
{1, {1190400, HFPLL, 1, 62}, L2 (10), 750000, 319},
{1, {1267200, HFPLL, 1, 66}, L2 (13), 755000, 342},
{1, {1497600, HFPLL, 1, 78}, L2 (16), 785000, 415},
{1, {1574400, HFPLL, 1, 82}, L2 (17), 795000, 439},
{1, {1728000, HFPLL, 1, 90}, L2 (18), 815000, 493},
{1, {1958400, HFPLL, 1, 102}, L2 (19), 855000, 579},
{1, {2265600, HFPLL, 1, 118}, L2 (19), 915000, 700},
{1, {2457600, HFPLL, 1, 128}, L2 (19), 950000, 785},
{0, 0}} {
};

For Rev 1
----------------------------------------------------
Revision 8974AC PVS 0
static struct acpu_level pro_rev1_2p5g_pvs0 [] __ initdata = {
{1, {300000, PLL_0, 0, 0}, L2 (0), 800000, 76},
{1, {422400, HFPLL, 2, 44}, L2 (2), 800000, 106},
{1, {652800, HFPLL, 1, 34}, L2 (3), 830000, 168},
{1, {729600, HFPLL, 1, 38}, L2 (4), 840000, 189},
{1, {883200, HFPLL, 1, 46}, L2 (4), 860000, 233},
{1, {960000, HFPLL, 1, 50}, L2 (9), 870000, 256},
{1, {1036800, HFPLL, 1, 54}, L2 (10), 880000, 278},
{1, {1190400, HFPLL, 1, 62}, L2 (10), 900000, 324},
{1, {1267200, HFPLL, 1, 66}, L2 (13), 910000, 348},
{1, {1497600, HFPLL, 1, 78}, L2 (16), 940000, 421},
{1, {1574400, HFPLL, 1, 82}, L2 (17), 950000, 446},
{1, {1728000, HFPLL, 1, 90}, L2 (18), 980000, 501},
{1, {1958400, HFPLL, 1, 102}, L2 (19), 1025000, 588},
{1, {2265600, HFPLL, 1, 118}, L2 (19), 1085000, 716},
{1, {2457600, HFPLL, 1, 128}, L2 (19), 1120000, 802},
{0, 0}} {
};

Revision 8974AC PVS 7
static struct acpu_level pro_rev1_2p5g_pvs7 [] __ initdata = {
{1, {300000, PLL_0, 0, 0}, L2 (0), 775000, 76},
{1, {422400, HFPLL, 2, 44}, L2 (2), 775000, 106},
{1, {652800, HFPLL, 1, 34}, L2 (3), 775000, 168},
{1, {729600, HFPLL, 1, 38}, L2 (4), 775000, 189},
{1, {883200, HFPLL, 1, 46}, L2 (4), 790000, 233},
{1, {960000, HFPLL, 1, 50}, L2 (9), 800000, 256},
{1, {1036800, HFPLL, 1, 54}, L2 (10), 810000, 278},
{1, {1190400, HFPLL, 1, 62}, L2 (10), 830000, 324},
{1, {1267200, HFPLL, 1, 66}, L2 (13), 840000, 348},
{1, {1497600, HFPLL, 1, 78}, L2 (16), 870000, 421},
{1, {1574400, HFPLL, 1, 82}, L2 (17), 880000, 446},
{1, {1728000, HFPLL, 1, 90}, L2 (18), 910000, 501},
{1, {1958400, HFPLL, 1, 102}, L2 (19), 955000, 588},
{1, {2265600, HFPLL, 1, 118}, L2 (19), 1015000, 716},
{1, {2457600, HFPLL, 1, 128}, L2 (19), 1050000, 802},
{0, 0}} {
};

Revision 8974AC PVS 15
static struct acpu_level pro_rev1_2p5g_pvs15 [] __ initdata = {
{1, {300000, PLL_0, 0, 0}, L2 (0), 750000, 76},
{1, {422400, HFPLL, 2, 44}, L2 (2), 750000, 106},
{1, {652800, HFPLL, 1, 34}, L2 (3), 750000, 168},
{1, {729600, HFPLL, 1, 38}, L2 (4), 750000, 189},
{1, {883200, HFPLL, 1, 46}, L2 (4), 750000, 233},
{1, {960000, HFPLL, 1, 50}, L2 (9), 750000, 256},
{1, {1036800, HFPLL, 1, 54}, L2 (10), 750000, 278},
{1, {1190400, HFPLL, 1, 62}, L2 (10), 750000, 324},
{1, {1267200, HFPLL, 1, 66}, L2 (13), 760000, 348},
{1, {1497600, HFPLL, 1, 78}, L2 (16), 790000, 421},
{1, {1574400, HFPLL, 1, 82}, L2 (17), 800000, 446},
{1, {1728000, HFPLL, 1, 90}, L2 (18), 830000, 501},
{1, {1958400, HFPLL, 1, 102}, L2 (19), 875000, 588},
{1, {2265600, HFPLL, 1, 118}, L2 (19), 935000, 716},
{1, {2457600, HFPLL, 1, 128}, L2 (19), 970000, 802},
{0, 0}} {
};

Sources:

1) http://www.anandtech.com/show/7846/...-snapdragon-800-and-801-clearing-up-confusion

2) http://tieba.baidu.com/p/2870895640 (Use Google Translate)

===========================================

Hello.

Undervolting your CPU has always been a daunting task - there's so many CPU steps, if you pick say -100mV to all frequency steps and you get a reboot, how do you work out which step (or steps!) is causing the problem? If you undervolt -25mV on one frequency, then wait a couple of days to make sure it's stable, then reduce the same frequency by another 25mV.. you'll still be undervolting a year later.

This thread is my tutorial on how to do a best effort at quickly and safely undervolting your phone CPU.

First of all - is undervolting your CPU worth it?

Initially it was thought not to make much difference, but after some serious testing (thanks AndreiLux), "we" decided that it was a good idea. I also did my own basic testing, and it looks like it's worth it.

What are the advantages of undervolting?

Better battery life

Cooler phone, especially useful if you overclock your CPU

What are the disadvantages of undervolting?

That's the great thing! Really the worst that can happen is your phone freezes or reboots. The steps below should eliminate all of that. Once you have undervolted your CPU to just above its freeze/crash levels, there are no disadvantages!

Note: I have had some minor data loss (eg an app forgets a setting) after an undervolting related crash, but it was rare and I believe has to do with the Perseus kernel "Enable dynamic FSync" setting. I note below how to mitigate against this.

What do you need?

A rooted phone, and a kernel that supports undervolting. Perseus and Siyah will work, but any kernel should be fine that supports SetCPU's undervolting schema

SetCPU or you can use a combination of STweaks and Stability Test (use STweaks for setting the frequency and voltage, and use Stability Test's Classic Test for the stress test)

A paper and a pen - I used Sticky Notes as I was at a computer for most of the process

Some patience

Let’s begin.

Open SetCPU. You’ll be greeted by the Main screen which has the min/max CPU frequencies, the governor options, and the IO scheduler options. Reduce the max CPU frequency to the lowest step. On the SGS3 this will be reducing 1400MHz down to 200MHz, so you now have both the min and the max set at 200MHz. The phone will get pretty slow at this point. Ensure the Set on Boot option is unticked

Set the governor to Performance (note: you have to make sure all cores of your CPU are being used. In a complex kernel such as Perseus, you'll have to go into STweaks and set the CPU hotplug lock to 4 so all 4 cores are used. Also note there appears to be a bug in Perseus at the time of writing: you have to set the hotplug lock BEFORE you change the governor to performance)

Move to the Voltages screen

Ensure the Set on Boot option is unticked, and scroll down to the lowest setting, and change it to something low, like 700mV, and then apply it (click the third icon from the right at the top of the screen, a rectangle with a tick on it) . This first setting is always a bit of guess and check, and to be honest you’re hoping for the phone to freeze or crash on this first one. Has it frozen? If so move on to the next step. If not, reduce it by a further 25mV and apply again, repeat until your phone freezes or reboots.

So, you have undervolted too far. Reboot the phone, and perform steps 1-3 again. At step 4, use the voltage that crashed your phone +25mV (eg if it crashed at 675mV, this time set it to 700mV). Now, you have a very slow phone running a low voltage that doesn’t immediately crash it. Move on to the next step

An easy crash test I found was simply allowing the phone to go into deep sleep, and waking it up again. To do this, unplug your phone if it’s charging, and turn the screen off. At this point I usually wrote the time down on my piece of paper, as well as what frequency and voltage I was testing as I’m prone to forget these things. Wait 5 minutes with the screen off (and make sure no notifications have come in while the screen is off – this wakes the phone up and you’ll have to wait another 5 mins), then turn the phone on. You’ll know it’s gone into deep sleep as there’ll be a slight delay before the screen turns on as compared to no delay when turning it off and immediately back on again. If the phone doesn’t turn on, go to step 5. If your phone comes out of deep sleep OK, move on to the next step.

Now, we stress test. In SetCPU scroll over to the Info screen, and scroll down to the Stress Test option. Start it, and note down the time on your paper/Sticky Notes. Your CPU will now run as hard as it can at the current frequency. Let it run for 15-20 minutes. At the lowest frequency it will be pretty laggy and slow, if you think it has frozen always give it 30 seconds to see if it picks up again. If it gets stuck for over a minute, you probably have a crash. Go to step 5. If after 15-20 minutes it’s still running, you have found your first stable(ish) voltage for that frequency! At this point I saved the voltages in SetCPU by pressing the diskette icon. To ensure the changes are written to disk turn the phone screen off for 5 seconds then turn it back on again.

We are now ready for the next frequency. There’s pretty much no way a frequency will run stably on a lower voltage than a frequency below it, so our first voltage for the next frequency up should be the same stable voltage we found for the previous frequency. For example if we found a stable voltage of 725mV on the 200MHz frequency, our first test voltage for 300MHz should be 725mV. Write this down with the frequency on your paper. In the Main screen of SetCPU, change the max frequency to the next step up. Then, in the Voltages screen, adjust the voltage to be the same as the lower frequency, as discussed above. If your phone immediately freezes or reboots, move to the next step. If not, go to step 10.

So, you have undervolted too far, again! Reboot your phone, open up SetCPU, and in the main screen ensure the max frequency is set to the frequency we’re testing. Give the sliding bar things a jiggle to apply it. Ensure the governor is set to Performance by pressing it on the lower left part of the screen. Move to the Voltages screen, and you’ll either see your previous “saved” voltage values ready to be applied in dark grey under the “current” voltage settings, or you’ll have lost your “saved” voltage settings. If you have lost them, never fear; just restore the latest settings by clicking the first from the right icon at the top (a square with an arrow pointing outwards). Adjust the frequency we’re testing’s value to 25mV more than the value you last used when it crashed, and apply it. If it crashes immediately, repeat this step. If not, move on

We now start the two tests in steps 6 and 7 again, but this time if your phone crashes or freezes, go to step 9. If it completes the deep sleep and stress test tests, go to step 8 for the next frequency test.

Sorry for the complexity here, but it was the easiest way I could write it without repeating myself too much. The TL;DR version goes like this:

Pick the lowest untested frequency, set the max frequency to this and the governor to Performance, and find the lowest voltage that doesn’t immediately crash the phone

Put the phone into deep sleep, and see if it crashes. If it does, increase the voltage for the current frequency we’re testing by 25mV and test again. If not, move on

Run a stress test on the phone for 15-20 minutes. If it crashes, raise the voltage by 25mV and go to step B. If it doesn’t crash the current frequency is now tested. Go to step A

You now have a set of frequencies that shouldn’t immediately crash the phone. Set the min and the max frequencies back to normal, and set the governor back to your usual governor. At this point for me I was able to use the phone for about 2 hours before I had my first crash. How running a stress test on each frequency for 20 minutes didn’t pick up this crash situation I’m not sure, but it didn't.

After screwing around for a while I found the easiest solution was to just raise each frequency step by 25mV and then continue every day usage. That was enough to stabilise my phone. If it still crashes for you, keep raising all the values by 25mV until it settles down. After a day or two of no crashes you can start slowly one by one reducing each step by 25mV again to find out which step caused the crash.

After that, you should be done!

===========================================

Please hit "thanks button", if the above information is somehow helpful to you

Thank you all :)