If you've been following the different hacks/fixes over in the Dev section you'll know there's quite a bit of debate as to the validity of the benchmark results obtained, specifically in Quadrant.
To lay it out a little I've posted results for 3 different benchmark programs in 3 different situations.
Below are my results for the stock kernel + app lag fix, AJerman's Overclock Kernel, and Nukacola's Ext3/sdcard fix.
Stock + App lag fix
Quadrant 919
Linpack 8.092 MFLOPS
Benchmark
Graphic
Total 31.94
Draw Opacity 9.62
Draw Transparent 9.91
CPU
Total 767.66
MWIPS DP 56.27
MWIPS SP 61.01
MFLOPS DP 4.94
MFLOPS SP 9.27
VAX MIPS DP 41.35
VAX MIPS SP 40.45
Memory
Total 644.70
Copy Memory 585.82
Filesystem
total 182.13
Creating Files 3.64
Deleting Files 2.70
Write 1M 9.27
Read 1M 357.14
W/ AJerman's kernel, OC'd to 1200.
Quadrant 1112
Linpack 10.62
Benchmark
Graphic
Total 38.25
Draw Opacity 11.43
Draw Transparent 11.96
CPU
Total 926.57
MWIPS DP 67.39
MWIPS SP 73.75
MFLOPS DP 5.80
MFLOPS SP 11.01
VAX MIPS DP 50.04
VAX MIPS SP 49.47
Memory
Total 846.54
Copy Memory 769.23
Filesystem
total 280.99
Creating Files 3.29
Deleting Files 2.58
Write 1M 9.76
Read 1M 555.56
And finally, OC'd with Nuka's fix.
Quadrant 1112
Linpack 10.10
Benchmark
Graphic
Total 38.39
Draw Opacity 11.58
Draw Transparent 11.91
CPU
Total 912.19
MWIPS DP 68.03
MWIPS SP 71.07
MFLOPS DP 9.10
MFLOPS SP 11.29
VAX MIPS DP 47.68
VAX MIPS SP 46.28
Memory
Total 807.41
Copy Memory 733.68
Filesystem
total 280.93
Creating Files 3.41
Deleting Files 2.61
Write 1M 9.59
Read 1M 555.56
Please understand that these are my results, and they're for information only. My intent is to show those thinking of doing any of these the benefits of each
This kernel module allows you to run any official Froyo kernel image from HTC with reduced CPU voltages at each frequency. Reducing voltage decreases the power consumed by the CPU (dissipated as heat).
INSTALL:
You need root or an unrestricted recovery image (e.g ClockworkMod) to install this. The default settings decrease voltage by 75-100 mV which seems stable on my device. Just download the attached file and select it from recovery or ROM Manager.
I've built "update.zip" files for the Desire with Linux kernel versions 2.6.32.15-gf9c0527, 2.6.32.15-gd96f2c0, and 2.6.32.15-g6a358a9. You can check your kernel version in Settings->About phone->Software information.
Other HTC devices running Froyo are supported. If you have a different device, please give me the full version number and I can add an update.zip for it.
Undervolt driver for the EVO 4G
Added undervolt-2.6.32.15-gd96f2c0-20100907.zip.
Added undervolt-2.6.32.15-g6a358a9-20100907.zip.
Added undervolt-2.6.32.15-gf5a401c-20100907.zip.
USAGE:
Read the instructions above first. If you are happy with the default settings, you don't need to read this unless you're curious
To load the driver, use an init script like this one (included):
Code:
#!/system/bin/sh
#
# Load undervolt for htc-kernel
addr=`awk '$3 == "acpuclk_set_rate" { print "0x"$1; }' /proc/kallsyms`
if [ -n "$addr" ]; then
insmod /system/lib/modules/undervolt.ko "acpuclk_set_rate_addr=$addr"
if [ $? -eq 0 ]; then
echo '-75' > /proc/undervolt
echo '1225 1125' > /proc/undervolt
echo '1250 1150' > /proc/undervolt
echo '1275 1175' > /proc/undervolt
echo '1300 1200' > /proc/undervolt
echo '1' > /proc/undervolt
echo "+++ undervolt enabled"
exit 0
fi
fi
echo "+++ undervolt could not be enabled
The driver adds a "/proc/undervolt" knob to make voltage changes, reading from it prints the current default and adjusted voltages in mV for every CPU frequency, e.g.:
Code:
cat /proc/undervolt
1050 975 19200
1050 975 128000
...
1300 1200 960000
1300 1200 998400
Write a space-separated pair of default and adjusted voltages in mV to change the values in the table, e.g. to undervolt stock freqs using 1500 mV to 1000mV):
Code:
echo '1050 1000' > /proc/undervolt
.
Write '+' or '-' followed by a single number to adjust *all* voltages by that amount in mV:
Code:
echo '-25' > /proc/undervolt
The changes are NOT applied until you write the number 1:
Code:
echo '1' > /proc/undervolt
Writing the number 0 reverts all voltages to the default. This also happens when you unload the module with rmmod.
BACKGROUND:
I figured it would be possible to locate and modify acpu_freq_tbl on the stock HTC kernel with a LKM (since /dev/kmem isn't available), and I was right, although it involved peeking at the ARM opcodes. The method should also work for other HTC kernel images on recent devices (anything with a "Scorpion" CPU): Nexus One, Droid Incredible, EVO 4G. Overclocking will be possible with a bit more work.
This also disables the voltage constraints set by the board-specific configuration (e.g. in board-bravo.c or board-incrediblec.c). This was done by y patching the regulator_set_voltage function to simply ignore the constraints. The remaining limits are imposed by the driver for the regulator IC. The TPS65023 driver defines these for VDCDC1: min_uV = 800000, max_uV = 1600000.
KNOWN BUGS:
There is a vdd_undervolt parameter to set the default undervolt, but it is ignored (by insmod?), use +/- instead.
Very nice work!
That is, in fact, fantastic work
Of course it will be obsoleted when HTC decides to release their source but you know that
I assume you verified these actually work?
ok...this is nice i think!
i don't know much about kernel so...can i use the update.zip to install this kernel in my actual sense rom ?
just, install this and that's it? it starts working undervolted?
Did you account for the fact the stock kernel has board files to constrain the minimum
and maximum voltage?
eg, board-bravo.c:
.min_uV = 1000000
.max_uV = 1300000
The same goes for overclocking, the upper limit for the clock is set, hardcoded,
so you would need to change that as well.
sounds interesting!! I`ll try it very soon.
ieftm said:
Did you account for the fact the stock kernel has board files to constrain the minimum
and maximum voltage?
eg, board-bravo.c:
.min_uV = 1000000
.max_uV = 1300000
The same goes for overclocking, the upper limit for the clock is set, hardcoded,
so you would need to change that as well.
Click to expand...
Click to collapse
Yikes, I didn't know about that, is that in bravo_fixup (which I hope is in the .init section like acpu_freq_tbl_fixup)? Is board-bravo.c in the incrediblec or vanilla Android kernel trees? I'm using the supersonic source atm.
Thanks!
-Albert
ieftm said:
That is, in fact, fantastic work
Of course it will be obsoleted when HTC decides to release their source but you know that
I assume you verified these actually work?
Click to expand...
Click to collapse
Thanks, I haven't hacked on the Linux kernel in ages and wasted a lot of time targeting acpu_freq_tbl_fixup originally (as you might have noticed in the comments).
The idea is that this should work with the stock kernel images of multiple devices without reflashing, and in future releases with only minor changes.
I didn't take a multimeter to the board, if that's what you mean... but acpu_freq_tbl is canonical list of voltages (unless something in board-bravo.c rewrites it after initialisation, which seems unlikely) and this is able to read and write to the table. The actual CPU frequencies are duplicated in another structure (which is why I haven't tried overclocking yet) but the voltages are read directly from the table and scaled to microvolts for the governor.
Thanks alot for your work. Does anybody have ' proof ' this script works on a Desire running standard HTC Froyo ?
There is no way to check is there, except having better battery life?
What kind of energy saving is possible with this method?
Thanks
Seems to work....but not below 1000mV, so like you say, isn't there ways to check it....
Ne0, you are on the Dutch television as we speak (the matrix revolutions)
At what mV is the desire standard doing ? Going to flash you 7.6 now
knights191 said:
Ne0, you are on the Dutch television as we speak (the matrix revolutions)
At what mV is the desire standard doing ? Going to flash you 7.6 now
Click to expand...
Click to collapse
haha
1300mV at max speed.
UPDATED 2010-09-07
This also disables the voltage constraints set by the board-specific configuration (e.g. in board-bravo.c or board-incrediblec.c). This was done by y patching the regulator_set_voltage function to simply ignore the constraints. The remaining limits are imposed by the driver for the regulator IC. The TPS65023 driver defines these for VDCDC1: min_uV = 800000, max_uV = 1600000. I'll probably work on overclocking next.
Thanks for the advice, folks. I've confirmed that the voltage changes are pushed to the regulator (the previous version had trouble applying table changes sometimes, but the regulator code would print a message when you exceeded the board configuration voltage constraints).
Are there other kernel versions or devices people want me to support? It's mostly a matter of changing the vermagic string in the file at this point.
thanks, installed on R8 Paul's (Modaco) ROM kernel 2.6.32.15-gf9c0527
it's working!
# uname -r
2.6.32.15-gf9c0527
# lsmod
tun 10734 0 - Live 0xbf049000
bcm4329 202947 0 - Live 0xbf015000
cpufreq_powersave 668 1 - Live 0xbf012000
cpufreq_interactive 2368 0 - Live 0xbf00c000
undervolt 2644 0 - Live 0xbf006000
perflock_disable 752 0 - Live 0xbf000000
# cat /proc/undervolt
1050 975 19200
1050 975 128000
1050 975 245000
1050 975 384000
1050 975 422400
1050 975 460800
1075 1000 499200
1100 1025 537600
1100 1025 576000
1125 1050 614400
1150 1075 652800
1175 1100 691200
1200 1125 729600
1200 1125 768000
1225 1125 806400
1250 1150 844800
1275 1175 883200
1300 1200 921600
1300 1200 960000
1300 1200 998400
# echo '-25' > /proc/undervolt
# echo '1' > /proc/undervolt
# cat /proc/undervolt
1050 925 19200
1050 925 128000
1050 925 245000
1050 925 384000
1050 925 422400
1050 925 460800
1075 950 499200
1100 975 537600
1100 975 576000
1125 1000 614400
1150 1025 652800
1175 1050 691200
1200 1075 729600
1200 1075 768000
1225 1075 806400
1250 1100 844800
1275 1125 883200
1300 1150 921600
1300 1150 960000
1300 1150 998400
# echo '-25' > /proc/undervolt
# cat /proc/undervolt
1050 900 19200
1050 900 128000
1050 900 245000
1050 900 384000
1050 900 422400
1050 900 460800
1075 925 499200
1100 950 537600
1100 950 576000
1125 975 614400
1150 1000 652800
1175 1025 691200
1200 1050 729600
1200 1050 768000
1225 1050 806400
1250 1075 844800
1275 1100 883200
1300 1125 921600
1300 1125 960000
1300 1125 998400
Click to expand...
Click to collapse
So how low can you go until you have problems? Is it safe to go bellow maxV=1000?
ANY value on ANY freq below 1000mV freezes device so, min value still being 1000mV
If you put any value below 1000 in init script, at my case, device freezes when load with -1.
iscaela said:
This driver allows you to run any stock Froyo HTC Linux kernel with lowered CPU voltages. It modifies the voltage table at runtime.
I've built update.zip files for the Desire 2.6.32.15-gf9c0527 and 2.6.32.15-gd96f2c0 that applies a 75-100 mV undervolt which seems stable for me. Just download and install the files in recovery.
Click to expand...
Click to collapse
What can we expect from that modification ?
A lower heat of the processor (not sure regarding the difference) and a longer battery life ?
If I read that correctly, looks as a very interesting stuff.
(might be a stupid question, if so apologize)
Thank you.
is it usable on cm 6.0 stable?
anybody tried that?
Confirmed, don't go with any kernel below 1000mV without freeze.
can anyone explain how to install and to enable it? just run the update.zip and that's it???
can you feel different battery usage?
Just looking for input on the fastest ROM out there. I've only tried one myself - MightyROM - and I love it, but I do get a frustrating amount of lag on the phone and tends to use alot of RAM.
What are your lightning fast fav's?
I really liked the bare naked ROM series but that was discontinued, hands down it was the fastest ROM i've ever tried. Right now i honestly cant find any noticable difference between most ROMS anymore in terms of speed. Although I havnt tried grooveROM, I just overclock all my ROMS now and any manila 2.5 ROM is almost always the same speed.
I have used alot of roms but so far the one I have kept the longest is the neodium rom. Get the one that says "Sept 15 Neo-CHT-2018 (SYS 21916)". Manila runs so smooth, it has CHT, & I have never had any lock ups. I haven't soft reset my phone in about 1 month (which is when I got the rom). That says it all to me.
Here is the link at PPCGeeks.
Thanks for the info. I think I'll give that other rom a try. I hadn't considered overclocking but I'll start a seach for that and see how thats done too. Thanks!
Loaded neodium rom last night and so far really like it. It really does seem faster! Have you tried the other versions of it that are available - Plutonium?
Mine is 21057 core WM 6.1 with Sense 2.1919,that is freaking fast enough,and always stay on around 50% RAM,that's why I don't like any WM 6.5 with Sense 2.5 till now
Please people. If you are gonna say that any rom is the "fastest", please post benchmarks to prove it.
Benchmarks from my latest rom:
Code:
Report
Spb Benchmark Indices
Spb Benchmark index 541.81 (iPAQ 3650 scored 1000)
CPU index 2397.32 (iPAQ 3650 scored 1000)
File system index 227.01 (iPAQ 3650 scored 1000)
Graphics index 1709.62 (iPAQ 3650 scored 1000)
ActiveSync index insufficient number of tests were done. (iPAQ 3650 scored 1000)
Platform index insufficient number of tests were done. (iPAQ 3650 scored 1000)
Main test was not done
Main test results
Test Time Speed % of iPAQ 3650* speed
Write 1 MB file 458 ms 2238 KB/sec 282%
Read 1 MB file 56.4 ms 17.7 MB/sec 97%
Copy 1 MB file 507 ms 2020 KB/sec 256%
Write 10 KB x 100 files 4197 ms 244 KB/sec 44%
Read 10 KB x 100 files 338 ms 2.96 MB/sec 47%
Copy 10 KB x 100 files 3998 ms 256 KB/sec 54%
Directory list of 2000 files 1024 ms 1.95 thousands of files/sec 2%
Internal database read 621 ms 1610 records/sec 382%
Graphics test: DDB BitBlt 11.4 ms 88 frames/sec 327%
Graphics test: DIB BitBlt 28.5 ms 35.1 frames/sec 260%
Graphics test: GAPI BitBlt 4.47 ms 223 frames/sec 104%
Compress 1 MB file using ZIP 2396 ms 423 KB/sec 399%
Decompress 1024x768 JPEG file 499 ms 564 KB/sec 177%
Arkaball frames per second 6.81 ms 147 frames/sec 136%
CPU test: Whetstones MFLOPS 2771 ms 0.134 Mop/sec 291%
CPU test: Whetstones MOPS 814 ms 77.4 Mop/sec 227%
CPU test: Whetstones MWIPS 5820 ms 8.59 Mop/sec 289%
Memory test: copy 1 MB using memcpy 6.82 ms 147 MB/sec 208%
MR.X ROM its super fast but you cant send picture mail
The Energy Titanium ROM is the fastest so far and the least number of problems! Very silky smooth.
Bought a Kocast m1050s off ebay.
After stock or custom rom, dont have a clue what ive done to it, but it now thinks its a GT-l9100 and runs rather slow, so does anyone know where I can find stock rom or a custom rom that will work with it?
Tasselhoff script as renamed the device.
Recovery or reset doesnt restore the original rom.
Had trouble installing busybox, it naffed up my storage settings and after poking about the net someone said try the above mentioned script to fix it.
BuildInfos
Android version : 4.0.3
Release Codename : REL
API LEVEL : 15
CPU ABI : armeabi-v7a
Manufacturer : unknown
Bootloader : unknown
CPU ABI2 : armeabi
Hardware : sun4i
Radio : unknown
Board : GT-I9100
Brand : samsung
Device : GT-I9100
Display : Teclast A10T - Samsung I9100 Market
Fingerprint : samsung/GT-I9100/GT-I9100:4.0.3/IML74K/20120306:eng/test-keys
Host : MrTasselhofCustom
ID : IML74K
Model : Teclast A10T
Product : GT-I9100
Tags : test-keys
Type : eng
User : MrTasselhof
CPU
Processor ARMv7 Processor rev 2 (v7l)
BogoMIPS 1001.88
Features swp half thumb fastmult vfp edsp neon vfpv3
CPU implementer 0x41
CPU architecture 7
CPU variant 0x3
CPU part 0xc08
CPU revision 2
Hardware sun4i
Revision 0000
Serial 05807381535548488071825316236748
Freqency range: 60.0 -> 1008.0MHz
Current Frequency: 1008.0MHz
Frequency Stats (time):
- 30.0 MHz 0.0% (0)
- 48.0 MHz 0.0% (0)
- 60.0 MHz 33.63% (35515)
- 72.0 MHz 1.52% (1607)
- 84.0 MHz 1.66% (1756)
- 96.0 MHz 1.82% (1921)
- 108.0 MHz 1.9% (2010)
- 120.0 MHz 1.91% (2014)
- 132.0 MHz 2.03% (2149)
- 144.0 MHz 2.47% (2610)
- 156.0 MHz 0.0% (0)
- 168.0 MHz 0.0% (0)
- 180.0 MHz 0.0% (0)
- 192.0 MHz 0.0% (0)
- 204.0 MHz 0.0% (0)
- 216.0 MHz 0.0% (0)
- 240.0 MHz 2.29% (2414)
- 264.0 MHz 0.0% (0)
- 288.0 MHz 0.0% (0)
- 300.0 MHz 0.0% (0)
- 336.0 MHz 2.29% (2414)
- 360.0 MHz 0.0% (0)
- 384.0 MHz 0.0% (0)
- 408.0 MHz 0.0% (0)
- 432.0 MHz 2.36% (2489)
- 480.0 MHz 0.0% (0)
- 528.0 MHz 2.68% (2831)
- 576.0 MHz 0.0% (0)
- 600.0 MHz 0.0% (0)
- 648.0 MHz 0.0% (0)
- 672.0 MHz 0.0% (0)
- 696.0 MHz 0.0% (0)
- 720.0 MHz 4.77% (5043)
- 744.0 MHz 0.0% (0)
- 768.0 MHz 0.0% (0)
- 816.0 MHz 0.0% (0)
- 864.0 MHz 0.0% (0)
- 912.0 MHz 0.0% (0)
- 960.0 MHz 0.0% (0)
- 1008.0 MHz 38.67% (40846)
- 1056.0 MHz 0.0% (0)
- 1104.0 MHz 0.0% (0)
- 1152.0 MHz 0.0% (0)
- 1200.0 MHz 0.0% (0)
- 1248.0 MHz 0.0% (0)
- 1296.0 MHz 0.0% (0)
- 1344.0 MHz 0.0% (0)
- 1392.0 MHz 0.0% (0)
- 1440.0 MHz 0.0% (0)
- 1488.0 MHz 0.0% (0)
There is a thread at Android Forums that has the firmware.
I can't post the link, but you should be able to find it if you google "MID_M1050s(chinese) bricked at android screen"
Hi there,
I'm kinda new to the kernel stuff. I've managed to add frequencies to the DVFS tables. I then build the new kernel, flashed it. All went well.
The problem is I can see the new frequencies and the file named : scaling_available frequencies and the cpuinfo_max_freq is set for the new frequencies.
When I try to apply one of those frequencies it cap to the "max stock" frequency. When I check the file Policy_max_freq it is my "Max Stock" frequency. I tired to edit that file doesn't work.
So is there something I did wrong, something I must also edit to enable the new frequencies to be used !?
Kobo arc 10HD with tegra T40S
Any idea !?
OK I've found that there was a module named cpu_tegra whic has a file named cpu_user_cap which was at 181500. I changed that value for 2014500 and then the policy_max changed for 2014500 but I can't still change the scaling_max_speed. Any idea lol !?
Hello, you might want to take a look at a certain github repository commits and observe as they overclock a tegra 4 (T40T variant) to about 2.55 GHz (not that I would suggest clocking to this frequency). Sadly I cannot post the github link because there is some restriction blocking me. You will need to search github for "kernel-roth" or something of that nature and observe the commits. I am too busy to check this out for you, and I hope this helps.
If you please, I would like you to report back if you are successful with the T40S variant of the tegra 4.
https:// github.com/coolbho3k/kernel-roth/commits/master
Overclocking from 1.8GHz and beyond
Hi, I happen to have the same device as you and have successfully clocked it up to 2GHz up from 1.8GHz. I had some time to observe what was going on in the code and it seems that your problem is that you are attempting to jump to a frequency that exceeds the base limits set on the cpu clocks (default is a 2GHz limit).
It also seems that you may not be adding the frequencies to the table correctly because you should have been able to at least reach 1.989 GHz if you tried to jump to 2014500 kHz with the 2GHz limit.
Notice on kernel boot you get the following output:
Code:
<6>[ 0.000000] Tegra11: CPU Speedo ID 1, Soc Speedo ID 0
<6>[ 0.000000] Tegra11: CPU Speedo Value 1760, Soc Speedo Value 1199
<6>[ 0.000000] Tegra Revision: A02 SKU: 0x5 CPU Process: 1 Core Process: 1
<6>[ 0.000000] tegra: PLLP fixed rate: 408000000
<6>[ 0.000000] Lowering cpu_lp maximum rate from 816000000 to 696000000
<6>[ 0.000000] Lowering sbus maximum rate from 384000000 to 336000000
<6>[ 0.000000] Lowering vi maximum rate from 425000000 to 408000000
<6>[ 0.000000] Lowering 2d maximum rate from 700000000 to 600000000
<6>[ 0.000000] Lowering 3d maximum rate from 700000000 to 600000000
<6>[ 0.000000] Lowering epp maximum rate from 700000000 to 600000000
<6>[ 0.000000] Lowering msenc maximum rate from 600000000 to 408000000
<6>[ 0.000000] Lowering se maximum rate from 600000000 to 408000000
<6>[ 0.000000] Lowering tsec maximum rate from 600000000 to 408000000
<6>[ 0.000000] Lowering vde maximum rate from 600000000 to 408000000
<6>[ 0.000000] Lowering host1x maximum rate from 384000000 to 336000000
<6>[ 0.000000] Lowering pll_c maximum rate from 1400000000 to 1066000000
<6>[ 0.000000] Lowering pll_c2 maximum rate from 1200000000 to 1066000000
<6>[ 0.000000] Lowering pll_c3 maximum rate from 1200000000 to 1066000000
<6>[ 0.000000] Lowering sdmmc1 maximum rate from 208000000 to 156000000
<6>[ 0.000000] Lowering sdmmc3 maximum rate from 208000000 to 156000000
<6>[ 0.000000] Lowering sdmmc4 maximum rate from 200000000 to 156000000
<6>[ 0.000000] Lowering xusb_falcon_src maximum rate from 350000000 to 336000000
<6>[ 0.000000] Lowering xusb_host_src maximum rate from 120000000 to 112000000
<6>[ 0.000000] Lowering xusb_dev_src maximum rate from 120000000 to 112000000
<6>[ 0.000000] Lowering cpu_g maximum rate from 2100000000 to 2014500000
Notice the "cpu_g maximum rate" from my kernel output, I have set it to 2.1GHz up from the default of 2GHz. This allows me to freely set the desired maximum rate of 2014500000, which it transitions to as it initializes. You should also notice I am using the default cpu and soc ids (CPU Speedo ID 1, Soc Speedo ID 0).
To sum this all up you need to edit these files;
Code:
edp.c
Raise edp limits for thermal control for the cpu and soc ids you are using.
Code:
tegra11_clocks.c
Raise the base maximum rate on the cpu_g clocks to access higher frequencies.
Code:
tegra11_dvfs.c
Add desired frequency steps to the dvfs tables under the desired cpu ids
Code:
tegra11_speedo.c
If you altered the default ids used for the cpu clocks you can alter them here or use the cpu ids of different tegra 4 variants (T40T, T40DC, T40X, etc)
So as you can see, the overclocking steps are quite straightforward. It is surprising how easy they have made it really! Also the command line program I used to see what the kernel is saying is called "dmesg". This allows you to see what is happening so you do not waste time debugging the wrong thing. I have posted pictures of confirmed overclocking along with the about device page confirming my device.