Compare commits
6066 Commits
Author | SHA1 | Date | |
---|---|---|---|
f2c32515ee | |||
c36cd07f9e | |||
2b6bb79fe4 | |||
561b8cc2e7 | |||
8ad0c86da2 | |||
593a4c32df | |||
16eb4031c6 | |||
9ec99342eb | |||
9bf0dd80a0 | |||
60108fd89d | |||
1e279a5cb2 | |||
efe27cf3f9 | |||
235a75128a | |||
ab87703c88 | |||
13c13623cf | |||
c6f24af160 | |||
1dd517c8dd | |||
55189c9d33 | |||
8e40275dab | |||
593124d520 | |||
878a7a7922 | |||
e03132a10a | |||
320d5528c3 | |||
7051707129 | |||
16849bbe0c | |||
1afe286367 | |||
4ca6368797 | |||
6b5bc77c9b | |||
a83c6bc907 | |||
deea25be1b | |||
50544a1999 | |||
edd38465a5 | |||
75476ec303 | |||
d6b682cf92 | |||
f5472a10c6 | |||
c844d14ca5 | |||
3263309ce5 | |||
0d0fe141a4 | |||
ec65adcf7e | |||
61b617c933 | |||
f0967a7e04 | |||
6d500a2476 | |||
4d472a76c7 | |||
ed849ed82c | |||
f00b337525 | |||
e5ec91b393 | |||
85cd9a1c93 | |||
bc41ccf12c | |||
137c5c4759 | |||
5ee19cda81 | |||
fbf3a47e42 | |||
674ad92923 | |||
7a0bcb7fb4 | |||
8dd1b21a88 | |||
8480c0b3f2 | |||
c49d7a3e63 | |||
7333a116b3 | |||
ea063cb975 | |||
2faeb11fcd | |||
29fbfcc472 | |||
192a12fb6a | |||
0cdc97cdd9 | |||
71a131415e | |||
f8f5650873 | |||
8211bde9c2 | |||
1efa7d9093 | |||
6cd6e71b71 | |||
d8abb266f4 | |||
e91af4dc15 | |||
f7b2fe6b64 | |||
36787b0e7b | |||
8741510d83 | |||
a7e06800d6 | |||
42eda83cf6 | |||
081c4d5e91 | |||
d72155d507 | |||
3a7346c729 | |||
16bc46c7ad | |||
231b251a3e | |||
e4fc65bf74 | |||
132384aa4c | |||
8c92bcc966 | |||
c409a3e585 | |||
bca848c84e | |||
b0800d3e41 | |||
d8bd3ff197 | |||
e8936747eb | |||
6d592c623f | |||
2b75ce2309 | |||
ad2d73b1d9 | |||
bbade24241 | |||
9f681d2d7c | |||
4ebe953090 | |||
40454b7b00 | |||
ac9590395e | |||
afd4c876a9 | |||
02363b5e46 | |||
56e3df459a | |||
e685107dd6 | |||
18e632f8b3 | |||
0985fba370 | |||
4a36cfb625 | |||
8c2872964a | |||
d9b2f7971a | |||
733ef79424 | |||
d4ad3f537f | |||
a4412d68d5 | |||
296ce46bcc | |||
07171b480c | |||
1d0b99ba1d | |||
314c716aff | |||
65cc80f740 | |||
6ad8352a3d | |||
e7a083ec3d | |||
4eadcb0537 | |||
df134c1873 | |||
b651032ea7 | |||
2b2f67fb7e | |||
57e37c5863 | |||
fcd9f36b6e | |||
0f4977705d | |||
5086ccef19 | |||
939cabfae4 | |||
13dee2a911 | |||
e01054d86e | |||
066007590f | |||
f87ff33a89 | |||
89ac87a976 | |||
7f9c064263 | |||
7ba4ada8af | |||
44e304abe1 | |||
bf59fac286 | |||
822148c5e7 | |||
fbcfefe5f3 | |||
f49f4d48ba | |||
576315e1be | |||
0e0fdbef1c | |||
11bce2059b | |||
095f927016 | |||
67c73110e9 | |||
336d9a2148 | |||
40a3888128 | |||
c0bff9755f | |||
56a5ebf48d | |||
bf4b7b0577 | |||
56eafbbc3a | |||
e5bcc72049 | |||
00367b2243 | |||
6099aa308b | |||
3a3fb365a9 | |||
fada3e56c4 | |||
76cedd2c29 | |||
e0844636ac | |||
6cc1e9e81e | |||
a298668b99 | |||
bc26e77170 | |||
819005332b | |||
eba32d217a | |||
8c4ad5b4a5 | |||
9d821fa1d1 | |||
f213f17992 | |||
076605bc92 | |||
7bab4c90a7 | |||
5687c98f75 | |||
8bd784eba5 | |||
dc78275993 | |||
b1859a6687 | |||
a268aac9e5 | |||
50c1f27069 | |||
806ea463db | |||
00a220877c | |||
e04c2c4527 | |||
4e48ac04da | |||
cf270f0d62 | |||
15070e7ea8 | |||
26679699cd | |||
f8f9b282b4 | |||
8fb221dbd5 | |||
d2b3e81095 | |||
d2b418bd33 | |||
2bb3e78066 | |||
89d2aa0cdc | |||
ed7d91d257 | |||
6468d87dde | |||
f87ad9225c | |||
d2bbc68fa3 | |||
066e61f3ea | |||
ad87d1c8b9 | |||
2ec1c13ac4 | |||
b887adf7a5 | |||
3e42ee05d8 | |||
e4c81bcca5 | |||
1234925ad7 | |||
38df060aba | |||
09f60ff0e2 | |||
4cf3af49ca | |||
f771b1669b | |||
89e51e6178 | |||
b468f9b9ea | |||
5874c7831c | |||
7be0df8dd3 | |||
1d17529954 | |||
ed6eb2713a | |||
de13519ca5 | |||
c1adeb68a0 | |||
7d18f88c6d | |||
0025f777ed | |||
09a106907e | |||
d991bf1fb4 | |||
f86c3265e8 | |||
e11072e6c7 | |||
7023174b88 | |||
a67cc5f5e8 | |||
2d0ee36913 | |||
ef1c968374 | |||
6449b67427 | |||
da5e07e6c7 | |||
ac08c81836 | |||
d149f1db69 | |||
30322785c4 | |||
a4f8e40663 | |||
0d6cc22017 | |||
4c7bc8db74 | |||
52e56e8479 | |||
804a34022c | |||
d82faa8ea3 | |||
ca4ff25290 | |||
b9d2e228b6 | |||
73ae076e95 | |||
8b6dfdeb20 | |||
7b2646536a | |||
b30d054584 | |||
a15eaec1e6 | |||
798fd4b69f | |||
b8a0cd11c6 | |||
c712144124 | |||
8d09cf6186 | |||
f60a8f02c5 | |||
a02bf7468a | |||
3c3a760513 | |||
c98f2eacfc | |||
7724f1142e | |||
2d7173d462 | |||
fdbdca2ec3 | |||
24a65f8019 | |||
e0b7a88f58 | |||
3b9d995ecb | |||
5fcfbe1481 | |||
c00f74a82c | |||
04a2edf689 | |||
98a47ac9b5 | |||
247d027a4f | |||
7fb6a6a6c9 | |||
fa0e8b5e92 | |||
0eabe139e5 | |||
69c2811acc | |||
173c7c4594 | |||
a0284db08d | |||
73716d0e92 | |||
38206886e6 | |||
00961676fd | |||
4e06c6eeb1 | |||
b8bfe142c6 | |||
4cea00a64f | |||
c7f473642a | |||
a932f6e507 | |||
6c1a669b44 | |||
6f028e7993 | |||
26afd648a1 | |||
6ba3a0758f | |||
577db029a0 | |||
d7a6d61d51 | |||
4e300cc780 | |||
8939d28f16 | |||
c2af6097c2 | |||
ab90782e72 | |||
60e0dc3919 | |||
318e5830db | |||
d4ef9a4485 | |||
9094410158 | |||
4e8b639703 | |||
2bfce48b6e | |||
39288038f6 | |||
30bc5b3131 | |||
47cdf430e4 | |||
91a7abf25c | |||
f9392990d5 | |||
2c213d35b0 | |||
f510c75d64 | |||
edfc5a9df5 | |||
45f06c56ca | |||
f9e6d3e050 | |||
f9c4a8dd3f | |||
10757897c0 | |||
4667322628 | |||
ca928c6768 | |||
3ae3ff2828 | |||
fa52f31e11 | |||
eb148d88d1 | |||
cd41fa378d | |||
f98bbda5fb | |||
64f477b401 | |||
52f8926159 | |||
088b9e337c | |||
69c0469bb9 | |||
d7d22a4a53 | |||
80b464af18 | |||
8df012775d | |||
a57240687f | |||
c97bb64aad | |||
1463c56139 | |||
029b5432a1 | |||
f0ebaf2260 | |||
338fd9ad30 | |||
7536a398e9 | |||
ec3dafd97c | |||
3b54fdf282 | |||
8220c4b778 | |||
4fc17b47a4 | |||
0f6e652f39 | |||
00296ea96f | |||
5b5c233e90 | |||
d14d03a6a8 | |||
0f007d8ceb | |||
f939df7a95 | |||
9e1a49cea5 | |||
c82aabca01 | |||
a1cd7eb93e | |||
590bdc649e | |||
d1130af40e | |||
ef0cb90ae3 | |||
5b574e1c85 | |||
c486c78020 | |||
0ee9b14c09 | |||
d2b2be3929 | |||
007faee948 | |||
d1e0a466d3 | |||
d31c150f81 | |||
979c8c7cae | |||
8745a2743c | |||
8536072346 | |||
ec926e0803 | |||
febe5b8a01 | |||
168d8a49b6 | |||
b4a0ec5284 | |||
ae48b42683 | |||
8c82010c97 | |||
6093c5099f | |||
78feacc440 | |||
7bcd9a1d91 | |||
fd50aea03e | |||
780639b4ed | |||
1a82923fd2 | |||
2f7f0c62fd | |||
2f58a007a7 | |||
db4f3bacce | |||
49f63e0aa1 | |||
fcfca1da5e | |||
34d9e68ff9 | |||
d6f7ec5f44 | |||
184b1ce171 | |||
fadd6353db | |||
b45912f453 | |||
cd23084284 | |||
bd2dc2b764 | |||
9a521d7125 | |||
8ebbe17b86 | |||
5d76958de1 | |||
e37d1f724a | |||
dddb9a85bd | |||
2f96970e1f | |||
6d9dc243c7 | |||
ddb3359754 | |||
dec73da3c2 | |||
e8ac242e65 | |||
7e78e56c34 | |||
740c29a478 | |||
988a273396 | |||
6edfa654d2 | |||
9e0b28cbe5 | |||
5632841c82 | |||
0b682636f3 | |||
956f56d645 | |||
a4faec3b01 | |||
cfdac82661 | |||
b26f792d72 | |||
21a4053fde | |||
d9f26edfec | |||
5feef37de8 | |||
16a29e53ff | |||
1f3055aa36 | |||
38b349cb35 | |||
93193a0f09 | |||
b77963c423 | |||
eec30f7bea | |||
7778e5c55f | |||
86803784d3 | |||
4cd150f5b5 | |||
5171960b23 | |||
21530bd421 | |||
abaa1de93b | |||
e7f176cd61 | |||
4ac376a67b | |||
b8d083ec74 | |||
9138eee4f7 | |||
f3003657a0 | |||
ca584085d7 | |||
e8abb5ab88 | |||
52353d09fc | |||
47a0832f82 | |||
7ae833bdaa | |||
cea0d9c0ff | |||
9d25207aaf | |||
ef5ff0b49a | |||
aa832c19b2 | |||
c5028b2e86 | |||
962c788861 | |||
89eef55718 | |||
a28e3fb694 | |||
e6b0a32cb3 | |||
b81147cb56 | |||
85801f670d | |||
2246216971 | |||
fe7c2b996b | |||
fb8823ddaa | |||
7691ebc379 | |||
52f18df1e3 | |||
04a8cfbbc0 | |||
1b457f8517 | |||
4ec683d077 | |||
a48e711120 | |||
9a3486e018 | |||
4a8cd72c05 | |||
6f48df1deb | |||
c423293d20 | |||
da38715ec3 | |||
816c5cb9fc | |||
8af30ab576 | |||
c84babb8e0 | |||
116cd21837 | |||
4af269171c | |||
82e0a81cf1 | |||
ab0da17856 | |||
85ecdb1471 | |||
38e386f2d0 | |||
ce39ba97bc | |||
229d5b2f46 | |||
101f454596 | |||
f3dbf4ce6b | |||
8920ee0dcc | |||
da42724549 | |||
c42cf911ad | |||
8e66b23b35 | |||
5e1326a7d6 | |||
3814116b42 | |||
97e4422a58 | |||
5c27182366 | |||
cae9887996 | |||
d06a606915 | |||
fc9302465b | |||
64ba44f7fb | |||
3e7633a6fe | |||
e9605bb153 | |||
069cd67854 | |||
9e3e49234d | |||
ab734d8c05 | |||
18f888598d | |||
75f4776610 | |||
3acf43c336 | |||
5d8ad8598b | |||
b7c11c6953 | |||
6f1494b252 | |||
d6d9a4e8c5 | |||
0e2d515b99 | |||
365f52eb1f | |||
901cb9ca46 | |||
4fc59af03d | |||
dff56a056c | |||
622c6b84ab | |||
3ed55e5da1 | |||
1e06611768 | |||
a95907b066 | |||
b2634c1f98 | |||
afa71b6113 | |||
c049572385 | |||
74bee3c8ad | |||
7d30418605 | |||
90b8339b8d | |||
43126edc3a | |||
e8ffa9ffd3 | |||
e26da8ba16 | |||
ffe26b6c1a | |||
77410efebf | |||
0b9ed92c40 | |||
56360d4f7b | |||
b95a1a4ea0 | |||
11278dbabe | |||
53525771f0 | |||
e433bccb86 | |||
b438dab367 | |||
3980132987 | |||
df5b051e6d | |||
56473ca9a7 | |||
14929253a5 | |||
374d7c2e94 | |||
0b50099c8b | |||
68da241ba4 | |||
31fef3f6f8 | |||
6d2a51eb85 | |||
63be06008d | |||
9ff2af2b47 | |||
5a73fc35e2 | |||
0c70b4ac11 | |||
1ad73926f2 | |||
609b7fb303 | |||
b894ad5233 | |||
4f176913c1 | |||
ef43711aad | |||
aee0baf069 | |||
17277ff658 | |||
72d9366721 | |||
9e0dd9af47 | |||
afc593d99c | |||
3fe5f2cfa4 | |||
53e82f67ea | |||
3ba64ca3d1 | |||
aecbe7a988 | |||
71e2b2903a | |||
0fdd9fd2aa | |||
895c77f361 | |||
a6b887e017 | |||
3e4f7a39f8 | |||
dd662870dd | |||
05d4bf7ea7 | |||
48d5b8d463 | |||
abc17d10d6 | |||
efc3d04af2 | |||
4f771fe98b | |||
dd1a0acc4a | |||
15161d9284 | |||
26ea43a5c2 | |||
633a36af58 | |||
d0c0fd736f | |||
53ac68e551 | |||
e3bf8ba2d8 | |||
5943117647 | |||
ba41ee1f0a | |||
5926fb5035 | |||
56a25a98db | |||
65535332db | |||
fc8867c3d8 | |||
45a354fe78 | |||
c68902c210 | |||
287cf6c7d1 | |||
bc885c194c | |||
56a3ef2e74 | |||
c02bda0f06 | |||
2255ebaa23 | |||
c6f5b05cf3 | |||
06684979f9 | |||
3639f38171 | |||
999001144f | |||
3907a64a48 | |||
4ed96f2443 | |||
d2d93829bb | |||
d6b7236732 | |||
a67c753d55 | |||
da968d5f2e | |||
d7564dc1b9 | |||
9225fd5040 | |||
9a90a439a2 | |||
083379d0f8 | |||
32107dffb7 | |||
2a203c50ef | |||
3dff32c804 | |||
fd8de1860d | |||
a0722870a8 | |||
cf0d1c3164 | |||
d38108f26f | |||
30ab312322 | |||
e9eb4d5df9 | |||
ea9787a6b2 | |||
e6d1c7fae8 | |||
4d319c3d09 | |||
7eed98ac88 | |||
2f8ba69b0e | |||
a461b694a6 | |||
9734325f45 | |||
c2e796290a | |||
db2c8dfecb | |||
17419ff948 | |||
3408a0ef0c | |||
408fdeba7f | |||
b2f8ce7591 | |||
6670f44cd0 | |||
a6cf8d6465 | |||
e6c04b9255 | |||
a895c32242 | |||
af0f410c70 | |||
961658f3dc | |||
eb00e8722b | |||
25d20d3332 | |||
200f02a518 | |||
ef6eceea56 | |||
dc98bed869 | |||
00058f513e | |||
72e987d540 | |||
e0b41fd12e | |||
5b06ffea56 | |||
ce2399a446 | |||
182d7bae47 | |||
b98c89626e | |||
869ac71483 | |||
7daf3cd32e | |||
192666f352 | |||
66579d4e36 | |||
ecaa2d4741 | |||
7b28801223 | |||
2f399b7d5b | |||
540af09602 | |||
1b7fc32a54 | |||
16f6aa81b6 | |||
230e4f9df2 | |||
fabfe9da77 | |||
32abdd66a8 | |||
80d9238610 | |||
f5627e8454 | |||
f94ac9ad7d | |||
c3f58f6aca | |||
0612b27b9d | |||
ba38f37d18 | |||
3bd1e3db9c | |||
8559277fc9 | |||
6bc1374e2d | |||
47f26dbe15 | |||
2712398a69 | |||
d28443e5c6 | |||
08b5280c9f | |||
2e8a4b0498 | |||
d9d1d20c97 | |||
11ba353806 | |||
b5a2a52bee | |||
952f6b0a77 | |||
feedf23de0 | |||
96d93d142e | |||
e816d807b9 | |||
2e53038cf9 | |||
7caffce31f | |||
68dd0d53d6 | |||
94d079ac5d | |||
cc98db367c | |||
141402dfc7 | |||
c31c09fe0e | |||
57566307a8 | |||
8d0e929efd | |||
163030bcd3 | |||
ef975087cd | |||
378a955d1b | |||
af4ecc24d4 | |||
b6636b0ea8 | |||
4d94ae4cfb | |||
16c851fa9a | |||
62079a595e | |||
34b707ff63 | |||
8a7d786b5b | |||
9b10c098cc | |||
b40546ed4b | |||
fb95ff8d50 | |||
e3218a2d4a | |||
2de6bdf857 | |||
6bc1b92977 | |||
54c5472f3f | |||
64b5d974d5 | |||
58c0d32ca8 | |||
8a3453fc86 | |||
bbc99cfe36 | |||
1ddb894e69 | |||
5f249e60f9 | |||
f4a99550e4 | |||
a2ee761bfb | |||
3e9cd53bbc | |||
236c637180 | |||
3fe302edfe | |||
b04c2f8ea9 | |||
5f1bf2f905 | |||
60ec3656eb | |||
93bcf24795 | |||
1d5192894f | |||
b6a523927d | |||
e8d483923b | |||
a0e72c4867 | |||
04da5d72d9 | |||
52a9599d07 | |||
a5c27096a4 | |||
e67ab180fb | |||
7c1d70e8e2 | |||
5de47d0323 | |||
dd9c09d342 | |||
560796c750 | |||
b1c8369c19 | |||
fc0af1e183 | |||
32859fccc6 | |||
4b42983c7a | |||
ae593879f5 | |||
210a00872e | |||
205df70eb2 | |||
338c8d4b37 | |||
11cfcdd784 | |||
667d8af08a | |||
92646ea3e3 | |||
deeccbf4e9 | |||
7c45c8363d | |||
37f3d7bb70 | |||
118a9c7b03 | |||
986d50ea47 | |||
d32b6dee6b | |||
6ad917606c | |||
7544e2fc2c | |||
53e528a607 | |||
f4702c297d | |||
08d9f9562e | |||
89ab2503c9 | |||
a21dff6799 | |||
30a511cea6 | |||
381c4eb53b | |||
2dfba3708e | |||
8dcc818b40 | |||
c80e350089 | |||
ec9eb64f4c | |||
585495e887 | |||
08da24e059 | |||
0c58dc6ce3 | |||
652dce4d1f | |||
2c82fe3a4c | |||
f149d4cd64 | |||
4f2dacbf7f | |||
274a037f08 | |||
7a400e2185 | |||
1f35dae585 | |||
5c59680e7a | |||
1731d46ddc | |||
e4cce3fb36 | |||
0fcb1b826c | |||
09481b1b86 | |||
85bf79d31f | |||
b67e979f48 | |||
c74dae927a | |||
f23ae0b0f6 | |||
a019524d35 | |||
3ef916fa1b | |||
182dbdeac4 | |||
8670e829a8 | |||
ebda03ea56 | |||
b706ab379f | |||
d61350c403 | |||
adbb224f5a | |||
bb8b23eeaf | |||
1d6e07348a | |||
c0b028f205 | |||
bf6b7bf60c | |||
a2804781fe | |||
8fbfcc3a06 | |||
0d58e64ddf | |||
e7dc4f40ef | |||
d957d12e6d | |||
e4c784bd0d | |||
ae01122b57 | |||
b54c5168bd | |||
8ff2ecd344 | |||
c72f5f74a8 | |||
a372f8ae86 | |||
8f42472faa | |||
79b35019a3 | |||
5bbef4bd1b | |||
affd771ba3 | |||
e91883f545 | |||
fd054bc7d4 | |||
33f89eea9f | |||
6b059eac5e | |||
348f9f0ad2 | |||
41c4eb5fa6 | |||
ae51bb4ba9 | |||
93fcf37017 | |||
c19c704c02 | |||
28f727b59b | |||
c821f00b51 | |||
948a5d0310 | |||
53e24468f0 | |||
38641aa8b4 | |||
68680dd7cd | |||
35bff432e5 | |||
5b1f335ef8 | |||
3c57819005 | |||
dba3229b90 | |||
737e56aa56 | |||
5646a648df | |||
da1b088885 | |||
ce48284978 | |||
23a82e87ee | |||
555c9b6268 | |||
a23e0c9d74 | |||
51ce41c0e6 | |||
5117c27cc1 | |||
00eb7d7bda | |||
8dcadc9189 | |||
3e666898cd | |||
45808399fc | |||
12eef084fd | |||
7774de53d4 | |||
e8fcf1bf8d | |||
4c0432ae65 | |||
03a3404d5b | |||
b8b8ec8323 | |||
175ffd827a | |||
6343cd846a | |||
14cf3245fe | |||
516967c681 | |||
b40e780f8b | |||
ddd4f9a717 | |||
9f5c8503d1 | |||
f02bf35e00 | |||
516c0a5338 | |||
bad08c2c29 | |||
ea861ce831 | |||
61ba3ac92e | |||
98f609aad4 | |||
6269636418 | |||
cfaf4c7ac8 | |||
8602fb7f65 | |||
eff1306ea4 | |||
c79e96b4eb | |||
6b7bbc2b78 | |||
8a6e036861 | |||
e5565c45cb | |||
991ee05de9 | |||
0c0b16ac9e | |||
95cdd9f21b | |||
98b78efabe | |||
7e269ad06c | |||
bf7d6f1a82 | |||
0a9650c1d4 | |||
1908340b69 | |||
f79f8b4e33 | |||
654d9d6b36 | |||
d8bff383c2 | |||
3a1a037231 | |||
97bd2a7f33 | |||
91dddd47b3 | |||
fc932374a2 | |||
bc83738301 | |||
d47afe90ef | |||
d72cca0c44 | |||
1e40a11577 | |||
5d841e6a17 | |||
b0b25c8e9c | |||
9af0b15e95 | |||
c2e46420cc | |||
8107c81e07 | |||
de349ed45c | |||
044b49c381 | |||
6e50849b8c | |||
b49e210984 | |||
4554942c8c | |||
eb30e1a9aa | |||
8cb5c30c2a | |||
79dfa909bb | |||
ddb4cf08f7 | |||
1eea1dd7d7 | |||
512b77abb5 | |||
dd7acaad27 | |||
18fd26cb08 | |||
f0619f47c3 | |||
90557f4a4b | |||
d4e9978793 | |||
1b325dd971 | |||
7b42bba3cf | |||
2e410757ef | |||
b75bcc978a | |||
5e5d9c2d1b | |||
9ed5a36e98 | |||
aa56c11b19 | |||
bfa8166b71 | |||
8a7aff4b0b | |||
8bf921c32f | |||
69e1714dd2 | |||
394ac5b33e | |||
ca2f68abed | |||
5fd50b6b19 | |||
098240eb4f | |||
0c3936e41b | |||
a38fee31b5 | |||
07609028ec | |||
efbed263df | |||
29f391ec8f | |||
a6c8b4becb | |||
2a0a02f98f | |||
0e1380683f | |||
d08bc5ad7a | |||
2a82f744d4 | |||
335384d2b7 | |||
403f215cb4 | |||
662da6cf7b | |||
a1b15172d7 | |||
5e20c1cbc8 | |||
65f05505a6 | |||
48409b8229 | |||
df09bdb726 | |||
5271776689 | |||
b84c616750 | |||
612a867677 | |||
4f012694dd | |||
b43d74a798 | |||
9e71fdd506 | |||
e680caa298 | |||
34d8036333 | |||
dafcc7a26d | |||
a616a4be36 | |||
4cc2cacd33 | |||
17a478c854 | |||
26dc8f2c4e | |||
ba5062d78b | |||
2e4bc06b49 | |||
9550e97304 | |||
a956063e5f | |||
ebb7f54b1a | |||
3180af7fd6 | |||
825332d3c9 | |||
6e5aabd58a | |||
4d177e47c3 | |||
8e46d42009 | |||
c04871a398 | |||
d07ac8ee13 | |||
e47132be66 | |||
53ec8c5722 | |||
bed7ad9cd3 | |||
c0be410760 | |||
53c1717dc1 | |||
e98f6af77b | |||
cc85ce0aa0 | |||
4bd6927388 | |||
c632bda2f6 | |||
4629830b73 | |||
3fbd2af112 | |||
208318cdf4 | |||
89ae6b8fc2 | |||
a6a64183d6 | |||
80037f715c | |||
5c1baf5bec | |||
2b5c1e73a5 | |||
7f6586ff78 | |||
0e47ad6d2c | |||
be3979c873 | |||
09eb8d0c9b | |||
ece6b2fc8a | |||
143309fad4 | |||
66f569f4ae | |||
66671ded2f | |||
c91b93f22a | |||
8d7afcca36 | |||
aee7ab2f6e | |||
140a4ae7bf | |||
205a5620af | |||
6ebb7394f9 | |||
12b86b6433 | |||
6975e07997 | |||
79a219813b | |||
97ea709d42 | |||
a5b0bc4b34 | |||
e9aef1fe45 | |||
0fd179aeb1 | |||
77e0baa6e9 | |||
0beddb5e23 | |||
b3884dc59b | |||
cf8602b453 | |||
117ee71698 | |||
10d522133e | |||
96cf680c3d | |||
dbcb0ce5e9 | |||
838fbc71cf | |||
8ca1ada083 | |||
064c7999ae | |||
903d9a225e | |||
59e6f3c6e3 | |||
bf48f6ab11 | |||
a1c82c5ebe | |||
12b835050f | |||
70ea3b9141 | |||
78b43c8990 | |||
3d5d6e8dc7 | |||
64402bbeb8 | |||
c67e4db2dc | |||
610b3d7a33 | |||
4130eb5f04 | |||
2144bb569d | |||
1fffa4ecec | |||
957481c307 | |||
dc2d07cf42 | |||
260ba6b25e | |||
34473ea6c9 | |||
e82b02c004 | |||
44eeed0e5c | |||
81877365d5 | |||
df248f0c10 | |||
5baadba532 | |||
9d49598cd6 | |||
505fe3d73c | |||
7c49cb8f9c | |||
1cd7d3e664 | |||
dc1c30ac17 | |||
5529231598 | |||
b6b8575c0a | |||
7eeaeeecc5 | |||
11637452cc | |||
31b081a48d | |||
c4917775fd | |||
00cc4c9455 | |||
117a66070a | |||
b0b3219666 | |||
223a30ce11 | |||
1c6d8a9cf4 | |||
078bc41ce2 | |||
a2fe7789e9 | |||
a808d63cd1 | |||
5f2adfe1a3 | |||
53a9e41891 | |||
3b618bbe31 | |||
af505671a1 | |||
4017de0d10 | |||
ba37b94e8e | |||
f3f36faf35 | |||
8e04a1762b | |||
69cfbb0750 | |||
cbae2e401e | |||
7790cb680a | |||
0ae21ff7ff | |||
789bdc3d9b | |||
bc25a361dc | |||
1af482c9c9 | |||
b6e2afb1ff | |||
bfb0f755b9 | |||
2974ec2cbf | |||
2d977b2dcb | |||
2190a632e0 | |||
9c6274cd8f | |||
1429092d02 | |||
672f7d7b2d | |||
d3dab12244 | |||
9952e72d06 | |||
fe8170f909 | |||
e6cff0d830 | |||
8676c268a0 | |||
3c78445ad9 | |||
e32ded82f0 | |||
7da602ff47 | |||
aff7d1f864 | |||
e98af86a2e | |||
f80c5d9133 | |||
d5a65304c0 | |||
dca20cd77f | |||
2395425653 | |||
db992acb73 | |||
2cf9d3883c | |||
b159d443dd | |||
b4d9f229d4 | |||
6b88f90f06 | |||
e7a5062997 | |||
0d1366dedc | |||
01b6b245f0 | |||
75afc79aae | |||
6d6fb6bdd2 | |||
2f62a352ea | |||
2677e2dbf6 | |||
93b0c7cfc6 | |||
03abf8dbd1 | |||
083e4ef1ef | |||
59c7cb7d37 | |||
d16187ed2a | |||
39ff703aa9 | |||
099975debd | |||
ee1739cd00 | |||
a8305e74a2 | |||
31b7ee4201 | |||
95de2317c6 | |||
2aff3005e0 | |||
fdd5afde49 | |||
5ddce58bff | |||
d789b658f7 | |||
842dd3328d | |||
f897623aac | |||
fac491dab7 | |||
599bc6070d | |||
dd57ac2f35 | |||
9f11185920 | |||
655dba4055 | |||
4d5fd77cf8 | |||
cb1e386eab | |||
a6bff2d8ab | |||
4b9fa2d6ea | |||
1db5bc7dac | |||
3663d55a23 | |||
1f4f0b47f5 | |||
aeaeeb7687 | |||
ee47fe42f5 | |||
6e5693386b | |||
f354c8c625 | |||
136e0cbbc1 | |||
f9c6a8821f | |||
c04757b108 | |||
dabc0adb3a | |||
22d5b07160 | |||
6daa8c3ba5 | |||
49111cd2ba | |||
a7ec42619c | |||
4f8b00602c | |||
d1f3022ebf | |||
396bb46e7d | |||
84b4882b99 | |||
9a2922871d | |||
18129f919a | |||
6f785b0f62 | |||
f787e87145 | |||
ccde6be13a | |||
5f26d8cb4a | |||
cb858d6d62 | |||
6dc488a678 | |||
a02f00e5d6 | |||
fe2a4c1001 | |||
6bc471461b | |||
c34bb3807c | |||
35d7843799 | |||
840bef061f | |||
a53dbd4780 | |||
0965044c99 | |||
04e0712f46 | |||
66815114cf | |||
2bd2be545f | |||
fc59f0860b | |||
9006df98c7 | |||
e3a1386694 | |||
149620fdfd | |||
3002eb42ed | |||
f4cfefe788 | |||
e13bc1c12c | |||
8273e13a11 | |||
8355aa4de2 | |||
1645ecc8f6 | |||
5674bf15f9 | |||
69a88ddb5d | |||
47ac6355b3 | |||
56a74bca69 | |||
ecb0e409a4 | |||
a51f490870 | |||
aa6a8fb919 | |||
b7731574f4 | |||
2d65608733 | |||
2c18ba5bd7 | |||
54e9894353 | |||
49fb39b783 | |||
79f7fcc927 | |||
b863468533 | |||
549a33091a | |||
0266be0d2b | |||
8fb7cd4123 | |||
b9f9f6c12b | |||
48be6b276a | |||
dcd3d072d4 | |||
2b4ded0be8 | |||
01ec713c26 | |||
f6f54dd3fa | |||
cd0a5fcafc | |||
45473dd370 | |||
0afd3f41d6 | |||
4ebe6dff1a | |||
c83c5af3ae | |||
2c208bddc9 | |||
8499f7fb1b | |||
3bc41cf7b4 | |||
fa0bdd9ee0 | |||
83565dea86 | |||
9d422ef381 | |||
d903fffbc9 | |||
acabbce229 | |||
915d1eaeae | |||
f8cd291344 | |||
4ce52903b0 | |||
9f3e734e5c | |||
ef613b97cf | |||
de74842049 | |||
e612418221 | |||
c97bf6fdb4 | |||
9900cf8009 | |||
7e303581bc | |||
7b6a82dc1a | |||
b3bfb2a1a7 | |||
ac7d6b409e | |||
3d676f147e | |||
d0ee87032a | |||
a317353f42 | |||
a3eb3df01c | |||
3cd4327ad9 | |||
682b166886 | |||
7fc6847dd6 | |||
97fe371b9f | |||
58cf6030f5 | |||
94b032ee5e | |||
34944be317 | |||
dd3604422f | |||
4ed2598c67 | |||
c96f802f7f | |||
7f9ceef51b | |||
8034813581 | |||
9a2021c09b | |||
7fa1d9de5c | |||
11bf9df9ac | |||
ffcf641cc4 | |||
cf4ede85f9 | |||
6e61c5ec00 | |||
fd2d4730c6 | |||
69dd524993 | |||
447e339656 | |||
d3b4de7bea | |||
8247cc3328 | |||
8488853fab | |||
dbc958495d | |||
75985f1d0c | |||
8f89549d3c | |||
e425a09d6a | |||
e0060a80f0 | |||
04b02069e2 | |||
8e6fde0157 | |||
0c526386f4 | |||
b2ecc572de | |||
04571d8dbe | |||
25930f4a3f | |||
998737df71 | |||
bb65180ee8 | |||
3b89ebd891 | |||
6704049fc9 | |||
44fc40e091 | |||
1e67a04ff6 | |||
1f088c8757 | |||
5e5e789f9b | |||
efc4be6bf1 | |||
ad64781dee | |||
17dda3adb3 | |||
11f0079c5a | |||
d1e50f9e9f | |||
e342cd3322 | |||
0a2a670502 | |||
0a3d4e0ca0 | |||
864dc3b008 | |||
ce603d5911 | |||
eded500e3c | |||
8bee86ef23 | |||
e0b74a142c | |||
6a8cde4927 | |||
eb6887e1b6 | |||
6e9f42bed9 | |||
a608dd80d5 | |||
a839581855 | |||
c156b584ee | |||
53e282acc0 | |||
b753006f38 | |||
b5b5490bbd | |||
9364afd3c0 | |||
8d5c17389a | |||
c46dd39541 | |||
257cc4f9c3 | |||
e7dd380402 | |||
7325ac5740 | |||
446e4dc238 | |||
761dbe228d | |||
ee37c39a43 | |||
79ccc69332 | |||
f3161df2eb | |||
e5b2453f91 | |||
573481bf6f | |||
63266c7e66 | |||
4af0adb443 | |||
fdccfc6267 | |||
2d7bb7e141 | |||
abd02cc1ca | |||
c6ab2ffaa0 | |||
8187f11d1a | |||
63cdea2b2d | |||
f0303dbf91 | |||
7b98e3ebfc | |||
3a02147d22 | |||
9a768be0a5 | |||
af681b62a0 | |||
b3fa6a03a8 | |||
d615230cce | |||
632e241468 | |||
7671bce33b | |||
3e576739c9 | |||
dc1596c8c8 | |||
3a7a3390f5 | |||
aa3b5e29f2 | |||
bd6bdc5c1d | |||
73704533d6 | |||
1c2313d339 | |||
c052ba0ac1 | |||
8e9801380b | |||
2f3c37bd62 | |||
2b9004de60 | |||
3fa3bf97e5 | |||
872fced41d | |||
ce62238998 | |||
7af59f709a | |||
eaba79cc66 | |||
528ae9e811 | |||
23f870ad3a | |||
dbc90df35d | |||
c4a8c48b2f | |||
4062b6a3b1 | |||
c105d9ab3f | |||
10615996cc | |||
b61a4da5ec | |||
70282aece0 | |||
e5e24107f9 | |||
56a0c2579d | |||
cfe1016883 | |||
59e7a43f9a | |||
cb06cfeca6 | |||
1ee3dbc63b | |||
c8b0f31ca1 | |||
d778b3bc90 | |||
2a6140ea85 | |||
9ab4dc32b4 | |||
a1d7db8215 | |||
c0380a24e8 | |||
68cd0d0b2c | |||
7ef06b0234 | |||
310623b2dd | |||
4d9dd22bd1 | |||
0751d7bded | |||
24a974a8cb | |||
c2a2d2ba26 | |||
aaf28d2507 | |||
792fd51b14 | |||
977b8e83cb | |||
e1498ce6da | |||
56626cf5d8 | |||
3db439eb1a | |||
1ac2cc253b | |||
2f55726609 | |||
6d295ac950 | |||
4c28ccd0dc | |||
084233bbb6 | |||
9bffbc0873 | |||
fa043c4e9d | |||
d51665600e | |||
9ed10bff31 | |||
a5f8b8c806 | |||
1ad159094b | |||
6f1bebe984 | |||
b7fb24677c | |||
dba6c4cfc0 | |||
de36d7ebfa | |||
1bfd56cb25 | |||
fdba0cd6af | |||
1f9112f798 | |||
d5a67aa4a4 | |||
6130ad26b7 | |||
6424ac9232 | |||
44f558ec26 | |||
dfd3f21174 | |||
741dec4681 | |||
71090c6063 | |||
4f81bba18b | |||
646109a4ea | |||
e53f8c9025 | |||
68bb307418 | |||
d2bba86bf7 | |||
1c8e464e36 | |||
4311d9f852 | |||
71b1ed8f77 | |||
1f220a9da7 | |||
41de2a08ec | |||
3f4af0da93 | |||
7e8998466f | |||
00b7533629 | |||
e5c1aa69c7 | |||
9318d6d625 | |||
75cd6d2a97 | |||
5f6cfef424 | |||
32fecd689b | |||
8297fa1e20 | |||
6a4f46ac5e | |||
c44d1e2c7c | |||
2119d0ba43 | |||
ebdf298ec2 | |||
24c1f94258 | |||
541498be0a | |||
dddd5cca75 | |||
a185665de4 | |||
0bed4c84cc | |||
0dcbcd3191 | |||
bb45f38eb9 | |||
6ed9df448b | |||
c896df7f15 | |||
e3229a5192 | |||
44db2f6012 | |||
938ae2655f | |||
d6cb3bc942 | |||
9d667906f3 | |||
f07d3b4585 | |||
672a4feee6 | |||
255aeaa9a2 | |||
8d1b0f1dbd | |||
23e3f9d6ed | |||
1b296ee3b8 | |||
e9f86c1016 | |||
22f8ee0f0e | |||
d254fc4ac2 | |||
e1ebabe3cd | |||
3ae1765df6 | |||
ef90609cbb | |||
183ad06f52 | |||
a0b0d42d69 | |||
4684dc0c63 | |||
a6531a335c | |||
0d4dd167f5 | |||
8c4c370030 | |||
94022a0abf | |||
0868f96439 | |||
96eceba314 | |||
be6583ae5c | |||
7225ed6035 | |||
5cfe449814 | |||
182a0aee3d | |||
4ab7ef93ee | |||
f5529d9edc | |||
291a014e15 | |||
17f0f01188 | |||
9d4f94af24 | |||
5544f62746 | |||
2b6d249632 | |||
dc83cd2ac1 | |||
cbc5b99ac9 | |||
0d866f8cd8 | |||
f71c6ae216 | |||
5efe122b27 | |||
abe9673774 | |||
e549503967 | |||
172ef5fe61 | |||
338e9dcd6b | |||
24d994afd2 | |||
52c89d302b | |||
d1f7c6f286 | |||
286b07ca33 | |||
900a254475 | |||
5bf7b1ac69 | |||
2e7c2cef15 | |||
09ea37172e | |||
206905c309 | |||
5bf7ffbe08 | |||
eb3cd85610 | |||
214fb9b511 | |||
d346a19ded | |||
bda161b4b5 | |||
1e7da75b77 | |||
b3a247ccca | |||
f6be41a988 | |||
f9e10f26ba | |||
6dc9d0352e | |||
c7a3152273 | |||
b39bc2510e | |||
fab9ae8167 | |||
8407d4f12e | |||
2f2c7ebfb4 | |||
6ca5b475bf | |||
984d0c6afe | |||
824b4b8a20 | |||
9c26605353 | |||
3465d2730b | |||
3e89b65c2c | |||
75909184fe | |||
b143e677ee | |||
cdabc407cd | |||
99e54fece3 | |||
16043d6742 | |||
96f18a01da | |||
141020a80a | |||
75c5eadaf6 | |||
6f6be5afbd | |||
1ced4e64b0 | |||
433bf770fc | |||
bf33b03acf | |||
6cf33858b6 | |||
3404247115 | |||
4714100c49 | |||
4e3cb9588b | |||
b4a2938f09 | |||
a151311b59 | |||
f68cc81513 | |||
443fbd7049 | |||
fa36d0b79f | |||
1d812e893a | |||
0ae3a14307 | |||
55c8702324 | |||
95ea799019 | |||
2a3cef29d8 | |||
47607bdc83 | |||
53e92360f5 | |||
970ed2ad29 | |||
2ae9d69888 | |||
ca15430bf7 | |||
4aab4abfa2 | |||
ee38b991eb | |||
84400180fa | |||
c9a717ddb0 | |||
bd75e0c5cb | |||
56e2f130a6 | |||
81726663bc | |||
e921911f10 | |||
0e61a53b06 | |||
77eaecf06b | |||
611ec48c1d | |||
6824173704 | |||
b1f1ee38d5 | |||
814c8657cb | |||
820ad004bb | |||
61b46a2dd7 | |||
a71071c96b | |||
0f6f70c394 | |||
1c08a9a9c4 | |||
cccb2d76c5 | |||
65718760fa | |||
5aa043b800 | |||
5a62427e14 | |||
516f0acbb0 | |||
3d27705d27 | |||
f538d74e9c | |||
75f0124c44 | |||
5b43484db3 | |||
5a1ba1bc29 | |||
6cd5243295 | |||
737b77c4bb | |||
e6db9105ec | |||
12e9c5ee86 | |||
804b560704 | |||
32c63e050c | |||
1cb26a6300 | |||
37bead6d26 | |||
8a3bc3be92 | |||
9f78faedab | |||
eabb0c06f5 | |||
089790c7a3 | |||
d666ee86a4 | |||
20b03bb706 | |||
15ffb63db9 | |||
1c40cdf360 | |||
e7ad0f2a2a | |||
cb03065074 | |||
e653ad07ca | |||
e967cfa409 | |||
c015bcc304 | |||
441867d2f0 | |||
cc633f2e3a | |||
118e9755ec | |||
540b8ecc1e | |||
b1fa25fab7 | |||
f978191b64 | |||
7bac50e824 | |||
bfe0948f7d | |||
3fde8c9977 | |||
f8a13d5a22 | |||
75372e5a75 | |||
cedd4525f2 | |||
f9bb675690 | |||
6f9a77851b | |||
f2eb687d19 | |||
63be9181cb | |||
ff072e6ebf | |||
8e4654527e | |||
6d5f007813 | |||
fbdd18b650 | |||
466ca2c1ad | |||
91dc1e74a5 | |||
bcd62f5737 | |||
01bfa53f77 | |||
ec12bd011b | |||
b40c600914 | |||
2806ec971e | |||
faa1118fc7 | |||
7354605f86 | |||
eae254efb3 | |||
a547584445 | |||
c34ebab410 | |||
c294fe792c | |||
ae438be578 | |||
d498e52c3f | |||
9c5263c9c7 | |||
a3d79292e7 | |||
b48148f4b3 | |||
3f5f74d134 | |||
cf2ac543a0 | |||
821004776f | |||
7a4983d1d2 | |||
ebc8423cbc | |||
c9ac0bcb98 | |||
e65f500a0b | |||
4d9d3f164d | |||
d8663e0fc6 | |||
6ec322ec7c | |||
3d2e18ad50 | |||
16a23c0e10 | |||
bd3c1c7dd8 | |||
bd62472f76 | |||
94e5ceea8c | |||
84c7d2dfea | |||
4519277ca2 | |||
e127a8711f | |||
1ab6f0c176 | |||
e7601b5d6c | |||
81fa1b34dc | |||
123b191b47 | |||
b3100775ae | |||
cc805d9dd6 | |||
0174ea78bf | |||
a58e503442 | |||
60a4e952e9 | |||
e6078290c5 | |||
87afa90731 | |||
60510733ae | |||
02b29b9d01 | |||
99035650aa | |||
a017e5fb3d | |||
24d0ed7978 | |||
d6900a96e0 | |||
7cd39d2770 | |||
c3488988b8 | |||
3bee7df954 | |||
178d644d62 | |||
1278728fbc | |||
5c0ef70244 | |||
dafd514d30 | |||
b729d8b6e3 | |||
220c2092ae | |||
34ca460af3 | |||
94545910e6 | |||
5c65d00ef2 | |||
fbbef02f06 | |||
01cfecc883 | |||
805b291830 | |||
3f3eca9b32 | |||
874466481c | |||
2cbfadd1de | |||
38f7db79b5 | |||
b765fa6e47 | |||
7e2625587d | |||
71299c274b | |||
ea4d1246e8 | |||
b52354b6be | |||
e6111a9e01 | |||
06f855cfe9 | |||
d5f0b4a17b | |||
c4a71467d1 | |||
272fecafbb | |||
c332a47c54 | |||
03b20350e3 | |||
e0cd2eb6d3 | |||
291e88a01c | |||
71a7ca786e | |||
6b7d40a973 | |||
46cef44dad | |||
9f2e3ad628 | |||
61657c2fae | |||
23e7361334 | |||
4b1bfe6d85 | |||
fc7b953366 | |||
98eeb96135 | |||
e4d6c033fe | |||
380c6b2c62 | |||
87ddea26cf | |||
3f3b4d5d74 | |||
6f6afe514f | |||
a3a1a1c39b | |||
dd80b5c7a1 | |||
f74b6e351c | |||
ec430ee343 | |||
f93c157a93 | |||
161df738a7 | |||
36a0bb823f | |||
501e3c1837 | |||
b7b11475c1 | |||
d60386ef2f | |||
edad34b883 | |||
85c52c5d97 | |||
da60958ae3 | |||
e9b3fd1d5d | |||
d6f259e834 | |||
4444ea54e6 | |||
6f28157fca | |||
4f65b87cf4 | |||
36eb500994 | |||
fa8f9ecc69 | |||
f895dade61 | |||
06e067e4cf | |||
591b0ff535 | |||
6d126acfac | |||
a8cb7ed784 | |||
e8338da597 | |||
b38586f77f | |||
86e0ac4755 | |||
21d79ad0d5 | |||
8f18eb510c | |||
9eca4b15ff | |||
9bcdeb274a | |||
d250063c09 | |||
815d96a975 | |||
8b3380044d | |||
f8d9a13aba | |||
6476e41512 | |||
a211298d20 | |||
ef8258a830 | |||
27db6c866c | |||
d8eadffc7b | |||
8db8a6154f | |||
ba2edaffdc | |||
d801b1feb8 | |||
9d678f2e56 | |||
26136092c0 | |||
8406179eff | |||
13471bc864 | |||
b362938bef | |||
bccc7e7072 | |||
951a6207f3 | |||
a5ce45b954 | |||
e9e1c4048e | |||
0ebb7840e7 | |||
16434322ed | |||
33768dd08b | |||
73692e8b77 | |||
d125593b2e | |||
80556ec247 | |||
a682fc81ae | |||
724753d472 | |||
186c2f9abc | |||
d76947f13b | |||
302951d9c3 | |||
79d7f6b5fc | |||
aa1eff3031 | |||
e181dd164b | |||
c83b9783d4 | |||
9cc1603173 | |||
05bc9b38a3 | |||
42d300533e | |||
ba9e482a36 | |||
650a56f7bb | |||
533e4399f1 | |||
e4faf5a209 | |||
5aee8262d5 | |||
a3580e59be | |||
8abb05ac45 | |||
63fd650e2e | |||
a988091d39 | |||
39e1f44f33 | |||
06a078a067 | |||
6ce42616bb | |||
c004857da0 | |||
1d8568c914 | |||
954a5b50ad | |||
69855f2e60 | |||
97fa809f7c | |||
50337f164c | |||
97e1e3e264 | |||
1d20cfa1d4 | |||
83af733a47 | |||
2fd49721b1 | |||
92bd83979f | |||
ee6557c06e | |||
a6d7c00f1d | |||
3c015a06b7 | |||
71397fa690 | |||
5f73e220ab | |||
e202e67709 | |||
1d534981d9 | |||
b4cac8f763 | |||
088f3d7988 | |||
cb4fa5dc47 | |||
8629b49606 | |||
0826e35a35 | |||
815611ef56 | |||
029d67278b | |||
b2e440a6d8 | |||
6455740c09 | |||
8d6eae5d6d | |||
5abeb06a73 | |||
a6c73c8987 | |||
ae43f32458 | |||
1bfa2c79f8 | |||
2fff391513 | |||
937931ea04 | |||
f584f19efc | |||
cb01aa586f | |||
56258ff92b | |||
aa30d6237e | |||
fb19c8aae0 | |||
283b446612 | |||
941c9ac074 | |||
b52f7c7c46 | |||
bd467d1481 | |||
3e7f006280 | |||
fbd6869f91 | |||
607ee30403 | |||
3b90603668 | |||
331d71bad8 | |||
c84f73aec5 | |||
b31d1d76e7 | |||
bfafa9e037 | |||
7bc90bce36 | |||
23140933b7 | |||
ebb2d3c8b7 | |||
a26986e1a7 | |||
8eef3bf3ca | |||
40d816e964 | |||
9b4b33ac37 | |||
f555a58abc | |||
542fa6de38 | |||
8dd2d485b8 | |||
ffa520fc13 | |||
1cfafe25e3 | |||
7adc370dc7 | |||
a28ee1b186 | |||
10bc806ab3 | |||
40f539f8c4 | |||
eda12901fa | |||
a1114f608b | |||
63ae8dec79 | |||
2883f7af94 | |||
159cd3f421 | |||
04e49425ec | |||
db10892a17 | |||
9e17b749d2 | |||
615ef58a29 | |||
7a4e5e3988 | |||
cf76076f22 | |||
25479cd207 | |||
3faefa2651 | |||
b7da27ccf4 | |||
293b5b3531 | |||
31b2f8f1d0 | |||
6716babee5 | |||
af995bbd75 | |||
dfd89fc85b | |||
50ee91c17c | |||
58ecefb181 | |||
af258cc179 | |||
cbbfb702f6 | |||
1862b503a4 | |||
0e971e11a0 | |||
b71fb5282e | |||
bd077cb396 | |||
d1141ab5a4 | |||
61af679838 | |||
9e581ec226 | |||
7a95575b85 | |||
3f882fafa0 | |||
93e08c75d3 | |||
7f40bd667c | |||
e7840af3b7 | |||
891f2bc6c8 | |||
bece6e86dd | |||
11c5b3b180 | |||
b877013fbd | |||
bd713574ce | |||
9636f2cb30 | |||
12197db238 | |||
c97802fd4a | |||
a022535f2c | |||
942650f240 | |||
0e557aba4e | |||
94aaf5b471 | |||
b2680a12e4 | |||
da41b6182d | |||
b8473d0191 | |||
4436ebef06 | |||
0c9630eeff | |||
0f82c12f71 | |||
58f3fd636c | |||
805da6ba53 | |||
834d8c2998 | |||
b8de015835 | |||
07e78649e3 | |||
4ccea758e9 | |||
4ddbbd84d9 | |||
fc31158522 | |||
a0a3eab36d | |||
0560a66450 | |||
efa022db50 | |||
8852188113 | |||
d589be3648 | |||
54f8116d86 | |||
f394fbefba | |||
bf224f85d0 | |||
7f996244a9 | |||
118b18e63a | |||
9f363fc85a | |||
90a9db537b | |||
e6ac20b9d0 | |||
2d68cec918 | |||
b48ca53091 | |||
4b59fe402a | |||
9e81aacd9c | |||
d548edde4b | |||
8b93cb756c | |||
37bf996efb | |||
26d1be15ca | |||
cd57d576eb | |||
026fd87f39 | |||
8b45399adc | |||
45b5e03641 | |||
221b894e7d | |||
8aced763b3 | |||
0d4c593c4f | |||
60efd6fa53 | |||
f1f0a0f98b | |||
2d69d594de | |||
92e000cfff | |||
5c74911f71 | |||
d2f3afcc17 | |||
7a61c6c398 | |||
23d5c4c532 | |||
dad7f37f72 | |||
e1484e4b3e | |||
c045a02174 | |||
b6df6b065c | |||
1c3086a603 | |||
73451fdea2 | |||
7cdcc38f29 | |||
c528426b26 | |||
1cae45432e | |||
5e9ae0c2bc | |||
bd65985a63 | |||
65f5de2bc4 | |||
b49638dbe4 | |||
bbcf1a0878 | |||
d1c69c65ce | |||
7ca19b289e | |||
265cd9a2ee | |||
756646757e | |||
4ae9f1e5d8 | |||
c2ce370f30 | |||
7c07110923 | |||
506b9c102c | |||
e1e3289052 | |||
034cf6390f | |||
cbf9571588 | |||
2a0e3b25ea | |||
3838701c84 | |||
c83bab62b3 | |||
5c8ff794a8 | |||
1aba2a32e8 | |||
d5be4e4046 | |||
a8280e4cc0 | |||
a48e8f52d8 | |||
6779d2352c | |||
38a4f2a974 | |||
0bc9f0b827 | |||
8250e2e2d5 | |||
6e33797841 | |||
0c89c297e6 | |||
3ccae2b7cd | |||
6bb9aaf93f | |||
1c9746ceaf | |||
23063305dc | |||
fd15c0b8fa | |||
731e58e319 | |||
bb5b9fee8c | |||
a581166820 | |||
1a9b7b50c7 | |||
a0259b4273 | |||
73be5f7211 | |||
596cb6cde6 | |||
3de43e9541 | |||
2f72a204a7 | |||
e938fb78f9 | |||
cc0b6f18cd | |||
389c827943 | |||
2dd3b5c0f8 | |||
d701ef7475 | |||
9e877ec60d | |||
9b5447b781 | |||
26e2eeb276 | |||
391bb132be | |||
287910765d | |||
19be7b569e | |||
e67f539de4 | |||
933e6ff02d | |||
bd74b602cc | |||
287ce5f1ee | |||
d913036e18 | |||
d1b80f0fc2 | |||
0b707f6667 | |||
39930b79c1 | |||
32f2ccce41 | |||
895fb4b361 | |||
6118cda858 | |||
3f56ad9f72 | |||
8a20edc861 | |||
14b81bb461 | |||
658c3fec91 | |||
473d97940f | |||
c1604d0bff | |||
4ed8e9ce9d | |||
8b1cdd55a9 | |||
173620a88d | |||
1513d72a38 | |||
3480457285 | |||
f4bade774a | |||
6af55e583d | |||
22d2604c46 | |||
6575854856 | |||
9e83840bdc | |||
2469a9eee8 | |||
bc17b6f98f | |||
ec35a3d885 | |||
a347ea3787 | |||
320d6e88af | |||
bd3dd59f4a | |||
4a45ab8bd3 | |||
e348eba641 | |||
ff08188839 | |||
c732d689ac | |||
b7d08923b9 | |||
7cd2047c7b | |||
b0d3695d38 | |||
1f66809111 | |||
ceff01e3b8 | |||
2782048512 | |||
46b99dd4bd | |||
74e22b5ce7 | |||
8970992f5e | |||
0558d0c215 | |||
416f411b8c | |||
d8ce9a8de1 | |||
ec21170b87 | |||
73c92dac0d | |||
a04dee6895 | |||
bee82ab798 | |||
c5a5b369a8 | |||
630aa4b3db | |||
731e6288e6 | |||
ef4fe3e37c | |||
26be0bdbf6 | |||
3473f76e90 | |||
2a9a49b7ba | |||
50b7ed2bbe | |||
f54ae3875f | |||
7c09c6a960 | |||
dee167ee39 | |||
85e1491eba | |||
651f99f12b | |||
6ad0ab1a69 | |||
e3d9d67e99 | |||
94694a810e | |||
99b075aa94 | |||
5bca34193d | |||
e29c70dea1 | |||
4a216475f5 | |||
d225834220 | |||
2450a7e724 | |||
2e5f1f7e94 | |||
9594550452 | |||
76ea54e962 | |||
f41eea4c0c | |||
66bd887005 | |||
48c7870e52 | |||
408d1dac9e | |||
ae863e2e25 | |||
959f406bf3 | |||
748caed022 | |||
536799d5f6 | |||
734c999637 | |||
35103fd961 | |||
15b6c4af63 | |||
d756c27a54 | |||
8fa02a8ef9 | |||
bc3668a468 | |||
4902fee441 | |||
cf425783c8 | |||
a76cf28279 | |||
0acfe1c8cd | |||
5b9062f3f6 | |||
92bc83674b | |||
d6db845f01 | |||
9fadd9a917 | |||
6c2c018e15 | |||
1fe7dcb047 | |||
f71991edc3 | |||
d60e9ab74e | |||
405812209d | |||
25c6d3a35f | |||
945b698f82 | |||
c2092569d5 | |||
efa56ab12b | |||
b8d575c644 | |||
12b1d7df70 | |||
0d9fb55ae2 | |||
f07d7dc2fd | |||
d6de92ef1e | |||
2ad6f8138a | |||
7abc037da4 | |||
b5b8a7d540 | |||
eafa2035ce | |||
f107b6c3a0 | |||
d4f39abebf | |||
b091b33c2a | |||
325fd3462e | |||
086f0faf75 | |||
a8ab2b33a4 | |||
93b343a779 | |||
d28b74ce6a | |||
92b0e8dcae | |||
f9ad22d9f7 | |||
cca7486120 | |||
da6170a223 | |||
58ececfb28 | |||
66406d4754 | |||
34f52dd0ad | |||
0405109eed | |||
4200a52263 | |||
a8a7374e84 | |||
e150876910 | |||
33ff4cc137 | |||
5395123b84 | |||
f96c638a60 | |||
f814ff15f9 | |||
1f7a11699a | |||
5dd4bf3644 | |||
e69798b5ae | |||
b73111cfa7 | |||
e6b313da36 | |||
2bdc05d89b | |||
7a70a46ecc | |||
b824f7dbae | |||
d33b02e7f3 | |||
7899cd9088 | |||
c735a31861 | |||
3dbe593906 | |||
c4a3f51618 | |||
60889e55ea | |||
028570b445 | |||
b417786525 | |||
295fdbef39 | |||
e8b7ff1ab5 | |||
95bff2e17e | |||
7db16ddc88 | |||
0142d441c6 | |||
282717e5cc | |||
b915faedd5 | |||
520717dff1 | |||
b9bd69e70e | |||
ed69de318f | |||
cdf6f3a4ba | |||
e9b1e0fe88 | |||
6ee5559d6a | |||
6de7ecb585 | |||
9ac409c7e5 | |||
727ac0d263 | |||
a87a741b41 | |||
bba4ec4ca1 | |||
f863176423 | |||
67117c3971 | |||
0e45b2875a | |||
ba9b504ec5 | |||
361a935332 | |||
f97c1c9d86 | |||
836b8d2e45 | |||
b2f3698781 | |||
fedaac84da | |||
fa0df7d316 | |||
b4f1ecb3c7 | |||
40a1f70bb0 | |||
b61f33cd48 | |||
d4823664a8 | |||
8f454fd2ea | |||
badd460229 | |||
4f14cd8a39 | |||
6766f4fd04 | |||
23c1c4e153 | |||
94ce79d6c8 | |||
d1371508f5 | |||
53490444f7 | |||
1e83e5c61a | |||
b9e8448384 | |||
3280b76729 | |||
25eb1b3149 | |||
629abbe751 | |||
f82fa746bf | |||
bd3037bfa7 | |||
9a5fc849fd | |||
88f5c7178e | |||
0420e50b6b | |||
608fbf8110 | |||
d51ee90f12 | |||
8cf28dbf93 | |||
38d2540674 | |||
dc987fecce | |||
b12c2761f4 | |||
94b503094f | |||
dda17fa222 | |||
88f107012a | |||
4b463c71c0 | |||
aa57187f82 | |||
e5476db4aa | |||
4540a990a5 | |||
b85fe66e39 | |||
7104cdb375 | |||
45f05a13ed | |||
98b0ae6561 | |||
20a329718e | |||
3f870446a6 | |||
cbea47c744 | |||
8eeff1e0f4 | |||
43d5f7e8ea | |||
c00d46353c | |||
3c24a40d53 | |||
add0b4712d | |||
494b031eb7 | |||
1cb9cd5798 | |||
4f66cb9b28 | |||
3917904878 | |||
c184e65ed9 | |||
025cb700a1 | |||
6dc2fda469 | |||
1a8dbfc899 | |||
eb34d8bf18 | |||
f0b79daeba | |||
85d44f4a5e | |||
26060bc7c8 | |||
413a742ad9 | |||
297b6b862a | |||
7a1b60b694 | |||
9612a3c32a | |||
555efe4792 | |||
f4b9ec6784 | |||
542919f370 | |||
ee8f969e1e | |||
b5ba8b6d1a | |||
0f9858f5a1 | |||
31e2188c38 | |||
d908916642 | |||
9cb88a70f7 | |||
50a4454892 | |||
a4e9395979 | |||
021462bb26 | |||
c7305f7b37 | |||
b4a68a5a28 | |||
fc749b23ef | |||
9c6e9c684f | |||
7b7bc59f20 | |||
116a837818 | |||
03f78b069d | |||
bf14c0050c | |||
bbe66e4555 | |||
9db39879a8 | |||
41956b5742 | |||
c32ca089c9 | |||
5a365cb8ef | |||
ac247b64e8 | |||
658ae3eb29 | |||
591dbfe295 | |||
45d05d0823 | |||
bf15b2f7c3 | |||
b86e96ab8c | |||
80759b0dbd | |||
ece88ab765 | |||
98579a9e86 | |||
ed06e11900 | |||
2f99897d00 | |||
f17396591f | |||
40bb6c340f | |||
8d9262a7e7 | |||
b7eb1097e5 | |||
b320bc5e0e | |||
d912df22a8 | |||
9f4c4856f3 | |||
50b82ef2bb | |||
ebcd0a8d8d | |||
1a5c3bb7fa | |||
7176a54c2b | |||
9efc7fc540 | |||
b17a0f592c | |||
de64078102 | |||
91c47c0dea | |||
f8e1764bb9 | |||
9b7c232924 | |||
5232eb1a10 | |||
8b4528aae5 | |||
12a651c060 | |||
d1613f5681 | |||
98b72dadf0 | |||
8a2204896a | |||
6a5c61583b | |||
bc979cc904 | |||
3d5e1e5d52 | |||
24f0455016 | |||
3833f0ffdb | |||
928511add1 | |||
a1d668efe9 | |||
86867dd707 | |||
e077cdbc62 | |||
442fb05acf | |||
2cd02610ee | |||
83b2740ba7 | |||
4240e32980 | |||
3012948b39 | |||
9a0f093343 | |||
a6eab80dc9 | |||
149d523c9a | |||
32bae49435 | |||
9fe3d692c7 | |||
f1a4ae0a48 | |||
199f98bc43 | |||
3c73dadd6f | |||
cc6100f2d9 | |||
b9edd8be67 | |||
a73317e5cf | |||
5ee8283250 | |||
1b12b64dab | |||
b643d3df8a | |||
6cfda93c6c | |||
e18dba8e9a | |||
e2291f5ad4 | |||
07e6098d48 | |||
8245bd25a3 | |||
ad27283a3c | |||
d786843ca6 | |||
6851922f08 | |||
e1988f5e0a | |||
7987c1cb6f | |||
fd6fb289ce | |||
e4951055dd | |||
ba8d8f2583 | |||
540a98001d | |||
86da00db89 | |||
e0cdaf0b19 | |||
ddb4b0d576 | |||
a7ddf4cdb0 | |||
42174235ba | |||
106abb82fe | |||
c1c5354e45 | |||
c8e1c0d395 | |||
8d98d80e53 | |||
9484792ad1 | |||
12520134f1 | |||
9e052c2b6c | |||
18aa6fe261 | |||
263f129a8e | |||
200d213d1b | |||
a244d5edd4 | |||
0a2de7b538 | |||
13746076e9 | |||
e86ded841f | |||
19b963ce86 | |||
d83bd535be | |||
4841203c3a | |||
3979def529 | |||
d01b675067 | |||
abb0ebbb51 | |||
b8b9786ad4 | |||
07b2fdb594 | |||
bbb00d7404 | |||
289b7d65fc | |||
7e128576c2 | |||
5ee7e472d1 | |||
f15f310ea4 | |||
322635a955 | |||
aeff512a50 | |||
c79efa822d | |||
808f5c3849 | |||
0b82b3d6fd | |||
96e2a5da34 | |||
3b34db6c0f | |||
edcce07531 | |||
1bb330348d | |||
14dd073e80 | |||
57aa8e37dc | |||
0bb644754d | |||
657d68bddc | |||
dafc78bb8d | |||
9f56eeda41 | |||
a0c97590b9 | |||
2ee6fbf0d7 | |||
67910db907 | |||
4ba70a7575 | |||
7c04acff8a | |||
cbc878d2a2 | |||
2ab4f4b2c5 | |||
05fe16c4f3 | |||
934ae21b52 | |||
8cb5ea7879 | |||
879ea7fce8 | |||
6fdf122fc3 | |||
462738299b | |||
5cf4d0c148 | |||
d3f2a1e4a9 | |||
683657e93a | |||
1debc0c101 | |||
fcd8c9e99e | |||
344b331783 | |||
b9d5b26458 | |||
68b6eb78d2 | |||
53486a0be0 | |||
51359d6c84 | |||
2e0bca011a | |||
bb345abbfc | |||
31a5ff5e36 | |||
655220ae69 | |||
050be72e77 | |||
6bbf8f238f | |||
634c783d1f | |||
7e51f15129 | |||
e46a41542b | |||
36c6f95602 | |||
b21999cbed | |||
9a669b1c68 | |||
2f50d7cd3b | |||
b1ea707bda | |||
0e03aa2c6f | |||
08cd65198e | |||
8cee45c3f8 | |||
55009af42c | |||
1c37157218 | |||
41fe62b6dc | |||
afd687f71f | |||
d9105d98b7 | |||
2f35744e40 | |||
6b9cff49b0 | |||
5a6620277d | |||
f65c1e4088 | |||
73a544d453 | |||
c08fdf3dec | |||
b6161be9de | |||
596947ccf7 | |||
5e4c663a5a | |||
d14673f0b1 | |||
70a03dd960 | |||
54daaecacb | |||
73b1bd7992 | |||
91e7fe7b54 | |||
a37eef131a | |||
08c8cf9586 | |||
5cdbce8072 | |||
f824378526 | |||
c487ac1a9f | |||
c650e130ce | |||
6f8f34f1bf | |||
f9fa985242 | |||
c135b829e7 | |||
68ec3eb1f0 | |||
b9aaa33722 | |||
63b9700b2c | |||
a2962daf6f | |||
2317b4f114 | |||
00517b687a | |||
68f0eb5269 | |||
be0dfef30c | |||
c0b9c8cbc0 | |||
ecfb4b81ae | |||
2d54fc9581 | |||
1804b15896 | |||
ab62d940fe | |||
e58eafc45a | |||
b7f30ad25f | |||
bd36ea9866 | |||
5736846581 | |||
2d086e6971 | |||
d7e92e8958 | |||
12507ce895 | |||
cc3e2a031a | |||
fdcc9ab317 | |||
c9b13594eb | |||
ae64f22e8d | |||
a8582c4c02 | |||
92542469e2 | |||
eef7c69d49 | |||
a854c9d787 | |||
cd666d992d | |||
bc2204edd2 | |||
8601afb679 | |||
fdb8b13e64 | |||
1b8df77ac1 | |||
706251d913 | |||
6ea3a13a17 | |||
c0a4e20887 | |||
3802563bdc | |||
2c2df5b6dd | |||
33d0fb8d34 | |||
3aa17f7604 | |||
2fa1cb15de | |||
c574947223 | |||
9b71804e4f | |||
dc34a9d6de | |||
ce51d6d9d1 | |||
aeb85d53e9 | |||
34ac1ab4a3 | |||
547de69de7 | |||
0178760867 | |||
179da7fb5c | |||
6229cc93ff | |||
462a7daeec | |||
d20b0a842b | |||
91eb2816fa | |||
56d913eedb | |||
2d33c3e6c3 | |||
7c2994bb73 | |||
ff168e9e63 | |||
eb501f0543 | |||
5d70978920 | |||
4e223db66c | |||
9e1ea54b18 | |||
48ae50c3d2 | |||
22be29e23b | |||
c2a9c42670 | |||
5fadb46b36 | |||
2b77881564 | |||
7c2fd97c05 | |||
95b3f286a8 | |||
dba22d2f9d | |||
f0664cfc7b | |||
1a71163675 | |||
0ca944b16f | |||
344e86bb3b | |||
7255610d9f | |||
5b0db35e0d | |||
b6c9a5d797 | |||
fba9f33187 | |||
a3ce27d3dd | |||
f3db2aea85 | |||
c1abf137ff | |||
b52cc0e094 | |||
ed50d85576 | |||
bf5aacca2c | |||
30da30c1db | |||
b6e3618138 | |||
c2a05d143b | |||
c9eae795d1 | |||
9f5c895ec7 | |||
5c44c4ac7d | |||
c9ece506e0 | |||
282171c105 | |||
6572fe538a | |||
c4b7ad4db5 | |||
7b3e8730ee | |||
693e04f5c6 | |||
d618aaceae | |||
3e8ef1028d | |||
d492f01bf1 | |||
c7fc199f40 | |||
12294d0c48 | |||
3ac0ab524b | |||
65a8c2e076 | |||
d367503147 | |||
b0f15f0f86 | |||
7d802a48f3 | |||
b48d63359b | |||
4ff63d3a11 | |||
941796a50d | |||
7ad1a34ea7 | |||
8cfffb4427 | |||
64dc5c1d53 | |||
a2ac3ad5e5 | |||
3ba84c5950 | |||
18315db8e0 | |||
a2fbddfabc | |||
33847db3ce | |||
2368681c83 | |||
18ecdbfeb8 | |||
9266ce90c6 | |||
56397364c9 | |||
46f04cbb49 | |||
b81731d9db | |||
a0a50775c2 | |||
f77f2c79c2 | |||
6a23352515 | |||
91709c91df | |||
a4f5954159 | |||
24ab1c5db6 | |||
0d2dbcab5f | |||
e1470ea6a3 | |||
433acc2d3d | |||
026863b2ff | |||
47a6603f34 | |||
a3eb125238 | |||
3397ef9627 | |||
515ef38db4 | |||
2ed6848ea3 | |||
8d82109c08 | |||
c61d415701 | |||
2b297d92a7 | |||
a9b1a72a8f | |||
2c3d91c9c8 | |||
9367d91e22 | |||
e719288a3c | |||
1fa240a3c5 | |||
df0c731e68 | |||
c05b1a66b3 | |||
689256797e | |||
878b685814 | |||
cc6809c8b1 | |||
21c9aa125c | |||
d64b04609d | |||
0bb83469ed | |||
f3758b6738 | |||
27cb3e0d31 | |||
0df1cccc0a | |||
d0c52b72f3 | |||
1bdfe8c280 | |||
436296b9bd | |||
1916d68ee3 | |||
d653e491e1 | |||
eb80e053b6 | |||
85678b8419 | |||
54cabb977d | |||
d198e2e553 | |||
540b2adb61 | |||
d5e7a6d9c5 | |||
4debbe74ac | |||
1818733faa | |||
7f8b0cd89c | |||
94146009a1 | |||
53509cf15a | |||
7aeeb9bf96 | |||
06f2fcc0ff | |||
eb2e0b56ee | |||
07b402b3b9 | |||
5a0edcbde1 | |||
61e3d01739 | |||
5015502414 | |||
45ecb0eba1 | |||
386d3418ef | |||
9ea4c8a71e | |||
490eab46a8 | |||
f5c0d61296 | |||
75396f67aa | |||
56715ec23f | |||
f8dc4bc022 | |||
9bb16cd9c5 | |||
3382e53c64 | |||
bd585fa89f | |||
79ca4b55c5 | |||
35a047c4e5 | |||
baa16e9c25 | |||
7715c0dea7 | |||
de56a66e73 | |||
eef63607b8 | |||
181de282b5 | |||
15c012181d | |||
f67c81fc70 | |||
433471244b | |||
d980211112 | |||
eb5147027e | |||
c2c634a089 | |||
298619f6d9 | |||
bc29bd0de6 | |||
6059c9d133 | |||
ffcac3eb50 | |||
1ca978ee65 | |||
185691eedb | |||
87bc755447 | |||
4c9bbb9b34 | |||
fc20682f07 | |||
57803ba3f5 | |||
334699d205 | |||
24284270c7 | |||
ecebee0561 | |||
979d4ce02f | |||
b274ccf596 | |||
f2e42c4a8e | |||
ad983eeec7 | |||
e8fd6e9c6f | |||
0fd398a5a1 | |||
4c38ed3c38 | |||
fbc59ffb64 | |||
43d2527203 | |||
8370f6b79c | |||
dce6359773 | |||
1c6ea92e6f | |||
35e76dde77 | |||
efe3cfb476 | |||
1248731991 | |||
941f2a9c0c | |||
3bc70228a2 | |||
f2cae5085c | |||
baeced336a | |||
a4a512c68a | |||
f9e74991d3 | |||
d6fc557b93 | |||
fe338e2319 | |||
aeb652a4a0 | |||
ea544574d0 | |||
a0e1e596f8 | |||
2c08ea7cfc | |||
dc0b1875a9 | |||
4f1d6ff42e | |||
26d2dad980 | |||
f96d9051c2 | |||
63c444a69b | |||
5027ecfb19 | |||
29c8fa4769 | |||
ab8edda14a | |||
0209f3dd15 | |||
e61b4c360e | |||
593172c7c3 | |||
44b54aa947 | |||
53b549c43d | |||
2141bbbd4a | |||
a911216926 | |||
6098da9ea8 | |||
7fc928656e | |||
ceb7e68c48 | |||
9f19dd9f61 | |||
a2148377b5 | |||
85b41445b5 | |||
4100c2a6e3 | |||
556cc26337 | |||
47bf498681 | |||
6760e0bdcd | |||
1d29b7bbce | |||
6b7b016b60 | |||
25128a7997 | |||
cc32a69807 | |||
052e3ef334 | |||
9f2eca50ea | |||
e036aaede4 | |||
3ad93615be | |||
89b8c23830 | |||
ce20697513 | |||
8d6d3fa109 | |||
770e73d0a2 | |||
fa5d0f835b | |||
59eb2fdb6b | |||
360d94745f | |||
67d59d1756 | |||
2b28a16061 | |||
9c538348d8 | |||
934b8da442 | |||
1e245c1536 | |||
c63649bdbb | |||
2c43bf7969 | |||
3457df1730 | |||
dc2e7c6e0f | |||
05d7d82d37 | |||
e7087a19bc | |||
3557f12458 | |||
e477626d82 | |||
bcd1d1c32e | |||
e32d16f9d7 | |||
0f476df76b | |||
ba071cdbfb | |||
767de0aac7 | |||
e5ca52bbba | |||
46cc24d94e | |||
c50847e51e | |||
751c496c74 | |||
ad91b18c64 | |||
5e8afce88f | |||
7843bd560e | |||
c583920a74 | |||
e27c013f39 | |||
dc584c3f22 | |||
bf53acca5e | |||
dc7b2de88b | |||
bd3ac9c0b0 | |||
7dfbaab6de | |||
b75f504bb0 | |||
5d14c76f1a | |||
5885ffef32 | |||
5aa0a53e5f | |||
ef36cdd06d | |||
92fe375737 | |||
0a8e8e84f1 | |||
700c024057 | |||
fa85ba279f | |||
959eb162bb | |||
628beff58c | |||
0bb4f0c766 | |||
f4a304722a | |||
e05dc17d4b | |||
7ea8b8866a | |||
85e680a94a | |||
5ec8069f80 | |||
e4240f3e01 | |||
ffe4eba380 | |||
9fc8cf89e8 | |||
2332c7459e | |||
d3c58fdc64 | |||
211792feab | |||
dd0dc1ac92 | |||
d577726460 | |||
b134945ec1 | |||
b23f392766 | |||
50b999feb8 | |||
348002c305 | |||
a1928cfa28 | |||
2452afbe04 | |||
aa990e9289 | |||
399b6c11ef | |||
949ff57bca | |||
571b14ef23 | |||
ae695757f4 | |||
10c8ad8d78 | |||
6aa81fa55e | |||
32e13c0b00 | |||
cefe89ee79 | |||
6abbd5b0ac | |||
44da9e73c7 | |||
cd0b67b30a | |||
7630803b85 | |||
a7fb23081c | |||
a2d123ea98 | |||
87074f9042 | |||
dc972e17c7 | |||
b236352281 | |||
0d92271d2c | |||
ead8a07cee | |||
799184397a | |||
87c52809b2 | |||
c6872f5524 | |||
b6768370d1 | |||
cd3c3167df | |||
df9cdcfc38 | |||
fee2fdecc2 | |||
996588521a | |||
11a34ec4c2 | |||
c484da1a98 | |||
fecf77770b | |||
675cb9152e | |||
8088584b37 | |||
1b8102474e | |||
71a94301c0 | |||
8a0dccc02b | |||
6de0c141fd | |||
de6f121897 | |||
72f13e534b | |||
9764bc126e | |||
b7e8505d96 | |||
2384682565 | |||
187655cee0 | |||
77fe213b55 | |||
898ca04fa4 | |||
f76c12a3fc | |||
b8cd4b0049 | |||
46e68ac99a | |||
0cc619bedc | |||
a1c259beef | |||
02a4a0d471 | |||
9caadfe708 | |||
a4b7befbd5 | |||
4f7fe494a0 | |||
7c276c0dd7 | |||
0dc87ef90d | |||
6754dcda74 | |||
97012bd019 | |||
45ddb4344f | |||
19825e8e37 | |||
ca7f93d567 | |||
aabc215962 | |||
10cfd4d7cf | |||
e396c662c0 | |||
5c7b74a22b | |||
56aeae0400 | |||
b1ea53d846 | |||
f0564a9c44 | |||
e919390f47 | |||
93d215cb05 | |||
b4d960b65a | |||
28552095d8 | |||
8f22136c05 | |||
bc2f9a30f3 | |||
1b95501fad | |||
12440ce63e | |||
8256ca0e14 | |||
3c1e986119 | |||
5efee3a2c2 | |||
95755dd65d | |||
2abbe46765 | |||
1d4bdda47f | |||
23a6c79126 | |||
074730c14c | |||
1c54bc4849 | |||
8b7cd43d5d | |||
005e25de0f | |||
cf5af24a94 | |||
c4c5d85c22 | |||
55069d15d8 | |||
7f22933e98 | |||
21d6a27ac0 | |||
be5317f6d0 | |||
9dd1a12f9c | |||
7e4bfe4b91 | |||
b8df689a6a | |||
91e89c5393 | |||
baf6d6e203 | |||
930c31c63a | |||
f307ffbe47 | |||
76ffa88e1e | |||
254933fba7 | |||
056fbe49ff | |||
c86fc8e63d | |||
82c0e7e3d5 | |||
44f1af2996 | |||
c7fa911279 | |||
bf43f9ef13 | |||
ed8eaab08a | |||
dd227a7d97 | |||
07f798d74c | |||
4e074033de | |||
1b1a26acdc | |||
114e2e8830 | |||
32c8de10b0 | |||
3042af6256 | |||
881f9cb715 | |||
46b125ab6b | |||
2d90cb1547 | |||
585786b696 | |||
08aeda6c14 | |||
71bd7e439f | |||
aae81906b9 | |||
55f01326cc | |||
4e39c824e0 | |||
a0218958a0 | |||
51b1fc6e39 | |||
763eeecb30 | |||
c01d0920bb | |||
214661e00c | |||
f8251b9860 | |||
b4741616ea | |||
fb2a9d5ed8 | |||
6a657c2646 | |||
007af4251f | |||
ef63c32b58 | |||
6b5bf407de | |||
8fc523e313 | |||
1058dd84f0 | |||
397ce3c45f | |||
8119841ec0 | |||
ddcfcb8ebc | |||
15fcc86907 | |||
92a7599616 | |||
baa8c7819c | |||
00f0de3e14 | |||
385ea8219d | |||
092fe558ee | |||
fe3250dbe6 | |||
cc5193604f | |||
acc88f8e66 | |||
127b820d24 | |||
1e07d40027 | |||
3a28673293 | |||
0dd8fe7ec3 | |||
c4f77d943a | |||
facbf47224 | |||
2449895709 | |||
7736bfc443 | |||
e75a64f822 | |||
68da45479f | |||
1644e48985 | |||
4ec67fc82c | |||
728a06032d | |||
b1ef725f39 | |||
6f7c955464 | |||
20994a763b | |||
ce6f1a53e9 | |||
9c0afe6e6b | |||
b9b79d2589 | |||
cf819ea654 | |||
72c483a95a | |||
2f9a0cdfa6 | |||
816326576a | |||
ab0d687fc5 | |||
403b70adb9 | |||
4d877c8c7f | |||
a1b700ff74 | |||
879c9fc421 | |||
a09d33ec88 | |||
bc78e014c5 | |||
a751eec799 | |||
f6a8c5a493 | |||
228f004f76 | |||
6c13b0427a | |||
8195aa02f9 | |||
a0365c5809 | |||
6190d0bfe6 | |||
085ab5a347 | |||
ca64305152 | |||
41f826a498 | |||
334211e4a6 | |||
5407571168 | |||
3d4f51ef69 | |||
1845fc8947 | |||
e979442cd6 | |||
653a66fa81 | |||
d1fb78dbfc | |||
be820b3911 | |||
f91c0f9935 | |||
944fdc4771 | |||
adf344013d | |||
3cf40b68c0 | |||
55a2149903 | |||
14d59912f8 | |||
645f244fd0 | |||
319b096869 | |||
6c1b18090d | |||
522b7c0324 | |||
bda870242e | |||
5ff6a6af0e | |||
d05f57cfcb | |||
2f389f151a | |||
7c9a0e8a9c | |||
463ad5169d | |||
ddd6ca78a1 | |||
5b15e01035 | |||
0d6ddf8da7 | |||
ea2bec2c4b | |||
4f7568b126 | |||
47be2d9f70 | |||
d60089b7b1 | |||
de09679c13 | |||
836994e083 | |||
48fb573e1f | |||
7253e7a135 | |||
c5fc753b13 | |||
c169a4751f | |||
4e8db0fa32 | |||
2ca11a527c | |||
432516586e | |||
e1c0cb737c | |||
3e9061e27c | |||
9dfa60aaee | |||
b43ec47ed3 | |||
57248c2b8c | |||
7011e546e1 | |||
7aed33e95e | |||
55e5cb8d4e | |||
242a03365d | |||
5666c29df1 | |||
c56ca6ba17 | |||
29f12e4d48 | |||
fa2f793957 | |||
2715cdb3f3 | |||
1e8f305957 | |||
96ca0d93d2 | |||
ac4896fbcb | |||
eb48bb4fc8 | |||
340e4b8090 | |||
44874482fe | |||
f6671a89c5 | |||
34bc60b865 | |||
2e6a0f8052 | |||
f71bb5d174 | |||
011688f861 | |||
c7783a39f8 | |||
99bf4366a6 | |||
626a53776b | |||
09c3bfe826 | |||
2e37fdddd5 | |||
154024d256 | |||
1031aae361 | |||
20ce4007eb | |||
d9ccaefabe | |||
f185779a89 | |||
1966b5c800 | |||
5ce66da1b5 | |||
af1cbe2278 | |||
9a100b5c1d | |||
db8f9229b1 | |||
02d9071a0b | |||
7d9d63b79f | |||
40964fb4dd | |||
376357c107 | |||
86278a0361 | |||
b8bda11487 | |||
63998adf4a | |||
6c2324a8f3 | |||
10af2af81f | |||
ff744bf0ee | |||
5331a7cff9 | |||
b7cc68ae6a | |||
9b8d28f013 | |||
1f30de08f6 | |||
e0ad1fa7c8 | |||
a1dbcb9332 | |||
5e5fd41fcf | |||
4d77bf2a23 | |||
f1ca63ca40 | |||
480d927b02 | |||
b559432604 | |||
eef992deac | |||
776da0872e | |||
5f2576089f | |||
b7f117dd52 | |||
b5c345ab44 | |||
44b275e209 | |||
4223880d54 | |||
21961fc092 | |||
7f57dd4b65 | |||
0108c8b742 | |||
2e032f07df | |||
b8eaa6a584 | |||
19e353473d | |||
be9533aba9 | |||
942ad6a137 | |||
947916eb2d | |||
845652b8bb | |||
400f9ca261 | |||
34715df801 | |||
d8b6e671f1 | |||
7c24de9cb7 | |||
158e8d1e92 | |||
fc58034a11 | |||
11b910281e | |||
523ca8d9b0 | |||
d3856aad79 | |||
f7856800b4 | |||
d61a40e291 | |||
57e8909081 | |||
ad0f485361 | |||
38ddbfb325 | |||
e74ca4ffc2 | |||
bdc761e338 | |||
8896dc85de | |||
d115940d80 | |||
6c361d6838 | |||
468d02cc82 | |||
36fcc85be4 | |||
8484a12a9c | |||
6908dc8ea8 | |||
dac4497754 | |||
4b0598c35a | |||
af84368591 | |||
2c34892efd | |||
6df210b0c2 | |||
ede8dd0b9c | |||
0edf6a59f8 | |||
7385b656c2 | |||
b759a4f987 | |||
eafc81514a | |||
6a3cf1b6fc | |||
bc1dbb3cc3 | |||
40f893e9f3 | |||
b17f3d3d3c | |||
7ef19036fb | |||
fa62e01b90 | |||
0f91f79447 | |||
a9e07f9444 | |||
5e779f9a6c | |||
fda6cd6d28 | |||
0cd098e4e4 | |||
9be81b8d4b | |||
4d99cdeaf9 | |||
5216b72a99 | |||
faaea99859 | |||
dbed7865d3 | |||
cfc93cbb66 | |||
b2832e3586 | |||
8c09b82cb1 | |||
b0f99ad794 | |||
ca1187faa2 | |||
514ddef4e5 | |||
fb9f320d81 | |||
80212aa104 | |||
91c8d35be3 | |||
9680b84eb1 | |||
489c10ee54 | |||
6536084163 | |||
ddd02da1de | |||
5fc8805a71 | |||
0688bce81c | |||
81e3b74301 | |||
e4b9a1e156 | |||
fe3a19d3f3 | |||
d624e3997a | |||
3128f33c65 | |||
24cd6c897b | |||
ea4bda55d6 | |||
241f0a5593 | |||
f4abe51b74 | |||
5c18db1ca8 | |||
d517bff06a | |||
c761f28171 | |||
cfde82c1d7 | |||
fcdb03358d | |||
85ca1fe4e6 | |||
c5568a145f | |||
ed309e58b0 | |||
285975dbba | |||
7f1da07849 | |||
afd0505033 | |||
bc36e298f9 | |||
1b79b86def | |||
7398c95d9c | |||
980d704b4d | |||
59ba0a257a | |||
7bdedcdc33 | |||
88e9c5af57 | |||
62a6741bba | |||
750ce06cd5 | |||
7f2aaacd9e | |||
d2aa4730e3 | |||
42ec48032a | |||
b6ca93839d | |||
19e961e83c | |||
68ff7298ec | |||
0a793d85f1 | |||
0bc35af933 | |||
58e96705cb | |||
61a2d25a01 | |||
39bde7cacf | |||
ebcb0c5b88 | |||
b0b36f3230 | |||
1e155bf264 | |||
231c74cacf | |||
046382b8c5 | |||
ba9ec2ce24 | |||
db05f96e38 | |||
2d7aa11308 | |||
9af10bf90f | |||
395a740bbf | |||
f88bad8331 | |||
effaf8fcb8 | |||
cddd6008f9 | |||
e1b902c92c | |||
2f2e113f60 | |||
5bba746f98 | |||
03cfae40a6 | |||
71e70130a1 | |||
33533c0e85 | |||
e3aa424a4f | |||
3edc9e24c3 | |||
dd321038ac | |||
f89cb241ee | |||
24ba85002a | |||
bec78e32d6 | |||
749c395f93 | |||
91841af6b2 | |||
194422af82 | |||
3e42dbac30 | |||
46009ea4cc | |||
998a3cc0da | |||
ad4bf675ec | |||
e2fafc0c8c | |||
7783c606a4 | |||
511a8f5538 | |||
3e344cf731 | |||
6de151e765 | |||
422807387b | |||
fedf71c6fb | |||
4357a82076 | |||
0581bf6a75 | |||
7a9e894550 | |||
1dcc170215 | |||
fabc0733e9 | |||
e1a59dcf93 | |||
b5bd86296e | |||
04b4177e30 | |||
31ef56958d | |||
c888a7bbaa | |||
80df052d35 | |||
59e97b6378 | |||
9269be630b | |||
c0b8d0d5b5 | |||
0d441daef6 | |||
ecd36ce759 | |||
5f3c46579e | |||
39a4ac1502 | |||
06fd982030 | |||
f6dbf4a46a | |||
e0fd9a60e7 | |||
6261141579 | |||
2329a2537d | |||
6a0e5deb90 | |||
0e6e457702 | |||
96ae7a3a2d | |||
40377c7250 | |||
bf6b6afa9e | |||
4cb888e946 | |||
42cad6c1b6 | |||
df60e8786c | |||
d9c799c529 | |||
7ba58718de | |||
569887a640 | |||
fb57d7c549 | |||
5c540f5c52 | |||
9f96568171 | |||
467802b628 | |||
bac6946956 | |||
2b32cb215f | |||
064d6cb8a5 | |||
a2ea5e9f47 | |||
4d4ccced31 | |||
cea735cf12 | |||
107927b319 | |||
0d0b7a1a57 | |||
8d53137749 | |||
beeab4e6f3 | |||
9ff4029db9 | |||
489a11e865 | |||
e33c50d74c | |||
e9649218bf | |||
f240a3269e | |||
6d5fcf4fbe | |||
e67dce0f94 | |||
553e2db951 | |||
88ce8043c5 | |||
5b29f17ef0 | |||
31ec0c4fdc | |||
ffb5ea3dc4 | |||
7689a0f792 | |||
2878c0b6dc | |||
b572c9d5e5 | |||
c892db6398 | |||
04b5123aed | |||
f88c011546 | |||
7bb960671d | |||
73ffd6acdf | |||
469af0348e | |||
4a8fba9ea5 | |||
ee0b7ad683 | |||
89f5967647 | |||
ea98989e2c | |||
d28d507190 | |||
a06689c7e7 | |||
3b57a7c37b | |||
9a4ca626d8 | |||
37871c85f6 | |||
2c760f5b70 | |||
6f2de3c3f0 | |||
31c4c7bc0b | |||
dc9025c14d | |||
62b6a8394a | |||
f350768a82 | |||
94f249254f | |||
ae1e14e438 | |||
1425441ce4 | |||
d1eb34e432 | |||
5199e826db | |||
05bad430b6 | |||
b165c4a46f | |||
465dd5c524 | |||
29e53582cc | |||
9ed0df4c38 | |||
d3a1a4171e | |||
1eb0e195d6 | |||
457750283a | |||
2ea4efeefa | |||
2882253237 | |||
b9c9cd75e7 | |||
b33d8ce5c7 | |||
4fb80753f5 | |||
9ebf5317bc | |||
3e7ff29995 | |||
43a98b9589 | |||
3c8f9b8291 | |||
cd7adbf9c4 | |||
d6c8bdc664 | |||
484ad0f1f7 | |||
2437fe9dfa | |||
cbe5357de0 | |||
894240d362 | |||
bac8e8d8ac | |||
d4697a0de7 | |||
246334390b | |||
6e66d7b8eb | |||
edfe125bf9 | |||
7f9b90f0a6 | |||
0e5b196cb6 | |||
078332e4d8 | |||
846be446d3 | |||
732e215dd8 | |||
093d8ea323 | |||
3cde494000 | |||
a31e6e8497 | |||
2ef5d1af86 | |||
84c491a8c8 | |||
ae47a6f4fa | |||
1c3dbdbbf6 | |||
fa6024e15e | |||
9b93383f5b | |||
86b683a888 | |||
5d0942baa2 | |||
6c244bd4dd | |||
08abfa3814 | |||
4a0899fe52 | |||
fa120eb2af | |||
166b55ced1 | |||
2f8192bc6b | |||
51b75ae50a | |||
a89c82e402 | |||
c70af6530c | |||
6010eb27c9 | |||
2a0fbe34ba | |||
c1dc2d5e68 | |||
c71093b21a | |||
b7f1c2d2f1 | |||
dafb66142e | |||
2431a707d3 | |||
34d306ab18 | |||
62e79d2c1e | |||
4e07adbb86 | |||
495bb66541 | |||
f7ed3d4df8 | |||
64c14b5dcf | |||
11b3d2123f | |||
0df412d8cc | |||
ad1fb31318 | |||
6a303185ef | |||
f3df6fa9a7 | |||
2528b9b4bf | |||
e0f150b171 | |||
c73c92368f | |||
1609a20381 | |||
061b90507d | |||
2a468d25fc | |||
9f3fd694f0 | |||
38750f88fc | |||
3b452e0a79 | |||
cea4fd9bb0 | |||
896a2430d8 | |||
3a46e02964 | |||
39f8a1aaf9 | |||
d9ceb9deb4 | |||
126f9e51fb | |||
37e1d93ca0 | |||
d0310faa3b | |||
f266dc6174 | |||
28bca0546b | |||
6d13a0a78a | |||
f503b60bb9 | |||
e552d073b7 | |||
8d7a89b271 | |||
f9891c8b46 | |||
ad787e18e0 | |||
81ade745b1 | |||
d32efc9c7b | |||
beceea29d1 | |||
17e9bcb9b8 | |||
15062533fc | |||
08c76e1f7d | |||
f2e1d0ae9a | |||
496fedfa2a | |||
b763b37411 | |||
b3d597b1dd | |||
258f52b520 | |||
b71181adc3 | |||
9d68cb2144 | |||
723591376e | |||
8595469093 | |||
95636813a4 | |||
b4383fc759 | |||
33ed3ebf6a | |||
744c70dcc7 | |||
72b3c3c838 | |||
7c82dbcc51 | |||
cfe08ff197 | |||
8be1fdf26f | |||
5a2bbcaa93 | |||
30d3c9ed48 | |||
dcf86e0cff | |||
d8b150f0d5 | |||
c7ddc999fc | |||
006eb9d8c8 | |||
c49869b424 | |||
be81685887 | |||
f26a1985bf | |||
0b20b83b7d | |||
22f009901d | |||
4685e53fe6 | |||
193eefb2e8 | |||
d46bc60413 | |||
ce005dac68 | |||
f5fa96f9c3 | |||
f47c32a12d | |||
da33b75e7d | |||
85b6c66c83 | |||
0b4298c242 | |||
3d4923d85a | |||
86cb421df6 | |||
459f493486 | |||
d5f645c6cd | |||
d3d38c95b7 | |||
0f47ff1be5 | |||
cf9588040d | |||
4c80425f30 | |||
6238563b2b | |||
5387144a93 | |||
6453c9062b | |||
9168ab0077 | |||
6e079dc120 | |||
5adbc767f6 | |||
2647b6f9ba | |||
9137cbd5e4 | |||
444d2af9a9 | |||
df128a55b1 | |||
a84a7340b6 | |||
a0b366d550 | |||
50b4f78344 | |||
ebf201b8f5 | |||
ff5eb86aeb | |||
0e1245e3d0 | |||
7b2da05310 | |||
d2186a3b3f | |||
b56fcfe9b5 | |||
9a940bf295 | |||
5fb34e87eb | |||
5936ba43f3 | |||
9734af6697 | |||
9529530766 | |||
dde937cce3 | |||
4ab023329d | |||
39f3f52b3e | |||
cad708d210 | |||
2422f8c21e | |||
45ffee8346 | |||
6ba9b5a86f | |||
cc0dd5f8a2 | |||
4b5d17ebb3 | |||
117453e890 | |||
544bc2693a | |||
e088721f71 | |||
1463a2a04d | |||
92bb8320d6 | |||
01b60633a8 | |||
3356305ca6 | |||
f553ae4bf3 | |||
6aeed16422 | |||
b09d44ef2d | |||
23d4d9f368 | |||
0f639750a1 | |||
9d5af5b0c2 | |||
91f2f03759 | |||
32d47eb688 | |||
44da9e201c | |||
f2cc3dd8ea | |||
8f5138d8a5 | |||
a67eaec0d0 | |||
f485d91141 | |||
13ad740701 | |||
d7205bebd5 | |||
197a3c6cea | |||
3b8deeefa5 | |||
f3c485e21f | |||
78d6ce45d4 | |||
965881b7ce | |||
ef2e86edeb | |||
59de112995 | |||
b33a2b05af | |||
55ef0d25d3 | |||
9965553011 | |||
0c9d8a4ef5 | |||
5ebe431087 | |||
9e77d4d037 | |||
d1e18d9a44 | |||
7ae4a268eb | |||
6aea9f9923 | |||
0a6c62fbbe | |||
b68ebfa8fc | |||
c7d2235899 | |||
89c0ef7395 | |||
3de8f8c137 | |||
da33246bc5 | |||
4721e47064 | |||
266c58a20b | |||
d1a4a7a7fa | |||
d6d416cc96 | |||
ee8ca86dd6 | |||
f57b05b573 | |||
255748ea5d | |||
f35eee94bd | |||
e39becf521 | |||
c00e2fb996 | |||
52b1e2814a | |||
fe26be1181 | |||
be756f18df | |||
ad84062b0d | |||
431d0083a8 | |||
b458a4f745 | |||
0962b1fa5d | |||
b5598cee7e | |||
2fa4938796 | |||
8dc95ddbd4 | |||
df02f7aed8 | |||
9400f84d31 | |||
1011ed76a6 | |||
7596c54dba | |||
bd17f7b877 | |||
6d787c2590 | |||
afa6a2de48 | |||
8eb34dbe57 | |||
58d668c387 | |||
31f5283563 | |||
7f443e1e38 | |||
3b99d6298e | |||
fca9907c49 | |||
ca7580c064 | |||
0bca050f2c | |||
382e2167cc | |||
853c1afac2 | |||
5a7dc9eb62 | |||
3dd6867ea9 | |||
b18946a557 | |||
91f955e31f | |||
65562cd654 | |||
bf1712422a | |||
e512bce189 | |||
524bcbb494 | |||
31839f3c45 | |||
26e59a6280 | |||
c157ee97d4 | |||
7378015b74 | |||
e68da64969 | |||
ee9a42af8e | |||
145eb479a4 | |||
2a93d288a8 | |||
ffd50a6e8d | |||
954111695c | |||
7f7ab8f16c | |||
c0441677d1 | |||
ce828b6ae8 | |||
42b4e4e1dd | |||
b4eb02aa8b | |||
db7906a579 | |||
7140db4751 | |||
ecea91679f | |||
5a157176dd | |||
7841a7f824 | |||
783982751d | |||
e30a0e63b5 | |||
d59ae09832 | |||
39da5326f5 | |||
f9beb3c0a5 | |||
6617a77e63 | |||
91945fbf21 | |||
a2545bc011 | |||
e79595def5 | |||
0f21de8423 | |||
05e8dd18b1 | |||
86f29118d3 | |||
95f8359093 | |||
4612f5b5fd | |||
28cbab3956 | |||
0ffdeef681 | |||
eb5fa79723 | |||
ca24fe48c4 | |||
f704b54883 | |||
bfb5c807e7 | |||
503f9fda30 | |||
8b8fbafb84 | |||
4d990ab1bb | |||
99f83bbad4 | |||
3c599a2c08 | |||
de2b6b8349 | |||
dd12d53494 | |||
07734c91d5 | |||
d415c206b5 | |||
198f427907 | |||
416be81068 | |||
c773b6c896 | |||
2e1427b6a7 | |||
a1ef94e822 | |||
5ea2e405da | |||
279d8b5f3d | |||
49ca968b0b | |||
10348399a6 | |||
087504f142 | |||
1cd8703b3f | |||
e1f8db9adb | |||
deda9c0f8a | |||
02381a2ca0 | |||
4655d041cd | |||
1e3d16e8d1 | |||
409a5dc8af | |||
c544a85d2a | |||
bfb0c2d543 | |||
e3acc8fcf3 | |||
4a637802fa | |||
505e3f7e85 | |||
cf49dec4de | |||
2491d790d2 | |||
66d875a143 | |||
15b0ab51b9 | |||
afd7ce680b | |||
7d549f8908 | |||
b3f24b4884 | |||
8b93689a35 | |||
b6b13c9f29 | |||
b2536f418f | |||
b590a04f78 | |||
55d0ab5dc4 | |||
80f963ccd5 | |||
e9dcc7a3c5 | |||
fd15c99f4e | |||
20667c59d8 | |||
71dbcf127a | |||
2b84008ed9 | |||
7f50afb0c7 | |||
2cce24dd4b | |||
216db613a7 | |||
cfcf3c584f | |||
349b6a1152 | |||
48427512d6 | |||
09d50671e6 | |||
59674c984e | |||
8cced29eed | |||
d589c8681e | |||
c27014b9df | |||
3270ce03d6 | |||
680594b50c | |||
18a55cdd49 | |||
b9d075b0fc | |||
bc553e6a5b | |||
3c559e791f | |||
72e634fa73 | |||
8dda419b3c | |||
87bb5f5e7a | |||
0e3c245c6c | |||
3eff037f8c | |||
b3426c03b4 | |||
297e9c826f | |||
1d260e6573 | |||
8edc6dc91f | |||
d2496576f1 | |||
ded3f909cb | |||
3f19e1d97f | |||
5403a8e861 | |||
660ff2072d | |||
2cc66916e5 | |||
910490f3f4 | |||
1095bfafed | |||
3de9d774b1 | |||
3dd23a5e72 | |||
98e338ee86 | |||
8e71ca00d4 | |||
9890bd98b0 | |||
4e09ebeded | |||
d57ace259a | |||
838d8b07ab | |||
97ea346fdf | |||
65244a7f66 | |||
0443ac2827 | |||
20bbd81201 | |||
98189771ab | |||
687c419cde | |||
188f64172b | |||
632283092c | |||
203061c24a | |||
0328a723b8 | |||
80d0b01b38 | |||
ba2533f0ee | |||
5aacda4b98 | |||
6fdb223859 | |||
03026a2a7d | |||
445394e9ab | |||
a5208f575f | |||
13e902d571 | |||
aa8d7721d4 | |||
d6c2d1df2c | |||
59613ee270 | |||
50f4c5ae33 | |||
a433da754a | |||
21353baa16 | |||
6342c93ee7 | |||
a546f11c6d | |||
033435b75f | |||
c42ef561a0 | |||
22d66efe65 | |||
c9871505f1 | |||
c563d34fc1 | |||
5f1786fc9c | |||
7e1f1a5130 | |||
b90a2ff079 | |||
464f83454f | |||
a8a9fb08dd | |||
571d07d45b | |||
aa771cb19f | |||
c162131d00 | |||
6b2a54030f | |||
1b439d9ced | |||
5e2a2cd5e7 | |||
8bb2bace86 | |||
66922d05d7 | |||
1317689066 | |||
940fb57c06 | |||
b89ce2e1b4 | |||
d059bae29d | |||
f839052fe7 | |||
d5c8912f1e | |||
fdb9805d68 | |||
563b8694d2 | |||
28086f0d2c | |||
4510a8f4b3 | |||
292aa56ce9 | |||
31d04e6e0d | |||
fb6ea0af40 | |||
e78d140b11 | |||
bcbf2deb42 | |||
ec32e61bb8 | |||
7e220cac2d | |||
63f73f2a60 | |||
ef879a8f30 | |||
5dee36464e | |||
1a29f4aeeb | |||
809b7513a2 | |||
c54dcf499b | |||
3647920722 | |||
0a19f1df09 | |||
03ddd190fd | |||
539b97df62 | |||
a39cd99b26 | |||
4822630c0c | |||
00ad48554a | |||
5b549f3770 | |||
9f38be89f6 | |||
58e033d97d | |||
d9a6afe1a4 | |||
b5392f930d | |||
4d9d964276 | |||
eb50d9a4fe | |||
a96c4a1340 | |||
5fffb5e30d | |||
d947c691bc | |||
08aa502d79 | |||
fad9536edf | |||
a4ea8b8c18 | |||
314cef6600 | |||
ea58adddf4 | |||
eefb5900d0 | |||
7b2deddbb0 | |||
d2f90a0659 | |||
d12d25227f | |||
c6f2b61355 | |||
a0cd4b18af | |||
74de4b85d1 | |||
b685e921bb | |||
0a8da746c2 | |||
7e4d16b861 | |||
91bc620702 | |||
e0c084cab3 | |||
67a26c9dcd | |||
792098c45e | |||
bd0a93fa28 | |||
a1af2757b5 | |||
71f0ceb03a | |||
1cfba67b2c | |||
66e356c662 | |||
5cbaba48e6 | |||
afec0716ee | |||
ed4d0d78bb | |||
703658a7ce | |||
59d5731ec7 | |||
8f09688d23 | |||
540151f115 | |||
abddb1fff0 | |||
d53fd704f2 | |||
b371e233eb | |||
c48624ce1b | |||
3e7727908c | |||
81100bf7ff | |||
4007d7f8c7 | |||
3beb108a62 | |||
93bcebcfff | |||
e34c80256e | |||
df2bfb9a1a | |||
1225afe482 | |||
9389fdfe4d | |||
970f1a4101 | |||
640215e6f4 | |||
01ebc74d56 | |||
fdd0e9b38f | |||
6325ce2ddd | |||
cf5312b17b | |||
7cb4f4edbf | |||
65e4f7858e | |||
02240b7a5e | |||
568a42ab8c | |||
44449192ab | |||
2a3f9f543a | |||
eb6cac2f16 | |||
1799011dc6 | |||
da10b9224a | |||
1458777c3b | |||
3807ecdc54 | |||
a7d2f29823 | |||
8418fd418c | |||
a165c07ed7 | |||
19e1d631e3 | |||
eb0eeb21be | |||
f0a3d44458 | |||
101ef0b528 | |||
cd7a70f487 | |||
16248e89ec | |||
21160a72eb | |||
117cf2bdcb | |||
f2cc52b694 | |||
2f944f4da4 | |||
ec88c5c688 | |||
96c075a359 | |||
5bfb5cc485 | |||
155c8023dd | |||
4a9cd2e237 | |||
47cef8f95b | |||
4af1fe23f8 | |||
a5d9e7a628 | |||
06993ee729 | |||
b0b99058cc | |||
4a86b3b036 | |||
c99d3afe3e | |||
1e02d73c73 | |||
37ba3d1cf5 | |||
85bb874c9c | |||
8d6ea6a491 | |||
f6f4a8f8de | |||
148ca3d030 | |||
52009a9d16 | |||
38a1286111 | |||
eeb8e74944 | |||
3d0df83133 | |||
ab9a7c0c44 | |||
51d9d6712e | |||
652799b738 | |||
a23a0388e6 | |||
277498c283 | |||
182fea717e | |||
c788ae328e | |||
db7f6fb752 | |||
54ff1a0ad3 | |||
7cd2c07317 | |||
546a2e8468 | |||
a963acdcc7 | |||
9ede2ffee8 | |||
e804695c6a | |||
4c095fc9e9 | |||
c2741855af | |||
16562cb859 | |||
44348185d9 | |||
220ac049ba | |||
057d1b9d7e | |||
0ebf32e207 | |||
8981c809e8 | |||
cb3e16f287 | |||
5e59a82c27 | |||
4b5eefa675 | |||
526d840b13 | |||
4b3047833f | |||
7fc006f745 | |||
7e8eb6bdbe | |||
63c95d2e87 | |||
8e23bac97e | |||
12b121cdb4 | |||
544b572c07 | |||
f1f2367b80 | |||
6ae8b5034b | |||
6aa094e30d | |||
0c1cf9f5a2 | |||
2d9a35a8be | |||
f0b1c1f9c3 | |||
4fcf57b782 | |||
9cd53c56ed | |||
f5238b243f | |||
64d8b9decf | |||
a4542990f4 | |||
662c61d449 | |||
c43001eb14 | |||
1b7b7a3697 | |||
293e6a96a9 | |||
4f387e1240 | |||
b7908d2b08 | |||
9172b6920c | |||
5fa756cc97 | |||
137f41f2d4 | |||
8216b46d7b | |||
ed316bc39c | |||
12ef4f2d71 | |||
07841c2a2a | |||
7d640e2ac7 | |||
5be75d5311 | |||
830e0de401 | |||
9a016236d4 | |||
69e826dab2 | |||
50aebaf8a0 | |||
9ef977f595 | |||
e405c27294 | |||
85cd7c245c | |||
b843ee6efc | |||
dad1cef0c0 | |||
cd2aa47a34 | |||
216f717d31 | |||
8d75f6c247 | |||
a4e8fb2afd | |||
5c82c444fb | |||
0889e9392c | |||
a7cac0a681 | |||
2dba2949fa | |||
063b162008 | |||
b93f86601c | |||
9c5a9bba8e | |||
157b189f6b | |||
146c098233 | |||
184a1176f3 | |||
126d4198a9 | |||
f4aa501eca | |||
ccac15a4dd | |||
4055cd8b03 | |||
aa3c0a5fad | |||
8699724a07 | |||
0d4d09cad1 | |||
1dbf31014f | |||
047a9e4ddc | |||
66cabe7ba2 | |||
434a975b97 | |||
aa9aff7b81 | |||
460a1758aa | |||
8444e3c47a | |||
2c430c8c5b | |||
faf20d30a6 | |||
f091f4daf7 | |||
5ec97cea67 | |||
1bc6bf1152 | |||
621142aa60 | |||
07b7d8c630 | |||
7cdb047ce7 | |||
544878b563 | |||
5bc641afeb | |||
b3267e002e | |||
826f35421e | |||
89d7fd8100 | |||
a347630641 | |||
4913d8aed0 | |||
b1af16a424 | |||
6673e8ec6a | |||
e366ba14eb | |||
00e1ee9242 | |||
1d5fc281c8 | |||
bca33b43f7 | |||
3324e3f814 | |||
2c307a0bed | |||
32ddc0d9f7 | |||
75e4314675 | |||
3b217d5c69 | |||
ff0945e8ec | |||
4a73bf8378 | |||
3f85edbcc5 | |||
bb9506121f | |||
f377fafd94 | |||
c0193c9237 | |||
8ce36ac548 | |||
8c206c9fdd | |||
7439a7adaf | |||
670856620d | |||
1ef039bb49 | |||
c4fdb7b923 | |||
e31ec299de | |||
08456363f2 | |||
15063e8819 | |||
302dddf0f4 | |||
61e346624a | |||
c59fbf2bb8 | |||
b987282242 | |||
f4e1583376 | |||
8adaffcbed | |||
e2e1f12265 | |||
c74b93df9f | |||
0f5e01a962 | |||
9fc12e0d4e | |||
7ca7dbc0f5 | |||
d366f54744 | |||
0caf834c8f | |||
3a323808f6 | |||
d073a0b983 | |||
a23ff7c8ed | |||
5cf9ccc57d | |||
6b212d8fcf | |||
e2c24f783d | |||
34c30565b0 | |||
0bd0806d2f | |||
ad1fdac987 | |||
d881367c08 | |||
40bc485745 | |||
c17cc63e48 | |||
48c5d29cde | |||
2e0f2788a8 | |||
4c81167ce4 | |||
bd7b245ff0 | |||
2e3aff8d86 | |||
544369ebf3 | |||
6bbabef388 | |||
3e786b5546 | |||
2fe596e677 | |||
733c28fa42 | |||
04ce8fe6e3 | |||
ef19ce5346 | |||
84d5d65bce | |||
7ece24634c | |||
1c6e5a6e9d | |||
ca38fbcdbf | |||
dacd5b9a6a | |||
680027edf6 | |||
98f43a1f75 | |||
08eca5dcc3 | |||
c6e3708174 | |||
3a4511eb6c | |||
2a20d13c39 | |||
2524928f5d | |||
6c8a040ec5 | |||
41d9b65149 | |||
d157b3e1e0 | |||
14222d8678 | |||
9970b61ad3 | |||
0a4457ff44 | |||
cccb815c5e | |||
f4d2c8714f | |||
bab69c3fe2 | |||
3d41a13990 | |||
6276dfee51 | |||
2c469ad79c | |||
564720f2c8 | |||
87f265b210 | |||
0ecdf3e536 | |||
f795242f26 | |||
9c55ee34ac | |||
a3cb61a55d | |||
73ee930a53 | |||
69254494a0 | |||
042e46f6c8 | |||
cafbbf5261 | |||
7db852aa57 | |||
dc6c322fda | |||
b2a5f0b9c2 | |||
fe481eb3e5 | |||
e119d86ca8 | |||
d78866399c | |||
3dddf4fb41 | |||
e29b80429f | |||
f6c20681d1 | |||
0b7cc927b6 | |||
66532b0ba7 | |||
02547c5886 | |||
b8f1bd7a37 | |||
26e0d4c98e | |||
5422681942 | |||
0bd84ed250 | |||
6d2dbe11ae | |||
9c0fe34511 | |||
c4d56d668f | |||
be207b1098 | |||
09370df845 | |||
f6f5779072 | |||
e3443d87cc | |||
efe7947ac2 | |||
b9c18507ec | |||
141d909323 | |||
45ecc61c03 | |||
35b8ae1992 | |||
b92c4e3683 | |||
3071c8114a | |||
cc7495c4e0 | |||
c27f1c390a | |||
041200fae3 | |||
2e92adce77 | |||
6c5e7c70ac | |||
d434e8b1f1 | |||
17cfba6fd4 | |||
4183312cec | |||
bccd2b6c49 | |||
aba8fb1158 | |||
26a682c944 | |||
825646e643 | |||
641e0f6841 | |||
b9df3bc5f7 | |||
0baad5ad6d | |||
a7d55cf910 | |||
871d2c74a2 | |||
a6f9eab44a | |||
c989e0bd56 | |||
eaee392cb3 | |||
3f98d41b6e | |||
e825d3f4d6 | |||
b7ec252d37 | |||
43d07f75cf | |||
25f9dcb685 | |||
9904905b48 | |||
b2e75d2d1d | |||
30e9bc56d6 | |||
e5269a8fd9 | |||
c47c6405e8 | |||
06cc764483 | |||
ed9ea86ba3 | |||
d19b3ca90d | |||
c077b2274b | |||
92dc391291 | |||
bba18c5540 | |||
d93ee950b3 | |||
c3244ccca7 | |||
f98dc48386 | |||
7706a04c60 | |||
c703814e95 | |||
4c3da7039d | |||
f2ad8b3517 | |||
9247e86f28 | |||
cac5e94726 | |||
28883db36f | |||
fa781fa52c | |||
b11a342703 | |||
17674ad829 | |||
810527a4ea | |||
047cac7b42 | |||
b3cd762ea4 | |||
a0a83e1a6c | |||
3b34177830 | |||
6664dd0208 | |||
f3073fcff4 | |||
9d426f18f8 | |||
990a05d261 | |||
669e155ad2 | |||
d298ffe208 | |||
378352540d | |||
07be67aa4b | |||
bcdb893778 | |||
4926e989ac | |||
9f378d3b03 | |||
c1e9ba8c3d | |||
8a48c92338 | |||
c19161538c | |||
04f995150f | |||
9429b70f91 | |||
90cf4bb02a | |||
98d5a86ec0 | |||
931e991325 | |||
53b4b2850c | |||
767c4b2899 | |||
5592cfd5b3 | |||
135bc3652e | |||
693c55c545 | |||
321daa86ef | |||
336420348e | |||
b85ddc5d44 | |||
dffa781558 | |||
47ea45190b | |||
eaeb0b7892 | |||
1a64194307 | |||
bd4bcab8ad | |||
57e257d987 | |||
6a27e76696 | |||
b5871e5ccf | |||
403f433238 | |||
ae5b3671b3 | |||
150a61e103 | |||
ef3caf053e | |||
bbeed7ac72 | |||
83369fa6f4 | |||
532f205a05 | |||
19d04388a3 | |||
99f0e0c4dc | |||
3a0cad30f2 | |||
c199973f78 | |||
ccab651ded | |||
db7a3ae863 | |||
a31cd21c3a | |||
cf96c2a4f1 | |||
517ed8b0e4 | |||
d70f5fae1c | |||
1662c0bbfe | |||
43e9bd6b9c | |||
1e9473cc25 | |||
7e3eab2c13 | |||
31270646ba | |||
77f778c0c3 | |||
c9c80c6907 | |||
b28658995d | |||
326edeb59c | |||
ea24414605 | |||
cd92979d44 | |||
17b1a166a3 | |||
231537bb8f | |||
308185546b | |||
0f33d8c29a | |||
877481cda2 | |||
deab64d2b6 | |||
9777048e92 | |||
bd00fb1366 | |||
e24585c834 | |||
17887d08fe | |||
b14b55daaf | |||
544c124b79 | |||
e7c9781bdc | |||
7ebb0189fd | |||
4288cda2ed | |||
46445155ea | |||
47a7b37cbf | |||
17362bee85 | |||
868c8074b5 | |||
7724cebf97 | |||
7ae71921cf | |||
7b10debe2e | |||
452aaae601 | |||
52f0e84ba7 | |||
5f914dc4ce | |||
c3feebb7f5 | |||
768db4f5ca | |||
65fe2948a9 | |||
34b0d4804f | |||
64dea2ed62 | |||
cebf57905b | |||
b1a2b22d8b | |||
ea61c0ee98 | |||
640ca69c05 | |||
8f45905193 | |||
b9cc7b38f8 | |||
a9ee8fcbb0 | |||
a78146c2b9 | |||
71756c21af | |||
6046eb405a | |||
e1559eb84f | |||
3a82e9b8a3 | |||
b3042ed234 | |||
d03ae8c33a | |||
3820e3ceed | |||
f357f7e264 | |||
6f76d0b12f | |||
7f383c0b41 | |||
2de57585a0 | |||
19dca2b046 | |||
13e7a2fd35 | |||
bcbc514cfa | |||
498de91e45 | |||
917cc5cf25 | |||
8b199ce675 | |||
fd7eb20c0f | |||
152a5e1916 | |||
5f7b1164c5 | |||
ae317695e3 | |||
0db6e7569d | |||
d552acac1d | |||
02592ec291 | |||
25fcdce7d4 | |||
ef0c2265d7 | |||
0f718312f1 | |||
a260215a64 | |||
ba0a3930d6 | |||
0bbb0fcf5f | |||
1d3489445b | |||
ad4641024a | |||
0feb983a1a | |||
c52078fd01 | |||
b30a47b841 | |||
fa0ef81d15 | |||
5865e3c4e1 | |||
7cfe68d965 | |||
52f3bd158a | |||
d92137adab | |||
6e66b4e820 | |||
4c33a3aaa3 | |||
78107939de | |||
589eff7e47 | |||
73c405ae30 | |||
f208f4a123 | |||
368ade72ea | |||
cacecefb27 | |||
55471147e5 | |||
c76bfac088 | |||
8950cfb66f | |||
4af4e7f06e | |||
28dc7dce83 | |||
4323d26247 | |||
73d560a71a | |||
463fca4362 | |||
2af2f2c8ca | |||
6752b61514 | |||
9153271368 | |||
5affcaae35 | |||
8881d57531 | |||
2c7d184885 | |||
7815c074b4 | |||
23af8bac72 | |||
4f8b108288 | |||
44443696af | |||
4593d66a20 | |||
b944516f66 | |||
715d60abce | |||
1557a67c83 | |||
275f2e22a1 | |||
5033d6ce51 | |||
3c19382367 | |||
c14eb3b950 | |||
1bc578ac45 | |||
38c3ff7b6e | |||
f2ac013756 | |||
ed52e3dd9c | |||
6feb4dadd8 | |||
83d6a8a30c | |||
f44f331e16 | |||
b8302110b8 | |||
af62855ac4 | |||
9b0f933472 | |||
8a6174d6e8 | |||
9310ff4b3d | |||
a9bf88b883 | |||
198c2e63ac | |||
7ed704d73d | |||
d472c4f01e | |||
f5202a640b | |||
cc8e992fc3 | |||
23c923ba72 | |||
d3ce8c8442 | |||
ec933135ce | |||
cac0231615 | |||
96d8e43178 | |||
6eccc99b9c | |||
89463e333e | |||
00ec563342 | |||
83ea46b933 | |||
b56224408e | |||
9fe5dde68d | |||
270bb0a4c4 | |||
67d2a52214 | |||
d9642c3a64 | |||
e99c1985d5 | |||
31af70dd96 | |||
19398245b4 | |||
d06828da98 | |||
fd5d788f5e | |||
328c8bbd23 | |||
0921962e44 | |||
7fbed223c7 | |||
3b50c05bb2 | |||
8b9a3ec93a | |||
237f1789e3 | |||
3c2e287b7c | |||
f6410baaab | |||
8a77454e33 | |||
b4905625eb | |||
09e2f6e1ba | |||
d1c1c9a76e | |||
d4e140dae7 | |||
55b7263ed8 | |||
3555389a8c | |||
8417485f95 | |||
0c4ed4bd7e | |||
276d46ac05 | |||
56352e1f80 | |||
b14f3b8b0b | |||
aae7552b24 | |||
ac14a40d0e | |||
98d19572b1 | |||
e2f39e23e8 | |||
ff3c9647c3 | |||
129bc4c0e0 | |||
ab275f0915 | |||
c19d6a6ce5 | |||
8da51ca2c3 | |||
b16fda22a4 | |||
e211b9ed59 | |||
b62c1e392b | |||
6c7857411c | |||
1f21a96c84 | |||
badbcde542 | |||
e13a65c5ff | |||
447badd1cf | |||
ff423f749a | |||
125b48d1d5 | |||
c5651568ea | |||
a17242577a | |||
69d73e4d75 | |||
489c722dcc | |||
145748bf25 | |||
20cfc87ca0 | |||
565b0aada9 | |||
1ceac4efcf | |||
b8501c7c5f | |||
10a9432cc2 | |||
5b9948140f | |||
15947182fd | |||
967f862e47 | |||
3dbaf4f336 | |||
2e31ea05bb | |||
509f46953e | |||
71c6c1725e | |||
808440e6b2 | |||
ad1456f0d7 | |||
e29a6ac16a | |||
5ccce7cdc7 | |||
975a7e3ba3 | |||
64fb4a32e0 | |||
b3af349284 | |||
bd4ad6e630 | |||
6665da81ef | |||
0d9f4e9277 | |||
fd10f773db | |||
571b7b2118 | |||
eac7023f84 | |||
f08f266aa2 | |||
f94aed8773 | |||
8261d67ae7 | |||
b28b6b53cc | |||
76c4386699 | |||
c6b152a976 | |||
517546aaab | |||
8abf66e4e0 | |||
4d372c7353 | |||
328d42f2d8 | |||
8f076f2be8 | |||
60012ac64e | |||
9265f89f4e | |||
cb587a2522 | |||
df29d23ee3 | |||
45564050ec | |||
674bb3bf65 | |||
a3121b0b2f | |||
aadd1d0eaf | |||
b429c5be15 | |||
92185e373e | |||
3fcea0dfad | |||
cca6e00868 | |||
fbdeb4af75 | |||
26210fa040 | |||
b14aedc3ad | |||
f2a66d2b0c | |||
c804f31a13 | |||
f8c3442df0 | |||
af15d040e1 | |||
3076deb391 | |||
c2f6c1d544 | |||
78561f481e | |||
eb5e47dd94 | |||
142258c2f6 | |||
2d58bf6a03 | |||
96e0ce30db | |||
b592917dcf | |||
f2a2137ae2 | |||
4177bedd65 | |||
f2ba2d9421 | |||
3c2305f162 | |||
57f2188d86 | |||
6faccd1f00 | |||
e2e8ccefd7 | |||
609305fa76 | |||
729d5971d2 | |||
a711e9c44d | |||
37bec0b397 | |||
598af2e2c2 | |||
fffc9f3b9d | |||
b72b5d9528 | |||
3a2660e489 | |||
5526e68f15 | |||
21f1ccce9c | |||
ebdafdb1a7 | |||
87fe418172 | |||
142b10ee1f | |||
b29da7f79e | |||
451ef598e6 | |||
0478037e11 | |||
9eac4c9dda | |||
a913b3df90 | |||
db6c3f25f0 | |||
8d7d98166e | |||
490b1d3b94 | |||
78025f6c5c | |||
fcfa35670a | |||
e458bcd099 | |||
5ee4c12ebb | |||
4f61f56be1 | |||
65f03b7c42 | |||
c32ccb779c | |||
c764fb2012 | |||
b19946cc62 | |||
7b2a88901f | |||
903b40a8a4 | |||
9c0e14e7c4 | |||
dace2498ec | |||
367497486d | |||
70b421f3bd | |||
6e2d0c1b90 | |||
8f23b5d434 | |||
2874330828 | |||
04d025cf50 | |||
8560db6116 | |||
6044be7f9e | |||
762621f27c | |||
57c9bb0a97 | |||
9df03a168f | |||
a392b00131 | |||
7997f1ff88 | |||
fa4a74b098 | |||
19ea016910 | |||
7e5a2660bc | |||
bc4c903c1f | |||
30cf155168 | |||
5e4a26a76e | |||
810e566c80 | |||
a8dc3f58a9 | |||
2020cbb6ed | |||
19476c34b0 | |||
84133b161c | |||
593d1cf817 | |||
eda20b677f | |||
275f7ba5ac | |||
d19fa78ae7 | |||
848e30daa1 | |||
914e6b44bb | |||
bf2c693f89 | |||
9d0b7b9021 | |||
4d4a13f797 | |||
63f98f2304 | |||
7803e487bd | |||
0476332161 | |||
79a2f4767d | |||
4d543b5aa6 | |||
414d5d8698 | |||
a88921e2b0 | |||
1c9bd9ce61 | |||
328d2e2a7d | |||
3b34ef29b3 | |||
328b77a5e9 | |||
ad23778d23 | |||
c645ae069b | |||
778c8a77c1 | |||
d7e3ead835 | |||
070e79ea92 | |||
1f33762d77 | |||
5f672636d6 | |||
360035ee5b | |||
5c354b9979 | |||
76378b3c01 | |||
fb49379ed2 | |||
8c9be43271 | |||
a19b07fec1 | |||
c1b7e8a60b | |||
c796a8f238 | |||
24e52659a3 | |||
1430b3995f | |||
02b1e20f00 | |||
595d926bc2 | |||
36cc664bc7 | |||
b6b5e7fb45 | |||
a449290ca2 | |||
3891d272a0 | |||
40dc75efcb | |||
6bdaaefb30 | |||
86dbe0f307 | |||
ab0ab966f5 | |||
ce4d39d2d7 | |||
c22ebc9339 | |||
464f4d6ee2 | |||
f77f7cdf89 | |||
d10680bbbf | |||
93064ff7cd | |||
70f6d82614 | |||
8a443b9ade | |||
09bf63eacf | |||
e5845bfb2d | |||
85d3b40a19 | |||
16a70c3d40 | |||
479637d8a2 | |||
6033bdca8d | |||
7eb009a2ef | |||
e06e9197b8 | |||
efc39cbec7 | |||
7be4f30c5a | |||
096fd0a64b | |||
5399f80848 | |||
2bf6a301d3 | |||
b91b173f3d | |||
e6a491e782 | |||
804a0433e0 | |||
1b35295ec2 | |||
eb20320d7b | |||
80604cdf03 | |||
6f7f39e96b | |||
755a0131be | |||
c8db633852 | |||
b4a1981289 | |||
2ae3f51fa0 | |||
23e1202e35 | |||
c32a92e5a0 | |||
88164787ee | |||
3b42683790 | |||
8b040c0730 | |||
bc15cc3e86 | |||
393c71c213 | |||
2d6ed31cbd | |||
fd666ed0b5 | |||
c6b44cd7ce | |||
741000d31b | |||
9ab80a33a5 | |||
5e3b92a924 | |||
5ada0023d1 | |||
42c44c2f83 | |||
e56fb89e7c | |||
b1e6654d86 | |||
3280aa7df2 | |||
b874ef4925 | |||
361f6fff5f | |||
2195f7af23 | |||
b847779746 | |||
6f9fcc64a1 | |||
09b103a955 | |||
8272405abb | |||
78fa372ec9 | |||
d26844ce82 | |||
e2d152c118 | |||
db86a35ab6 | |||
ffbc3b5f5f | |||
c469712166 | |||
51ff9e8415 | |||
f0cbb09a62 | |||
e56bf31824 | |||
d5a11ed6c8 | |||
8d2ec86c5e | |||
e1d57f7610 | |||
84b5aa3f50 | |||
0f6b51b2de | |||
fcbb3c5747 | |||
3f17c3b33f | |||
b3c344b8b8 | |||
42b7b77571 | |||
b8f65ad68a | |||
16ad2d70ca | |||
3d5bb2a5df | |||
b6d6739b40 | |||
5e45053d52 | |||
c6ba36f069 | |||
23df47724d | |||
80f3ac63f2 | |||
21b0b1adec | |||
fec4206299 | |||
2855a0c14d | |||
b379f1964e | |||
735ddc930f | |||
2ea1c9b29e | |||
09ccd418f4 | |||
fb626dcd78 | |||
319f0370bf | |||
1a86cda6db | |||
d97591c345 | |||
7d881b5189 | |||
f69c96dd8d | |||
493d36684c | |||
09c31d557f | |||
8de6cb975f | |||
49bfc0e9e0 | |||
44245693ec | |||
97642c28f6 | |||
3c3f836d7e | |||
019a253b34 | |||
6beaef983a | |||
4821a0e135 | |||
a6a396ddb6 | |||
3286848a7a | |||
e951e8ec7f | |||
5778f772b5 | |||
d309f5b8e2 | |||
4c7979a241 | |||
e07eb5f173 | |||
eb1dea8faf | |||
f371b051b0 | |||
3970a9d964 | |||
f70cb8bf96 | |||
bf1da4b449 | |||
fd54acf098 | |||
6d7564cdfe | |||
c82d7e76d5 | |||
2c0ecc1f83 | |||
4c0d5cbb87 | |||
04326aabcd | |||
7c05d2a641 | |||
e621d8f11a | |||
f6317b4892 | |||
aa5e8e099e | |||
37fedc0414 | |||
fbeec122c0 | |||
026be3d76f | |||
89b1753c22 | |||
4b47e5a851 | |||
10494c497f | |||
a2c6a09985 | |||
8d83c662c3 | |||
adc3235eb7 | |||
283b438f5c | |||
c166071beb | |||
1ba0da17c8 | |||
b53427156c | |||
561e11d6f8 | |||
77b3a91bba | |||
698d83a7c8 | |||
176670e31a | |||
31755adc5a | |||
19cbe03534 | |||
86d8c4279d | |||
532e0c74e1 | |||
b6bcb6cc8f | |||
a06cd6c29e | |||
c10af299ae | |||
863853cd2d | |||
e48be35bca | |||
b09de70eda | |||
685b377e7e | |||
ba5f318736 | |||
0c5666828d | |||
f957201cf0 | |||
1264d64a74 | |||
ce2b2bad77 | |||
3f347a1379 | |||
b79a04c716 | |||
22230687aa | |||
ca70593d0f | |||
fab13583b5 | |||
e625d07106 | |||
ac7eee4051 | |||
c6a584182e | |||
9d98e5ae0d | |||
7752645041 | |||
b90739d73d | |||
ce0c5334a0 | |||
7407210a67 | |||
816aaba399 | |||
21c5d43d72 | |||
a9c1a5f1f8 | |||
b0bbafe5ad | |||
917420f7e8 | |||
15110f12cb | |||
d0bd54486a | |||
5326ad7d11 | |||
f20bf92bd5 | |||
db43afa836 | |||
913d8b5e45 | |||
0fd4f50572 | |||
9b7e990d18 | |||
9065657957 | |||
01c83a2e99 | |||
14774769da | |||
d3c5544bec | |||
a533a8d3f5 | |||
64e668051c | |||
2f5abf058e | |||
6f75154656 | |||
8c03542f92 | |||
a360d9a6bf | |||
d844431af0 | |||
e94335e9fd | |||
74d22d4030 | |||
5fa1469af5 | |||
fb5a83df3c | |||
8cf8a6375e | |||
7c369c1e45 | |||
3bf4e28fb8 | |||
30645bff5e | |||
d203bc95d2 | |||
b31f49b911 | |||
cc48009631 | |||
6440cb6945 | |||
6ff848aaf8 | |||
de666dc9b8 | |||
7945f75417 | |||
27ca962058 | |||
a2455b2967 | |||
24f73d4f53 | |||
7c1e1428ad | |||
ef79fccf4e | |||
e5b05d61df | |||
6302203fb4 | |||
90f750bbf0 | |||
5e5167ed04 | |||
a0368a0950 | |||
3d152ac388 | |||
8a70918b8a | |||
2973d1e478 | |||
702d2364bd | |||
58ed173a2c | |||
4e0ec59255 | |||
ba50e4885f | |||
b5bea526ec | |||
70ca84d6e7 | |||
87dcd0061a | |||
deb99af8a1 | |||
913437e8a2 | |||
b5962a934a | |||
2395917adf | |||
1cf5ea5f1d | |||
f4035bffb1 | |||
127a55e91d | |||
99e45ceb35 | |||
1b7f99bd6b | |||
381c35c7f9 | |||
8dcf24fcbf | |||
092fa8bba8 | |||
34846ad6ba | |||
cd980abe18 | |||
0d4f95be46 | |||
66bcc3101e | |||
45b137eab0 | |||
b8a0ceb87c | |||
9c561c9b1f | |||
4b8f5a3517 | |||
2ee8fe0094 | |||
a427ff0f50 | |||
51b2fd82d3 | |||
94cdec686e | |||
35abe73e48 | |||
2cdb65d663 | |||
343e13489e | |||
e4c09d9137 | |||
7f9f3d0cf3 | |||
a34b78c981 | |||
7775d67218 | |||
c145e54f69 | |||
c1c60601ee | |||
3c8c81b1ac | |||
1044ebaa06 | |||
55c5777170 | |||
1a65017a50 | |||
5d2e1d8023 | |||
08462ce590 | |||
59fbe89530 | |||
3f89da8d65 | |||
5b9e05501f | |||
960964f093 | |||
a887c1b15b | |||
e1780e9047 | |||
aa67defafd | |||
25e5401cdd | |||
19cae7c891 | |||
af159d4416 | |||
26307c7385 | |||
ec63a7140a | |||
43c26cb07f | |||
4ee83b2f94 | |||
3ce0360592 | |||
6ab5ed3b66 | |||
eceaa97b27 | |||
251d305e73 | |||
eb5b0d05a7 | |||
21bfc9f99b | |||
1f12772d19 | |||
05284b64d0 | |||
f972322368 | |||
fa36c6c3ee | |||
5eb81bed2e | |||
fefe7afeb0 | |||
846f8c0ced | |||
1aac543a7a | |||
1583fcd13f | |||
43b6e2ed71 | |||
d622507450 | |||
d3a73280cc | |||
c53665ce55 | |||
2ba303e49d | |||
742df5ad34 | |||
fbf380abac | |||
06cfb21e24 | |||
13539d2f9d | |||
37e957f334 | |||
1b05479a7f | |||
12f0e42cb4 | |||
2dbc095677 | |||
ec017590e5 | |||
086149eb32 | |||
ad5467d202 | |||
59b6542bbc | |||
0e9116f0a1 | |||
0d74653bd4 | |||
6d5695fac5 | |||
fbec63d15f | |||
f36d53c653 | |||
6702b68a79 | |||
73eaec8168 | |||
9636a106d4 | |||
fca7c4d614 | |||
a99ed13e33 | |||
3cae9afbf9 | |||
b2709ae0ae | |||
ef1ab4d6d4 | |||
8a2056cac4 | |||
317cbd6f02 | |||
9995418166 | |||
10ed374d7d | |||
4b55935173 | |||
920bab553e | |||
c6d503fb81 | |||
6b7171b32c | |||
95794693cb | |||
99f1d50335 | |||
4be1f8a2f6 | |||
156936b771 | |||
1a7623bc1a | |||
19cb6c9980 | |||
9c8895fd88 | |||
fa1f7216ce | |||
10ed868d19 | |||
2deb5fb3b0 | |||
62ddc491cf | |||
ce8eebd3b7 | |||
8bbad6c818 | |||
51dc5ea735 | |||
c345570acc | |||
6681f05373 | |||
f7f90f7c3f | |||
7da638c20e | |||
38b7445ad2 | |||
d44d4f0f4e | |||
60a0a3d629 | |||
2e6c3c8936 | |||
ec93be5208 | |||
d1b99d2bbf | |||
bfd23ce87b | |||
0da3a8a91b | |||
a82f991122 | |||
a2c219a91d | |||
c82acf5931 | |||
2761847f90 | |||
f3510cbe36 | |||
cdc459e66a | |||
a66c9b8bf4 | |||
7fa3d5673c | |||
a1d0928b00 | |||
695da71e61 | |||
d64f889972 | |||
10490b98e2 | |||
2b99a01e0d | |||
9b5e8c1718 | |||
a95a6bf646 | |||
e39db681df | |||
27d02d8286 | |||
ab89edbccf | |||
51401c3050 | |||
5fd93e0582 | |||
bd1683da29 | |||
b12ece98b0 | |||
62c0b61bed | |||
543be8d367 | |||
a998e28016 | |||
23cb12b040 | |||
56e2d7d21a | |||
73ac12196c | |||
1ac5ecbfd1 | |||
e955fa33f6 | |||
68999a8b86 | |||
3f4a987bee | |||
5b922726e1 | |||
bdcb4d3750 | |||
924463d1a5 | |||
348a44ecae | |||
342d3180d7 | |||
57448845ff | |||
6336ee6df9 | |||
2bb432ece6 | |||
64fb5aa9c3 | |||
3d90d3bfce | |||
75c20157ab | |||
ea6dd747e8 | |||
a5eed800f3 | |||
3d6ccd0489 | |||
4a402feebf | |||
9456d60f65 | |||
84e22e37e8 | |||
6e11908128 | |||
00295aa8a6 | |||
8a1b94ccbe | |||
6d6945b807 | |||
87c4f11c64 | |||
1bffc4bda3 | |||
edbcd057e6 | |||
702f838977 | |||
c30e59051f | |||
b80d1324d3 | |||
23fbd052b9 | |||
ab032b841c | |||
1470c7367b | |||
9637856b53 | |||
48b2adae1c | |||
63cba976b1 | |||
9e5b06297d | |||
3b4d0e060c | |||
07db5fcec1 | |||
d8f56a9b29 | |||
81e9b8ee67 | |||
97c7c6bbb6 | |||
b66ee5507c | |||
548f33a9f4 | |||
608d73e4c5 | |||
16d635c82c | |||
1f925b15ae | |||
7ae606f57f | |||
82882288c9 | |||
d3872fcad9 | |||
99e578e3c1 | |||
c752c500fb | |||
a6f9ee3906 | |||
43f6d9d716 | |||
e20d6095ae | |||
d1d4f937ec | |||
ec85e2f55d | |||
c6918f99d7 | |||
35f9507b08 | |||
3dbfb2bef9 | |||
502008d5dc | |||
f0a576595a | |||
7a5d4e2b4a | |||
fa82e0db64 | |||
2e1fea408d | |||
3d84038d57 | |||
2803346b27 | |||
ddf2bc5081 | |||
b7fe7a1a8e | |||
c72dc05acc | |||
298afb3140 | |||
9742ae1d11 | |||
4b688ab3fe | |||
b4222a65ad | |||
55fffa29c2 | |||
7687617d00 | |||
0e0c7a3dd8 | |||
83339ab3eb | |||
f00d37342c | |||
0c89c1c05e | |||
ce83f3103c | |||
3d23890c65 | |||
dedf66ecdf | |||
e0b9aea7be | |||
a5ea3a271b | |||
b3f852fba3 | |||
66c77c2dc9 | |||
2b6da7f326 | |||
e8e92d60c4 | |||
e6afab12e2 | |||
84b8f90bba | |||
239b13ce38 | |||
f41afde6c2 | |||
c58e3bd90a | |||
15588b03b3 | |||
24302633a5 | |||
bb41aba0d8 | |||
1835bf0fd4 | |||
7006458777 | |||
ba44a27f7f | |||
402fe20e3e | |||
fa40e82270 | |||
d93531bcc8 | |||
fa6233daeb | |||
1caa3143d6 | |||
8ef2a45bb9 | |||
9b0d8e7a1f | |||
b6ee05692d | |||
be291e8abf | |||
f91344cd07 | |||
7196be433e | |||
b461865577 | |||
b19de28c98 | |||
a172228b7a | |||
b7f27abb3b | |||
ae8301fddb | |||
b79d2dee2b | |||
40a85f85c6 | |||
1dda496a74 | |||
7f8a57e96a | |||
03180212b7 | |||
86fa2792b9 | |||
365cb144c8 | |||
ddbf2c4af0 | |||
334e8360ef | |||
cf041d8c83 | |||
0c89ed93d7 | |||
97ae7430a8 | |||
76a8f9e29f | |||
dd5fa02426 | |||
abdc9bc8c8 | |||
8ef6732b94 | |||
686b539949 | |||
bd96a84300 | |||
cc8665eacc | |||
1eeb94ff4a | |||
2e585a12a2 | |||
811a51ac67 | |||
20989630c4 | |||
232113e7cd | |||
c1b77c1391 | |||
7576bd7f42 | |||
fc46ad8a8b | |||
ef179ab07b | |||
aa2157430f | |||
6eaa78144c | |||
46340d076a | |||
9beb52a17c | |||
f85f2f8746 | |||
997207d9a6 | |||
6aca7e6bec | |||
a1e9eefa40 | |||
bf7435087e | |||
25b35d317e | |||
d939183719 | |||
f295d8f113 | |||
d8cd2e9c37 | |||
bc674765a9 | |||
2e8188aa13 | |||
ce2c1cb742 | |||
f42344a389 | |||
69486cac74 | |||
e1909eea5c | |||
6644a75b0e | |||
48b6be81a5 | |||
dce10f8f92 | |||
7aeeb48390 | |||
8b7a161452 | |||
274dabd7a0 | |||
45b79be9c0 | |||
5bc493a8a2 | |||
65209de411 | |||
caae269032 | |||
e43972474c | |||
4d56a06255 | |||
5bb15f1a4d | |||
56f768774a | |||
724c66c88f | |||
807803afa2 | |||
18b51b7315 | |||
caef7f837a | |||
111f9a9bcd | |||
2968c9d6c7 | |||
0d4200fef3 | |||
72f6fbb1bc | |||
dcfff3739b | |||
9a8c5e7ac0 | |||
df85bf7918 | |||
29150c83df | |||
cd51d7ced5 | |||
d1ad37847d | |||
97e9e5622d | |||
325865db56 | |||
cadc70f797 | |||
57459dbeac | |||
55cb5f8de5 | |||
795fda0336 | |||
c15e600490 | |||
e429d86655 | |||
11a5b6b577 | |||
8dd518969c | |||
0c22d2fe46 | |||
9005071c5f | |||
5709e03613 | |||
59b4255c63 | |||
44105942df | |||
60ab1d8c52 | |||
2f0bbbfe9f | |||
ef9e85bbfd | |||
dbc787d13d | |||
a75440739d | |||
7528f83444 | |||
2cb399625e | |||
a20e59da15 | |||
f2d173a554 | |||
ac6bf7dc12 | |||
554e55b0f0 | |||
cb6f6a10b3 | |||
9d6f645908 | |||
9c90609331 | |||
4fbd22e38d | |||
2be617b58b | |||
9bb0461fbd | |||
e091d0efc4 | |||
095c931cf1 | |||
a6d401c193 | |||
772a154d39 | |||
47953d0ae0 | |||
a029b3f4a4 | |||
f77eb44433 | |||
2be0b50be5 | |||
2d7a52c784 | |||
7e893a02c0 | |||
7bc9036d16 | |||
1159a163cd | |||
4249348735 | |||
998dc17f52 | |||
a73e5a75b1 | |||
ef7d89cabe | |||
939bfccb3d | |||
f36fcdf2ab | |||
9646cfe989 | |||
c9f6bd9085 | |||
9d9ce62ae9 | |||
1360b9a73f | |||
bddfa59f1d | |||
2de7af0c39 | |||
32b9a99e16 | |||
8ed01a0e31 | |||
1119428693 | |||
4feaf6b7b8 | |||
d5d89c8a55 | |||
643daed6b5 | |||
24047fefda | |||
2eb89c8b14 | |||
5923d67cfd | |||
9e8cf3cc86 | |||
0a433db22c | |||
c7817bc128 | |||
b3ddb29c36 | |||
49df54a1dc | |||
976e3e9ae6 | |||
b4b9efcfdd | |||
b435d4405d | |||
753c225c2c | |||
6ac87c4986 | |||
5de4771360 | |||
fe80bf2fd1 | |||
62bc1cb88b | |||
2521211753 | |||
2dc00fab7c | |||
1d3b3c3c09 | |||
052163236c | |||
d694f6e21b | |||
f5b9369720 | |||
bd7739f3aa | |||
ac24d3c311 | |||
1a93058448 | |||
3ba380797b | |||
d7d0b04d3a | |||
551a75923e | |||
30bc9f415d | |||
3c0d23b6ab | |||
0ebdf2ac75 | |||
feb50f15cc | |||
85f0b051ba | |||
ec562161cd | |||
f98f8ebb8c | |||
9b5b9e46b9 | |||
66318aad07 | |||
99e836c843 | |||
16895c529c | |||
a842d3ee6a | |||
66b35bad88 | |||
1bc7b6e135 | |||
ba092a9ab6 | |||
0de835d52e | |||
0c0a9810c7 | |||
8c0acc5515 | |||
1a6b5c23a1 | |||
45b824d694 | |||
0a7543db2d | |||
b4951c92a1 | |||
a06fa32daf | |||
78b58a4996 | |||
6629b4bbf8 | |||
7f1e9dbf3a | |||
e59ae107c2 | |||
1bc04e3c3e | |||
e09caf6428 | |||
c4ab50cdde | |||
7c712bbb6c | |||
9d3fa7a229 | |||
6a4a026e13 | |||
32f48a2d56 | |||
fb0fa7643e | |||
5471be69b9 | |||
4998becda3 | |||
72a9091a0e | |||
0dd6b55a7e | |||
b75f493ed7 | |||
3fe7c44d50 | |||
939440c48b | |||
95f8884c95 | |||
683e77e479 | |||
85b2ed5438 | |||
43fc38943d | |||
42065f8f94 | |||
29a1a0857a | |||
73c312fce5 | |||
e6bf51fb22 | |||
a88041c043 | |||
bd0b51c0be | |||
101098c41a | |||
61309e39b3 | |||
fd7440d231 | |||
8c99a4859e | |||
b242de5bfc | |||
aa0929d101 | |||
82d73e2d5a | |||
c0fe0b28a9 | |||
7a3e46d767 | |||
32851c6df7 | |||
4d6cfc82ed | |||
42f9f14a61 | |||
ffb83bee26 | |||
67524b57af | |||
83fe4c4e47 | |||
5489341e63 | |||
ff9104eae3 | |||
d32a493091 | |||
43a3c513f8 | |||
7144702f83 | |||
37b26261cc | |||
4c8726574c | |||
517eda5ca4 | |||
13bfd04a99 | |||
22e605c2c0 | |||
6672bd8e6b | |||
2b8789bb3b | |||
345d202d66 | |||
46c5807d29 | |||
5db9871a5e | |||
d07048a7f9 | |||
363b77177e | |||
d45f33804d | |||
82d4642805 | |||
b559b3c785 | |||
cee06c458a | |||
3d96f60409 | |||
d95425c51a | |||
4114aa8375 | |||
053de0d812 | |||
9a1d057f5f | |||
c426be6ae2 | |||
5806665059 | |||
5a69491a01 | |||
da79f5c91d | |||
f81c589ad2 | |||
3391a31cf9 | |||
c126084bc5 | |||
91ead42f4b | |||
c056729bfd | |||
bac27d5ebb | |||
a1b187ab29 | |||
d3d41b348d | |||
cb42f4d467 | |||
e54c15aa72 | |||
e7168edeb8 | |||
a2e7ee729e | |||
76e70675d9 | |||
44c6cf67c3 | |||
c3385070d6 | |||
9df72e0471 | |||
3be4c7ba64 | |||
56d66ae854 | |||
a11553dabd | |||
74f9fe6e58 | |||
5417c84f7d | |||
d84e20b33c | |||
6ee9ee4cab | |||
05c0455699 | |||
d5d433e07f | |||
f4ed5dc7f4 | |||
a4a9ad58ba | |||
358ec83d03 | |||
0f49dd26ad | |||
d768e919ae | |||
73b0136fa3 | |||
7391fd8084 | |||
478a1212ef | |||
5849b14705 | |||
0987e43aa0 | |||
c60a830e44 | |||
40dee3d506 | |||
4d99b27018 | |||
131134288b | |||
77fb3632a4 | |||
bb4759c15d | |||
97f8029ad4 | |||
1a1fe6e384 | |||
389f927751 | |||
18060d7d92 | |||
d228c1ef32 | |||
dcb2eef582 | |||
9f3aa702a9 | |||
29035f3c36 | |||
f9c9fa2df8 | |||
8725e5f639 | |||
283fdcfbc2 | |||
c323963bed | |||
4b766393e2 | |||
3ee485741b | |||
27fbbcffc5 | |||
39c3d3951a | |||
e28fa4049d | |||
19fcc89fe0 | |||
d61c5ea7f5 | |||
00dbf449c9 | |||
c5d734b3f9 | |||
31438f73c0 | |||
c58525ee46 | |||
3c61304a9f | |||
01912201a4 | |||
d6d6771b97 | |||
420d7e009d | |||
d893a2635f | |||
63bc18e328 | |||
6e512c4d7a | |||
ba851170fb | |||
e98a751823 | |||
3717256d5a | |||
f5e8b29be6 | |||
0556f6132b | |||
34564ed154 | |||
da9302a2c4 | |||
78fbe3d831 | |||
5f28639a93 | |||
b1f4d52580 | |||
095c2617a3 | |||
cd4fe0f718 | |||
351e3e520b | |||
20eaef024c | |||
7118701e96 | |||
7a50554e29 | |||
6f5225c7e0 | |||
21f9b3ecd7 | |||
b524dfca40 | |||
89d4a601f5 | |||
f4af723fd8 | |||
52cb8a7fec | |||
8b784004d3 | |||
6b6dc6eddd | |||
7f1a0e6b4c | |||
69eae2762f | |||
e3f5f2155a | |||
c94ba798d6 | |||
1db39a4466 | |||
77d5e7481b | |||
8e646e74b3 | |||
c4772b9fd7 | |||
0800194f95 | |||
6d3b7e6f62 | |||
b328209330 | |||
4c15ea5bab | |||
6cd9e631b0 | |||
5397f194cc | |||
75380d3a16 | |||
e8d8d9492d | |||
8f70267607 | |||
64a6bcaa4e | |||
395f1e328d | |||
357e552562 | |||
fc5a3c949d | |||
10ea93c334 | |||
83ad5a998d | |||
f3ea181d98 | |||
b34de93153 | |||
91237d29c9 | |||
1c968c135c | |||
db3f0e3ebd | |||
45d4b17f5e | |||
cbf27fd899 | |||
5c1fadbf0f | |||
0873e27720 | |||
0a9be33a8a | |||
26c43b7a77 | |||
a76e6542d1 | |||
250dfc0256 | |||
a432f38e81 | |||
e2f0a5f76c | |||
ad0b48222f | |||
41dad286d8 | |||
79f92910eb | |||
59a407349b | |||
e8367c0c5e | |||
52b0ba22e9 | |||
a4e5236e89 | |||
43bb6554a2 | |||
2efee9df85 | |||
ed23fed3f3 | |||
425e75a2db | |||
a3caa2d3bb | |||
0168639b9a | |||
1ae592b468 | |||
6d569163ab | |||
459df6697a | |||
c47eda0e6b | |||
cef9879c3d | |||
237baa1433 | |||
29368167b5 | |||
aea9871a62 | |||
55208409bc | |||
09b01de336 | |||
9007118f32 | |||
8f6f3ac199 | |||
5c76ed66b8 | |||
8110f46fcc | |||
31eac4d869 | |||
1385b7dd10 | |||
dd11810367 | |||
693709bbec | |||
b217baa4ee | |||
7fc25c013b | |||
67d630945b | |||
f74f6cbde5 | |||
94d61ecab0 | |||
e05fe3166e | |||
4577cd2403 | |||
7fd1845991 | |||
0043a3db20 | |||
a751445de4 | |||
ae0fb762a2 | |||
482eec0e1b | |||
38dbd68920 | |||
f028604718 | |||
5de93e9011 | |||
d18a0cbfc1 | |||
1e742217e6 | |||
bff6dc7b8c | |||
4a5f7ece3f | |||
bcd23b05c1 | |||
0de2fa0a62 | |||
18c1b6b240 | |||
f5b76fe9e9 | |||
651d8dd4f6 | |||
e0c181d487 | |||
cc86d8921b | |||
61d365fafd | |||
15589b4e56 | |||
fc5b80943b | |||
835ca8ee64 | |||
5ce1698138 | |||
baa070a81f | |||
d727fb5035 | |||
c4f3972f2e | |||
44ad93e970 | |||
8c11d05a3e | |||
8f7a53a968 | |||
e732773c74 | |||
1dde7ccfa8 | |||
3d25430b84 | |||
b70c77691b | |||
0decccb666 | |||
42660cdda7 | |||
a12e9b0666 | |||
7935b4a89b | |||
83bb2d44b5 | |||
8bd5c996ab | |||
db3ba1bc18 | |||
a2b7be7496 | |||
84743a178a | |||
4318a978a7 | |||
7eb8eed460 | |||
d2cdfff63b | |||
bf0970e762 | |||
161eafb0fb | |||
add76f91d5 | |||
2452c8414d | |||
16a1181615 | |||
0220d1e46a | |||
0de6c50744 | |||
0bec504642 | |||
de08ae1080 | |||
407a279461 | |||
e75cb331df | |||
d371cf3336 | |||
bac21f5b13 | |||
b0fe89d31b | |||
b866610156 | |||
b4a4036306 | |||
2e2fe3cc91 | |||
2c63017ca3 | |||
e8fb3dfa6c | |||
81cd0b0aab | |||
654d7b5e0b | |||
0828d03de2 | |||
e8c655dd1b | |||
c10fed0743 | |||
c76409ca35 | |||
e556f716e4 | |||
b80ae90b6e | |||
3eebb16c05 | |||
0a4dcee75f | |||
622a28d22b | |||
74dec7f51d | |||
28def8b5a0 | |||
6d9c131061 | |||
b197808852 | |||
274613303e | |||
eb7720e00a | |||
c41b0e8ea3 | |||
51c8532c6b | |||
17fa9deef1 | |||
9b545df90b | |||
b6d91753fc | |||
988ac294c7 | |||
9993b6f0b5 | |||
cd429a8b0c | |||
df2dbbc817 | |||
847289d49e | |||
dffa8d05e3 | |||
690d27faa7 | |||
eb789f0b79 | |||
28fa33ccbc | |||
009e6cbf84 | |||
06d0705834 | |||
92f2853e53 | |||
9f11629495 | |||
e447aec904 | |||
1855329fba | |||
6a9d2f9899 | |||
0f57a2bb97 | |||
242c9d9f24 | |||
31354676d0 | |||
13f5360724 | |||
69cc491c3f | |||
dd3cffdb0c | |||
1d94849e74 | |||
f84c103825 | |||
cc7cdb19b1 | |||
e2ac5b7a36 | |||
9d4a169532 | |||
0aa1f9e905 | |||
60aaac7ad0 | |||
68890b9d59 | |||
39f9fbc57a | |||
9bc9da9d7e | |||
7458629de3 | |||
fde7c317c2 | |||
a02161c41e | |||
cd23f7f6c7 | |||
0fdc0b6b25 | |||
f5cf60f25b | |||
12724d6ad6 | |||
5f0f045da8 | |||
2e1f65545f | |||
f7f41a663f | |||
51bbdac7d5 | |||
ed6996f2ba | |||
e651e01518 | |||
ea4c7d0719 | |||
0ef562feee | |||
78134b0ccd | |||
413f5208f0 | |||
a7a2387456 | |||
4e11bff0cf | |||
5d1f9a0096 | |||
2de19038be | |||
c53e6ed62f | |||
99625b0cd8 | |||
837f655291 | |||
2d22d335dc | |||
ee45280439 | |||
dbd313280a | |||
4074ce0cc7 | |||
346d201d73 | |||
cf32fd1729 | |||
10f5ccf9cb | |||
6f5dacae13 | |||
fd159550b8 | |||
b7daf7e8fa | |||
c912f76486 | |||
42a66fb721 | |||
f71792f8c9 | |||
c325fa1312 | |||
5eeee58ca2 | |||
25200327d9 | |||
0ea04f5853 | |||
b618b04992 | |||
d096a64bcd | |||
321bce4a3f | |||
a9506dbaf4 | |||
9c8044bdcd | |||
0146bce262 | |||
2ec5015f02 | |||
e5eb2decd0 | |||
b08906b240 | |||
7169450310 | |||
0097f5589e | |||
caa85f249d | |||
00bb441ba4 | |||
15ccbf042d | |||
9514d47d3c | |||
4a0f07166f | |||
6520ec0650 | |||
abe2f27acf | |||
ceb89fb454 | |||
fb83ff1a8b | |||
ca9eb1a73f | |||
f6940886f9 | |||
5a38572fd9 | |||
774d41495e | |||
32346f0aa2 | |||
a9273b5015 | |||
a1e22b8192 | |||
0eb4db185c | |||
0dd80aab25 | |||
4dfd8d690d | |||
52d79fbc6e | |||
14e826f3f8 | |||
8d0f59935d | |||
55fb6b4d0d | |||
8a83282795 | |||
b0f4456aed | |||
6662cb3dc2 | |||
b55df4f1a8 | |||
b0158e0b14 | |||
b55cd54d1b | |||
1217af5e1a | |||
03c60a5054 | |||
28b38cd365 | |||
b1434fce01 | |||
d0e218384f | |||
717050d1d2 | |||
ef75cca0e1 | |||
4da8d8d7fe | |||
6bee0cee20 | |||
918fc00fb4 | |||
20e75878a8 | |||
ad5e0a8e65 | |||
bd74aaf534 | |||
ade13f03e1 | |||
22add8ea30 | |||
08caa792e6 | |||
9b1ae44b28 | |||
bfe4a59bc9 | |||
0f681dc5e6 | |||
51ffa7e810 | |||
d2894f690a | |||
d889508f16 | |||
3449fafec3 | |||
19a37d6420 | |||
a436877573 | |||
af39c82a36 | |||
c563cf3030 | |||
313d53f6d3 | |||
09abb879a4 | |||
25eb2bceb8 | |||
2b4ba5105c | |||
695f7249a4 | |||
1a27b0bc38 | |||
217ca36377 | |||
41483c9dff | |||
ebd8a4f90c | |||
4663f45caa | |||
34cf5619f9 | |||
74aa99a543 | |||
4b7202e250 | |||
5926ae24a6 | |||
0e3f7d4780 | |||
ada45a3148 | |||
2c8243cf6d | |||
6e401cf7e6 | |||
90a96c77a9 | |||
a29d866f1c | |||
ff7e5ea401 | |||
af8471c2b6 | |||
725369fd0c | |||
02bd77379b | |||
d004dac7f6 | |||
e1498c3803 | |||
9330b25b6f | |||
301d47fdd6 | |||
ffea237038 | |||
a3f643a3c0 | |||
9421727c70 | |||
eed64473fd | |||
374c04aaec | |||
0bcee88298 | |||
6b8a29e8b9 | |||
3af6aa10f7 | |||
125c9cf98c | |||
3e41b9b22e | |||
4886cfc50a | |||
c3de6203a7 | |||
38e27c3e92 | |||
2ee720ca45 | |||
fa861eea30 | |||
59bd2318dd | |||
9e8da22828 | |||
96a437f4aa | |||
fb19974ae9 | |||
b6e8a0d8f7 | |||
f69f27c7e7 | |||
bc07224da5 | |||
1115f631dc | |||
fedb36e3c8 | |||
423adfb0d3 | |||
7418464c06 | |||
5c19009ec7 | |||
8296fdd979 | |||
11949990a8 | |||
285ae69e51 | |||
d21495549b | |||
6b2e436995 | |||
b603fdc462 | |||
5517246a0d | |||
e5869f8ae0 | |||
e183429bd2 | |||
18d6b0c926 | |||
484efffa58 | |||
a3c655b6ec | |||
31f9631548 | |||
ebac8c772f | |||
52331ba4f7 | |||
abc5130108 | |||
0515ceb9a9 | |||
44a597787a | |||
d244f6ca46 | |||
8d8ceade60 | |||
d9a5779a0e | |||
1ddccbf2d2 | |||
9d712bcc4f | |||
e4cb23c682 | |||
be11236a4d | |||
51120435f5 | |||
d29ed4ac45 | |||
ef7a326787 | |||
cd49cce7b7 | |||
b3a8cc54db | |||
9276fe4089 | |||
eb2fa5cd39 | |||
91b027a351 | |||
5fe77af206 | |||
0f8547e2ce | |||
8e3b842b8b | |||
f4491e73ca | |||
2847e1e714 | |||
4f42eead36 | |||
34508cd9ac | |||
553967256f | |||
ba5ae5bf20 | |||
fdd3564765 | |||
2d4e836f11 | |||
ae546422ed | |||
eab2a29c8b | |||
b431833c12 | |||
c7b8357786 | |||
496ef1a9e9 | |||
55f0a1409d | |||
67bbb6db41 | |||
dbc7095b4c | |||
dbae632fec | |||
2794a86b1b | |||
8e0dca05fb | |||
a378c22f77 | |||
0e02ce83a1 | |||
6cdafd9608 | |||
67d868d04b | |||
8a45a4dc3f | |||
239286ca44 | |||
c38c0c91aa | |||
c9b7d1fb57 | |||
7a732b4781 | |||
46e6852062 | |||
9126169419 | |||
b063cbeffe | |||
3397386399 | |||
89989cf61f | |||
c2209e4bef | |||
f8edeffe6b | |||
6bdfc8027b | |||
4e8dee51e3 | |||
0c590f064e | |||
57b4ec6bd3 | |||
93d6ba0889 | |||
b697c90a4c | |||
c77ebc60cf | |||
503d3247e4 | |||
e079e5ccc2 | |||
ad7758ca52 | |||
6fefdfd106 | |||
e459a89f0f | |||
c8b4d217d0 | |||
24b000a160 | |||
9e3c30283f | |||
6d81b15bbe | |||
d60cc97526 | |||
175aa69639 | |||
c8aed48127 | |||
e5861828ee | |||
49a4450563 | |||
44b4ec740d | |||
65200f0746 | |||
9497fcb742 | |||
7362768c50 | |||
1368244d48 | |||
2785290989 | |||
626ba097a2 | |||
b27fb330c4 | |||
8a95c6c48d | |||
80b0c6458a | |||
7c2b50894c | |||
3ee8b750f4 | |||
3855c01e0a | |||
3695593794 | |||
13f66507af | |||
065857ee7f | |||
bdaec07a85 | |||
3e6913b389 | |||
e132d5711d | |||
71a652c774 | |||
57d5e47694 | |||
48532ee3c4 | |||
cf8094cabb | |||
e0a0c63e09 | |||
088d2a3dad | |||
59e5c80237 | |||
80505a6fef | |||
2796b242b2 | |||
ee69f73dbf | |||
4708612061 | |||
6c36642c07 | |||
b4f57bb3ca | |||
59ae2ef4c4 | |||
8ee161daab | |||
44206e38bf | |||
62b4b44961 | |||
3a42c88510 | |||
78d1432698 | |||
00ad8dfa18 | |||
92b5296a7b | |||
268744306a | |||
a7967eea16 | |||
a1601136f2 | |||
2d0fe4ff22 | |||
97445f20ed | |||
65b514c645 | |||
49aaff799f | |||
3b29acaffa | |||
5aa0e925bc | |||
f1b58b7835 | |||
44e89af6e6 | |||
ff79341a80 | |||
f288b396bc | |||
0d4de2a477 | |||
c3d03b3197 | |||
45e295b973 | |||
a37a1a65a7 | |||
ddbdf9a0fb | |||
411a8b7a66 | |||
c6d672fe1d | |||
fa011db6f0 | |||
805bd10ede | |||
8997f67cf0 | |||
255f35c2d2 | |||
9348413c61 | |||
3e8504a325 | |||
b28025a434 | |||
c60c3269ec | |||
5ec1d24974 | |||
08087a3e8a | |||
c570a0e713 | |||
1083a4d232 | |||
ec6d07a330 | |||
4829af17e3 | |||
620e0f3f22 | |||
64b82be3e3 | |||
67a489fdb0 | |||
a198c9d732 | |||
47d46d0a18 | |||
7bdae06170 | |||
035876c4dd | |||
7ba14406c3 | |||
17387f67ad | |||
db9e9ac30d | |||
ba8af5807c | |||
e87bdbba29 | |||
3361120bc8 | |||
97278939ff | |||
e613d704d1 | |||
7132f259bf | |||
40f65425e4 | |||
b47c633c31 | |||
ec645cb086 | |||
ba482d3972 | |||
8aadab7e96 | |||
e64c25ca1a | |||
51749b2766 | |||
ce529b6318 | |||
2201da3a8b | |||
ac8c60e011 | |||
b134368942 | |||
2352a507af | |||
3986d39471 | |||
a86e401c0e | |||
f8f2e8c39e |
@ -7,7 +7,7 @@ AllowShortIfStatementsOnASingleLine: false
|
|||||||
IndentCaseLabels: false
|
IndentCaseLabels: false
|
||||||
SortIncludes: false
|
SortIncludes: false
|
||||||
ContinuationIndentWidth: 8
|
ContinuationIndentWidth: 8
|
||||||
ColumnLimit: 0
|
ColumnLimit: 96
|
||||||
AlwaysBreakBeforeMultilineStrings: true
|
AlwaysBreakBeforeMultilineStrings: true
|
||||||
AllowShortLoopsOnASingleLine: false
|
AllowShortLoopsOnASingleLine: false
|
||||||
AllowShortFunctionsOnASingleLine: false
|
AllowShortFunctionsOnASingleLine: false
|
||||||
|
11
.editorconfig
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# EditorConfig: https://EditorConfig.org
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
indent_style = tab
|
||||||
|
tab_width = 8
|
||||||
|
charset = utf-8
|
||||||
|
insert_final_newline = true
|
||||||
|
end_of_line = lf
|
||||||
|
trim_trailing_whitespace = true
|
7
.gitignore
vendored
@ -54,10 +54,13 @@ util/crossgcc/xgcc
|
|||||||
site-local
|
site-local
|
||||||
|
|
||||||
*.\#
|
*.\#
|
||||||
|
*.a
|
||||||
*.bin
|
*.bin
|
||||||
*.debug
|
*.debug
|
||||||
|
!Kconfig.debug
|
||||||
*.elf
|
*.elf
|
||||||
*.o
|
*.o
|
||||||
|
*.o.d
|
||||||
*.out
|
*.out
|
||||||
*.pyc
|
*.pyc
|
||||||
*.sw[po]
|
*.sw[po]
|
||||||
@ -84,7 +87,6 @@ util/*/.dependencies
|
|||||||
util/*/.test
|
util/*/.test
|
||||||
util/amdfwtool/amdfwtool
|
util/amdfwtool/amdfwtool
|
||||||
util/archive/archive
|
util/archive/archive
|
||||||
util/bimgtool/bimgtool
|
|
||||||
util/bincfg/bincfg
|
util/bincfg/bincfg
|
||||||
util/board_status/board-status
|
util/board_status/board-status
|
||||||
util/bucts/bucts
|
util/bucts/bucts
|
||||||
@ -114,11 +116,10 @@ util/msrtool/msrtool
|
|||||||
util/nvramtool/.dependencies
|
util/nvramtool/.dependencies
|
||||||
util/nvramtool/nvramtool
|
util/nvramtool/nvramtool
|
||||||
util/optionlist/Options.wiki
|
util/optionlist/Options.wiki
|
||||||
util/romcc/build
|
util/pmh7tool/pmh7tool
|
||||||
util/runfw/googlesnow
|
util/runfw/googlesnow
|
||||||
util/superiotool/superiotool
|
util/superiotool/superiotool
|
||||||
util/vgabios/testbios
|
util/vgabios/testbios
|
||||||
util/viatool/viatool
|
|
||||||
util/autoport/autoport
|
util/autoport/autoport
|
||||||
util/kbc1126/kbc1126_ec_dump
|
util/kbc1126/kbc1126_ec_dump
|
||||||
util/kbc1126/kbc1126_ec_insert
|
util/kbc1126/kbc1126_ec_insert
|
||||||
|
16
.gitmodules
vendored
@ -26,3 +26,19 @@
|
|||||||
url = ../fsp.git
|
url = ../fsp.git
|
||||||
update = none
|
update = none
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
|
[submodule "opensbi"]
|
||||||
|
path = 3rdparty/opensbi
|
||||||
|
url = ../opensbi.git
|
||||||
|
[submodule "intel-microcode"]
|
||||||
|
path = 3rdparty/intel-microcode
|
||||||
|
url = ../intel-microcode.git
|
||||||
|
update = none
|
||||||
|
ignore = dirty
|
||||||
|
[submodule "3rdparty/ffs"]
|
||||||
|
path = 3rdparty/ffs
|
||||||
|
url = ../ffs.git
|
||||||
|
[submodule "3rdparty/amd_blobs"]
|
||||||
|
path = 3rdparty/amd_blobs
|
||||||
|
url = ../amd_blobs
|
||||||
|
update = none
|
||||||
|
ignore = dirty
|
||||||
|
1
3rdparty/amd_blobs
vendored
Submodule
2
3rdparty/arm-trusted-firmware
vendored
2
3rdparty/blobs
vendored
2
3rdparty/chromeec
vendored
1
3rdparty/ffs
vendored
Submodule
2
3rdparty/fsp
vendored
1
3rdparty/intel-microcode
vendored
Submodule
2
3rdparty/libgfxinit
vendored
2
3rdparty/libhwbase
vendored
1
3rdparty/opensbi
vendored
Submodule
2
3rdparty/vboot
vendored
246
AUTHORS
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
# This is the list of coreboot authors for copyright purposes.
|
||||||
|
#
|
||||||
|
# This does not necessarily list everyone who has contributed code, since in
|
||||||
|
# some cases, their employer may be the copyright holder. To see the full list
|
||||||
|
# of contributors, and their email addresses, see the revision history in source
|
||||||
|
# control.
|
||||||
|
# Run the below commands in the coreboot repo for additional information.
|
||||||
|
# To see a list of contributors: git log --pretty=format:%an | sort | uniq
|
||||||
|
# For patches adding or removing a name: git log -i -S "NAME" --source --all
|
||||||
|
|
||||||
|
3mdeb Embedded Systems Consulting
|
||||||
|
9elements Agency GmbH
|
||||||
|
Abhinav Hardikar
|
||||||
|
Advanced Computing Lab, LANL
|
||||||
|
Advanced Micro Devices, Inc.
|
||||||
|
AdaCore
|
||||||
|
AG Electronics Ltd.
|
||||||
|
Alex Thiessen
|
||||||
|
Alex Züpke
|
||||||
|
Alexander Couzens
|
||||||
|
Alexandru Gagniuc
|
||||||
|
Analog Devices Inc.
|
||||||
|
Analogix Semiconductor
|
||||||
|
Andre Heider
|
||||||
|
Andriy Gapon
|
||||||
|
Andy Fleming
|
||||||
|
Angel Pons
|
||||||
|
Anton Kochkov
|
||||||
|
ARM Limited and Contributors
|
||||||
|
Arthur Heymans
|
||||||
|
Asami Doi
|
||||||
|
ASPEED Technology Inc.
|
||||||
|
Atheros Corporation
|
||||||
|
Atmel Corporation
|
||||||
|
BAP - Bruhnspace Advanced Projects
|
||||||
|
Bill Xie
|
||||||
|
Bitland Tech Inc.
|
||||||
|
Boris Barbulovski
|
||||||
|
Carl-Daniel Hailfinger
|
||||||
|
Cavium Inc.
|
||||||
|
Christoph Grenz
|
||||||
|
Code Aurora Forum
|
||||||
|
coresystems GmbH
|
||||||
|
Corey Osgood
|
||||||
|
Curt Brune
|
||||||
|
Custom Ideas
|
||||||
|
Damien Zammit
|
||||||
|
Dave Airlie
|
||||||
|
David Brownell
|
||||||
|
David Greenman
|
||||||
|
David Hendricks
|
||||||
|
David Mosberger-Tang
|
||||||
|
David Mueller
|
||||||
|
David S. Peterson
|
||||||
|
Denis 'GNUtoo' Carikli
|
||||||
|
Denis Dowling
|
||||||
|
DENX Software Engineering
|
||||||
|
Derek Waldner
|
||||||
|
Digital Design Corporation
|
||||||
|
DMP Electronics Inc.
|
||||||
|
Donghwa Lee
|
||||||
|
Drew Eckhardt
|
||||||
|
Dynon Avionics
|
||||||
|
Edward O'Callaghan
|
||||||
|
Egbert Eich
|
||||||
|
ELSOFT AG
|
||||||
|
Eltan B.V
|
||||||
|
Elyes Haouas
|
||||||
|
Eric Biederman
|
||||||
|
Eswar Nallusamy
|
||||||
|
Evgeny Zinoviev
|
||||||
|
Fabian Kunkel
|
||||||
|
Fabrice Bellard
|
||||||
|
Facebook, Inc.
|
||||||
|
Felix Held
|
||||||
|
Felix Singer
|
||||||
|
Frederic Potter
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
Freescale Semiconductor, Inc.
|
||||||
|
Gary Jennejohn
|
||||||
|
George Trudeau
|
||||||
|
Gerald Van Baren
|
||||||
|
Gerd Hoffmann
|
||||||
|
Gergely Kiss
|
||||||
|
Google LLC
|
||||||
|
Greg Watson
|
||||||
|
Guennadi Liakhovetski
|
||||||
|
Hal Martin
|
||||||
|
HardenedLinux
|
||||||
|
Hewlett-Packard Development Company, L.P.
|
||||||
|
Hewlett Packard Enterprise Development LP
|
||||||
|
Huaqin Telecom Inc.
|
||||||
|
IBM Corporation
|
||||||
|
Idwer Vollering
|
||||||
|
Igor Pavlov
|
||||||
|
Imagination Technologies
|
||||||
|
Infineon Technologies
|
||||||
|
InKi Dae
|
||||||
|
Intel Corporation
|
||||||
|
Iru Cai
|
||||||
|
Isaku Yamahata
|
||||||
|
Ivan Vatlin
|
||||||
|
James Ye
|
||||||
|
Jason Zhao
|
||||||
|
Joe Pillow
|
||||||
|
Johanna Schander
|
||||||
|
Jonas 'Sortie' Termansen
|
||||||
|
Jonathan A. Kollasch
|
||||||
|
Jonathan Neuschäfer
|
||||||
|
Jordan Crouse
|
||||||
|
Joseph Smith
|
||||||
|
Keith Hui
|
||||||
|
Keith Packard
|
||||||
|
Kevin Cody-Little
|
||||||
|
Kevin O'Connor
|
||||||
|
Kontron Europe GmbH
|
||||||
|
Kshitij
|
||||||
|
Kyösti Mälkki
|
||||||
|
Leah Rowe
|
||||||
|
Lei Wen
|
||||||
|
Li-Ta Lo
|
||||||
|
Libra Li
|
||||||
|
Libretrend LDA
|
||||||
|
Linaro Limited
|
||||||
|
Linus Torvalds
|
||||||
|
Linux Networx, Inc.
|
||||||
|
LiPPERT ADLINK Technology GmbH
|
||||||
|
Lubomir Rintel
|
||||||
|
Luc Verhaegen
|
||||||
|
Maciej Matuszczyk
|
||||||
|
Marc Bertens
|
||||||
|
Marc Jones
|
||||||
|
Marek Vasut
|
||||||
|
Marius Gröger
|
||||||
|
Martin Mares
|
||||||
|
Martin Renters
|
||||||
|
Martin Roth
|
||||||
|
Marvell International Ltd.
|
||||||
|
Marvell Semiconductor Inc.
|
||||||
|
Matt DeVillier
|
||||||
|
Maxim Polyakov
|
||||||
|
MediaTek Inc.
|
||||||
|
Michael Brunner
|
||||||
|
Michael Schroeder
|
||||||
|
Michael Niewöhner
|
||||||
|
Mika Westerberg
|
||||||
|
Mondrian Nuessle
|
||||||
|
MontaVista Software, Inc.
|
||||||
|
Myles Watson
|
||||||
|
Network Appliance Inc.
|
||||||
|
Nicholas Sielicki
|
||||||
|
Nick Barker
|
||||||
|
Nico Huber
|
||||||
|
Nico Rikken
|
||||||
|
Nicola Corna
|
||||||
|
Nils Jacobs
|
||||||
|
Nir Tzachar
|
||||||
|
Nokia Corporation
|
||||||
|
NVIDIA Corporation
|
||||||
|
Olivier Langlois
|
||||||
|
Ollie Lo
|
||||||
|
Omar Pakker
|
||||||
|
Online SAS
|
||||||
|
Orion Technologies, LLC
|
||||||
|
Patrick Georgi
|
||||||
|
Patrick Rudolph
|
||||||
|
Pattrick Hueper
|
||||||
|
Paulo Alcantara
|
||||||
|
Pavel Sayekat
|
||||||
|
PC Engines GmbH
|
||||||
|
Per Odlund
|
||||||
|
Peter Korsgaard
|
||||||
|
Peter Stuge
|
||||||
|
Philipp Degler
|
||||||
|
Philipp Deppenwiese
|
||||||
|
Philipp Hug
|
||||||
|
Protectli
|
||||||
|
Purism SPC
|
||||||
|
Qualcomm Technologies
|
||||||
|
Raptor Engineering, LLC
|
||||||
|
Red Hat, Inc
|
||||||
|
Reinhard Meyer
|
||||||
|
Renze Nicolai
|
||||||
|
Richard Spiegel
|
||||||
|
Richard Woodruff
|
||||||
|
Rob Landley
|
||||||
|
Robert Reeves
|
||||||
|
Robinson P. Tryon
|
||||||
|
Rockchip, Inc.
|
||||||
|
Romain Lievin
|
||||||
|
Roman Zippel
|
||||||
|
Ronald G. Minnich
|
||||||
|
Rudolf Marek
|
||||||
|
Russell King
|
||||||
|
Ruud Schramp
|
||||||
|
Sage Electronic Engineering, LLC
|
||||||
|
Sam Ravnborg
|
||||||
|
Samsung Electronics
|
||||||
|
Samuel Holland
|
||||||
|
SciTech Software, Inc.
|
||||||
|
Sebastian Grzywna
|
||||||
|
secunet Security Networks AG
|
||||||
|
Sencore Inc
|
||||||
|
Sergej Ivanov
|
||||||
|
Siemens AG
|
||||||
|
SiFive, Inc
|
||||||
|
Silicon Integrated System Corporation
|
||||||
|
Silverback Ltd.
|
||||||
|
Stefan Reinauer
|
||||||
|
Stefan Tauner
|
||||||
|
Steve Magnani
|
||||||
|
Steve Shenton
|
||||||
|
ST Microelectronics
|
||||||
|
SUSE LINUX AG
|
||||||
|
Sven Schnelle
|
||||||
|
Syed Mohammed Khasim
|
||||||
|
System76
|
||||||
|
Texas Instruments
|
||||||
|
The Android Open Source Project
|
||||||
|
The ChromiumOS Authors
|
||||||
|
The Linux Foundation
|
||||||
|
The Regents of the University of California
|
||||||
|
Thomas Winischhofer
|
||||||
|
Timothy Pearson
|
||||||
|
Tobias Diedrich
|
||||||
|
Tristan Corrick
|
||||||
|
Tungsten Graphics, Inc.
|
||||||
|
Tyan Computer Corp.
|
||||||
|
ucRobotics Inc.
|
||||||
|
University of Heidelberg
|
||||||
|
Uwe Hermann
|
||||||
|
VIA Technologies, Inc
|
||||||
|
Vikram Narayanan
|
||||||
|
Vipin Kumar
|
||||||
|
Vladimir Serbinenko
|
||||||
|
Vlado Cibic
|
||||||
|
Wang Qing Pei
|
||||||
|
Ward Vandewege
|
||||||
|
Wilbert Duijvenvoorde
|
||||||
|
Win Enterprises
|
||||||
|
Wiwynn Corp.
|
||||||
|
Wolfgang Denk
|
||||||
|
YADRO
|
||||||
|
Yann Collet
|
||||||
|
Yinghai Lu
|
||||||
|
Zachary Yedidia
|
@ -148,7 +148,6 @@ mv build/coreboot.rom.new build/coreboot.rom
|
|||||||
<li>Edit the src/soc/<Vendor>/<Chip Family>/memmap.c file
|
<li>Edit the src/soc/<Vendor>/<Chip Family>/memmap.c file
|
||||||
<ol type="A">
|
<ol type="A">
|
||||||
<li>Add the fsp/memmap.h include file</li>
|
<li>Add the fsp/memmap.h include file</li>
|
||||||
<li>Add the mmap_region_granularity routine</li>
|
|
||||||
</ol>
|
</ol>
|
||||||
</li>
|
</li>
|
||||||
<li>Add the necessary .h files to define the necessary values and structures</li>
|
<li>Add the necessary .h files to define the necessary values and structures</li>
|
||||||
@ -658,7 +657,7 @@ Use the following steps to debug the call to TempRamInit:
|
|||||||
The EDK2 data structure is defined in
|
The EDK2 data structure is defined in
|
||||||
MdeModulePkg/Include/IndustryStandard/<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/MdePkg/Include/IndustryStandard/Acpi61.h#l111">Acpi61.h</a>
|
MdeModulePkg/Include/IndustryStandard/<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/MdePkg/Include/IndustryStandard/Acpi61.h#l111">Acpi61.h</a>
|
||||||
The coreboot data structure is defined in
|
The coreboot data structure is defined in
|
||||||
src/arch/x86/include/arch/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/include/arch/acpi.h;hb=HEAD#l237">acpi.h</a>
|
src/arch/x86/include/arch/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/include/acpi/acpi.h;hb=HEAD#l237">acpi.h</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<ol>
|
<ol>
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
</li>
|
</li>
|
||||||
<li><a target="_blank" href="SoC/soc.html">SoC</a> support</li>
|
<li><a target="_blank" href="SoC/soc.html">SoC</a> support</li>
|
||||||
<li><a target="_blank" href="Board/board.html">Board</a> support</li>
|
<li><a target="_blank" href="Board/board.html">Board</a> support</li>
|
||||||
<li><a target="_blank" href="vboot.html">Verified Boot (vboot)</a> support</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,402 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>vboot - Verified Boot Support</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<h1>vboot - Verified Boot Support</h1>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Google's verified boot support consists of:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>A root of trust</li>
|
|
||||||
<li>Special firmware layout</li>
|
|
||||||
<li>Firmware verification</li>
|
|
||||||
<li>Firmware measurements</li>
|
|
||||||
<li>A firmware update mechanism</li>
|
|
||||||
<li>Specific build flags</li>
|
|
||||||
<li>Signing the coreboot image</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
Google's vboot verifies the firmware and places measurements
|
|
||||||
within the TPM.
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<h2>Root of Trust</h2>
|
|
||||||
<p>
|
|
||||||
When using vboot, the root-of-trust is basically the read-only portion of the
|
|
||||||
SPI flash. The following items factor into the trust equation:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>The GCC compiler must reliably translate the code into machine code
|
|
||||||
without inserting any additional code (virus, backdoor, etc.)
|
|
||||||
</li>
|
|
||||||
<li>The CPU must reliably execute the reset sequence and instructions as
|
|
||||||
documented by the CPU manufacturer.
|
|
||||||
</li>
|
|
||||||
<li>The SPI flash must provide only the code programmed into it to the CPU
|
|
||||||
without providing any alternative reset vector or code sequence.
|
|
||||||
</li>
|
|
||||||
<li>The SPI flash must honor the write-protect input and protect the
|
|
||||||
specified portion of the SPI flash from all erase and write accesses.
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
The firmware is typically protected using the write-protect pin on the SPI
|
|
||||||
flash part and setting some of the write-protect bits in the status register
|
|
||||||
during manufacturing. The protected area is platform specific and for x86
|
|
||||||
platforms is typically 1/4th of the SPI flash
|
|
||||||
part size. Because this portion of the SPI flash is hardware write protected,
|
|
||||||
it is not possible to update this portion of the SPI flash in the field,
|
|
||||||
without altering the system to eliminate the ground connection to the SPI flash
|
|
||||||
write-protect pin. Without hardware modifications, this portion of the SPI
|
|
||||||
flash maintains the manufactured state during the system's lifetime.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<h2>Firmware Layout</h2>
|
|
||||||
<p>
|
|
||||||
Several sections are added to the firmware layout to support vboot:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>Read-only section</li>
|
|
||||||
<li>Google Binary Blob (GBB) area</li>
|
|
||||||
<li>Read/write section A</li>
|
|
||||||
<li>Read/write section B</li>
|
|
||||||
</ul>
|
|
||||||
<p>
|
|
||||||
The following sections describe the various portions of the flash layout.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h3>Read-Only Section</h3>
|
|
||||||
<p>
|
|
||||||
The read-only section contains a coreboot file system (CBFS) that contains all
|
|
||||||
of the boot firmware necessary to perform recovery for the system. This
|
|
||||||
firmware is typically protected using the write-protect pin on the SPI flash
|
|
||||||
part and setting some of the write-protect bits in the status register during
|
|
||||||
manufacturing. The protected area is typically 1/4th of the SPI flash part
|
|
||||||
size and must cover the entire read-only section which consists of:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>Vital Product Data (VPD) area</li>
|
|
||||||
<li>Firmware ID area</li>
|
|
||||||
<li>Google Binary Blob (GBB) area</li>
|
|
||||||
<li>coreboot file system containing read-only recovery firmware</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3>Google Binary Blob (GBB) Area</h3>
|
|
||||||
<p>
|
|
||||||
The GBB area is part of the read-only section. This area contains a 4096 or
|
|
||||||
8192 bit public root RSA key that is used to verify the VBLOCK area to obtain
|
|
||||||
the firmware signing key.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h3>Recovery Firmware</h3>
|
|
||||||
<p>
|
|
||||||
The recovery firmware is contained within a coreboot file system and consists
|
|
||||||
of:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>reset vector</li>
|
|
||||||
<li>bootblock</li>
|
|
||||||
<li>verstage</li>
|
|
||||||
<li>romstage</li>
|
|
||||||
<li>postcar</li>
|
|
||||||
<li>ramstage</li>
|
|
||||||
<li>payload</li>
|
|
||||||
<li>flash map file</li>
|
|
||||||
<li>config file</li>
|
|
||||||
<li>processor specific files:
|
|
||||||
<ul>
|
|
||||||
<li>Microcode</li>
|
|
||||||
<li>fspm.bin</li>
|
|
||||||
<li>fsps.bin</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
The recovery firmware is written during manufacturing and typically contains
|
|
||||||
code to write the storage device (eMMC device or hard disk). The recovery
|
|
||||||
image is usually contained on a socketed device such as a USB flash drive or
|
|
||||||
an SD card. Depending upon the payload firmware doing the recovery, it may
|
|
||||||
be possible for the user to interact with the system to specify the recovery
|
|
||||||
image path. Part of the recovery is also to write the A and B areas of the
|
|
||||||
SPI flash device to boot the system.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Read/Write Section</h3>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
The read/write sections contain an area which contains the firmware signing
|
|
||||||
key and signature and an area containing a coreboot file system with a subset
|
|
||||||
of the firmware. The firmware files in FW_MAIN_A and FW_MAIN_B are:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>romstage</li>
|
|
||||||
<li>postcar</li>
|
|
||||||
<li>ramstage</li>
|
|
||||||
<li>payload</li>
|
|
||||||
<li>config file</li>
|
|
||||||
<li>processor specific files:
|
|
||||||
<ul>
|
|
||||||
<li>Microcode</li>
|
|
||||||
<li>fspm.bin</li>
|
|
||||||
<li>fsps.bin</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
The firmware subset enables most issues to be fixed in the field with firmware
|
|
||||||
updates. The firmware files handle memory and most of silicon initialization.
|
|
||||||
These files also produce the tables which get passed to the operating system.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<h2>Firmware Updates</h2>
|
|
||||||
<p>
|
|
||||||
The read/write sections exist in one of three states:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>Invalid</li>
|
|
||||||
<li>Ready to boot</li>
|
|
||||||
<li>Successfully booted</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<table border="1">
|
|
||||||
<tr bgcolor="#ffc0c0">
|
|
||||||
<td>
|
|
||||||
Where is this state information written?
|
|
||||||
<br/>CMOS?
|
|
||||||
<br/>RW_NVRAM?
|
|
||||||
<br/>RW_FWID_*
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Firmware updates are handled by the operating system by writing any read/write
|
|
||||||
section that is not in the "successfully booted" state. Upon the next reboot,
|
|
||||||
vboot determines the section to boot. If it finds one in the "ready to boot"
|
|
||||||
state then it attempts to boot using that section. If the boot fails then
|
|
||||||
vboot marks the section as invalid and attempts to fall back to a read/write
|
|
||||||
section in the "successfully booted" state. If vboot is not able to find a
|
|
||||||
section in the "successfully booted" state then vboot enters recovery mode.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Only the operating system is able to transition a section from the "ready to
|
|
||||||
boot" state to the "successfully booted" state. The transition is typically
|
|
||||||
done after the operating system has been running for a while indicating
|
|
||||||
that successful boot was possible and the operating system is stable.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Note that as long as the SPI write protection is in place then the system is
|
|
||||||
always recoverable. If the flash update fails then the system will continue
|
|
||||||
to boot using the previous read/write area. The same is true if coreboot
|
|
||||||
passes control to the payload or the operating system and then the boot fails.
|
|
||||||
In the worst case, the SPI flash gets totally corrupted in which case vboot
|
|
||||||
fails the signature checks and enters recovery mode. There are no times where
|
|
||||||
the SPI flash is exposed and the reset vector or part of the recovery firmware
|
|
||||||
gets corrupted.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<h2>Build Flags</h2>
|
|
||||||
<p>
|
|
||||||
The following Kconfig values need to be selected to enable vboot:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>COLLECT_TIMESTAMPS</li>
|
|
||||||
<li>VBOOT</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
The starting stage needs to be specified by selecting either
|
|
||||||
VBOOT_STARTS_IN_BOOTBLOCK or VBOOT_STARTS_IN_ROMSTAGE.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
If vboot starts in bootblock then vboot may be built as a separate stage by
|
|
||||||
selecting VBOOT_SEPARATE_VERSTAGE. Additionally, if static RAM is too small
|
|
||||||
to fit both verstage and romstage then selecting VBOOT_RETURN_FROM_VERSTAGE
|
|
||||||
enables bootblock to reuse the RAM occupied by verstage for romstage.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Non-volatile flash is needed for vboot operation. This flash area may be in
|
|
||||||
CMOS, the EC, or in a read/write area of the SPI flash device. Select one of
|
|
||||||
the following:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>VBOOT_VBNV_CMOS</li>
|
|
||||||
<li>VBOOT_VBNV_EC</li>
|
|
||||||
<li>VBOOT_VBNV_FLASH</li>
|
|
||||||
</ul>
|
|
||||||
<p>
|
|
||||||
More non-volatile storage features may be found in src/vboot/Kconfig.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
A TPM is also required for vboot operation. TPMs are available in
|
|
||||||
drivers/i2c/tpm and drivers/pc80/tpm.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
In addition to adding the coreboot files into the read-only region, enabling
|
|
||||||
vboot causes the build script to add the read/write files into coreboot file
|
|
||||||
systems in FW_MAIN_A and FW_MAIN_B.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<h2>Signing the coreboot Image</h2>
|
|
||||||
<p>
|
|
||||||
The following command script is an example of how to sign the coreboot image file.
|
|
||||||
This script is used on the Intel Galileo board and creates the GBB area and
|
|
||||||
inserts it into the coreboot image. It also updates the VBLOCK areas with the
|
|
||||||
firmware signing key and the signature for the FW_MAIN firmware. More details
|
|
||||||
are available in 3rdparty/vboot/README.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre><code>#!/bin/sh
|
|
||||||
#
|
|
||||||
# The necessary tools were built and installed using the following commands:
|
|
||||||
#
|
|
||||||
# pushd 3rdparty/vboot
|
|
||||||
# make
|
|
||||||
# sudo make install
|
|
||||||
# popd
|
|
||||||
#
|
|
||||||
# The keys were made using the following command
|
|
||||||
#
|
|
||||||
# 3rdparty/vboot/scripts/keygeneration/create_new_keys.sh \
|
|
||||||
# --4k --4k-root --output $PWD/keys
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# The "magic" numbers below are derived from the GBB section in
|
|
||||||
# src/mainboard/intel/galileo/vboot.fmd.
|
|
||||||
#
|
|
||||||
# GBB Header Size: 0x80
|
|
||||||
# GBB Offset: 0x611000, 4KiB block number: 1553 (0x611)
|
|
||||||
# GBB Length: 0x7f000, 4KiB blocks: 127 (0x7f)
|
|
||||||
# COREBOOT Offset: 0x690000, 4KiB block number: 1680 (0x690)
|
|
||||||
# COREBOOT Length: 0x170000, 4KiB blocks: 368 (0x170)
|
|
||||||
#
|
|
||||||
# 0x7f000 (GBB Length) = 0x80 + 0x100 + 0x1000 + 0x7ce80 + 0x1000
|
|
||||||
#
|
|
||||||
# Create the GBB area blob
|
|
||||||
# Parameters: hwid_size,rootkey_size,bmpfv_size,recoverykey_size
|
|
||||||
#
|
|
||||||
gbb_utility -c 0x100,0x1000,0x7ce80,0x1000 gbb.blob
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copy from the start of the flash to the GBB region into the signed flash
|
|
||||||
# image.
|
|
||||||
#
|
|
||||||
# 1553 * 4096 = 0x611 * 0x1000 = 0x611000, size of area before GBB
|
|
||||||
#
|
|
||||||
dd conv=fdatasync ibs=4096 obs=4096 count=1553 \
|
|
||||||
if=build/coreboot.rom of=build/coreboot.signed.rom
|
|
||||||
|
|
||||||
#
|
|
||||||
# Append the empty GBB area to the coreboot.rom image.
|
|
||||||
#
|
|
||||||
# 1553 * 4096 = 0x611 * 0x1000 = 0x611000, offset to GBB
|
|
||||||
#
|
|
||||||
dd conv=fdatasync obs=4096 obs=4096 seek=1553 if=gbb.blob \
|
|
||||||
of=build/coreboot.signed.rom
|
|
||||||
|
|
||||||
#
|
|
||||||
# Append the rest of the read-only region into the signed flash image.
|
|
||||||
#
|
|
||||||
# 1680 * 4096 = 0x690 * 0x1000 = 0x690000, offset to COREBOOT area
|
|
||||||
# 368 * 4096 = 0x170 * 0x1000 = 0x170000, length of COREBOOT area
|
|
||||||
#
|
|
||||||
dd conv=fdatasync ibs=4096 obs=4096 skip=1680 seek=1680 count=368 \
|
|
||||||
if=build/coreboot.rom of=build/coreboot.signed.rom
|
|
||||||
|
|
||||||
#
|
|
||||||
# Insert the HWID and public root and recovery RSA keys into the GBB area.
|
|
||||||
#
|
|
||||||
gbb_utility \
|
|
||||||
--set --hwid='Galileo' \
|
|
||||||
-r $PWD/keys/recovery_key.vbpubk \
|
|
||||||
-k $PWD/keys/root_key.vbpubk \
|
|
||||||
build/coreboot.signed.rom
|
|
||||||
|
|
||||||
#
|
|
||||||
# Sign the read/write firmware areas with the private signing key and update
|
|
||||||
# the VBLOCK_A and VBLOCK_B regions.
|
|
||||||
#
|
|
||||||
3rdparty/vboot/scripts/image_signing/sign_firmware.sh \
|
|
||||||
build/coreboot.signed.rom \
|
|
||||||
$PWD/keys \
|
|
||||||
build/coreboot.signed.rom
|
|
||||||
</code></pre>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<h2>Boot Flow</h2>
|
|
||||||
<p>
|
|
||||||
The reset vector exist in the read-only area and points to the bootblock entry
|
|
||||||
point. The only copy of the bootblock exists in the read-only area of the SPI
|
|
||||||
flash. Verstage may be part of the bootblock or a separate stage. If separate
|
|
||||||
then the bootblock loads verstage from the read-only area and transfers control
|
|
||||||
to it.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Upon first boot, verstage attempts to verify the read/write section A. It gets
|
|
||||||
the public root key from the GBB area and uses that to verify the VBLOCK area
|
|
||||||
in read-write section A. If the VBLOCK area is valid then it extracts the
|
|
||||||
firmware signing key (1024-8192 bits) and uses that to verify the FW_MAIN_A
|
|
||||||
area of read/write section A. If the verification is successful then verstage
|
|
||||||
instructs coreboot to use the coreboot file system in read/write section A for
|
|
||||||
the contents of the remaining boot firmware (romstage, postcar, ramstage and
|
|
||||||
the payload).
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
If verification fails for the read/write area and the other read/write area is
|
|
||||||
not valid vboot falls back to the read-only area to boot into system recovery.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<h2>Chromebook Special Features</h2>
|
|
||||||
<p>
|
|
||||||
Google's Chromebooks have some special features:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>Developer mode</li>
|
|
||||||
<li>Write-protect screw</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h3>Developer Mode</h3>
|
|
||||||
<p>
|
|
||||||
Developer mode allows the user to use coreboot to boot another operating system.
|
|
||||||
This may be a another (beta) version of Chrome OS, or another flavor of
|
|
||||||
GNU/Linux. Use of developer mode does not void the system warranty. Upon
|
|
||||||
entry into developer mode, all locally saved data on the system is lost.
|
|
||||||
This prevents someone from entering developer mode to subvert the system
|
|
||||||
security to access files on the local system or cloud.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h3>Write Protect Screw</h3>
|
|
||||||
<p>
|
|
||||||
Chromebooks have a write-protect screw which provides the ground to the
|
|
||||||
write-protect pin of the SPI flash. Google specifically did this to allow
|
|
||||||
the manufacturing line and advanced developers to re-write the entire SPI flash
|
|
||||||
part. Once the screw is removed, any firmware may be placed on the device.
|
|
||||||
However, accessing this screw requires opening the case and voids the system
|
|
||||||
warranty!
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<p>Modified: 2 May 2017</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -16,6 +16,12 @@ This is an (incomplete) list of POST codes emitted by coreboot v4.
|
|||||||
0x66 Devices have been enumerated
|
0x66 Devices have been enumerated
|
||||||
0x88 Devices have been configured
|
0x88 Devices have been configured
|
||||||
0x89 Devices have been enabled
|
0x89 Devices have been enabled
|
||||||
|
0xe0 Boot media (e.g. SPI ROM) is corrupt
|
||||||
|
0xe1 Resource stored within CBFS is corrupt
|
||||||
|
0xe2 Vendor binary (e.g. FSP) generated a fatal error
|
||||||
|
0xe3 RAM could not be initialized
|
||||||
|
0xe4 Critical hardware component could not initialize
|
||||||
|
0xe5 Video subsystem failed to initialize
|
||||||
0xf8 Entry into elf boot
|
0xf8 Entry into elf boot
|
||||||
0xf3 Jumping to payload
|
0xf3 Jumping to payload
|
||||||
|
|
||||||
|
@ -1,290 +0,0 @@
|
|||||||
New config language for LinuxBIOS
|
|
||||||
|
|
||||||
\begin{abstract}
|
|
||||||
We describe the new configuration language for LinuxBIOS.
|
|
||||||
\end{abstract}
|
|
||||||
|
|
||||||
\section{Scope}
|
|
||||||
This document defines the new configuration language for LinuxBIOS.
|
|
||||||
|
|
||||||
\section{Goals}
|
|
||||||
The goals of the new language are these:
|
|
||||||
\begin{itemize}
|
|
||||||
\item Simplified Makefiles so people can see what is set
|
|
||||||
\item Move from the regular-expression-based language to something
|
|
||||||
a bit more comprehensible and flexible
|
|
||||||
\item make the specification easier for people to use and understand
|
|
||||||
\item allow unique register-set-specifiers for each chip
|
|
||||||
\item allow generic register-set-specifiers for each chip
|
|
||||||
\item generate static initialization code, as needed, for the
|
|
||||||
specifiers.
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\section{Language}
|
|
||||||
Here is the new language. It is very similar to the old one, differing
|
|
||||||
in only a few respects. It borrows heavily from Greg Watson's suggestions.
|
|
||||||
|
|
||||||
I am presenting it in a pseudo-BNF in the hopes it will be easier. Things
|
|
||||||
in '' are keywords; things in ``'' are strings in the actual text.
|
|
||||||
\begin{verbatim}
|
|
||||||
#exprs are composed of factor or factor + factor etc.
|
|
||||||
expr ::= factor ( ``+'' factor | ``-'' factor | )*
|
|
||||||
#factors are term or term * term or term / term or ...
|
|
||||||
factor ::= term ( ``*'' term | ``/'' term | ... )*
|
|
||||||
#
|
|
||||||
unary-op ::= ``!'' ID
|
|
||||||
# term is a number, hexnumber, ID, unary-op, or a full-blown expression
|
|
||||||
term ::= NUM | XNUM | ID | unary-op | ``(`` expr ``)''
|
|
||||||
|
|
||||||
# Option command. Can be an expression or quote-string.
|
|
||||||
# Options are used in the config tool itself (in expressions and 'if')
|
|
||||||
# and are also passed to the C compiler when building linuxbios.
|
|
||||||
# It is an error to have two option commands in a file.
|
|
||||||
# It is an error to have an option command after the ID has been used
|
|
||||||
# in an expression (i.e. 'set after used' is an error)
|
|
||||||
option ::= 'option' ID '=' (``value'' | term)
|
|
||||||
|
|
||||||
# Default command. The ID is set to this value if no option command
|
|
||||||
# is scanned.
|
|
||||||
# Multiple defaults for an ID will produce warning, but not errors.
|
|
||||||
# It is OK to scan a default command after use of an ID.
|
|
||||||
# Options always over-ride defaults.
|
|
||||||
default ::= 'default' ID '=' (``value'' | term)
|
|
||||||
|
|
||||||
# the mainboard, southbridge, northbridge commands
|
|
||||||
# cause sourcing of Config.lb files as in the old config tool
|
|
||||||
# as parts are sourced, a device tree is built. The structure
|
|
||||||
# of the tree is determined by the structure of the components
|
|
||||||
# as they are specified. To attach a superio to a southbridge, for
|
|
||||||
# example, one would do this:
|
|
||||||
# southbridge acer/5432
|
|
||||||
# superio nsc/123
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
# the tool generates static initializers for this hierarchy.
|
|
||||||
|
|
||||||
# add C code to the current component (motherboard, etc. )
|
|
||||||
# to initialise the component-INDEPENDENT structure members
|
|
||||||
init ::= 'init' ``CODE''
|
|
||||||
|
|
||||||
# add C code to the current component (motherboard, etc. )
|
|
||||||
# to initialise the component-DEPENDENT structure members
|
|
||||||
register ::= 'register' ``CODE''
|
|
||||||
|
|
||||||
|
|
||||||
# mainboard command
|
|
||||||
# statements in this block will set variables controlling the mainboard,
|
|
||||||
# and will also place components (northbridge etc.) in the device tree
|
|
||||||
# under this mainboard
|
|
||||||
mainboard ::= 'mainboard' PATH (statements)* 'end'
|
|
||||||
|
|
||||||
# standard linuxbios commands
|
|
||||||
southbridge ::= 'southbridge' PATH (statemnts)* 'end'
|
|
||||||
northbridge ::= 'northbridge' PATH (statemnts)* 'end'
|
|
||||||
superio ::= 'superio PATH (statemnts)* 'end'
|
|
||||||
cpu ::= 'cpu' PATH (statemnts)* 'end'
|
|
||||||
arch ::= 'arch' PATH (statemnts)* 'end'
|
|
||||||
|
|
||||||
# files for building linuxbios
|
|
||||||
# include a file in crt0.S
|
|
||||||
mainboardinit ::= 'mainboardinit' PATH
|
|
||||||
|
|
||||||
# object file
|
|
||||||
object ::= 'object' PATH
|
|
||||||
# driver objects are just built into the image in a different way
|
|
||||||
driver ::= 'driver' PATH
|
|
||||||
|
|
||||||
# Use the Config.lb file in the PATH
|
|
||||||
dir ::= 'dir' PATH
|
|
||||||
|
|
||||||
# add a file to the set of ldscript files
|
|
||||||
ldscript ::= 'ldscript' PATH
|
|
||||||
|
|
||||||
# dependencies or actions for the makerule command
|
|
||||||
dep ::= 'dep' ``dependency-string''
|
|
||||||
act ::= 'act' ``actions''
|
|
||||||
depsacts ::= (dep | act)*
|
|
||||||
# set up a makerule
|
|
||||||
#
|
|
||||||
makerule ::= 'makerule' PATH depsacts
|
|
||||||
|
|
||||||
#defines for use in makefiles only
|
|
||||||
# note usable in the config tool, not passed to cc
|
|
||||||
makedefine ::= 'makedefine' ``RAWTEXT''
|
|
||||||
|
|
||||||
# add an action to an existing make rule
|
|
||||||
addaction ::= 'addaction' PATH ``ACTION''
|
|
||||||
|
|
||||||
# statements
|
|
||||||
statement ::=
|
|
||||||
option
|
|
||||||
| default
|
|
||||||
| cpu
|
|
||||||
| arch
|
|
||||||
| northbridge
|
|
||||||
| southbridge
|
|
||||||
| superio
|
|
||||||
| object
|
|
||||||
| driver
|
|
||||||
| mainboardinit
|
|
||||||
| makerule
|
|
||||||
| makedefine
|
|
||||||
| addaction
|
|
||||||
| init
|
|
||||||
| register
|
|
||||||
| iif
|
|
||||||
| dir
|
|
||||||
| ldscript
|
|
||||||
|
|
||||||
statements ::= (statement)*
|
|
||||||
|
|
||||||
# target directory specification
|
|
||||||
target ::= 'target' PATH
|
|
||||||
|
|
||||||
# and the whole thing
|
|
||||||
board ::= target (option)* mainboard
|
|
||||||
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
\subsubsection{Command definitions}
|
|
||||||
\subsubsubsection{option}
|
|
||||||
\subsubsubsection{default}
|
|
||||||
\subsubsubsection{cpu}
|
|
||||||
\subsubsubsection{arch}
|
|
||||||
\subsubsubsection{northbridge}
|
|
||||||
\subsubsubsection{southbridge}
|
|
||||||
\subsubsubsection{superio}
|
|
||||||
\subsubsubsection{object}
|
|
||||||
\subsubsubsection{driver}
|
|
||||||
\subsubsubsection{mainboardinit}
|
|
||||||
\subsubsubsection{makerule}
|
|
||||||
\subsubsubsection{makedefine}
|
|
||||||
\subsubsubsection{addaction}
|
|
||||||
\subsubsubsection{init}
|
|
||||||
\subsubsubsection{register}
|
|
||||||
\subsubsubsection{iif}
|
|
||||||
\subsubsubsection{dir}
|
|
||||||
\subsubsubsection{ldscript}
|
|
||||||
|
|
||||||
|
|
||||||
A sample file:
|
|
||||||
|
|
||||||
\begin{verbatim}
|
|
||||||
target x
|
|
||||||
|
|
||||||
# over-ride the default ROM size in the mainboard file
|
|
||||||
option CONFIG_ROM_SIZE=1024*1024
|
|
||||||
mainboard amd/solo
|
|
||||||
end
|
|
||||||
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
Sample mainboard file
|
|
||||||
\begin{verbatim}
|
|
||||||
#
|
|
||||||
###
|
|
||||||
### Set all of the defaults for an x86 architecture
|
|
||||||
###
|
|
||||||
arch i386 end
|
|
||||||
cpu k8 end
|
|
||||||
#
|
|
||||||
option CONFIG_DEBUG=1
|
|
||||||
default CONFIG_USE_FALLBACK_IMAGE=1
|
|
||||||
option A=(1+2)
|
|
||||||
option B=0xa
|
|
||||||
#
|
|
||||||
###
|
|
||||||
### Build our 16 bit and 32 bit linuxBIOS entry code
|
|
||||||
###
|
|
||||||
mainboardinit cpu/i386/entry16.inc
|
|
||||||
mainboardinit cpu/i386/entry32.inc
|
|
||||||
ldscript cpu/i386/entry16.lds
|
|
||||||
ldscript cpu/i386/entry32.lds
|
|
||||||
#
|
|
||||||
###
|
|
||||||
### Build our reset vector (This is where linuxBIOS is entered)
|
|
||||||
###
|
|
||||||
if CONFIG_USE_FALLBACK_IMAGE
|
|
||||||
mainboardinit cpu/i386/reset16.inc
|
|
||||||
ldscript cpu/i386/reset16.lds
|
|
||||||
else
|
|
||||||
mainboardinit cpu/i386/reset32.inc
|
|
||||||
ldscript cpu/i386/reset32.lds
|
|
||||||
end
|
|
||||||
.
|
|
||||||
.
|
|
||||||
.
|
|
||||||
if CONFIG_USE_FALLBACK_IMAGE mainboardinit arch/i386/lib/noop_failover.inc end
|
|
||||||
#
|
|
||||||
###
|
|
||||||
### Romcc output
|
|
||||||
###
|
|
||||||
#makerule ./failover.E dep "$(CONFIG_MAINBOARD)/failover.c" act "$(CPP) -I$(TOP)/src $(CPPFLAGS) $(CONFIG_MAINBOARD)/failover.c > ./failever.E"
|
|
||||||
#makerule ./failover.inc dep "./romcc ./failover.E" act "./romcc -O ./failover.E > failover.inc"
|
|
||||||
#mainboardinit ./failover.inc
|
|
||||||
makerule ./auto.E dep "$(CONFIG_MAINBOARD)/auto.c" act "$(CPP) -I$(TOP)/src -$(ROMCCPPFLAGS) $(CPPFLAGS) $(CONFIG_MAINBOARD)/auto.c > ./auto.E"
|
|
||||||
makerule ./auto.inc dep "./romcc ./auto.E" act "./romcc -O ./auto.E > auto.inc"
|
|
||||||
mainboardinit ./auto.inc
|
|
||||||
#
|
|
||||||
###
|
|
||||||
### Include the secondary Configuration files
|
|
||||||
###
|
|
||||||
northbridge amd/amdk8
|
|
||||||
end
|
|
||||||
southbridge amd/amd8111
|
|
||||||
end
|
|
||||||
#mainboardinit arch/i386/smp/secondary.inc
|
|
||||||
superio nsc/pc87360
|
|
||||||
register "com1={1} com2={0} floppy=1 lpt=1 keyboard=1"
|
|
||||||
end
|
|
||||||
dir /pc80
|
|
||||||
##dir /src/superio/winbond/w83627hf
|
|
||||||
cpu p5 end
|
|
||||||
cpu p6 end
|
|
||||||
cpu k7 end
|
|
||||||
cpu k8 end
|
|
||||||
#
|
|
||||||
###
|
|
||||||
### Build the objects we have code for in this directory.
|
|
||||||
###
|
|
||||||
##object mainboard.o
|
|
||||||
driver mainboard.o
|
|
||||||
object static_devices.o
|
|
||||||
if CONFIG_HAVE_MP_TABLE object mptable.o end
|
|
||||||
if CONFIG_HAVE_PIRQ_TABLE object irq_tables.o end
|
|
||||||
### Location of the DIMM EEPROMS on the SMBUS
|
|
||||||
### This is fixed into a narrow range by the DIMM package standard.
|
|
||||||
###
|
|
||||||
option SMBUS_MEM_DEVICE_START=(0xa << 3)
|
|
||||||
option SMBUS_MEM_DEVICE_END=(SMBUS_MEM_DEVICE_START +1)
|
|
||||||
option SMBUS_MEM_DEVICE_INC=1
|
|
||||||
#
|
|
||||||
### The linuxBIOS bootloader.
|
|
||||||
###
|
|
||||||
option CONFIG_PAYLOAD_SIZE = (CONFIG_ROM_SECTION_SIZE - CONFIG_ROM_IMAGE_SIZE)
|
|
||||||
option CONFIG_ROM_PAYLOAD_START = (0xffffffff - CONFIG_ROM_SIZE + CONFIG_ROM_SECTION_OFFSET + 1)
|
|
||||||
#
|
|
||||||
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
I've found the output of the new tool to be easier to
|
|
||||||
handle. Makefile.settings looks like this, for example:
|
|
||||||
\begin{verbatim}
|
|
||||||
TOP:=/home/rminnich/src/yapps2/freebios2
|
|
||||||
TARGET_DIR:=x
|
|
||||||
export CONFIG_MAINBOARD:=/home/rminnich/src/yapps2/freebios2/src/mainboard/amd/solo
|
|
||||||
export CONFIG_ARCH:=i386
|
|
||||||
export CONFIG_RAMBASE:=0x4000
|
|
||||||
export CONFIG_ROM_IMAGE_SIZE:=65535
|
|
||||||
export CONFIG_PAYLOAD_SIZE:=131073
|
|
||||||
export CONFIG_MAX_CPUS:=1
|
|
||||||
export CONFIG_HEAP_SIZE:=8192
|
|
||||||
export CONFIG_STACK_SIZE:=8192
|
|
||||||
export CONFIG_MEMORY_HOLE:=0
|
|
||||||
export COREBOOT_VERSION:=1.1.0
|
|
||||||
export CC:=$(CONFIG_CROSS_COMPILE)gcc
|
|
||||||
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
In other words, instead of expressions, we see the values. It's easier to
|
|
||||||
deal with.
|
|
234
Documentation/acpi/devicetree.md
Normal file
@ -0,0 +1,234 @@
|
|||||||
|
# Adding new devices to a device tree
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
ACPI exposes a platform-independent interface for operating systems to perform
|
||||||
|
power management and other platform-level functions. Some operating systems
|
||||||
|
also use ACPI to enumerate devices that are not immediately discoverable, such
|
||||||
|
as those behind I2C or SPI busses (in contrast to PCI). This document discusses
|
||||||
|
the way that coreboot uses the concept of a "device tree" to generate ACPI
|
||||||
|
tables for usage by the operating system.
|
||||||
|
|
||||||
|
## Devicetree and overridetree (if applicable)
|
||||||
|
|
||||||
|
For mainboards that are organized around a "reference board" or "baseboard"
|
||||||
|
model (see ``src/mainboard/google/octopus`` or ``hatch`` for examples), there is
|
||||||
|
typically a devicetree.cb file that all boards share, and any differences for a
|
||||||
|
specific board ("variant") are captured in the overridetree.cb file. Any
|
||||||
|
settings changed in the overridetree take precedence over those in the main
|
||||||
|
devicetree. Note, not all mainboards will have the devicetree/overridetree
|
||||||
|
distinction, and may only have a devicetree.cb file. Or you can always just
|
||||||
|
write the ASL (ACPI Source Language) code yourself.
|
||||||
|
|
||||||
|
## Device drivers
|
||||||
|
|
||||||
|
Let's take a look at an example entry from
|
||||||
|
``src/mainboard/google/hatch/variant/hatch/overridetree.cb``:
|
||||||
|
|
||||||
|
```
|
||||||
|
device pci 15.0 on
|
||||||
|
chip drivers/i2c/generic
|
||||||
|
register "hid" = ""ELAN0000""
|
||||||
|
register "desc" = ""ELAN Touchpad""
|
||||||
|
register "irq" = "ACPI_IRQ_WAKE_EDGE_LOW(GPP_A21_IRQ)"
|
||||||
|
register "wake" = "GPE0_DW0_21"
|
||||||
|
device i2c 15 on end
|
||||||
|
end
|
||||||
|
end # I2C #0
|
||||||
|
```
|
||||||
|
|
||||||
|
When this entry is processed during ramstage, it will create a device in the
|
||||||
|
ACPI SSDT table (all devices in devicetrees end up in the SSDT table). The ACPI
|
||||||
|
generation routines in coreboot actually generate the raw bytecode that
|
||||||
|
represents the device's structure, but looking at ASL code is easier to
|
||||||
|
understand; see below for what the disassembled bytecode looks like:
|
||||||
|
|
||||||
|
```
|
||||||
|
Scope (\_SB.PCI0.I2C0)
|
||||||
|
{
|
||||||
|
Device (D015)
|
||||||
|
{
|
||||||
|
Name (_HID, "ELAN0000") // _HID: Hardware ID
|
||||||
|
Name (_UID, Zero) // _UID: Unique ID
|
||||||
|
Name (_DDN, "ELAN Touchpad") // _DDN: DOS Device Name
|
||||||
|
Method (_STA, 0, NotSerialized) // _STA: Status
|
||||||
|
{
|
||||||
|
Return (0x0F)
|
||||||
|
}
|
||||||
|
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
|
||||||
|
{
|
||||||
|
I2cSerialBusV2 (0x0015, ControllerInitiated, 400000,
|
||||||
|
AddressingMode7Bit, "\\_SB.PCI0.I2C0",
|
||||||
|
0x00, ResourceConsumer, , Exclusive, )
|
||||||
|
Interrupt (ResourceConsumer, Edge, ActiveLow, ExclusiveAndWake, ,, )
|
||||||
|
{
|
||||||
|
0x0000002D,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
Name (_S0W, 0x04) // _S0W: S0 Device Wake State
|
||||||
|
Name (_PRW, Package (0x02) // _PRW: Power Resources for Wake
|
||||||
|
{
|
||||||
|
0x15, // GPE #21
|
||||||
|
0x03 // Sleep state S3
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can see it generates _HID, _UID, _DDN, _STA, _CRS, _S0W, and _PRW
|
||||||
|
names/methods in the Device's scope.
|
||||||
|
|
||||||
|
## Utilizing a device driver
|
||||||
|
|
||||||
|
The device driver must be enabled for your build. There will be a CONFIG option
|
||||||
|
in the Kconfig file in the directory that the driver is in (e.g.,
|
||||||
|
``src/drivers/i2c/generic`` contains a Kconfig file; the option here is named
|
||||||
|
CONFIG_DRIVERS_I2C_GENERIC). The config option will need to be added to your
|
||||||
|
mainboard's Kconfig file (e.g., ``src/mainboard/google/hatch/Kconfig``) in order
|
||||||
|
to be compiled into your build.
|
||||||
|
|
||||||
|
## Diving into the above example:
|
||||||
|
|
||||||
|
Let's take a look at how the devicetree language corresponds to the generated
|
||||||
|
ASL.
|
||||||
|
|
||||||
|
First, note this:
|
||||||
|
|
||||||
|
```
|
||||||
|
chip drivers/i2c/generic
|
||||||
|
```
|
||||||
|
|
||||||
|
This means that the device driver we're using has a corresponding structure,
|
||||||
|
located at ``src/drivers/i2c/generic/chip.h``, named **struct
|
||||||
|
drivers_i2c_generic_config** and it contains many properties you can specify to
|
||||||
|
be included in the ACPI table.
|
||||||
|
|
||||||
|
### hid
|
||||||
|
|
||||||
|
```
|
||||||
|
register "hid" = ""ELAN0000""
|
||||||
|
```
|
||||||
|
|
||||||
|
This corresponds to **const char *hid** in the struct. In the ACPI ASL, it
|
||||||
|
translates to:
|
||||||
|
|
||||||
|
```
|
||||||
|
Name (_HID, "ELAN0000") // _HID: Hardware ID
|
||||||
|
```
|
||||||
|
|
||||||
|
under the device. **This property is used to match the device to its driver
|
||||||
|
during enumeration in the OS.**
|
||||||
|
|
||||||
|
### desc
|
||||||
|
|
||||||
|
```
|
||||||
|
register "desc" = ""ELAN Touchpad""
|
||||||
|
```
|
||||||
|
|
||||||
|
corresponds to **const char *desc** and in ASL:
|
||||||
|
|
||||||
|
```
|
||||||
|
Name (_DDN, "ELAN Touchpad") // _DDN: DOS Device Name
|
||||||
|
```
|
||||||
|
|
||||||
|
### irq
|
||||||
|
|
||||||
|
It also adds the interrupt,
|
||||||
|
|
||||||
|
```
|
||||||
|
Interrupt (ResourceConsumer, Edge, ActiveLow, ExclusiveAndWake, ,, )
|
||||||
|
{
|
||||||
|
0x0000002D,
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
which comes from:
|
||||||
|
|
||||||
|
```
|
||||||
|
register "irq" = "ACPI_IRQ_WAKE_EDGE_LOW(GPP_A21_IRQ)"
|
||||||
|
```
|
||||||
|
|
||||||
|
The GPIO pin IRQ settings control the "Edge", "ActiveLow", and
|
||||||
|
"ExclusiveAndWake" settings seen above (edge means it is an edge-triggered
|
||||||
|
interrupt as opposed to level-triggered; active low means the interrupt is
|
||||||
|
triggered on a falling edge).
|
||||||
|
|
||||||
|
Note that the ACPI_IRQ_WAKE_EDGE_LOW macro informs the platform that the GPIO
|
||||||
|
will be routed through SCI (ACPI's System Control Interrupt) for use as a wake
|
||||||
|
source. Also note that the IRQ names are SoC-specific, and you will need to
|
||||||
|
find the names in your SoC's header file. The ACPI_* macros are defined in
|
||||||
|
``src/arch/x86/include/acpi/acpi_device.h``.
|
||||||
|
|
||||||
|
Using a GPIO as an IRQ requires that it is configured in coreboot correctly.
|
||||||
|
This is often done in a mainboard-specific file named ``gpio.c``.
|
||||||
|
|
||||||
|
### wake
|
||||||
|
|
||||||
|
The last register is:
|
||||||
|
|
||||||
|
```
|
||||||
|
register "wake" = "GPE0_DW0_21"
|
||||||
|
```
|
||||||
|
|
||||||
|
which indicates that the method of waking the system using the touchpad will be
|
||||||
|
through a GPE, #21 associated with DW0, which is set up in devicetree.cb from
|
||||||
|
this example. The "21" indicates GPP_X21, where GPP_X is mapped onto DW0
|
||||||
|
elsewhere in the devicetree.
|
||||||
|
|
||||||
|
The last bit of the definition of that device includes:
|
||||||
|
|
||||||
|
```
|
||||||
|
device i2c 15 on end
|
||||||
|
```
|
||||||
|
|
||||||
|
which means it's an I2C device, with 7-bit address 0x15, and the device is "on",
|
||||||
|
meaning it will be exposed in the ACPI table. The PCI device that the
|
||||||
|
controller is located in determines which I2C bus the device is expected to be
|
||||||
|
found on. In this example, this is I2C bus 0. This also determines the ACPI
|
||||||
|
"Scope" that the device names and methods will live under, in this case
|
||||||
|
"\_SB.PCI0.I2C0".
|
||||||
|
|
||||||
|
## Other auto-generated names
|
||||||
|
|
||||||
|
(see [ACPI specification
|
||||||
|
6.3](https://uefi.org/sites/default/files/resources/ACPI_6_3_final_Jan30.pdf)
|
||||||
|
for more details on ACPI methods)
|
||||||
|
|
||||||
|
### _S0W (S0 Device Wake State)
|
||||||
|
_S0W indicates the deepest S0 sleep state this device can wake itself from,
|
||||||
|
which in this case is 4, representing _D3cold_.
|
||||||
|
|
||||||
|
### _PRW (Power Resources for Wake)
|
||||||
|
_PRW indicates the power resources and events required for wake. There are no
|
||||||
|
dependent power resources, but the GPE (GPE0_DW0_21) is mentioned here (0x15),
|
||||||
|
as well as the deepest sleep state supporting waking the system (3), which is
|
||||||
|
S3.
|
||||||
|
|
||||||
|
### _STA (Status)
|
||||||
|
The _STA method is generated automatically, and its values, 0xF, indicates the
|
||||||
|
following:
|
||||||
|
|
||||||
|
Bit [0] – Set if the device is present.
|
||||||
|
Bit [1] – Set if the device is enabled and decoding its resources.
|
||||||
|
Bit [2] – Set if the device should be shown in the UI.
|
||||||
|
Bit [3] – Set if the device is functioning properly (cleared if device failed its diagnostics).
|
||||||
|
|
||||||
|
### _CRS (Current resource settings)
|
||||||
|
The _CRS method is generated automatically, as the driver knows it is an I2C
|
||||||
|
controller, and so specifies how to configure the controller for proper
|
||||||
|
operation with the touchpad.
|
||||||
|
|
||||||
|
```
|
||||||
|
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
|
||||||
|
{
|
||||||
|
I2cSerialBusV2 (0x0015, ControllerInitiated, 400000,
|
||||||
|
AddressingMode7Bit, "\\_SB.PCI0.I2C0",
|
||||||
|
0x00, ResourceConsumer, , Exclusive, )
|
||||||
|
```
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- **All fields that are left unspecified in the devicetree are initialized to
|
||||||
|
zero.**
|
||||||
|
- **All devices in devicetrees end up in the SSDT table, and are generated in
|
||||||
|
coreboot's ramstage**
|
@ -73,6 +73,15 @@ calling the platform specific acpigen_soc_{set,clear}_tx_gpio
|
|||||||
functions internally. Thus, all the ACPI AML calling conventions for
|
functions internally. Thus, all the ACPI AML calling conventions for
|
||||||
the platform functions apply to these helper functions as well.
|
the platform functions apply to these helper functions as well.
|
||||||
|
|
||||||
|
3. Get Rx GPIO
|
||||||
|
int acpigen_get_rx_gpio(struct acpi_gpio gpio)
|
||||||
|
|
||||||
|
This function takes as input, an struct acpi_gpio type and outputs
|
||||||
|
AML code to read the *logical* value of a gpio (after taking its
|
||||||
|
polarity into consideration), into the Local0 variable. It calls
|
||||||
|
the platform specific acpigen_soc_read_rx_gpio() to actually read
|
||||||
|
the raw Rx gpio value.
|
||||||
|
|
||||||
## Implementation Details
|
## Implementation Details
|
||||||
|
|
||||||
ACPI library in coreboot will provide weak definitions for all the
|
ACPI library in coreboot will provide weak definitions for all the
|
||||||
|
16
Documentation/acpi/index.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# ACPI-specific documentation
|
||||||
|
|
||||||
|
This section contains documentation about coreboot on ACPI. coreboot dropped
|
||||||
|
backwards support for ACPI 1.0 and is only compatible to ACPI version 2.0 and
|
||||||
|
upwards.
|
||||||
|
|
||||||
|
|
||||||
|
- [SSDT UID generation](uid.md)
|
||||||
|
|
||||||
|
## GPIO
|
||||||
|
|
||||||
|
- [GPIO toggling in ACPI AML](gpio.md)
|
||||||
|
|
||||||
|
## devicetree
|
||||||
|
|
||||||
|
- [Adding devices to a device tree](devicetree.md)
|
14
Documentation/acpi/uid.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# ACPI SSDT \_UID generation
|
||||||
|
|
||||||
|
According to the ACPI spec:
|
||||||
|
|
||||||
|
> The _UID must be unique across all devices with either a common _HID or _CID.
|
||||||
|
|
||||||
|
|
||||||
|
When generating SSDTs in coreboot the independent drivers don't know
|
||||||
|
which \_UID is already in use for a specific \_HID or \_CID. To generate
|
||||||
|
unique \_UIDs the ACPI device's path is hashed and used as ID. As every ACPI
|
||||||
|
device has a different path, the hash will be also different for every device.
|
||||||
|
|
||||||
|
Windows 10 verifies all devices with the same \_HID or \_CID and makes
|
||||||
|
sure that no \_UID is duplicated. If it is it'll BSOD.
|
@ -15,16 +15,31 @@ Payloads run from the ramstage are started in S mode, and trap delegation
|
|||||||
will have been done. These payloads rely on the SBI and can not replace it.
|
will have been done. These payloads rely on the SBI and can not replace it.
|
||||||
|
|
||||||
## Stage handoff protocol
|
## Stage handoff protocol
|
||||||
On entry to a stage or payload,
|
On entry to a stage or payload (including SELF payloads),
|
||||||
* all harts are running.
|
* all harts are running.
|
||||||
* A0 is the hart ID.
|
* A0 is the hart ID.
|
||||||
* A1 is the pointer to the Flattened Device Tree (FDT).
|
* A1 is the pointer to the Flattened Device Tree (FDT).
|
||||||
|
* A2 contains the additional program calling argument:
|
||||||
|
- cbmem_top for ramstage
|
||||||
|
- the address of the payload for opensbi
|
||||||
|
|
||||||
## Additional payload handoff requirements
|
## Additional payload handoff requirements
|
||||||
The location of cbmem should be placed in a node in the FDT.
|
The location of cbmem should be placed in a node in the FDT.
|
||||||
|
|
||||||
|
## OpenSBI
|
||||||
|
In case the payload doesn't install it's own SBI, like the [RISCV-PK] does,
|
||||||
|
[OpenSBI] can be used instead.
|
||||||
|
It's loaded into RAM after coreboot has finished loading the payload.
|
||||||
|
coreboot then will jump to OpenSBI providing a pointer to the real payload,
|
||||||
|
which OpenSBI will jump to once the SBI is installed.
|
||||||
|
|
||||||
|
Besides providing SBI it also sets protected memory regions and provides
|
||||||
|
a platform independent console.
|
||||||
|
|
||||||
|
The OpenSBI code is always run in M mode.
|
||||||
|
|
||||||
## Trap delegation
|
## Trap delegation
|
||||||
Traps are delegated in the ramstage.
|
Traps are delegated to the payload.
|
||||||
|
|
||||||
## SMP within a stage
|
## SMP within a stage
|
||||||
At the beginning of each stage, all harts save 0 are spinning in a loop on
|
At the beginning of each stage, all harts save 0 are spinning in a loop on
|
||||||
@ -44,3 +59,6 @@ The hart blocks until fn is non-null, and then calls it. If fn returns, we
|
|||||||
will panic if possible, but behavior is largely undefined.
|
will panic if possible, but behavior is largely undefined.
|
||||||
|
|
||||||
Only hart 0 runs through most of the code in each stage.
|
Only hart 0 runs through most of the code in each stage.
|
||||||
|
|
||||||
|
[RISCV-PK]: https://github.com/riscv/riscv-pk
|
||||||
|
[OpenSBI]: https://github.com/riscv/opensbi
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
This section contains documentation about coreboot on x86 architecture.
|
This section contains documentation about coreboot on x86 architecture.
|
||||||
|
|
||||||
|
* [x86 PAE support](pae.md)
|
||||||
|
|
||||||
## State of x86_64 support
|
## State of x86_64 support
|
||||||
At the moment there's no single board that supports x86_64 or to be exact
|
At the moment there's no single board that supports x86_64 or to be exact
|
||||||
`ARCH_RAMSTAGE_X86_64` and `ARCH_ROMSTAGE_X86_64`.
|
`ARCH_RAMSTAGE_X86_64` and `ARCH_ROMSTAGE_X86_64`.
|
||||||
@ -14,24 +16,36 @@ In order to add support for x86_64 the following assumptions are made:
|
|||||||
* The reference implementation is qemu
|
* The reference implementation is qemu
|
||||||
* The CPU supports 1GiB hugepages
|
* The CPU supports 1GiB hugepages
|
||||||
|
|
||||||
## Assuptions for ARCH_ROMSTAGE_X86_64 reference implementation
|
## Assuptions for all stages using the reference implementation
|
||||||
* 0-4GiB are identity mapped using 1GiB huge-pages
|
* 0-4GiB are identity mapped using 2MiB-pages as WB
|
||||||
* Memory above 4GiB isn't accessible
|
* Memory above 4GiB isn't accessible
|
||||||
* pagetables reside in _pagetables
|
* page tables reside in memory mapped ROM
|
||||||
* Romstage must install new pagetables in CBMEM after RAMINIT
|
* A stage can install new page tables in RAM
|
||||||
|
|
||||||
## Assuptions for ARCH_RAMSTAGE_X86_64 reference implementation
|
## Page tables
|
||||||
* Romstage installed pagetables according to memory layout
|
Page tables are generated by a tool in `util/pgtblgen/pgtblgen`. It writes
|
||||||
* Memory above 4GiB is accessible
|
the page tables to a file which is then included into the CBFS as file called
|
||||||
|
`pagetables`.
|
||||||
|
|
||||||
|
To generate the static page tables it must know the physical address where to
|
||||||
|
place the file.
|
||||||
|
|
||||||
|
The page tables contains the following structure:
|
||||||
|
* PML4E pointing to PDPE
|
||||||
|
* PDPE with *$n* entries each pointing to PDE
|
||||||
|
* *$n* PDEs with 512 entries each
|
||||||
|
|
||||||
|
At the moment *$n* is 4, which results in identity mapping the lower 4 GiB.
|
||||||
|
|
||||||
## Steps to add basic support for x86_64
|
## Steps to add basic support for x86_64
|
||||||
* Add x86_64 toolchain support - *DONE*
|
* Add x86_64 toolchain support - *DONE*
|
||||||
* Fix compilation errors - *DONE*
|
* Fix compilation errors - *DONE*
|
||||||
* Fix linker errors - *TODO*
|
* Fix linker errors - *TODO*
|
||||||
* Add x86_64 rmodule support - *ONGERRIT*
|
* Add x86_64 rmodule support - *DONE*
|
||||||
* Add x86_64 exception handlers - *TODO*
|
* Add x86_64 exception handlers - *TODO*
|
||||||
* Setup page tables for long mode - *TODO*
|
* Setup page tables for long mode - *DONE*
|
||||||
* Add assembly code for long mode - *TODO*
|
* Add assembly code for long mode - *DONE*
|
||||||
|
* Add assembly code for postcar stage - *TODO*
|
||||||
* Add assembly code to return to protected mode - *TODO*
|
* Add assembly code to return to protected mode - *TODO*
|
||||||
* Implement reference code for mainboard `emulation/qemu-q35` - *TODO*
|
* Implement reference code for mainboard `emulation/qemu-q35` - *TODO*
|
||||||
|
|
||||||
|
15
Documentation/arch/x86/pae.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# x86_32 PAE documentation
|
||||||
|
|
||||||
|
Due to missing x86_64 support it's required to use PAE enabled x86_32 code.
|
||||||
|
The corresponding functions can be found in ``src/cpu/x86/pae/``.
|
||||||
|
|
||||||
|
## Memory clearing helper functions
|
||||||
|
|
||||||
|
To clear all DRAM on request of the
|
||||||
|
[Security API](../../security/memory_clearing.md), a helper function can be used
|
||||||
|
called `memset_pae`.
|
||||||
|
The function has additional requirements in contrast to `memset`, and has more
|
||||||
|
overhead as it uses virtual memory to access memory above 4GiB.
|
||||||
|
Memory is cleared in 2MiB chunks, which might take a while.
|
||||||
|
|
||||||
|
Make sure to enable caches through MTRRs, otherwise `memset_pae` will be slow!
|
@ -80,11 +80,11 @@ Get a decent editor and don't leave whitespace at the end of lines.
|
|||||||
Coding style is all about readability and maintainability using commonly
|
Coding style is all about readability and maintainability using commonly
|
||||||
available tools.
|
available tools.
|
||||||
|
|
||||||
The limit on the length of lines is 80 columns and this is a strongly
|
The limit on the length of lines is 96 columns and this is a strongly
|
||||||
preferred limit.
|
preferred limit.
|
||||||
|
|
||||||
Statements longer than 80 columns will be broken into sensible chunks,
|
Statements longer than 96 columns will be broken into sensible chunks,
|
||||||
unless exceeding 80 columns significantly increases readability and does
|
unless exceeding 96 columns significantly increases readability and does
|
||||||
not hide information. Descendants are always substantially shorter than
|
not hide information. Descendants are always substantially shorter than
|
||||||
the parent and are placed substantially to the right. The same applies
|
the parent and are placed substantially to the right. The same applies
|
||||||
to function headers with a long argument list. However, never break
|
to function headers with a long argument list. However, never break
|
||||||
|
@ -22,19 +22,30 @@ Refrain from insulting anyone or the group they belong to. Remember that
|
|||||||
people might be sensitive to other things than you are.
|
people might be sensitive to other things than you are.
|
||||||
|
|
||||||
Most of our community members are not native English speakers, thus
|
Most of our community members are not native English speakers, thus
|
||||||
misunderstandings can (and do) happen. Always assume that others are
|
misunderstandings can (and do) happen. Assume that others are friendly
|
||||||
friendly and may have picked less-than-stellar wording by accident.
|
and may have picked less-than-stellar wording by accident as long as
|
||||||
|
you possibly can.
|
||||||
|
|
||||||
If you have a grievance due to conduct in this community, we want to hear
|
## Reporting Issues
|
||||||
about it so we can handle the situation. Please contact our arbitration
|
|
||||||
team directly: They will listen to you and react in a timely fashion.
|
If you have a grievance due to conduct in this community, we're sorry
|
||||||
|
that you have had a bad experience, and we want to hear about it so
|
||||||
|
we can resolve the situation.
|
||||||
|
|
||||||
|
Please contact members of our arbitration team (listed below) promptly
|
||||||
|
and directly, in person (if available) or by email: They will listen
|
||||||
|
to you and react in a timely fashion.
|
||||||
|
|
||||||
|
If you feel uncomfortable, please don't wait it out, ask for help,
|
||||||
|
so we can work on setting things right.
|
||||||
|
|
||||||
For transparency there is no alias or private mailing list address for
|
For transparency there is no alias or private mailing list address for
|
||||||
you to reach out to, since we want to make sure that you know who will
|
you to reach out to, since we want to make sure that you know who will
|
||||||
(and who won't) read your message.
|
and who won't read your message.
|
||||||
|
|
||||||
However since people might be on travel or otherwise be unavailable at
|
However since people might be on travel or otherwise be unavailable
|
||||||
times, consider reaching out to multiple persons.
|
at times, please reach out to multiple persons at once, especially
|
||||||
|
when using email.
|
||||||
|
|
||||||
The team will treat your messages confidential as far as the law permits.
|
The team will treat your messages confidential as far as the law permits.
|
||||||
For the purpose of knowing what law applies, the list provides the usual
|
For the purpose of knowing what law applies, the list provides the usual
|
||||||
@ -73,15 +84,10 @@ immediately.
|
|||||||
If a community member engages in unacceptable behavior, the community
|
If a community member engages in unacceptable behavior, the community
|
||||||
organizers may take any action they deem appropriate, up to and including
|
organizers may take any action they deem appropriate, up to and including
|
||||||
a temporary ban or permanent expulsion from the community without warning
|
a temporary ban or permanent expulsion from the community without warning
|
||||||
(and without refund in the case of a paid event). Community organizers
|
(and without refund in the case of a paid event).
|
||||||
can be part of the arbitration team, or organizers of events and online
|
|
||||||
communities.
|
|
||||||
|
|
||||||
## If You Witness or Are Subject to Unacceptable Behavior
|
|
||||||
|
|
||||||
If you are subject to or witness unacceptable behavior, or have any other
|
|
||||||
concerns, please notify someone from the arbitration team immediately.
|
|
||||||
|
|
||||||
|
Community organizers can be members of the arbitration team, or organizers
|
||||||
|
of events and online communities.
|
||||||
|
|
||||||
## Addressing Grievances
|
## Addressing Grievances
|
||||||
|
|
||||||
@ -102,7 +108,7 @@ Our arbitration team consists of the following people
|
|||||||
* Stefan Reinauer <stefan.reinauer@coreboot.org> (USA)
|
* Stefan Reinauer <stefan.reinauer@coreboot.org> (USA)
|
||||||
* Patrick Georgi <patrick@coreboot.org> (Germany)
|
* Patrick Georgi <patrick@coreboot.org> (Germany)
|
||||||
* Ronald Minnich <rminnich@coreboot.org> (USA)
|
* Ronald Minnich <rminnich@coreboot.org> (USA)
|
||||||
* Marc Jones <mjones@coreboot.org> (USA)
|
* Martin Roth <martin@coreboot.org> (USA)
|
||||||
|
|
||||||
## License and attribution
|
## License and attribution
|
||||||
|
|
||||||
|
45
Documentation/community/services.md
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# Accounts on coreboot.org
|
||||||
|
|
||||||
|
There are a number of places where you can benefit from creaating an account
|
||||||
|
in our community. Since there is no single sign-on system in place (at this
|
||||||
|
time), they come with their own setup routines.
|
||||||
|
|
||||||
|
## Gerrit code review
|
||||||
|
We exchange and review patches to the code using our [Gerrit code review
|
||||||
|
system](https://review.coreboot.org).
|
||||||
|
|
||||||
|
It allows logging in with a Google or GitHub account using OAuth2 as well
|
||||||
|
as with any OpenID provider that you may already use.
|
||||||
|
|
||||||
|
On the [settings screen](https://review.coreboot.org/settings) you can register
|
||||||
|
all your email addresses you intend to use in the context of coreboot
|
||||||
|
development so that commits with your email address in them are associated with
|
||||||
|
you properly.
|
||||||
|
|
||||||
|
### https push access
|
||||||
|
When using the https URLs to git repositories, you can push with the "HTTP
|
||||||
|
Credentials" you can have Gerrit generate for you on that page. By default,
|
||||||
|
git uses `$HOME/.netrc` for http authentication data, so add a line there
|
||||||
|
stating:
|
||||||
|
|
||||||
|
machine review.coreboot.org login $your-user-name password $your-password
|
||||||
|
|
||||||
|
### Gerrit user avatar
|
||||||
|
To setup an avatar to show in Gerrit, clone the avatars repository at
|
||||||
|
https://review.coreboot.org/gerrit-avatars.git and add a file named
|
||||||
|
$your-user-ID.jpg (the user ID is a number shown on the [settings screen](https://review.coreboot.org/settings)).
|
||||||
|
The image must be provided in JPEG format, must be square and have at most 50000
|
||||||
|
bytes.
|
||||||
|
|
||||||
|
After you push for review, the system will automatically verify your change
|
||||||
|
and, if adhering to these constraints, approve it. You can then immediately
|
||||||
|
submit it.
|
||||||
|
|
||||||
|
## Issue tracker
|
||||||
|
We have an [issue tracker](https://ticket.coreboot.org) that is used for
|
||||||
|
coreboot and related code, such as libpayload, as well as for the project's
|
||||||
|
infrastructure.
|
||||||
|
|
||||||
|
It can be helpful to refer to issues we track there in commit messages:
|
||||||
|
|
||||||
|
Fixes: https://ticket.coreboot.org/issues/$id
|
@ -25,6 +25,8 @@ release = subprocess.check_output(('git', 'describe')).decode("utf-8")
|
|||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = release.split("-")[0]
|
version = release.split("-")[0]
|
||||||
|
|
||||||
|
extensions = ['sphinxcontrib.ditaa']
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
#
|
#
|
||||||
|
173
Documentation/contributing/documentation_ideas.md
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
# Documentation Ideas
|
||||||
|
|
||||||
|
This section collects ideas to improve the coreboot documentation and
|
||||||
|
should serve as a pool of ideas for people who want to improve the current
|
||||||
|
documentation status of coreboot.
|
||||||
|
|
||||||
|
The main purpose of this document is to gather documentation ideas for technical
|
||||||
|
writers of the seasons of docs. Nevertheless anyone who wants to help improving
|
||||||
|
the current documentation situation can take one of the projects.
|
||||||
|
|
||||||
|
Each entry should outline what would be done, the benefit it brings
|
||||||
|
to the project, the pre-requisites, both in knowledge and parts. They
|
||||||
|
should also list people interested in supporting people who want to work
|
||||||
|
on them.
|
||||||
|
|
||||||
|
## Restructure Existing Documentation
|
||||||
|
|
||||||
|
The goal is to improve the user experience and structure the documentation more
|
||||||
|
logically. The current situation makes it very hard for beginners, but also for
|
||||||
|
experienced developers to find anything in the coreboot documentation.
|
||||||
|
|
||||||
|
One possible approach to restructure the documentation is to split it up such
|
||||||
|
that we divide the group of users into:
|
||||||
|
|
||||||
|
* (End-)users
|
||||||
|
Most probably users which _just_ want to use coreboot as fast as possible. This
|
||||||
|
section should include guidelines on how to build coreboot, how to flash coreboot
|
||||||
|
and also which hardware is currently supported.
|
||||||
|
|
||||||
|
* Developers
|
||||||
|
This section should more focus on the developer side-of-view. This section would
|
||||||
|
include how to get started developing coreboot, explaining the basic concepts of
|
||||||
|
coreboot and also give guideance on how to proceed after the first steps.
|
||||||
|
|
||||||
|
* Knowledge area
|
||||||
|
This section is very tighlight coupled to the developer section and might be merged
|
||||||
|
into it. The _Knowledge area_ can give a technical deep dive on various drivers,
|
||||||
|
technologies, etc.
|
||||||
|
|
||||||
|
* Community area
|
||||||
|
This section gives some room for the community: Youtube channels, conferences,
|
||||||
|
meetups, forums, chat, etc.
|
||||||
|
|
||||||
|
A [first approach](https://review.coreboot.org/c/coreboot/+/40327) has already been made here and might be a basis for the work.
|
||||||
|
Most of the documentation is already there, but scattered around the documentation
|
||||||
|
folder.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* Understanding on how a different groups of users might use the documentation area
|
||||||
|
* Basic understanding of how coreboot works (Can be worked out _on-the-fly_)
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* christian.walter@9elements.com
|
||||||
|
* TBD
|
||||||
|
|
||||||
|
## Update Howto/Guides
|
||||||
|
|
||||||
|
An important part to involve new people in the project, either as developer or
|
||||||
|
as enduser, are guides and how-to's. There are already some guides which need
|
||||||
|
to be updated to work, and could also be extended to multiple platforms, like
|
||||||
|
Fedora or Arch-Linux. Also guidance for setting up coreboot with a Windows
|
||||||
|
environment would be helpful.
|
||||||
|
|
||||||
|
In addition, the vboot guidance needs an update/extensions, that the security
|
||||||
|
features within coreboot can be used by non-technical people.
|
||||||
|
|
||||||
|
For developers, how to debug coreboot and various debugging techniques need
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* Knowledge of virtual machines, how to install different OSs and set up the
|
||||||
|
toolchain on different operating systems
|
||||||
|
* Knowledge of debugging tools like gdb
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* christian.walter@9elements.com
|
||||||
|
* TBD
|
||||||
|
|
||||||
|
## How to Support a New Board
|
||||||
|
|
||||||
|
coreboot benefits from running on as many platforms as possible. Therefore we
|
||||||
|
want to encourage new developers on porting existing hardware to coreboot.
|
||||||
|
Guidance for those new developers need to be made such that they are able to
|
||||||
|
take the first steps supporting new mainboards, when the SoC support already
|
||||||
|
exists. There should be a 'how-to' guide for this. Also what are common problems
|
||||||
|
and how to solve those.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* Knowledge of how to add support for a new mainboard in coreboot
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* christian.walter@9elements.com
|
||||||
|
* TBD
|
||||||
|
|
||||||
|
## Payloads
|
||||||
|
|
||||||
|
The current documentation of the payloads is not very effective. There should be
|
||||||
|
more detailed documentation on the payloads that can be selected via the make
|
||||||
|
menuconfig within coreboot. Also the use-cases should be described in more
|
||||||
|
detail: When to use which payload? What are the benefits of using payload X over
|
||||||
|
Y in a specific use-case ?
|
||||||
|
|
||||||
|
In addition it should be made clear how additional functionality e.g. extend
|
||||||
|
LinuxBoot with more commands, can be achieved.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* Basic knowledge of the supported payloads like SeaBIOS, TinanoCore, LinuxBoot,
|
||||||
|
GRUB, Linux, ...
|
||||||
|
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* christian.walter@9elements.com
|
||||||
|
* TBD
|
||||||
|
|
||||||
|
|
||||||
|
## coreboot Util Documentation
|
||||||
|
|
||||||
|
coreboot inherits a variaty of utilities. The current documentation only
|
||||||
|
provides a "one-liner" as an explanation. The list of util should be updated
|
||||||
|
with a more detailed explanation where possible. Also more "in-depths"
|
||||||
|
explanations should be added with examples if possible.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* coreboot utilities
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* christian.walter@9elements.com
|
||||||
|
* TBD
|
||||||
|
|
||||||
|
|
||||||
|
## CBMEM Developer Guide
|
||||||
|
|
||||||
|
CBMEM is the API that provides memory buffers for the use at OS runtime. It's a
|
||||||
|
core component and thus should be documented. Dos, don'ts and pitfalls when
|
||||||
|
using CBMEM. This "in-depth" guide is clearly for developers.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* Deep understanding of coreboot's internals
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* TBD
|
||||||
|
* TBD
|
||||||
|
|
||||||
|
|
||||||
|
## CBFS Developer Guide
|
||||||
|
|
||||||
|
CBFS is the in-flash filesystem that is used by coreboot. It's a core component
|
||||||
|
and thus should be documented. Update the existing CBFS.txt that still shows
|
||||||
|
version 1 of the implementation. A [first approach](https://review.coreboot.org/c/coreboot/+/33663/2)
|
||||||
|
has been made here.
|
||||||
|
This "in-depth" guide is clearly for developers.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* Deep understanding of coreboot's internals
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* TBD
|
||||||
|
* TBD
|
||||||
|
|
||||||
|
|
||||||
|
## Region API Developer Guide
|
||||||
|
|
||||||
|
The region API is used by coreboot when dealing with memory mapped objects that
|
||||||
|
can be split into chunks. It's a core component and thus should be documented.
|
||||||
|
This "in-depth" guide is clearly for developers.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* Deep understanding of coreboot's internals
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* TBD
|
||||||
|
* TBD
|
||||||
|
|
@ -27,7 +27,15 @@ which is a bad experience when trying to build coreboot the first time.
|
|||||||
|
|
||||||
Provide packages/installers of our compiler toolchain for Linux distros,
|
Provide packages/installers of our compiler toolchain for Linux distros,
|
||||||
Windows, Mac OS. For Windows, this should also include the environment
|
Windows, Mac OS. For Windows, this should also include the environment
|
||||||
(shell, make, ...).
|
(shell, make, ...). A student doesn't have to cover _all_ platforms, but
|
||||||
|
pick a set of systems that match their interest and knowledge and lay
|
||||||
|
out a plan on how to do this.
|
||||||
|
|
||||||
|
The scripts to generate these packages should be usable on a Linux
|
||||||
|
host, as that's what we're using for our automated build testing system
|
||||||
|
that we could extend to provide current packages going forward. This
|
||||||
|
might include automating some virtualization system (eg. QEMU or CrosVM) for
|
||||||
|
non-Linux builds or Docker for different Linux distributions.
|
||||||
|
|
||||||
### Requirements
|
### Requirements
|
||||||
* coreboot knowledge: Should know how to build coreboot images and where
|
* coreboot knowledge: Should know how to build coreboot images and where
|
||||||
@ -58,27 +66,6 @@ across architectures.
|
|||||||
### Mentors
|
### Mentors
|
||||||
* Timothy Pearson <tpearson@raptorengineering.com>
|
* Timothy Pearson <tpearson@raptorengineering.com>
|
||||||
|
|
||||||
## Support QEMU AArch64 or MIPS
|
|
||||||
Having QEMU support for the architectures coreboot can boot helps with
|
|
||||||
some (limited) compatibility testing: While QEMU generally doesn't need
|
|
||||||
much hardware init, any CPU state changes in the boot flow will likely
|
|
||||||
be quite close to reality.
|
|
||||||
|
|
||||||
That could be used as a baseline to ensure that changes to architecture
|
|
||||||
code doesn't entirely break these architectures
|
|
||||||
|
|
||||||
### Requirements
|
|
||||||
* coreboot knowledge: Should know the general boot flow in coreboot.
|
|
||||||
* other knowledge: This will require knowing how the architecture
|
|
||||||
typically boots, to adapt the coreboot payload interface to be
|
|
||||||
appropriate and, for example, provide a device tree in the platform's
|
|
||||||
typical format.
|
|
||||||
* hardware requirements: since QEMU runs practically everywhere and
|
|
||||||
needs no recovery mechanism, these are suitable projects when no special
|
|
||||||
hardware is available.
|
|
||||||
|
|
||||||
### Mentors
|
|
||||||
|
|
||||||
## Add Kernel Address Sanitizer functionality to coreboot
|
## Add Kernel Address Sanitizer functionality to coreboot
|
||||||
The Kernel Address Sanitizer (KASAN) is a runtime dynamic memory error detector.
|
The Kernel Address Sanitizer (KASAN) is a runtime dynamic memory error detector.
|
||||||
The idea is to check every memory access (variables) for its validity
|
The idea is to check every memory access (variables) for its validity
|
||||||
@ -98,7 +85,7 @@ would help to ensure code quality and make the runtime code more robust.
|
|||||||
### Mentors
|
### Mentors
|
||||||
* Werner Zeh <werner.zeh@gmx.net>
|
* Werner Zeh <werner.zeh@gmx.net>
|
||||||
|
|
||||||
## Port payloads to ARM, AArch64, MIPS or RISC-V
|
## Port payloads to ARM, AArch64 or RISC-V
|
||||||
While we have a rather big set of payloads for x86 based platforms, all other
|
While we have a rather big set of payloads for x86 based platforms, all other
|
||||||
architectures are rather limited. Improve the situation by porting a payload
|
architectures are rather limited. Improve the situation by porting a payload
|
||||||
to one of the platforms, for example GRUB2, U-Boot (the UI part), Tianocore,
|
to one of the platforms, for example GRUB2, U-Boot (the UI part), Tianocore,
|
||||||
@ -145,3 +132,118 @@ their bug reports.
|
|||||||
|
|
||||||
### Mentors
|
### Mentors
|
||||||
* Patrick Georgi <patrick@georgi.software>
|
* Patrick Georgi <patrick@georgi.software>
|
||||||
|
|
||||||
|
## Extend Ghidra to support analysis of firmware images
|
||||||
|
[Ghidra](https://ghidra-sre.org) is a recently released cross-platform
|
||||||
|
disassembler and decompiler that is extensible through plugins. Make it
|
||||||
|
useful for firmware related work: Automatically parse formats (eg. by
|
||||||
|
integrating UEFITool, cbfstool, decompressors), automatically identify
|
||||||
|
16/32/64bit code on x86/amd64, etc.
|
||||||
|
|
||||||
|
This has been done in 2019 with [some neat
|
||||||
|
features](https://github.com/al3xtjames/ghidra-firmware-utils) being
|
||||||
|
developed, but it may be possible to expand support for all kinds of firmware
|
||||||
|
analyses.
|
||||||
|
|
||||||
|
## Learn hardware behavior from I/O and memory access logs
|
||||||
|
[SerialICE](https://www.serialice.com) is a tool to trace the behavior of
|
||||||
|
executable code like firmware images. One result of that is a long log file
|
||||||
|
containing the accesses to hardware resources.
|
||||||
|
|
||||||
|
It would be useful to have a tool that assists a developer-analyst in deriving
|
||||||
|
knowledge about hardware from such logs. This likely can't be entirely
|
||||||
|
automatic, but a tool that finds patterns and can propagate them across the
|
||||||
|
log (incrementially raising the log from plain I/O accesses to a high-level
|
||||||
|
description of driver behavior) would be of great use.
|
||||||
|
|
||||||
|
This is a research-heavy project.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* Driver knowledge: Somebody working on this should be familiar with
|
||||||
|
how hardware works (eg. MMIO based register access, index/data port
|
||||||
|
accesses) and how to read data sheets.
|
||||||
|
* Machine Learning: ML techniques may be useful to find structure in traces.
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* Ron Minnich <rminnich@google.com>
|
||||||
|
|
||||||
|
## Libpayload based memtest payload
|
||||||
|
[Memtest86+](https://www.memtest.org/) has some limitations: first and
|
||||||
|
foremost it only works on x86, while it can print to serial console the
|
||||||
|
GUI only works in legacy VGA mode.
|
||||||
|
|
||||||
|
This project would involve porting the memtest suite to libpayload and
|
||||||
|
build a payload around it.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* coreboot knowledge: Should know how to build coreboot images and
|
||||||
|
include payloads.
|
||||||
|
* other knowledge: Knowledge on how dram works is a plus.
|
||||||
|
* hardware requirements: Initial work can happen on qemu targets,
|
||||||
|
being able to test on coreboot supported hardware is a plus.
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* TODO
|
||||||
|
|
||||||
|
## Fix POST code handling
|
||||||
|
coreboot supports writing POST codes to I/O port 80.
|
||||||
|
There are various Kconfigs that deal with POST codes, which don't have
|
||||||
|
effect on most platforms.
|
||||||
|
The code to send POST codes is scattered in C and Assembly, some use
|
||||||
|
functions, some use macros and others simply use the `outb` instruction.
|
||||||
|
The POST codes are duplicated between stages and aren't documented properly.
|
||||||
|
|
||||||
|
|
||||||
|
Tasks:
|
||||||
|
* Guard Kconfigs with a *depends on* to only show on supported platforms
|
||||||
|
* Remove duplicated Kconfigs
|
||||||
|
* Replace `outb(0x80, ...)` with calls to `post_code(...)`
|
||||||
|
* Update Documentation/POSTCODES
|
||||||
|
* Use defines from console/post_codes.h where possible
|
||||||
|
* Drop duplicated POST codes
|
||||||
|
* Make use of all possible 255 values
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* knowledge in the coreboot build system and the concept of stages
|
||||||
|
* other knowledge: Little experience with C and x86 Assembly
|
||||||
|
* hardware requirements: Nothing special
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* Patrick Rudolph <patrick.rudolph@9elements.com>
|
||||||
|
* Christian Walter <christian.walter@9elements.com>
|
||||||
|
|
||||||
|
## Board status replacement
|
||||||
|
The [Board status page](https://coreboot.org/status/board-status.html) allows
|
||||||
|
to see last working commit of a board. The page is generated by a cron job
|
||||||
|
that runs on a huge git repository.
|
||||||
|
|
||||||
|
Build an open source replacement written in Golang using existing tools
|
||||||
|
and libraries, consisting of a backend, a frontend and client side
|
||||||
|
scripts. The backend should connect to an SQL database with can be
|
||||||
|
controlled using a RESTful API. The RESTful API should have basic authentication
|
||||||
|
for managment tasks and new board status uploads.
|
||||||
|
|
||||||
|
At least one older test result should be keept in the database.
|
||||||
|
|
||||||
|
The frontend should use established UI libraries or frameworks (for example
|
||||||
|
Angular) to display the current board status, that is if it's working or not
|
||||||
|
and some details provided with the last test. If a board isn't working the last
|
||||||
|
working commit (if any) should be shown in addition to the broken one.
|
||||||
|
|
||||||
|
Provide a script/tool that allows to:
|
||||||
|
1. Push mainboard details from coreboot master CI
|
||||||
|
2. Push mainboard test results from authenticated users containing
|
||||||
|
* working
|
||||||
|
* commit hash
|
||||||
|
* bootlog (if any)
|
||||||
|
* dmesg (if it's booting)
|
||||||
|
* timestamps (if it's booting)
|
||||||
|
* coreboot config
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* coreboot knowledge: Non-technical, needed to perform requirements analysis
|
||||||
|
* software knowledge: Golang, SQL for the backend, JS for the frontend
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* Patrick Rudolph <patrick.rudolph@9elements.com>
|
||||||
|
* Christian Walter <christian.walter@9elements.com>
|
||||||
|
@ -58,16 +58,6 @@ fixes not found in the stock firmware, and offer much broader OS compatibility
|
|||||||
microcode, as well as firmware updates for the device's embedded controller
|
microcode, as well as firmware updates for the device's embedded controller
|
||||||
(EC). This firmware "takes the training wheels off" your ChromeOS device :)
|
(EC). This firmware "takes the training wheels off" your ChromeOS device :)
|
||||||
|
|
||||||
### John Lewis
|
|
||||||
|
|
||||||
[John Lewis](https://johnlewis.ie/custom-chromebook-firmware) also provides
|
|
||||||
replacement firmware for ChromeOS devices, for the express purpose of
|
|
||||||
running Linux on Chromebooks. John Lewis' firmware supports a much smaller
|
|
||||||
set of devices, and uses SeaBIOS as the payload to support Legacy BIOS booting.
|
|
||||||
His firmware images are significantly older, and not actively maintained or
|
|
||||||
supported, but worth a look if you need Legacy Boot support and is not
|
|
||||||
available via Mr Chromebox's firmware.
|
|
||||||
|
|
||||||
### Heads
|
### Heads
|
||||||
|
|
||||||
[Heads](http://osresearch.net) is an open source custom firmware and OS
|
[Heads](http://osresearch.net) is an open source custom firmware and OS
|
||||||
|
8
Documentation/drivers/index.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Platform independent drivers documentation
|
||||||
|
|
||||||
|
The drivers can be found in `src/drivers`. They are intended for onboard
|
||||||
|
and plugin devices, significantly reducing integration complexity and
|
||||||
|
they allow to easily reuse existing code accross platforms.
|
||||||
|
|
||||||
|
* [IPMI KCS](ipmi_kcs.md)
|
||||||
|
* [SMMSTORE](smmstore.md)
|
47
Documentation/drivers/ipmi_kcs.md
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# IPMI KCS driver
|
||||||
|
|
||||||
|
The driver can be found in `src/drivers/ipmi/`. It works with BMC that provide
|
||||||
|
a KCS I/O interface as specified in the [IPMI] standard.
|
||||||
|
|
||||||
|
The driver detects the IPMI version, reserves the I/O space in coreboot's
|
||||||
|
resource allocator and writes the required ACPI and SMBIOS tables.
|
||||||
|
|
||||||
|
## For developers
|
||||||
|
|
||||||
|
To use the driver, select the `IPMI_KCS` Kconfig and add the following PNP
|
||||||
|
device under the LPC bridge device (in example for the KCS at 0xca2):
|
||||||
|
|
||||||
|
```
|
||||||
|
chip drivers/ipmi
|
||||||
|
device pnp ca2.0 on end # IPMI KCS
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note:** The I/O base address needs to be aligned to 2.
|
||||||
|
|
||||||
|
The following registers can be set:
|
||||||
|
|
||||||
|
* `have_nv_storage`
|
||||||
|
* Boolean
|
||||||
|
* If true `nv_storage_device_address` will be added to SMBIOS type 38.
|
||||||
|
* `nv_storage_device_address`
|
||||||
|
* Integer
|
||||||
|
* The NV storage address as defined in SMBIOS spec for type 38.
|
||||||
|
* `bmc_i2c_address`
|
||||||
|
* Integer
|
||||||
|
* The i2c address of the BMC. zero if not applicable.
|
||||||
|
* `have_apic`
|
||||||
|
* Boolean
|
||||||
|
* If true the `apic_interrupt` will be added to SPMI table.
|
||||||
|
* `apic_interrupt`
|
||||||
|
* Integer
|
||||||
|
* The APIC interrupt used to notify about a change on the KCS.
|
||||||
|
* `have_gpe`
|
||||||
|
* Boolean
|
||||||
|
* If true the `gpe_interrupt` will be added to SPMI table.
|
||||||
|
* `gpe_interrupt`
|
||||||
|
* Integer
|
||||||
|
* The bit in GPE (SCI) used to notify about a change on the KCS.
|
||||||
|
|
||||||
|
|
||||||
|
[IPMI]: https://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/ipmi-second-gen-interface-spec-v2-rev1-1.pdf
|
123
Documentation/drivers/smmstore.md
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
# SMM based flash storage driver
|
||||||
|
|
||||||
|
This documents the API exposed by the x86 system management based
|
||||||
|
storage driver.
|
||||||
|
|
||||||
|
## SMMSTORE
|
||||||
|
|
||||||
|
SMMSTORE is a SMM mediated driver to read from, write to and erase a
|
||||||
|
predefined region in flash. It can be enabled by setting
|
||||||
|
`CONFIG_SMMSTORE=y` in menuconfig.
|
||||||
|
|
||||||
|
This can be used by the OS or the payload to implement persistent
|
||||||
|
storage to hold for instance configuration data, without needing
|
||||||
|
to implement a (platform specific) storage driver in the payload
|
||||||
|
itself.
|
||||||
|
|
||||||
|
The API provides append-only semantics for key/value pairs.
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
### Storage region
|
||||||
|
|
||||||
|
By default SMMSTORE will operate on a separate FMAP region called
|
||||||
|
`SMMSTORE`. The default generated FMAP will include such a region.
|
||||||
|
On systems with a locked FMAP, e.g. in an existing vboot setup
|
||||||
|
with a locked RO region, the option exists to add a cbfsfile
|
||||||
|
called `smm_store` in the `RW_LEGACY` (if CHROMEOS) or in the
|
||||||
|
`COREBOOT` FMAP regions. It is recommended for new builds using
|
||||||
|
a handcrafted FMD that intend to make use of SMMSTORE to include a
|
||||||
|
sufficiently large `SMMSTORE` FMAP region. It is recommended to
|
||||||
|
align the `SMMSTORE` region to 64KiB for the largest flash erase
|
||||||
|
op compatibility.
|
||||||
|
|
||||||
|
When a default generated FMAP is used the size of the FMAP region
|
||||||
|
is equal to `CONFIG_SMMSTORE_SIZE`. UEFI payloads expect at least
|
||||||
|
64KiB. Given that the current implementation lacks a way to rewrite
|
||||||
|
key-value pairs at least a multiple of this is recommended.
|
||||||
|
|
||||||
|
### generating the SMI
|
||||||
|
|
||||||
|
SMMSTORE is called via an SMI, which is generated via a write to the
|
||||||
|
IO port defined in the smi_cmd entry of the FADT ACPI table. `%al`
|
||||||
|
contains `APM_CNT_SMMSTORE=0xed` and is written to the smi_cmd IO
|
||||||
|
port. `%ah` contains the SMMSTORE command. `%ebx` contains the
|
||||||
|
parameter buffer to the SMMSTORE command.
|
||||||
|
|
||||||
|
### Return values
|
||||||
|
|
||||||
|
If a command succeeds, SMMSTORE will return with
|
||||||
|
`SMMSTORE_RET_SUCCESS=0` on `%eax`. On failure SMMSTORE will return
|
||||||
|
`SMMSTORE_RET_FAILURE=1`. For unsupported SMMSTORE commands
|
||||||
|
`SMMSTORE_REG_UNSUPPORTED=2` is returned.
|
||||||
|
|
||||||
|
**NOTE1**: The caller **must** check the return value and should make
|
||||||
|
no assumption on the returned data if `%eax` does not contain
|
||||||
|
`SMMSTORE_RET_SUCCESS`.
|
||||||
|
|
||||||
|
**NOTE2**: If the SMI returns without changing `%ax` assume that the
|
||||||
|
SMMSTORE feature is not installed.
|
||||||
|
|
||||||
|
### Calling arguments
|
||||||
|
|
||||||
|
SMMSTORE supports 3 subcommands that are passed via `%ah`, the additional
|
||||||
|
calling arguments are passed via `%ebx`.
|
||||||
|
|
||||||
|
**NOTE**: The size of the struct entries are in the native word size of
|
||||||
|
smihandler. This means 32 bits in almost all cases.
|
||||||
|
|
||||||
|
|
||||||
|
#### - SMMSTORE_CMD_CLEAR = 1
|
||||||
|
|
||||||
|
This clears the `SMMSTORE` storage region. The argument in `%ebx` is
|
||||||
|
unused.
|
||||||
|
|
||||||
|
#### - SMMSTORE_CMD_READ = 2
|
||||||
|
|
||||||
|
The additional parameter buffer `%ebx` contains a pointer to
|
||||||
|
the following struct:
|
||||||
|
|
||||||
|
```C
|
||||||
|
struct smmstore_params_read {
|
||||||
|
void *buf;
|
||||||
|
ssize_t bufsize;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
INPUT:
|
||||||
|
- `buf`: is a pointer to where the data needs to be read
|
||||||
|
- `bufsize`: is the size of the buffer
|
||||||
|
|
||||||
|
OUTPUT:
|
||||||
|
- `buf`
|
||||||
|
- `bufsize`: returns the amount of data that has actually been read.
|
||||||
|
|
||||||
|
#### - SMMSTORE_CMD_APPEND = 3
|
||||||
|
|
||||||
|
SMMSTORE takes a key-value approach to appending data. key-value pairs
|
||||||
|
are never updated, they are always appended. It is up to the caller to
|
||||||
|
walk through the key-value pairs after reading SMMSTORE to find the
|
||||||
|
latest one.
|
||||||
|
|
||||||
|
The additional parameter buffer `%ebx` contains a pointer to
|
||||||
|
the following struct:
|
||||||
|
|
||||||
|
```C
|
||||||
|
struct smmstore_params_append {
|
||||||
|
void *key;
|
||||||
|
size_t keysize;
|
||||||
|
void *val;
|
||||||
|
size_t valsize;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
INPUT:
|
||||||
|
- `key`: pointer to the key data
|
||||||
|
- `keysize`: size of the key data
|
||||||
|
- `val`: pointer to the value data
|
||||||
|
- `valsize`: size of the value data
|
||||||
|
|
||||||
|
## External links
|
||||||
|
|
||||||
|
* [A Tour Beyond BIOS Implementing UEFI Authenticated Variables in SMM with EDKI](https://software.intel.com/sites/default/files/managed/cf/ea/a_tour_beyond_bios_implementing_uefi_authenticated_variables_in_smm_with_edkii.pdf)
|
||||||
|
Note, this differs significantly from coreboot's implementation.
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
## Using flashrom
|
## Using flashrom
|
||||||
This method does only work on Linux, if it isn't locked down.
|
This method does only work on Linux, if it isn't locked down.
|
||||||
You may also need to boot with 'iomem=relaxed' in the kernel command
|
You may also need to boot with `iomem=relaxed` in the kernel command
|
||||||
line if CONFIG_IO_STRICT_DEVMEM is set.
|
line if CONFIG_IO_STRICT_DEVMEM is set.
|
||||||
|
|
||||||
|
|
||||||
|
105
Documentation/getting_started/architecture.md
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
# coreboot architecture
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
![][architecture]
|
||||||
|
|
||||||
|
[architecture]: comparision_coreboot_uefi.svg
|
||||||
|
|
||||||
|
## Stages
|
||||||
|
coreboot consists of multiple stages that are compiled as separate binaries and
|
||||||
|
are inserted into the CBFS with custom compression. The bootblock usually doesn't
|
||||||
|
have compression while the ramstage and payload are compressed with LZMA.
|
||||||
|
|
||||||
|
Each stage loads the next stage a given address (possibly decompressing it).
|
||||||
|
|
||||||
|
Some stages are relocatable and can be placed anywhere in DRAM. Those stages are
|
||||||
|
usually cached in CBMEM for faster loading times on ACPI S3 resume.
|
||||||
|
|
||||||
|
Supported stage compressions:
|
||||||
|
* none
|
||||||
|
* LZ4
|
||||||
|
* LZMA
|
||||||
|
|
||||||
|
## bootblock
|
||||||
|
The bootblock is the first stage executed after CPU reset. It is written in
|
||||||
|
assembly language and its main task is to set up everything for a C-environment:
|
||||||
|
|
||||||
|
Common tasks:
|
||||||
|
|
||||||
|
* Cache-As-RAM for heap and stack
|
||||||
|
* Set stack pointer
|
||||||
|
* Clear memory for BSS
|
||||||
|
* Decompress and load the next stage
|
||||||
|
|
||||||
|
On x86 platforms that includes:
|
||||||
|
|
||||||
|
* Microcode updates
|
||||||
|
* Timer init
|
||||||
|
* Switching from 16-bit real-mode to 32-bit protected mode
|
||||||
|
|
||||||
|
The bootblock loads the romstage or the verstage if verified boot is enabled.
|
||||||
|
|
||||||
|
### Cache-As-Ram
|
||||||
|
The *Cache-As-Ram*, also called Non-Eviction mode, or *CAR* allows to use the
|
||||||
|
CPU cache like regular SRAM. This is particullary usefull for high level
|
||||||
|
languages like `C`, which need RAM for heap and stack.
|
||||||
|
|
||||||
|
The CAR needs to be activated using vendor specific CPU instructions.
|
||||||
|
|
||||||
|
The following stages run when Cache-As-Ram is active:
|
||||||
|
* bootblock
|
||||||
|
* romstage
|
||||||
|
* verstage
|
||||||
|
* postcar
|
||||||
|
|
||||||
|
## verstage
|
||||||
|
The verstage is where the root-of-trust starts. It's assumed that
|
||||||
|
it cannot be overwritten in-field (together with the public key) and
|
||||||
|
it starts at the very beginning of the boot process.
|
||||||
|
The verstage installs a hook to verify a file before it's loaded from
|
||||||
|
CBFS or a partition before it's accessed.
|
||||||
|
|
||||||
|
The verified boot mechanism allows trusted in-field firmware updates
|
||||||
|
combined with a fail-safe recovery mode.
|
||||||
|
|
||||||
|
## romstage
|
||||||
|
The romstage initializes the DRAM and prepares everything for device init.
|
||||||
|
|
||||||
|
Common tasks:
|
||||||
|
|
||||||
|
* Early device init
|
||||||
|
* DRAM init
|
||||||
|
|
||||||
|
## postcar
|
||||||
|
To leave the CAR setup and run code from regular DRAM the postcar-stage tears
|
||||||
|
down CAR and loads the ramstage. Compared to other stages it's minimal in size.
|
||||||
|
|
||||||
|
## ramstage
|
||||||
|
|
||||||
|
The ramstage does the main device init:
|
||||||
|
|
||||||
|
* PCI device init
|
||||||
|
* On-chip device init
|
||||||
|
* TPM init (if not done by verstage)
|
||||||
|
* Graphics init (optional)
|
||||||
|
* CPU init (like set up SMM)
|
||||||
|
|
||||||
|
After initialization tables are written to inform the payload or operating system
|
||||||
|
about the current hardware existance and state. That includes:
|
||||||
|
|
||||||
|
* ACPI tables (x86 specific)
|
||||||
|
* SMBIOS tables (x86 specific)
|
||||||
|
* coreboot tables
|
||||||
|
* devicetree updates (ARM specific)
|
||||||
|
|
||||||
|
It also does hardware and firmware lockdown:
|
||||||
|
* Write-protection of boot media
|
||||||
|
* Lock security related registers
|
||||||
|
* Lock SMM mode (x86 specific)
|
||||||
|
|
||||||
|
## payload
|
||||||
|
The payload is the software that is run after coreboot is done. It resides in
|
||||||
|
the CBFS and there's no possibility to choose it at runtime.
|
||||||
|
|
||||||
|
For more details have a look at [payloads](../payloads.md).
|
||||||
|
|
BIN
Documentation/getting_started/comparision_coreboot_uefi.dia
Normal file
176
Documentation/getting_started/comparision_coreboot_uefi.svg
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
|
||||||
|
<svg width="55cm" height="28cm" viewBox="62 37 1088 559" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #ffffff" x="63.296" y="74.0258" width="1085.8" height="520.893"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ffffff" x="63.296" y="74.0258" width="1085.8" height="520.893"/>
|
||||||
|
</g>
|
||||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 4; stroke: #000000" x1="242.613" y1="107.463" x2="242.698" y2="492.591"/>
|
||||||
|
<g>
|
||||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 4; stroke: #000000" x1="234.964" y1="477.053" x2="1135.15" y2="478.109"/>
|
||||||
|
<polyline style="fill: none; fill-opacity:0; stroke-width: 4; stroke: #000000" points="1124.61,485.597 1139.62,478.114 1124.63,470.597 "/>
|
||||||
|
</g>
|
||||||
|
<text font-size="22.5778" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="482.342" y="58.1574">
|
||||||
|
<tspan x="482.342" y="58.1574">Platform Initialization Firmware Phases</tspan>
|
||||||
|
</text>
|
||||||
|
<text font-size="16.9333" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="98.4514" y="435.714">
|
||||||
|
<tspan x="98.4514" y="435.714">EDK II - stages</tspan>
|
||||||
|
</text>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="1073.49" y="499.998">
|
||||||
|
<tspan x="1073.49" y="499.998">time</tspan>
|
||||||
|
</text>
|
||||||
|
<text font-size="16.9333" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="82.8266" y="330.476">
|
||||||
|
<tspan x="82.8266" y="330.476">coreboot - stages</tspan>
|
||||||
|
</text>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #faff94" x="250.501" y="404.247" width="130.432" height="69.1471"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="250.501" y="404.247" width="130.432" height="69.1471"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="315.718" y="434.72">
|
||||||
|
<tspan x="315.718" y="434.72">Security</tspan>
|
||||||
|
<tspan x="315.718" y="450.72">(SEC)</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #faff94" x="383.033" y="404.781" width="282.702" height="69"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="383.033" y="404.781" width="282.702" height="69"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="524.384" y="427.181">
|
||||||
|
<tspan x="524.384" y="427.181">Pre-EFI</tspan>
|
||||||
|
<tspan x="524.384" y="443.181">Initialization Environment</tspan>
|
||||||
|
<tspan x="524.384" y="459.181">(PEI)</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #faff94" x="668.027" y="405.317" width="269.244" height="69"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="668.027" y="405.317" width="269.244" height="69"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="802.649" y="427.717">
|
||||||
|
<tspan x="802.649" y="427.717">Driver Execution</tspan>
|
||||||
|
<tspan x="802.649" y="443.717">Environment</tspan>
|
||||||
|
<tspan x="802.649" y="459.717">(DXE)</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #faff94" x="939.541" y="405.727" width="178.75" height="69"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="939.541" y="405.727" width="178.75" height="69"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="1028.92" y="436.127">
|
||||||
|
<tspan x="1028.92" y="436.127">Boot Device Selection</tspan>
|
||||||
|
<tspan x="1028.92" y="452.127">(BDS)</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #90c9ff" x="254.747" y="291.309" width="125.314" height="69.1471"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="254.747" y="291.309" width="125.314" height="69.1471"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="317.404" y="329.782">
|
||||||
|
<tspan x="317.404" y="329.782">bootblock</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #90c9ff" x="476.354" y="290.735" width="89.65" height="69.1471"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="476.354" y="290.735" width="89.65" height="69.1471"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="521.179" y="329.209">
|
||||||
|
<tspan x="521.179" y="329.209">romstage</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #90c9ff" x="382.317" y="291.011" width="92.1" height="69.1471"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="382.317" y="291.011" width="92.1" height="69.1471"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="428.367" y="321.485">
|
||||||
|
<tspan x="428.367" y="321.485">verstage</tspan>
|
||||||
|
<tspan x="428.367" y="337.485">(optional)</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #90c9ff" x="567.853" y="290.99" width="98.5152" height="69.1471"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="567.853" y="290.99" width="98.5152" height="69.1471"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="617.11" y="321.464">
|
||||||
|
<tspan x="617.11" y="321.464">postcar</tspan>
|
||||||
|
<tspan x="617.11" y="337.464">(x86 only)</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #90c9ff" x="667.529" y="281.527" width="168.747" height="37"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="667.529" y="281.527" width="168.747" height="37"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="751.903" y="303.927">
|
||||||
|
<tspan x="751.903" y="303.927">ramstage</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #90c9ff" x="667.84" y="321.487" width="167.519" height="53"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="667.84" y="321.487" width="167.519" height="53"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="751.6" y="343.887">
|
||||||
|
<tspan x="751.6" y="343.887">SMM</tspan>
|
||||||
|
<tspan x="751.6" y="359.887">(x86 only)</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #90c9ff" x="941.841" y="283.151" width="171.98" height="69.1471"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="941.841" y="283.151" width="171.98" height="69.1471"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="1027.83" y="321.624">
|
||||||
|
<tspan x="1027.83" y="321.624">payload</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #d8e5e5" x="253.112" y="209.178" width="82.7" height="27"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="253.112" y="209.178" width="82.7" height="27"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="294.462" y="226.578">
|
||||||
|
<tspan x="294.462" y="226.578">Assembly</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #00c800" x="318.155" y="129.267" width="283.43" height="27"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="318.155" y="129.267" width="283.43" height="27"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="459.87" y="146.667">
|
||||||
|
<tspan x="459.87" y="146.667">Cache-As-RAM</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #ff8484" x="506.676" y="159.67" width="599.421" height="27"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="506.676" y="159.67" width="599.421" height="27"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="806.387" y="177.07">
|
||||||
|
<tspan x="806.387" y="177.07">DRAM</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke-dasharray: 4; stroke: #000000" x1="175.046" y1="392.926" x2="1113.82" y2="391.893"/>
|
||||||
|
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="387.045" y="241.637">
|
||||||
|
<tspan x="387.045" y="241.637"></tspan>
|
||||||
|
</text>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #ffffff" x="337.438" y="209.383" width="618.831" height="27"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="337.438" y="209.383" width="618.831" height="27"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="646.853" y="226.783">
|
||||||
|
<tspan x="646.853" y="226.783">C</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #f6c7c7" x="667.35" y="238.912" width="170.3" height="27"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="667.35" y="238.912" width="170.3" height="27"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="752.5" y="256.312">
|
||||||
|
<tspan x="752.5" y="256.312">ADA SPARK (x86 only)</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<text font-size="16.9333" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="84.2481" y="233.28">
|
||||||
|
<tspan x="84.2481" y="233.28">coreboot</tspan>
|
||||||
|
<tspan x="84.2481" y="254.446">source languages</tspan>
|
||||||
|
</text>
|
||||||
|
<text font-size="16.9333" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="86.5008" y="153.786">
|
||||||
|
<tspan x="86.5008" y="153.786">code/heap</tspan>
|
||||||
|
<tspan x="86.5008" y="174.953">memory location </tspan>
|
||||||
|
</text>
|
||||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke-dasharray: 4; stroke: #000000" x1="175.483" y1="273.35" x2="1109.07" y2="273.582"/>
|
||||||
|
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke-dasharray: 4; stroke: #000000" x1="176.24" y1="192.463" x2="1109.66" y2="192.132"/>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #90c9ff" x="838.583" y="281.963" width="100.3" height="53"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="838.583" y="281.963" width="100.3" height="53"/>
|
||||||
|
<text font-size="12.8" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:700" x="888.733" y="304.363">
|
||||||
|
<tspan x="888.733" y="304.363">BL31</tspan>
|
||||||
|
<tspan x="888.733" y="320.363">(ARM only)</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<text font-size="12.7998" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="209.772" y="508.772">
|
||||||
|
<tspan x="209.772" y="508.772">Power on</tspan>
|
||||||
|
</text>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #ffffff" x="941.939" y="210.26" width="22.4641" height="25.1384"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #ffffff" x="941.939" y="210.26" width="22.4641" height="25.1384"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" d="M 955.029 209.941 C 967.678,210.1 946.349,230.772 955.598,237.021"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 12 KiB |
@ -46,11 +46,11 @@ clarification, see the Developer's Certificate of Origin in the coreboot
|
|||||||
* Let non-trivial patches sit in a review state for at least 24 hours
|
* Let non-trivial patches sit in a review state for at least 24 hours
|
||||||
before submission. Remember that there are coreboot developers in timezones
|
before submission. Remember that there are coreboot developers in timezones
|
||||||
all over the world, and everyone should have a chance to contribute.
|
all over the world, and everyone should have a chance to contribute.
|
||||||
Trivial patches would be things like whitespace changes or spelling fixes.
|
Trivial patches would be things like whitespace changes or spelling fixes,
|
||||||
In general, small changes that don’t impact the final binary output. The
|
in general those that don’t impact the final binary output. The
|
||||||
24-hour period would start at submission, and would be restarted at any
|
24-hour period would start at submission, and would be restarted at any
|
||||||
update which significantly changes any part of the patch. Patches can be
|
update which significantly changes any part of the patch. Patches can be
|
||||||
'Fast-tracked' and submitted in under this 24 hour with the agreement of at
|
'Fast-tracked' and submitted in under 24 hours with the agreement of at
|
||||||
least 3 +2 votes.
|
least 3 +2 votes.
|
||||||
|
|
||||||
* Do not +2 patches that you authored or own, even for something as trivial
|
* Do not +2 patches that you authored or own, even for something as trivial
|
||||||
|
136
Documentation/getting_started/gpio.md
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
# Configuring a mainboard's GPIOs in coreboot
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
Every mainboard needs to appropriately configure its General Purpose Inputs /
|
||||||
|
Outputs (GPIOs). There are many facets of this issue, including which boot
|
||||||
|
stage a GPIO might need to be configured.
|
||||||
|
|
||||||
|
## Boot stages
|
||||||
|
|
||||||
|
Typically, coreboot does most of its non-memory related initialization work in
|
||||||
|
ramstage, when DRAM is available for use. Hence, the bulk of a mainboard's GPIOs
|
||||||
|
are configured in this stage. However, some boards might need a few GPIOs
|
||||||
|
configured before that; think of memory strapping pins which indicate what kind
|
||||||
|
of DRAM is installed. These pins might need to be read before initializing the
|
||||||
|
memory, so these GPIOs are then typically configured in bootblock or romstage.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Most mainboards will have a ``gpio.c`` file in their mainboard directory. This
|
||||||
|
file typically contains tables which describe the configuration of the GPIO
|
||||||
|
registers. Since these registers could be different on a per-SoC or per
|
||||||
|
SoC-family basis, you may need to consult the datasheet for your SoC to find out
|
||||||
|
how to appropriately set these registers. In addition, some mainboards are
|
||||||
|
based on a baseboard/variant model, where several variant mainboards may share a
|
||||||
|
lot of their circuitry and ICs and the commonality between the boards is
|
||||||
|
collected into a virtual ``baseboard.`` In that case, the GPIOs which are shared
|
||||||
|
between multiple boards are placed in the baseboard's ``gpio.c`` file, while the
|
||||||
|
ones that are board-specific go into each variant's ``gpio.c`` file.
|
||||||
|
|
||||||
|
## Intel SoCs
|
||||||
|
|
||||||
|
Many newer Intel SoCs share a common IP block for GPIOs, and that commonality
|
||||||
|
has been taken advantage of in coreboot, which has a large set of macros that
|
||||||
|
can be used to describe the configuration of each GPIO pad. This file lives in
|
||||||
|
``src/soc/intel/common/block/include/intelblocks/gpio_defs.h``.
|
||||||
|
|
||||||
|
### Older Intel SoCs
|
||||||
|
|
||||||
|
Baytrail and Braswell, for example, simply expect the mainboard to supply a
|
||||||
|
callback, `mainboard_get_gpios` which returns an array of `struct soc_gpio`
|
||||||
|
objects, defining the configuration of each pin.
|
||||||
|
|
||||||
|
### AMD SoCs
|
||||||
|
|
||||||
|
Some AMD SoCs use a list of `struct soc_amd_gpio` objects to define the
|
||||||
|
register values configuring each pin, similar to Intel.
|
||||||
|
|
||||||
|
### Register details
|
||||||
|
|
||||||
|
GPIO configuration registers typically control properties such as:
|
||||||
|
1. Input / Output
|
||||||
|
2. Pullups / Pulldowns
|
||||||
|
3. Termination
|
||||||
|
4. Tx / Rx Disable
|
||||||
|
5. Which reset signal to use
|
||||||
|
6. Native Function / IO
|
||||||
|
7. Interrupts
|
||||||
|
* IRQ routing (e.g. on x86, APIC, SCI, SMI)
|
||||||
|
* Edge or Level Triggered
|
||||||
|
* Active High or Active Low
|
||||||
|
8. Debouncing
|
||||||
|
|
||||||
|
## Configuring GPIOs for pre-ramstage
|
||||||
|
|
||||||
|
coreboot provides for several SoC-specific and mainboard-specific callbacks at
|
||||||
|
specific points in time, such as bootblock-early, bootblock, romstage entry,
|
||||||
|
pre-silicon init, pre-RAM init, or post-RAM init. The GPIOs that are
|
||||||
|
configured in either bootblock or romstage, depending on when they are needed,
|
||||||
|
are denoted the "early" GPIOs. Some mainboard will use
|
||||||
|
``bootblock_mainboard_init()`` to configure their early GPIOs, and this is
|
||||||
|
probably a good place to start. Many mainboards will declare their GPIO
|
||||||
|
configuration as structs, i.e. (Intel),
|
||||||
|
|
||||||
|
```C
|
||||||
|
struct pad_config {
|
||||||
|
/* offset of pad within community */
|
||||||
|
int pad;
|
||||||
|
/* Pad config data corresponding to DW0, DW1,.... */
|
||||||
|
uint32_t pad_config[GPIO_NUM_PAD_CFG_REGS];
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
and will usually place these in an array, one for each pad to be configured.
|
||||||
|
Mainboards using Intel SoCs can use a library which combines common
|
||||||
|
configurations together into a set of macros, e.g.,
|
||||||
|
|
||||||
|
```C
|
||||||
|
/* Native function configuration */
|
||||||
|
#define PAD_CFG_NF(pad, pull, rst, func)
|
||||||
|
/*
|
||||||
|
* Set native function with RX Level/Edge configuration and disable
|
||||||
|
* input/output buffer if necessary
|
||||||
|
*/
|
||||||
|
#define PAD_CFG_NF_BUF_TRIG(pad, pull, rst, func, bufdis, trig)
|
||||||
|
/* General purpose output, no pullup/down. */
|
||||||
|
#define PAD_CFG_GPO(pad, val, rst)
|
||||||
|
/* General purpose output, with termination specified */
|
||||||
|
#define PAD_CFG_TERM_GPO(pad, val, pull, rst)
|
||||||
|
/* General purpose output, no pullup/down. */
|
||||||
|
#define PAD_CFG_GPO_GPIO_DRIVER(pad, val, rst, pull)
|
||||||
|
/* General purpose input */
|
||||||
|
#define PAD_CFG_GPI(pad, pull, rst)
|
||||||
|
```
|
||||||
|
etc.
|
||||||
|
|
||||||
|
## Configuring GPIOs for ramstage and beyond...
|
||||||
|
|
||||||
|
In ramstage, most mainboards will configure the rest of their GPIOs for the
|
||||||
|
function they will be performing while the device is active. The goal is the
|
||||||
|
same as above in bootblock; another ``static const`` array is created, and the
|
||||||
|
rest of the GPIO registers are programmed.
|
||||||
|
|
||||||
|
In the baseboard/variant model described above, the baseboard will provide the
|
||||||
|
configuration for the GPIOs which are configured identically between variants,
|
||||||
|
and will provide a mechanism for a variant to override the baseboard's
|
||||||
|
configuration. This is usually done via two tables: the baseboard table and the
|
||||||
|
variant's override table.
|
||||||
|
|
||||||
|
This configuration is often hooked into the mainboard's `enable_dev` callback,
|
||||||
|
defined in its `struct chip_operations`.
|
||||||
|
|
||||||
|
## Potential issues (gotchas!)
|
||||||
|
|
||||||
|
There are a couple of configurations that you need to especially careful about,
|
||||||
|
as they can have a large impact on your mainboard.
|
||||||
|
|
||||||
|
The first is configuring a pin as an output, when it was designed to be an
|
||||||
|
input. There is a real risk in this case of short-circuiting a component which
|
||||||
|
could cause catastrophic failures, up to and including your mainboard!
|
||||||
|
|
||||||
|
The other configuration option to watch out for deals with unconnected GPIOs.
|
||||||
|
If no pullup or pulldown is declared with these, they may end up "floating",
|
||||||
|
i.e., not at logical high or logical low. This can cause problems such as
|
||||||
|
unwanted power consumption or not reading the pin correctly, if it was intended
|
||||||
|
to be strapped.
|
@ -1,8 +1,10 @@
|
|||||||
# Getting Started
|
# Getting Started
|
||||||
|
|
||||||
|
* [coreboot architecture](architecture.md)
|
||||||
* [Build System](build_system.md)
|
* [Build System](build_system.md)
|
||||||
* [Submodules](submodules.md)
|
* [Submodules](submodules.md)
|
||||||
* [Kconfig](kconfig.md)
|
* [Kconfig](kconfig.md)
|
||||||
* [Gerrit Guidelines](gerrit_guidelines.md)
|
* [Gerrit Guidelines](gerrit_guidelines.md)
|
||||||
* [Documentation License](license.md)
|
* [Documentation License](license.md)
|
||||||
* [Writing Documentation](writing_documentation.md)
|
* [Writing Documentation](writing_documentation.md)
|
||||||
|
* [Setting up GPIOs](gpio.md)
|
||||||
|
@ -73,9 +73,6 @@ These variables are typically set in the makefiles or on the make command line.
|
|||||||
These variables were added to Kconfig specifically for coreboot and are not
|
These variables were added to Kconfig specifically for coreboot and are not
|
||||||
included in the Linux version.
|
included in the Linux version.
|
||||||
|
|
||||||
- COREBOOT_BUILD_DIR=path for temporary files. This is used by coreboot’s
|
|
||||||
abuild tool.
|
|
||||||
|
|
||||||
- KCONFIG_STRICT=value. Define to enable warnings as errors. This is enabled
|
- KCONFIG_STRICT=value. Define to enable warnings as errors. This is enabled
|
||||||
in coreboot, and should not be changed.
|
in coreboot, and should not be changed.
|
||||||
|
|
||||||
@ -1132,7 +1129,7 @@ the symbol is only inside of an if/endif block where the if expression evaluates
|
|||||||
as false, the symbol STILL gets defined in the config.h file (though not in the
|
as false, the symbol STILL gets defined in the config.h file (though not in the
|
||||||
.config file).
|
.config file).
|
||||||
|
|
||||||
Use \#if IS_ENABLED(CONFIG_*) to be sure (it returns false for undefined symbols
|
Use \#if CONFIG(SYMBOL) to be sure (it returns false for undefined symbols
|
||||||
and defined-to-0 symbols alike).
|
and defined-to-0 symbols alike).
|
||||||
|
|
||||||
|
|
||||||
@ -1165,8 +1162,6 @@ saved .config file. As always, a 'select' statement overrides any specified
|
|||||||
- coreboot has added the glob operator '*' for the 'source' keyword.
|
- coreboot has added the glob operator '*' for the 'source' keyword.
|
||||||
- coreboot’s Kconfig always defines variables except for strings. In other
|
- coreboot’s Kconfig always defines variables except for strings. In other
|
||||||
Kconfig implementations, bools set to false/0/no are not defined.
|
Kconfig implementations, bools set to false/0/no are not defined.
|
||||||
- IS_ENABLED() is ‘false’ for undefined variables and ‘0’ variables. In Linux
|
|
||||||
(where the macro comes from) it’s ‘true’ as soon as the variable is defined.
|
|
||||||
- coreboot’s version of Kconfig adds the KCONFIG_STRICT environment variable to
|
- coreboot’s version of Kconfig adds the KCONFIG_STRICT environment variable to
|
||||||
error out if there are any issues in the Kconfig files. In the Linux kernel,
|
error out if there are any issues in the Kconfig files. In the Linux kernel,
|
||||||
Kconfig will generate a warning, but will still output an updated .config or
|
Kconfig will generate a warning, but will still output an updated .config or
|
||||||
|
@ -14,18 +14,57 @@ coreboot uses [Sphinx] documentation tool. We prefer the markdown format
|
|||||||
over reStructuredText so only embedded ReST is supported. Checkout the
|
over reStructuredText so only embedded ReST is supported. Checkout the
|
||||||
[Markdown Guide] for more information.
|
[Markdown Guide] for more information.
|
||||||
|
|
||||||
### Install Sphinx
|
### option 1: Use the docker image
|
||||||
|
|
||||||
|
The easiest way to build the documentation is using a docker image.
|
||||||
|
To build the image run the following in the base directory:
|
||||||
|
|
||||||
|
make -C util/docker/ doc.coreboot.org
|
||||||
|
|
||||||
|
Before building the documentation make sure the output directory is given
|
||||||
|
the correct permissions before running docker.
|
||||||
|
|
||||||
|
mkdir -p Documentation/_build
|
||||||
|
|
||||||
|
To build the documentation:
|
||||||
|
|
||||||
|
make -C util/docker docker-build-docs
|
||||||
|
|
||||||
|
To have the documentation build and served over a web server live run:
|
||||||
|
|
||||||
|
make -C util/docker docker-livehtml-docs
|
||||||
|
|
||||||
|
On the host machine, open a browser to the address <http://0.0.0.0:8000>.
|
||||||
|
|
||||||
|
### option 2: Install Sphinx
|
||||||
|
|
||||||
Please follow this official [guide] to install sphinx.
|
Please follow this official [guide] to install sphinx.
|
||||||
You will also need python-recommonmark for sphinx to be able to handle
|
You will also need python-recommonmark for sphinx to be able to handle
|
||||||
markdown documenation.
|
markdown documentation.
|
||||||
|
|
||||||
The recommended version is sphinx 1.7.7, sphinx_rtd_theme 0.4.1 and
|
Since some Linux distributions don't package every needed sphinx extension,
|
||||||
recommonmark 0.4.0.
|
the installation via pip in a venv is recommended. You'll need these python3
|
||||||
|
modules:
|
||||||
|
|
||||||
|
* sphinx
|
||||||
|
* recommonmark
|
||||||
|
* sphinx_rtd_theme
|
||||||
|
* sphinxcontrib-ditaa
|
||||||
|
|
||||||
|
The following combination of versions has been tested: sphinx 2.3.1,
|
||||||
|
recommonmark 0.6.0, sphinx_rtd_theme 0.4.3 and sphinxcontrib-ditaa 0.7.
|
||||||
|
|
||||||
|
Now change into the `Documentation` folder in the coreboot directory and run
|
||||||
|
this command in there
|
||||||
|
|
||||||
|
make sphinx
|
||||||
|
|
||||||
|
If no error occurs, you can find the generated HTML documentation in
|
||||||
|
`Documentation/_build` now.
|
||||||
|
|
||||||
### Optional
|
### Optional
|
||||||
|
|
||||||
Install [shpinx-autobuild] for rebuilding markdown/rst sources on the fly!
|
Install [sphinx-autobuild] for rebuilding markdown/rst sources on the fly!
|
||||||
|
|
||||||
## Basic and simple rules
|
## Basic and simple rules
|
||||||
|
|
||||||
@ -100,11 +139,25 @@ If you do only reference the document, but do not include it in any toctree,
|
|||||||
you'll see the following warning:
|
you'll see the following warning:
|
||||||
**WARNING: document isn't included in any toctree**
|
**WARNING: document isn't included in any toctree**
|
||||||
|
|
||||||
|
## CSV
|
||||||
|
|
||||||
|
You can import CSV files and let sphinx automatically convert them to human
|
||||||
|
readable tables, using the following reStructuredText snipped:
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
.. csv-table::
|
||||||
|
:header: "Key", "Value"
|
||||||
|
:file: keyvalues.csv
|
||||||
|
```
|
||||||
|
|
||||||
|
Of course this can only be done from a markdown file that is included in the
|
||||||
|
TOC tree.
|
||||||
|
|
||||||
[coreboot]: https://coreboot.org
|
[coreboot]: https://coreboot.org
|
||||||
[Documentation]: https://review.coreboot.org/cgit/coreboot.git/tree/Documentation
|
[Documentation]: https://review.coreboot.org/cgit/coreboot.git/tree/Documentation
|
||||||
[shpinx-autobuild]: https://github.com/GaretJax/sphinx-autobuild
|
[sphinx-autobuild]: https://github.com/GaretJax/sphinx-autobuild
|
||||||
[guide]: http://www.sphinx-doc.org/en/stable/install.html
|
[guide]: http://www.sphinx-doc.org/en/stable/install.html
|
||||||
[Sphinx]: http://www.sphinx-doc.org/en/master/
|
[Sphinx]: http://www.sphinx-doc.org/en/master/
|
||||||
[Markdown Guide]: https://www.markdownguide.org/
|
[Markdown Guide]: https://www.markdownguide.org/
|
||||||
[Gerrit Guidelines]: https://doc.coreboot.org/gerrit_guidelines.html
|
[Gerrit Guidelines]: gerrit_guidelines.md
|
||||||
[review.coreboot.org]: https://review.coreboot.org
|
[review.coreboot.org]: https://review.coreboot.org
|
||||||
|
64
Documentation/gfx/display-panel.md
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
Display Panel Specifics
|
||||||
|
=======================
|
||||||
|
|
||||||
|
Timing Parameters
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
From the binary file `edid` in the sys filesystem on Linux, the panel can be
|
||||||
|
identified. The exact path may differ slightly. Here is an example:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ strings /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/edid
|
||||||
|
@0 5
|
||||||
|
LG Display
|
||||||
|
LP140WF3-SPD1
|
||||||
|
```
|
||||||
|
|
||||||
|
To figure out the timing parameters, refer to the [Intel Programmer's Reference
|
||||||
|
Manuals](https://01.org/linuxgraphics/documentation/hardware-specification-prms)
|
||||||
|
and try to find the datasheet of the panel using the information from `edid`.
|
||||||
|
In the example above, you would search for `LP140WF3-SPD1`. Find a table listing
|
||||||
|
the power sequence timing parameters, which are usually named T[N] and also
|
||||||
|
referenced in Intel's respective registers listing. You need the values for
|
||||||
|
`PP_ON_DELAYS`, `PP_OFF_DELAYS` and `PP_DIVISOR` for your `devicetree.cb`:
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+-----------------------------+---------------------------------------+-----+
|
||||||
|
| Intel docs | devicetree.cb | eDP |
|
||||||
|
+-----------------------------+---------------------------------------+-----+
|
||||||
|
| Power up delay | `gpu_panel_power_up_delay` | T3 |
|
||||||
|
+-----------------------------+---------------------------------------+-----+
|
||||||
|
| Power on to backlight on | `gpu_panel_power_backlight_on_delay` | T7 |
|
||||||
|
+-----------------------------+---------------------------------------+-----+
|
||||||
|
| Power Down delay | `gpu_panel_power_down_delay` | T10 |
|
||||||
|
+-----------------------------+---------------------------------------+-----+
|
||||||
|
| Backlight off to power down | `gpu_panel_power_backlight_off_delay` | T9 |
|
||||||
|
+-----------------------------+---------------------------------------+-----+
|
||||||
|
| Power Cycle Delay | `gpu_panel_power_cycle_delay` | T12 |
|
||||||
|
+-----------------------------+---------------------------------------+-----+
|
||||||
|
```
|
||||||
|
|
||||||
|
Intel GPU Tools and VBT
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
The Intel GPU tools are in a package called either `intel-gpu-tools` or
|
||||||
|
`igt-gpu-tools` in most distributions of Linux-based operating systems.
|
||||||
|
In the coreboot `util/` directory, you can find `intelvbttool`.
|
||||||
|
|
||||||
|
From a running system, you can dump the register values directly:
|
||||||
|
```sh
|
||||||
|
$ intel_reg dump --all | grep PCH_PP
|
||||||
|
PCH_PP_STATUS (0x000c7200): 0x80000008
|
||||||
|
PCH_PP_CONTROL (0x000c7204): 0x00000007
|
||||||
|
PCH_PP_ON_DELAYS (0x000c7208): 0x07d00001
|
||||||
|
PCH_PP_OFF_DELAYS (0x000c720c): 0x01f40001
|
||||||
|
PCH_PP_DIVISOR (0x000c7210): 0x0004af06
|
||||||
|
```
|
||||||
|
|
||||||
|
You can obtain the timing values from a VBT (Video BIOS Table), which you can
|
||||||
|
dump from a vendor UEFI image:
|
||||||
|
```sh
|
||||||
|
$ intel_vbt_decode data.vbt | grep T3
|
||||||
|
Power Sequence: T3 2000 T7 10 T9 2000 T10 500 T12 5000
|
||||||
|
T3 optimization: no
|
||||||
|
```
|
@ -7,13 +7,14 @@ Introduction and Current State in coreboot
|
|||||||
*libgfxinit* is a library of full-featured graphics initialization
|
*libgfxinit* is a library of full-featured graphics initialization
|
||||||
(aka. modesetting) drivers. It's implemented in SPARK (a subset of
|
(aka. modesetting) drivers. It's implemented in SPARK (a subset of
|
||||||
Ada with formal verification features). While not restricted to in
|
Ada with formal verification features). While not restricted to in
|
||||||
any way, it currently only supports Intel's integrated gfx control-
|
any way, it currently only supports Intel's integrated graphics
|
||||||
lers (GMA).
|
controllers (GMA).
|
||||||
|
|
||||||
Currently, it supports the Intel Core i3/i5/i7 processor line and
|
Currently, it supports the Intel Core i3/i5/i7 processor line, HDMI
|
||||||
will support HDMI and DP on the Atom successor Apollo Lake. At the
|
and DP on the Apollo Lake processors and everything but SDVO on G45
|
||||||
time of writing, Sandy Bridge, Ivy Bridge, and Haswell are veri-
|
and GM45 chipsets. At the time of writing, G45, GM45, everything
|
||||||
fied to work within *coreboot*.
|
from Arrandale to Coffee Lake, and Apollo Lake are verified to work
|
||||||
|
within *coreboot*.
|
||||||
|
|
||||||
GMA: Framebuffer Configuration
|
GMA: Framebuffer Configuration
|
||||||
------------------------------
|
------------------------------
|
||||||
@ -48,24 +49,36 @@ follows:
|
|||||||
|
|
||||||
* `lightup_ok`: returns whether the initialization succeeded `1` or
|
* `lightup_ok`: returns whether the initialization succeeded `1` or
|
||||||
failed `0`. Currently, only the case that no display
|
failed `0`. Currently, only the case that no display
|
||||||
could be found counts as failure. A failure at a la-
|
could be found counts as failure. A failure at a
|
||||||
ter stage (e.g. failure to train a DP) is not propa-
|
later stage (e.g. failure to train a DP) is not
|
||||||
gated.
|
propagated.
|
||||||
|
|
||||||
GMA: Per Board Configuration
|
GMA: Per Board Configuration
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
In order to set up the display panel, see the
|
||||||
|
[display panel-specific documentation](/gfx/display-panel.md).
|
||||||
|
|
||||||
There are a few Kconfig symbols to consider. To indicate that a
|
There are a few Kconfig symbols to consider. To indicate that a
|
||||||
board can initialize graphics through *libgfxinit*:
|
board can initialize graphics through *libgfxinit*:
|
||||||
|
|
||||||
select MAINBOARD_HAS_LIBGFXINIT
|
select MAINBOARD_HAS_LIBGFXINIT
|
||||||
|
|
||||||
Internal ports share some hardware blocks (e.g. backlight, panel
|
Internal ports share some hardware blocks (e.g. backlight, panel
|
||||||
power sequencer). Therefore, each board has to select either eDP
|
power sequencer). Therefore, each system with an integrated panel
|
||||||
or LVDS as the internal port, if any:
|
should set `GFX_GMA_PANEL_1_PORT` to the respective port, e.g.:
|
||||||
|
|
||||||
select GFX_GMA_INTERNAL_IS_EDP # the default, or
|
config GFX_GMA_PANEL_1_PORT
|
||||||
select GFX_GMA_INTERNAL_IS_LVDS
|
default "DP3"
|
||||||
|
|
||||||
|
For the most common cases, LVDS and eDP, exists a shorthand, one
|
||||||
|
can select either:
|
||||||
|
|
||||||
|
select GFX_GMA_PANEL_1_ON_EDP # the default, or
|
||||||
|
select GFX_GMA_PANEL_1_ON_LVDS
|
||||||
|
|
||||||
|
Some newer chips feature a second block of panel control logic.
|
||||||
|
For this, `GFX_GMA_PANEL_2_PORT` can be set.
|
||||||
|
|
||||||
Boards with a DVI-I connector share the DDC (I2C) pins for both
|
Boards with a DVI-I connector share the DDC (I2C) pins for both
|
||||||
analog and digital displays. In this case, *libgfxinit* needs to
|
analog and digital displays. In this case, *libgfxinit* needs to
|
||||||
@ -92,7 +105,8 @@ You can select from the following Ports:
|
|||||||
|
|
||||||
type Port_Type is
|
type Port_Type is
|
||||||
(Disabled, -- optionally terminates the list
|
(Disabled, -- optionally terminates the list
|
||||||
Internal, -- either eDP or LVDS as selected in Kconfig
|
LVDS,
|
||||||
|
eDP,
|
||||||
DP1,
|
DP1,
|
||||||
DP2,
|
DP2,
|
||||||
DP3,
|
DP3,
|
||||||
@ -108,8 +122,7 @@ both DPx and HDMIx should be listed.
|
|||||||
|
|
||||||
A good example is the mainboard Kontron/KTQM77, it features two
|
A good example is the mainboard Kontron/KTQM77, it features two
|
||||||
DP++ ports (DP2/HDMI2, DP3/HDMI3), one DVI-I port (HDMI1/Analog),
|
DP++ ports (DP2/HDMI2, DP3/HDMI3), one DVI-I port (HDMI1/Analog),
|
||||||
eDP and LVDS. Due to the constraints mentioned above, only one of
|
eDP and LVDS. It defines `ports` as follows:
|
||||||
eDP and LVDS can be enabled. It defines `ports` as follows:
|
|
||||||
|
|
||||||
ports : constant Port_List :=
|
ports : constant Port_List :=
|
||||||
(DP2,
|
(DP2,
|
||||||
@ -118,7 +131,8 @@ eDP and LVDS can be enabled. It defines `ports` as follows:
|
|||||||
HDMI2,
|
HDMI2,
|
||||||
HDMI3,
|
HDMI3,
|
||||||
Analog,
|
Analog,
|
||||||
Internal,
|
LVDS,
|
||||||
|
eDP,
|
||||||
others => Disabled);
|
others => Disabled);
|
||||||
|
|
||||||
The `GMA.gfxinit()` procedure probes for display EDIDs in the
|
The `GMA.gfxinit()` procedure probes for display EDIDs in the
|
||||||
|
6
Documentation/ifdtool/index.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# ifdtool
|
||||||
|
|
||||||
|
Contents:
|
||||||
|
|
||||||
|
* [Intel IFD Binary Extraction](binary_extraction.md)
|
||||||
|
* [IFD Layout](layout.md)
|
78
Documentation/ifdtool/layout.md
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
# IFD Layout
|
||||||
|
|
||||||
|
A coreboot image for an Intel SoC contains two separate definitions of the
|
||||||
|
layout of the flash. The Intel Flash Descriptor (IFD) which defines offsets and
|
||||||
|
sizes of various regions of flash and the [coreboot FMAP](../lib/flashmap.md).
|
||||||
|
|
||||||
|
The FMAP should define all of the of the regions defined by the IFD to ensure
|
||||||
|
that those regions are accounted for by coreboot and will not be accidentally
|
||||||
|
modified.
|
||||||
|
|
||||||
|
## IFD mapping
|
||||||
|
|
||||||
|
The names of the IFD regions in the FMAP should follow the convention of
|
||||||
|
starting with the prefix `SI_` which stands for `silicon initialization` as a
|
||||||
|
way to categorize anything required by the SoC but not provided by coreboot.
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------+------------------+-----------+-------------------------------------------+
|
||||||
|
| IFD Region | IFD Region name | FMAP Name | Notes |
|
||||||
|
| index | | | |
|
||||||
|
+============+==================+===========+===========================================+
|
||||||
|
| 0 | Flash Descriptor | SI_DESC | Always the top 4KB of flash |
|
||||||
|
+------------+------------------+-----------+-------------------------------------------+
|
||||||
|
| 1 | BIOS | SI_BIOS | This is the region that contains coreboot |
|
||||||
|
+------------+------------------+-----------+-------------------------------------------+
|
||||||
|
| 2 | Intel ME | SI_ME | |
|
||||||
|
+------------+------------------+-----------+-------------------------------------------+
|
||||||
|
| 3 | Gigabit Ethernet | SI_GBE | |
|
||||||
|
+------------+------------------+-----------+-------------------------------------------+
|
||||||
|
| 4 | Platform Data | SI_PDR | |
|
||||||
|
+------------+------------------+-----------+-------------------------------------------+
|
||||||
|
| 8 | EC Firmware | SI_EC | Most Chrome OS devices do not use this |
|
||||||
|
| | | | region; EC firmware is stored in BIOS |
|
||||||
|
| | | | region of flash |
|
||||||
|
+------------+------------------+-----------+-------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Validation
|
||||||
|
|
||||||
|
The ifdtool can be used to manipulate a firmware image with a IFD. This tool
|
||||||
|
will not take into account the FMAP while modifying the image which can lead to
|
||||||
|
unexpected and hard to debug issues with the firmware image. For example if the
|
||||||
|
ME region is defined at 6 MB in the IFD but the FMAP only allocates 4 MB for the
|
||||||
|
ME, then when the ME is added by the ifdtool 6 MB will be written which could
|
||||||
|
overwrite 2 MB of the BIOS.
|
||||||
|
|
||||||
|
In order to validate that the FMAP and the IFD are compatible the ifdtool
|
||||||
|
provides --validate (-t) option. `ifdtool -t` will read both the IFD and the
|
||||||
|
FMAP in the image and for every non empty region in the IFD if that region is
|
||||||
|
defined in the FMAP but the offset or size is different then the tool will
|
||||||
|
return an error.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```console
|
||||||
|
foo@bar:~$ ifdtool -t bad_image.bin
|
||||||
|
Region mismatch between bios and SI_BIOS
|
||||||
|
Descriptor region bios:
|
||||||
|
offset: 0x00400000
|
||||||
|
length: 0x01c00000
|
||||||
|
FMAP area SI_BIOS:
|
||||||
|
offset: 0x00800000
|
||||||
|
length: 0x01800000
|
||||||
|
Region mismatch between me and SI_ME
|
||||||
|
Descriptor region me:
|
||||||
|
offset: 0x00103000
|
||||||
|
length: 0x002f9000
|
||||||
|
FMAP area SI_ME:
|
||||||
|
offset: 0x00103000
|
||||||
|
length: 0x006f9000
|
||||||
|
Region mismatch between pd and SI_PDR
|
||||||
|
Descriptor region pd:
|
||||||
|
offset: 0x003fc000
|
||||||
|
length: 0x00004000
|
||||||
|
FMAP area SI_PDR:
|
||||||
|
offset: 0x007fc000
|
||||||
|
length: 0x00004000
|
||||||
|
```
|
@ -161,28 +161,30 @@ for example OpenBSD, is probably the closest cousin of our approach.
|
|||||||
Contents:
|
Contents:
|
||||||
|
|
||||||
* [Getting Started](getting_started/index.md)
|
* [Getting Started](getting_started/index.md)
|
||||||
* [Rookie Guide](lessons/index.md)
|
* [Tutorial](tutorial/index.md)
|
||||||
* [Coding Style](coding_style.md)
|
* [Coding Style](coding_style.md)
|
||||||
* [Project Ideas](contributing/project_ideas.md)
|
* [Project Ideas](contributing/project_ideas.md)
|
||||||
|
* [Documentation Ideas](contributing/documentation_ideas.md)
|
||||||
* [Code of Conduct](community/code_of_conduct.md)
|
* [Code of Conduct](community/code_of_conduct.md)
|
||||||
* [Community forums](community/forums.md)
|
* [Community forums](community/forums.md)
|
||||||
|
* [Project services](community/services.md)
|
||||||
* [coreboot at conferences](community/conferences.md)
|
* [coreboot at conferences](community/conferences.md)
|
||||||
* [Security](security.md)
|
|
||||||
* [Payloads](payloads.md)
|
* [Payloads](payloads.md)
|
||||||
* [Distributions](distributions.md)
|
* [Distributions](distributions.md)
|
||||||
* [Timestamps](timestamp.md)
|
* [Technotes](technotes/index.md)
|
||||||
* [Intel IFD Binary Extraction](Binary_Extraction.md)
|
* [ACPI](acpi/index.md)
|
||||||
* [Dealing with Untrusted Input in SMM](technotes/2017-02-dealing-with-untrusted-input-in-smm.md)
|
|
||||||
* [ABI data consumption](abi-data-consumption.md)
|
|
||||||
* [GPIO toggling in ACPI AML](acpi/gpio.md)
|
|
||||||
* [Native Graphics Initialization with libgfxinit](gfx/libgfxinit.md)
|
* [Native Graphics Initialization with libgfxinit](gfx/libgfxinit.md)
|
||||||
* [Architecture-specific documentation](arch/index.md)
|
* [Display panel](gfx/display-panel.md)
|
||||||
* [Northbridge-specific documentation](northbridge/index.md)
|
* [CPU Architecture](arch/index.md)
|
||||||
* [System on Chip-specific documentation](soc/index.md)
|
* [Platform independent drivers](drivers/index.md)
|
||||||
* [Mainboard-specific documentation](mainboard/index.md)
|
* [Northbridge](northbridge/index.md)
|
||||||
* [Payload-specific documentation](lib/payloads/index.md)
|
* [System on Chip](soc/index.md)
|
||||||
* [SuperIO-specific documentation](superio/index.md)
|
* [Mainboard](mainboard/index.md)
|
||||||
* [Vendorcode-specific documentation](vendorcode/index.md)
|
* [Payloads](lib/payloads/index.md)
|
||||||
|
* [Libraries](lib/index.md)
|
||||||
|
* [Security](security/index.md)
|
||||||
|
* [SuperIO](superio/index.md)
|
||||||
|
* [Vendorcode](vendorcode/index.md)
|
||||||
* [Utilities](util.md)
|
* [Utilities](util.md)
|
||||||
* [Release notes for past releases](releases/index.md)
|
* [Release notes for past releases](releases/index.md)
|
||||||
* [Flashing firmware tutorial](flash_tutorial/index.md)
|
* [Flashing firmware tutorial](flash_tutorial/index.md)
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
# Rookie Guide
|
|
||||||
|
|
||||||
* [Lesson 1: Starting from scratch](lesson1.md)
|
|
||||||
* [Lesson 2: Submitting a patch to coreboot.org](lesson2.md)
|
|
@ -1,169 +0,0 @@
|
|||||||
coreboot lesson 1 - Starting from scratch
|
|
||||||
=========================================
|
|
||||||
|
|
||||||
From a fresh Ubuntu 16.04 or 18.04 install, here are all the steps required for
|
|
||||||
a very basic build:
|
|
||||||
|
|
||||||
Download, configure, and build coreboot
|
|
||||||
---------------------------------------
|
|
||||||
|
|
||||||
### Step 1 - Install tools and libraries needed for coreboot
|
|
||||||
$ sudo apt-get install -y bison build-essential curl flex git gnat libncurses5-dev m4 zlib1g-dev
|
|
||||||
|
|
||||||
### Step 2 - Download coreboot source tree
|
|
||||||
$ git clone https://review.coreboot.org/coreboot
|
|
||||||
$ cd coreboot
|
|
||||||
|
|
||||||
### Step 3 - Build the coreboot toolchain
|
|
||||||
Please note that this can take a significant amount of time
|
|
||||||
|
|
||||||
$ make crossgcc-i386 CPUS=$(nproc)
|
|
||||||
|
|
||||||
Also note that you can possibly use your system toolchain, but the results are
|
|
||||||
not reproducible, and may have issues, so this is not recommended. See step 5
|
|
||||||
to use your system toolchain.
|
|
||||||
|
|
||||||
### Step 4 - Build the payload - coreinfo
|
|
||||||
$ make -C payloads/coreinfo olddefconfig
|
|
||||||
$ make -C payloads/coreinfo
|
|
||||||
|
|
||||||
### Step 5 - Configure the build
|
|
||||||
|
|
||||||
##### Configure your mainboard
|
|
||||||
$ make menuconfig
|
|
||||||
select 'Mainboard' menu
|
|
||||||
Beside 'Mainboard vendor' should be '(Emulation)'
|
|
||||||
Beside 'Mainboard model' should be 'QEMU x86 i440fx/piix4'
|
|
||||||
select < Exit >
|
|
||||||
These should be the default selections, so if anything else was set, run
|
|
||||||
`make distclean` to remove your old config file and start over.
|
|
||||||
|
|
||||||
##### Optionally use your system toolchain (Again, not recommended)
|
|
||||||
select 'General Setup' menu
|
|
||||||
select 'Allow building with any toolchain'
|
|
||||||
select < Exit >
|
|
||||||
|
|
||||||
##### Select the payload
|
|
||||||
select 'Payload' menu
|
|
||||||
select 'Add a Payload'
|
|
||||||
choose 'An Elf executable payload'
|
|
||||||
select 'Payload path and filename'
|
|
||||||
enter 'payloads/coreinfo/build/coreinfo.elf'
|
|
||||||
select < Exit >
|
|
||||||
select < Exit >
|
|
||||||
select < Yes >
|
|
||||||
|
|
||||||
##### check your configuration (optional step):
|
|
||||||
|
|
||||||
$ make savedefconfig
|
|
||||||
$ cat defconfig
|
|
||||||
|
|
||||||
There should only be two lines (or 3 if you're using the system toolchain):
|
|
||||||
|
|
||||||
CONFIG_PAYLOAD_ELF=y
|
|
||||||
CONFIG_PAYLOAD_FILE="payloads/coreinfo/build/coreinfo.elf"
|
|
||||||
|
|
||||||
### Step 6 - build coreboot
|
|
||||||
$ make
|
|
||||||
|
|
||||||
At the end of the build, you should see:
|
|
||||||
|
|
||||||
Build emulation/qemu-i440fx (QEMU x86 i440fx/piix4)
|
|
||||||
|
|
||||||
This means your build was successful. The output from the build is in the build
|
|
||||||
directory. build/coreboot.rom is the full rom file.
|
|
||||||
|
|
||||||
Test the image using QEMU
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
### Step 7 - Install QEMU
|
|
||||||
$ sudo apt-get install -y qemu
|
|
||||||
|
|
||||||
### Step 8 - Run QEMU
|
|
||||||
Start QEMU, and point it to the ROM you just built:
|
|
||||||
|
|
||||||
$ qemu-system-x86_64 -bios build/coreboot.rom -serial stdio
|
|
||||||
|
|
||||||
You should see the serial output of coreboot in the original console window, and
|
|
||||||
a new window will appear running the coreinfo payload.
|
|
||||||
|
|
||||||
Summary
|
|
||||||
-------
|
|
||||||
|
|
||||||
### Step 1 summary - Install tools and libraries needed for coreboot
|
|
||||||
You installed the minimum additional requirements for ubuntu to download and
|
|
||||||
build coreboot. Ubuntu already has most of the other tools that would be
|
|
||||||
required installed by default.
|
|
||||||
|
|
||||||
* `build-essential` is the basic tools for doing builds. It comes pre-installed
|
|
||||||
on some Ubuntu flavors, and not on others.
|
|
||||||
* `git` is needed to download coreboot from the coreboot git repository.
|
|
||||||
* `libncurses5-dev` is needed to build the menu for 'make menuconfig'
|
|
||||||
* `m4, bison, curl, flex, zlib1g-dev, gcc, gnat` and `g++` or `clang`
|
|
||||||
are needed to build the coreboot toolchain. `gcc` and `gnat` have to be
|
|
||||||
of the same version.
|
|
||||||
|
|
||||||
If you started with a different distribution, you might need to install many
|
|
||||||
other items which vary by distribution.
|
|
||||||
|
|
||||||
### Step 2 summary - Download coreboot source tree
|
|
||||||
This will download a 'read-only' copy of the coreboot tree. This just means
|
|
||||||
that if you made changes to the coreboot tree, you couldn't immediately
|
|
||||||
contribute them back to the community. To pull a copy of coreboot that would
|
|
||||||
allow you to contribute back, you would first need to sign up for an account on
|
|
||||||
gerrit.
|
|
||||||
|
|
||||||
### Step 3 summary - Build the coreboot toolchain.
|
|
||||||
This builds one of the coreboot cross-compiler toolchains for X86 platforms.
|
|
||||||
Because of the variability of compilers and the other required tools between
|
|
||||||
the various operating systems that coreboot can be built on, coreboot supplies
|
|
||||||
and uses its own cross-compiler toolchain to build the binaries that end up as
|
|
||||||
part of the coreboot ROM. The toolchain provided by the operating system (the
|
|
||||||
'host toolchain') is used to build various tools that will run on the local
|
|
||||||
system during the build process.
|
|
||||||
|
|
||||||
### Step 4 summary - Build the payload
|
|
||||||
To actually do anything useful with coreboot, you need to build a payload to
|
|
||||||
include in the rom. The idea behind coreboot is that it does the minimum amount
|
|
||||||
possible before passing control of the machine to a payload. There are various
|
|
||||||
payloads such as grub or SeaBIOS that are typically used to boot the operating
|
|
||||||
system. Instead, we used coreinfo, a small demonstration payload that allows the
|
|
||||||
user to look at various things such as memory and the contents of coreboot's
|
|
||||||
cbfs - the pieces that make up the coreboot rom.
|
|
||||||
|
|
||||||
### Step 5 summary - Configure the build
|
|
||||||
This step configures coreboot's build options using the menuconfig interface to
|
|
||||||
Kconfig. Kconfig is the same configuration program used by the linux kernel. It
|
|
||||||
allows you to enable, disable, and change various values to control the coreboot
|
|
||||||
build process, including which mainboard(motherboard) to use, which toolchain to
|
|
||||||
use, and how the runtime debug console should be presented and saved.
|
|
||||||
Anytime you change mainboards in Kconfig, you should always run `make distclean`
|
|
||||||
before running `make menuconfig`. Due to the way that Kconfig works, values will
|
|
||||||
be kept from the previous mainboard if you skip the clean step. This leads to a
|
|
||||||
hybrid configuration which may or may not work as expected.
|
|
||||||
|
|
||||||
### Step 6 summary - Build coreboot
|
|
||||||
You may notice that a number of other pieces are downloaded at the beginning of
|
|
||||||
the build process. These are the git submodules used in various coreboot builds.
|
|
||||||
By default, the _blobs_ submodule is not downloaded. This git submodule may be
|
|
||||||
required for other builds for microcode or other binaries. To enable downloading
|
|
||||||
this submodule, select the option "Allow use of binary-only repository" in the
|
|
||||||
"General Setup" menu of Kconfig
|
|
||||||
This attempts to build the coreboot rom. The rom file itself ends up in the
|
|
||||||
build directory as 'coreboot.rom'. At the end of the build process, the build
|
|
||||||
displayed the contents of the rom file.
|
|
||||||
|
|
||||||
### Step 7 summary - Install QEMU
|
|
||||||
QEMU is a processor emulator which we can use to show coreboot
|
|
||||||
|
|
||||||
### Step 8 summary - Run QEMU
|
|
||||||
Here's the command line broken down:
|
|
||||||
* `qemu-system-x86_64`
|
|
||||||
This starts the QEMU emulator with the i440FX host PCI bridge and PIIX3 PCI to
|
|
||||||
ISA bridge.
|
|
||||||
* `-bios build/coreboot.rom`
|
|
||||||
Use the bios rom image that we just built. If this is left off, the standard
|
|
||||||
SeaBIOS image that comes with QEMU is used.
|
|
||||||
* `-serial stdio`
|
|
||||||
Send the serial output to the console. This allows you to view the coreboot
|
|
||||||
debug output.
|
|
@ -1,291 +0,0 @@
|
|||||||
# coreboot Lesson 2: Submitting a patch to coreboot.org
|
|
||||||
|
|
||||||
## Part 1: Setting up an account at coreboot.org
|
|
||||||
|
|
||||||
If you already have an account, skip to Part 2.
|
|
||||||
|
|
||||||
Otherwise, go to <https://review.coreboot.org> in your preferred web browser.
|
|
||||||
Select **Register** in the upper right corner.
|
|
||||||
|
|
||||||
Select the appropriate sign-in. For example, if you have a Google account,
|
|
||||||
select **Google OAuth2** (gerrit-oauth-provider plugin)".**Note:** Your
|
|
||||||
username for the account will be the username of the account you used to
|
|
||||||
sign-in with. (ex. your Google username).
|
|
||||||
|
|
||||||
## Part 2a: Set up RSA Private/Public Key
|
|
||||||
|
|
||||||
If you prefer to use an HTTP password instead, skip to Part 2b.
|
|
||||||
|
|
||||||
For the most up-to-date instructions on how to set up SSH keys with Gerrit go to
|
|
||||||
<https://gerrit-documentation.storage.googleapis.com/Documentation/2.14.2/user-upload.html#configure_ssh)>
|
|
||||||
and follow the instructions there. Then, skip to Part 3.
|
|
||||||
|
|
||||||
Additionally, that section of the Web site provides explanation on starting
|
|
||||||
an ssh-agent, which may be particularly helpful for those who anticipate
|
|
||||||
frequently uploading changes.
|
|
||||||
|
|
||||||
If you instead prefer to have review.coreboot.org specific instructions,
|
|
||||||
follow the steps below. Note that this particular section may have the
|
|
||||||
most up-to-date instructions.
|
|
||||||
|
|
||||||
If you do not have an RSA key set up on your account already (as is the case
|
|
||||||
with a newly created account), follow the instructions below; otherwise,
|
|
||||||
doing so could overwrite an existing key.
|
|
||||||
|
|
||||||
In the upper right corner, select your name and click on **Settings**.
|
|
||||||
Select **SSH Public Keys** on the left-hand side.
|
|
||||||
|
|
||||||
In a terminal, run "ssh-keygen" and confirm the default path ".ssh/id_rsa".
|
|
||||||
|
|
||||||
Make a passphrase -- remember this phrase. It will be needed whenever you use
|
|
||||||
this RSA Public Key. **Note:** You might want to use a short password, or
|
|
||||||
forego the password altogether as you will be using it very often.
|
|
||||||
|
|
||||||
Open "id_rsa.pub", copy all contents and paste into the textbox under
|
|
||||||
"Add SSH Public Key" in the https://review.coreboot.org webpage.
|
|
||||||
|
|
||||||
## Part 2b: Setting up an HTTP Password
|
|
||||||
|
|
||||||
Alternatively, instead of using SSH keys, you can use an HTTP password. To do so,
|
|
||||||
after you select your name and click on **Settings** on the left-hand side, rather
|
|
||||||
than selecting **SSH Public Keys**, select **HTTP Password**.
|
|
||||||
|
|
||||||
Click **Generate Password**. This should fill the "Password" box with a password. Copy
|
|
||||||
the password, and add the following to your $HOME/.netrc file:
|
|
||||||
|
|
||||||
machine review.coreboot.org login YourUserNameHere password YourPasswordHere
|
|
||||||
|
|
||||||
where YourUserNameHere is your username, and YourPasswordHere is the password you
|
|
||||||
just generated.
|
|
||||||
|
|
||||||
## Part 3: Clone coreboot and configure it for submitting patches
|
|
||||||
|
|
||||||
On Gerrit, click on the **Browse** tab in the upper left corner and select
|
|
||||||
**Repositories**. From the listing, select the "coreboot" repo. You may have
|
|
||||||
to click the next page arrow at the bottom a few times to find it.
|
|
||||||
|
|
||||||
If you are using SSH keys, select **ssh** from the tabs under "Project
|
|
||||||
coreboot" and run the "clone with commit-msg hook" command that's provided.
|
|
||||||
This should prompt you for your id_rsa passphrase, if you previously set one.
|
|
||||||
|
|
||||||
If you are using HTTP, instead, select **http** from the tabs under "Project coreboot"
|
|
||||||
and run the command that appears
|
|
||||||
|
|
||||||
Now is a good time to configure your global git identity, if you haven't
|
|
||||||
already.
|
|
||||||
|
|
||||||
git config --global user.name "Your Name"
|
|
||||||
git config --global user.email "Your Email"
|
|
||||||
|
|
||||||
Finally, enter the local git repository and set up repository specific hooks
|
|
||||||
and other configurations.
|
|
||||||
|
|
||||||
cd coreboot
|
|
||||||
make gitconfig
|
|
||||||
|
|
||||||
## Part 4: Submit a commit
|
|
||||||
|
|
||||||
An easy first commit to make is fixing existing checkpatch errors and warnings
|
|
||||||
in the source files. To see errors that are already present, build the files in
|
|
||||||
the repository by running 'make lint' in the coreboot directory. Alternatively,
|
|
||||||
if you want to run 'make lint' on a specific directory, run:
|
|
||||||
|
|
||||||
for file in $(git ls-files | grep src/amd/quadcore); do \
|
|
||||||
util/lint/checkpatch.pl --file $file --terse; done
|
|
||||||
|
|
||||||
where <filepath> is the filepath of the directory (ex. src/cpu/amd/car).
|
|
||||||
|
|
||||||
Any changes made to files under the src directory are made locally,
|
|
||||||
and can be submitted for review.
|
|
||||||
|
|
||||||
Once you finish making your desired changes, use the command line to stage
|
|
||||||
and submit your changes. An alternative and potentially easier way to stage
|
|
||||||
and submit commits is to use git cola, a graphical user interface for git. For
|
|
||||||
instructions on how to do so, skip to Part 4b.
|
|
||||||
|
|
||||||
## Part 4a: Using the command line to stage and submit a commit
|
|
||||||
|
|
||||||
To use the command line to stage a commit, run
|
|
||||||
|
|
||||||
git add <filename>
|
|
||||||
|
|
||||||
where `filename` is the name of your file.
|
|
||||||
|
|
||||||
To commit the change, run
|
|
||||||
|
|
||||||
git commit -s
|
|
||||||
|
|
||||||
**Note:** The -s adds a signed-off-by line by the committer. Your commit should be
|
|
||||||
signed off with your name and email (i.e. **Your Name** **<Your Email>**, based on
|
|
||||||
what you set with git config earlier).
|
|
||||||
|
|
||||||
Running git commit first checks for any errors and warnings using lint. If
|
|
||||||
there are any, you must go back and fix them before submitting your commit.
|
|
||||||
You can do so by making the necessary changes, and then staging your commit again.
|
|
||||||
|
|
||||||
When there are no errors or warnings, your default text editor will open.
|
|
||||||
This is where you will write your commit message.
|
|
||||||
|
|
||||||
The first line of your commit message is your commit summary. This is a brief
|
|
||||||
one-line description of what you changed in the files using the template
|
|
||||||
below:
|
|
||||||
|
|
||||||
<filepath>: Short description
|
|
||||||
*ex. cpu/amd/pi/00630F01: Fix checkpatch warnings and errors*
|
|
||||||
**Note:** It is good practice to use present tense in your descriptions
|
|
||||||
and do not punctuate your summary.
|
|
||||||
|
|
||||||
Then hit Enter. The next paragraph should be a more in-depth explanation of the
|
|
||||||
changes you've made to the files. Again, it is good practice to use present
|
|
||||||
tense.
|
|
||||||
*ex. Fix space prohibited between function name and open parenthesis,
|
|
||||||
line over 80 characters, unnecessary braces for single statement blocks,
|
|
||||||
space required before open brace errors and warnings.*
|
|
||||||
|
|
||||||
When you have finished writing your commit message, save and exit the text
|
|
||||||
editor. You have finished committing your change. If, after submitting your
|
|
||||||
commit, you wish to make changes to it, running "git commit --amend" allows
|
|
||||||
you to take back your commit and amend it.
|
|
||||||
|
|
||||||
When you are done with your commit, run 'git push' to push your commit to
|
|
||||||
coreboot.org. **Note:** To submit as a draft, use
|
|
||||||
'git push origin HEAD:refs/drafts/master' Submitting as a draft means that
|
|
||||||
your commit will be on coreboot.org, but is only visible to those you add
|
|
||||||
as reviewers.
|
|
||||||
|
|
||||||
This has been a quick primer on how to submit a change to Gerrit for review
|
|
||||||
using git. You may wish to review the [Gerrit code review workflow
|
|
||||||
documentation](https://gerrit-review.googlesource.com/Documentation/intro-user.html#code-review),
|
|
||||||
especially if you plan to work on multiple changes at the same time.
|
|
||||||
|
|
||||||
## Part 4b: Using git cola to stage and submit a commit
|
|
||||||
|
|
||||||
If git cola is not installed on your machine, see
|
|
||||||
https://git-cola.github.io/downloads.html for download instructions.
|
|
||||||
|
|
||||||
After making some edits to src files, rather than run "git add," run
|
|
||||||
'git cola' from the command line. You should see all of the files
|
|
||||||
edited under "Modified".
|
|
||||||
|
|
||||||
In the textbox labeled "Commit summary" provide a brief one-line
|
|
||||||
description of what you changed in the files according to the template
|
|
||||||
below:
|
|
||||||
|
|
||||||
<filepath>: Short description
|
|
||||||
*ex. cpu/amd/pi/00630F01: Fix checkpatch warnings and errors*
|
|
||||||
**Note:** It is good practice to use present tense in your descriptions
|
|
||||||
and do not punctuate your short description.
|
|
||||||
|
|
||||||
In the larger text box labeled 'Extended description...' provide a more
|
|
||||||
in-depth explanation of the changes you've made to the files. Again, it
|
|
||||||
is good practice to use present tense.
|
|
||||||
*ex. Fix space prohibited between function name and open parenthesis,
|
|
||||||
line over 80 characters, unnecessary braces for single statement blocks,
|
|
||||||
space required before open brace errors and warnings.*
|
|
||||||
|
|
||||||
Then press Enter two times to move the cursor to below your description.
|
|
||||||
To the left of the text boxes, there is an icon with an downward arrow.
|
|
||||||
Press the arrow and select "Sign Off." Make sure that you are signing off
|
|
||||||
with your name and email (i.e. **Your Name** **<Your Email>**, based on what
|
|
||||||
you set with git config earlier).
|
|
||||||
|
|
||||||
Now, review each of your changes and mark either individual changes or
|
|
||||||
an entire file as Ready to Commit by marking it as 'Staged'. To do
|
|
||||||
this, select one file from the 'Modified' list. If you only want to
|
|
||||||
submit particular changes from each file, then highlight the red and
|
|
||||||
green lines for your changes, right click and select 'Stage Selected
|
|
||||||
Lines'. Alternatively, if an entire file is ready to be committed, just
|
|
||||||
double click on the file under 'Modified' and it will be marked as
|
|
||||||
Staged.
|
|
||||||
|
|
||||||
Once the descriptions are done and all the edits you would like to
|
|
||||||
commit have been staged, press 'Commit' on the right of the text
|
|
||||||
boxes.
|
|
||||||
|
|
||||||
If the commit fails due to persisting errors, a text box will appear
|
|
||||||
showing the errors. You can correct these errors within 'git cola' by
|
|
||||||
right-clicking on the file in which the error occurred and selecting
|
|
||||||
'Launch Diff Tool'. Make necessary corrections, close the Diff Tool and
|
|
||||||
'Stage' the corrected file again. It might be necessary to refresh
|
|
||||||
'git cola' in order for the file to be shown under 'Modified' again.
|
|
||||||
Note: Be sure to add any other changes that haven't already been
|
|
||||||
explained in the extended description.
|
|
||||||
|
|
||||||
When ready, select 'Commit' again. Once all errors have been satisfied
|
|
||||||
and the commit succeeds, move to the command line and run 'git push'.
|
|
||||||
**Note:** To submit as a draft, use 'git push origin HEAD:refs/drafts/master'
|
|
||||||
Submitting as a draft means that your commit will be on coreboot.org, but is
|
|
||||||
only visible to those you add as reviewers.
|
|
||||||
|
|
||||||
## Part 5: Getting your commit reviewed
|
|
||||||
|
|
||||||
Your commits can now be seen on review.coreboot.org if you select “Your”
|
|
||||||
and click on “Changes” and can be reviewed by others. Your code will
|
|
||||||
first be reviewed by build bot (Jenkins), which will either give you a warning
|
|
||||||
or verify a successful build; if so, your commit will receive a +1. Other
|
|
||||||
users may also give your commit +1. For a commit to be merged, it needs
|
|
||||||
to receive a +2.**Note:** A +1 and a +1 does not make a +2. Only certain users
|
|
||||||
can give a +2.
|
|
||||||
|
|
||||||
## Part 6 (optional): bash-git-prompt
|
|
||||||
|
|
||||||
To help make it easier to understand the state of the git repository
|
|
||||||
without running 'git status' or 'git log', there is a way to make the
|
|
||||||
command line show the status of the repository at every point. This
|
|
||||||
is through bash-git-prompt.
|
|
||||||
|
|
||||||
Instructions for installing this are found at:
|
|
||||||
https://github.com/magicmonty/bash-git-prompt
|
|
||||||
**Note:** Feel free to search for different versions of git prompt,
|
|
||||||
as this one is specific to bash.
|
|
||||||
|
|
||||||
Alternatively, follow the instructions below:
|
|
||||||
Run the following two commands in the command line:
|
|
||||||
|
|
||||||
cd
|
|
||||||
git clone https://github.com/magicmonty/bash-git-prompt.git .bash-git-prompt --depth=1
|
|
||||||
|
|
||||||
**Note:** cd will change your directory to your home directory, so the
|
|
||||||
git clone command will be run there.
|
|
||||||
|
|
||||||
Finally, open the ~/.bashrc file and append the following two lines:
|
|
||||||
|
|
||||||
GIT_PROMPT_ONLY_IN_REPO=1
|
|
||||||
source ~/.bash-git-prompt/gitprompt.sh
|
|
||||||
|
|
||||||
Now, whenever you are in a git repository, it will continuously display
|
|
||||||
its state.
|
|
||||||
|
|
||||||
There also are additional configurations that you can change depending on your
|
|
||||||
preferences. If you wish to do so, look at the "All configs for .bashrc" section
|
|
||||||
on https://github.com/magicmonty/bash-git-prompt. Listed in that section are
|
|
||||||
various lines that you can copy, uncomment and add to your .bashrc file to
|
|
||||||
change the configurations. Example configurations include avoid fetching remote
|
|
||||||
status, and supporting versions of Git older than 1.7.10.
|
|
||||||
|
|
||||||
## Appendix: Miscellaneous Advice
|
|
||||||
|
|
||||||
### Updating a commit after running git push:
|
|
||||||
|
|
||||||
Suppose you would like to update a commit that has already been pushed to the
|
|
||||||
remote repository. If the commit you wish to update is the most recent
|
|
||||||
commit you have made, after making your desired changes, stage the files
|
|
||||||
(either using git add or in git cola), and amend the commit. To do so,
|
|
||||||
if you are using the command line, run "git commit --amend." If you are
|
|
||||||
using git cola, click on the gear icon located on the upper left side under
|
|
||||||
**Commit** and select **Amend Last Commit** in the drop down menu. Then, stage
|
|
||||||
the files you have changed, commit the changes, and run git push to push the
|
|
||||||
changes to the remote repository. Your change should be reflected in Gerrit as
|
|
||||||
a new patch set.
|
|
||||||
|
|
||||||
If, however, the commit you wish to update is not the most recent commit you
|
|
||||||
have made, you will first need to checkout that commit. To do so, find the
|
|
||||||
URL of the commit on <https://review.coreboot.org> and go to that page; if
|
|
||||||
the commit is one that you previously pushed, it can be found by selecting
|
|
||||||
**My** and then **Changes** in the upper left corner. To checkout this commit,
|
|
||||||
in the upper right corner, click on **Download**, and copy the command listed
|
|
||||||
next to checkout by clicking **Copy to clipboard**. Then, run the copied
|
|
||||||
command in your coreboot repository. Now, the last commit should be the most
|
|
||||||
recent commit to that patch; to update it, make your desired changes, stage
|
|
||||||
the files, then amend and push the commit using the instructions in the above
|
|
||||||
paragraph.
|
|
@ -8,8 +8,9 @@ listed as consumable is subject to change without notice.
|
|||||||
## Background and Usage
|
## Background and Usage
|
||||||
|
|
||||||
coreboot passes information to downstream users using coreboot tables. These
|
coreboot passes information to downstream users using coreboot tables. These
|
||||||
table definitions can be found in src/include/boot/coreboot_tables.h and
|
table definitions can be found in
|
||||||
payloads/libpayload/include/coreboot_tables.h respectively within coreboot
|
`./src/commonlib/include/commonlib/coreboot_tables.h` and
|
||||||
|
`./payloads/libpayload/include/coreboot_tables.h` respectively within coreboot
|
||||||
and libpayload. One of the most vital and important pieces of information
|
and libpayload. One of the most vital and important pieces of information
|
||||||
found within these tables is the memory map of the system indicating
|
found within these tables is the memory map of the system indicating
|
||||||
available and reserved memory.
|
available and reserved memory.
|
153
Documentation/lib/flashmap.md
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
# Flashmap and Flashmap Descriptor in coreboot
|
||||||
|
|
||||||
|
## Flashmap
|
||||||
|
|
||||||
|
[Flashmap](https://code.google.com/p/flashmap) (FMAP) is a binary format to
|
||||||
|
describe partitions in a flash chip. It was added to coreboot to support the
|
||||||
|
requirements of Chromium OS firmware but then was also used in other scenarios
|
||||||
|
where precise placement of data in flash was necessary, or for data that is
|
||||||
|
written to at runtime, as CBFS is considered too fragile for such situations.
|
||||||
|
The Flashmap implementation inside coreboot is the de facto standard today.
|
||||||
|
|
||||||
|
Flashmap partitions the image into clearly delimited sections and some of those
|
||||||
|
sections may be CBFSes that can hold arbitrary-length files (at least one, the
|
||||||
|
default CBFS, called `COREBOOT`). General guidance is that everything with
|
||||||
|
strict layout requirements (e.g. must be aligned to erase blocks or
|
||||||
|
something else) should have its own Flashmap section, and everything else should
|
||||||
|
normally go into CBFS.
|
||||||
|
|
||||||
|
The Flashmap itself starts with a header `struct fmap` and followed by a list of
|
||||||
|
section descriptions in `struct fmap_area`.
|
||||||
|
|
||||||
|
### Header
|
||||||
|
The header `struct fmap` has following fields:
|
||||||
|
* `signature`: 8 characters as `"__FMAP__"`.
|
||||||
|
* `ver_major`: one byte for major version (currently only 1).
|
||||||
|
* `ver_minor`: one byte for minor version (current value is 1).
|
||||||
|
* `base`: 64 bit integer for the address of the firmware binary.
|
||||||
|
* `size`: 32 bit integer for the size of firmware binary in bytes.
|
||||||
|
* `name`: 32 characters for the name of the firmware binary.
|
||||||
|
* `nareas`: 16 bit integer for the number of area definitions (i.e., how many
|
||||||
|
sections are in this firmware image) following the header.
|
||||||
|
|
||||||
|
### Area Definition
|
||||||
|
The section is defined by `struct fmap_area` with following fields:
|
||||||
|
* `offset`: 32 bit integer for where the area starts (relative to `base` in
|
||||||
|
header).
|
||||||
|
* `size`: 32 bit integer for the size of area in bytes.
|
||||||
|
* `name`: 32 characters for a descriptive name of this area. Should be unique to
|
||||||
|
all sections inside same Flashmap.
|
||||||
|
* `flags`: 16 bit integer for attributes of this area (see below).
|
||||||
|
|
||||||
|
### Area Flags
|
||||||
|
Currently the defined values for `flags` in `struct fmap_area` are:
|
||||||
|
* `FMAP_AREA_PRESERVE`: suggesting the section should be preserved when
|
||||||
|
updating firmware, usually for product data like serial number, MAC address,
|
||||||
|
or calibration and cache data.
|
||||||
|
* `FMAP_AREA_STATIC`: Not really used today.
|
||||||
|
* `FMAP_AREA_COMPRESSED`: Not really used today.
|
||||||
|
* `FMAP_AREA_RO`: Not really used today.
|
||||||
|
|
||||||
|
### FMAP section
|
||||||
|
The whole Flashmap (`struct fmap` and list of `struct fmap_area`) should be
|
||||||
|
stored in a standalone section named as `FMAP` (which should be also described
|
||||||
|
by the Flashmap itself in `struct fmap_area`). There's no restriction for where
|
||||||
|
it should be located (or how large), but usually we need to do a linear or
|
||||||
|
binary search on whole firmware binary image to find Flashmap so a properly
|
||||||
|
aligned address would be better.
|
||||||
|
|
||||||
|
### COREBOOT section
|
||||||
|
coreboot firmware images (`coreboot.rom`) should have at least one Flashmap
|
||||||
|
section that is reserved for CBFS. Usually it is named as `COREBOOT`.
|
||||||
|
|
||||||
|
## Flashmap Descriptor
|
||||||
|
|
||||||
|
Since coreboot is starting to use a "partition" of Flashmap to describe the
|
||||||
|
flash chip layout (both at runtime and when flashing a new image onto a
|
||||||
|
chip), the project needs a reasonably expressive plain text format for
|
||||||
|
representing such sections in the source tree.
|
||||||
|
|
||||||
|
Flashmap Descriptor (FMD) is a [language and
|
||||||
|
compiler](https://chromium-review.googlesource.com/#/c/255031) inside coreboot
|
||||||
|
utility folder that can be used to generate final firmware images (i.e.
|
||||||
|
`coreboot.rom`) formatted by Flashmap.
|
||||||
|
|
||||||
|
The FMD implementation is in coreboot `utils/cbfstool` folder. Here's an
|
||||||
|
informal language description:
|
||||||
|
|
||||||
|
```
|
||||||
|
# <line comment>
|
||||||
|
<image name>[@<memory-mapped address>] <image size> {
|
||||||
|
<section name>[(flags)][@<offset from start of image>] [<section size>] [{
|
||||||
|
<subsection name>[@<offset from start of parent section>] [<subsection size>] [{
|
||||||
|
# Sections can be nested as deeply as desired
|
||||||
|
<subsubsection name>[(flags)][@...] [...] [{...}]
|
||||||
|
}]
|
||||||
|
[<subsection name>[(flags)][@...] [...] [{...}]]
|
||||||
|
# There can be many subsections at each level of nesting: they will be inserted
|
||||||
|
# sequentially, and although gaps are allowed, any provided offsets are always
|
||||||
|
# relative to the closest parent node's and must be strictly increasing with neither
|
||||||
|
# overlapping nor degenerate-size sections.
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that the above example contains a few symbols that are actually meta
|
||||||
|
syntax, and therefore have neither meaning nor place in a real file. The `<.*>`s
|
||||||
|
indicate placeholders for parameters:
|
||||||
|
|
||||||
|
* The names are strings, which are provided as single-word (no white space)
|
||||||
|
groups of syntactically unimportant symbols (i.e. every thing except `@`, `{`,
|
||||||
|
and `}`): they are not surrounded by quotes or any other form of delimiter.
|
||||||
|
* The other fields are non-negative integers, which may be given as decimal or
|
||||||
|
hexadecimal; in either case, a `K`, `M`, or `G` may be appended (without
|
||||||
|
intermediate white space) as a multiplier.
|
||||||
|
* Comments consist of anything one manages to enter, provided it doesn't start a
|
||||||
|
new line.
|
||||||
|
|
||||||
|
The `[.*]`s indicate that a portion of the file could be omitted altogether:
|
||||||
|
|
||||||
|
* Just because something is noted as optional doesn't mean it is in every case:
|
||||||
|
the answer might actually depend on which other information is---or
|
||||||
|
isn't---provided.
|
||||||
|
* The "flag" specifies the attribute or type for given section. The most
|
||||||
|
important supported flag is "CBFS", which indicates the section will contain
|
||||||
|
a CBFS structure.
|
||||||
|
* In particular, it is only legal to place a (CBFS) flag on a leaf section; that
|
||||||
|
is, choosing to add child sections excludes the possibility of putting a CBFS
|
||||||
|
in their parent. Such flags are only used to decide where CBFS empty file
|
||||||
|
headers should be created, and do not result in the storage of any additional
|
||||||
|
metadata in the resulting FMAP section.
|
||||||
|
|
||||||
|
Additionally, it's important to note these properties of the overall file and
|
||||||
|
its values:
|
||||||
|
|
||||||
|
* Other than within would-be strings and numbers, white space is ignored. It
|
||||||
|
goes without saying that such power comes with responsibility, which is why
|
||||||
|
this sentence is here.
|
||||||
|
* Although the `section name` must be globally unique, one of them may (but is
|
||||||
|
not required to) match the image name.
|
||||||
|
* It is a syntax error to supply a number (besides 0) that begins with the
|
||||||
|
character `0`, as there is no intention of adding octals to the mix.
|
||||||
|
* The image's memory address should be present on (and only on) layouts for
|
||||||
|
memory-mapped chips.
|
||||||
|
* Although it may be evident from above, all `section` offsets are relative only
|
||||||
|
to the immediate parent. There is no way to include an absolute offset (i.e.
|
||||||
|
from the beginning of flash), which means that it is "safe" to reorder the
|
||||||
|
sections within a particular level of nesting, as long as the change doesn't
|
||||||
|
cause their positions and sizes to necessitate overlap or zero sizes.
|
||||||
|
* A `section` with omitted offset is assumed to start at as low a position as
|
||||||
|
possible (with no consideration of alignment) and one with omitted size is
|
||||||
|
assumed to fill the remaining space until the next sibling or before the end
|
||||||
|
of its parent.
|
||||||
|
* It's fine to omit any `section`'s offset, size, or both, provided its position
|
||||||
|
and size are still unambiguous in the context of its *sibling* sections and
|
||||||
|
its parent's *size*. In particular, knowledge of one .*section 's children or
|
||||||
|
the `section`s' common parent's siblings will not be used for this purpose.
|
||||||
|
* Although `section`s are not required to have children, the flash chip as a
|
||||||
|
whole must have at least one.
|
||||||
|
* Though the braces after `section`s may be omitted for those that have no
|
||||||
|
children, if they are present, they must contain at least one child.
|
||||||
|
|
||||||
|
To see the formal description of the language, please refer to the Lex and Yacc
|
||||||
|
files: `fmd_scanner.l` and `fmd_scanner.y`.
|
9
Documentation/lib/index.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Library-specific documentation
|
||||||
|
|
||||||
|
This section contains documentation about coreboot internal technical
|
||||||
|
information and libraries.
|
||||||
|
|
||||||
|
## Structure and layout
|
||||||
|
- [Flashmap and Flashmap Descriptor](flashmap.md)
|
||||||
|
- [ABI data consumption](abi-data-consumption.md)
|
||||||
|
- [Timestamps](timestamp.md)
|
@ -6,6 +6,7 @@
|
|||||||
## Supported architectures
|
## Supported architectures
|
||||||
|
|
||||||
* aarch64
|
* aarch64
|
||||||
|
* riscv
|
||||||
|
|
||||||
## Supported FIT sections
|
## Supported FIT sections
|
||||||
|
|
||||||
@ -24,6 +25,7 @@ The section must be named in order to be found by the FIT parser:
|
|||||||
## Architecture specifics
|
## Architecture specifics
|
||||||
|
|
||||||
The FIT parser needs architecure support.
|
The FIT parser needs architecure support.
|
||||||
|
|
||||||
### aarch64
|
### aarch64
|
||||||
The source code can be found in `src/arch/arm64/fit_payload.c`.
|
The source code can be found in `src/arch/arm64/fit_payload.c`.
|
||||||
|
|
||||||
@ -31,6 +33,13 @@ On aarch64 the kernel (a section named 'kernel') must be in **Image**
|
|||||||
format and it needs a devicetree (a section named 'fdt') to boot.
|
format and it needs a devicetree (a section named 'fdt') to boot.
|
||||||
The kernel will be placed close to "*DRAMSTART*".
|
The kernel will be placed close to "*DRAMSTART*".
|
||||||
|
|
||||||
|
### RISC-V
|
||||||
|
The source code can be found in `src/arch/riscv/fit_payload.c`.
|
||||||
|
|
||||||
|
On RISC-V the kernel (a section named 'kernel') must be in **Image**
|
||||||
|
format and it needs a devicetree (a section named 'fdt') to boot.
|
||||||
|
The kernel will be placed close to "*DRAMSTART*".
|
||||||
|
|
||||||
### Other
|
### Other
|
||||||
Other architectures aren't supported.
|
Other architectures aren't supported.
|
||||||
|
|
||||||
@ -49,7 +58,7 @@ Supported compression algorithms:
|
|||||||
The config entries contain a compatible string, that is used to find a
|
The config entries contain a compatible string, that is used to find a
|
||||||
matching config.
|
matching config.
|
||||||
|
|
||||||
The following mainboard specific funtions provide the BOARDID and SKUID:
|
The following mainboard specific functions provide the BOARDID and SKUID:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
uint32_t board_id(void);
|
uint32_t board_id(void);
|
||||||
|
@ -1,29 +1,5 @@
|
|||||||
# Timestamps
|
# Timestamps
|
||||||
|
|
||||||
## Table of Contents
|
|
||||||
|
|
||||||
Introduction
|
|
||||||
- Transition from cache to cbmem
|
|
||||||
|
|
||||||
Data structures used
|
|
||||||
- cache_state
|
|
||||||
- table
|
|
||||||
- entries
|
|
||||||
|
|
||||||
Function APIs
|
|
||||||
- timestamp_init
|
|
||||||
- timestamp_add
|
|
||||||
- timestamp_add_now
|
|
||||||
- timestamp_sync
|
|
||||||
|
|
||||||
Use / Test Cases
|
|
||||||
- Case 1: Timestamp Region Exists
|
|
||||||
- Case 2: No timestamp region, fresh boot, cbmem_initialize called after timestamp_init
|
|
||||||
- Case 3: No timestamp region, fresh boot, cbmem_initialize called before timestamp_init
|
|
||||||
- Case 4: No timestamp region, resume, cbmem_initialize called after timestamp_init
|
|
||||||
- Case 5: No timestamp region, resume, cbmem_initialize called before timestamp_init
|
|
||||||
|
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
The aim of the timestamp library is to make it easier for different boards
|
The aim of the timestamp library is to make it easier for different boards
|
||||||
@ -64,7 +40,7 @@ After such a transition, timestamp_init() must not be run again.
|
|||||||
|
|
||||||
The main structure that maintains information about the timestamp cache is:
|
The main structure that maintains information about the timestamp cache is:
|
||||||
|
|
||||||
```
|
```c
|
||||||
struct __packed timestamp_cache {
|
struct __packed timestamp_cache {
|
||||||
uint16_t cache_state;
|
uint16_t cache_state;
|
||||||
struct timestamp_table table;
|
struct timestamp_table table;
|
||||||
@ -77,7 +53,7 @@ struct __packed timestamp_cache {
|
|||||||
The state of the cache is maintained by `cache_state` attribute which can
|
The state of the cache is maintained by `cache_state` attribute which can
|
||||||
be any one of the following:
|
be any one of the following:
|
||||||
|
|
||||||
```
|
```c
|
||||||
enum {
|
enum {
|
||||||
TIMESTAMP_CACHE_UNINITIALIZED = 0,
|
TIMESTAMP_CACHE_UNINITIALIZED = 0,
|
||||||
TIMESTAMP_CACHE_INITIALIZED,
|
TIMESTAMP_CACHE_INITIALIZED,
|
||||||
@ -107,7 +83,7 @@ anymore. Thus, the cache state is set to `CACHE_NOT_NEEDED`, which allows
|
|||||||
This field is represented by a structure which provides overall
|
This field is represented by a structure which provides overall
|
||||||
information about the entries in the timestamp area:
|
information about the entries in the timestamp area:
|
||||||
|
|
||||||
```
|
```c
|
||||||
struct timestamp_table {
|
struct timestamp_table {
|
||||||
uint64_t base_time;
|
uint64_t base_time;
|
||||||
uint32_t max_entries;
|
uint32_t max_entries;
|
||||||
@ -127,7 +103,7 @@ This field holds the details of each timestamp entry, upto a maximum
|
|||||||
of `MAX_TIMESTAMP_CACHE` which is defined as 16 entries. Each entry is
|
of `MAX_TIMESTAMP_CACHE` which is defined as 16 entries. Each entry is
|
||||||
defined by:
|
defined by:
|
||||||
|
|
||||||
```
|
```c
|
||||||
struct timestamp_entry {
|
struct timestamp_entry {
|
||||||
uint32_t entry_id;
|
uint32_t entry_id;
|
||||||
uint64_t entry_stamp;
|
uint64_t entry_stamp;
|
BIN
Documentation/mainboard/51nb/x210.jpg
Normal file
After Width: | Height: | Size: 48 KiB |
46
Documentation/mainboard/51nb/x210.md
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
# 51NB X210
|
||||||
|
|
||||||
|
## Extracting vendor EC firmware
|
||||||
|
|
||||||
|
EC firmware is included in the SPI image. To extract it, run:
|
||||||
|
|
||||||
|
```
|
||||||
|
dd bs=64K skip=32 count=1 if=bios.rom of=ec.bin
|
||||||
|
```
|
||||||
|
|
||||||
|
and ensure that you have a file that includes the string "Insyde Software Corp".
|
||||||
|
|
||||||
|
## Flashing instructions
|
||||||
|
|
||||||
|
This can be performed using the internal SPI controller, even when flashing
|
||||||
|
from stock firmware. Use `flashrom -p internal` and follow the appropriate
|
||||||
|
flashrom instructions to force it. Alternatively, external flashing has been
|
||||||
|
tested with Dediprog SF100 and SF600 and using a Beaglebone Black. The flash
|
||||||
|
is located on the upper side of the motherboard, below the keyboard
|
||||||
|
connector. It is circled in red here:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Flashing a subset of the ROM
|
||||||
|
|
||||||
|
If you want to flash coreboot without extracting firmware blobs, you can
|
||||||
|
flash coreboot without overwriting those blobs. After building coreboot,
|
||||||
|
create a layout file with the following content:
|
||||||
|
|
||||||
|
```
|
||||||
|
00000000:001fffff me
|
||||||
|
00200000:0020ffff ec
|
||||||
|
00210000:007fffff main
|
||||||
|
```
|
||||||
|
|
||||||
|
and run flashrom with the `--layout rom.layout --image main` arguments. This
|
||||||
|
will flash the main firmware without overwriting the existing EC or ME
|
||||||
|
firmware.
|
||||||
|
|
||||||
|
## Working
|
||||||
|
|
||||||
|
All hardware features are believed to be working, although the SD reader is
|
||||||
|
untested. Note that certain hotkeys don't work (including the ThinkVantage
|
||||||
|
button) - this is a limitation of the EC firmware, and these keys also
|
||||||
|
generate no events under the stock vendor firmware.
|
||||||
|
|
BIN
Documentation/mainboard/amd/padmelon/padmelon.jpg
Normal file
After Width: | Height: | Size: 79 KiB |
80
Documentation/mainboard/amd/padmelon/padmelon.md
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
# Padmelon board
|
||||||
|
|
||||||
|
## Specs (with Merlin Falcon SOC)
|
||||||
|
|
||||||
|
* Two 260-pin DDR4 SO-DIMM slots, 1.2V DDR4-1333/1600/1866/2133 SO-DIMMs
|
||||||
|
Supports 4GB, 8GB and 16GB DDR4 unbuffered ECC (Merlin Falcon)SO-DIMMs
|
||||||
|
* Can use Prairie Falcon, Brown Falcon, Merlin Falcon, though coreboot
|
||||||
|
code is specific for Merlin Falcon SOC. Some specs will change if not
|
||||||
|
using Merlin Falcon.
|
||||||
|
* One half mini PCI-Express slot on back side of mainboard
|
||||||
|
* One PCI Express® 3.0 x8 slot
|
||||||
|
* Two SATA3 ports with 6Gb/s data transfer rate
|
||||||
|
* Two USB 2.0 ports at rear panel
|
||||||
|
* Two USB 3.0 ports at rear panel
|
||||||
|
* Dual Gigabit Ethernet from Realtek RTL8111F Gigabit controller
|
||||||
|
* 6-channel High-Definition audio from Realtek ALC662 codec
|
||||||
|
* One soldered down SPI flash with dediprog header
|
||||||
|
|
||||||
|
## Mainboard
|
||||||
|
|
||||||
|
![mainboard][padmelon]
|
||||||
|
|
||||||
|
Three items are marked in this picture
|
||||||
|
1. dediprog header
|
||||||
|
2. memory dimms, address 0xA0 and 0xA4
|
||||||
|
3. SATA cables connected to motherboard
|
||||||
|
|
||||||
|
## Back panel
|
||||||
|
|
||||||
|
![back panel][padmelon_io]
|
||||||
|
|
||||||
|
* The lower serial port is UART A (debug serial)
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Type | Value |
|
||||||
|
+=====================+====================+
|
||||||
|
| Socketed flash | no |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Model | Macronix MX256435E |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Size | 8 MiB |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Flash programing | dediprog header |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Package | SOIC-8 |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Write protection | No |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+---------------+------------------------------+
|
||||||
|
| Fan control | Using fintek F81803A |
|
||||||
|
+---------------+------------------------------+
|
||||||
|
| CPU | Merlin Falcon (see reference)|
|
||||||
|
+---------------+------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Description of pictures within this document
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+----------------------------+----------------------------------------+
|
||||||
|
|padmelon.jpg | Motherboard with components identified |
|
||||||
|
+----------------------------+----------------------------------------+
|
||||||
|
|padmelon_io.jpg | Back panel picture |
|
||||||
|
+----------------------------+----------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
[Merlin Falcon BKDG][merlinfalcon]
|
||||||
|
|
||||||
|
[merlinfalcon]: ../../../soc/amd/family15h.md
|
||||||
|
[padmelon]: padmelon.jpg
|
||||||
|
[padmelon_io]: padmelon_io.jpg
|
BIN
Documentation/mainboard/amd/padmelon/padmelon_io.jpg
Normal file
After Width: | Height: | Size: 32 KiB |
134
Documentation/mainboard/asrock/h110m-dvs.md
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
# ASRock H110M-DVS
|
||||||
|
|
||||||
|
This page describes how to run coreboot on the [ASRock H110M-DVS].
|
||||||
|
|
||||||
|
## Required proprietary blobs
|
||||||
|
|
||||||
|
Mainboard is based on Intel Skylake/Kaby Lake processor and H110 Chipset.
|
||||||
|
Intel company provides [Firmware Support Package (2.0)](../../soc/intel/fsp/index.md)
|
||||||
|
(intel FSP 2.0) to initialize this generation silicon. Please see this
|
||||||
|
[document](../../soc/intel/code_development_model/code_development_model.md).
|
||||||
|
|
||||||
|
FSP Information:
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+-----------------------------+-------------------+-------------------+
|
||||||
|
| FSP Project Name | Directory | Specification |
|
||||||
|
+-----------------------------+-------------------+-------------------+
|
||||||
|
| 7th Generation Intel® Core™ | KabylakeFspBinPkg | 2.0 |
|
||||||
|
| processors and chipsets | | |
|
||||||
|
| (formerly Kaby Lake) | | |
|
||||||
|
+-----------------------------+-------------------+-------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Building coreboot
|
||||||
|
|
||||||
|
The following steps set the default parameters for this board to build a
|
||||||
|
fully working image:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make distclean
|
||||||
|
touch .config
|
||||||
|
./util/scripts/config --enable VENDOR_ASROCK
|
||||||
|
./util/scripts/config --enable BOARD_ASROCK_H110M_DVS
|
||||||
|
./util/scripts/config --set-str REALTEK_8168_MACADDRESS "xx:xx:xx:xx:xx:xx"
|
||||||
|
make olddefconfig
|
||||||
|
```
|
||||||
|
|
||||||
|
However, it is strongly advised to use `make menuconfig` afterwards
|
||||||
|
(or instead), so that you can see all of the settings.
|
||||||
|
|
||||||
|
Use the following command to disable the serial console if debugging
|
||||||
|
output is not required:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./util/scripts/config --disable CONSOLE_SERIAL
|
||||||
|
```
|
||||||
|
|
||||||
|
However, a more flexible method is to change the console log level from
|
||||||
|
within an OS using `util/nvramtool`, or with the `nvramcui` payload.
|
||||||
|
|
||||||
|
Now, run `make` to build the coreboot image.
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
### Internal programming
|
||||||
|
|
||||||
|
The main SPI flash can be accessed using [flashrom]. By default, only
|
||||||
|
the BIOS region of the flash is writable. If you wish to change any
|
||||||
|
other region, such as the Management Engine or firmware descriptor, then
|
||||||
|
an external programmer is required (unless you find a clever way around
|
||||||
|
the flash protection). More information about this [here](../../flash_tutorial/index.md).
|
||||||
|
|
||||||
|
### External programming
|
||||||
|
|
||||||
|
The flash chip is a 8 MiB socketed DIP-8 chip. Specifically, it's a
|
||||||
|
Macronix MX25L6473E, whose datasheet can be found [here][MX25L6473E].
|
||||||
|
The chip is located to the bottom right-hand side of the board. For
|
||||||
|
a precise location, refer to section 1.3 (Motherboard Layout) of the
|
||||||
|
[H110M-DVS manual], where the chip is labelled "64Mb BIOS". Take note of
|
||||||
|
the chip's orientation, remove it from its socket, and flash it with
|
||||||
|
an external programmer. For reference, the notch in the chip should be
|
||||||
|
facing towards the bottom of the board.
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
|
||||||
|
- The VGA port doesn't work. Discrete graphic card is used as primary
|
||||||
|
device for display output (if CONFIG_ONBOARD_VGA_IS_PRIMARY is not
|
||||||
|
set). Dynamic switching between iGPU and PEG is not yet supported.
|
||||||
|
|
||||||
|
- SuperIO GPIO pin is used to reset Realtek chip. However, since the
|
||||||
|
Logical Device 7 (GPIO6, GPIO7, GPIO8) is not initialized, the network
|
||||||
|
chip is in a reset state all the time.
|
||||||
|
|
||||||
|
## Untested
|
||||||
|
|
||||||
|
- parallel port
|
||||||
|
- PS/2 keyboard
|
||||||
|
- PS/2 mouse
|
||||||
|
- EHCI debug
|
||||||
|
- TPM
|
||||||
|
- infrared module
|
||||||
|
- chassis intrusion header
|
||||||
|
- chassis speaker header
|
||||||
|
|
||||||
|
## Working
|
||||||
|
|
||||||
|
- integrated graphics init with libgfxinit (see [Known issues](#known-issues))
|
||||||
|
- PCIe x1
|
||||||
|
- PEG x16 Gen3
|
||||||
|
- SATA
|
||||||
|
- USB
|
||||||
|
- serial port
|
||||||
|
- onboard audio
|
||||||
|
- using `me_cleaner`
|
||||||
|
- using `flashrom`
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
|
||||||
|
- NCT6791D GPIOs
|
||||||
|
- onboard network (see [Known issues](#known-issues))
|
||||||
|
- S3 suspend/resume
|
||||||
|
- Wake-on-LAN
|
||||||
|
- hardware monitor
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| CPU | Intel Skylake/Kaby Lake (LGA1151) |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| PCH | Intel Sunrise Point H110 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O | Nuvoton NCT6791D |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| EC | None |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Coprocessor | Intel Management Engine |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
[ASRock H110M-DVS]: https://www.asrock.com/mb/Intel/H110M-DVS%20R2.0/
|
||||||
|
[MX25L6473E]: http://www.macronix.com/Lists/Datasheet/Attachments/7380/MX25L6473E,%203V,%2064Mb,%20v1.4.pdf
|
||||||
|
[flashrom]: https://flashrom.org/Flashrom
|
||||||
|
[H110M-DVS manual]: http://asrock.pc.cdn.bitgravity.com/Manual/H110M-DVS%20R2.0.pdf
|
@ -70,7 +70,7 @@ facing towards the bottom of the board.
|
|||||||
- The VGA port doesn't work until the OS reinitialises the display.
|
- The VGA port doesn't work until the OS reinitialises the display.
|
||||||
|
|
||||||
- There is no automatic, OS-independent fan control. This is because
|
- There is no automatic, OS-independent fan control. This is because
|
||||||
the super I/O hardware monitor can only obtain valid CPU temperature
|
the Super I/O hardware monitor can only obtain valid CPU temperature
|
||||||
readings from the PECI agent, but the required driver doesn't exist
|
readings from the PECI agent, but the required driver doesn't exist
|
||||||
in coreboot. The `coretemp` driver can still be used for accurate CPU
|
in coreboot. The `coretemp` driver can still be used for accurate CPU
|
||||||
temperature readings from an OS.
|
temperature readings from an OS.
|
||||||
|
198
Documentation/mainboard/asus/f2a85-m.md
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
# ASUS F2A85-M
|
||||||
|
|
||||||
|
This page describes how to run coreboot on the [ASUS F2A85-M].
|
||||||
|
|
||||||
|
## Variants
|
||||||
|
- ASUS F2A85-M - Working
|
||||||
|
- ASUS F2A85-M LE - Working
|
||||||
|
- ASUS F2A85-M PRO - Working
|
||||||
|
- ASUS F2A85-M2 - Working
|
||||||
|
- ASUS F2A85-M/CSM - Unsure if WIP.
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
Both "Trinity" and "Richland" desktop processing units are working,
|
||||||
|
the CPU architecture in these CPUs/APUs is [Piledriver],
|
||||||
|
and their GPU is [TeraScale 3] (VLIW4-based).
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| F2A85-M | |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| DDR voltage IC | Nuvoton NCT3933U (AUX SMBUS 0x15) |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Network | Realtek RTL8111F |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Northbridge | Integrated into CPU with IMC and GPU (APUs only) |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Southbridge | Hudson-D4 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Sound IC | Realtek ALC887 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O | ITE 8603E |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| VRM controller | DIGI VRM ASP1106 (Rebranded RT8894A - SMBUS 0x20)|
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| F2A85-M LE | |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| DDR voltage IC | Nuvoton NCT3933U (AUX SMBUS 0x15 - unconfirmed) |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Network | Realtek RTL8111F |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Northbridge | Integrated into CPU with IMC and GPU(APUs only) |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Southbridge | Hudson-D4 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Sound IC | Realtek ALC887 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O | ITE 8623E |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| VRM controller | DIGI VRM ASP1106 (Rebranded RT8894A - SMBUS 0x20)|
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| F2A85-M PRO | |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| DDR voltage IC | Nuvoton NCT3933U (?) |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Network | Realtek RTL8111F - Not working |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Northbridge | Integrated into CPU with IMC and GPU(APUs only) |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Southbridge | Hudson-D4 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Sound IC | Realtek ALC887 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O | Nuvoton NCT6779D |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| VRM controller | DIGI VRM ASP1107 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+---------------------+------------+
|
||||||
|
| Type | Value |
|
||||||
|
+=====================+============+
|
||||||
|
| Socketed flash | yes |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Model | W25Q64F |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Size | 8 MiB |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Package | DIP-8 |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Write protection | no |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Dual BIOS feature | no |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Internal flashing | yes |
|
||||||
|
+---------------------+------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
### Internal programming
|
||||||
|
|
||||||
|
The main SPI flash can be accessed using [flashrom].
|
||||||
|
UEFI builds that allow flash chip access:
|
||||||
|
> v5016 is untested, but expected to work as well
|
||||||
|
> v5018
|
||||||
|
> v5103
|
||||||
|
> v5104
|
||||||
|
> v5107
|
||||||
|
> v5202
|
||||||
|
> v6002
|
||||||
|
> v6004
|
||||||
|
> v6102
|
||||||
|
> v6402
|
||||||
|
> v6404 (requires downgrading to v6402 to flash coreboot)
|
||||||
|
> v6501 (requires downgrading to v6402 to flash coreboot)
|
||||||
|
> v6502 (requires downgrading to v6402 to flash coreboot)
|
||||||
|
|
||||||
|
Build v6502, v6501 and v6404 do not allow access to the flash chip.
|
||||||
|
Fortunately it is possible to downgrade build v6502, v6501, v6404 to v6402, with EZFlash.
|
||||||
|
Downgrading is done by downloading build v6402 from ASUS' F2A85-M download page
|
||||||
|
and copying it to (the root directory of) a FAT32 formatted USB flash drive.
|
||||||
|
Enter the EFI setup, switch to advanced mode if necessary,
|
||||||
|
open the 'Tool' tab and select "ASUS EZ Flash 2 Utility".
|
||||||
|
|
||||||
|
## Integrated graphics
|
||||||
|
|
||||||
|
### Option 1: Retrieve the VGA optionrom from the vendor EFI binary by running:
|
||||||
|
|
||||||
|
# dd if=/dev/mem of=vgabios.bin bs=1k count=64 skip=768
|
||||||
|
|
||||||
|
### Option 2: Extract from the vendor binary
|
||||||
|
|
||||||
|
Download the BIOS from the Support section at [ASUS F2A85-M].
|
||||||
|
Using MMTool Aptio (versions 4.5.0 and 5.0.0):
|
||||||
|
- Load image, click on 'Extract tab'
|
||||||
|
- Select the 'export path' and 'link present' options
|
||||||
|
- Choose option ROM '1002,9900' and click on 'Extract'
|
||||||
|
|
||||||
|
This version is usable for all the GPUs.
|
||||||
|
> 1002,9901 Trinity (Radeon HD 7660D)
|
||||||
|
> 1002,9904 Trinity (Radeon HD 7560D)
|
||||||
|
> 1002,990c Richland (Radeon HD 8670D)
|
||||||
|
> 1002,990e Richland (Radeon HD 8570D)
|
||||||
|
> 1002,9991 Trinity (Radeon HD 7540D)
|
||||||
|
> 1002,9993 Trinity (Radeon HD 7480D)
|
||||||
|
> 1002,9996 Richland (Radeon HD 8470D)
|
||||||
|
> 1002,9998 Richland (Radeon HD 8370D)
|
||||||
|
> 1002,999d Richland (Radeon HD 8550D)
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
|
||||||
|
- buggy USB 3.0 controller (works fine as 2.0 port)
|
||||||
|
- reboot, poweroff, S3 suspend/resume (broken since 4.8.1)
|
||||||
|
|
||||||
|
## Known issues (untested because of non-working ACPI sleep)
|
||||||
|
|
||||||
|
- blink in suspend mode (GP43, program LDN7 F8=23 and blink with F9=2 for 1s blinks)
|
||||||
|
- fix immediate resume after suspend (perhaps PCIe STS needs to be cleared)
|
||||||
|
- fix resume with USB3.0 used (perhaps there is a bug in resume.c)
|
||||||
|
|
||||||
|
## Untested
|
||||||
|
|
||||||
|
- audio over HDMI
|
||||||
|
- IOMMU
|
||||||
|
- PS/2 mouse
|
||||||
|
|
||||||
|
## TODOs
|
||||||
|
|
||||||
|
- manage to use one ATOMBIOS for all the integrated GPUs
|
||||||
|
|
||||||
|
## Working
|
||||||
|
|
||||||
|
- ACPI
|
||||||
|
- CPU frequency scaling
|
||||||
|
- flashrom under coreboot
|
||||||
|
- Gigabit Ethernet
|
||||||
|
- Hardware monitor
|
||||||
|
- Integrated graphics
|
||||||
|
- KVM
|
||||||
|
- Onboard audio
|
||||||
|
- PCIe
|
||||||
|
- PS/2 keyboard
|
||||||
|
- SATA
|
||||||
|
- Serial port
|
||||||
|
- SuperIO based fan control
|
||||||
|
- USB (XHCI is buggy)
|
||||||
|
|
||||||
|
## Extra resources
|
||||||
|
|
||||||
|
- [Board manual]
|
||||||
|
- Flash chip datasheet [W25Q64FV]
|
||||||
|
|
||||||
|
[ASUS F2A85-M]: https://www.asus.com/Motherboards/F2A85M/
|
||||||
|
[Board manual]: https://dlcdnets.asus.com/pub/ASUS/mb/SocketFM2/F2A85-M/E8005_F2A85-M.pdf
|
||||||
|
[flashrom]: https://flashrom.org/Flashrom
|
||||||
|
[Piledriver]: https://en.wikipedia.org/wiki/Piledriver_%28microarchitecture%29#APU_lines
|
||||||
|
[TeraScale 3]: https://en.wikipedia.org/wiki/TeraScale_%28microarchitecture%29#TeraScale_3
|
||||||
|
[W25Q64FV]: https://www.winbond.com/resource-files/w25q64fv%20revs%2007182017.pdf
|
77
Documentation/mainboard/asus/p5q.md
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# ASUS P5Q
|
||||||
|
|
||||||
|
This page describes how to run coreboot on the [ASUS P5Q] desktop board.
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
|
||||||
|
The following things are working in this coreboot port:
|
||||||
|
|
||||||
|
+ PCI slots
|
||||||
|
+ PCI-e slots
|
||||||
|
+ Onboard Ethernet
|
||||||
|
+ USB
|
||||||
|
+ Onboard sound card
|
||||||
|
+ PS/2 keyboard
|
||||||
|
+ All 4 DIMM slots
|
||||||
|
+ S3 suspend and resume
|
||||||
|
+ Red SATA ports
|
||||||
|
|
||||||
|
The following things are still missing from this coreboot port:
|
||||||
|
|
||||||
|
+ PS/2 mouse support
|
||||||
|
+ PATA aka IDE (because of buggy IDE controller)
|
||||||
|
+ Fan control (will be working on 100% power)
|
||||||
|
+ TPM module (support not implemented)
|
||||||
|
|
||||||
|
The following things are untested on this coreboot port:
|
||||||
|
|
||||||
|
+ S/PDIF
|
||||||
|
+ CD Audio In
|
||||||
|
+ Floppy disk drive
|
||||||
|
+ FireWire: PCI device shows up and driver loads, no further test
|
||||||
|
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+-------------------+----------------+
|
||||||
|
| Type | Value |
|
||||||
|
+===================+================+
|
||||||
|
| Socketed flash | Yes |
|
||||||
|
+-------------------+----------------+
|
||||||
|
| Model | MX25L8005 |
|
||||||
|
+-------------------+----------------+
|
||||||
|
| Size | 1 MiB |
|
||||||
|
+-------------------+----------------+
|
||||||
|
| Package | Socketed DIP-8 |
|
||||||
|
+-------------------+----------------+
|
||||||
|
| Write protection | No |
|
||||||
|
+-------------------+----------------+
|
||||||
|
| Dual BIOS feature | No |
|
||||||
|
+-------------------+----------------+
|
||||||
|
| Internal flashing | Yes |
|
||||||
|
+-------------------+----------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
You can flash coreboot into your motherboard using [this guide].
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+---------------------------------------------------+
|
||||||
|
| Northbridge | Intel P45 (called x4x in coreboot code) |
|
||||||
|
+------------------+---------------------------------------------------+
|
||||||
|
| Southbridge | Intel ICH10R (called i82801jx in coreboot code) |
|
||||||
|
+------------------+---------------------------------------------------+
|
||||||
|
| CPU (LGA775) | Model f4x, f6x, 6fx, 1067x (Pentium 4, d, Core 2) |
|
||||||
|
+------------------+---------------------------------------------------+
|
||||||
|
| SuperIO | Winbond W83667HG |
|
||||||
|
+------------------+---------------------------------------------------+
|
||||||
|
| Coprocessor | No |
|
||||||
|
+------------------+---------------------------------------------------+
|
||||||
|
| Clockgen (CK505) | ICS 9LPRS918JKLF |
|
||||||
|
+------------------+---------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
[ASUS P5Q]: https://www.asus.com/Motherboards/P5Q
|
||||||
|
[this guide]: https://doc.coreboot.org/flash_tutorial/int_flashrom.html
|
@ -49,7 +49,7 @@ region is not readable even by the host.
|
|||||||
suspend.
|
suspend.
|
||||||
|
|
||||||
- There is no automatic, OS-independent fan control. This is because
|
- There is no automatic, OS-independent fan control. This is because
|
||||||
the super I/O hardware monitor can only obtain valid CPU temperature
|
the Super I/O hardware monitor can only obtain valid CPU temperature
|
||||||
readings from the PECI agent, whose complete initialisation is not
|
readings from the PECI agent, whose complete initialisation is not
|
||||||
publicly documented. The `coretemp` driver can still be used for
|
publicly documented. The `coretemp` driver can still be used for
|
||||||
accurate CPU temperature readings.
|
accurate CPU temperature readings.
|
||||||
|
BIN
Documentation/mainboard/asus/p8h61-m_pro.jpg
Normal file
After Width: | Height: | Size: 68 KiB |
103
Documentation/mainboard/asus/p8h61-m_pro.md
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
# ASUS P8H61-M Pro
|
||||||
|
|
||||||
|
This page describes how to run coreboot on the [ASUS P8H61-M Pro].
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+---------------------+------------+
|
||||||
|
| Type | Value |
|
||||||
|
+=====================+============+
|
||||||
|
| Socketed flash | yes |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Model | W25Q32BV |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Size | 4 MiB |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Package | DIP-8 |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Write protection | no |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Dual BIOS feature | no |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Internal flashing | yes |
|
||||||
|
+---------------------+------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
The flash IC is located right next to one of the SATA ports:
|
||||||
|

|
||||||
|
|
||||||
|
### Internal programming
|
||||||
|
|
||||||
|
The main SPI flash can be accessed using [flashrom]. By default, only
|
||||||
|
the BIOS region of the flash is writable. If you wish to change any
|
||||||
|
other region (Management Engine or flash descriptor), then an external
|
||||||
|
programmer is required.
|
||||||
|
|
||||||
|
The following command may be used to flash coreboot:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo flashrom --noverify-all --ifd -i bios -p internal -w coreboot.rom
|
||||||
|
```
|
||||||
|
|
||||||
|
The use of `--noverify-all` is required since the Management Engine
|
||||||
|
region is not readable even by the host.
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
|
||||||
|
- There is no automatic, OS-independent fan control. This is because
|
||||||
|
the Super I/O hardware monitor can only obtain valid CPU temperature
|
||||||
|
readings from the PECI agent, whose complete initialisation is not
|
||||||
|
publicly documented. The `coretemp` driver can still be used for
|
||||||
|
accurate CPU temperature readings.
|
||||||
|
|
||||||
|
- me_cleaner breaks LPC bus and attached components!
|
||||||
|
- PS/2 mouse doesn't work
|
||||||
|
|
||||||
|
## Untested
|
||||||
|
|
||||||
|
- parallel port
|
||||||
|
- EHCI debug
|
||||||
|
- S/PDIF audio
|
||||||
|
|
||||||
|
## Working
|
||||||
|
|
||||||
|
- PS/2 keyboard
|
||||||
|
- PCIe graphics
|
||||||
|
- USB
|
||||||
|
- Gigabit Ethernet
|
||||||
|
- Integrated graphics
|
||||||
|
- SATA
|
||||||
|
- Serial port
|
||||||
|
- hardware monitor (see [Known issues](#known-issues) for caveats)
|
||||||
|
- front panel audio
|
||||||
|
- Native raminit (2 x 2GB, DDR3-1333)
|
||||||
|
- Native graphics init (libgfxinit)
|
||||||
|
- Wake-on-LAN
|
||||||
|
- TPM on TPM-header
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Northbridge | :doc:`../../northbridge/intel/sandybridge/index` |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Southbridge | bd82x6x |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| CPU | model_206ax |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O | Nuvoton NCT6776 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| EC | None |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Coprocessor | Intel Management Engine |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Extra resources
|
||||||
|
|
||||||
|
- [Flash chip datasheet][W25Q32BV]
|
||||||
|
|
||||||
|
[ASUS P8H61-M Pro]: https://www.asus.com/Motherboards/P8H61M_Pro/
|
||||||
|
[W25Q32BV]: https://www.winbond.com/resource-files/w25q32bv_revi_100413_wo_automotive.pdf
|
||||||
|
[flashrom]: https://flashrom.org/Flashrom
|
BIN
Documentation/mainboard/asus/p8z77-m_pro.jpg
Normal file
After Width: | Height: | Size: 96 KiB |
168
Documentation/mainboard/asus/p8z77-m_pro.md
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
# ASUS P8Z77-M PRO
|
||||||
|
|
||||||
|
This page describes how to run coreboot on the [ASUS P8Z77-M PRO]
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+---------------------+----------------+
|
||||||
|
| Type | Value |
|
||||||
|
+=====================+================+
|
||||||
|
| Socketed flash | yes |
|
||||||
|
+---------------------+----------------+
|
||||||
|
| Model | W25Q64FVA1Q |
|
||||||
|
+---------------------+----------------+
|
||||||
|
| Size | 8 MiB |
|
||||||
|
+---------------------+----------------+
|
||||||
|
| Package | DIP-8 |
|
||||||
|
+---------------------+----------------+
|
||||||
|
| Write protection | yes |
|
||||||
|
+---------------------+----------------+
|
||||||
|
| Dual BIOS feature | no |
|
||||||
|
+---------------------+----------------+
|
||||||
|
| Internal flashing | yes |
|
||||||
|
+---------------------+----------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
The flash IC is located right next to one of the SATA ports:
|
||||||
|

|
||||||
|
|
||||||
|
### Internal programming
|
||||||
|
|
||||||
|
The main SPI flash cannot be written because Asus disables BIOSWE and
|
||||||
|
enables BLE/SMM_BWP flags in BIOS_CNTL for their latest bioses.
|
||||||
|
An external programmer is required. You must flash standalone,
|
||||||
|
flashing in-circuit doesn't work. The flash chip is socketed, so it's
|
||||||
|
easy to remove and reflash.
|
||||||
|
|
||||||
|
## Working
|
||||||
|
|
||||||
|
- PS/2 keyboard with SeaBIOS & Tianocore (in Mint 18.3/19.1)
|
||||||
|
|
||||||
|
- Rear/front headphones connector audio & mic
|
||||||
|
|
||||||
|
- S3 Suspend to RAM (tested with OS installed in a HDD/SSD and also with a
|
||||||
|
Mint 18.3/19.1 LiveUSB pendrive connected to USB3/USB2), but please
|
||||||
|
see [Known issues]
|
||||||
|
|
||||||
|
- USB2 on rear (tested mouse/keyboard plugged there. Also, booting with
|
||||||
|
a Mint 18./19.1 LiveUSB works ok)
|
||||||
|
|
||||||
|
- USB3 (Z77's and Asmedia's works, but please see [Known issues])
|
||||||
|
|
||||||
|
- Gigabit Ethernet (RTL8111F)
|
||||||
|
|
||||||
|
- SATA3, SATA2 and eSATA (tested on all ports, hot-swap and TCG OPAL working)
|
||||||
|
(Blue SATA2) (Blue SATA2) (White SATA3) (Red eSATA SATA3 rear)
|
||||||
|
port 3 port 5 port 1 port 8
|
||||||
|
port 4 port 6 port 2 port 7
|
||||||
|
|
||||||
|
- NVME SSD boot on PCIe-x16/x8/4x slot using Tianocore
|
||||||
|
(tested with M.2-to-PCIe adapter and a M.2 Samsung EVO 970 SSD)
|
||||||
|
|
||||||
|
- CPU Temp sensors (tested PSensor on linux + HWINFO64 on Win10)
|
||||||
|
|
||||||
|
- TPM on TPM-header (tested tpm-tools with Asus TPM 1.2 Infineon SLB9635TT12)
|
||||||
|
|
||||||
|
- Native raminit and also MRC.bin(systemagent-r6.bin) memory initialization
|
||||||
|
(please see [Native raminit compatibility] and [MRC memory compatibility])
|
||||||
|
|
||||||
|
- Integrated graphics with both libgfxinit and the Intel Video BIOS OpROM
|
||||||
|
(VGA/DVI-D/HDMI tested and working)
|
||||||
|
|
||||||
|
- 1x PCIe GPU in PCIe-16x/8x/4x slots (tested using Zotac GeForce GTX
|
||||||
|
750Ti and FirePro W5100 under Mint 18.3/19.1)
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
|
||||||
|
- The rear's USB3s on bottom (closest to the PCB) have problems booting or
|
||||||
|
being used before the OS loads. For better compatibility, please use
|
||||||
|
the Z77's ones above the Ethernet connector or the Asmedia's top one
|
||||||
|
|
||||||
|
- After S3 suspend, some USB3 connectors on rear seem not to work
|
||||||
|
|
||||||
|
- At the moment, the power led does not blink when entering S3 state
|
||||||
|
|
||||||
|
- Currently, we have not setup the SuperIO's Hardware Monitor (HWM),
|
||||||
|
so only the CPU sensors are reported
|
||||||
|
|
||||||
|
- If you use the MRC.bin, the NVRAM variable gfx_uma_size may be ignored
|
||||||
|
as IGP's UMA could be reconfigured by the blob
|
||||||
|
|
||||||
|
- Using TianoCore + a PCIe GPU under Windows crashes with an
|
||||||
|
ACPI_BIOS_ERROR fatal code, not sure why. Using just the IGP
|
||||||
|
works perfectly
|
||||||
|
|
||||||
|
- Under Windows 10, if you experiment problems with PS/2 devices, change
|
||||||
|
HKLM\SYSTEM\CurrentControlSet\Services\i8042prt->Start from '3' to '1'
|
||||||
|
|
||||||
|
## Untested
|
||||||
|
|
||||||
|
- EHCI debugging
|
||||||
|
- S/PDIF audio
|
||||||
|
- Wake-on-LAN
|
||||||
|
- Serial port
|
||||||
|
|
||||||
|
## Not working
|
||||||
|
|
||||||
|
- PS/2 keyboard in Win10 using Tianocore (please see [Known issues])
|
||||||
|
- PS/2 mouse using Tianocore
|
||||||
|
- PCIe graphics card on Windows and Tianocore (throws critical ACPI_BIOS_ERROR)
|
||||||
|
|
||||||
|
## Native raminit compatibility
|
||||||
|
|
||||||
|
- GSkill F3-2133C10D-16GAB(XMP,1.60v) 2x8GB kit works at 1333Mhz instead
|
||||||
|
of XMP 2133Mhz
|
||||||
|
|
||||||
|
- Team Xtreem TXD38G2133HC9NDC01(XMP,1.50v) 2x4GB kit works at 1600Mhz
|
||||||
|
instead of XMP 2133Mhz
|
||||||
|
|
||||||
|
- Kingston KVR1066D3N7K2/4G(JEDEC,1.50v) 2x4GB kit works at 1066Mhz
|
||||||
|
but the board only detects half its RAM, because those DIMMs have
|
||||||
|
Double Sided(DS) chips and seems only Single Sided(SS) ones are
|
||||||
|
fully detected
|
||||||
|
|
||||||
|
- GSkill F3-10666CL9T2-24GBRL(JEDEC,1.50v) 6x4GB kit (4 DIMMs used)
|
||||||
|
works perfectly at full speed (1333Mhz)
|
||||||
|
|
||||||
|
## MRC memory compatibility
|
||||||
|
|
||||||
|
- GSkill F3-2133C10D-16GAB(XMP,1.60v) 2x8GB kit works at 1333Mhz
|
||||||
|
instead of XMP 2133Mhz
|
||||||
|
|
||||||
|
- Team Xtreem TXD38G2133HC9NDC01(XMP,1.50v) 2x4GB kit works at
|
||||||
|
1600Mhz instead of XMP 2133Mhz
|
||||||
|
|
||||||
|
- Kingston KVR1066D3N7K2/4G(JEDEC,1.50v) 2x4GB kit works at 1066Mhz
|
||||||
|
but the board only detects half its RAM, as those DIMMs have
|
||||||
|
Double Sided(DS) chips and seems only Single Sided(SS) ones are
|
||||||
|
fully detected
|
||||||
|
|
||||||
|
- GSkill F3-10666CL9T2-24GBRL(JEDEC,1.50v) 6x4GB kit (4 DIMMs used)
|
||||||
|
works perfectly at full speed (1333Mhz)
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Northbridge | :doc:`../../northbridge/intel/sandybridge/index` |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Southbridge | bd82x6x |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| CPU | model_206ax |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O | Nuvoton NCT6779D |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| EC | None |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Coprocessor | Intel Management Engine |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Extra resources
|
||||||
|
|
||||||
|
- [Flash chip datasheet][W25Q64FVA1Q]
|
||||||
|
|
||||||
|
[ASUS P8Z77-M PRO]: https://www.asus.com/Motherboards/P8Z77M_PRO/
|
||||||
|
[W25Q64FVA1Q]: https://www.winbond.com/resource-files/w25q64fv%20revs%2007182017.pdf
|
||||||
|
[flashrom]: https://flashrom.org/Flashrom
|
48
Documentation/mainboard/emulation/qemu-aarch64.md
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# QEMU AArch64 emulator
|
||||||
|
This page discribes how to build and run coreboot for QEMU/AArch64.
|
||||||
|
You can use LinuxBoot via `make menuconfig` or an arbitrary FIT image
|
||||||
|
as a payload for QEMU/AArch64.
|
||||||
|
|
||||||
|
## Running coreboot in QEMU
|
||||||
|
```bash
|
||||||
|
qemu-system-aarch64 -bios ./build/coreboot.rom \
|
||||||
|
-M virt,secure=on,virtualization=on -cpu cortex-a53 \
|
||||||
|
-nographic -m 8192M
|
||||||
|
```
|
||||||
|
|
||||||
|
- The default CPU in QEMU for AArch64 is a cortex-a15 which is 32-bit
|
||||||
|
ARM CPU. You need to specify 64-bit ARM CPU via `-cpu cortex-a53`.
|
||||||
|
- The default privilege level in QEMU for AArch64 is EL1 that we can't
|
||||||
|
have the right to access EL3/EL2 registers. You need to enable EL3/EL2
|
||||||
|
via `-machine secure=on,virtualization=on`.
|
||||||
|
- You need to specify the size of memory more than 544 MiB because 512
|
||||||
|
MiB is reserved for the kernel.
|
||||||
|
- The maximum size of memory is 255GiB (-m 261120).
|
||||||
|
|
||||||
|
## Building coreboot with an arbitrary FIT payload
|
||||||
|
There are 3 steps to make coreboot.rom for QEMU/AArch64. If you select
|
||||||
|
LinuxBoot, step 2 and 3 have done by LinuxBoot.
|
||||||
|
1. Get a DTB (Device Tree Blob)
|
||||||
|
2. Build a FIT image with a DTB
|
||||||
|
3. Add a FIT image to coreboot.rom
|
||||||
|
|
||||||
|
### 1. Get a DTB
|
||||||
|
You can get the DTB from QEMU with the following command.
|
||||||
|
```
|
||||||
|
$ qemu-system-aarch64 \
|
||||||
|
-M virt,dumpdtb=virt.dtb,secure=on,virtualization=on \
|
||||||
|
-cpu cortex-a53 -nographic -m 8192M
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Build a FIT image with a DTB
|
||||||
|
You need to write an image source file that has an `.its` extension to
|
||||||
|
configure kernels, ramdisks, and DTBs.
|
||||||
|
See [Flattened uImage Tree documentation](../../lib/payloads/fit.md) for more details.
|
||||||
|
|
||||||
|
### 3. Add a FIT image to coreboot.rom
|
||||||
|
You can use cbfstool to add the payload you created in step 2 to
|
||||||
|
the coreboot.rom.
|
||||||
|
```
|
||||||
|
$ ./build/cbfstool ./build/coreboot.rom add -f <path-to-a-payload>/uImage \
|
||||||
|
-n fallback/payload -t fit -c lzma
|
||||||
|
```
|
83
Documentation/mainboard/facebook/fbg1701.md
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
# Facebook FBG-1701
|
||||||
|
|
||||||
|
This page describes how to run coreboot on the Facebook FBG1701.
|
||||||
|
|
||||||
|
FBG1701 are assembled with different onboard memory modules:
|
||||||
|
Rev 1.0 Onboard Samsung K4B8G1646D-MYKO memory
|
||||||
|
Rev 1.1 and 1.2 Onboard Micron MT41K512M16HA-125A memory
|
||||||
|
Rev 1.3 Onboard Kingston B5116ECMDXGGB memory
|
||||||
|
|
||||||
|
Use make menuconfig to configure `onboard memory manufacturer Samsung` in
|
||||||
|
Mainboard menu.
|
||||||
|
|
||||||
|
## Required blobs
|
||||||
|
|
||||||
|
This board currently requires:
|
||||||
|
fsp blob 3rdparty/fsp/BraswellFspBinPkg/FspBin/BSWFSP.fd
|
||||||
|
Microcode 3rdparty/intel-microcode/intel-ucode/06-4c-04
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
### Internal programming
|
||||||
|
|
||||||
|
The main SPI flash can be accessed using [flashrom].
|
||||||
|
|
||||||
|
### External programming
|
||||||
|
|
||||||
|
The system has an internal flash chip which is a 8 MiB soldered SOIC-8 chip.
|
||||||
|
This chip is located on the top middle side of the board. It's located
|
||||||
|
between SoC and Q7 connector. Use clip (or solder wires) to program
|
||||||
|
the chip.
|
||||||
|
Specifically, it's a Winbond W25Q64FW (1.8V), whose datasheet can be found
|
||||||
|
[here][W25Q64FW].
|
||||||
|
|
||||||
|
The system has an external flash chip which is a 8 MiB soldered SOIC-8 chip.
|
||||||
|
This chip is located in the middle of carrier board close to the flex cable
|
||||||
|
connection.
|
||||||
|
Specifically, it's a Winbond W25Q64FV (3.3V), whose datasheet can be found
|
||||||
|
[here][W25Q64FV].
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
|
||||||
|
- None
|
||||||
|
|
||||||
|
## Untested
|
||||||
|
|
||||||
|
- hardware monitor
|
||||||
|
- SDIO
|
||||||
|
- Full Embedded Controller support
|
||||||
|
|
||||||
|
## Working
|
||||||
|
|
||||||
|
- USB
|
||||||
|
- Gigabit Ethernet
|
||||||
|
- integrated graphics
|
||||||
|
- flashrom
|
||||||
|
- external graphics
|
||||||
|
- PCIe
|
||||||
|
- eMMC
|
||||||
|
- SATA
|
||||||
|
- serial port
|
||||||
|
- SMBus
|
||||||
|
- HDA
|
||||||
|
- initialization with FSP MR2
|
||||||
|
- SeaBIOS payload
|
||||||
|
- Embedded Linux (Ubuntu 4.15+)
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| SoC | Intel Atom Processor N3710 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| CPU | Intel Braswell (N3710) |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O, EC | ITE8528 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Coprocessor | Intel Management Engine |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
[W25Q64FW]: https://www.winbond.com/resource-files/w25q64fw%20revn%2005182017%20sfdp.pdf
|
||||||
|
[W25Q64FV]: https://www.winbond.com/resource-files/w25q64fv%20revs%2007182017.pdf
|
||||||
|
[flashrom]: https://flashrom.org/Flashrom
|
133
Documentation/mainboard/facebook/monolith.md
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
# Facebook Monolith
|
||||||
|
|
||||||
|
This page describes how to run coreboot on the Facebook Monolith.
|
||||||
|
|
||||||
|
Please note: the coreboot implementation for this boards is in its
|
||||||
|
Beta state and isn't fully tested yet.
|
||||||
|
|
||||||
|
## Required blobs
|
||||||
|
|
||||||
|
Mainboard is based on the Intel Kaby Lake U SoC.
|
||||||
|
Intel company provides [Firmware Support Package (2.0)](../../soc/intel/fsp/index.md)
|
||||||
|
(intel FSP 2.0) to initialize this generation silicon. Please see this
|
||||||
|
[document](../../soc/intel/code_development_model/code_development_model.md).
|
||||||
|
|
||||||
|
FSP Information:
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+-----------------------------+-------------------+-------------------+
|
||||||
|
| FSP Project Name | Directory | Specification |
|
||||||
|
+-----------------------------+-------------------+-------------------+
|
||||||
|
| 7th Generation Intel® Core™ | KabylakeFspBinPkg | 2.0 |
|
||||||
|
| processors and chipsets | | |
|
||||||
|
| (formerly Kaby Lake) | | |
|
||||||
|
+-----------------------------+-------------------+-------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
Microcode: 3rdparty/intel-microcode/intel-ucode
|
||||||
|
|
||||||
|
## Flash components
|
||||||
|
|
||||||
|
To create a complete flash image, the flash descriptor, GBE and ME blobs are required. The
|
||||||
|
complete image can be used when e.g. a blank flash should be programmed. In other cases (when
|
||||||
|
only coreboot needs to be replaced) placeholders can be used for the GBE and ME regions.
|
||||||
|
|
||||||
|
These can be extracted from the original flash image as follows:
|
||||||
|
1) Read the complete image from flash.
|
||||||
|
2) Create a layout file with the following content:
|
||||||
|
```
|
||||||
|
00000000:00000fff fd
|
||||||
|
00700000:00ffffff bios
|
||||||
|
00003000:006FFFFF me
|
||||||
|
00001000:00002fff gbe
|
||||||
|
```
|
||||||
|
3) Use `ifdtool -n <layout_file> <flash_image>` to resize the *bios* region from the default 6MB
|
||||||
|
to 9 MB, this is required to create sufficient space for LinuxBoot.
|
||||||
|
NOTE: Please make sure only the firmware descriptor (*fd*) region is changed. Older versions
|
||||||
|
of the ifdtool corrupt the *me* region.
|
||||||
|
4) Use `ifdtool -x <resized_flash_image>` to extract the components.
|
||||||
|
|
||||||
|
The regions extracted can be used to generate a full flash image. The *bios* region is
|
||||||
|
not needed as this is replaced by the coreboot image.
|
||||||
|
|
||||||
|
NOTE: The gbe region contains the MAC address so be careful. When updating the flash using
|
||||||
|
flashrom it is advisable to leave out the *gbe* area.
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
### Internal programming
|
||||||
|
|
||||||
|
The SPI flash can be accessed using [flashrom].
|
||||||
|
|
||||||
|
The descriptor area needs to be updated once to resize the *bios* region.
|
||||||
|
`flashrom -p internal --ifd -i fd -w <coreboot.bin>`
|
||||||
|
|
||||||
|
After that only the bios area should to be updated.
|
||||||
|
`flashrom -p internal --ifd -i bios -w <coreboot.bin>`
|
||||||
|
|
||||||
|
The *gbe* and *me* regions should not be updated.
|
||||||
|
|
||||||
|
NOTE: As `flashrom --ifd` uses the flash descriptor it is required to update the
|
||||||
|
descriptor and bios regions in the right sequence. Don't update both in one command.
|
||||||
|
|
||||||
|
### External programming
|
||||||
|
|
||||||
|
The system has an internal flash chip which is a 16 MiB soldered SOIC-8 chip.
|
||||||
|
Specifically, it's a Winbond W25Q128JVSIQ (3.3V).
|
||||||
|
|
||||||
|
The system has an external flash chip which is a 16 MiB soldered SOIC-8 chip.
|
||||||
|
Specifically, it's a Winbond W25Q128JVSIM (3.3V).
|
||||||
|
|
||||||
|
Flashing of these devices is very difficult, disassembling the system destroys the cooling
|
||||||
|
solution. Wires need to be connected to be able to flash using an external programmer.
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
|
||||||
|
- None
|
||||||
|
|
||||||
|
## Untested
|
||||||
|
|
||||||
|
- Hardware monitor
|
||||||
|
- Full Embedded Controller support
|
||||||
|
- SATA
|
||||||
|
- xDCI
|
||||||
|
|
||||||
|
## Working
|
||||||
|
|
||||||
|
- USB
|
||||||
|
- Gigabit Ethernet (i219 and i210)
|
||||||
|
- Graphics (Using FSP GOP)
|
||||||
|
- flashrom
|
||||||
|
- PCIe including hotplug on FPGA root port
|
||||||
|
- EC serial port
|
||||||
|
- EC CPU temperature
|
||||||
|
- SMBus
|
||||||
|
- Initialization with FSP
|
||||||
|
- SeaBIOS payload (commit a5cab58e9a3fb6e168aba919c5669bea406573b4)
|
||||||
|
- TianoCore payload (commit a5cab58e9a3fb6e168aba919c5669bea406573b4)
|
||||||
|
- LinuxBoot (kernel kernel-4_19_97) (uroot commit 9c9db9dbd6b532f5f91a511a0de885c6562aadd7)
|
||||||
|
- eMMC
|
||||||
|
|
||||||
|
All of the above has been briefly tested by booting Linux from eMMC using the TianoCore payload
|
||||||
|
and LinuxBoot.
|
||||||
|
|
||||||
|
SeaBios has been checked to the extend that it runs to the boot selection and provides display
|
||||||
|
output.
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| SoC | Intel Kaby Lake U |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| CPU | Intel i3-7100U |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O, EC | ITE8528 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Coprocessor | Intel Management Engine |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
[W25Q128JVSIQ]: https://www.winbond.com/resource-files/w25q128jv%20revf%2003272018%20plus.pdf
|
||||||
|
[W25Q128JVSIM]: https://www.winbond.com/resource-files/w25q128jv%20dtr%20revb%2011042016.pdf
|
||||||
|
[flashrom]: https://flashrom.org/Flashrom
|
@ -39,27 +39,23 @@ leave the backup chip untouched.
|
|||||||
|
|
||||||
The original IFD defines the BIOS region as the whole flash chip. While this is
|
The original IFD defines the BIOS region as the whole flash chip. While this is
|
||||||
not an issue if flashing a complete image, it confuses flashrom and trashes the
|
not an issue if flashing a complete image, it confuses flashrom and trashes the
|
||||||
flash chip's contents when using the --ifd option. However, this can be easily
|
flash chip's contents when using the `--ifd` option. A possible workaround is
|
||||||
fixed by reading the IFD with flashrom, editing the correct values into it with
|
to create a `layout.txt` file with a non-overlapping BIOS region:
|
||||||
ifdtool and then reflashing it.
|
|
||||||
|
|
||||||
Create a layout.txt with the following contents:
|
|
||||||
|
|
||||||
00000000:00000fff fd
|
00000000:00000fff fd
|
||||||
00180000:003fffff bios
|
00180000:003fffff bios
|
||||||
00001000:0017ffff me
|
00001000:0017ffff me
|
||||||
|
|
||||||
After that, simply run:
|
After that, use flashrom with the new layout file. For example, to create a
|
||||||
|
backup of the BIOS region and then flash a `coreboot.rom`, do:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo flashrom -p internal --ifd -i fd -r ifd.rom
|
sudo flashrom -p internal -l layout.txt -i bios -r backup.rom
|
||||||
ifdtool -n layout.txt ifd.rom
|
sudo flashrom -p internal -l layout.txt -i bios -w coreboot.rom
|
||||||
sudo flashrom -p internal --ifd -i fd -w ifd.rom.new
|
|
||||||
```
|
```
|
||||||
|
|
||||||
After flashing, power cycle the computer to ensure the new IFD is being used.
|
Modifying the IFD so that the BIOS region does not overlap would work as well.
|
||||||
If only a reboot is done, the old IFD layout is still seen by flashrom, even if
|
However, this makes DualBIOS unable to recover from a bad flash for some reason.
|
||||||
the IFD on the flash chip is correctly defining the new region layout.
|
|
||||||
|
|
||||||
## Technology
|
## Technology
|
||||||
|
|
||||||
|
86
Documentation/mainboard/hp/8760w.md
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
# HP EliteBook 8760w
|
||||||
|
|
||||||
|
This page describes how to run coreboot on the [HP EliteBook 8760w].
|
||||||
|
|
||||||
|
The coreboot code for this laptop is still not merged, you need to
|
||||||
|
checkout the [code on gerrit] to build coreboot for the laptop.
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+---------------------+------------+
|
||||||
|
| Type | Value |
|
||||||
|
+=====================+============+
|
||||||
|
| Socketed flash | no |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Model | W25Q64.V |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Size | 8 MiB |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Package | SOIC-8 |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Write protection | no |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Dual BIOS feature | no |
|
||||||
|
+---------------------+------------+
|
||||||
|
| In circuit flashing | yes |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Internal flashing | yes |
|
||||||
|
+---------------------+------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Required proprietary blobs
|
||||||
|
|
||||||
|
- Intel Firmware Descriptor, ME and GbE firmware
|
||||||
|
- EC: please read [HP Laptops with KBC1126 Embedded Controller](hp_kbc1126_laptops)
|
||||||
|
|
||||||
|
## Flashing instructions
|
||||||
|
|
||||||
|
HP EliteBook 8760w has an 8MB SOIC-8 flash chip on the bottom of the
|
||||||
|
mainboard. You just need to remove the service cover, and use an SOIC-8
|
||||||
|
clip to read and flash the chip.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Untested
|
||||||
|
|
||||||
|
- dock: serial port, parallel port, ...
|
||||||
|
- TPM
|
||||||
|
- S3 suspend/resume
|
||||||
|
- Gigabit Ethernet
|
||||||
|
|
||||||
|
## Working
|
||||||
|
|
||||||
|
- i7-2630QM, 0+4G+8G+0
|
||||||
|
- i7-3720QM, 8G+8G+8G+8G
|
||||||
|
- Arch Linux boot from SeaBIOS payload
|
||||||
|
- EHCI debug: the port is at the right side, next to the charging port
|
||||||
|
- SATA
|
||||||
|
- eSATA
|
||||||
|
- USB2 and USB3
|
||||||
|
- keyboard, touchpad, trackpad
|
||||||
|
- WLAN
|
||||||
|
- WWAN
|
||||||
|
- EC ACPI
|
||||||
|
- Using `me_cleaner`
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Northbridge | :doc:`../../northbridge/intel/sandybridge/index` |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Southbridge | bd82x6x |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| CPU | model_206ax |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O | SMSC LPC47n217 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| EC | SMSC KBC1126 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Coprocessor | Intel Management Engine |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
[HP EliteBook 8760w]: https://support.hp.com/us-en/product/hp-elitebook-8760w-mobile-workstation/5071180
|
||||||
|
[code on gerrit]: https://review.coreboot.org/c/coreboot/+/30936
|
BIN
Documentation/mainboard/hp/8760w_flash.jpg
Normal file
After Width: | Height: | Size: 54 KiB |
109
Documentation/mainboard/hp/hp_kbc1126_laptops.md
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
# HP Laptops with KBC1126 Embedded Controller
|
||||||
|
|
||||||
|
This document is about HP EliteBook series laptops up to Ivy Bridge era
|
||||||
|
which use SMSC KBC1126 as embedded controller.
|
||||||
|
|
||||||
|
SMSC KBC1126 (and older similar chips like KBC1098) has been used in
|
||||||
|
HP EliteBooks for many generations. BIOS and EC firmware share an SPI
|
||||||
|
flash chip in these laptops, so we need to put firmware blobs for the
|
||||||
|
EC to the coreboot image.
|
||||||
|
|
||||||
|
## EC firmware extraction and coreboot building
|
||||||
|
|
||||||
|
The following document takes EliteBook 2760p as an example.
|
||||||
|
|
||||||
|
First, you need to extract the blobs needed by EC firmware using util/kbc1126.
|
||||||
|
You can extract them from your backup firmware image, or firmware update
|
||||||
|
provided by HP with [unar] as follows:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
wget https://ftp.hp.com/pub/softpaq/sp79501-80000/sp79710.exe
|
||||||
|
unar sp79710.exe
|
||||||
|
${COREBOOT_DIR}/util/kbc1126/kbc1126_ec_dump sp79710/Rompaq/68SOU.BIN
|
||||||
|
mv 68SOU.BIN.fw1 ${COREBOOT_DIR}/2760p-fw1.bin
|
||||||
|
mv 68SOU.BIN.fw2 ${COREBOOT_DIR}/2760p-fw2.bin
|
||||||
|
```
|
||||||
|
|
||||||
|
When you config coreboot, select:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Chipset --->
|
||||||
|
[*] Add firmware images for KBC1126 EC
|
||||||
|
(2760p-fw1.bin) KBC1126 firmware #1 path and filename
|
||||||
|
(2760p-fw2.bin) KBC1126 filename #2 path and filename
|
||||||
|
```
|
||||||
|
|
||||||
|
## Porting guide for HP laptops with KBC1126
|
||||||
|
|
||||||
|
To port coreboot to an HP laptop with KBC1126, you need to do the
|
||||||
|
following:
|
||||||
|
|
||||||
|
- select Kconfig option `EC_HP_KBC1126`
|
||||||
|
- select Kconfig option `SUPERIO_SMSC_LPC47N217` if there is LPC47n217
|
||||||
|
Super I/O, usually in EliteBook 8000 series, which can be used for
|
||||||
|
debugging via serial port
|
||||||
|
- initialize EC and Super I/O in romstage
|
||||||
|
- add EC and Super I/O support to devicetree.cb
|
||||||
|
|
||||||
|
To get the related values for EC in devicetree.cb, you need to extract the EFI
|
||||||
|
module EcThermalInit from the vendor UEFI firmware with [UEFITool]. Usually,
|
||||||
|
`ec_data_port`, `ec_cmd_port` and `ec_ctrl_reg` has the following values:
|
||||||
|
|
||||||
|
- For EliteBook xx60 series: 0x60, 0x64, 0xca
|
||||||
|
- For EliteBook xx70 series: 0x62, 0x66, 0x81
|
||||||
|
|
||||||
|
You can use [radare2] and the following [r2pipe] Python script to find
|
||||||
|
these values from the EcThermalInit EFI module:
|
||||||
|
|
||||||
|
```python
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# install radare2 and use `pip3 install --user r2pipe` to install r2pipe
|
||||||
|
|
||||||
|
import r2pipe
|
||||||
|
import sys
|
||||||
|
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
fn = "ecthermalinit.efi"
|
||||||
|
else:
|
||||||
|
fn = sys.argv[1]
|
||||||
|
|
||||||
|
r2 = r2pipe.open(fn)
|
||||||
|
r2.cmd("aa")
|
||||||
|
entryf = r2.cmdj("pdfj")
|
||||||
|
|
||||||
|
for insn in entryf["ops"]:
|
||||||
|
if "lea r8" in insn["opcode"]:
|
||||||
|
_callback = insn["ptr"]
|
||||||
|
break
|
||||||
|
|
||||||
|
r2.cmd("af @ {}".format(_callback))
|
||||||
|
callbackf_insns = r2.cmdj("pdfj @ {}".format(_callback))["ops"]
|
||||||
|
|
||||||
|
def find_port(addr):
|
||||||
|
ops = r2.cmdj("pdfj @ {}".format(addr))["ops"]
|
||||||
|
for insn in ops:
|
||||||
|
if "lea r8d" in insn["opcode"]:
|
||||||
|
return insn["ptr"]
|
||||||
|
|
||||||
|
ctrl_reg_found = False
|
||||||
|
|
||||||
|
for i in range(0, len(callbackf_insns)):
|
||||||
|
if not ctrl_reg_found and "mov cl" in callbackf_insns[i]["opcode"]:
|
||||||
|
ctrl_reg_found = True
|
||||||
|
ctrl_reg = callbackf_insns[i]["ptr"]
|
||||||
|
print("ec_ctrl_reg = 0x%02x" % ctrl_reg)
|
||||||
|
cmd_port = find_port(callbackf_insns[i+1]["jump"])
|
||||||
|
data_port = find_port(callbackf_insns[i+3]["jump"])
|
||||||
|
print("ec_cmd_port = 0x%02x\nec_data_port = 0x%02x" % (cmd_port, data_port))
|
||||||
|
|
||||||
|
if "mov bl" in callbackf_insns[i]["opcode"]:
|
||||||
|
ctrl_value = callbackf_insns[i]["ptr"]
|
||||||
|
print("ec_fan_ctrl_value = 0x%02x" % ctrl_value)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
[unar]: https://theunarchiver.com/command-line
|
||||||
|
[UEFITool]: https://github.com/LongSoft/UEFITool
|
||||||
|
[radare2]: https://radare.org/
|
||||||
|
[r2pipe]: https://github.com/radare/radare2-r2pipe
|
70
Documentation/mainboard/hp/z220_sff.md
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
# HP Z220 SFF Workstation
|
||||||
|
|
||||||
|
This page describes how to run coreboot on the [HP Z220 SFF Workstation] desktop
|
||||||
|
from [HP].
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
|
||||||
|
The following things are still missing from this coreboot port:
|
||||||
|
|
||||||
|
- Extended HWM reporting
|
||||||
|
- Advanced LED control
|
||||||
|
- Advanced power configuration in S3
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+---------------------+-------------+
|
||||||
|
| Type | Value |
|
||||||
|
+=====================+=============+
|
||||||
|
| Socketed flash | no |
|
||||||
|
+---------------------+-------------+
|
||||||
|
| Model | N25Q128..3E |
|
||||||
|
+---------------------+-------------+
|
||||||
|
| Size | 16 MiB |
|
||||||
|
+---------------------+-------------+
|
||||||
|
| In circuit flashing | yes |
|
||||||
|
+---------------------+-------------+
|
||||||
|
| Package | SOIC-16 |
|
||||||
|
+---------------------+-------------+
|
||||||
|
| Write protection | No |
|
||||||
|
+---------------------+-------------+
|
||||||
|
| Dual BIOS feature | No |
|
||||||
|
+---------------------+-------------+
|
||||||
|
| Internal flashing | yes |
|
||||||
|
+---------------------+-------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
### Internal programming
|
||||||
|
|
||||||
|
The SPI flash can be accessed using [flashrom].
|
||||||
|
|
||||||
|
### External programming
|
||||||
|
|
||||||
|
External programming with an SPI adapter and [flashrom] does work, but it powers the
|
||||||
|
whole southbridge complex. You need to supply enough current through the programming adapter.
|
||||||
|
|
||||||
|
If you want to use a SOIC pomona test clip, you have to cut the 2nd DRAM DIMM holder,
|
||||||
|
as otherwise there's not enough space near the flash.
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Northbridge | :doc:`../../northbridge/intel/sandybridge/index` |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Southbridge | bd82x6x |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| CPU | model_206ax |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| SuperIO | :doc:`../../superio/nuvoton/npcd378` |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| EC | |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Coprocessor | Intel ME |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
[HP Z220 SFF Workstation]: https://support.hp.com/za-en/document/c03386950
|
||||||
|
[HP]: https://www.hp.com/
|
||||||
|
[flashrom]: https://flashrom.org/Flashrom
|
@ -2,13 +2,25 @@
|
|||||||
|
|
||||||
This section contains documentation about coreboot on specific mainboards.
|
This section contains documentation about coreboot on specific mainboards.
|
||||||
|
|
||||||
## ASUS
|
## 51NB
|
||||||
|
|
||||||
- [P8H61-M LX](asus/p8h61-m_lx.md)
|
- [X210](51nb/x210.md)
|
||||||
|
|
||||||
|
## AMD
|
||||||
|
- [padmelon](amd/padmelon/padmelon.md)
|
||||||
|
|
||||||
## ASRock
|
## ASRock
|
||||||
|
|
||||||
- [H81M-HDS](asrock/h81m-hds.md)
|
- [H81M-HDS](asrock/h81m-hds.md)
|
||||||
|
- [H110M-DVS](asrock/h110m-dvs.md)
|
||||||
|
|
||||||
|
## ASUS
|
||||||
|
|
||||||
|
- [F2A85-M](asus/f2a85-m.md)
|
||||||
|
- [P5Q](asus/p5q.md)
|
||||||
|
- [P8H61-M LX](asus/p8h61-m_lx.md)
|
||||||
|
- [P8H61-M Pro](asus/p8h61-m_pro.md)
|
||||||
|
- [P8Z77-M Pro](asus/p8z77-m_pro.md)
|
||||||
|
|
||||||
## Cavium
|
## Cavium
|
||||||
|
|
||||||
@ -20,12 +32,12 @@ The boards in this section are not real mainboards, but emulators.
|
|||||||
|
|
||||||
- [Spike RISC-V emulator](emulation/spike-riscv.md)
|
- [Spike RISC-V emulator](emulation/spike-riscv.md)
|
||||||
- [Qemu RISC-V emulator](emulation/qemu-riscv.md)
|
- [Qemu RISC-V emulator](emulation/qemu-riscv.md)
|
||||||
|
- [Qemu AArch64 emulator](emulation/qemu-aarch64.md)
|
||||||
|
|
||||||
## Intel
|
## Facebook
|
||||||
|
|
||||||
- [DG43GT](intel/dg43gt.md)
|
- [FBG-1701](facebook/fbg1701.md)
|
||||||
- [IceLake RVP](intel/icelake_rvp.md)
|
- [Monolith](facebook/monolith.md)
|
||||||
- [KBLRVP11](intel/kblrvp11.md)
|
|
||||||
|
|
||||||
## Foxconn
|
## Foxconn
|
||||||
|
|
||||||
@ -39,33 +51,89 @@ The boards in this section are not real mainboards, but emulators.
|
|||||||
|
|
||||||
- [Dragonegg](google/dragonegg.md)
|
- [Dragonegg](google/dragonegg.md)
|
||||||
|
|
||||||
## Open Cellular
|
|
||||||
|
|
||||||
- [Elgon](opencellular/elgon.md)
|
|
||||||
|
|
||||||
## HP
|
## HP
|
||||||
|
|
||||||
- [Compaq 8200 Elite SFF](hp/compaq_8200_sff.md)
|
- [Compaq 8200 Elite SFF](hp/compaq_8200_sff.md)
|
||||||
|
- [Z220 Workstation SFF](hp/z220_sff.md)
|
||||||
|
|
||||||
|
### EliteBook series
|
||||||
|
|
||||||
|
- [HP Laptops with KBC1126 EC](hp/hp_kbc1126_laptops.md)
|
||||||
|
- [EliteBook 8760w](hp/8760w.md)
|
||||||
|
|
||||||
|
## Intel
|
||||||
|
|
||||||
|
- [DG43GT](intel/dg43gt.md)
|
||||||
|
- [IceLake RVP](intel/icelake_rvp.md)
|
||||||
|
- [KBLRVP11](intel/kblrvp11.md)
|
||||||
|
|
||||||
## Lenovo
|
## Lenovo
|
||||||
|
|
||||||
|
- [Mainboard codenames](lenovo/codenames.md)
|
||||||
- [Hardware Maintenance Manual of ThinkPads](lenovo/thinkpad_hmm.md)
|
- [Hardware Maintenance Manual of ThinkPads](lenovo/thinkpad_hmm.md)
|
||||||
|
- [R60](lenovo/r60.md)
|
||||||
- [T4xx common](lenovo/t4xx_series.md)
|
- [T4xx common](lenovo/t4xx_series.md)
|
||||||
- [X2xx common](lenovo/x2xx_series.md)
|
- [X2xx common](lenovo/x2xx_series.md)
|
||||||
|
- [vboot](lenovo/vboot.md)
|
||||||
|
|
||||||
|
### Arrandale series
|
||||||
|
|
||||||
|
- [T410](lenovo/t410.md)
|
||||||
|
|
||||||
|
### GM45 series
|
||||||
|
|
||||||
|
- [X200 / T400 / T500 / X301 common](lenovo/montevina_series.md)
|
||||||
|
- [X301](lenovo/x301.md)
|
||||||
|
|
||||||
### Sandy Bridge series
|
### Sandy Bridge series
|
||||||
|
|
||||||
- [T420](lenovo/t420.md)
|
- [T420](lenovo/t420.md)
|
||||||
- [T420 / T520 / X220 / T420s / W520 common](lenovo/xx20_series.md)
|
- [T420 / T520 / X220 / T420s / W520 common](lenovo/Sandy_Bridge_series.md)
|
||||||
- [x1](lenovo/x1.md)
|
- [X1](lenovo/x1.md)
|
||||||
|
|
||||||
### Ivy Bridge series
|
### Ivy Bridge series
|
||||||
|
|
||||||
- [T430](lenovo/t430.md)
|
- [T430](lenovo/t430.md)
|
||||||
- [T530](lenovo/w530.md)
|
- [T530](lenovo/w530.md)
|
||||||
- [W530](lenovo/w530.md)
|
- [W530](lenovo/w530.md)
|
||||||
- [T430 / T530 / X230 / W530 common](lenovo/xx30_series.md)
|
- [T430 / T530 / X230 / W530 common](lenovo/Ivy_Bridge_series.md)
|
||||||
- [T431s](lenovo/t431s.md)
|
- [T431s](lenovo/t431s.md)
|
||||||
|
- [Internal flashing](lenovo/ivb_internal_flashing.md)
|
||||||
|
|
||||||
|
### Haswell series
|
||||||
|
|
||||||
|
- [T440p](lenovo/t440p.md)
|
||||||
|
|
||||||
|
## Libretrend
|
||||||
|
|
||||||
|
- [LT1000](libretrend/lt1000.md)
|
||||||
|
|
||||||
|
## MSI
|
||||||
|
|
||||||
|
- [MS-7707](msi/ms7707/ms7707.md)
|
||||||
|
|
||||||
|
## Open Cellular
|
||||||
|
|
||||||
|
- [Elgon](opencellular/elgon.md)
|
||||||
|
- [Rotundu](opencellular/rotundu.md)
|
||||||
|
|
||||||
|
## PC Engines
|
||||||
|
|
||||||
|
- [APU1](pcengines/apu1.md)
|
||||||
|
- [APU2](pcengines/apu2.md)
|
||||||
|
|
||||||
|
## Portwell
|
||||||
|
|
||||||
|
- [PQ7-M107](portwell/pq7-m107.md)
|
||||||
|
|
||||||
|
## Protectli
|
||||||
|
|
||||||
|
- [FW2B / FW4B](protectli/fw2b_fw4b.md)
|
||||||
|
- [FW6A / FW6B / FW6C](protectli/fw6.md)
|
||||||
|
|
||||||
|
## Roda
|
||||||
|
|
||||||
|
- [RK9 Flash Header](roda/rk9/flash_header.md)
|
||||||
|
|
||||||
## SiFive
|
## SiFive
|
||||||
|
|
||||||
@ -74,3 +142,13 @@ The boards in this section are not real mainboards, but emulators.
|
|||||||
## Supermicro
|
## Supermicro
|
||||||
|
|
||||||
- [X10SLM+-F](supermicro/x10slm-f.md)
|
- [X10SLM+-F](supermicro/x10slm-f.md)
|
||||||
|
- [X11 LGA1151 series](supermicro/x11-lga1151-series/x11-lga1151-series.md)
|
||||||
|
- [Flashing using the BMC](supermicro/flashing_on_vendorbmc.md)
|
||||||
|
|
||||||
|
## System76
|
||||||
|
|
||||||
|
- [Lemur Pro](system76/lemp9.md)
|
||||||
|
|
||||||
|
## UP
|
||||||
|
|
||||||
|
- [Squared](up/squared/index.md)
|
||||||
|
93
Documentation/mainboard/lenovo/Ivy_Bridge_series.md
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
# Lenovo Ivy Bridge series
|
||||||
|
|
||||||
|
This information is valid for all supported models, except T430s and T431s.
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
```eval_rst
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Type | Value |
|
||||||
|
+=====================+================================+
|
||||||
|
| Socketed flash | no |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Size | 8 MiB + 4MiB |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| In circuit flashing | Yes |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Package | SOIC-8 |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Write protection | No |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Dual BIOS feature | No |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Internal flashing | Yes |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installation instructions
|
||||||
|
* Update the EC firmware, as there's no support for EC updates in coreboot.
|
||||||
|
* Do **NOT** accidently swap pins or power on the board while a SPI flasher
|
||||||
|
is connected. It will permanently brick your device.
|
||||||
|
* It's recommended to only flash the BIOS region. In that case you don't
|
||||||
|
need to extract blobs from vendor firmware.
|
||||||
|
If you want to flash the whole chip, you need blobs when building
|
||||||
|
coreboot.
|
||||||
|
* The *Flash layout* shows that by default 7MiB of space are available for
|
||||||
|
the use with coreboot.
|
||||||
|
* In that case you only want to use a part of the BIOS region that must not
|
||||||
|
exceed 4MiB in size, which means CONFIG_CBFS_SIZE must be smaller than 4MiB.
|
||||||
|
* ROM chip size should be set to 12MiB.
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
Please also have a look at :doc:`../../flash_tutorial/index`.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Splitting the coreboot.rom
|
||||||
|
|
||||||
|
To split the coreboot.rom into two images (one for the 8MiB and one for the
|
||||||
|
4 MiB flash IC), run the following commands:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dd of=top.rom bs=1M if=build/coreboot.rom skip=8
|
||||||
|
dd of=bottom.rom bs=1M if=build/coreboot.rom count=8
|
||||||
|
```
|
||||||
|
|
||||||
|
That gives one ROM for each flash IC, where *top.rom* is the upper part of the
|
||||||
|
flash image, that resides on the 4 MiB flash and *bottom.rom* is the lower part
|
||||||
|
of the flash image, that resides on the 8 MiB flash.
|
||||||
|
|
||||||
|
## Dumping a full ROM
|
||||||
|
|
||||||
|
If you flash externally you need to read both flash chips to get two images
|
||||||
|
(one for the 8MiB and one for the 4 MiB flash IC), and then run the following
|
||||||
|
command to concatenate the files:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat bottom.rom top.rom > firmware.rom
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flash layout
|
||||||
|
There's one 8MiB and one 4 MiB flash which contains IFD, GBE, ME and
|
||||||
|
BIOS region. These two flash ICs appear as a single 12MiB when flashing
|
||||||
|
internally.
|
||||||
|
On Lenovo's UEFI the EC firmware update is placed at the start of the BIOS
|
||||||
|
region. The update is then written into the EC once.
|
||||||
|
|
||||||
|
![][fl]
|
||||||
|
|
||||||
|
[fl]: flashlayout_Ivy_Bridge.svg
|
||||||
|
|
||||||
|
## Reducing Intel Managment Engine firmware size
|
||||||
|
|
||||||
|
It is possible to reduce the Intel ME firmware size to free additional
|
||||||
|
space for the `bios` region. This is usually referred to as *cleaning the ME* or
|
||||||
|
*stripping the ME*.
|
||||||
|
After reducing the Intel ME firmware size you must modify the original IFD,
|
||||||
|
[split the resulting coreboot ROM](#splitting-the-coreboot-rom) and then write
|
||||||
|
each ROM using an [external programmer].
|
||||||
|
Have a look at [me_cleaner] for more information.
|
||||||
|
|
||||||
|
Tests on Lenovo W530 showed no issues with a stripped and shrunken ME firmware.
|
||||||
|
|
||||||
|
|
||||||
|
[me_cleaner]: ../../northbridge/intel/sandybridge/me_cleaner.md
|
||||||
|
[external programmer]: ../../flash_tutorial/index.md
|
69
Documentation/mainboard/lenovo/Sandy_Bridge_series.md
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
# Lenovo Sandy Bridge series
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
```eval_rst
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Type | Value |
|
||||||
|
+=====================+====================+
|
||||||
|
| Socketed flash | no |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Size | 8 MiB |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| In circuit flashing | Yes |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Package | SOIC-8 |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Write protection | No |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Dual BIOS feature | No |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Internal flashing | Yes |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installation instructions
|
||||||
|
* Update the EC firmware, as there's no support for EC updates in coreboot.
|
||||||
|
* Do **NOT** accidently swap pins or power on the board while a SPI flasher
|
||||||
|
is connected. It will destroy your device.
|
||||||
|
* It's recommended to only flash the BIOS region. In that case you don't
|
||||||
|
need to extract blobs from vendor firmware.
|
||||||
|
If you want to flash the whole chip, you need blobs when building
|
||||||
|
coreboot.
|
||||||
|
* The shipped *Flash layout* allocates 3MiB to the BIOS region, which is the space
|
||||||
|
usable by coreboot.
|
||||||
|
* ROM chip size should be set to 8MiB.
|
||||||
|
|
||||||
|
Please also have a look at the [flashing tutorial]
|
||||||
|
|
||||||
|
## Flash layout
|
||||||
|
There's one 8MiB flash which contains IFD, GBE, ME and BIOS regions.
|
||||||
|
On Lenovo's UEFI the EC firmware update is placed at the start of the BIOS
|
||||||
|
region. The update is then written into the EC once.
|
||||||
|
|
||||||
|
![][fl]
|
||||||
|
|
||||||
|
[fl]: flashlayout_Sandy_Bridge.svg
|
||||||
|
|
||||||
|
## Reducing Intel Managment Engine firmware size
|
||||||
|
|
||||||
|
It is possible to reduce the Intel ME firmware size to free additional
|
||||||
|
space for the `bios` region. This is usually referred to as *cleaning the ME* or
|
||||||
|
*stripping the ME*.
|
||||||
|
After reducing the Intel ME firmware size you must modify the original IFD
|
||||||
|
and then write a full ROM using an [external programmer].
|
||||||
|
Have a look at [me_cleaner] for more information.
|
||||||
|
|
||||||
|
Tests on Lenovo X220 showed no issues with a stripped ME firmware.
|
||||||
|
|
||||||
|
**Modified flash layout:**
|
||||||
|
|
||||||
|
![][fl2]
|
||||||
|
|
||||||
|
[fl2]: flashlayout_Sandy_Bridge_stripped_me.svg
|
||||||
|
|
||||||
|
The overall size of the `gbe`, `me,` `ifd` region is less than 128KiB, leaving
|
||||||
|
the remaining space for the `bios` partition.
|
||||||
|
|
||||||
|
|
||||||
|
[me_cleaner]: ../../northbridge/intel/sandybridge/me_cleaner.md
|
||||||
|
[external programmer]: ../../flash_tutorial/index.md
|
@ -1,4 +1,6 @@
|
|||||||
t60,magi-5|magi-7|austin-3
|
t60,magi (dGPU) | lisa (iGPU)
|
||||||
|
z61m,BW2
|
||||||
|
z61t,BV2
|
||||||
t400,malibu-3
|
t400,malibu-3
|
||||||
t400s,shinai
|
t400s,shinai
|
||||||
t410,nozomi-1
|
t410,nozomi-1
|
||||||
@ -16,13 +18,18 @@ w510,kendo-1 workstation
|
|||||||
w520,kendo-3 workstation
|
w520,kendo-3 workstation
|
||||||
w530,kendo-4 workstation
|
w530,kendo-4 workstation
|
||||||
w700,n-note
|
w700,n-note
|
||||||
|
w701,n-note 3.0 (nico-3)
|
||||||
x1_carbon_gen1,genesis-1
|
x1_carbon_gen1,genesis-1
|
||||||
x60,ks note
|
x60,ks note
|
||||||
x61,ks note-3
|
x61,ks note-3
|
||||||
x200,mocha-1
|
x200,mocha-1
|
||||||
|
x200s,pecan-1
|
||||||
|
x200t,caramel-1
|
||||||
x201,mocha-3
|
x201,mocha-3
|
||||||
x220,dasher-1
|
x220,dasher-1
|
||||||
|
x220t,comet-1
|
||||||
x230,dasher-2
|
x230,dasher-2
|
||||||
|
x230t,comet-2
|
||||||
x230s,rogue-1
|
x230s,rogue-1
|
||||||
x240,rogue-2
|
x240,rogue-2
|
||||||
x300,kodachi
|
x300,kodachi
|
|
7
Documentation/mainboard/lenovo/codenames.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Lenovo mainboard codenames
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
.. csv-table::
|
||||||
|
:header: "Marketing name", "Development codename"
|
||||||
|
:file: codenames.csv
|
||||||
|
```
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
@ -0,0 +1,74 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
|
||||||
|
<svg width="9cm" height="8cm" viewBox="268 -156 168 158" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #ffffff" x="307.888" y="-152.131" width="49.1438" height="30.4667"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ffffff" x="307.888" y="-152.131" width="49.1438" height="30.4667"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ffffff" x="307.888" y="-152.131" width="49.1438" height="30.4667"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="307.888" y="-152.131" width="49.1438" height="30.4667"/>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="332.46" y="-134.831">
|
||||||
|
<tspan x="332.46" y="-134.831">IFD</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #ffffff" x="307.934" y="-56.9106" width="49.1438" height="56.1492"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.02; stroke: #ffffff" x="307.934" y="-56.9106" width="49.1438" height="56.1492"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.02; stroke: #ffffff" x="307.934" y="-56.9106" width="49.1438" height="56.1492"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="308.096" y="-57.559" width="49.1438" height="57.2839"/>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="332.182" y="-24.0245">
|
||||||
|
<tspan x="332.182" y="-24.0245">BIOS</tspan>
|
||||||
|
</text>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #ffffff" x="308" y="-121.59" width="49.1438" height="30.4667"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ffffff" x="308" y="-121.59" width="49.1438" height="30.4667"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ffffff" x="308" y="-121.59" width="49.1438" height="30.4667"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="308" y="-121.59" width="49.1438" height="30.4667"/>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="332.572" y="-104.29">
|
||||||
|
<tspan x="332.572" y="-104.29">GBE</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<text font-size="7.15705" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="268.961" y="-148.674">
|
||||||
|
<tspan x="268.961" y="-148.674">0x000000</tspan>
|
||||||
|
</text>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="269.152" y="-120.399">
|
||||||
|
<tspan x="269.152" y="-120.399">0x001000</tspan>
|
||||||
|
</text>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="269.155" y="-90.6472">
|
||||||
|
<tspan x="269.155" y="-90.6472">0x003000</tspan>
|
||||||
|
</text>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="269.461" y="-56.4289">
|
||||||
|
<tspan x="269.461" y="-56.4289">0x020000</tspan>
|
||||||
|
</text>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="270.008" y="0.198407">
|
||||||
|
<tspan x="270.008" y="0.198407">0x800000</tspan>
|
||||||
|
</text>
|
||||||
|
<path style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" d="M 380.877 -151.013 C 401.876,-151.013 379.377,-73.513 400.627,-72.513"/>
|
||||||
|
<path style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" d="M 381.377 -0.763268 C 395.238,-0.763268 387.016,-72.763 400.877,-72.763"/>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="406.127" y="-68.513">
|
||||||
|
<tspan x="406.127" y="-68.513">Flash #0</tspan>
|
||||||
|
</text>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #ffffff" x="308.189" y="-90.5898" width="49.1438" height="33.4161"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ffffff" x="308.189" y="-90.5898" width="49.1438" height="33.4161"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ffffff" x="308.189" y="-90.5898" width="49.1438" height="33.4161"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="308.189" y="-90.5898" width="49.1438" height="32.8215"/>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="331.572" y="-70.23">
|
||||||
|
<tspan x="331.572" y="-70.23">ME</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.9 KiB |
BIN
Documentation/mainboard/lenovo/ivb_bios_flashing1.jpg
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
Documentation/mainboard/lenovo/ivb_bios_flashing2.jpg
Normal file
After Width: | Height: | Size: 58 KiB |
BIN
Documentation/mainboard/lenovo/ivb_bios_legacy_only.jpg
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
Documentation/mainboard/lenovo/ivb_bios_uefi_only.jpg
Normal file
After Width: | Height: | Size: 62 KiB |
361
Documentation/mainboard/lenovo/ivb_internal_flashing.md
Normal file
@ -0,0 +1,361 @@
|
|||||||
|
# Ivy Bridge Lenovo ThinkPad Internal Flashing
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
Old versions of stock BIOS for these models have several security issues.
|
||||||
|
In order to flash coreboot internally, two of them are of interest.
|
||||||
|
|
||||||
|
**First** is the fact the `SMM_BWP` and `BLE` are not enabled in BIOS
|
||||||
|
versions released before 2014. We have tested many versions on T430 and
|
||||||
|
X230 and found out that `SMM_BWP=1` only since the update, the changelog
|
||||||
|
of which contains following line:
|
||||||
|
|
||||||
|
> (New) Improved the UEFI BIOS security feature.
|
||||||
|
|
||||||
|
**Second** is [S3 Boot Script vulnerability](https://support.lenovo.com/eg/ru/product_security/s3_boot_protect),
|
||||||
|
that was discovered and fixed later.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- USB drive (in case you need to downgrade BIOS)
|
||||||
|
- Linux install that (can be) loaded in UEFI mode
|
||||||
|
- [CHIPSEC](https://github.com/chipsec/chipsec)
|
||||||
|
|
||||||
|
## BIOS versions
|
||||||
|
|
||||||
|
Below is a table of BIOS versions that are vulnerable enough for our
|
||||||
|
goals, per model. The version number means that you need to downgrade to
|
||||||
|
that or earlier version.
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------+--------------+
|
||||||
|
| Model | BIOS version |
|
||||||
|
+============+==============+
|
||||||
|
| X230 | 2.60 |
|
||||||
|
+------------+--------------+
|
||||||
|
| X230T | 2.58 |
|
||||||
|
+------------+--------------+
|
||||||
|
| T430 | 2.64 |
|
||||||
|
+------------+--------------+
|
||||||
|
| T430s | 2.59 |
|
||||||
|
+------------+--------------+
|
||||||
|
| T530 | 2.60 |
|
||||||
|
+------------+--------------+
|
||||||
|
| W530 | 2.58 |
|
||||||
|
+------------+--------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
If your BIOS version is equal or lower, skip to the
|
||||||
|
**[Examining protections](#examining-protections-theory)** section. If not,
|
||||||
|
go through the downgrade process, described next.
|
||||||
|
|
||||||
|
## Downgrading BIOS
|
||||||
|
|
||||||
|
Go to the Lenovo web site and download BIOS Update Bootable CD for your
|
||||||
|
machine of needed version (see above).
|
||||||
|
|
||||||
|
Lenovo states that BIOS has "security rollback prevention", meaning once
|
||||||
|
you update it to some version X, you will not be able to downgrade it to
|
||||||
|
pre-X version. That's not true. It seems that this is completely
|
||||||
|
client-side restriction in flashing utilities (both Windows utility and
|
||||||
|
Bootable CD). You just need to call `winflash.exe` or `dosflash.exe`
|
||||||
|
directly. Therefore you need to modify the bootable CD image you just
|
||||||
|
downloaded.
|
||||||
|
|
||||||
|
Extract an El Torito image:
|
||||||
|
|
||||||
|
geteltorito -o ./bios.img g1uj41us.iso
|
||||||
|
|
||||||
|
Mount the partition in that image:
|
||||||
|
|
||||||
|
sudo mount -t vfat ./bios.img /mnt -o loop,offset=16384
|
||||||
|
|
||||||
|
List files, find the `AUTOEXEC.BAT` file and the `FLASH` directory:
|
||||||
|
|
||||||
|
ls /mnt
|
||||||
|
ls /mnt/FLASH
|
||||||
|
|
||||||
|
Inside the `FLASH` directory, there should be a directory called
|
||||||
|
`G1ET93WW` or similar (exact name depends on your ThinkPad model and
|
||||||
|
BIOS version). See what's inside:
|
||||||
|
|
||||||
|
ls /mnt/FLASH/G1ET93WW
|
||||||
|
|
||||||
|
There must be a file with `.FL1` extension called `$01D2000.FL1` or
|
||||||
|
something similar.
|
||||||
|
|
||||||
|
Now open the `AUTOEXEC.BAT` file:
|
||||||
|
|
||||||
|
sudo vim /mnt/AUTOEXEC.BAT
|
||||||
|
|
||||||
|
You will see a list of commands:
|
||||||
|
|
||||||
|
@ECHO OFF
|
||||||
|
PROMPT $p$g
|
||||||
|
cd c:\flash
|
||||||
|
command.com
|
||||||
|
|
||||||
|
Replace the last line (`command.com`) with this (change path to the
|
||||||
|
`.FL1` file according to yours):
|
||||||
|
|
||||||
|
dosflash.exe /sd /file G1ET93WW\$01D2000.FL1
|
||||||
|
|
||||||
|
Save the file, then unmount the partition:
|
||||||
|
|
||||||
|
sudo umount /mnt
|
||||||
|
|
||||||
|
Write this image to a USB drive (replace `/dev/sdX` with your USB drive
|
||||||
|
device name):
|
||||||
|
|
||||||
|
sudo dd if=./bios.img of=/dev/sdX bs=1M
|
||||||
|
|
||||||
|
Now reboot and press F1 to enter BIOS settings. Open the **Startup** tab
|
||||||
|
and set the startup mode to **Legacy** (or **Both**/**Legacy First**):
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Press F10 to save changes and reboot.
|
||||||
|
|
||||||
|
Now, before you process, make sure that AC adapter is connected! If your
|
||||||
|
battery will die during the process, you'll likely need external
|
||||||
|
programmer to recover.
|
||||||
|
|
||||||
|
Boot from the USB drive (press F12 to select boot device), and BIOS
|
||||||
|
flashing process should begin:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
It may reboot a couple of times in the process. Do not interrupt it.
|
||||||
|
|
||||||
|
When it's completed, go back to the BIOS settings and set startup mode
|
||||||
|
to **UEFI** (or **Both**/**UEFI First**). This is required for
|
||||||
|
vulnerability exploitation.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Then boot to your system and make sure that `/sys/firmware/efi` or
|
||||||
|
`/sys/firmware/efivars` exist.
|
||||||
|
|
||||||
|
## Examining protections (theory)
|
||||||
|
|
||||||
|
There are two main ways that Intel platform provides to protect BIOS
|
||||||
|
chip:
|
||||||
|
- **BIOS_CNTL** register of LPC Interface Bridge Registers (accessible
|
||||||
|
via PCI configuration space, offset 0xDC). It has:
|
||||||
|
* **SMM_BWP** (*SMM BIOS Write Protect*) bit. If set to 1, the BIOS is
|
||||||
|
writable only in SMM. Once set to 1, cannot be changed anymore.
|
||||||
|
* **BLE** (*BIOS Lock Enable*) bit. If set to 1, setting BIOSWE to 1
|
||||||
|
will raise SMI. Once set to 1, cannot be changed anymore.
|
||||||
|
* **BIOSWE** (*BIOS Write Enable*) bit. Controls whether BIOS is
|
||||||
|
writable. This bit is always R/W.
|
||||||
|
- SPI Protected Range Registers (**PR0**-**PR4**) of SPI Configuration
|
||||||
|
Registers (SPIBAR+0x74 - SPIBAR+0x84). Each register has bits that
|
||||||
|
define protected range, plus WP bit, that defines whether write
|
||||||
|
protection is enabled.
|
||||||
|
|
||||||
|
There's also **FLOCKDN** bit of HSFS register (SPIBAR+0x04) of SPI
|
||||||
|
Configuration Registers. When set to 1, PR0-PR4 registers cannot be
|
||||||
|
written. Once set to 1, cannot be changed anymore.
|
||||||
|
|
||||||
|
To be able to flash, we need `SMM_BWP=0`, `BIOSWE=1`, `BLE=0`, `FLOCKDN=0` or
|
||||||
|
SPI protected ranges (PRx) to have a WP bit set to 0.
|
||||||
|
|
||||||
|
Let's see what we have. Examine `HSFS` register:
|
||||||
|
|
||||||
|
sudo chipsec_main -m chipsec.modules.common.spi_lock
|
||||||
|
|
||||||
|
You should see that `FLOCKDN=1`:
|
||||||
|
|
||||||
|
[x][ =======================================================================
|
||||||
|
[x][ Module: SPI Flash Controller Configuration Locks
|
||||||
|
[x][ =======================================================================
|
||||||
|
[*] HSFS = 0xE009 << Hardware Sequencing Flash Status Register (SPIBAR + 0x4)
|
||||||
|
[00] FDONE = 1 << Flash Cycle Done
|
||||||
|
[01] FCERR = 0 << Flash Cycle Error
|
||||||
|
[02] AEL = 0 << Access Error Log
|
||||||
|
[03] BERASE = 1 << Block/Sector Erase Size
|
||||||
|
[05] SCIP = 0 << SPI cycle in progress
|
||||||
|
[13] FDOPSS = 1 << Flash Descriptor Override Pin-Strap Status
|
||||||
|
[14] FDV = 1 << Flash Descriptor Valid
|
||||||
|
[15] FLOCKDN = 1 << Flash Configuration Lock-Down
|
||||||
|
|
||||||
|
Then check `BIOS_CNTL` and PR0-PR4:
|
||||||
|
|
||||||
|
sudo chipsec_main -m common.bios_wp
|
||||||
|
|
||||||
|
Good news: on old BIOS versions, `SMM_BWP=0` and `BLE=0`.
|
||||||
|
|
||||||
|
Bad news: there are 4 write protected SPI ranges:
|
||||||
|
|
||||||
|
[x][ =======================================================================
|
||||||
|
[x][ Module: BIOS Region Write Protection
|
||||||
|
[x][ =======================================================================
|
||||||
|
[*] BC = 0x 8 << BIOS Control (b:d.f 00:31.0 + 0xDC)
|
||||||
|
[00] BIOSWE = 0 << BIOS Write Enable
|
||||||
|
[01] BLE = 0 << BIOS Lock Enable
|
||||||
|
[02] SRC = 2 << SPI Read Configuration
|
||||||
|
[04] TSS = 0 << Top Swap Status
|
||||||
|
[05] SMM_BWP = 0 << SMM BIOS Write Protection
|
||||||
|
[-] BIOS region write protection is disabled!
|
||||||
|
|
||||||
|
[*] BIOS Region: Base = 0x00500000, Limit = 0x00BFFFFF
|
||||||
|
SPI Protected Ranges
|
||||||
|
------------------------------------------------------------
|
||||||
|
PRx (offset) | Value | Base | Limit | WP? | RP?
|
||||||
|
------------------------------------------------------------
|
||||||
|
PR0 (74) | 00000000 | 00000000 | 00000000 | 0 | 0
|
||||||
|
PR1 (78) | 8BFF0B40 | 00B40000 | 00BFFFFF | 1 | 0
|
||||||
|
PR2 (7C) | 8B100B10 | 00B10000 | 00B10FFF | 1 | 0
|
||||||
|
PR3 (80) | 8ADE0AD0 | 00AD0000 | 00ADEFFF | 1 | 0
|
||||||
|
PR4 (84) | 8AAF0800 | 00800000 | 00AAFFFF | 1 | 0
|
||||||
|
|
||||||
|
Other way to examine SPI configuration registers is to just dump SPIBAR:
|
||||||
|
|
||||||
|
sudo chipsec_util mmio dump SPIBAR
|
||||||
|
|
||||||
|
You will see `SPIBAR` address (0xFED1F800) and registers (for example,
|
||||||
|
`00000004` is `HSFS`):
|
||||||
|
|
||||||
|
[mmio] MMIO register range [0x00000000FED1F800:0x00000000FED1F800+00000200]:
|
||||||
|
+00000000: 0BFF0500
|
||||||
|
+00000004: 0004E009
|
||||||
|
...
|
||||||
|
|
||||||
|
As you can see, the only thing we need is to unset WP bit on PR0-PR4.
|
||||||
|
But that cannot be done once `FLOCKDN` is set to 1.
|
||||||
|
|
||||||
|
Now the fun part!
|
||||||
|
|
||||||
|
`FLOCKDN` may only be cleared by a hardware reset, which includes S3
|
||||||
|
state. On S3 resume boot path, the chipset configuration has to be
|
||||||
|
restored and it's done by executing so-called S3 Boot Scripts. You can
|
||||||
|
dump these scripts by executing:
|
||||||
|
|
||||||
|
sudo chipsec_util uefi s3bootscript
|
||||||
|
|
||||||
|
There are many entries. Along them, you can find instructions to write
|
||||||
|
to `HSFS` (remember, we know that `SPIBAR` is 0xFED1F800):
|
||||||
|
|
||||||
|
Entry at offset 0x2B8F (len = 0x17, header len = 0x0):
|
||||||
|
Data:
|
||||||
|
02 00 17 02 00 00 00 01 00 00 00 04 f8 d1 fe 00 |
|
||||||
|
00 00 00 09 e0 04 00 |
|
||||||
|
Decoded:
|
||||||
|
Opcode : S3_BOOTSCRIPT_MEM_WRITE (0x0002)
|
||||||
|
Width : 0x02 (4 bytes)
|
||||||
|
Address: 0xFED1F804
|
||||||
|
Count : 0x1
|
||||||
|
Values : 0x0004E009
|
||||||
|
|
||||||
|
These scripts are stored in memory. The vulnerability is that we can
|
||||||
|
overwrite this memory, change these instructions and they will be
|
||||||
|
executed on S3 resume. Once we patch that instruction to not set `FLOCKDN`
|
||||||
|
bit, we will be able to write to PR0-PR4 registers.
|
||||||
|
|
||||||
|
## Creating a backup
|
||||||
|
|
||||||
|
Before you proceed, please create a backup of the `bios` region. Then,
|
||||||
|
in case something goes wrong, you'll be able to flash it back externally.
|
||||||
|
|
||||||
|
The `me` region is locked, so an attempt to create a full dump will fail.
|
||||||
|
But you can back up the `bios`:
|
||||||
|
|
||||||
|
sudo flashrom -p internal -r bios_backup.rom --ifd -i bios
|
||||||
|
|
||||||
|
If you will ever need to flash it back, use `--ifd -i bios` as well:
|
||||||
|
|
||||||
|
sudo flashrom -p <YOUR_PROGRAMMER> -w bios_backup.rom --ifd -i bios
|
||||||
|
|
||||||
|
**Caution:** if you will omit `--ifd -i bios` for flashing, you will
|
||||||
|
brick your machine, because your backup has `FF`s in place of `fd` and
|
||||||
|
`me` regions. Flash only `bios` region!
|
||||||
|
|
||||||
|
## Removing protections (practice)
|
||||||
|
|
||||||
|
The original boot script writes 0xE009 to `HSFS`. `FLOCKDN` is 15th bit, so
|
||||||
|
let's write 0x6009 instead:
|
||||||
|
|
||||||
|
sudo chipsec_main -m tools.uefi.s3script_modify -a replace_op,mmio_wr,0xFED1F804,0x6009,0x2
|
||||||
|
|
||||||
|
You will get a lot of output and in the end you should see something
|
||||||
|
like this:
|
||||||
|
|
||||||
|
[*] Modifying S3 boot script entry at address 0x00000000DAF49B8F..
|
||||||
|
[mem] 0x00000000DAF49B8F
|
||||||
|
[*] Original entry:
|
||||||
|
2 0 17 2 0 0 0 1 0 0 0 4 f8 d1 fe 0 |
|
||||||
|
0 0 0 9 e0 4 0 |
|
||||||
|
[mem] buffer len = 0x17 to PA = 0x00000000DAF49B8F
|
||||||
|
2 0 17 2 0 0 0 1 0 0 0 4 f8 d1 fe 0 |
|
||||||
|
0 0 0 9 60 0 0 | `
|
||||||
|
[mem] 0x00000000DAF49B8F
|
||||||
|
[*] Modified entry:
|
||||||
|
2 0 17 2 0 0 0 1 0 0 0 4 f8 d1 fe 0 |
|
||||||
|
0 0 0 9 60 0 0 | `
|
||||||
|
[*] After sleep/resume, check the value of register 0xFED1F804 is 0x6009
|
||||||
|
[+] PASSED: The script has been modified. Go to sleep..
|
||||||
|
|
||||||
|
Now go to S3, then resume and check `FLOCKDN`. It should be 0:
|
||||||
|
|
||||||
|
sudo chipsec_main -m chipsec.modules.common.spi_lock
|
||||||
|
|
||||||
|
...
|
||||||
|
[x][ =======================================================================
|
||||||
|
[x][ Module: SPI Flash Controller Configuration Locks
|
||||||
|
[x][ =======================================================================
|
||||||
|
[*] HSFS = 0x6008 << Hardware Sequencing Flash Status Register (SPIBAR + 0x4)
|
||||||
|
[00] FDONE = 0 << Flash Cycle Done
|
||||||
|
[01] FCERR = 0 << Flash Cycle Error
|
||||||
|
[02] AEL = 0 << Access Error Log
|
||||||
|
[03] BERASE = 1 << Block/Sector Erase Size
|
||||||
|
[05] SCIP = 0 << SPI cycle in progress
|
||||||
|
[13] FDOPSS = 1 << Flash Descriptor Override Pin-Strap Status
|
||||||
|
[14] FDV = 1 << Flash Descriptor Valid
|
||||||
|
[15] FLOCKDN = 0 << Flash Configuration Lock-Down
|
||||||
|
[-] SPI Flash Controller configuration is not locked
|
||||||
|
[-] FAILED: SPI Flash Controller not locked correctly.
|
||||||
|
...
|
||||||
|
|
||||||
|
Remove WP from protected ranges:
|
||||||
|
|
||||||
|
sudo chipsec_util mmio write SPIBAR 0x74 0x4 0xAAF0800
|
||||||
|
sudo chipsec_util mmio write SPIBAR 0x78 0x4 0xADE0AD0
|
||||||
|
sudo chipsec_util mmio write SPIBAR 0x7C 0x4 0xB100B10
|
||||||
|
sudo chipsec_util mmio write SPIBAR 0x80 0x4 0xBFF0B40
|
||||||
|
|
||||||
|
Verify that it worked:
|
||||||
|
|
||||||
|
sudo chipsec_main -m common.bios_wp
|
||||||
|
|
||||||
|
[x][ =======================================================================
|
||||||
|
[x][ Module: BIOS Region Write Protection
|
||||||
|
[x][ =======================================================================
|
||||||
|
[*] BC = 0x 9 << BIOS Control (b:d.f 00:31.0 + 0xDC)
|
||||||
|
[00] BIOSWE = 1 << BIOS Write Enable
|
||||||
|
[01] BLE = 0 << BIOS Lock Enable
|
||||||
|
[02] SRC = 2 << SPI Read Configuration
|
||||||
|
[04] TSS = 0 << Top Swap Status
|
||||||
|
[05] SMM_BWP = 0 << SMM BIOS Write Protection
|
||||||
|
[-] BIOS region write protection is disabled!
|
||||||
|
|
||||||
|
[*] BIOS Region: Base = 0x00500000, Limit = 0x00BFFFFF
|
||||||
|
SPI Protected Ranges
|
||||||
|
------------------------------------------------------------
|
||||||
|
PRx (offset) | Value | Base | Limit | WP? | RP?
|
||||||
|
------------------------------------------------------------
|
||||||
|
PR0 (74) | 0AAF0800 | 00800000 | 00AAF000 | 0 | 0
|
||||||
|
PR1 (78) | 0ADE0AD0 | 00AD0000 | 00ADE000 | 0 | 0
|
||||||
|
PR2 (7C) | 0B100B10 | 00B10000 | 00B10000 | 0 | 0
|
||||||
|
PR3 (80) | 0BFF0B40 | 00B40000 | 00BFF000 | 0 | 0
|
||||||
|
PR4 (84) | 00000000 | 00000000 | 00000000 | 0 | 0
|
||||||
|
|
||||||
|
Bingo!
|
||||||
|
|
||||||
|
Now you can [flash internally](/flash_tutorial/int_flashrom.md).
|
||||||
|
Remember to flash only the `bios` region (use `--ifd -i bios -N`
|
||||||
|
flashrom arguments). `fd` and `me` are still locked.
|
||||||
|
|
||||||
|
Note that you should have an external SPI programmer as a backup method.
|
||||||
|
It will help you recover if you flash non-working ROM by mistake.
|
164
Documentation/mainboard/lenovo/montevina_series.md
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
# Lenovo X200 / T400 / T500 / X301 common
|
||||||
|
|
||||||
|
These models are sold with either 8 MiB or 4 MiB flash chip. You can identify
|
||||||
|
the chip in your machine through flashrom:
|
||||||
|
```console
|
||||||
|
# flashrom -p internal
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that this does not allow you to determine whether the chip is in a SOIC-8
|
||||||
|
or a SOIC-16 package.
|
||||||
|
|
||||||
|
## Installing without ME firmware
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
.. Note::
|
||||||
|
**ThinkPad R500** has slightly different flash layout (it doesn't have
|
||||||
|
``gbe`` region), so the process would be a little different for that model.
|
||||||
|
```
|
||||||
|
|
||||||
|
On Montevina machines it's possible to disable ME and remove its firmware from
|
||||||
|
SPI flash by modifying the flash descriptor. This also makes it possible to use
|
||||||
|
the flash region the ME used for `bios` region, allowing for much larger
|
||||||
|
payloads.
|
||||||
|
|
||||||
|
First of all create a backup of your ROM with an external programmer:
|
||||||
|
```console
|
||||||
|
# flashrom -p YOUR_PROGRAMMER -r backup.rom
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, split the IFD regions into separate files with ifdtool. You will need
|
||||||
|
`flashregion_3_gbe.bin` later.
|
||||||
|
```console
|
||||||
|
$ ifdtool -x backup.rom
|
||||||
|
```
|
||||||
|
|
||||||
|
Now you need to patch the flash descriptor. You can either [modify the one from
|
||||||
|
your backup with **ifdtool**](#modifying-flash-descriptor-using-ifdtool), or
|
||||||
|
[generate a completely new one with **bincfg**](#creating-a-new-flash-descriptor-using-bincfg).
|
||||||
|
|
||||||
|
#### Modifying flash descriptor using ifdtool
|
||||||
|
|
||||||
|
Pick the layout according to your chip size from the table below and save it to
|
||||||
|
the `new_layout.txt` file:
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+---------------------------+---------------------------+---------------------------+
|
||||||
|
| 4 MB chip | 8 MB chip | 16 MB chip |
|
||||||
|
+===========================+===========================+===========================+
|
||||||
|
| .. code-block:: none | .. code-block:: none | .. code-block:: none |
|
||||||
|
| | | |
|
||||||
|
| 00000000:00000fff fd | 00000000:00000fff fd | 00000000:00000fff fd |
|
||||||
|
| 00001000:00002fff gbe | 00001000:00002fff gbe | 00001000:00002fff gbe |
|
||||||
|
| 00003000:003fffff bios | 00003000:007fffff bios | 00003000:01ffffff bios |
|
||||||
|
| 00fff000:00000fff pd | 00fff000:00000fff pd | 00fff000:00000fff pd |
|
||||||
|
| 00fff000:00000fff me | 00fff000:00000fff me | 00fff000:00000fff me |
|
||||||
|
+---------------------------+---------------------------+---------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
The last two lines define `pd` and `me` regions of negative size. This way
|
||||||
|
ifdtool will mark those as unused.
|
||||||
|
|
||||||
|
Update regions in the flash descrpitor (it was extracted previously with
|
||||||
|
`ifdtool -x`):
|
||||||
|
```console
|
||||||
|
$ ifdtool -n new_layout.txt flashregion_0_flashdescriptor.bin
|
||||||
|
```
|
||||||
|
|
||||||
|
Set `MeDisable` bit in ICH0 and MCH0 straps:
|
||||||
|
```console
|
||||||
|
$ ifdtool -M 1 flashregion_0_flashdescriptor.bin.new
|
||||||
|
```
|
||||||
|
|
||||||
|
Delete previous descriptors and rename the final one:
|
||||||
|
```console
|
||||||
|
$ rm flashregion_0_flashdescriptor.bin
|
||||||
|
$ rm flashregion_0_flashdescriptor.bin.new
|
||||||
|
$ mv flashregion_0_flashdescriptor.bin.new.new flashregion_0_flashdescriptor.bin
|
||||||
|
```
|
||||||
|
|
||||||
|
Continue to the [Configuring coreboot](#configuring-coreboot) section.
|
||||||
|
|
||||||
|
#### Creating a new flash descriptor using bincfg
|
||||||
|
|
||||||
|
There is a tool to generate a modified flash descriptor called **bincfg**. Go to
|
||||||
|
`util/bincfg` and build it:
|
||||||
|
```console
|
||||||
|
$ cd util/bincfg
|
||||||
|
$ make
|
||||||
|
```
|
||||||
|
|
||||||
|
If your flash is not 8 MB, you need to change values of `flcomp_density1` and
|
||||||
|
`flreg1_limit` in the ifd-x200.set file according to following table:
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+-----------------+-------+-------+--------+
|
||||||
|
| | 4 MB | 8 MB | 16 MB |
|
||||||
|
+=================+=======+=======+========+
|
||||||
|
| flcomp_density1 | 0x3 | 0x4 | 0x5 |
|
||||||
|
+-----------------+-------+-------+--------+
|
||||||
|
| flreg1_limit | 0x3ff | 0x7ff | 0x1fff |
|
||||||
|
+-----------------+-------+-------+--------+
|
||||||
|
```
|
||||||
|
|
||||||
|
Then create the flash descriptor:
|
||||||
|
```console
|
||||||
|
$ ./bincfg ifd-x200.spec ifd-x200.set ifd.bin
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Configuring coreboot
|
||||||
|
|
||||||
|
Now configure coreboot. You need to select correct chip size and specify paths
|
||||||
|
to flash descriptor and gbe dump.
|
||||||
|
|
||||||
|
```
|
||||||
|
Mainboard --->
|
||||||
|
ROM chip size (8192 KB (8 MB)) # According to your chip
|
||||||
|
(0x7fd000) Size of CBFS filesystem in ROM # or 0x3fd000 for 4 MB chip / 0x1ffd000 for 16 MB chip
|
||||||
|
|
||||||
|
Chipset --->
|
||||||
|
[*] Add Intel descriptor.bin file
|
||||||
|
# Note: if you used bincfg, specify path to generated util/bincfg/ifd.bin
|
||||||
|
(/path/to/flashregion_0_flashdescriptor.bin) Path and filename of the descriptor.bin file
|
||||||
|
|
||||||
|
[*] Add gigabit ethernet configuration
|
||||||
|
(/path/to/flashregion_3_gbe.bin) Path to gigabit ethernet configuration
|
||||||
|
```
|
||||||
|
|
||||||
|
Then build coreboot and flash whole `build/coreboot.rom` to the chip.
|
||||||
|
|
||||||
|
## Installing with ME firmware
|
||||||
|
|
||||||
|
To install coreboot and keep ME working, you don't need to do anything special
|
||||||
|
with the flash descriptor. Just flash only `bios` externally and don't touch any
|
||||||
|
other regions:
|
||||||
|
```console
|
||||||
|
# flashrom -p YOUR_PROGRAMMER -w coreboot.rom --ifd -i bios
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flash layout
|
||||||
|
|
||||||
|
The flash layouts of the OEM firmware are as follows:
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+---------------------------------+---------------------------------+
|
||||||
|
| 4 MB chip | 8 MB chip |
|
||||||
|
+=================================+=================================+
|
||||||
|
| .. code-block:: none | .. code-block:: none |
|
||||||
|
| | |
|
||||||
|
| 00000000:00000fff fd | 00000000:00000fff fd |
|
||||||
|
| 00001000:001f5fff me | 00001000:005f5fff me |
|
||||||
|
| 001f6000:001f7fff gbe | 005f6000:005f7fff gbe |
|
||||||
|
| 001f8000:001fffff pd | 005f8000:005fffff pd |
|
||||||
|
| 00200000:003fffff bios | 00600000:007fffff bios |
|
||||||
|
| 00290000:002affff ec | 00690000:006affff ec |
|
||||||
|
| 003e0000:003fffff bootblock | 007e0000:007fffff bootblock |
|
||||||
|
+---------------------------------+---------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
On each boot of vendor BIOS `ec` area in flash is checked for having firmware
|
||||||
|
there, and if there is one, it proceedes to update firmware on H8S/2116 (when
|
||||||
|
both external power and main battery are attached). Once update is performed,
|
||||||
|
first 64 KB of `ec` area is erased. Visit
|
||||||
|
[thinkpad-ec repository](https://github.com/hamishcoleman/thinkpad-ec) to learn
|
||||||
|
more about how to extract EC firmware from vendor updates.
|
44
Documentation/mainboard/lenovo/r60.md
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# Lenovo Thinkpad R60
|
||||||
|
|
||||||
|
Untested on boards with external Radeon graphics adapter. If you have such
|
||||||
|
board, proceed at your own risk and document if it does work.
|
||||||
|
|
||||||
|
## Flashing instructions
|
||||||
|
|
||||||
|
### External flashing
|
||||||
|
|
||||||
|
The flash IC is located at the bottom center of the mainboard. Access to
|
||||||
|
the flash chip is blocked by the magnesium frame, so you need to disassemble
|
||||||
|
the entire laptop and remove the mainboard. The flash chip is referenced as U49 in
|
||||||
|
the schematics and in the boardview.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
To disassemble the laptop, follow the [Hardware Maintenance Manual](https://thinkpads.com/support/hmm/hmm_pdf/42x3749_02.pdf).
|
||||||
|
|
||||||
|
### Internal flashing on Vendor BIOS
|
||||||
|
|
||||||
|
This [method](https://gist.github.com/ArthurHeymans/c5ef494ada01af372735f237f6c6adbe) describes a way to install coreboot with vendor firmware still
|
||||||
|
installed on the Lenovo Thinkpad X60. It is reported to also work in Thinkpad
|
||||||
|
R60, with the only difference being the board target you build coreboot for.
|
||||||
|
|
||||||
|
### Flashing on coreboot
|
||||||
|
|
||||||
|
Default configuration of coreboot doesn't feature any flash restrictions
|
||||||
|
like the vendor firmware, therefore flashrom is able to flash any rom without problems.
|
||||||
|
|
||||||
|
## Things tested and working in Linux 5.3:
|
||||||
|
|
||||||
|
- Intel WiFi card
|
||||||
|
- Suspend and resume
|
||||||
|
- Native graphics initialization. Both legacy VGA and linear framebuffer work
|
||||||
|
- GRUB2 2.04 and SeaBIOS 1.12.1 payloads
|
||||||
|
- Reflashing with flashrom (use flashrom-git as of 17.09.2019)
|
||||||
|
- 2G+1G memory configuration working
|
||||||
|
- 2504 dock USB ports if not hotplugged
|
||||||
|
|
||||||
|
## Things tested and not working:
|
||||||
|
|
||||||
|
- 2504 dock hotplugging
|
||||||
|
- Black bar at the left side of the screen. Doesn't appear in Linux. See picture at top
|
||||||
|
- Sometimes it takes several second to run coreboot. Just wait for it
|
BIN
Documentation/mainboard/lenovo/r60_chip.jpg
Normal file
After Width: | Height: | Size: 68 KiB |
44
Documentation/mainboard/lenovo/t410.md
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# Lenovo T410
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
* Dock has wrong ACPI ID (causes "AC adapter state cannot be read" in Linux)
|
||||||
|
* TPM not working with VBOOT and C_ENV bootblock (works without C_ENV BB)
|
||||||
|
|
||||||
|
## Flashing instructions
|
||||||
|
```eval_rst
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Type | Value |
|
||||||
|
+=====================+================================+
|
||||||
|
| Socketed flash | no |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Size | 8 MiB |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| In circuit flashing | Only in S3/WoL |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Package | SOIC-8 |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Write protection | No |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Dual BIOS feature | No |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Internal flashing | Yes |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
The flash IC is located at the bottom center of the mainboard. Sadly,
|
||||||
|
access to the IC is blocked by the magnesum frame, so you need to disassemble
|
||||||
|
the entire laptop and remove the mainboard.
|
||||||
|
|
||||||
|
Below is a picture of IC on the mainboard, with the pinouts labeled.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The chip will either be a Macronix MX25L6405D or a Winbond W25Q64CVSIG.
|
||||||
|
Do not rely on dots painted in the corner of the chip (such as the blue dot
|
||||||
|
pictured) to orient the pins!
|
||||||
|
|
||||||
|
[Flashing tutorial](../../flash_tutorial/no_ext_power.md)
|
||||||
|
|
||||||
|
Steps to access the flash IC are described here [T4xx series].
|
||||||
|
|
||||||
|
[T4xx series]: t4xx_series.md
|