Journal L'accélération de mon ati 9600 pro marche enfin. Explications

Posté par  (site web personnel) .
Étiquettes :
0
18
oct.
2003
Cher journal,

ca fait maintenant 1 mois que j'ai une nouvelle machine mais l'accéleration graphique de mon ati 9600 pro ne marchait pas :(
apres de longues recherche, quelques cafés, j'arrive enfin à une solution.
Je vais essayé de resumer ma demarche le plus clairement possible.
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+
distrib : debian sid
gcc : gcc version 3.2.3 (Debian)
X : XFree86 Version 4.2.1.1 (Debian 4.2.1-12.1 20031003005825 james@nocrew.org) / X Window System

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: PEFLAGS: 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 :)

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.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.