Solved: 900Mhz under Linux (yes, the REAL deal!)
#1
Posted 29 November 2007 - 11:11 PM
I have written a new kernel module, eee.ko, which uses some internal ACPI methods still present in the BIOS to change the PLL chip's N multiplier and M divider values. It exposes this through a file, /proc/eee/fsb, allowing the FSB to be easily changed at will.
Right now, I need some brave testers to try out this module. After all, just because it works for me doesn't mean it will work on all machines! At this stage the module is very highly experimental, and I wouldn't recommend it for general use yet.
I've created a project page at Google Code:
http://code.google.com/p/eeepc-linux/
The source to my module is available for download, as well as the datasheet for the ICS9LPRS426 PLL chip the eee uses. I *will not* be providing a pre-compiled module at this time -- if you're unable to compile your own kernel modules, I'd suggest that you wait until the code is a little bit more mature.
Once the core over/underclocking code has stabilized, I want to hook it up to the Linux kernel's cpufreq mechanism. This will allow the kernel to dynamically switch between 630Mhz and 900Mhz based on the CPU usage, and it will also let us use GNOME's cpufreq applet to show (and change) the frequency.
I'm also very interested in figuring out how the fan is controlled. I have reason to believe that we can override the BIOS's built-in temperature setpoints, and we might also be able to control the fan speed. There's also the issue of power consumption, which I think we can improve as well: for instance, the PLL chip in the eee supports 6 PCI clock outputs, which are all currently enabled. If it turns out that some of those outputs are not used, disabling them will reduce the PLL chip's power consumption...
Good luck! I'm looking forward to hearing feedback from everyone. :)
-Andrew
#3
Posted 29 November 2007 - 11:40 PM
#4
Posted 29 November 2007 - 11:49 PM
I would like to say few remarks, if you don't mind:
1. Without a compiled module, tons of people would not be able to test your module since most of them don't have the chain-tool (make, gcc, etc..) on their eee installed, nor do they know how to cross compile it on their machine and move it to the EEE.
2. I suggest that you add a parameter in the module (like risk=1) if the person tries to overclock more then 900Mhz, since this could do some damage (I haven't seen in the EEE XP part of this forum that someone damaged his machine after overclocking it to 900Mhz).
Thanks,
Hetz
#5
Posted 30 November 2007 - 12:12 AM
Quote
There's some more info and usage instructions in the eee.c file. Importantly, you probably want to go 70 -> 85 -> 100, instead of jumping directly.
#6
Posted 30 November 2007 - 12:16 AM
#7
Posted 30 November 2007 - 12:21 AM
#8
Posted 30 November 2007 - 12:45 AM
Quote
So I basically just used the code in FSBA() as an example of how to do it, and ended up calling ECXW(), RCLK(), WCKB(), and WCLK() directly.
#9
Posted 30 November 2007 - 12:49 AM
Quote
Thanks for the feedback, and I hope that you can get it working. If it still locks your machine, could you post the output of the command hexdump -C /proc/eee/pll?
#10
Posted 30 November 2007 - 01:36 AM
Quote
#11
Posted 30 November 2007 - 01:38 AM
Have you tried any underclocking with this method? I don't need extra speed right now but I'd love a low power mode for reading etc.. I think I'll hook my eee up to a PSU and ammeter tomorrow and see if reducing the speed significantly reduces current drain.
Any idea why the embedded controller needs to know the frequency? And any ideas of sensible values to try out for reduced speed?
#12
Posted 30 November 2007 - 02:47 AM
Quote
Have you tried any underclocking with this method? I don't need extra speed right now but I'd love a low power mode for reading etc.. I think I'll hook my eee up to a PSU and ammeter tomorrow and see if reducing the speed significantly reduces current drain.
Any idea why the embedded controller needs to know the frequency? And any ideas of sensible values to try out for reduced speed?
If you end up hooking your eee up to an ammeter, could you please also measure the power consumption in suspend-to-RAM mode?
The embedded controller is the really low-level brains of the eee, and it's running even when the main CPU is suspended or off. It handles the power button, the lid switch, the keyboard, the special Fn keys, the battery charging, and probably a bunch of other behind-the-scenes stuff. Importantly, it's in charge of the fan -- which might be the reason it'd want to know?
#13
Posted 30 November 2007 - 03:37 AM
bogomips info:
ftp://sunsite.unc.ed...bogo-1.2.tar.gz
(0401 bios)
/proc/eee> cat pll | hexdump
0000000 c365 ffff 00f7 0100 070f 18e0 1b46 0024
(running firefox + Xorg)
eeepc-server:/> echo 85 24 0 > /proc/eee/fsb
eeepc-server:/> /bogomips
Calibrating delay loop.. ok - 1480.00 BogoMips
eeepc-server:/> echo 100 24 0 > /proc/eee/fsb
eeepc-server:/> /bogomips
Calibrating delay loop.. ok - 1760.00 BogoMips
(kill Xorg, only ttylinux)
eeepc-server:/> /bogomips
Calibrating delay loop.. ok - 1804.00 BogoMips
(1804.0/2 = 902.0)
cat /proc/eee/pll | hexdump
eeepc-server:/> cat /proc/eee/pll | hexdump
0000000 c365 ffff 00f7 0100 070f 18e0 1b64 0024
Edited by fastmem, 30 November 2007 - 04:04 AM.
#14
Posted 30 November 2007 - 04:58 AM
#!/bin/sh
for i in `seq 70 100`
do
echo "going to fsb $i"
hexdump -C /proc/eee/pll > /fsb.$i
sync
echo $i 24 0 > /proc/eee/fsb
sleep 1
done
***** crash / reboot ****
cat /fsb.*
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 46 1b 24 00 |e...........F.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 46 1b 24 00 |e...........F.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 47 1b 24 00 |e...........G.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 48 1b 24 00 |e...........H.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 49 1b 24 00 |e...........I.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 4a 1b 24 00 |e...........J.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 4b 1b 24 00 |e...........K.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 4c 1b 24 00 |e...........L.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 4d 1b 24 00 |e...........M.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 4e 1b 24 00 |e...........N.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 4f 1b 24 00 |e...........O.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 50 1b 24 00 |e...........P.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 51 1b 24 00 |e...........Q.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 52 1b 24 00 |e...........R.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 53 1b 24 00 |e...........S.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 54 1b 24 00 |e...........T.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 55 1b 24 00 |e...........U.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 56 1b 24 00 |e...........V.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 57 1b 24 00 |e...........W.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 58 1b 24 00 |e...........X.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 59 1b 24 00 |e...........Y.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 5a 1b 24 00 |e...........Z.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 5b 1b 24 00 |e...........[.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 5c 1b 24 00 |e...........\.$.|
#15
Posted 30 November 2007 - 05:09 AM
Quote
#!/bin/sh
for i in `seq 70 100`
do
echo "going to fsb $i"
hexdump -C /proc/eee/pll > /fsb.$i
sync
echo $i 24 0 > /proc/eee/fsb
sleep 1
done
***** crash / reboot ****
cat /fsb.*
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 46 1b 24 00 |e...........F.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 46 1b 24 00 |e...........F.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 47 1b 24 00 |e...........G.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 48 1b 24 00 |e...........H.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 49 1b 24 00 |e...........I.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 4a 1b 24 00 |e...........J.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 4b 1b 24 00 |e...........K.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 4c 1b 24 00 |e...........L.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 4d 1b 24 00 |e...........M.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 4e 1b 24 00 |e...........N.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 4f 1b 24 00 |e...........O.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 50 1b 24 00 |e...........P.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 51 1b 24 00 |e...........Q.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 52 1b 24 00 |e...........R.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 53 1b 24 00 |e...........S.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 54 1b 24 00 |e...........T.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 55 1b 24 00 |e...........U.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 56 1b 24 00 |e...........V.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 57 1b 24 00 |e...........W.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 58 1b 24 00 |e...........X.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 59 1b 24 00 |e...........Y.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 5a 1b 24 00 |e...........Z.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 5b 1b 24 00 |e...........[.$.|
00000000 65 c3 ff ff f7 00 00 01 0f 07 e0 18 5c 1b 24 00 |e...........\.$.|
#16
Posted 30 November 2007 - 05:11 AM
Quote
Quote
#17
Posted 30 November 2007 - 01:31 PM
Cool, big gratz! I'll definitely try this right away tonight!
Btw: how did you discover the acpi info? Is this from analyzing the acpi source that has been disclosed?
(btw: does any of you happen to know a way to hack/configure the bios so it starts in 800x480. Currently it seems to start at 640x480 (at least I did not find a way to have the system start at 800x480; then use directfb).
edit: did a quick test. Works like a charm for me. I used the inbetween 85 step.
Going to 110 resulted in a black screen.
BTW where did you get this bogomips program. It is not in sysutils any more.
found some other version but that gives different numbers (only in the classic way); still enough to verify that things work though).
edit2: going immediately to 100 works for me too (only tested once; now keeping the system on for a while to test stability)
Edited by eFfeM, 30 November 2007 - 02:18 PM.
You are free to reuse whatever you want to, provided that:
1) you give credit to me and eeeuser.com whenever you reuse anything for all things you reused.
2) you do not pretend or create the illusion that your modifications are mine. I'll be responsible for my junk, you for yours :)
#18
Posted 30 November 2007 - 08:49 PM
I've been waiting for this since i first heard the FSB was underclocked. I knew one of you kernel-hackin' types would get a solution out to us poor clueless masses sometime!
And gods know I needed the extra cycles for all that hardcore DOS gaming! :)
Black 4G, 2G RAM, Internal USB ports for a BackTrack dual boot, Eeebuntu 3.0.
Burnt Orange 901, 32GB SaberTooth-SS SSD, 2GB RAM, Ubuntu 10.04/BT4, SparkLAN WPEA-124N for wifi injection (now w/external RP-SMA connector!)
#19
Posted 30 November 2007 - 09:28 PM
Do you think this is a good approach to frequency scaling and head reduction (or battery saving)?
Is your module sleep-aware (does it need to be?)?
btw, I can post the scripts (ubuntu/gutsy) if needed by anybody.
#20
Posted 02 December 2007 - 07:15 PM
1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users


This topic is locked









