My newest notebook, bought at 2004/02/21

notebook

Specifications

not quite ready yet!
Notebook Micromaxx RAM2000; Medion MD41320; eMachines M5310 (but with faster CPU); Arima w720-k7m Driver download (type '41320' in middle field)
Processor Mobile AMD Athlon(tm) XP 2600+ Model 10, 128kB L1 cache, 512 kB L2 cache, 47 Watt
Display 15.4" TFT W-XGA 1280x800px 330x205mm 16:10 for optimum DVD display
Accu Li-ion accu, 8 cells (?), 4400 mAH, 14.8 V, 65120 mWh, Manufacturer: Dynapack Notebook Accu

Powersaving

BIG FAT WARNING: This patch seems to be working for me, but it is potentially extremely dangerous to your hardware. If you use it, it is your own risk. If your notebook catches fire, it is your fault, not mine!

It appears that powersaving does NOT work at all under Linux. The CPU keeps running at it's top speed, and so is the cooling fan. The following startup messages (running SuSE 9.0's 2.4.21-192-athlon kernel) gives some clue (copied from /var/log/messages):
Feb 23 15:56:56 linux kernel: amd64-cpuf: version 1.00.06 - August 13, 2003
Feb 23 15:56:56 linux kernel: amd64-cpuf: AMD Athlon 64 or AMD Opteron processor required
Feb 23 15:56:56 linux kernel: powernow: AMD K7 CPU detected.
Feb 23 15:56:56 linux kernel: powernow: PowerNOW! Technology present. Can scale: frequency and voltage.
Feb 23 15:56:56 linux kernel: powernow: Found PSB header at c00f0c50
Feb 23 15:56:56 linux kernel: powernow: Table version: 0x12
Feb 23 15:56:56 linux kernel: powernow: Flags: 0x0 (Mobile voltage regulator)
Feb 23 15:56:56 linux kernel: powernow: Settling Time: 100 microseconds.
Feb 23 15:56:56 linux kernel: powernow: Has 43 PST tables. (Only dumping ones relevant to this CPU).
Feb 23 15:56:57 linux kernel: IPsec Security Association Database (SADB): initialized.
	    
I don't see any PST tables, so apparently there are none found that are relevant. Since I still could not quite make heads or tails from this, and because it might be a problem that was solved in a later kernel. So I retrieved the 2.4.25 kernel source, and the latest cpufreq patched, and retried. Now the output was:
Feb 23 22:05:28 enterprise kernel: ACPI: Thermal Zone [THRM] (59 C)
Feb 23 22:05:28 enterprise kernel: powernow: AMD K7 CPU detected.
Feb 23 22:05:28 enterprise kernel: powernow: PowerNOW! Technology present. Can scale: frequency and voltage.
Feb 23 22:05:28 enterprise kernel: powernow: Found PSB header at c00f0c50
Feb 23 22:05:28 enterprise kernel: powernow: Table version: 0x12
Feb 23 22:05:28 enterprise kernel: powernow: Flags: 0x0 (Mobile voltage regulator)
Feb 23 22:05:28 enterprise kernel: powernow: Settling Time: 100 microseconds.
Feb 23 22:05:28 enterprise kernel: powernow: Has 43 PST tables. (Only dumping ones relevant to this CPU).
Feb 23 22:05:28 enterprise kernel: powernow: No PST tables match this cpuid (0x7a0)
Feb 23 22:05:28 enterprise kernel: This is indicative of a broken BIOS. Email davej@redhat.com
Feb 23 22:05:30 enterprise kernel: IPv6 v0.8 for NET4.0
	    
OK, so my BIOS is at fault. But what is it? Of course I sent the requested email, but I assume that Dave Jones has a busy schedule. After some googling, I found the URL
Matt Wright Consulting, where he explained exactly the same problem, but he found a working solution too!
The problem is that the bios has to have PST entries for every possible Athlon processor that could be in the system. But there isnt one for my CPU. Probably because the manufacturer decided to upgrade the spec, but forgot (or didn't want to) upgrade the bios.
Of course, his solution did not work as stated, but I made my own patch that did it for me: powernow-k7-patch. It is a patch against my SuSE 9.0 kernel, but probably it works for later 2.4 kernels too. For convenience, I also included the built module powernow-k7.o. Just copy it to /lib/modules/2.4.21-192-athlon/kernel/arch/i386/kernel, and make sure it is owned by root. You might want to save the original file first.

After this, the kernel logs the following:
Feb 24 17:54:13 enterprise su: pam_unix2: session started for user root, service su
Feb 24 17:55:41 enterprise kernel: powernow: AMD K7 CPU detected.
Feb 24 17:55:41 enterprise kernel: powernow: PowerNOW! Technology present. Can scale: frequency and voltage.
Feb 24 17:55:41 enterprise kernel: powernow: *JOSN* cpuid is 0x7a0, but using 0x781
Feb 24 17:55:41 enterprise kernel: powernow: *JOSN* cpuid is 0x18, but using 0x15
Feb 24 17:55:41 enterprise kernel: powernow: *JOSN* startvid is 0xb
Feb 24 17:55:41 enterprise kernel: powernow: Found PSB header at c00f0c50
Feb 24 17:55:41 enterprise kernel: powernow: Table version: 0x12
Feb 24 17:55:41 enterprise kernel: powernow: Flags: 0x0 (Mobile voltage regulator)
Feb 24 17:55:41 enterprise kernel: powernow: Settling Time: 100 microseconds.
Feb 24 17:55:41 enterprise kernel: powernow: Has 43 PST tables. (Only dumping ones relevant to this CPU).
Feb 24 17:55:41 enterprise kernel: powernow: PST:30 (@c00f0e5c)
Feb 24 17:55:41 enterprise kernel: powernow:  cpuid: 0x781      fsb: 133        maxFID: 0x15    startvid: 0xb
Feb 24 17:55:41 enterprise kernel: powernow:    FID: 0x12 (4.0x [532MHz])       VID: 0x19 (1.050V)
Feb 24 17:55:41 enterprise kernel: powernow:    FID: 0x4 (5.0x [665MHz])        VID: 0x19 (1.050V)
Feb 24 17:55:41 enterprise kernel: powernow:    FID: 0x6 (6.0x [798MHz])        VID: 0x19 (1.050V)
Feb 24 17:55:41 enterprise kernel: powernow:    FID: 0x8 (7.0x [931MHz])        VID: 0x19 (1.050V)
Feb 24 17:55:41 enterprise kernel: powernow:    FID: 0xe (10.0x [1330MHz])      VID: 0xe (1.300V)
Feb 24 17:55:41 enterprise kernel: powernow:    FID: 0x15 (13.5x [1795MHz])     VID: 0xb (1.450V)
Feb 24 17:55:41 enterprise kernel:
Feb 24 17:55:41 enterprise kernel: powernow: Minimum speed 532 MHz. Maximum speed 1795 MHz.
	    
OK, so now I have 6 different speeds to choose from! OK, this is not optimal. The highest clock frequency is 1795MHz, where I would expect something like 2000MHz. The problem: the pst table I am using now describes a Athlon XP 2400+, while mine is a Athlon XP 2600+. So I gave up some performance, but gained a cool notebook, and extra battery life.

Powersaving

BIG FAT WARNING: This patch seems to be working for me, but it is potentially even more dangerous to your hardware than the previous patch. If you use it, it is your own risk. If your notebook catches fire, it is your fault, not mine!

The previous patch solved the problem that the BIOS has no pst tables for my processor by cheating the system and pretending that we have another processor. The problem is that there was no pst table in the BIOS that completely supports my processor.

This patch will, if presented with my processor, simply ignore the BIOS pst tables, and present a pst table that I created myself, and is thus located within the kernel.
The problem is: how to find out what to put in the pst table. To find that out, I downloaded
PowerNow! Dashboard 1.08 for Windows, and installed that under Microsoft Windows. By generating varying loads, I found out that the following states are used in MS Windows: This helped me calculate the frequency multipliers, and generate vid and fid values. I got the following table
Voltage
V
multiplierfrequency
MHz
VIDFID
1.050 4 5320x190x12
1.050 5 6650x190x04
1.050 6 7980x190x06
1.050 7. 9310x190x08
1.30010 13300x0e0x0e
1.45013.517960x0b0x15
1.45015 19950x0b0x18
The resulting powernow-k7-patch works in such a way that the table overriding the BIOS is only used if cpuid, maxFID and startvid, are all the correct values for my processor. In all other cases the original BIOS tables are used. It is again a patch against my SuSE 9.0 kernel, but probably it works for later 2.4 kernels too. For convenience, I also included the built module powernow-k7.o. Just copy it to /lib/modules/2.4.21-192-athlon/kernel/arch/i386/kernel, and make sure it is owned by root. Rename it to the original filename 'powernow-k7.o'. You might want to save the original file first.

After this, the kernel logs the following:
Feb 28 13:39:05 enterprise kernel: powernow: AMD K7 CPU detected.
Feb 28 13:39:05 enterprise kernel: powernow: PowerNOW! Technology present. Can scale: frequency and voltage.
Feb 28 13:39:05 enterprise kernel: powernow: *JOSN* cpuid is 0x7a0
Feb 28 13:39:05 enterprise kernel: powernow: *JOSN* maxFID is 0x18
Feb 28 13:39:05 enterprise kernel: powernow: *JOSN* startvid is 0xb
Feb 28 13:39:05 enterprise kernel: powernow: *JOSN* USING MY OWN PST!
Feb 28 13:39:05 enterprise kernel: powernow: Found PSB header at c47a51e4
Feb 28 13:39:05 enterprise kernel: powernow: Table version: 0x12
Feb 28 13:39:05 enterprise kernel: powernow: Flags: 0x0 (Mobile voltage regulator)
Feb 28 13:39:05 enterprise kernel: powernow: Settling Time: 100 microseconds.
Feb 28 13:39:05 enterprise kernel: powernow: Has 1 PST tables. (Only dumping ones relevant to this CPU).
Feb 28 13:39:05 enterprise kernel: powernow: PST:0 (@c47a51f4)
Feb 28 13:39:05 enterprise kernel: powernow:  cpuid: 0x7a0      fsb: 133        maxFID: 0x18    startvid: 0xb
Feb 28 13:39:05 enterprise kernel: powernow:    FID: 0x12 (4.0x [532MHz])       VID: 0x19 (1.050V)
Feb 28 13:39:05 enterprise kernel: powernow:    FID: 0x4 (5.0x [665MHz])        VID: 0x19 (1.050V)
Feb 28 13:39:05 enterprise kernel: powernow:    FID: 0x6 (6.0x [798MHz])        VID: 0x19 (1.050V)
Feb 28 13:39:05 enterprise kernel: powernow:    FID: 0x8 (7.0x [931MHz])        VID: 0x19 (1.050V)
Feb 28 13:39:05 enterprise kernel: powernow:    FID: 0xb (8.5x [1130MHz])       VID: 0x15 (1.150V)
Feb 28 13:39:05 enterprise kernel: powernow:    FID: 0xf (10.5x [1396MHz])      VID: 0x11 (1.250V)
Feb 28 13:39:05 enterprise kernel: powernow:    FID: 0x3 (12.5x [1662MHz])      VID: 0xd (1.350V)
Feb 28 13:39:05 enterprise kernel: powernow:    FID: 0x18 (15.0x [1995MHz])     VID: 0xb (1.450V)
Feb 28 13:39:05 enterprise kernel:
Feb 28 13:39:05 enterprise kernel: powernow: Minimum speed 532 MHz. Maximum speed 1995 MHz.
	    
OK, so now I have 8 different speeds to choose from! This is a few entries more than are used in MS Windows, but I thought they were usefull and I was pretty sure about the values. Now the only 'problem' is that this is not 'the way to go': the notebook supplier gives me a system with a CPU that is incompatible with the BIOS. He patches Windows XP, so it will work. Now I have to patch Linux for the same reason. The only correct solution is for the provider to create a patched BIOS!

Wireless

The built-in 802.11g wireless network adapter is a mini-PCI card, type Broadcom Corporation BCM94306. Alas, apparently there is no linux support yet. The link
TuxMobil: Linux On Mobile Computers pointed me to TuxMobil: Linux Laptop and Notebook Survey: eMachines. This page holds two links to pages that install Linux and Wireless on my notebook. I chose one of them, which I describe here.

Get ndiswrapper. I got ndiswrapper-0.3.tar.gz, because the newer version ndiswrapper-0.4.tar.gz did not build with the SuSE 9.0 kernel.

After building the driver, and the utility, create a directory, and copy driver ndiswrapper.o and utility loaddriver to this directory.

Get the .inf file and the .sys file of the windows driver; in my case bcmwl5.inf and bcmwl5.sys. You can find them in the Windows boot partition in /WINDOWS/system32/bcmwl5.inf and /WINDOWS/system32/bcmwl5.sys. Copy these files in the same directory.

Now check the id's of the mini-PCI card. This can be done by executing
lspci -n | grep 'Class 0280:' | awk  '{print $4}'
	    
In my case, the output is 14e4:4320. To start the wireless interface, give the following commands:
# Press <Fn><F2> if you havent already done so, to enable the
# wireless transmitter.
cd <directory_that_contains_all_files>
# load the module that 'runs' the ndis driver
insmod ndiswrapper.o
# load the ndis driver
./loaddriver 14e4 4320 bcmwl5.sys bcmwl5.inf
iwconfig eth1 mode managed
iwconfig eth1 key <your_WEP_key>
iwconfig eth1 essid <your_SSID>
ifup-dhcp eth1
	    
Now, you should be online. The above should obviously be entered in some script, because you need to do that everytime you boot.

Ethernet problems under SuSE 9.0

The built-in Ethernet NIC is a Broadcom Corporation BCM4401. The driver in the SuSE 9.0 linux kernel is version 1.0.1 (2002/8/26). Alas, this driver is not flawless. Luckily however, the driver (written by Broadcom themselves, is developped further, and now there is a version 1.0.7 (2003/10/31). You can get it at
Broadcom Corporation - Download Drivers. After downloading, unzip the archive. Everything unpacks in a 'linux' subdirectory. It contains a tar archive; unpack that (in /usr/src); cd to bcm4400-3.07/src, and type 'make'. After that, you can install all with 'make install'; it also installs a manpage 'bcm4400'. For some reason, in linux 2.4.25, another driver (not Broadcom's) is used. Maybe that one is even better ?