I faced with the same problem 2 days ago. Finally I managed to setup a working configuration.
HARDWARE:
Gigabyte GA-8IPE1000 Pro2 mainboard with latest BIOS update
Intel Pentium 4 3.0GHz HT processor
Gigabyte ATI Radeon 9550
SOFTWARE:
Debian 3.1 - Sarge, stable (partially unstable to install OpenOffice.org 2.0)XFree86 4.3.0.1
ATI Proprietary Display Driver 8.18.6 (built using the debian-way)
Custom 2.6.13.4 kernel.
The fglrx kernel module has been built from source package.
RELEVANT KERNEL CONFIGURATION OPTIONS:
CONFIG_MTRR=y
CONFIG_AGP=y # All AGP support modules are turned off! Only AGP support is ON!!!
CONFIG_DRM is not set
SYMPTOM:
dmesg and XFree86.0.log reports MTRR errors and disables direct rendering (accelerated OpenGL). 2D acceleration works fine.
TEST:
$ cat /proc/mtrr
reg00: base=0x00000000 ( 0MB), size=984064MB: write-back, count=1
The exact size may differ slightly, but always a large value, abour 1TB!
(984064MB is about 984GByte ~ 1TB)
This value is surely wrong, since a tipical machine has about 128Mb..2Gb memory.
CAUSE:
It seems that some BIOSes sets wrong MTRR values. The mainboard above is a real-world example. The wrong MTRR write-back region is larger than the 4Gbyte address space. This conflicts with ANY new MTRRs set by X or other driver/application.
SOLUTION:
We must clear the wrong and conficting MTRR entry on every boot with an rcS.d init script.
Create a text file named fix_mtrr in /etc/init.d and copy this text into it:
#!/bin/sh
# Fix wrong MTRR setting
echo "disable=0" >| /proc/mtrr
echo "base=0x0 size=0x40000000 type=write-back" >| /proc/mtrr
Replace 0x40000000 with the size of your main memory (not video memory)! Help:
0x08000000 = 128Mb
0x10000000 = 256Mb
0x40000000 = 1Gb
0x60000000 = 1.5Gb
0x80000000 = 2Gb
Add execute privileges:
chmod +x /etc/init.d/fix_mtrr
Create a symlink: /etc/rcS.d/S02fix_mtrr
The symlink must point to: ../init.d/fix_mtrr
Reboot your system.
It the kernel options above are set correctly and your ATI driver is configured properly, then 2D and 3D acceleration sould work fine.
TEST:
Your can run:
$ cat /proc/mtrr
Your should get something like:
reg00: base=0x00000000 ( 0MB), size=1024MB: write-back, count=1
reg01: base=0xd0000000 (3328MB), size= 128MB: write-combining, count=1
reg02: base=0xf0000000 (3840MB), size= 128MB: write-combining, count=1
Your can run:
$ fglrxinfo
You sould get something like:
display: :0.0 screen: 0
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: RADEON 9550 Generic
OpenGL version string: 1.3.5395 (X4.3.0-8.18.6)
The above solution should work in ANY situation when the BIOS sets wrong MTRRs.
Greetings, Complex