aboutsummaryrefslogtreecommitdiff
path: root/i18n/fr_FR/docs/hardware/gm45_remove_me.md
blob: d870ca22b37058893ec23c07fc995567c3bc34ba (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
---
title: "Jeux de puces GM45: enlever la ME (manageability engine ou moteur d'administration)"
...

Ces sections concernent la désactivation et la suppression du ME (Intel
*M*anagement *E*ngine) sur les GM45. Originellement, ça a été fait sur le
ThinkPad X200, et plus tard adapté pour le ThinkPad R400/T400/T500.
Par principe, ça peut être fait sur n'importe quel système GM45 ou GS45.

La ME est un blob qui doît être normalement laissé à l'intérieur de la puce de
flash (dans la région ME, comme défini dans le descripteur par défaut).
Sur les GM45, il est possible de la supprimer sans mauvais effets secondaires.
Toutes les autres parts de coreboot sur les systèmes GM45 (comme le GMA
MHD4500/ graphiques Intel) peuvent être libres de blob, donc supprimer la ME
était le dernier obstacle pour faire de la GM45 une cible faisable dans
libreboot (les systèmes peuvent aussi marcher sans les blobs de microcode).

Dans Libreboot, La ME est supprimée et désactivée en modifiant le descripteur.
Plus d'informations à propos de ceci peuvent être trouvées dans le code source
d'ich9gen/ich9deblob dans le répertoire
[resources/utilities/ich9deblob](resources/utilites/ich9deblob/src/) du
projet libreboot, ou plus généralement sur cette page.

Plus d'informations à propos de la ME peuvent être trouvées sur
<http://www.coreboot.org/Intel_Management_Engine> et
<http://me.bios.io/Main_Page>.

Un autre projet récemment trouvé: <http://io.netgarage.org/me/>

Utilitaire ICH9 gen {#ich9gen}
================

Il n'est désormais plus nécessaire d'utiliser [ich9deblob](#ich9deblob) pour
générer un descripteur déblobbé + une image GBE pour les cibles GM45. ich9gen
est un petit utilitaire dans ich9deblob qui peut les générer à partir de rien,
sans un cliché mémoire du factory.bin .

Les exécutables d'ich9gen peuvent être trouvés sous
[./ich9deblob/](resources/utilities/ich9deblob/src/), compilés
statiquement dans libreboot\_util. Si vous utilisez src ou git, compilez
ich9gen depuis la source avec:

    $ ./oldbuild module ich9deblob

L'exécutable apparaîtra sous
[resources/utilities/ich9deblob/](../../resources/utilities/ich9deblob/)

Exécutez:

    $ ./ich9gen

Exécuter ich9gen de cette façon (sans aucun arguments) genère un descripteur
par défaut + une image GBE avec une adresse MAC générique.
Vous ne voulez probablement pas utilisez celle de base; les images ROM dans
libreboot contiennent un image descripteur+gbe par défaut (déjà insérée) juste
pour prévénir ou mitiger le risque du bousillage de l'ordinateur portable 
(NdT:*bricking*, rendre telle une brique), mais avec une adresse MAC générique
(le projet libreboot ne sait en rien qu'elle est votre réelle adresse MAC).

Dans GNU+Linux, vous pouvez trouver votre adresse MAC grâce à la sortie des
commandes `ip addr` ou `ifconfig`.
Alternativement, si vous marchez déjà sous libreboot (avec la bonne adresse
MAC dans votre ROM), faîtes en un cliché (`flashrom -r`) et lisez les 6
premiers octets depuis la position 0x1000 (ou 0x2000) dans un éditeur
hexadécimal (ou, renommez-le factory.rom et exécutez le par ich9deblob: dans le
mkgbe.c fraîchement créé il y aura les octets individuels de votre adresse
MAC).
Si vous êtes en train d'exécuter le micrologiciel de base et vous n'avez pas
encore installé libreboot, vous pouvez aussi l'exécuter par ich9debkib pour
récupérer l'adresse mac.

Une façon encore plus simple d'avoir l'adresse MAC serait de lire
la petite étiquette en bas/sur la base de l'ordinateur portable.

Sur les ordinateur portables GM45 qui utilisent les descripteurs flash,
l'adresse MAC ou le jeu de puces  (chipset) ethernet embarqué est flashé (dans
l'image ROM). Vous devriez générer votre propre adresse MAC à l'intéreur (avec
la somme de contrôle du GBE mise à jour afin qu'elle corresponde). Exécutez:

    $ ./ich9gen --macaddress XX:XX:XX:XX:XX:XX

(remplaçez les charactères XX par les valeurs hexadécimales de l'adresse MAC
que vous désirez).

Trois nouveaux fichiers seront créés:

-    `ich9fdgbe_4m.bin`: destiné aux ordinateurs portables GM45 avec la puce flash
     de 4Mo.
-    `ich9fdgbe_8m.bin`: idem, mais pour puce flash de 8Mo.
-    `ich9fdgbe_16m.bin`: idem, mais pour puce flash de 16Mo.

En assumant que votre image libreboot est nommée **libreboot.rom**, copiez le
fichier qui va bien dans le même répertoire que votre image et ensuite insérer
le fichier descripteur+GBE dans l'image ROM.\
Pour les puces flash de 16Mo:

    # dd if=ich9fdgbe_16m.bin of=libreboot.rom bs=12k count=1 conv=notrunc

Celles de 8Mo:

    # dd if=ich9fdgbe_8m.bin of=libreboot.rom bs=12k count=1 conv=notrunc

Et enfin, pour celles de 4Mo:

    # dd if=ich9fdgbe_4m.bin of=libreboot.rom bs=12k count=1 conv=notrunc

Votre image libreboot.rom est maintenant prête à être flashée sur le système.
Référez vous à [../install/\#flashrom](../install/#flashrom) pour savoir
comment la flasher.

Protéger en écriture la puce de flashage
-------------------------------

Cherchez les lignes suivantes dans la fonction *descriptorHostRegionsUnlocked*
se trouvant dans le fichier
*resources/utilities/ich9deblob/src/descriptor/descriptor.c* :

    descriptorStruct.masterAccessSection.flMstr1.fdRegionWriteAccess = 0x1;
    descriptorStruct.masterAccessSection.flMstr1.biosRegionWriteAccess = 0x1;
    descriptorStruct.masterAccessSection.flMstr1.meRegionWriteAccess = 0x1;
    descriptorStruct.masterAccessSection.flMstr1.gbeRegionWriteAccess = 0x1;
    descriptorStruct.masterAccessSection.flMstr1.pdRegionWriteAccess = 0x1;

Regardez aussi dans le fichier *resources/utilities/ich9deblob/src/ich9gen/mkdescriptor.c*
pour les lignes suivantes:

    descriptorStruct.masterAccessSection.flMstr1.fdRegionWriteAccess = 0x1; /* see ../descriptor/descriptor.c */
    descriptorStruct.masterAccessSection.flMstr1.biosRegionWriteAccess = 0x1; /* see ../descriptor/descriptor.c */
    descriptorStruct.masterAccessSection.flMstr1.meRegionWriteAccess = 0x1; /* see ../descriptor/descriptor.c */
    descriptorStruct.masterAccessSection.flMstr1.gbeRegionWriteAccess = 0x1; /* see ../descriptor/descriptor.c */
    descriptorStruct.masterAccessSection.flMstr1.pdRegionWriteAccess = 0x1; /* see ../descriptor/descriptor.c */

NOTEZ: Quand vous protégez en écriture la puce de flash, le reflashage n'est
alors plus possible à moins que vous utilisiez de l'équipement externe
dédicacé à cela, ce qui implique un désassemblage de l'ordinateur portable.
Le même équipement peut être aussi utilisé pour enlever plus tard la
protection en écriture, si vous le voulez.
Protégez en écriture la puce \*seulement\* si vous avez le bon équipement qui
va avec, afin de flasher extérieurement plus tard; par exemple, jetez un coup
d'oeil à [../install/bbb\_setup.md](../install/bbb_setup.md).

Modifiez les valeurs de variables à 0x0, puis recompilez ich9gen. Après que
vous avez fait celà, suivez les notes dans [\#ich9gen](#ich9gen) pour générer
une nouvelle image de descripteur+gbe puis insérez la dans votre image ROM, et
ensuite flashez la.
La prochaine fois que vous démarrez, la puce de flash sera en mode "lecture
seulement" dans les logiciels (le reflashage matériel marchera encore, vous en
aurez besoin pour reflasher la puce après l'avoir protégée en écriture,
nettoyer la protection en écriture ou alors flasher une autre image ROM avec
la protection en écriture définie dans le descripteur).

Flashrom vous dira qu'il peut forcer le reflashage, en utilisant  *-p
internal:ich\_spi\_force=yes* mais en fait ça ne marchera pas; ça va juste
bousiller votre ordinateur portable.

Pour des guides sur le flashage externe, référez vous à
[../install/](../install/).

L'utilitaire ICH9 deblob {#ich9deblob}
===================

**Ce n'est plus strictement nécessaire. Les images ROM de Libreboot
contiennent désormais par défaut le descripteur+gbe de 12Ko généré par
ich9gen.**

C'était l'outil originnellement utilisé pour désactivé la ME sur le X200 (et
plus tard adapté pour les autres systèmes utilisant le jeu de puces GM45).
[ich9gen](#ich9gen) le supplante; ich9gen est mieux parce qu'il ne dépend pas
du cliché mémoire de l'image factory.rom (tandis que ich9deblob oui).


C'est que vous utiliserez pour générer les régions descripteur+gbe déblobbées
pour votre image ROM de Libreboot.

Si vous êtes en train de travaillez avec git ou libreboot\_src, vous pouvez
trouver ses sources sous le répertoire
[resources/utilities/ich9deblob/](../resources/utilities/ich9deblob/) et sera
déjà compilé si vous avez exécuté **./oldbuild module all** ou **./oldbuild
module ich9deblob** depuis le répertoire racine, sinon vous pouvez le compilez
en faisant ceci:

    $ ./oldbuild module ich9deblob

Un fichier exécutable nommé **ich9deblob** apparaîtra maintenant dans le
répertoire resources/utilities/ich9deblob/

Si vous travaillez avec l'archive des versions de libreboot\_util, vous
trouvez l'utilitaire sous ./ich9deblob/, compilé statiquement (pour i686 et
x86\_64 sur GNU+Linux). 


Mettez le factory.rom de votre système (pouvant être obtenu en suivant les
guides de flashage externe pour les cibles GM45, [../install/](../install/))
dans le répertoire où se trouve l'exécutable de ich9deblob, puis exécutez
l'utilitaire:

    $ ./ich9deblob

Un fichier de 12Ko nommé **deblobbed\_descriptor.bin** apparaîtra maintenant.
**Gardez-le ainsi que le factory.rom dans un endroit sûr!** Le premier bloc de
4Ko contient la région de données du descripteur pour votre système, et le
bloc suivant de 8Ko contient la région GBE (données de configuration pour
votre carte réseau gigabit). Ces deux régions pourrait en fait être dans des
fichiers séparés, mais ils sont joints en un seul fichier dans ce cas là.

Un fichier de 4Ko nommé **deblobbed\_4kdescriptor.bin** apparaîtra
alternativement, si aucune région GBE n'a été détectée dans l'image ROM.
C'est souvent le cas lorsque une carte réseau discrète est utilisé (p.e.
Broadcom) au lieu d'Intel. Seulement les cartes réseaux Intel ont besoin d'une
région GBE dans la puce flash.

En assumant que votre image libreboot est nommée **libreboot.rom**, copier
le fichier **deblobbed\_descriptor.bin** où **libreboot.rom** est située puis
ensuite exécutez:

    # dd if=deblobbed_descriptor.bin of=libreboot.rom bs=12k count=1 conv=notrunc

Alternativement, si vous avez le fichier **deblobbed\_4kdescriptor.bin** (pas
de GBE défini), faites ceci:

    # dd if=deblobbed_4kdescriptor.bin of=libreboot.rom bs=4k count=1 conv=notrunc

L'utilitaire va aussi générer 4 fichier supplémentaires:

-   mkdescriptor.c
-   mkdescriptor.h
-   mkgbe.c
-   mkgbe.h

Ce sont des fichiers sources en C qui peuvent regénérer les mêmes structs Gbe
et Descriptor (de ich9deblob/ich9gen). Pour les utiliser, placez les dans
src/ich9gen/ dans ich9deblob, puis recompilez. L'exécutable **ich9gen**
nouvellement compilé sera capable de recréer les fichiers de 12Ko à partir de
rien, en se basant sur les structures en C, cette fois **sans** avoir besoin
d'un cliché mémoire factory.rom !

Vous devriez maintenant avor une image **libreboot.rom** contenant le
descripteur de 4K de correct et les régions GBE de 8Ko, qui seront ensuite
flashable sûrement.
Référez vous à [../install/\#flashrom](../install/#flashrom) sur comment la
flasher.

Utilitaire demefactory {#demefactory}
===================

Il prend un cliché mémoire factory.rom et désactive le ME/TPM, mais laisse la
région intacte. Ça rend aussi toutes les régions accessibles en
lecture/écriture.

La ME intéfère avec la lecture/écriture du flash dans flashrom, et le
descripteur par défaut verrouille quelques régions. L'idée est que cet outil
enlevera toutes ces restrictions.

Exécutez simplement (avec factory.rom dans le même répertoire):

    $ ./demefactory

Ça générera un fichier descripteur de 4Ko (seulement le descripteur, pas de
GBE). Insérez ça dans une image factory.rom (NOTE: faites ceci sur une copie.
Gardez le factory.rom original dans un endroit sûr):

    # dd if=demefactory_4kdescriptor.bin of=factory_nome.rom bs=4k count=1 conv=notrunc


AFAIRE: tester cela.\
AFAIRE: lenovobios (GM45 thinkpads) protège encore en lecture/écriture des
parties du flash. Modifier à l'intérieur le code assembleur. Note: le
factory.rom ( region BIOS) du lenovobios est dans un format compressé que vous
avez à extraire.
bios\_extract en amont ne marchera pas, mais le suivant a été dit dans dans
IRC sur freenode, canal \#coreboot:
    
    <roxfan> vimuser: try bios_extract with ffv patch http://patchwork.coreboot.org/patch/3444/
    <roxfan> or https://github.com/coreboot/bios_extract/blob/master/phoenix_extract.py
    <roxfan> what are you looking for specifically, btw?

    0x74: 0x9fff03e0 PR0: Warning: 0x003e0000-0x01ffffff is read-only.
    0x84: 0x81ff81f8 PR4: Warning: 0x001f8000-0x001fffff is locked.

Cas d'utilisation: une image factory.rom modifiée d'une façon qu'il n'y a
aucune protection de flash, rendant facile le changement usine/libreboot
depuis le logiciel, sans n'avoir plus à faire de désassemblage et de
reflashage externe à moins que vous bousillez l'appareil.

demefactory fait partie de la source de ich9deblob, trouvée dans
*resources/utilities/ich9deblob/*

Les sections ci-dessous sont adaptés (en majorités) de journaux de discussions
IRC concernant le début du développement sur comment enlever la ME sur le
GM45. Ils sont utiles en tant qu'historique. Ce n'aurait pas pu être possible
sans l'aide de sgsit.

Notes du début {#early_notes}
-----------

-   <http://www.intel.co.uk/content/dam/doc/datasheet/io-controller-hub-10-family-datasheet.pdf>
    la page 230 mentionne un mode descripteur et non-descripteur (qui enlève
    le GBE et la ME/AMT).
-   ~~**regarder la référence à HDA\_500 (désactiver la sécurité du
    descripteur)**~~
    est ce que le pin GPI033 attaché est sur le ICH9-M (X200). HDA\_SDO
    s'applique à des jeux de puces plus tardif (séries 6 ou plus haut.
    Désactiver la sécurité du descripteur désactive aussi l'ethernet d'après
    sgsit. La méthode de sgsit implique l'utilisation "d'attaches douces"
    (voyez les journaux IRC ci-dessous) au lieu de désactiver le descripteur.
-   **et la place du GPIO33 sur les x200: (c'était un lien externe. On le met
    plutôt ici à la place)**
    [images/x200/gpio33\_location.jpg](images/x200/gpio33_location.jpg) -
    c'est au dessus du nombre 7 dans TP37 (qui est au-dessus de la grande puce
    Intel en bas)
-   La fiche de caractéristiques techniques de la ME n'est peut être pas pour
    les appareils mobiles (NdT: on entend ordinateurs portables ici), mais ça
    ne change pas grand chose. Celle ci couvre et donne quelques détails sur
    le QM67 que le X201 utilise:
    <http://www.intel.co.uk/content/dam/www/public/us/en/documents/datasheets/6-chipset-c200-chipset-datasheet.pdf>

Puces flash {#flashchips}
-----------
-   Ordi portable X200 (Mocha-1):
    ICH9-M supplante les permissions ifd grâce à une attache connecté au pin
    GPIO33 (voyez les notes IRC ci-dessous)
    
    - Le X200 peut être trouvé avec n'importe quel des puces de flash
      suivantes:
        -   ATMEL AT26DF321-SU 72.26321.A01 - c'est une puce flash de 32Mbits
            (4Mo).
        -   MXIC (Macronix?) MX25L3205DM2I-12G 72.25325.A01 - idem
        -   MXIC (Macronix?) MX25L6405DMI-12G 41R0820AA - c'est une puce de
            64Mbits (8Mo)
        -   Winbond W25X64VSFIG 41R0820BA - idem

    sgsit dit que les X200 (Pecan-1) avec les puces flash de 64Mbits sont
    problablement celles avec AMT (à côte de la ME), avec que les puces
    32Mbits contiennent seulement la ME.

Notes de développement précoces {#early_development_notes}
-----------------------

    Start (hex) End (hex)   Length (hex)    Area Name
    ----------- ---------   ------------    ---------
    00000000    003FFFFF    00400000    Flash Image

    00000000    00000FFF    00001000    Descriptor Region
    00000004    0000000F    0000000C        Descriptor Map
    00000010    0000001B    0000000C        Component Section
    00000040    0000004F    00000010        Region Section
    00000060    0000006B    0000000C        Master Access Section
    00000060    00000063    00000004            CPU/BIOS
    00000064    00000067    00000004            Manageability Engine (ME)
    00000068    0000006B    00000004            GbE LAN
    00000100    00000103    00000004        ICH Strap 0
    00000104    00000107    00000004        ICH Strap 1
    00000200    00000203    00000004        MCH Strap 0
    00000EFC    00000EFF    00000004        Descriptor Map 2
    00000ED0    00000EF7    00000028        ME VSCC Table
    00000ED0    00000ED7    00000008            Flash device 1
    00000ED8    00000EDF    00000008            Flash device 2
    00000EE0    00000EE7    00000008            Flash device 3
    00000EE8    00000EEF    00000008            Flash device 4
    00000EF0    00000EF7    00000008            Flash device 5
    00000F00    00000FFF    00000100        OEM Section
    00001000    001F5FFF    001F5000    ME Region
    001F6000    001F7FFF    00002000    GbE Region
    001F8000    001FFFFF    00008000    PDR Region
    00200000    003FFFFF    00200000    BIOS Region

    Start (hex) End (hex)   Length (hex)    Area Name
    ----------- ---------   ------------    ---------
    00000000    003FFFFF    00400000    Flash Image

    00000000    00000FFF    00001000    Descriptor Region
    00000004    0000000F    0000000C        Descriptor Map
    00000010    0000001B    0000000C        Component Section
    00000040    0000004F    00000010        Region Section
    00000060    0000006B    0000000C        Master Access Section
    00000060    00000063    00000004            CPU/BIOS
    00000064    00000067    00000004            Manageability Engine (ME)
    00000068    0000006B    00000004            GbE LAN
    00000100    00000103    00000004        ICH Strap 0
    00000104    00000107    00000004        ICH Strap 1
    00000200    00000203    00000004        MCH Strap 0
    00000ED0    00000EF7    00000028        ME VSCC Table
    00000ED0    00000ED7    00000008            Flash device 1
    00000ED8    00000EDF    00000008            Flash device 2
    00000EE0    00000EE7    00000008            Flash device 3
    00000EE8    00000EEF    00000008            Flash device 4
    00000EF0    00000EF7    00000008            Flash device 5
    00000EFC    00000EFF    00000004        Descriptor Map 2
    00000F00    00000FFF    00000100        OEM Section
    00001000    00002FFF    00002000    GbE Region
    00003000    00202FFF    00200000    BIOS Region

    Build Settings
    --------------
    Flash Erase Size = 0x1000

Ces données ont été produites par un utilitaire nommé 'Flash Image Tool' pour
la ME version 4.x. Vous y faites glisser dedans une image complète et
l'utilitaire décompose les nombreux composants, vous permettant de mettre des
attaches douces.

Cet outil est propriétaire, pour Windows seulement, mais a été utilisé pour
déblob le X200. La fin a justifié les moyens, et l'utilitaire n'est désormais
plus nécessaires puisque l'utilitaire ich9deblob (documenté sur cette page)
peut être maitenant utilisé pour créer des descripteurs déblobés.

Région GBE (ethernet gigabit) dans la flash SPI {#gbe_region}
------------------------------------------

Sur le 8Ko, à peu près 95% est rempli avec 0xFF. Les données dans la région
GBE sont complétement documentées dans cette fiche technique publique:
<http://www.intel.co.uk/content/dam/doc/application-note/i-o-controller-hub-9m-82567lf-lm-v-nvm-map-appl-note.pdf>

Le seul véritable contenu trouvé était:

    00  1F  1F  1F  1F  1F  00  08  FF  FF  83  10  FF  FF  FF  FF  
    08  10  FF  FF  C3  10  EE  20  AA  17  F5  10  86  80  00  00  
    01  0D  00  00  00  00  05  06  20  30  00  0A  00  00  8B  8D  
    02  06  40  2B  43  00  00  00  F5  10  AD  BA  F5  10  BF  10  
    AD  BA  CB  10  AD  BA  AD  BA  00  00  00  00  00  00  00  00  
    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  
    00  01  00  40  28  12  07  40  FF  FF  FF  FF  FF  FF  FF  FF  
    FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  FF  D9  F0  
    20  60  1F  00  02  00  13  00  00  80  1D  00  FF  00  16  00  
    DD  CC  18  00  11  20  17  00  DD  DD  18  00  12  20  17  00  
    00  80  1D  00  00  00  1F  


La première partie est l'adresse MAC définie entièrement sur 0x1F.
C'est répété au milieu de la zone de 8Ko, et le reste est 0xFF.
Tout ceci est documenté dans la fiche technique.

La région GBe commence à l'octet 0x20A000 depuis la \*fin\* d'une image
d'usine et est longue de 0x2000 octets.
Dans libreboot (déblobé) le descripteur est configuré pour mettre le gbe
diectement après le descripteur flash initial de 4Ko. Donc les 4 premiers Ko
de la ROM correspondent au descripteurs et les 8Ko suivants à la région GBE.

The GBe region starts at 0x20A000 bytes from the \*end\* of a factory
image and is 0x2000 bytes long. In libreboot (deblobbed) the descriptor
is set to put gbe directly after the initial 4K flash descriptor. So the
first 4K of the ROM is the descriptor, and then the next 8K is the gbe
region.

### Région GBE: changer l'adresse MAC {#gbe\_region\_changemacaddress}

Selon la fiche technique, c'est supposé s'additionner jusqu'à 0xBABA mais ça
pourrait être en fait autre chose sur le X200.
<https://web.archive.org/web/20150912070329/https://communities.intel.com/community/wired/blog/2010/10/14/how-to-basic-eeprom-checksums>

*""Un de ces ingénieurs adore le rock classique, donc ils ont choisi 0xBABA*

En l'honneur de la musique *Baba O'Reilly* des *The Who*, apparement.
On n'invente pas des sornettes....

0x3ABA, 0x34BA, 0x40BA et plus ont été observé dans la région GBE principale
sur les clichés mémoires factory.rom des X200. Néanmoins, les sommes de contrôle des
régions de sauvegardes correspondent à BABA.

Par défaut, le X200 (fourni tel quel par Lenovo) a dans les faits, une somme
de contrôle du GBE invalide. La région de sauvegarde du GBE est correcte, et
c'est sur quoi les systèmes basent leurs défauts.
Basiquement, vous devriez faire ce dont vous avez besoin sur la région \*de
sauvergarde\* du gbe, puis ensuite corriger la principale en copiant depuis la
sauvegarde.

Regardez dans
[resources/utilities/ich9deblob/ich9deblob.c](../resources/utilities/ich9deblob/ich9deblob.c)

-   Ajoutez ensemble les premiers nombres hexadécimaux 0x3F (non signés) du
    descripteur GBe (en incluant la valeur de la somme de contrôle) et ça
    devrait s'additionner jusqu'à 0xBABA. En d'autres termes, la somme de
    contrôle est 0xBABA moins le total des premiers nombres hexadécimaux 0x3E
    (non signés), en ignorant tout débordement.

Région du descripteur flash {#flash_descriptor_region}
-----------------------

<http://www.intel.co.uk/content/dam/doc/datasheet/io-controller-hub-9-datasheet.pdf>
à partir de la 850. Ça explique tout ce qui ce trouve dans le descripteur
flash, on peut s'en servir pour comprendre ce que Libreboot fait en le
modifiant.

Comment déblober:

-   patcher le nombre de régions présentes dans le descripteur de 5 à 3:
        original = descripteur + bios + ME + GBE + plateforme
        modifié  = descripteur + bios + GBE
-   l'étape suivante est de patcher la partie du descripteur qui défini le
    début et la fin de chaque section.
-   puis "découper" la région GBE puis l'insérer juste après la région BIOSa
-   tout ceci peut être compris depuis les documents publics (fiche technique
    de l'ICH9)
-   la partie finale est d'inverser 2bits. Stopper la ME via 1 attache douce
    MCH et une ICH.
-   la partie du descripteur décrite là-dedans donne l'adresse de base et la
    longueur de chaque région (bits 12:24 de chaque adresse)
-   pour désactiver une région, vous définissez l'adresse de base sur 0xFFF et
    la longueur à 0.
-   et vous changez le nombre de régions de 4 (basées zéro) à 2.

Il y a un paramètre intéressant appelé 'ME Alternate disable', qui permet à la
ME de seulement prendre en charge les erreurs? matérielles dans le contrôleur
d'entrée/sortie, mais désactive tout autre fonctionnalité. C'est similaire à
"l'ignition" dans les séries 5 et plus haut mais en utilisant le micrologiciel
standard au lieu d'une petite version de 128Ko. Soit, c'est inutile pour
libreboot.

Pour déblobber le GM45, vous découpez et enlevez les régions ME et plateforme
puis corrigez les adresses dans flReg1-4.
Ensuite vous définissez 


There's an interesting parameter called 'ME Alternate disable', which
allows the ME to only handle hardware errata in the southbridge, but
disables any other functionality. This is similar to the 'ignition' in
the 5 series and higher but using the standard firmware instead of a
small 128K version. Useless for libreboot, though.

To deblob GM45, you chop out the platform and ME regions and correct the
addresses in flReg1-4. Then you set meDisable to 1 in ICHSTRAP0 and
MCHSTRAP0.

How to patch the descriptor from the factory.rom dump

-   map the first 4k into the struct (minus the gbe region)
-   set NR in FLMAP0 to 2 (from 4)
-   adjust BASE and LIMIT in flReg1,2,3,4 to reflect the new location of
    each region (or remove them in the case of Platform and ME)
-   set meDisable to 1/true in ICHSTRAP0 and MCHSTRAP0
-   extract the 8k GBe region and append that to the end of the 4k
    descriptor
-   output the 12k concatenated chunk
-   Then it can be dd'd into the first 12K part of a coreboot image.
-   the GBe region always starts 0x20A000 bytes from the end of the ROM

This means that libreboot's descriptor region will simply define the
following regions:

-   descriptor (4K)
-   gbe (8K)
-   bios (rest of flash chip. CBFS also set to occupy this whole size)

The data in the descriptor region is little endian, and it represents
bits 24:12 of the address (bits 12-24, written this way since bit 24 is
nearer to left than bit 12 in the binary representation).

So, *x << 12 = address*

If it's in descriptor mode, then the first 4 bytes will be 5A A5 F0 0F.

platform data partition in boot flash (factory.rom / lenovo bios) {#platform_data_region}
-----------------------------------------------------------------

Basically useless for libreboot, since it appears to be a blob. Removing
it didn't cause any issues in libreboot.

This is a 32K region from the factory image. It could be data
(non-functional) that the original Lenovo BIOS used, but we don't know.

It has only a 448 byte fragment different from 0x00 or 0xFF.

Copyright © 2014, 2015 Leah Rowe <info@minifree.org>\

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License Version 1.3 or any later
version published by the Free Software Foundation
with no Invariant Sections, no Front Cover Texts, and no Back Cover Texts.
A copy of this license is found in [../fdl-1.3.md](../fdl-1.3.md)