Bonjour,

j'avais envoy� il y a quelques semaines un mail pour demander de l'aide
� propos de l'acc�l�ration graphique sous X avec une ati 9600 pro mais
sans trop de succ�s. depuis j'ai continu� ma recherche et aujourd'hui ca
marche !
Config materielle : cm : a7v8x-x, ati 9600 pro, amd athlon 2200+
gcc : gcc version 3.2.3 (Debian)
X : XFree86 Version 4.2.1.1 (Debian 4.2.1-12.1 20031003005825
[EMAIL PROTECTED]) / X Window System
debian sid

voici ma demarche : 
j'ai compile un noyau 2.6.0-test7 avec le support de l'agp inclus dedans
ainsi que le support des chips VIA.
le DRM _n'est pas_ du tout compile, ni en module ni dans le noyau.
Apres une compil de l'ensemble + reboot, un dmesg | grep agp me donne : 
Linux agpgart interface v0.100 (c) Dave Jones
Detected VIA KT400/KT400A/KT600 chipset
Maximum main memory to use for agp memory: 439M
agpgart: AGP aperture is 1024M @ 0x80000000

ensuite j'ai pris la derniere version des drivers ati sur leur site : 
fglrx-glc22-4.2.0-3.2.8.i586.rpm
un petit alien pour convertir ca en deb
puis dpkg -i --force-overwrite fglrx-glc22_4.2.0-4.2_i386.deb
il installe differentes lib etc mais le plus important ce deroule ici : 
/lib/modules/fglrx/build_mod/
lorsque je compilais (./make.sh) j'avais un warning 
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c: In function
`__ke_get_vm_phys_addr':
/lib/modules/fglrx/build_mod/2.6.x/firegl_public.c:1511: warning:
implicit declaration of function `VMALLOC_VMADDR'
et lorsqu'on load le module, le noyau rale.

j'ai donc cherch� d'ou venait ce pb et je l'ai resolu en ajoutant : 
#define VMALLOC_VMADDR(x) ((unsigned long)(x)) dans firegl_public.c
cette ligne provient du fichier : /usr/include/asm/pgtable.h
apres avoir compil� et charg� ce nouveau module, lors du lancement de X,
j'avais un beau : 
Unable to handle kernel paging request at virtual address e096c320
 printing eip:
e096c320
*pde = 1fe78067 
*pte = 00000000 
Oops: 0000 [#4] 
CPU:    0
EIP:    0060:[__crc_agp_memory_reserved+848724/2737961]    Tainted: P  
EFLAGS: 00013292
EIP is at 0xe096c320 
eax: 00000001   ebx: e0af4780   ecx: ffffffff   edx: 69746e65
esi: e0af3a78   edi: df6f1a40   ebp: e0af47b0   esp: ddfbff18
ds: 007b   es: 007b   ss: 0068
Process XFree86 (pid: 411, threadinfo=ddfbe000 task=de2de7c0)
Stack: e0aceb34 69746e65 444d4163 df6f1a40 e0af4780 e0af4780 e0af3a78
df6f1a40 
       e0ad7d20 1f000b0a e0ace76b e0af4780 e0ade445 e0af4780 bffffb64
00000004 
       de2de7c0 e0af391c 1f000b0a e0ade3a0 e0acf2a6 dd7b9140 dfb1cf40
40046432 
Call Trace:
 [__crc_agp_memory_reserved+2300776/2737961]
__ke_amd_adv_spec_cache_feature+0x14/0x90 [fglrx]
 [__crc_agp_memory_reserved+2338132/2737961]
_r6x_CheckAGPCommand+0x130/0x190 [fglrx]
 [__crc_agp_memory_reserved+2299807/2737961] __ke_agp_enable+0x3b/0x40
[fglrx]
 [__crc_agp_memory_reserved+2364537/2737961] drm_agp_enable+0xa5/0xf0
[fglrx]
 [__crc_agp_memory_reserved+2364372/2737961] drm_agp_enable+0x0/0xf0
[fglrx]
 [__crc_agp_memory_reserved+2302682/2737961] firegl_ioctl+0x146/0x1b0
[fglrx]
 [sys_ioctl+181/560] sys_ioctl+0xb5/0x230
 [syscall_call+7/11] syscall_call+0x7/0xb

Code:  Bad EIP value.
et X plante :( ecran noir :(

bref desesp�r� et n'ayant plus rien a perdre je vais voir pourquoi cette
fonction (__ke_amd_adv_spec_cache_feature) plante. Le contenu est tres
simple, elle permet d'identifier le type du processeur et de retourner
un 1 ou 0 si c'est un amd athlon et si la famille et le model sont egale
a 6 ou la famille egale a 6. rien de plus ! 
j'ai effac� tout le contenu de cette fonction et je retourne tout le tps
0.
voila ma nouvelle fonction :
int __ke_amd_adv_spec_cache_feature(void)
{
  return 0;
}
j'ai aussi effac� la fonction static int __init have_cpuid_p(void) qui
ne sert plus a rien.

une recompilation, un reboot pour bien decharg� le precedent module et
l� 'oh miracle, tout marche' !
un petit tour par : glxinfo | grep OpenGL me donne
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: Radeon 9600 Athlon (3DNow!)
OpenGL version string: 1.3 (X4.2.0-3.2.8)
glxinfo me donne 1900 fps !
quake3, ut tournent niquel ! l'affichage en 2D est aussi plus fluide.
j'ai pas encore tester ut2003 mais je ne me fais pas trop de soucis :)

je joins mon fichier de conf de X au passage, c'est celui qui est gen�r�
par defaut par fglrxconfig 

j'espere avoir �t� clair et que cette explication va pouvoir aider ceux
d'entre vous qui ne peuvaient pas jouer sous notre cher pingouin os.

Guillaume

Répondre à