[Module] X8Overclock | v004 - Multiple freq | X8 | X10 mini | X10 mini pro | 11-04-11

Search This thread

doixanh

Inactive Recognized Developer
Jan 23, 2011
1,263
5,314
Rom cookers: if you include this module in your ROM, please make a link to this post in your release post, so your users can know how to work with it and update the module themselves

Intro: (dev post)
Since the X10 kernel is working, we might have a hope that someday we will have our custom kernels. If we can have custom kernels, we can do the overclocking easily.

Until that day, we will still have to overclock with modules. To make overclocking works with our current kernel, as far as I can see, we need to do the following things:
1. Patch cpufreq data to change maximum reported freq (these value will be read by Android for further controls). cpufreq will then call the low-level acpuclock functions to change real cpu freq.
2. Patch acpuclock data + code to change real cpu freq.

Right now I'm working a proof-of-concept module, with finished 1 and half of 2. I will need to patch acpuclock code in the running kernel to make the frequency applicable.

That means, right now, Android reported that I have a 800MHz MSM7227, although it's running at 600MHz, and cpufreq's governor accepts to change to the maximum 800MHz (it's 600MHz for real). We will need to patch acpuclock code to change PLL and apply the correct divisor.


Source on github : https://github.com/doixanh/X8Features

Release history
  • April 11. v004. Default to 691MHz. Multiple frequencies are available for SetCPU: from 614MHz to 826MHz. You can now change frequencies with SetCPU - much like with custom kernels! You can even SetCPU freq at boot.
  • April 07. v003. Compatible with SetCPU. Easier for code maintenance.
  • April 06. v002 for mini pro. x8oc module for x10 mini pro released! Be warned: I didn't have your x10mini pro hardware so I didn't test it throughoutly.
  • April 06. v002 for mini. x8oc module for x10 mini released! Be warned: I didn't have your x10mini hardware so I didn't test it throughoutly. 710MHz was reported not too stable. A lower freq is more stable.
  • April 06. v002. Experimental! It maybe very unstable! Undervoltage for all frequencies except the max freq (Reduced voltages for 128MHz, 245MHz, 320MHz, 480MHz). This can potentially save battery. I need test results for saving battery from you guys :D
  • April 05. v001. Default to 710MHz.

Requirements:
- Rooted
- Baseband x15
- xRecovery (for automatic installtation)
- Dare!


Installation:
a. Manual installation : it will be better if you can do this way.
- Download appropriate x8oc-vXXX.zip (for X8), or x8oc-vXXX-x10m.zip (for X10 mini), or x8oc-vXXX-x10mp.zip (for x10 mini pro) below, unzip
- Remount /system as rw
- Push x8oc.ko in to /system/lib/modules
- Edit /system/etc/hw_config.sh, add one line at the beginning
Code:
insmod /system/lib/modules/x8oc.ko # x8 overclock
For people who want to set specific freq at boot, write the following instead of the code above:
Code:
# x8 overclock
insmod /system/lib/modules/x8oc.ko 
sleep 2
echo xAB > /proc/x8oc
Where AB is your desired code for that frequency. Test the frequency carefully before applying it at boot!
(you can edit hw_config.sh by pulling it to your PC, edit, and push it back)
- Reboot your phone

b. Automatic installation : much like x8gesture, I will have to prepare update.zip for each ROM. I'm pretty busy now, so be patient.

General instruction
- When you install x8oc, SetCPU will not recognized the new max frequency. Don't touch the slide and/or change the governor. If you do that, the new frequency will be lost. You will have to reboot your phone to get the new freq.
- For geeks only: it is possible to change maximum frequency after you install x8oc. With following command, you can replace AB to other values to change max freq:
Code:
echo xAB > /proc/x8oc
20 to change to 614MHz
21 to change to 634MHz
22 to change to 653MHz
23 to change to 672MHz
24 to change to 691MHz
25 to change to 710MHz
26 to change to 730MHz
27 to change to 749MHz

For example, set to 749MHz:
Code:
echo x27 > /proc/x8oc
This feature still works with v004

Somebody asked about the meaning of AB above. If you look at the source you will understand :D
In short :
- AB is stored in hexadecimal
- Max frequency = AB (in decimal) * 19.2MHz
Example:
AB = 27 means AB = 0x27 = 39 (in decimal)
Real frequency = 39*19.2 = 748.8 MHz
You can put 28, 29, for even higher frequency... but I don't recommend to do that. It was unstable for me.

x10 mini / x10 mini pro users:
Support for x10 mini / x10 mini pro has been added since 06-04-11. However, I don't have your hardware so you must test this module before install it:
- Push x8oc.ko to /system/lib/modules
- Run the following command
Code:
insmod /system/lib/modules/x8oc.ko
If the phone is still working, no crash, no black screen, then it works.
Until you're sure that it works with your hardware, don't install it to hw_config.sh or you will get boot loops and may severely damage your hardware

Disclaimer
This module is dangerous! It may cause severe damage to your hardware. I'm not responsible if this module kills your lovely phone. Use it at your own risk!

Donations are welcome :D


PLEASE DON'T SPAM IN THIS THREAD WITH UNCONTRIBUTED POSTS.
 

Attachments

  • x8oc-v003.zip
    4.2 KB · Views: 2,943
  • x8oc-v003-X10m.zip
    4.2 KB · Views: 416
  • x8oc-v003-X10mp.zip
    4.2 KB · Views: 1,059
  • x8oc-v004.zip
    4.7 KB · Views: 38,882
  • x8oc-v004-x10m.zip
    4.7 KB · Views: 1,364
  • x8oc-v004-x10mp.zip
    4.7 KB · Views: 3,467
Last edited:

doixanh

Inactive Recognized Developer
Jan 23, 2011
1,263
5,314
Holy sh*t. They included bunches of controllers inside this MSM 7227
Max. 800MHz Qualcomm MSM7227 Turbo, Embedded 320MHz DSP (GSM, GPRS/EGPRS Multislot Class 12, EDGE, UMTS Release 6, 7.2 Mbps HSDPA, HSUPA 5.76 Mbps, MBMS baseband), 400MHz modem processor, Adreno 200, OpenGL ES 2.0, OpenGL ES 1.1, OpenVG 1.1, EGL 1.3, Direct3D Mobile, SVGT 1.2, DirectDraw,
 

Compwxr

Senior Member
Jan 13, 2011
128
36
Guimarães
Is there anyway to enable that turbo mode by moding? It must be locked somewhere, the safe clock is 600mhz, but it might run 800mhz or more stable too, might be battery draining issue, or overvoltage necessity but with scaling that should not be a real issue, if only used to extreme situations, and, for a bit of time.
 

racht

Inactive Recognized Developer
Dec 18, 2010
333
875
This is a great project and it looks very promissing.
ZTE Blade has same cpu and they had problems overclocking just the main core, but in the end they solved it, I guess you could take a look at their solution as well.

And thanks again for the dualtouch module.
 

doixanh

Inactive Recognized Developer
Jan 23, 2011
1,263
5,314
I read many overclocked kernel sources for MSM7227 in difference devices. What they did was to modify acpuclock.c :
1. add new freqs to freq_table
2. add new freqs to clkctl_acpu_speed arrays
3. modify acpuclk_set_div to set PLL for overclocked freqs

Because acpuclock is initialized very early during boot process, cpufreq (initialized much later) will read those available freqs from acpuclock to apply to its governors.

In our case, because we cannot modify acpuclock in the kernel before it's initialized, our module will be loaded much later than both acpuclock and cpufreq. Therefore, my approach is to modify (inline patch) both acpuclock and cpufreq in memory, while the kernel is running.

So far, as mentioned in OP, I modified cpufreq and acpuclock data (as in 1. and 2.), so that Android thinks that max freq is set at 800MHz. We will have to do some inline memory patches to acpuclock function to change PLL for freqs more than 600MHz during runtime. More precisely, we need to patch acpuclk_set_div function.

I did a quick study about ARM instruction set, looked for branch (and branch with links) instructions. I managed to redirect calls to acpuclk_set_div to my own function in module, so that acpuclock_set_rate calls to my function, instead of the original one. However, it seems that the param received by my function is always NULL.

Looking for reasons and solutions. Any suggestions?

@racht: no, we thank you for your hard work in your Hackdroid ROMs. :D
 
  • Like
Reactions: Godra and djtimon89

doixanh

Inactive Recognized Developer
Jan 23, 2011
1,263
5,314
It seems that I made a mistake. acpuclk_set_div was not separated as a function. Instead, the compiler included it in the caller function (acpuclk_set_rate). This will be a big big big problem for us to hijack the call.....
 
  • Like
Reactions: Godra

owain94

Inactive Recognized Developer
Sep 21, 2010
3,538
6,041
29
The Hague
Can u share your sources?
Maby i can help you :)

Sent from my U20i using XDA Premium App
 
Last edited:

andrej456

Senior Member
Feb 13, 2011
71
92
as an example of omap3
http://code.google.com/p/milestone-overclock/

This project consists of a kernel module for OMAP3 phones with Android to unlock any processor frequency/voltage combination and a companion graphical app to ease the configuration. The phone must be rooted so that the kernel module can be loaded.

The module has an interface in /proc/overclock/* that allows enabling and disabling of overclock in runtime without rebooting. No flashing of custom roms or kernels is needed, since that is not even possible with the Milestone, Droid X and others.
 

XperianPro

Senior Member
Nov 19, 2010
2,253
868
Mars
as an example of omap3
http://code.google.com/p/milestone-overclock/

This project consists of a kernel module for OMAP3 phones with Android to unlock any processor frequency/voltage combination and a companion graphical app to ease the configuration. The phone must be rooted so that the kernel module can be loaded.

The module has an interface in /proc/overclock/* that allows enabling and disabling of overclock in runtime without rebooting. No flashing of custom roms or kernels is needed, since that is not even possible with the Milestone, Droid X and others.

Thats good idea but edit is needed because X8 does not have 1,2 processor :rolleyes:

EDIT: With 800 processor thats so close x10 1000 processor,cant imagine how fast x8 will be :)
 

andrej456

Senior Member
Feb 13, 2011
71
92
Thats good idea but edit is needed because X8 does not have 1,2 processor :rolleyes:

EDIT: With 800 processor thats so close x10 1000 processor,cant imagine how fast x8 will be :)
to not fit in the x8, but the wiki to be useful
if we take this as an example you can write a module

sorry for my english
 
Last edited:

doixanh

Inactive Recognized Developer
Jan 23, 2011
1,263
5,314
It seems that my approach is like milestone-overclock. Their CPU is different, but we can know that we're having a good direction.
 
  • Like
Reactions: Disastery

doixanh

Inactive Recognized Developer
Jan 23, 2011
1,263
5,314
Good news: I managed to hijack calls to acpuclk_set_rate (the function contains acpuclk_set_div). This way, we can write our own set_rate and set_div function.

Destination is not too far away :D
 
  • Like
Reactions: djtimon89

doixanh

Inactive Recognized Developer
Jan 23, 2011
1,263
5,314
YES, YES and YES! It's running at 684MHz! Will upload a screenshot soon!

This below screenshot is taken at 710MHz with only CPU test

It seems that our CPU is not stable above 748MHz.
 

Attachments

  • 710mhz-3548cpu.png
    710mhz-3548cpu.png
    21.9 KB · Views: 1,267
Last edited:

Top Liked Posts

  • There are no posts matching your filters.
  • 107
    Rom cookers: if you include this module in your ROM, please make a link to this post in your release post, so your users can know how to work with it and update the module themselves

    Intro: (dev post)
    Since the X10 kernel is working, we might have a hope that someday we will have our custom kernels. If we can have custom kernels, we can do the overclocking easily.

    Until that day, we will still have to overclock with modules. To make overclocking works with our current kernel, as far as I can see, we need to do the following things:
    1. Patch cpufreq data to change maximum reported freq (these value will be read by Android for further controls). cpufreq will then call the low-level acpuclock functions to change real cpu freq.
    2. Patch acpuclock data + code to change real cpu freq.

    Right now I'm working a proof-of-concept module, with finished 1 and half of 2. I will need to patch acpuclock code in the running kernel to make the frequency applicable.

    That means, right now, Android reported that I have a 800MHz MSM7227, although it's running at 600MHz, and cpufreq's governor accepts to change to the maximum 800MHz (it's 600MHz for real). We will need to patch acpuclock code to change PLL and apply the correct divisor.


    Source on github : https://github.com/doixanh/X8Features

    Release history
    • April 11. v004. Default to 691MHz. Multiple frequencies are available for SetCPU: from 614MHz to 826MHz. You can now change frequencies with SetCPU - much like with custom kernels! You can even SetCPU freq at boot.
    • April 07. v003. Compatible with SetCPU. Easier for code maintenance.
    • April 06. v002 for mini pro. x8oc module for x10 mini pro released! Be warned: I didn't have your x10mini pro hardware so I didn't test it throughoutly.
    • April 06. v002 for mini. x8oc module for x10 mini released! Be warned: I didn't have your x10mini hardware so I didn't test it throughoutly. 710MHz was reported not too stable. A lower freq is more stable.
    • April 06. v002. Experimental! It maybe very unstable! Undervoltage for all frequencies except the max freq (Reduced voltages for 128MHz, 245MHz, 320MHz, 480MHz). This can potentially save battery. I need test results for saving battery from you guys :D
    • April 05. v001. Default to 710MHz.

    Requirements:
    - Rooted
    - Baseband x15
    - xRecovery (for automatic installtation)
    - Dare!


    Installation:
    a. Manual installation : it will be better if you can do this way.
    - Download appropriate x8oc-vXXX.zip (for X8), or x8oc-vXXX-x10m.zip (for X10 mini), or x8oc-vXXX-x10mp.zip (for x10 mini pro) below, unzip
    - Remount /system as rw
    - Push x8oc.ko in to /system/lib/modules
    - Edit /system/etc/hw_config.sh, add one line at the beginning
    Code:
    insmod /system/lib/modules/x8oc.ko # x8 overclock
    For people who want to set specific freq at boot, write the following instead of the code above:
    Code:
    # x8 overclock
    insmod /system/lib/modules/x8oc.ko 
    sleep 2
    echo xAB > /proc/x8oc
    Where AB is your desired code for that frequency. Test the frequency carefully before applying it at boot!
    (you can edit hw_config.sh by pulling it to your PC, edit, and push it back)
    - Reboot your phone

    b. Automatic installation : much like x8gesture, I will have to prepare update.zip for each ROM. I'm pretty busy now, so be patient.

    General instruction
    - When you install x8oc, SetCPU will not recognized the new max frequency. Don't touch the slide and/or change the governor. If you do that, the new frequency will be lost. You will have to reboot your phone to get the new freq.
    - For geeks only: it is possible to change maximum frequency after you install x8oc. With following command, you can replace AB to other values to change max freq:
    Code:
    echo xAB > /proc/x8oc
    20 to change to 614MHz
    21 to change to 634MHz
    22 to change to 653MHz
    23 to change to 672MHz
    24 to change to 691MHz
    25 to change to 710MHz
    26 to change to 730MHz
    27 to change to 749MHz

    For example, set to 749MHz:
    Code:
    echo x27 > /proc/x8oc
    This feature still works with v004

    Somebody asked about the meaning of AB above. If you look at the source you will understand :D
    In short :
    - AB is stored in hexadecimal
    - Max frequency = AB (in decimal) * 19.2MHz
    Example:
    AB = 27 means AB = 0x27 = 39 (in decimal)
    Real frequency = 39*19.2 = 748.8 MHz
    You can put 28, 29, for even higher frequency... but I don't recommend to do that. It was unstable for me.

    x10 mini / x10 mini pro users:
    Support for x10 mini / x10 mini pro has been added since 06-04-11. However, I don't have your hardware so you must test this module before install it:
    - Push x8oc.ko to /system/lib/modules
    - Run the following command
    Code:
    insmod /system/lib/modules/x8oc.ko
    If the phone is still working, no crash, no black screen, then it works.
    Until you're sure that it works with your hardware, don't install it to hw_config.sh or you will get boot loops and may severely damage your hardware

    Disclaimer
    This module is dangerous! It may cause severe damage to your hardware. I'm not responsible if this module kills your lovely phone. Use it at your own risk!

    Donations are welcome :D


    PLEASE DON'T SPAM IN THIS THREAD WITH UNCONTRIBUTED POSTS.
    9
    YES, YES and YES! It's running at 684MHz! Will upload a screenshot soon!

    This below screenshot is taken at 710MHz with only CPU test

    It seems that our CPU is not stable above 748MHz.
    4
    I was too lazy to build a separated module for OCing :D Everything is a mess inside my current x8gesture module :D

    I'll try to do something more and then separate OC into a new module.
    4
    I get a 3758 CPU score at 748MHz. It seems 748MHz is the max freq for our MSM7227 hardware.

    /edit : and even 3767 CPU score. :D
    4
    Holy sh*t. They included bunches of controllers inside this MSM 7227
    Max. 800MHz Qualcomm MSM7227 Turbo, Embedded 320MHz DSP (GSM, GPRS/EGPRS Multislot Class 12, EDGE, UMTS Release 6, 7.2 Mbps HSDPA, HSUPA 5.76 Mbps, MBMS baseband), 400MHz modem processor, Adreno 200, OpenGL ES 2.0, OpenGL ES 1.1, OpenVG 1.1, EGL 1.3, Direct3D Mobile, SVGT 1.2, DirectDraw,