Note that there's not a huge performance gain hiding in here. My best results using Sandra 2004's memory bandwidth benchmark show only a 1.6% gain, from 2290MB/sec to 2326MB/sec. So this is really only for the real fanatics who absolutely positively must get the very last drop of performance out of their systems (like me).
For background, I suggest reading the following:
The Centrino chipset can use PC2700 / DDR333 memory, which means the theoretical maximum memory bandwidth is around 2656MB/sec. However, this limit could only be achieved if there were zero delays between when the CPU requests a memory location and when the memory responds, and in real life there are a number of delays along the way. This delay is referred to as "latency" in memory jargon.
So far in my searching, the only DDR333 notebook memory I've found has been CL2.5 memory, where the CAS Latency is 2.5 clock cycles per memory access. In my Asus M6Ne system, the timing is reported as 2.5-3-3-7. (CAS Latency=2.5, RAS-to-CAS delay=3, RAS precharge=3, and tRAS=7 clock cycles.) The memory I bought first was Kingmax 1GB DDR333, a CL2.5 module. I have two of these in my M6Ne, for 2GB total memory.
I read about some people using DDR400 memory in their Centrino systems, so I tried ordering the 1GB Kingmax DDR400 parts from www.newegg.com. Unfortunately, my M6Ne refused to power up with this memory installed, so I returned it for a refund.
As it turns out, the place where I originally ordered the M6Ne also uses DDR400 memory by default. I didn't use their memory when I bought the system because they only offered up to 512MB modules, not the 1GB parts. But for the purposes of this speed test, I decided to try their stuff. Check out Geared2Play.com for more info on their offerings. Their DDR400 memory is what I used for the higher speed settings I found here.
With the DDR400 memory installed, I can now run the timing at 2-2-2-5, which along with a few other timing changes, yielded memory bandwidth of 2326MB/sec instead of the original 2290MB/sec.
OK, so let's get to it - run the WPCREDIT program. The current version at the time of this writing (Sept 15 2004) is 1.4. This program includes its own device driver for accessing the PCI configuration space. The first time you run the program, it will probably say "driver load failed" or something like that - just run the program a second time and it will be fine. Then use the "Open PCR File" function to load the 80863340.pcr file I wrote.
The main DRAM timing register is a 32 bit register starting at offset 78h. There are 4 bits of interest in the byte at 78h, to set the CAS latency, RAS-to-CAS delay, and RAS Precharge time. To set these delays to 2-2-2 clock cycles, set this byte to 15h or 1Dh. (On my machine, bit 3 is set but the datasheet says it's "reserved" so I don't know what it means. I left it unchanged.)
The next register, at 79h has two bits of interest to set tRAS. This register defaulted to 00h for 7 clock cycles, I set it to 04h to get 5 clocks. You might want to try 6 cycles first; work your way through these changes gradually after you're sure it works. The machine will lock up immediately if you get this value wrong.
The next register at 7Ah had nothing of interest, so I left it unchanged.
The next register at 7Bh has several bits of interest. I set it to 3Eh to drop tRD from 4 clocks down to 3. With my CL2.5 memory this defaulted to 7 clocks. Again, you might want to change this value gradually, working down from 7 to 3 one step at a time.
I note that the data sheet says this is a 32 bit register, so I hit the "32" button on the WPCREDIT toolbar before editing. I'm not sure it makes a big difference, but that means that all of my changes get stored in one operation instead of 3-4 separate ones.
There are a few other settings to play with as well. At register 7Dh are a pair of bits to control how frequently the DRAM refreshes. The default for CL2.5 was 15.6usec, but when I booted the DDR400 memory it came up as 7.8usec. I reset it to 15.6usec, so this register should be 31h.
This is as much as I've experimented with so far. If you want to play with your AGP settings, power management settings, etc., you'll have to try that on your own. Of course, I'd be interested to hear about any results you get.
You should expect to go through a bit of trial-and-error here. It helps to have the Intel documentation open to the register descriptions while you're browsing through, to make sure you're setting what you think you're setting. Once you've arrived at a setup that works reliably on your machine, you'll probably want to use the WPCRSET program to load your settings on every subsequent reboot. (WPCREDIT only affects the current session; the settings revert to the system default on the next reboot.) You can find more details on the WPCRSET program at the i845D writeup linked above.