Linux on PowerPC & 3DFx Voodoo3 Cards mini-HOWTO

Most recent messages are written in red. (small update 09/july/20001)
[Il existe une version francaise de cette page, traduite par Etienne Herlent]
I finally got my 3dfx Voodoo3 2000 card working (with acceleration) under Linux on my macintosh, using XFree 4. Since it does not seem that easy to achieve that, I've put this little page for anyone who would have a 3dfx card and who'd like to get it working. Tested distributions are SuSE PPC 7.0, Linuxppc 2000 (Q1), Linuxppc 2000 Q4 and YellowDog Linux 2.0.

    There is currently (early 2001) a BUG in the 3dfx driver (XFree 4.02), which causes complete system crash (no kernel messages-hard reboot only). This occurs only when you switch from X to a console using OPTION(or APPLE)-CTRL-Fx. The only way around this is not to switch between X and the consoles with these keys.
    This is a relatively minor drawback to the accelerated driver which works very well otherwise. Note that you can still exit X to console, that will not crash the sytem (well, you have to boot in text mode to do that, too). Even with this bug, using the accelerated driver is definitly worth it.

If you have any remark about this page, if something said here does not work, please let me know by sending an email (mailto:Vincent.Favre-Nicolin@cryst.unige.ch) , and I'll modify the page accordingly.



NEWS:

Disclaimer : You try everything written here on your own. It may initiate a nuclear reaction in your computer, who knows. All that I can say is that it did work on my computer (and some others, too). Playing with video drivers/configuration under linux is reportedly a dangerous thing.

Notes

3D support: I'm only interested in 2D, so there is nothing about 3D (glide) here.

Voodoo4/5: I only have a Voodoo3. So I do not know of the exact status for Voodoo4 or Voodoo5. The driver has been updated for Voodoo5, but has not been finalized yet. Ani said he had a Voodoo5 working, but there remain configuration problems. Notably it should only work in 8bpp so far.

Questions: I'm definitly not a developper of 3dfx modules / kernel-I don't know anything about hardware programming. So don't bother asking me programming questions. All I can do is say how I managed to get things working. For more technical questions, see the linuxppc.org mailing lists.

My config (if that matters) : a macintosh 7300 with a G3/365 + a 3dfx Voodoo3 2000 card + a Formac ProRaid I UW SCSI card (used to boot linux) + an USB Card for the optical mouse.


Old configuration (only kept here for history, or for people who really are short on bandwidth)

XFree 3.3.6 + tdfx driver from XFree 3.9.16 + kernel:
Use the (now old-more than one year ago) XFree 3.3.6 hack (a XFree driver 3.9.16 in fact) by Kostas Gewrgiou (who did a large part of the 3dfx port to linuxppc), with a supplied kernel. You can find it all in his original message. The only problem that I had with the supplied kernel is that it did not have (unless I'm mistaken) ppp support. But it did work.


Basics: You need three things to get your 3dfx card working : (1) a tdfx driver (only available from XFree 4), (2) kernel support for this driver, and (3) a working XF86Config file. So there are several ways to do it...
 

Getting a working XFree 4.02 with 3dFx drivers

Thanks to Ani Joshi, we now have a working XFree 4.02 release for PPC Linux, supporting 3DFx cards without any driver display glitch. Note that you need XFree with the tdfx (experimental) driver. Some binary distribution (RPMs) do not include the experimental drivers (these get installed in /usr/X11/lib/modules/drivers/).

You can get XFree 4.02 by two ways :

Important : After installing XFree 4, you need to link the new XFree86 driver. So that each time you use startx/gdm/gdm/xdm..., you will be using XFree 4:

Getting a kernel with tdfx support

You need a kernel with support for the 3dfx frambuffer (tdfxfb). This is not included in 2.2 kernels, so you need to add it.
For 2.2 kernel (old): two ways to do that. What about a 2.4 kernel ?
Simply get the source for a (recent) 2.4 kernel. Ani Joshi released a patch for 2.4, and it has apparently been put into the main kernel tree (at least it is in the 2.4.4 kernel source given in YellowDogLinux's Tasty morsels). Just select 3dfx  Voodoo support in the console drivers/Frame buffer section. Again, DO  NOT select agppart or DRI.
NOTE: This driver does not support acceleration (which does not matter, it affects only the console, not X). See next paragraph to set up correct kernel arguments (noaccel).

Important Note: you need to explicitly give video settings as kernel arguments. If you don't do that, you will end up with a seemingly frozen system, with a blank screen. Thus you must add kernel arguments such as "video=tdfx:640x480-8@60". In BootX, this needs to be written in the 'More kernel arguments' line. Other available video settings (I use 1024x768-8@60...) can be found in /usr/src/linux/drivers/video/tdfxfb.c.(Note: you will still be booting if you do not supply video settings, but you won't see it. You can, however, 'blindly' log in and type startx, which will work. You will not be able to use consoles, that's all.). For 2.4 kernel, you also must disable console acceleration, so arguments are (for example) 'video=tdfx:640x480-8@60,noaccel). Without that the characters will all be wrapped up, making console useless (but X should be fine).
 

Get a working XF86Config

(Note: with the latest XFree 4.02 and tdffxfb kernel driver, I found that modelines did not work exactly in the same way as before... So even if you had modelines working with an older driver, you have to do it all again)

    The /etc/X11/XF86Config (or /etc/X11/XF86Config-4, that one is loaded first if present by XFree 4)
    You can use either :

Important: with the new XFree 4.02, it is now mandatory to add the amount of videoram on the card in the "device" section. For a Voodoo3 2000, this looks like :
VideoRam    16384
If you don't do this you will only get your configuration to work in 8bpp.

    Once these automatically generated files work, you can change the modelines at your convenience. Again, be careful when doing that ! You can also change the default color depth. Note that 32 bit does not work for 3dfx (8 and 24 bit are fine, though-maybe 16).

    Note1: if you experience X server crashes, you can try changing the modelines, and you may also want to comment out some of the modules. In my case, the "v4l" (video for linux) module, activated by Xautoconfig, made my X server crash without an clear explanation.

    Note2: if you experience the annoying 'respawn' of the X Server with Linuxppc (the server indefinetly tries to restart), then reboot (with ctrl-command-delete or sthg like that), and start by giving 'single' as kernel argument. Then vi /etc/inittab and change the last lines to start in runlevel 3 instead of 5 (for linuxppc). Reboot and the X server will not be automatically started, so use work on your XF86Config and 'startx' to test your XF86Config-4 file. You can always kill an X server by command-control-backspace.

Note3: In fact most of the struggle to get valid modelines should be over with XFree 4.0, since in fact you are not required to give modelines any more. See for example my new XF86Config-4 without modelines. This works since XFree must have an internal databse of available resolutions (note that it does not have 1152x870, but 1152x864 is fine)

How can you do that?
1) Boot in console
2) Run Xautoconfig4 in whatever resolution you are.
Edit the /etc/X11/XF86Config-4 file and
3) remove the modelines entries
4) Enter the correct HorizSync and VertRefresh for your monitor. (this is important if you do not want to fry your monitor...)
5) In the Section "Screen", enter your desired resolution and the desired DefaultDepth (you'll want 24 bpp).
Here you are ! startx and have fun. On my computer, it worked with resolutions 640x480, 800x600, 1024x768, and 1152x864. Working frequencies seems to be 75 and 85 Hz.
Note that this is not true only for 3dfx, since (for example), it also works for iBooks... Your mileage may vary...

Note4 (FAQ) : I can create a working XF86Config file with full colors, but it gets overwritten every time I boot !
This is because you are automatically running Xautoconfig at boot time, and it rewrites you precious config file... Just deactivate Xautoconfig by using 'ksysv' (you must know what you are doing with thi editor...). If it is not in the SysV editor, then look in the startup scripts where it is launched (somewhere around /etc/rc.d for YellowDogLinux users).

Last Word

None of the code used to make this work has any contribution from me. I guess we all have to thank (or send pepperoni pizza) to all the people working on the tdfx kernel and XFree ppc port. If you have technical questions, the best choice to get answers is probably to go to the LinuxPPC.org mailing lists. Try a search first. But let me hear about your good or bad experience from this page.

Acknowledgements: to all people who contributed to XFree (ppc or not) development. Specifically for this page, the following people provided me with information about software or their own voodoo experience: Ani Joshi, Tom Rini, Stefan Röttger, Jens Nielsen, Marc Ozon and Anders Baden Nielsen. Also thanks to Etienne Herlent for the french translation.
 

    Voila. Hope that helps someone out there, in deep cyberspace...
 

This page created 12/12/2000.
Hits since 11/01/2001: 
Warning: fopen(../php/counter/linuxppc-tdfx.php3.count) [function.fopen]: failed to open stream: No such file or directory in /mnt/105/sda/7/7/v.favrenicolin/linuxppc/linuxppc-tdfx.php3 on line 415
Unable to open ../php/counter/linuxppc-tdfx.php3.count
Warning: fopen(../php/log/linuxppc-tdfx.php3.log) [function.fopen]: failed to open stream: No such file or directory in /mnt/105/sda/7/7/v.favrenicolin/linuxppc/linuxppc-tdfx.php3 on line 427
Unable to open ../php/log/linuxppc-tdfx.php3.log

My laboratory home page  and my personal home page.