View Single Post
Old Oct 24, 2005, 06:32 PM   #18
complex
Newbie
 
Join Date: Oct 2005
Posts: 1


Talking

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

Last edited by complex : Oct 24, 2005 at 06:34 PM. Reason: Spelling mistake
complex is offline   Reply With Quote