3Dfx Clock Control for Linux

I’m the owner of both a Voodoo Banshee and a Voodoo 3 3500 (both excellent cards, highly recommended). However, my computer with the Voodoo3 3500 in it is not very well ventilated, and becomes slightly unstable under load. I know that under windows I could lower the core speed of the Voodoo3 and that seems to help stability. So I decided to grab the Voodoo datasheets that are floating around the internet and write my own utility to do this under Linux.

This project produced a few things. The first was a patch to the XFree86 “tdfx” driver allowing specification of the core and memory setting through the config file. The second was a little utility to set the core and mem speeds on the fly. YOU CAN AND WILL BREAK YOUR HARDWARE WITH THIS SOFTWARE IF YOU ARE NOT CAREFUL, as there is no protection to keep you from overclocking your hardware if you want to. I highly recommend you do -NOT- do this, as tdfx cards are notoriously pushed to their limits already. I provide no warranty or guarantee that this software won’t cause damage to your hardware.

In any case, both the patch and the software should work on Voodoo Banshee’s and all Voodoo3’s. I do not have any datasheets on the V4/V5 (VSA-100), so they aren’t supported. Also remember that almost every Voodoo card has different core and memory timings. Below is a table of some common timings, but you should check to make sure you know what the default speed of you card is before you try a new one. Also, i noticed that some speeds just don’t work.. so YMMV. I’m able to run my Voodoo3 3500, (defaults to 183Mhz core/183Mhz Mem) at 166/166, and it seems much more stable. (for the record, the Voodoo3 has a synchronous core and memory clock, while the Banshee is asynchronous).

Chipset Vendor Core Speed Mem Speed
Banshee Various 100Mhz 100Mhz
Voodoo3 2000 3Dfx 143Mhz 143Mhz
Voodoo3 3000 3Dfx ???? ????
Voodoo3 3500/TV 3Dfx 183Mhz 183Mhz

XFree86 Driver Patch

Here is a patch against the dri-cvs tree tdfx driver (as of… ohh, August 2002). I should apply cleanly to any recent tdfx X driver. I gave this patch to the TDFX maintainer, and he liked it, but he wanted more people to test before he included it. However, my call for testers went unanswered, so I guess no one cares about this patch but me ;) So here it is, it will probably never be integrated, but that’s ok, it works for me. Maybe someone else will find it useful. Apply this patch, and then add of the following options to the driver section of your XF86Config-4 file:

    Option  "GFXClock"  "100"
    Option  "MemClock"  "100"

MemClock” only has meaning on a Banshee, as it has a different clock for controlling memory and core speeds. “GFXClock” on a Voodoo3 controls both the core and memory speed.


Voodoo Utilities

The Voodoo Utilities are a small set of utilities for displaying and controlling various aspects of 3Dfx Voodoo cards. They are built around a small library I created called libvoodoo. Libvoodoo is built on top of libpci (of pciutils fame), so it should be portable to different architectures and OS’s (FreeBSD comes to mind). Libvoodoo does all the hard work, all utilities are just small programs layered on top. This would allow me some day if i so desired, to make all sorts of front-ends to control a 3dfx card’s speed.

In order to access the video card’s registers to control the core and mem speeds, the library mmaps in the MMIO region of the card but opening /dev/mem for writing. Unfortunately, this means that it needs root privileges. I’ve taken great care to make sure these programs aren’t exploitable, but you never know. So again, use this software with care. Also know that a malicious user could, if given access to this program, could use it to cause PHYSICAL DAMAGE to your computer. So again, use this program with caution.

As above, these program should work on Voodoo3’s and Voodoo Banshee’s. No other cards are supported. Currently, there are two utilities:

listvoodoo: Lists information on all Voodoo’s found.
setvoodoo: Sets the mem and core speeds on a specified Voodoo
Running either command with the ‘—help’ option should give you all the info you need.

You can download the source code here : voodooutils-0.5.tar.gz