Les secrets du PAT | ||||
By Samuel D.. - 16/05/2003 | ||||
Chipsets et Registres
Avant de rentrer dans les détails, il est intéressant
d'expliquer le fonctionnement des registres internes d'un chipset. Dans
le cas des i865 et i875, l'architecture interne a été modifiée
et est maintenant plus complexe. Commençons donc par un chipset
comme l'i845PE ou l'E7205. Sur ces chipsets, les registres de configurations
du Northbdriges sont accessibles via le bus PCI standard. Appelé
généralement "
Les bits du Device 0 contiennent donc les registres de configuration du Northbridge (pont CPU -> PCI). A noter également que le device 1 contient les registres de configuration du pont AGP -> PCI (en gros les registres de configuration du bus AGP). Voici donc pour un chipset comme l'i845PE ou le nForce2. Voyons un exemple typique de dump d'un Northbridge :
Le Vendor ID est à 0x8086 (Intel), le Device ID est à 0x255D (c'est un E7205) et on est sur le bus 0, device 0, function 0. Nous sommes donc ici en présence du dump d'un chipset Granite Bay (E7205). Bref, rien de bien compliqué jusque la... Mais pour les i865 et i875, Intel a bien corsé les choses. En effet, ces chipset inaugurent un nouveau mécanisme : le fameux Device 6. Comme nous l'avons dit plus haut, le Device 0 contient les parametres de base du chipset et le Device 1 contient les registres AGP. Dans l'i875/i865, le Device 3 et surtout, le Device 6 font leurs apparitions. Le Device 3 n'est pas trés interessant, il s'agit en fait des registres de configurations du port de communication CSA. Quant au Device 6, il est présenté comme un "Overflow Device" :
Le Device 6 est donc destiné à offrir un espace supplémentaire au Device 0. En gros, un autre Device créé uniquement pour pouvoir stocker plus de 2048 bits. Or, dans beaucoup de cas, un scan du bus PCI ne détecte absolument aucun "Device 6". Car bien sur, premier mécanisme de protection, Intel a décidé de cacher ce Device6 pour ne pas qu'on puisse aller y trifouiller. La première chose à faire est donc de débloquer ce Device pour pouvoir y acceder. Bien sur, inutile de chercher dans la documentation, rien n'est indiqué à ce sujet. Franck, aprés de nombreux tests, a finalement trouvé la solution : Il suffit d'ecrire un 1 dans Bus0/Fun0/Dev0: RegF4 [1]. Cette notation se lit : "Il suffit d'ecrire un 1 dans le bit 1 du registre F4 localisé dans le Device 0 / Function 0 / Bus 0". Une fois ce bit a 1, un scan du bus PCI donne bien un Device 6 qui apparait. Mais le jeu de piste n'est pas terminé. Dans ce nouveau device, la quasi-seule chose qu'on peut lire, selon Intel, est l'adresse d'une plage dans la mémoire haute ou se trouve les registres en mémoire haute ! C'est ce qu'on appelle un MMR pour Memory Mapped Register. Bref, aprés avoir activé le Device 6, il faut ACTIVER ce MMR (en écrivant un 1 dans Bus0/Fun0/Dev6: Reg04~05 [1]), puis aller lire la plage mémoire dont l'adresse se trouve sur Bus0/Fun0/Dev6: Reg10~13 [31:13]. Bref, récapitulons. J'ai une carte à base d'un chipset i875P et je veux savoir en quel CAS je suis. Informations sensibles puisque cette information est localisé dans le MMR. Je dois donc faire, dans l'ordre :
Si les deux bits [6:5] sont 00, vous êtes en cas 2.5, si c'est 01, vous êtes en CAS 2 et si c'est 10, vous etes en CAS 3. Une fois lu, il convient de remettre un 0 dans Bus0/Fun0/Dev6: Reg04~05 [1] (ferme l'accés au MMR) et dans Bus0/Fun0/Dev0: RegF4 [1] (Ferme l'accés au Device6). Voici par exemple un exemple de Device 6 :
Ici, nous sommes dans Bus0/Fun0/Dev6. Le Registre Reg10~13 contient 00 00 CF FE donc FECF0000h. On lit donc toute cette plage mémoire et on obtient le Device6/MMR :
Il ne reste plus qu'a prendre (Bus0/Fun0/Dev6(MMR): Regxxxxxxxxxxxxxx60~63 [6:5]) les registres 60~63 qui contiennent AA 12 20 17 soit 172012AAh ou, en binaire, 000010111001000000001001010101010b. les bits 6:5 sont "01". Nous sommes en CAS 2 !
|
||||
Fermer |