Hi all,
A few months ago I upgraded the memory of my Ferrari 4005 with two sticks of 1GB DDR400 memory (OCZ4001024VSO) and for sure I wanted to bypass the stupid BIOS defaults and run the memory at the expected 200 Mhz that both the Turion processor and the ATI chipset support. That can be done with the A64tweaker on Windows, but there's no such thing for Linux. I did a bit of research and found a simple solution though.
Disclaimer: I've tested this only on Ubuntu Feisty (AMD64) and on a single machine, my own, so I can't say for sure that it will work for you.
1. First check that the pci utils are installed on your system. On Ubuntu Feisty, they are included in the default installation:
setpci --version
Mine reads: setpci version 2.2.4
2. Use the setpci command to change the value of the RAM frequency:
IMPORTANT: Execute this command on an idle system! If not, this might crash the machine and a cold boot will be required.
Open a terminal console and write:
sudo setpci -v -s 0:18.2 96.b=70:70
Note that the setpci command needs root access; the easiest way in Ubuntu is to prefix it with sudo.
If everything went right, you will see in the terminal something like 5b -> 7b and the RAM will be happily running at 200Mhz... until the next reboot. It would be great if this could be run at boot time, but I haven't found the way yet. If I add it to the rc.local script, the system crashes when starting up the X server
Maybe someone here can enlight me? 
How to check for improved performance
Run this command a few times before and after the frequency change, with the system idle, to verify the memory performance:
sudo hdparm -T /dev/hda
(As I understand, this won't access the hard disk, but rather do a calculation with a buffer on memory)
I get around a 10% increase in memory bandwitch. Shiny.
What happened here, for the technical inclined
AMD saved the day because the embedded DRAM controller on the processor is programmable through the standard PCI interface. It's even fully documented (gasp!).
The DRAM MEMCLK Frequency setting is located on the byte at the offset 96h (DRAM Configuration High Register) of the PCI bus 0h, device 18h (AMD CPU), function 2h (DRAM controller). The AMD documentation states that the bits we are interested in are bits 6-4. Possible values are:
000 = 100 MHz
010 = 133 MHz
101 = 166 MHz
111 = 200 MHz
We have to apply a mask so that the setpci tool modifies only these three bits and doesn't mess with the other ones. The required mask is 70h (01110000), which coincides with the value we want to set (01110000) since it corresponds to a frequency of 200 Mhz.
Enjoy.
Reference
"BIOS and Kernel Developer's Guide for AMD Athlon 64 and AMD Opteron Processors" Look for Chapter 3, 3.5.11.2 DRAM Configuration High Register
http://www.amd.com/us-en/assets/cont...docs/26094.PDF
The PCI Utilities
http://mj.ucw.cz/pciutils.shtml
A few months ago I upgraded the memory of my Ferrari 4005 with two sticks of 1GB DDR400 memory (OCZ4001024VSO) and for sure I wanted to bypass the stupid BIOS defaults and run the memory at the expected 200 Mhz that both the Turion processor and the ATI chipset support. That can be done with the A64tweaker on Windows, but there's no such thing for Linux. I did a bit of research and found a simple solution though.
Disclaimer: I've tested this only on Ubuntu Feisty (AMD64) and on a single machine, my own, so I can't say for sure that it will work for you.
1. First check that the pci utils are installed on your system. On Ubuntu Feisty, they are included in the default installation:
setpci --version
Mine reads: setpci version 2.2.4
2. Use the setpci command to change the value of the RAM frequency:
IMPORTANT: Execute this command on an idle system! If not, this might crash the machine and a cold boot will be required.
Open a terminal console and write:
sudo setpci -v -s 0:18.2 96.b=70:70
Note that the setpci command needs root access; the easiest way in Ubuntu is to prefix it with sudo.
If everything went right, you will see in the terminal something like 5b -> 7b and the RAM will be happily running at 200Mhz... until the next reboot. It would be great if this could be run at boot time, but I haven't found the way yet. If I add it to the rc.local script, the system crashes when starting up the X server
Maybe someone here can enlight me? 
How to check for improved performance
Run this command a few times before and after the frequency change, with the system idle, to verify the memory performance:
sudo hdparm -T /dev/hda
(As I understand, this won't access the hard disk, but rather do a calculation with a buffer on memory)
I get around a 10% increase in memory bandwitch. Shiny.
What happened here, for the technical inclined
AMD saved the day because the embedded DRAM controller on the processor is programmable through the standard PCI interface. It's even fully documented (gasp!).
The DRAM MEMCLK Frequency setting is located on the byte at the offset 96h (DRAM Configuration High Register) of the PCI bus 0h, device 18h (AMD CPU), function 2h (DRAM controller). The AMD documentation states that the bits we are interested in are bits 6-4. Possible values are:
000 = 100 MHz
010 = 133 MHz
101 = 166 MHz
111 = 200 MHz
We have to apply a mask so that the setpci tool modifies only these three bits and doesn't mess with the other ones. The required mask is 70h (01110000), which coincides with the value we want to set (01110000) since it corresponds to a frequency of 200 Mhz.
Enjoy.
Reference
"BIOS and Kernel Developer's Guide for AMD Athlon 64 and AMD Opteron Processors" Look for Chapter 3, 3.5.11.2 DRAM Configuration High Register
http://www.amd.com/us-en/assets/cont...docs/26094.PDF
The PCI Utilities
http://mj.ucw.cz/pciutils.shtml




