[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

explication acceleration ati 9600 Pro [long]



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
james@nocrew.org) / 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



Reply to: