Compare commits
7209 Commits
Author | SHA1 | Date | |
---|---|---|---|
0e7f0928f3 | |||
b29e5075e1 | |||
5ca32c0855 | |||
69ac9be039 | |||
e60b69f461 | |||
d5999adedc | |||
6455edb1b5 | |||
a80b0ef9a8 | |||
1842e2a7f4 | |||
33ea3e837d | |||
1d8832b3ed | |||
5d03264046 | |||
3fab7d1d91 | |||
fc189a3339 | |||
9e635d2c87 | |||
70f3ad9dc5 | |||
1cc43cf180 | |||
d37873beae | |||
c3a2c48bf6 | |||
fc7fecf7c8 | |||
020fb66698 | |||
891cc9a939 | |||
7bbed26ca9 | |||
967edec254 | |||
6220f8d833 | |||
d569845964 | |||
747154074c | |||
db561e6e39 | |||
bd660e2338 | |||
38b6ccfed9 | |||
da7ffb48b2 | |||
66f9a09916 | |||
bacd57dfaf | |||
749fe1eef9 | |||
e2af9b8481 | |||
f0a9128424 | |||
b94ecc4e69 | |||
99850600d0 | |||
a213ed659a | |||
47b9e457fa | |||
423d03c163 | |||
d35a4811db | |||
87abccdd89 | |||
f606a2f5e6 | |||
128bb2a7ca | |||
d8e55350f1 | |||
3647e5c151 | |||
ab9f64d011 | |||
b92853ed56 | |||
26905f70b7 | |||
71c0a94987 | |||
ab77008395 | |||
d6f71d03f1 | |||
2223cbf7de | |||
180ac500fc | |||
4185de5ff7 | |||
eb503296fc | |||
3ba6caf81e | |||
7e0dea6317 | |||
314b5c370b | |||
d1dfba4a1a | |||
c98e36fec5 | |||
4323175818 | |||
460c2c2483 | |||
9e21b2dbd7 | |||
187e4c4474 | |||
69a9565339 | |||
16a41ccaa1 | |||
26071aaadf | |||
94ad37619f | |||
16d05daffa | |||
c55934db61 | |||
2f7d0543ff | |||
3cce7a0311 | |||
d01a995cd3 | |||
5620b10546 | |||
31b4eb6c4a | |||
0a186ca8a9 | |||
55e3a6ae09 | |||
0fa793ccb0 | |||
22ba205f70 | |||
4d60d96497 | |||
71da5fe5e9 | |||
47924a297e | |||
ba269fd77e | |||
34745f613f | |||
04aae87da7 | |||
c94631718b | |||
0790030735 | |||
993f68ab5a | |||
6275e34523 | |||
cd7873a28a | |||
2cb7de09b2 | |||
23e3013830 | |||
eb84337344 | |||
c3c9afbdf1 | |||
d432e367c1 | |||
4f40b0a117 | |||
1e411a6402 | |||
67100b4147 | |||
3ce88e1fa0 | |||
358cbb3a30 | |||
1db2346e3f | |||
3233cf44ec | |||
50baa88184 | |||
e90b632e97 | |||
7340a499fb | |||
fe1b40b1dd | |||
a5cc0cfbf5 | |||
c93d4abb99 | |||
8ca2af1c0d | |||
223ddc298a | |||
1ac2ad0fbe | |||
783be13495 | |||
dc8679cefe | |||
04de23214e | |||
391709154c | |||
ccb53e1817 | |||
9c790a2fdc | |||
272804ff01 | |||
485937fd4f | |||
05383287a1 | |||
122457058e | |||
e7705f2df1 | |||
85ea91ae3c | |||
32bc1dc531 | |||
883d821503 | |||
3bb8c244f2 | |||
f1690f0ec1 | |||
c8464748cd | |||
025c575750 | |||
e0f3400547 | |||
91be00ef1b | |||
97b30d8659 | |||
1a8387eaba | |||
61e18ebdf1 | |||
e2286782c3 | |||
7ea4e02de6 | |||
7e8bad4daa | |||
1653cc7079 | |||
fdd0519761 | |||
51579edc60 | |||
b09e5001f3 | |||
540a664045 | |||
f751aee926 | |||
33ab29fd7c | |||
4c7eee2744 | |||
4dba4975b4 | |||
5edbea02d4 | |||
85e9f28461 | |||
a8eb477c2e | |||
79cc577ba2 | |||
ce1a9289b5 | |||
b2566f207e | |||
2d8aff3d93 | |||
8fd78a653f | |||
06e33226b3 | |||
b1c57d1beb | |||
c9e33573c1 | |||
8ab1752070 | |||
0d25e5ac67 | |||
f14445c145 | |||
5349dd14d6 | |||
cf39eea2f8 | |||
57fead75ba | |||
a00518a3c4 | |||
8b9768effe | |||
7bfdf5be63 | |||
8a41f4b71e | |||
5b14116a04 | |||
371f04811e | |||
06ea8f9b9a | |||
c043408ec5 | |||
eeedf83bcd | |||
8da24f156f | |||
c3aa832bc3 | |||
19bad30c75 | |||
f813b84486 | |||
98ce3f8dad | |||
fa9c6f13d2 | |||
667108199a | |||
a1024ac933 | |||
8c905a82f5 | |||
d5c458f98a | |||
498f1cc1f3 | |||
9e366b4e0b | |||
2aaf169cbe | |||
0c152cf1bb | |||
a08765d287 | |||
86d2afb86b | |||
6527b1acc7 | |||
12431d6eef | |||
d37c2c2318 | |||
0b75679cbb | |||
eaf83489f6 | |||
946fa5f941 | |||
2bc892cf56 | |||
b567977075 | |||
0226789dcc | |||
3b0eb602b9 | |||
1bde3124b4 | |||
e51c951799 | |||
32a414f64a | |||
7f80c0cf07 | |||
8fe2d5403f | |||
838e8375a3 | |||
1615ad67b5 | |||
7bb9a4f98b | |||
0cd9366df1 | |||
4e3141f19a | |||
4a2558b6d8 | |||
8312df4173 | |||
dff29e0c65 | |||
4929f43619 | |||
08258881ed | |||
4bbe8df1dc | |||
f30123b739 | |||
cc68c01bec | |||
aa4d9b94fd | |||
53229425c7 | |||
5aba3a2c06 | |||
8b400b8c64 | |||
06fff376a6 | |||
6bbc8d8050 | |||
8d010db58e | |||
0065b6974f | |||
da9aa6ddd7 | |||
721c8b457b | |||
d7e5f4b7c5 | |||
279afdc24b | |||
8a64b6fbdb | |||
ad62b9af65 | |||
fc63b8bbc0 | |||
f56249ba0b | |||
aaac678e80 | |||
286a0ab143 | |||
5b23002799 | |||
2b2325ef87 | |||
cff6a1df3b | |||
45ad4f041b | |||
f88208e0ac | |||
909be6a7d8 | |||
820dcfceb3 | |||
c47d43a8af | |||
73916defba | |||
718d185f1e | |||
c01a505282 | |||
757571eec1 | |||
fb7a1a420c | |||
eb722282da | |||
3f559d960c | |||
c6c4d00182 | |||
003fdcbda2 | |||
cd69259e0c | |||
50e060ea40 | |||
a05f8a96b4 | |||
bcd84fe149 | |||
d053f393c4 | |||
1f83e9d592 | |||
b5b135ccd7 | |||
9a4beb429d | |||
a35904b29c | |||
19f5201463 | |||
9204355b4d | |||
05532260ae | |||
ab92f26a13 | |||
168f046d71 | |||
76c7688f63 | |||
b40e193948 | |||
9ca43191ab | |||
ddf84986d5 | |||
67be491458 | |||
1c105b0c8a | |||
fced3fe170 | |||
e81f334c59 | |||
91160e19bb | |||
ec31d1ac76 | |||
11af74be00 | |||
fff2ad9926 | |||
f7fd9b145e | |||
1e504f7811 | |||
e6a03e0b1b | |||
b251c02460 | |||
9871b04183 | |||
3e88b18bb6 | |||
06ca4c5209 | |||
c1bf8ccdbc | |||
e990577d05 | |||
619f2b102d | |||
de3ace0629 | |||
cfa435a0ff | |||
90cc7e24b0 | |||
d12530cb83 | |||
251514d986 | |||
9e946079e8 | |||
faa3d4680c | |||
3f888ef845 | |||
6afeef829f | |||
6dda1e0556 | |||
36ced10364 | |||
daeaa772a2 | |||
df3064227f | |||
595202c304 | |||
3b0667dd2a | |||
7060b5d7fe | |||
acb6e138b2 | |||
d731a24ff1 | |||
b58e99dfa5 | |||
d3fa7fa5d8 | |||
3452eca26d | |||
2ef569a405 | |||
175778f059 | |||
3f7fd58823 | |||
b8c107c7b8 | |||
dacf083c2f | |||
a6450d7b76 | |||
769c309e3d | |||
cf2b72f951 | |||
b933495229 | |||
5e96399789 | |||
f131fc7f37 | |||
26bc3282f6 | |||
52b5b587f1 | |||
38e40414d2 | |||
57aa8b6a2b | |||
49c0e6416a | |||
83a127a189 | |||
d2abe9314e | |||
b32347415d | |||
e583dd3d51 | |||
a31872c615 | |||
2bbffc0442 | |||
ff28371521 | |||
062fdf13b8 | |||
d19f4e50aa | |||
053ea60682 | |||
15b570b716 | |||
2f66c709f4 | |||
ab1227226e | |||
c2540a958b | |||
016ef9e9bc | |||
b2e610011c | |||
2b27e236b5 | |||
c4427393c5 | |||
cff4507289 | |||
0b5d2e0f0b | |||
ab0a77453c | |||
267684f10e | |||
44e9c37f35 | |||
514363541f | |||
fc707892de | |||
6225a67740 | |||
3748aae7d6 | |||
533bc0a7ef | |||
a402a9e7ab | |||
20f71369d9 | |||
c3e9ba03b6 | |||
dce3927f20 | |||
df7aecd926 | |||
845a96dfd6 | |||
7701376cca | |||
7e6946a74c | |||
d6c15d0c8c | |||
893edeebc6 | |||
c38d543feb | |||
a2dcf735e4 | |||
957511cd92 | |||
4c2ce72341 | |||
5449007425 | |||
2b218e3e51 | |||
747eeaf3aa | |||
b91b0ccfc6 | |||
3f689ca24a | |||
8adbec26be | |||
b3f2323e84 | |||
1a9034cca6 | |||
75ebb6c5df | |||
01f96d78ff | |||
6f86ff3ac8 | |||
300b25a910 | |||
6e44d7c452 | |||
03f654c8ee | |||
dfb5a58d8e | |||
77bcc92936 | |||
84fdda3812 | |||
c82950bf79 | |||
f266932836 | |||
6336d4c48d | |||
ea415b335f | |||
4865fe97d9 | |||
2aa3b16a2b | |||
1d19127330 | |||
b28d8b68ba | |||
83e915e943 | |||
f34d003c15 | |||
54fe9f62fc | |||
e4fcc3ba2c | |||
ec576d1c97 | |||
0a656f033b | |||
d78a202843 | |||
6b239d8e08 | |||
5513c0a216 | |||
31eeda1c44 | |||
2ea99da49d | |||
69f6fd4589 | |||
edbf5d9138 | |||
d30894b835 | |||
2c64a806ee | |||
034e5e6fa5 | |||
da02719462 | |||
6d4c1f5f43 | |||
f9f5093644 | |||
afe15f0a34 | |||
b3a1a44ee2 | |||
b6fa7a28a4 | |||
ca62334d76 | |||
1b252fc37a | |||
6541956e97 | |||
07b6f16063 | |||
cd97982e2e | |||
2dfa53f80e | |||
72812fa516 | |||
1e7d69944d | |||
9cb2da45d8 | |||
cf2783882f | |||
e6e5ecb7e8 | |||
7bbe3bb9f0 | |||
d5292bf9a5 | |||
81b6f9b8ab | |||
87930b349f | |||
5e44252735 | |||
dc8fd37966 | |||
60132a43a6 | |||
d266710d2c | |||
dc666f50c7 | |||
82b8c3d1b0 | |||
d1215269a7 | |||
e371d42113 | |||
49bfdb35f4 | |||
7ace555cc1 | |||
d44fd0d04d | |||
2c89923ec5 | |||
0535804729 | |||
cc394d4d37 | |||
c3e75b42a4 | |||
314094fea6 | |||
b82afce18a | |||
ac1a5a8218 | |||
8d9780f6c2 | |||
2be9911c92 | |||
7ac3149b5d | |||
f5b346c912 | |||
bd294425c8 | |||
a6be58fece | |||
1ed36f9ce9 | |||
d4a12ec822 | |||
37d4ffb0a5 | |||
760970fb38 | |||
872b42486a | |||
4ebdf34e13 | |||
07cbd7684f | |||
41169def5c | |||
c896e92eaa | |||
e97e90959c | |||
0dbce4042f | |||
d6e00546a4 | |||
5c29daa150 | |||
f86baf3e90 | |||
65ca24c02e | |||
d13b2d0508 | |||
59de870aa3 | |||
51122920e8 | |||
90af720d4e | |||
1e2676bf1b | |||
5ce4c342a0 | |||
8bb2ed82bb | |||
19e7273ec2 | |||
0feaa85233 | |||
bae03a5195 | |||
a649310ea4 | |||
6085d39bdb | |||
e77d6dc852 | |||
3ef017c4d4 | |||
3d3152eec7 | |||
bbd237702a | |||
c27776dbaf | |||
109a58a852 | |||
76f5b225e2 | |||
841b2c8baa | |||
3126964d96 | |||
1d748c5346 | |||
c69c8ddc2b | |||
e124fa5a9d | |||
ec3c8b552d | |||
da44e34743 | |||
786a1fec27 | |||
48bf712d35 | |||
25176ef022 | |||
cb5323415e | |||
c6ff1ac29e | |||
b31aee9973 | |||
8cf6d4d7d6 | |||
2fbb6773e3 | |||
b318be2218 | |||
91600a3182 | |||
e49b2f088f | |||
522a1b526b | |||
e23245517b | |||
7b42811fa5 | |||
aa6d388597 | |||
95c021b63a | |||
79131f8323 | |||
7d9016931c | |||
24aea52e29 | |||
f40f209c15 | |||
51769b2f92 | |||
7515cd0d04 | |||
d06d5256e2 | |||
8a1cbf00aa | |||
2db6e6806b | |||
4902a802c8 | |||
3c3351306c | |||
1d4f936f61 | |||
e2c4a3518e | |||
c2c1dc9c76 | |||
15b83da39a | |||
4e008c699b | |||
744d6bd638 | |||
8c1258ab8b | |||
6627795289 | |||
67618dd250 | |||
0377a369b9 | |||
34856579f8 | |||
95b3ba5264 | |||
f9154c5cc6 | |||
3afb84a245 | |||
64925b5128 | |||
dd217362d4 | |||
5ce73e9836 | |||
e0368b434e | |||
da8c12b54f | |||
804adaa1f1 | |||
c6bf74ec75 | |||
a706ad5444 | |||
2dbe51a17c | |||
835f5cf23a | |||
ef62994b94 | |||
20c294884f | |||
934156694f | |||
43997b7aa3 | |||
22521ab2e6 | |||
4b2553eea5 | |||
75292a139e | |||
8712aa107f | |||
82a4e27341 | |||
7bc4dc5648 | |||
e7184b0ad0 | |||
a2333c3935 | |||
3f6e32a4b3 | |||
f3e50fc681 | |||
13f58e47ed | |||
61b22cb930 | |||
0421ea277c | |||
313e791385 | |||
6c19cb53ee | |||
6390c50703 | |||
f5a57a883b | |||
ab4eb2afc3 | |||
f5ca922c87 | |||
cda27c2492 | |||
ec558682fc | |||
2dce923524 | |||
7d1a948fbb | |||
e8b5c31f2c | |||
879e98d1aa | |||
dfd4ec2dbb | |||
a96e66a76f | |||
3910c4e488 | |||
993bc7098c | |||
611a5f821d | |||
e9fc8fd9b6 | |||
646edd18e6 | |||
cd26f08d94 | |||
7e48b47185 | |||
e81880dd0d | |||
3f88d7fd29 | |||
6fffd70435 | |||
4513020064 | |||
907bd5d44e | |||
9747f886db | |||
638dcf9a69 | |||
0bc3e3d590 | |||
26a52f492b | |||
cb10346cd5 | |||
909870aba6 | |||
8c70dd66da | |||
eaea9c987c | |||
e55e61f889 | |||
cae7944fc3 | |||
e11aeab132 | |||
55012d149a | |||
8601a16c9e | |||
3da1b0d439 | |||
b9499024c7 | |||
0eb9c57049 | |||
ad80e7f118 | |||
d3d82e09fc | |||
c641f7ed9f | |||
ee2e936f40 | |||
6267f5dd11 | |||
79a7ad6dda | |||
d25109905a | |||
458297c8ba | |||
d0b7adac7a | |||
ef2ac9b14c | |||
db866ba200 | |||
a6ce5d3faa | |||
3c86293dc1 | |||
b6fe048910 | |||
b544c00056 | |||
438f861663 | |||
5bd926428e | |||
954ed5500c | |||
4cc9b6c78d | |||
930d96e1b6 | |||
e7dd3ca405 | |||
5493b4543d | |||
a3a2ffbe57 | |||
aae963732c | |||
08618bd2ab | |||
e414a4e5b5 | |||
0f8b8d920c | |||
f212cf3506 | |||
844eda0f3b | |||
a70ed00bc2 | |||
9faae2b939 | |||
d2f678d3bd | |||
adc4753a8d | |||
085a226808 | |||
89393d633d | |||
796bd74d63 | |||
63649d24fd | |||
a144e4d6fa | |||
e7377556cc | |||
c70eed1e62 | |||
54efaae701 | |||
a2046b29ef | |||
53feeb0f1a | |||
d4cb736c31 | |||
2822d66238 | |||
71a743e961 | |||
de7f0736a1 | |||
1de326460e | |||
4ad7f5b1a4 | |||
33ff44c37c | |||
153ff207ad | |||
8803b21bbb | |||
f112f9f912 | |||
ee7e1300f4 | |||
bf2d227135 | |||
b30e2bfe34 | |||
21c60fa2b2 | |||
6bc6c5548e | |||
651f4d231c | |||
af9e459d12 | |||
228746b346 | |||
af39e0ebc1 | |||
c9394017db | |||
58954d2bf3 | |||
8052fe459c | |||
0571afe5d2 | |||
c0b1be0ba1 | |||
a2cfe9e900 | |||
d482c7dace | |||
1db4e3a358 | |||
a79b3f1c63 | |||
9e7ac6b034 | |||
031dc67a61 | |||
109b8589ca | |||
782341dd3a | |||
98a917443e | |||
ad7674ed00 | |||
e3682b6c1c | |||
f9e47cc4c2 | |||
4139c15276 | |||
d1584fb250 | |||
aedb1dfbbb | |||
c859f10eec | |||
768cd37bc3 | |||
dff185a28d | |||
cd36634994 | |||
d0cc3bc5ce | |||
66ee65f036 | |||
4d15d2fc12 | |||
7b78a805da | |||
6202d1b51a | |||
0afc41e865 | |||
66b462dd4f | |||
b03e994233 | |||
a6fe456cb5 | |||
68dc36c9b3 | |||
5ff742c740 | |||
334be3289d | |||
05b7524156 | |||
09a5323480 | |||
fff243461c | |||
7bcd062c01 | |||
4f73d930fe | |||
029f8eae7e | |||
b42899c1f7 | |||
9dd0f6f9f2 | |||
632bc24a03 | |||
245afa8955 | |||
5aee981ece | |||
055d4f25d1 | |||
f50bd6d82d | |||
d80607da4d | |||
30348c2058 | |||
df90c626e0 | |||
1ccf83c971 | |||
bde39e3738 | |||
e16c9df454 | |||
e2c653e049 | |||
12992f62c0 | |||
9d75e87428 | |||
637bef2037 | |||
09f7382935 | |||
126c27da06 | |||
a9fadb007d | |||
2e658f8edf | |||
2d324cafd8 | |||
3f3d6b3e27 | |||
5c1f178075 | |||
581383aaed | |||
3521e260e3 | |||
fb25f9fa05 | |||
d7892bc391 | |||
1c10590307 | |||
3ba79b319e | |||
a75ab2c46d | |||
05a7ffa25b | |||
44095c1edc | |||
8e9921178d | |||
94bb9a9f5f | |||
f0a017fe82 | |||
9895177517 | |||
c5d367b4d3 | |||
cf65627ffa | |||
bc896cd8a9 | |||
78824238b9 | |||
8ae5418853 | |||
fba0320842 | |||
69b6c56909 | |||
14df1b0eeb | |||
2bf28e52ee | |||
6ece0adf8c | |||
2ea751a588 | |||
dea45c1060 | |||
2cc351da5f | |||
680ed1f632 | |||
337afb0567 | |||
322f76dfbf | |||
d3f01b21fa | |||
c54d52d67d | |||
b3591f3982 | |||
c21df03ab6 | |||
3736127c97 | |||
3c0c3619bc | |||
8f537442d5 | |||
3b1a42f95d | |||
afc63844e2 | |||
acaa581a47 | |||
049ad67f76 | |||
04a7ce728d | |||
656015c258 | |||
6aaae1c893 | |||
0dfda74408 | |||
3a167f56f4 | |||
7592c3a317 | |||
43b8155352 | |||
87efe24cce | |||
3534c1e42d | |||
ba5e70e967 | |||
2397bafec5 | |||
f661b4df3b | |||
9981df3dde | |||
6d772bc6c3 | |||
cbc561f64a | |||
a26b02466e | |||
409dc3b2c0 | |||
3f4ed7a40b | |||
56db59c91a | |||
e1700fc832 | |||
2fe81b2810 | |||
4b85d46170 | |||
09e7b99837 | |||
6bb563f29c | |||
74e0390e74 | |||
513a1a81f7 | |||
8616442150 | |||
e4aadd323c | |||
769fc2768e | |||
bb3d01a249 | |||
7ec8d4b8f0 | |||
d6782f60f5 | |||
a28befdf8a | |||
2ac52e2a82 | |||
7f9be4206e | |||
55d2e72f71 | |||
14df2ef729 | |||
e956255509 | |||
57f70a10dd | |||
5ef8e6ebd1 | |||
250f01e7e3 | |||
3b2305eed9 | |||
35c8dcf992 | |||
fa13a6437e | |||
84601e468f | |||
6d8e0cdeab | |||
368598198d | |||
42d1660e4e | |||
f9aed65785 | |||
c5ad267a37 | |||
6f01f4307c | |||
096833fef4 | |||
79da216a56 | |||
146fe6da09 | |||
a2faaa9a27 | |||
7f520c8fe6 | |||
cb76069e87 | |||
0ca3a0792d | |||
d652a92a6a | |||
817994c1be | |||
990c84db9d | |||
ad55df9874 | |||
f04e76bcf0 | |||
ab5890d498 | |||
54e80cec9f | |||
47d6663bba | |||
43825e8960 | |||
9bf1d8f276 | |||
21046a33ef | |||
565bebe0b3 | |||
f7fdc3a5ab | |||
a86c198cd5 | |||
9622024a95 | |||
3f6891108b | |||
286c6dfd1b | |||
5ff460fc2e | |||
a86bbea04d | |||
58363b4a3b | |||
f3d8580cce | |||
c9add14629 | |||
ecf25fda86 | |||
7d81718cb8 | |||
a1e46aea79 | |||
f1a3503459 | |||
7ac4096450 | |||
3509138476 | |||
3ef7449392 | |||
6b2c9b1751 | |||
ba8202948a | |||
fd02ff0375 | |||
8fc49096f9 | |||
dcc249e295 | |||
ed7780d353 | |||
40a69f3935 | |||
7182b477eb | |||
21c8f9cab3 | |||
19ea62e19d | |||
17115156b0 | |||
1f4cb326fa | |||
af2d6dceab | |||
6e0044dbf2 | |||
ae75400ae3 | |||
4e21dee863 | |||
bbaae959bd | |||
dca74c16a3 | |||
84eb41d74c | |||
afd40b2e2f | |||
da24535309 | |||
e5e85e24f7 | |||
472d68b066 | |||
bb071c1283 | |||
586f24dab4 | |||
0c0208b590 | |||
2ad59714dd | |||
fb11c0dcc6 | |||
0766c98aaf | |||
05653ca256 | |||
a9492a6169 | |||
e5a1a4c5d6 | |||
74427cc554 | |||
1fb7dd076f | |||
726adde879 | |||
018a9af4d5 | |||
46275faf50 | |||
05400b7a2f | |||
6b867b8aa8 | |||
85a8169b61 | |||
45e6c82e68 | |||
7ccb2821d2 | |||
3080fe0a0c | |||
0907aa0fe6 | |||
969ed357f8 | |||
a914152fa6 | |||
c650d6c5bb | |||
c4d55e4397 | |||
a355b16eb0 | |||
c092222c39 | |||
18c1923e13 | |||
7980d85a13 | |||
ad8478f643 | |||
31f2b5aaba | |||
befa72b208 | |||
78c919bdc8 | |||
5d7f5bc973 | |||
674c62bbee | |||
64c9f1584c | |||
6217e9beff | |||
28e8ae5385 | |||
1c88cd6c2b | |||
d613da80ce | |||
9f49b66f46 | |||
53b08c347f | |||
e3110b8620 | |||
4ba64c99e3 | |||
82d6f90c5f | |||
303a4bfd4a | |||
d2c02420e2 | |||
1672b6c22c | |||
331dfaff70 | |||
2d92b1a3b1 | |||
4cdb2b9b75 | |||
b81dcc6c4d | |||
2b5067b2c7 | |||
0655761b67 | |||
781ae4aeb7 | |||
493233c4fd | |||
e775a90a30 | |||
9373e59bb2 | |||
df47e1c3e5 | |||
2b35780a27 | |||
fd1557f28e | |||
025a03f616 | |||
1a1f00cf41 | |||
f63c3f6448 | |||
c81f0b6433 | |||
3a2aa45eeb | |||
ffe4aededf | |||
b1baa980ea | |||
f1126a8c14 | |||
2ae61712ea | |||
b0c726b683 | |||
0050390102 | |||
8f64759326 | |||
78ca711338 | |||
968a23d2e0 | |||
6ee37ef59d | |||
500d81a95a | |||
baa4c07ed4 | |||
1dcd8dbf76 | |||
012ef7735d | |||
d2226060aa | |||
4afefd648b | |||
695f2feaf8 | |||
8440bf7114 | |||
56dd2d6ff1 | |||
6a5b53bef8 | |||
bd5233eb3d | |||
4f4322dd68 | |||
d88cf5f037 | |||
6648e4ec8c | |||
42d090a2ce | |||
c438bcd590 | |||
4af2add608 | |||
571477b514 | |||
8bed5efad7 | |||
b02452b490 | |||
03f05cff2f | |||
822ffe1ef0 | |||
ad41f55123 | |||
378ec8b0de | |||
8ce51cde94 | |||
6a9e6cd89e | |||
c3a27dffe9 | |||
0b344eea4d | |||
7012a59fc7 | |||
6880a7a18b | |||
97ca02cb17 | |||
042772a6bd | |||
0688ab8d95 | |||
3a065f1a76 | |||
d5d20d03fe | |||
f6cfbf3804 | |||
4ff7921753 | |||
90cca5422d | |||
9fca297ca4 | |||
d61839c3ea | |||
8b04dc730d | |||
dbcf293211 | |||
15f917e227 | |||
134c30761e | |||
497becf1f1 | |||
ad1e49afac | |||
46f3fa825f | |||
86b3a3b38c | |||
b0a0c6cab7 | |||
e1eca1d91c | |||
1e64d2386a | |||
11340e5e1e | |||
221ebdc6e5 | |||
833a3a879d | |||
bfb001d1a0 | |||
98d7de7ea9 | |||
106a0823c9 | |||
be1907a513 | |||
24c0b6abd6 | |||
4c14ca836f | |||
e68042f021 | |||
84227611d5 | |||
b94c867bb1 | |||
45b8465602 | |||
57f22f6ffe | |||
f6ce6030b9 | |||
d08c730198 | |||
a09c2e1624 | |||
44d2c8541a | |||
fb444b0d20 | |||
e736015fff | |||
cebf9e6f38 | |||
7b3029acb9 | |||
628a3c557d | |||
967b1963c8 | |||
3556ac539f | |||
de60e5b84f | |||
34fb497383 | |||
e24d7953bb | |||
2c5ea145a4 | |||
142940de79 | |||
3384904d06 | |||
b1343daac3 | |||
90fd0727c7 | |||
6fe488b45f | |||
8a34795e66 | |||
63626b1a4a | |||
32ceed8f26 | |||
09fc6342d2 | |||
f39e0f9318 | |||
c4ce11b8bf | |||
b3ffc323c0 | |||
6e0b96715a | |||
d6c3cd8ca3 | |||
e6f7c8e8cd | |||
0486458c73 | |||
4d2d171f02 | |||
c679b1f333 | |||
ab72fc24be | |||
6902203ce6 | |||
3b552759b8 | |||
0f8436cc91 | |||
de6bda63d9 | |||
4c65bfc3e8 | |||
cf3076eff1 | |||
6af3e6f4ff | |||
009518e79b | |||
66c22508c7 | |||
8885529e15 | |||
aaced4a932 | |||
cf9fc1ddfe | |||
c9c5e84d6f | |||
0ac555e8fb | |||
f7d1c8d1eb | |||
1a9efe3b28 | |||
a783305072 | |||
cf80cda7ce | |||
04008a9c14 | |||
c54d14f5b4 | |||
8afc1352f0 | |||
46551573b4 | |||
c22ad581c8 | |||
2af17af829 | |||
aea00f496b | |||
48418757cb | |||
f1d6883a99 | |||
94473afcd2 | |||
b59da487e1 | |||
7bc0ba211e | |||
a1ee8838a8 | |||
fcdbce2dec | |||
f5b974e4b7 | |||
95370e1f04 | |||
5c9237fd5f | |||
f04aedac27 | |||
8f05527485 | |||
6df3b64c77 | |||
1a5ce95815 | |||
a94a153477 | |||
36a4a9d414 | |||
5407e89d7b | |||
23b1afe4be | |||
a6db8f3cc3 | |||
ac4865c05f | |||
497b880701 | |||
01cb55b691 | |||
2e690eeaf2 | |||
e102c5d54b | |||
78d0256f1d | |||
5d8f02f3ef | |||
f0c5be2a4f | |||
4fbefc5282 | |||
37d5f004ab | |||
8541edec3d | |||
1e008e0e0e | |||
13e2a32639 | |||
d379840333 | |||
3c6d9e1879 | |||
ef05dc8a50 | |||
1c329a05de | |||
190e5bee4a | |||
624195e454 | |||
dcf52c87a6 | |||
7ed3fe2b47 | |||
d97eb646e7 | |||
f01a15952a | |||
ad19c2f58b | |||
e143243c1c | |||
e3c2391fca | |||
5ebcea3aaa | |||
8f6af1cc52 | |||
e07bb69f71 | |||
07e6499b48 | |||
14711d2b66 | |||
31312b21d1 | |||
516f06e0fb | |||
b878c19810 | |||
e911158d3e | |||
4f22f2f0e8 | |||
3a14338625 | |||
13415333fe | |||
0c273ae208 | |||
92d7017a04 | |||
e547bfc0af | |||
a5d6717494 | |||
6ff71c4574 | |||
f728852b56 | |||
00d0ddb62b | |||
63445298ac | |||
5949c238ae | |||
ae2cf49508 | |||
c529f5b7f2 | |||
3e8eb32fba | |||
47ed269251 | |||
6c3912f0bf | |||
015b3dc124 | |||
ccd7cd8c39 | |||
c88828daeb | |||
327205dc2a | |||
630a418fea | |||
8f95edcf9b | |||
d971e7670c | |||
016cc4296e | |||
9df0440c6c | |||
a6634f1f78 | |||
a9068aa4e0 | |||
48fa9225ca | |||
9651058c42 | |||
501956750f | |||
f385e9d253 | |||
386b084ee1 | |||
caf6d0bc52 | |||
b3070a5f1b | |||
4b2c12f093 | |||
802f43d67f | |||
2f1ef98bdc | |||
6e8692e184 | |||
6b522c31aa | |||
697faf0d5f | |||
26361862bd | |||
52c58929fd | |||
6d19a20f5f | |||
e7207593ec | |||
8fb453e6f5 | |||
387f3e5ff9 | |||
5a03ddcd91 | |||
d67edcae6e | |||
3032d76778 | |||
4041bcf629 | |||
2fd2923aeb | |||
bbf1df76a6 | |||
deed1e3c63 | |||
613da18fec | |||
166cbdec5b | |||
ada7fd6fe9 | |||
d3799d3326 | |||
9c71596493 | |||
7db270c25c | |||
5df5ade696 | |||
0a495eb658 | |||
f13a6f9e05 | |||
26d706bb33 | |||
dd4ef173f1 | |||
755db95d1a | |||
7470c902d8 | |||
c14ad8a84d | |||
ef676b143e | |||
3a903426de | |||
1018be2852 | |||
0cca6e24b7 | |||
15209ce39a | |||
5ba184000b | |||
f2af702df9 | |||
ef169d6cc6 | |||
2aef7f3cec | |||
3eb720c36e | |||
87ca3898f9 | |||
c1fa44091e | |||
977778f9f0 | |||
3313a78e36 | |||
0b8aefc656 | |||
a29498f599 | |||
0ce41f1a11 | |||
16f9bf83e0 | |||
371a6674ac | |||
b2b3ab7c43 | |||
47df66d765 | |||
d4b89091d2 | |||
94b761c8ed | |||
1abbf0e91d | |||
54788655f7 | |||
5716b4c358 | |||
7ec15c82f4 | |||
5a61cc5d22 | |||
0115606286 | |||
e0e98eb11d | |||
68aed91eb9 | |||
8ad5a62de9 | |||
990db2213f | |||
c2e4941367 | |||
15316e2321 | |||
bf2710e849 | |||
79152f3c81 | |||
28114ae71b | |||
0acb28a9c0 | |||
98485de881 | |||
36c1719143 | |||
40b41826e1 | |||
a5f5790c93 | |||
8a5283ab1b | |||
55d6238fa6 | |||
52fdc05013 | |||
9b1cbe040b | |||
9b731b5c08 | |||
3693294112 | |||
b2632cec0e | |||
7696290004 | |||
80fde629cd | |||
a4266691e3 | |||
9d917f67fe | |||
134da98a51 | |||
88fa156544 | |||
16e136795a | |||
a6508a4510 | |||
316c9a36d8 | |||
25c27b5595 | |||
3cdf353323 | |||
4d25f96504 | |||
414779db10 | |||
1c2ad45ec4 | |||
4e3cd74449 | |||
ab1b83d5a4 | |||
d3d0f07fd5 | |||
f765d4f275 | |||
e9a0130879 | |||
ead574ed02 | |||
be11d9369b | |||
49abfca717 | |||
1e8c9ad54f | |||
b8a7f04267 | |||
21fdd89b0c | |||
73bbcee932 | |||
a0f29312b4 | |||
395cbb4f97 | |||
fd7fe58e60 | |||
978f47add8 | |||
674ed24075 | |||
271b8a5f81 | |||
509d99ca6b | |||
b59c1f4345 | |||
bc0c364ea3 | |||
9eb4d0a069 | |||
dee0f8845b | |||
5f82433206 | |||
6c52c0b2ac | |||
bd3568aea1 | |||
c1efec7f16 | |||
9b8fa7214f | |||
036ccd73a3 | |||
017b5c453a | |||
b6892969cb | |||
5ac4b8552a | |||
2a244c682e | |||
75bdd43eb1 | |||
eeabd199f3 | |||
9fefd19071 | |||
528a1c40f7 | |||
15aad88404 | |||
c9826d7934 | |||
d72d52a7e4 | |||
c10fb3b9a2 | |||
19651a20e2 | |||
c62b477b6e | |||
e874df9e0b | |||
62a27385fd | |||
89bd4892b3 | |||
0cadafaac9 | |||
2e5d6a8153 | |||
cca1f371d2 | |||
07bc08c299 | |||
25b387a50b | |||
98456f4ee6 | |||
6efa5c3846 | |||
d913d490b5 | |||
0dd913510a | |||
92332635bf | |||
670cd70164 | |||
aece006b38 | |||
1af8923709 | |||
7665aefb0a | |||
b9d2589ca4 | |||
81dd52b7eb | |||
d2b9ec1362 | |||
a9a1913d4d | |||
5d6929772c | |||
adc7d8e6ec | |||
3a499725f0 | |||
fe7367801c | |||
c27ce827dc | |||
4946804f0b | |||
04ea73ee78 | |||
d985cdc763 | |||
bcbcecd38f | |||
98689df18f | |||
cd40ddfad8 | |||
0d6349ee0d | |||
69d5ef9d14 | |||
c0a1625df1 | |||
d2c2f83964 | |||
890788eb63 | |||
97fda101e3 | |||
01797b1737 | |||
771328f7df | |||
05b7cab1d7 | |||
50c11607a1 | |||
2df5abc53b | |||
26072787e0 | |||
488f03bca8 | |||
446082946a | |||
6bb72e4ab9 | |||
cede791d4f | |||
dac7f53a8b | |||
a558ca9aae | |||
de462804e1 | |||
a9473ecbb1 | |||
f33e835a06 | |||
523d669153 | |||
230639b620 | |||
e28d39180d | |||
1e6a889752 | |||
e673e5c09e | |||
e05fa66b24 | |||
eaba51015c | |||
b66907ac16 | |||
ce3d8c2bae | |||
29eeeceb2d | |||
4cec6b6d93 | |||
9eac039f59 | |||
e510f21319 | |||
84672a9639 | |||
e0af8aa34f | |||
6b93112545 | |||
f19a07b2e4 | |||
c8ed32ed52 | |||
3de0ac3651 | |||
6d7f3133fb | |||
c77660916e | |||
f76acba3bf | |||
87f883959d | |||
0d0ebb6be9 | |||
a29d4d2908 | |||
21e23480cc | |||
2b7cd1d0d4 | |||
c92ecaa4d6 | |||
ccd174686e | |||
bd48b235fc | |||
69b18f0b68 | |||
85376bfd9b | |||
63952e1060 | |||
5132570845 | |||
55a972236e | |||
d840e2b3f0 | |||
d13b41124b | |||
98a68ada47 | |||
b93796d624 | |||
dd477e9ba3 | |||
b133c61a91 | |||
c8767058e4 | |||
2c64a2c649 | |||
9d3b1b206c | |||
28e0cb4b23 | |||
715cb40963 | |||
0f14df46aa | |||
40a1966400 | |||
9f25e9d480 | |||
7ca21c1024 | |||
6c36d151a8 | |||
392d699570 | |||
fe701ee398 | |||
f41cb17fe2 | |||
4fe4355377 | |||
1a5f1c89d7 | |||
d35c7fe1bf | |||
c4ba0f4cbd | |||
ae4eee17dd | |||
22e0c560bb | |||
26f725efc2 | |||
7c9540ea1d | |||
c85f9c5897 | |||
3b6624b88e | |||
1156b35a23 | |||
19f5ba81be | |||
54f942499b | |||
2a1c4302d1 | |||
07065edd5e | |||
407f512cfe | |||
c7267631e2 | |||
5c568e00a5 | |||
42adb29853 | |||
96631f941d | |||
7a70b664c4 | |||
931a579a2e | |||
558602ff40 | |||
db48f7ea48 | |||
f95b4a708e | |||
51f2f2eba1 | |||
78d29bff72 | |||
159656b661 | |||
d385624ee6 | |||
d48a3a3b7f | |||
23012a0dff | |||
49e0510d57 | |||
167a512d84 | |||
98fb1bfa90 | |||
32664fd323 | |||
1a73eb08e7 | |||
fdf907e440 | |||
ba8ead817d | |||
655ef61937 | |||
f3127d4af7 | |||
22f97009ad | |||
3ffbc7c8e2 | |||
4817012e93 | |||
4587f84757 | |||
76ab2b7a8a | |||
946d3f9309 | |||
9a085745f1 | |||
eb38fa7e95 | |||
9e4fa330ef | |||
c4e4193715 | |||
1956a00953 | |||
3424f38ae6 | |||
29f2b258c8 | |||
f5d688a5a2 | |||
e52840a9ed | |||
4af38d440d | |||
a802be2910 | |||
ea98b40efe | |||
3fbe1949b1 | |||
d978174d1d | |||
421a962cc6 | |||
b29e2d58f2 | |||
2f954921b8 | |||
b0bf280be4 | |||
5f6f1dab7d | |||
21dde8b25f | |||
370123e1a3 | |||
718c6faff4 | |||
30cf14ff3f | |||
5220aeab6e | |||
b3c27f0a24 | |||
2257a35862 | |||
7129cbf2f1 | |||
b0817b0fe5 | |||
8a643703b8 | |||
50f2e4ccec | |||
d80884ea5a | |||
41baf0c3ff | |||
58bf3e7632 | |||
e63a5f1e7f | |||
61322d7ad2 | |||
dfbe6bd5c3 | |||
b06f8ddfe8 | |||
1ed082bc8b | |||
d4ab5bbc82 | |||
bb7f41d85a | |||
3d8e53f85a | |||
46fc684783 | |||
bf00401e8a | |||
6cc937e687 | |||
9b83f760cd | |||
8950706169 | |||
82b1e019a5 | |||
84bf089f6a | |||
c5f4a8c8f0 | |||
c6382cd4bf | |||
40b0fc3f8b | |||
5a5f6a76ec | |||
1effaca4e7 | |||
037ceda63d | |||
296164e0fe | |||
3c37b5a682 | |||
e9e08ceb3c | |||
3ee54bbf94 | |||
bb7f4c7a4f | |||
0f5d7b9daf | |||
c308554c10 | |||
de332f35da | |||
bb49bfce67 | |||
8c614f2017 | |||
b66757fc58 | |||
ac6a5080ec | |||
b87ad06d2d | |||
156a63881f | |||
cf04c61170 | |||
74258d789c | |||
76118a7d19 | |||
d522db048b | |||
cf2941aec2 | |||
e19d61b4e8 | |||
48c24ce5ee | |||
78d338ccb9 | |||
17ad4598e9 | |||
794f56bdf5 | |||
00fa4f01e4 | |||
75a7862c47 | |||
6d2f7d24ef | |||
888af331fe | |||
1d93b88af2 | |||
c5d0a2ea1f | |||
3487095304 | |||
2ce56f1523 | |||
a342f3937e | |||
9856892297 | |||
a419fd3728 | |||
2c2650a3c2 | |||
2c36889437 | |||
4881b045e4 | |||
1ef2c5303b | |||
e7864ceabc | |||
88030b722d | |||
fa5c69ff85 | |||
5797b2eb05 | |||
39315985e8 | |||
7187758038 | |||
3b43c01bba | |||
6dc7748551 | |||
9df62b04ff | |||
e20dd19dde | |||
f4181052af | |||
3e1b3b1f4f | |||
68dd00d634 | |||
f677d17ab3 | |||
45022ae056 | |||
33fcaf91ff | |||
73c11194b0 | |||
8ba7023cf8 | |||
96d3378dde | |||
c6fe265f68 | |||
496fb23c5d | |||
e8791361b5 | |||
4f32b64e4f | |||
076ce2f4d9 | |||
93faff84cb | |||
80496f0967 | |||
eaab80efaf | |||
d1be92ce07 | |||
aceaa71531 | |||
8f45bf2be7 | |||
4fe0cbac97 | |||
d50cf23e43 | |||
253cd5a7e6 | |||
dc4fceb59a | |||
4ebf9d359d | |||
d5a8155f1b | |||
967b84d5ea | |||
0b5b44e004 | |||
62e61c76b7 | |||
7d89a452d5 | |||
9937a063d4 | |||
660389ef9e | |||
38f1d13a75 | |||
32ca3cd246 | |||
26cf00ab49 | |||
c2ef1029fa | |||
91a580308c | |||
2c5652d72b | |||
39db144743 | |||
400ce55566 | |||
e64a585374 | |||
6205221a73 | |||
e7e01116e7 | |||
d5f23cecd9 | |||
dbd9ea070e | |||
63405dacb7 | |||
543e01a29c | |||
ff4f80bc4b | |||
bdd272a951 | |||
d46bb6bdf0 | |||
585210ad58 | |||
9706359fd8 | |||
0ccfc0cc53 | |||
9b7ae2f3fc | |||
84fbc30e92 | |||
2653cdbe0c | |||
521e48c87d | |||
e26c4a4611 | |||
da5491a626 | |||
92433c2878 | |||
71ae582f71 | |||
b2c136d960 | |||
223434644a | |||
6d88a5d588 | |||
15eb58d77b | |||
10d7845f09 | |||
773cc1b413 | |||
900fcb50f4 | |||
e1de6482d0 | |||
9814f8f037 | |||
6c96542a3e | |||
5ac643362b | |||
a71b6b3b4c | |||
af89f49b83 | |||
f7b57d0b78 | |||
ac4819de70 | |||
0f79a92bb6 | |||
43fcec67e5 | |||
5f7910d220 | |||
7f922b0f6a | |||
1541256f22 | |||
6db1b2fc24 | |||
b1ba6624cd | |||
de82ac7735 | |||
8ddd7d1e5e | |||
672d5ad20b | |||
d453081a57 | |||
afaedc96c8 | |||
fdff6c25a1 | |||
ba8751fc72 | |||
c366f90a2e | |||
1a6fd0b538 | |||
6539e10c4f | |||
f3aa6e9319 | |||
1bfda7293a | |||
5c0e72ff99 | |||
ca52a25882 | |||
e1b1ec7154 | |||
edba21e4a6 | |||
d1aa8eba72 | |||
bba0439d09 | |||
fdefe96503 | |||
8db8432cf5 | |||
1548458efd | |||
ecce847606 | |||
10509c6f19 | |||
ba748cc7c0 | |||
6985c90ff4 | |||
8dcfcb3106 | |||
374b937a25 | |||
419bfbc1f1 | |||
603963e1ba | |||
de5d04011c | |||
f9735dc760 | |||
eb75f7c360 | |||
83bd46e5e5 | |||
ce1064edd6 | |||
39363744cc | |||
4356e09235 | |||
a08475e9ab | |||
a07efab72a | |||
806ad196f3 | |||
d3037bdf64 | |||
a85951fb2f | |||
3c60375c57 | |||
1e69b0a863 | |||
99d258afcb | |||
d5325ddcc2 | |||
4b6f262ead | |||
fe66a0760c | |||
6ae7a2a101 | |||
d74df17eb4 | |||
5401aa207c | |||
309210c980 | |||
9baff96e0e | |||
022f76b0d3 | |||
38dc00bed1 | |||
49c8de74ee | |||
c8a842b708 | |||
a0729899d7 | |||
50cdce9575 | |||
ee941635e6 | |||
7cf9862657 | |||
819b143925 | |||
46caf09598 | |||
1f33a0c799 | |||
3087bf5283 | |||
56dceb2e1a | |||
e3c05c4a3f | |||
fa6ff60c8c | |||
dd14029457 | |||
d44221f9c8 | |||
834543c0c7 | |||
f7cc469139 | |||
9360feaf51 | |||
88607a4b10 | |||
d9169f826a | |||
82aa8f8d7b | |||
ef20ecc92b | |||
6f027ff28a | |||
17856b720b | |||
fd29ff3555 | |||
50b74b2a27 | |||
5fba1ea5bc | |||
6bedbd6116 | |||
2c343386df | |||
1f878fc67a | |||
778065146c | |||
999b916015 | |||
6fb0448187 | |||
84f2c63590 | |||
31bff01a72 | |||
3b6bddafe7 | |||
645064a59e | |||
4f6eccdcac | |||
f97ff0cd50 | |||
7aa44522f2 | |||
eec0d9b8dc | |||
fca506d579 | |||
cc335c7567 | |||
00b539452b | |||
4e6b7907de | |||
19c0ae540e | |||
5fdd201c17 | |||
33d4f73eef | |||
0425b0a4bb | |||
0b9896f328 | |||
a5072af67d | |||
2b59c610d0 | |||
0fa007be13 | |||
59e923d757 | |||
44d89f526d | |||
ad37763a5f | |||
b025de0ddb | |||
06125ebe87 | |||
2488bea1aa | |||
742c6fedbd | |||
8e8ca5c9b1 | |||
5ed02e11b1 | |||
6a7f5845e7 | |||
8b6f8cc1ac | |||
3cb0e278e5 | |||
917b400bc0 | |||
aeb7f0511b | |||
723e736db9 | |||
a8da35440b | |||
8ded4ce1aa | |||
0d61f3fcde | |||
2fd4907a4d | |||
da6ad0bc50 | |||
2d1d47bf3e | |||
6dff3fdd40 | |||
02820ca186 | |||
0562c1e758 | |||
3f59f082e3 | |||
ecf6531c47 | |||
d5de063dff | |||
0612f8d7d5 | |||
d17c4cbf29 | |||
bc94aeaac8 | |||
c831fb8b89 | |||
7d8c0c2c58 | |||
cac2217c93 | |||
205d5ab208 | |||
d1ccfc37bb | |||
4530af217a | |||
1fea734e54 | |||
d5a70bdfd5 | |||
c733540bc9 | |||
2930a72797 | |||
ff5d66836a | |||
fdb846ddf2 | |||
cb2b70b3d2 | |||
9c5dc1fd44 | |||
14331fdae6 | |||
b77c76c271 | |||
1d9a46ba9a | |||
d61e347bff | |||
fc458cdc53 | |||
87471366e4 | |||
339ae162b6 | |||
1e67f0773b | |||
15d8405584 | |||
3d1d966dd8 | |||
ffe6d54151 | |||
e180825080 | |||
8c678cf46a | |||
7de4bb5172 | |||
61452a11e2 | |||
6fe2937770 | |||
4496a2e277 | |||
0a7b6202a5 | |||
55ad8c3af0 | |||
7717725bfa | |||
884dfb6d3d | |||
174ca43583 | |||
0c392b3cfc | |||
a57447da08 | |||
dc20a7d45d | |||
1d900935df | |||
4586ccdfe6 | |||
200262c87d | |||
b269f873b0 | |||
80346d0490 | |||
5b2a2d008f | |||
66038c87da | |||
7e15e87ecc | |||
899e2ce6ce | |||
e6e84f1ea9 | |||
aa69e2859d | |||
8ac6a19155 | |||
0fb58f32c4 | |||
ae91cdabf6 | |||
bdebc8918c | |||
4fe3ba1ea8 | |||
256dd1198c | |||
d4c5b211d5 | |||
cc16ec13ef | |||
dfaff4d18a | |||
ce8763fb13 | |||
534b564345 | |||
19b885943d | |||
3debb1fe87 | |||
8383d3205b | |||
cfab6f69b6 | |||
1f42a38e0f | |||
ea525006a5 | |||
4f4151abdb | |||
b60920df52 | |||
dd35e2c8a9 | |||
ae7bd1eb23 | |||
8165583ed9 | |||
dd9b1d1dd5 | |||
e072247e6e | |||
a5fbd140d0 | |||
e391cbff7f | |||
5b5656565b | |||
eaca95eaf4 | |||
b7d2a6fbf5 | |||
951d9f6f96 | |||
83e7324969 | |||
dc03528355 | |||
756a0bd2fe | |||
a92b73f389 | |||
3d0af855d0 | |||
3a7e7c1998 | |||
62bafca159 | |||
0f416d6874 | |||
4658a98a63 | |||
e2d76a15d1 | |||
27d3f71f1d | |||
1f64e6aa85 | |||
d1d3e62f92 | |||
4ae44fce56 | |||
06c14d0962 | |||
338c8002d2 | |||
c423d7d8f1 | |||
63da206146 | |||
985a4fc96c | |||
6af5d81209 | |||
843b994163 | |||
e209b96e53 | |||
c80ff8437d | |||
2beadeec35 | |||
7e56626b0a | |||
063e1567d8 | |||
1a22d3bc7e | |||
ca0c8e75f9 | |||
5a0b252ded | |||
5ef3460d49 | |||
638bd13a65 | |||
892af1801f | |||
d34a785b49 | |||
2e3c880739 | |||
3a618dd214 | |||
c3f5293da7 | |||
6b3038efc0 | |||
fcc2950a60 | |||
54fcb7862d | |||
4a13126393 | |||
e1e455bc96 | |||
27667a2c0b | |||
8ce59d522b | |||
de028789fd | |||
c703beb31d | |||
1b25f1b47c | |||
99416035fa | |||
66a1e8d4e3 | |||
88900dce0a | |||
b7b085dc65 | |||
b0c6cffb09 | |||
f2c3d8076e | |||
d91b5cf5c9 | |||
1c54985bb0 | |||
0f8bf022fc | |||
ee8780eb78 | |||
03626c0094 | |||
c48d883d8b | |||
b4be50c9ca | |||
936dbe1d06 | |||
c1dc7932b5 | |||
8db79c1386 | |||
fa61f5aa55 | |||
f89c56a54d | |||
f349672966 | |||
6f7db07102 | |||
f47682e586 | |||
4e7a47350d | |||
7c5acd494a | |||
b159d5ba8f | |||
c75f2d8119 | |||
ded91fffb8 | |||
694d18a641 | |||
9ef07d8623 | |||
03eb8a8515 | |||
33fa95cd35 | |||
f26a7c7687 | |||
6b0102db76 | |||
9ce59742b7 | |||
bb0ab9e531 | |||
26036d9db3 | |||
2326a284ac | |||
2912e8e5dc | |||
86b8d176e8 | |||
df5e6f64b6 | |||
91595724e7 | |||
95c331b94b | |||
374d992fc8 | |||
c014ef5919 | |||
199b75f58a | |||
31dbfbc405 | |||
688eec1b97 | |||
fa80dfd34f | |||
69acbbfd56 | |||
211ceb5976 | |||
75a62e7648 | |||
cf9ea55473 | |||
bdd866e38a | |||
18764a328d | |||
7524400242 | |||
3e51d53064 | |||
392e886552 | |||
cde835e39e | |||
a52016cc46 | |||
ef8b95745f | |||
9fc7b8e973 | |||
370c116ca5 | |||
d63627fb84 | |||
24ae85c3ff | |||
ac8ebd0e73 | |||
3d398ad37a | |||
803cf02801 | |||
15192da7c7 | |||
8c4561d2ef | |||
9a32c41c03 | |||
f0de242df0 | |||
63ebb5bde1 | |||
05b1cb8be3 | |||
e0568595ee | |||
2cf9990ec8 | |||
7f60d24fbd | |||
ea81928e94 | |||
3b8ef2b01d | |||
b2e56c1160 | |||
cda59b56ba | |||
aa5f821ee3 | |||
2e38dbe5f1 | |||
0370bcf40c | |||
261d626669 | |||
ef250c47e4 | |||
f47ccbdd47 | |||
80d5c19590 | |||
28cee59ca2 | |||
c4b0fd0a86 | |||
41979d862a | |||
dce4d465a6 | |||
7160766ebf | |||
653f760b13 | |||
64e1fcaaf9 | |||
e1bd38bec5 | |||
0b4a1e220a | |||
4b0f6fa156 | |||
bb7f1b41e7 | |||
1d8d369dad | |||
44705c6e5e | |||
991467da4d | |||
03b99772f7 | |||
fad5395879 | |||
dd5411a8b1 | |||
2d602098f9 | |||
401f8c59bd | |||
1c8f699758 | |||
e781856af1 | |||
013ebbfa58 | |||
79b990d965 | |||
6f70d51fac | |||
55597ff279 | |||
adfaea5400 | |||
6fbd874391 | |||
8e5e9cf1a8 | |||
fd39f915f5 | |||
05b1bac072 | |||
c76e53ce30 | |||
6d569e0c6b | |||
c36e8bf24f | |||
11f7298249 | |||
3e3bae03cf | |||
4ba7b26019 | |||
0fc76910d6 | |||
21ed107958 | |||
384e9aed8c | |||
ce1af8b0bf | |||
ee0f225e3a | |||
87282737a8 | |||
8600893017 | |||
fe68ab9fd1 | |||
9569ebeab8 | |||
3b5351d044 | |||
33354ddaa8 | |||
fb758d420b | |||
a5b265bb0c | |||
0186912f9e | |||
b7c0b8c8ee | |||
6688f466a8 | |||
f87627c25b | |||
77ad581ce9 | |||
5cc9ef414f | |||
f585141cb9 | |||
274925f153 | |||
3dd4953ac1 | |||
672f56166d | |||
ce7bc17149 | |||
e27c096b7f | |||
aef592d9b6 | |||
d145c95208 | |||
0e788c985c | |||
b69ae97ada | |||
6635b3d9a1 | |||
8120759d90 | |||
0805cbe6ae | |||
9b08a18966 | |||
58344fc2e7 | |||
661907cdb4 | |||
6bbfb3bfd6 | |||
4cafc88619 | |||
78f2343aa2 | |||
903c9764a1 | |||
5dff396bef | |||
216345dd24 | |||
f3122426b8 | |||
990d825196 | |||
fdcc0b3915 | |||
3762e99893 | |||
2436349a3b | |||
446e4d73cb | |||
8fda8f4ac3 | |||
3db0198358 | |||
7bb53aa386 | |||
75db596654 | |||
403458e7ec | |||
24ad29e83c | |||
90b3149deb | |||
328ff7dee0 | |||
6b5c3c2953 | |||
0c87b55266 | |||
fcd70085c2 | |||
982c7555ad | |||
993869e3fc | |||
c3e5dd4cd8 | |||
5e90ef8c35 | |||
79f99f640c | |||
65bba289ee | |||
4c7349cf85 | |||
837e3387e5 | |||
7a5f0a9817 | |||
478f430182 | |||
4b2d865820 | |||
5d4cf36044 | |||
8abf6ae757 | |||
4ddd47697e | |||
f9ea7edea8 | |||
93a51766aa | |||
f2592f9bce | |||
56508967d8 | |||
c5cca15cce | |||
a1ccaed126 | |||
073d22b8ab | |||
d54f825ed1 | |||
289e6ce252 | |||
4d5616bf40 | |||
24151963f3 | |||
16ebc9831f | |||
9116eb660e | |||
31a4700ce9 | |||
70866e9f38 | |||
0a7d6908bf | |||
240eaaad28 | |||
58a7e397a1 | |||
cf79c8344d | |||
052b5317da | |||
fcca617eaf | |||
651b11be2d | |||
ab36e26caa | |||
1b564556e9 | |||
0e1a526242 | |||
053851f283 | |||
eb2fc04c97 | |||
a2c0cf5dfe | |||
c5ee35ff86 | |||
e166ea4d2a | |||
e6c8f7ec20 | |||
db2f91b1f7 | |||
c65a600b8e | |||
b74e399c7d | |||
e6809907e7 | |||
a07366c9f9 | |||
44cff7a897 | |||
5846d5727a | |||
8f560d9b9c | |||
84258db5d5 | |||
fa1a07bf50 | |||
19e4f74fc4 | |||
24efe73dfd | |||
4d2af9df7c | |||
e155e78a47 | |||
7200638b6d | |||
eb6f2f55ff | |||
015339fbf0 | |||
1f6369e333 | |||
38eb0ecca5 | |||
3388fdecf2 | |||
0e596ae760 | |||
cc11c97b70 | |||
b54d15487a | |||
5d790e3f52 | |||
20df17cc65 | |||
c1cb6da816 | |||
1950ed9ee3 | |||
9084c3c31b | |||
9557a34abe | |||
afa07f7ae4 | |||
55a8d8a772 | |||
bb0cf01911 | |||
7dff726b78 | |||
5251ff7204 | |||
bfae9a861a | |||
64efbe20bf | |||
3a9d222c1e | |||
2de750b141 | |||
08c9a7ce1f | |||
15e6469ef9 | |||
eac84ca35c | |||
ddcf5a05e3 | |||
e051dc07f5 | |||
74ab031ba1 | |||
b0622de878 | |||
6e89d3bc52 | |||
532e8a9bf5 | |||
5d6593a43c | |||
2d22cda32c | |||
89af71c7dd | |||
9010140c6d | |||
84978674e3 | |||
108bf29516 | |||
24462e6507 | |||
e17ec3e2e8 | |||
4ae02818fc | |||
1faa11ed39 | |||
4988fe2986 | |||
b425bc8cd0 | |||
e37d771001 | |||
b6f2e7bd4c | |||
bad8fbb22c | |||
9b56ef05cc | |||
bc2a2a0a26 | |||
632b2321eb | |||
dfffcad66f | |||
12f6d91a98 | |||
885d963391 | |||
0b13397d15 | |||
068253c369 | |||
fe124925ad | |||
97c8089430 | |||
cc68034ee9 | |||
f716f2ac1a | |||
c3f9d7a4c3 | |||
6bbfc5e7dd | |||
c1cefba150 | |||
1d0de7874d | |||
0d9b441385 | |||
01b6ea4126 | |||
e4d46689b3 | |||
d8b34e41dc | |||
c26c93887a | |||
ea6a3c7d24 | |||
d7decb8244 | |||
b4be7aa093 | |||
acffb2cdd9 | |||
8cf059ae06 | |||
ed365412b2 | |||
ec6d01579b | |||
fb09693ab6 | |||
d820f4b8fb | |||
7c1e959ff6 | |||
a5ac91c256 | |||
cac468c834 | |||
b3e15a2895 | |||
cea31ea5eb | |||
75b1f768d8 | |||
8954395039 | |||
06fd881ed9 | |||
0f3609b3a2 | |||
d64b940801 | |||
dfc9917080 | |||
8bd25abc05 | |||
b75a08b199 | |||
eceba31c7f | |||
cdb9b0c9b5 | |||
6f9c84dc88 | |||
e08ffa615e | |||
b3138821f2 | |||
6cfa4f763d | |||
2919f7f703 | |||
8113083cdf | |||
1002b443b1 | |||
d2113154d3 | |||
a4797aa9f6 | |||
fd9f4f702c | |||
65bb5434f6 | |||
870f69e221 | |||
2527648d8c | |||
e308cc6186 | |||
348b79f057 | |||
995b99d996 | |||
60915b3157 | |||
8da2fa06f8 | |||
afa5ec8d5f | |||
e7cacb1a84 | |||
487f7f24a5 | |||
72b2022b31 | |||
9fb8e22ffa | |||
d7d376b726 | |||
c210d0e31a | |||
1efe2578c0 | |||
4cb8ac234b | |||
2dd7b6b2f9 | |||
7130ca0ce0 | |||
736b124136 | |||
31c2ccacf6 | |||
217ecd112b | |||
0005aabe2f | |||
9315a045cb | |||
128b0cf66e | |||
9ed805cc76 | |||
0f3574e9b6 | |||
fbd6f3995c | |||
654289993b | |||
9cd65cd4b5 | |||
c3cbbe6a78 | |||
19ab8139e8 | |||
11d0c32e69 | |||
617fcf3934 | |||
6cf9402ebb | |||
4b95fa277a | |||
ff23d21e33 | |||
17ce00d288 | |||
c1433f77f3 | |||
bf5ccfd05f | |||
545ed7ab3b | |||
52acef175e | |||
eead87961f | |||
3fca4ed45e | |||
6539edef41 | |||
3d45000c9c | |||
1895838e7a | |||
5cdd9aab34 | |||
940bb4ea42 | |||
dfc30130e9 | |||
fb03dd6043 | |||
fc19ab5f34 | |||
e819c85760 | |||
0c5f61a01c | |||
73be9dd82c | |||
af7f9eeddf | |||
3b1987b6be | |||
042b53ad65 | |||
bb7424f30c | |||
43bd594af9 | |||
ece26961b9 | |||
394ec02298 | |||
58d5df778a | |||
f0a58df785 | |||
1ec76447c0 | |||
08fc8fff25 | |||
2f79eb3fd5 | |||
64f6b71af5 | |||
bc0ec507f2 | |||
809aeeed98 | |||
6de6571f1c | |||
089b685761 | |||
d87a9b8e67 | |||
5e9785d6e4 | |||
b1299c7aab | |||
569711a4ff | |||
cc9b3348d2 | |||
cb5304bc0a | |||
60828b7fa9 | |||
79ab843edf | |||
4cc0126188 | |||
2fdbe0caf7 | |||
ea45ecfb89 | |||
248c60a672 | |||
486df4612d | |||
8346a44dd1 | |||
cc6dc90f30 | |||
8c38a8b191 | |||
3f61949294 | |||
790534104a | |||
74473ec65b | |||
f9a63c0a84 | |||
2e49cf129a | |||
bd4a3f8cd9 | |||
e13dd172b1 | |||
bddd157ea1 | |||
b388c0e557 | |||
9a30c7289f | |||
577e41c06e | |||
3f16a0f113 | |||
38ad45c893 | |||
d3131e4164 | |||
2b68cb08a8 | |||
c7b23e9dc8 | |||
94e2ec7253 | |||
b47b6e9f28 | |||
90f025b276 | |||
c49ab459bc | |||
27bb066b9e | |||
0d22614f46 | |||
1758e73ee6 | |||
fcba427229 | |||
fb10ceb8a7 | |||
efc71c8059 | |||
509e5fd4c0 | |||
2b26baa625 | |||
3870dd9be4 | |||
bb95731dad | |||
8aee7f7fad | |||
c14307e50a | |||
f5fd9a3e59 | |||
6b0fc80ff2 | |||
c024381f8f | |||
a8b4b75d24 | |||
54bb0ce17c | |||
11f016063f | |||
351655cfd0 | |||
3d1bd1f042 | |||
bd6f00f7a3 | |||
0d8d4c642a | |||
9ea7762e79 | |||
b978b61b4a | |||
bb18b43065 | |||
cea8493285 | |||
3a2f900cfe | |||
f83d80bfe8 | |||
22ca8cb415 | |||
752cdbc132 | |||
04be2dd757 | |||
29a9c0718d | |||
6837769a90 | |||
a4432f469a | |||
6838aaebf9 | |||
bce49c2304 | |||
0a0340e42e | |||
62431a7224 | |||
2d5f9cace5 | |||
921a4cfa3f | |||
66da032891 | |||
8f731b847e | |||
19961a4b1b | |||
ad691ad65d | |||
4505ab2a1f | |||
b3587a60ab | |||
59962f3015 | |||
4c1b6b31c0 | |||
3638a52a64 | |||
177f343bcc | |||
32912997bc | |||
302e7bc5de | |||
cc7a411fc5 | |||
8cd17eae2f | |||
4af5d9a94a | |||
f56ac33f3b | |||
60c44e2578 | |||
5745456343 | |||
c9f0732cf1 | |||
404962f32c | |||
eb7940d8b0 | |||
0aa52739dd | |||
73b723d7db | |||
6444d7df0b | |||
ed219ae306 | |||
09fbaaaff7 | |||
3044af7adc | |||
9fe248fbec | |||
ff22b6aca6 | |||
b9c049a368 | |||
07bc3251a9 | |||
ee09878f45 | |||
70627775f2 | |||
9cf1dd280f | |||
f9b826ac37 | |||
b802c0772e | |||
2463aa9117 | |||
fe68a775d5 | |||
8908931f1e | |||
15e1b39e6e | |||
c6e13b6690 | |||
17041207f2 | |||
bf7ad3775c | |||
aae6b88748 | |||
38f3ffad3f | |||
44a1ab2d05 | |||
c9c954f681 | |||
785dee005b | |||
781693f211 | |||
d945621b5d | |||
5b7c6f52e6 | |||
7a98591a1d | |||
4e71436d5f | |||
4665c593ef | |||
d30201feaf | |||
7108107fa2 | |||
90b2cca81f | |||
432575c5d3 | |||
aade90e68d | |||
6cd2c2f6ff | |||
06f818c932 | |||
e8d0c0092a | |||
dbf5a5d0f8 | |||
e67f626664 | |||
a28eb8b2f4 | |||
baea5994d8 | |||
2dc63895eb | |||
ecb2399ab8 | |||
5d3707bbc3 | |||
2e90ee38e7 | |||
9b7e096073 | |||
8928bc0d63 | |||
b89bd788be | |||
1be16f08f2 | |||
0d3915714c | |||
2276d4f4a8 | |||
4f9ff53e42 | |||
d091cd1fc1 | |||
e81b2e4712 | |||
448f5abaf0 | |||
5cdaa3305e | |||
e15556ed3a | |||
520149dc63 | |||
cd62cac9e1 | |||
791ba97d1d | |||
f849972f65 | |||
405a0f5230 | |||
86b299ab35 | |||
00d2b913c3 | |||
0ea7471eec | |||
2ee7f483b1 | |||
dc515b5aed | |||
7a3458432c | |||
2bb3cdfb9f | |||
55823c3d36 | |||
b9267f0cec | |||
a662777b6f | |||
f2ec648fcb | |||
66ce18c508 | |||
708cf4b34e | |||
4dc6646f53 | |||
df1a065215 | |||
660dd00079 | |||
48b24252f6 | |||
d31d1f8bd1 | |||
fa1f6ff09e | |||
f18dc5c72c | |||
ef8c559e53 | |||
9e1b9b5a7e | |||
74203de851 | |||
2a7be5bf30 | |||
030ba1bff3 | |||
6dcb6c2fa4 | |||
bd21f2844b | |||
6bffc5c269 | |||
8689a239f9 | |||
ed3242e338 | |||
853bb4dc11 | |||
7d7c631066 | |||
e830513def | |||
131ff8ccec | |||
9faa584cc9 | |||
86d0d6e2cf | |||
9d6523c7db | |||
a93d22dd58 | |||
c864958a48 | |||
1d9199c60e | |||
dd770a8460 | |||
2cc81dc4b7 | |||
ce31521611 | |||
0a144fa583 | |||
06a41f1f60 | |||
4a12a56cdf | |||
e7f4780137 | |||
2fcc034705 | |||
a0dabd1848 | |||
8c2852420c | |||
e75bac3a00 | |||
968ac7914d | |||
5af2deae92 | |||
652c491917 | |||
8ba9e8cf63 | |||
ed6d1e6dcc | |||
de690a30a4 | |||
4c2f26c9fc | |||
3d00f7798c | |||
03e9cb9b35 | |||
4c067c8550 | |||
0545166485 | |||
5eb2115c3d | |||
c9297c6780 | |||
d308ed37bc | |||
d1b482c716 | |||
9c462c617e | |||
d7b88dcbcd | |||
e3816b4bc9 | |||
db70f3bb4d | |||
b009ac49c8 | |||
5ee9bc1840 | |||
8c85880236 | |||
a2c49b0299 | |||
552bc70c65 | |||
bbc3094441 | |||
8ac8ac635c | |||
72d77a9a0c | |||
770b0346ff | |||
e750b38e48 | |||
6b27c38f4a | |||
fefd8e7fde | |||
bba1ee070d | |||
ec975b0a4f | |||
19e7060d7f | |||
57dd073369 | |||
4966a8c136 | |||
9ae150a591 | |||
9990943782 | |||
ae3aaeb045 | |||
987d42da1d | |||
234eabaa8d | |||
21e09b1c15 | |||
fbc87b638a | |||
c8e974f063 | |||
8583a716bc | |||
333ad475fa | |||
edf51d2352 | |||
3f4f5a34ed | |||
de4410c51f | |||
367956d58e | |||
f63422aac0 | |||
b7ff886f0e | |||
e98f305abd | |||
61c3b593e4 | |||
8cbe3528dc | |||
d391754108 | |||
f59a052ee8 | |||
357ea55f45 | |||
39f3c7e184 | |||
0b9cfe60b2 | |||
86669939ea | |||
113f670baa | |||
71955a5b3f | |||
109faa6719 | |||
f71f1796ce | |||
71d227b108 | |||
ccb62960db | |||
c430ecec9e | |||
5ef51edd4c | |||
5254104b46 | |||
a8fa25138b | |||
4a6477ed64 | |||
31fb846c59 | |||
f281b6d175 | |||
6b7178aa10 | |||
60eca531df | |||
94d79a338b | |||
390fb506cc | |||
d0c6797e79 | |||
02c0814764 | |||
4e2f95b789 | |||
fe98e90671 | |||
5348512451 | |||
b082670234 | |||
a302e7f46b | |||
202e7d4f3c | |||
eeb83b6b53 | |||
ebde659503 | |||
e577168ae3 | |||
82eb80cc8c | |||
35da319b72 | |||
3a1a956286 | |||
faca0bc2fa | |||
b0d868e8fe | |||
c40275bce0 | |||
3a59174cf0 | |||
6d4a060bba | |||
9911d64b9e | |||
ad417c9c7b | |||
cdeb41482a | |||
52a022f680 | |||
1b43ad7149 | |||
5fed693a52 | |||
745e58a5ee | |||
f17a0df112 | |||
80961af4b6 | |||
d29c81d513 | |||
c534a066d8 | |||
e73e81d029 | |||
812a839744 | |||
51962d3f13 | |||
30b7c31547 | |||
125506e6fb | |||
780114fb07 | |||
bb11232210 | |||
239e435739 | |||
4461613119 | |||
2531865f13 | |||
06528d97a9 | |||
de8e68917f | |||
8247f3df67 | |||
290c445911 | |||
ee03dc2644 | |||
f3dc659516 | |||
fce1d38054 | |||
85aec31c14 | |||
c9ed3ee8d8 | |||
517c4c1563 | |||
cff16b6f9d | |||
50a2a86832 | |||
8fdc9162d9 | |||
8aef4f57f8 | |||
acad6212c8 | |||
46255f7ee4 | |||
457253cdc6 | |||
fb87e413bd | |||
7fd1e4b9b1 | |||
8919ac726b | |||
8d0fd5d7d3 | |||
ded0c77d48 | |||
f4d81e0385 | |||
679d624fae | |||
3ec008bf40 | |||
6e3cc8855b | |||
a4fc7bef7f | |||
34510c377e | |||
a353d054ae | |||
13367490b0 | |||
4d98916721 | |||
3130a93bfa | |||
0738d2a00d | |||
60e1fcb07f | |||
17180af69a | |||
bb684e0c8d | |||
0eb92dfbc7 | |||
c645a5aac4 | |||
1a26a30a7f | |||
cef673759e | |||
387417be03 | |||
654a45d2ad | |||
209a1bf8ca | |||
88f81af1ef | |||
ae15fec0b8 | |||
bbfeb586a6 | |||
d0dcf877e4 | |||
06c7d64be9 | |||
8cbd569f74 | |||
03d3142733 | |||
251279c537 | |||
39303d5d49 | |||
fd051dc018 | |||
95bca33efa | |||
c92f5f218f | |||
b0b0c8c60a | |||
6c9737b1ac | |||
2106638ec2 | |||
f1114d8918 | |||
01d2e46ddb | |||
18c4e26ede | |||
842253b242 | |||
69a835d311 | |||
8889e0106d | |||
12f0b4c80e | |||
3419bf639d | |||
f81f62a6c1 | |||
29b258ccc0 | |||
a5a124c188 | |||
ece7d0cfea | |||
145ef87b32 | |||
cf243657e7 | |||
afc74cab6e | |||
7d48ac5c7d | |||
d837e66007 | |||
0be6cee817 | |||
be6958ede4 | |||
9839eff60a | |||
4f2b558aad | |||
ab96ce6659 | |||
ab6583ece0 | |||
9efe426cc4 | |||
26475572a7 | |||
54c2cc1b29 | |||
3d76725c41 | |||
1619a38475 | |||
fafc11f2f5 | |||
e3e3f4f4ed | |||
21b71ce66b | |||
10b65dcfc7 | |||
4ad1446b83 | |||
eafb31be30 | |||
9abc3fe970 | |||
5b05823388 | |||
6756c16e82 | |||
1299dc107d | |||
118fb60b3a | |||
85c34750cf | |||
5da002980b | |||
0423a2bd1a | |||
2fc1a37c04 | |||
108fb8a37e | |||
58f68e80ec | |||
e78af97349 | |||
d0a5deb46a | |||
e1416fd58f | |||
f86c3fc017 | |||
6459e427e8 | |||
bac90c00b1 | |||
0a36c2ce15 | |||
cbe73ea28b | |||
7866d497ad | |||
a6b3b4dd8f | |||
d426c54c27 | |||
cbc012318c | |||
abe62be81d | |||
a8a9f34e9b | |||
e798e6a0b9 | |||
b1d26f0e92 | |||
1ce225b5a3 | |||
11f8c9d9be | |||
8bffebee3d | |||
ede8f2673b | |||
c06ee50d3d | |||
418c2bb29b | |||
ebc1e2163f | |||
0ea93cdc35 | |||
7bea0846db | |||
1b25c8efca | |||
35cb7851ab | |||
5ccc73145f | |||
eb5d76a510 | |||
f78f97e156 | |||
bc10d72887 | |||
d940050897 | |||
c08e62d7d4 | |||
9554b26f9f | |||
7837c203d6 | |||
210b351df3 | |||
ebee0d4369 | |||
a00c7774d8 | |||
14e8f20edc | |||
344ed02a74 | |||
e18e5ab5fa | |||
871156898c | |||
0140541f50 | |||
dd549e1175 | |||
c57a273d4c | |||
06c373d162 | |||
7875dbd981 | |||
ce9f422b51 | |||
c3bc6cbe9d | |||
a8c0cb3512 | |||
e0058e89ab | |||
a98b5bf89b | |||
905e1e763e | |||
1da5fb67b0 | |||
095db339f7 | |||
d1d85e8849 | |||
c83e70eed2 | |||
ef73cb88dc | |||
8fb9f23d51 | |||
5f187dbe63 | |||
c1072f2fc7 | |||
1dc188fad0 | |||
4f16049f17 | |||
57ccb9c5e8 | |||
0be087deee | |||
50ddc0bb28 | |||
27efc501d1 | |||
f241998352 | |||
3ff98ca858 | |||
39ac797eda | |||
f0c50b0e4b | |||
510758826d | |||
e1d5facea2 | |||
fb7eaa5beb | |||
04d2601426 | |||
59790dded6 | |||
1bf411c743 | |||
a7e925027f | |||
65ddbb720b | |||
fe2510764d | |||
1d23eb6d37 | |||
b61c219a38 | |||
918ff858cf | |||
50a7fca1d7 | |||
d9bbbe3ca4 | |||
ace395b96a | |||
be073dacb0 | |||
1f6e3294f8 | |||
95278a59bd | |||
76a1f49f74 | |||
9700e91b10 | |||
d5018a8f78 | |||
f699c14c03 | |||
b775a62bb9 | |||
e66b10f3e1 | |||
7fe9e8edea | |||
90d3b2b0c0 | |||
2e464cf3b0 | |||
8d0e88db34 | |||
1f2ae91074 | |||
58a8953793 | |||
4dfb5f1055 | |||
35282a0f1b | |||
cd7dfaf3b0 | |||
26a4b9d063 | |||
bb10ec3d41 | |||
28cdd4c8d3 | |||
91b76f19f4 | |||
881ff66183 | |||
63b6fea5c9 | |||
4cdd2f8ce1 | |||
de31587a3a | |||
97bdb9aa31 | |||
4c6dfbc2c1 | |||
53dabc29f2 | |||
e96a6d26a6 | |||
1fdb76945a | |||
126ce5c28b | |||
e750198528 | |||
5bf6347cf8 | |||
d4475fc6f9 | |||
e5a9e60fc5 | |||
7000f5a0c1 | |||
371e7d95aa | |||
4d991550b3 | |||
faad9684a9 | |||
d4d1ef8189 | |||
0f0e4e6c66 | |||
a892cde653 | |||
8c986ab263 | |||
a45e9f8106 | |||
59b8f275c2 | |||
635e512be3 | |||
7b8fff1d86 | |||
29558af3da | |||
a7835c462e | |||
aea8eecded | |||
546990710c | |||
5bc46d8318 | |||
54d6a288df | |||
82112b22a2 | |||
847f12b031 | |||
d37a5bc29e | |||
df946b8696 | |||
76f7b79fb8 | |||
3711479c27 | |||
0d42a2c421 | |||
cf45830982 | |||
7ee05eddf1 | |||
31ff06a2da | |||
56dfc93751 | |||
faa5f9869d | |||
5e2ac2c079 | |||
e73a85c5a5 | |||
17fd13a4a7 | |||
27929bd0b0 | |||
2abde07b9d | |||
e8093054d3 | |||
1ce4bf9717 | |||
7345a17a43 | |||
5a9dbde59c | |||
0602ce67a6 | |||
b0f1988f89 | |||
68c851bcd7 | |||
c8a649c08f | |||
846b4941fe | |||
d3b8393310 | |||
f0afb3e335 | |||
fc7cc42813 | |||
9d0950f154 | |||
2b69b21c2d | |||
c38960d7f3 | |||
79d26c7a83 | |||
31e0d42a1d | |||
1dc5ce31ce | |||
3414f6035b | |||
58175c7010 | |||
c4be175bdc | |||
c150a57d29 | |||
10b52e0f22 | |||
669ba23710 | |||
7a2a29d0e1 | |||
16c77f72ca | |||
364f2e10cb | |||
de39fc7160 | |||
93459d6278 | |||
572f4988dd | |||
9b05af367f | |||
29cc33181a | |||
873b4e70bc | |||
f1eff68ef5 | |||
24681f188a | |||
e9147bdf11 | |||
4f51b0f7fe | |||
d022718001 | |||
43fc1aee4d | |||
db693b44aa | |||
446f77daad | |||
d8214d7e0e | |||
cfd8929ac6 | |||
3ddf57e24e | |||
88d3ec222b | |||
1d3fde4693 | |||
f061a73ab9 | |||
3b7668325b | |||
9e53db4dc3 | |||
1d017363c4 | |||
653d5d3b12 | |||
b855f7e402 | |||
b250b2349f | |||
b4cf849333 | |||
a48433d39b | |||
3e70690f2a | |||
0a2e39d260 | |||
abe73975f0 | |||
575f1d7784 | |||
4b73fa97ce | |||
5cb876cc1f | |||
7a5f77142f | |||
91b7cb1b7a | |||
1cedc7e40f | |||
4ca3a8abfa | |||
931982600d | |||
7398deda2b | |||
b8a05e29ac | |||
c24e4a456f | |||
78e09f9622 | |||
6985a7b7d6 | |||
82e8c69a56 | |||
c8cf591ee8 | |||
5ad79cdf2f | |||
f2dd0499b6 | |||
b00bac707f | |||
de5e4c9982 | |||
95cb1e72d7 | |||
1313244ae7 | |||
9cd99a1524 | |||
6994bfefb5 | |||
2819a40ed3 | |||
07a803db77 | |||
cd27b8d511 | |||
b892f1ac5d | |||
4a00ccc748 | |||
5ce400178a | |||
c57eeb9c8c | |||
9101608e85 | |||
aefbc46a05 | |||
6e25feff70 | |||
362a734091 | |||
4c8d4872a5 | |||
f42db110d0 | |||
794284ff0e | |||
9829b6f408 | |||
f8b54b6315 | |||
4bdfebd4d8 | |||
e07df9d783 | |||
a16cffe480 | |||
f6d14773b2 | |||
20c893e82c | |||
64af41d3db | |||
e99a718e83 | |||
06e9816191 | |||
bb000cf07a | |||
651614930e | |||
8af4fff278 | |||
7225a366bd | |||
ec151f0924 | |||
58d6ff1330 | |||
730df3cc43 | |||
42e422ed66 | |||
58eef23dcf | |||
7904e720d5 | |||
d30c129ad4 | |||
39d0e2a2cf | |||
280bc30346 | |||
d59b1460c0 | |||
e3be9c05d5 | |||
528448e3fc | |||
088f09dc2f | |||
69e9e715a6 | |||
5c61fa851f | |||
e62836b7d6 | |||
9ab6d92e96 | |||
c4986eb7f4 | |||
f513cebd8b | |||
19cd07f2a0 | |||
b41ae259d9 | |||
2c373d6989 | |||
e9d3b9c0f6 | |||
b72ab9e4d7 | |||
c56ae2ffa1 | |||
369e1f074f | |||
a9b642999b | |||
a0cc5a697c | |||
79e8412665 | |||
a51ff0712c | |||
986d5c90a5 | |||
925ea51e4c | |||
ce23d4c6f1 | |||
a0ad6e7873 | |||
13a500a404 | |||
64aa881263 | |||
88af0f38eb | |||
02b13fd8cd | |||
6fcd7b8eb1 | |||
c2ccc9782d | |||
dd4d895136 | |||
3a4edb6ea8 | |||
4ff675ebd0 | |||
aa7cf5597b | |||
2dcc3a5c68 | |||
3aa9adba67 | |||
7a8205ba35 | |||
711fb811ac | |||
c07f8fbe6f | |||
961d31bdb3 | |||
e0e1e64855 | |||
56dd2d26b5 | |||
89011bec6a | |||
1e96ea1a09 | |||
d5f91e41c3 | |||
3664647a25 | |||
02c997122f | |||
93ffe83ec2 | |||
c724ac1f3c | |||
d5b9ce926c | |||
05498a254d | |||
e7f4beca19 | |||
f9ae706521 | |||
b44266996b | |||
0111533416 | |||
f3ca88b7ed | |||
610d46506e | |||
012e7a4ebd | |||
1f4b5eff37 | |||
5e0a2c2da4 | |||
9d75957116 | |||
0d8f1dac9e | |||
5bd5a9ae01 | |||
b9585c5cc8 | |||
5bc61dafd1 | |||
1d446349ae | |||
39b4707fec | |||
37ca75117a | |||
4c2ec08bf7 | |||
885749db2d | |||
846a43eb6b | |||
58b9eeca32 | |||
ca3405ff32 | |||
fe67951fa7 | |||
cd5f2b500d | |||
60d7348a36 | |||
c0dbd65d0c | |||
7bbcb4c424 | |||
808fc8ef87 | |||
5e4b8ad5a7 | |||
6284c7e6de | |||
b262293607 | |||
39a1809349 | |||
35e106ce7e | |||
ea5195271a | |||
0b6b09a374 | |||
54ec7c8216 | |||
868f74aaa6 | |||
b088dc6ea8 | |||
a854534d90 | |||
d54e859ace | |||
7c073979e6 | |||
07662a6bac | |||
489406e465 | |||
da2001c4e9 | |||
448d9fb431 | |||
7154ef2fe1 | |||
a418414a58 | |||
564c2191ab | |||
1bad4ce421 | |||
2d7825b0fc | |||
975da840d0 | |||
4ff2233ddf | |||
2bf1d417c5 | |||
c32c85308f | |||
11fcb2bcc6 | |||
a59333941b | |||
2463533833 | |||
ca74f8fe0e | |||
6ea6775fa3 | |||
089b9089c1 | |||
36ec3e9ba1 | |||
b5211ef2e7 | |||
0863f0be89 | |||
4aa181e712 | |||
965955edde | |||
2a5f6cb351 | |||
df3de64b37 | |||
6ec87da84f | |||
f369e60329 | |||
2ec4183c3c | |||
143fb46d47 | |||
06e8315292 | |||
b13fac37eb | |||
15a487a576 | |||
509edac717 | |||
4aec34005d | |||
dfe8d64459 | |||
6e6b36ac68 | |||
46fb8b6f05 | |||
067d38a7af | |||
22e6018b28 | |||
8bd5c5f42e | |||
3bad8c42ae | |||
a50b1f9dd0 | |||
e36a00af71 | |||
3e893bbed5 | |||
6a8ce0d250 | |||
8168046432 | |||
4c0e277e4e | |||
717b6e3151 | |||
9e69c87317 | |||
bdad9a8e72 | |||
b28f466a7b | |||
550fa21776 | |||
64b29990dc | |||
2d124ec16d | |||
e307343b9e | |||
3c8b5d00c3 | |||
040aff2745 | |||
4f41336fd8 | |||
e098c8a593 | |||
39130a4f1e | |||
1f3135427b | |||
1a5b7c6540 | |||
9bd6015843 | |||
2ad7ea07b8 | |||
9022b9d2aa | |||
f743728e9f | |||
ae2cb2d3bf | |||
1f5ebf7c8b | |||
9aaf59aa6d | |||
a89b9cd493 | |||
7731932937 | |||
ecb4491899 | |||
405eb44fdb | |||
9593e973fa | |||
654cc2fe10 | |||
6197b76988 | |||
b4953a93aa | |||
c51df93ccf | |||
cea7e8bdef | |||
ef3f94a5db | |||
5ceaf7bf5f | |||
f99fa1058d | |||
e99f0390b9 | |||
ec953bc2f9 | |||
7182ccef24 | |||
6dcedfaaef | |||
82d7609ea9 | |||
d840eb5719 | |||
4979ffc5cb | |||
1740230ace | |||
f054a4bf3d | |||
8251fa0eb0 | |||
f8307c3bb4 | |||
5486786495 | |||
9110c17668 | |||
f6081c2deb | |||
ddb2a77511 | |||
438b463a8f | |||
e462585c94 | |||
b81362a82e | |||
5474eb15ef | |||
ebace9f250 | |||
c515898b33 | |||
6b1ceacb9b | |||
60e084b7d3 | |||
a34b5bc6ed | |||
14604dad4e | |||
b433d26ef1 | |||
da8e2ca32e | |||
dc3910cfd7 | |||
89a82371e8 | |||
adb176b81a | |||
4702914e34 | |||
696545db7b | |||
d6cd255321 | |||
3fcb218565 | |||
90f515a14b | |||
facc08c47a | |||
98376b8459 | |||
8173ad1ed7 | |||
06bc4d712c | |||
2db06bba0f | |||
2aa13eff9d | |||
fbc508fbb8 | |||
e3011451cc | |||
e8620146d9 | |||
59326f35a9 | |||
7c670695fa | |||
12173feef8 | |||
f55c3c2eb9 | |||
c6c897280e | |||
b6fdd22456 | |||
9b26127a45 | |||
c3e7416b1b | |||
2df1c124c4 | |||
f6a4344c5b | |||
81ec9c0500 | |||
160fbe5cc2 | |||
44ffb5dedf | |||
659f40bb34 | |||
17a3ceb2fe | |||
148b1db9c9 | |||
8aa50730aa | |||
1a8c1df55b | |||
ac350f82cd | |||
688d004c4f | |||
6308e0e92f | |||
21fa51475d | |||
bb748c5f92 | |||
963500fe0b | |||
f7741d7964 | |||
d644a2788f | |||
87027645e0 | |||
1607406b7c | |||
2202a12d05 | |||
5b3bf4ad27 | |||
57d71c8278 | |||
219bacccb5 | |||
b130a78257 | |||
0d284959dc | |||
3fa103a602 | |||
b4a78045d5 | |||
b5170c3e92 | |||
f1287266ab | |||
9129f1aae9 | |||
7094f4ea61 | |||
20d7c876bd | |||
ed70c18975 | |||
2526fd4a3d | |||
ee8ce8d208 | |||
9d5f9f2671 | |||
5eec229d96 | |||
ab3a24ba2e | |||
6fcf7de925 | |||
17da4f423a | |||
dbee8aea32 | |||
514bd56af9 | |||
2e8b770a9e | |||
0f5957a960 | |||
777ccd4396 | |||
532001ae73 | |||
a211c1bf94 | |||
f129aed5c2 | |||
ccb950265a | |||
90ac7365ad | |||
d88cd70877 | |||
e2c2a4c42b | |||
b5ad535d5d | |||
ba959ad2db | |||
8c4b526fd2 | |||
006114bbe0 | |||
66faf0c286 | |||
17c59f5da5 | |||
5af546c5e4 | |||
ee3158fd6c | |||
2626ecdf50 | |||
1613e25be1 | |||
7a604bbccd | |||
e348066bd8 | |||
9966703776 | |||
cbcdb3e754 | |||
4ccb23fe27 | |||
b7482219e8 | |||
a397089259 | |||
e490a87582 | |||
86c92ba042 | |||
04864c7fd0 | |||
3d38695e5d | |||
a305afb62c | |||
fceac7ed5d | |||
466841e723 | |||
3dee6d1555 | |||
e153101b9a | |||
3a314658af | |||
9641a92b11 | |||
8f25a6680e | |||
99f4683adf | |||
9123449734 | |||
12574dd72b | |||
1ca26664e6 | |||
88f4e08acf | |||
55b3081b89 | |||
045cc899c9 | |||
e4988ccf06 | |||
1c56f2fe77 | |||
1df39c3aca | |||
bcb124e009 | |||
ec41dae245 | |||
674f9c451f | |||
d9edab5102 | |||
d0f3e17bfe | |||
f854822fe0 | |||
39733a065d | |||
8aafbd8252 | |||
315b239c35 | |||
f29a6898ec | |||
7f55810cf0 | |||
7a4d41aa2d | |||
d5c4aa7a0a | |||
2c8bd0df63 | |||
08f4fb07da | |||
dda0fc4c13 | |||
0bc06ab4b1 | |||
b11d4e3ea4 | |||
1cbe19f2d8 | |||
8349cb58de | |||
59b8e4f511 | |||
e58a782c11 | |||
ee87885343 | |||
dfa51259ad | |||
67403ed6e4 | |||
c32c054cc4 | |||
185202c469 | |||
0b71cf164b | |||
035ee6a668 | |||
e51d731abc | |||
ee424e5941 | |||
0d7c7a84e7 | |||
a93e754c36 | |||
ddfccb4b9a | |||
d9ef546269 | |||
1a4abb73cd | |||
4a027e6e95 | |||
c4b614ca15 | |||
36c601b17b | |||
757a246ccd | |||
cbdbf01807 | |||
967ed213dc | |||
8a25caee05 | |||
e66600ee4f | |||
8f567320ba | |||
549080b8b3 | |||
3abdeb0af0 | |||
e8604b8da6 | |||
283b01db40 | |||
32bdffaf54 | |||
bf713b04b6 | |||
4721f43390 | |||
8ccf59a947 | |||
4021a5acb3 | |||
dc71e25494 | |||
0e9bbcc905 | |||
65cbbe77ac | |||
892e9f6030 | |||
152f1c918f | |||
97e8b754bf | |||
be841404cc | |||
77f7a6e386 | |||
93323b303f | |||
ea83e3e9fe | |||
6e09b3bde9 | |||
a613ccd18b | |||
09b883f352 | |||
5c3452b800 | |||
735b9a0d1c | |||
b77cbbe1b0 | |||
1c9d8632fa | |||
13f8998026 | |||
eeb4e20b2f | |||
71327fbad8 | |||
d8ec973fd2 | |||
faafbfb81e | |||
aeb50d20c7 | |||
c6d134988c | |||
77a30af41c | |||
532b8d5f25 | |||
ebdeb4d07d | |||
5dbe8ee725 | |||
782c910e86 | |||
e397f55702 | |||
5afc2936b8 | |||
c622dc5e82 | |||
9d217bf79a | |||
52165966f3 | |||
717ba74836 | |||
9d22172558 | |||
e6a3821b97 | |||
2b2f89565e | |||
bb0d839b68 | |||
9a0d9e072f | |||
6cc4dea9f1 | |||
1edd66c1ef | |||
15a971b89f | |||
8b72aaf3f7 | |||
fbf57596bb | |||
07e77f13d4 | |||
6f7e8dee58 | |||
9749a85cb0 | |||
60fd684698 | |||
5a1f5400fb | |||
f729cd0b40 | |||
3ac3a68eef | |||
7ebb6b0f00 | |||
a78e66e5f4 | |||
adc9bdb97a | |||
f18c1b03fb | |||
4576600dd2 | |||
3337497d2a | |||
223fb436fe | |||
e6cc21e262 | |||
0d1c9b0e32 | |||
638240e98b | |||
66a0f55c2e | |||
7a3a319e3a | |||
840c27ecfc | |||
a2cc23169a | |||
1848ba3b54 | |||
701da39fb7 | |||
c09840020b | |||
06d23234f3 | |||
b3e0220a7d | |||
8af20c6403 | |||
f3d99b6a65 | |||
c97b5af898 | |||
d4fec689fd | |||
7f268eab78 | |||
8a2b7f31fb | |||
4c518e18e3 | |||
38686f15dd | |||
199a23cd8a | |||
f5f552afcd | |||
e100fe4a59 | |||
c6141b9451 | |||
d319b98279 | |||
44f80657fd | |||
f064c75ae2 | |||
88c9d98b64 | |||
056cbbe3f5 | |||
0cf89bf20a | |||
b799e0df3d | |||
96184e9f2d | |||
322fa32e5e | |||
3e7197a59e | |||
beb2af4e35 | |||
bae9f85ddb | |||
57df088816 | |||
129cee4d04 | |||
644b2dd6e0 | |||
0ff9daac45 | |||
925b91a807 | |||
5023c328e2 | |||
ba4e695d83 | |||
ae05d095b3 | |||
40e6d2ebbd | |||
9146ccd7e3 | |||
f706f8bffd | |||
dea13331a1 | |||
4a3956d7cc | |||
60ad1a7132 | |||
0a06325907 | |||
477a516ec3 | |||
51c6a610d8 | |||
a07b542fad | |||
99f0a51de3 | |||
02b05d1f6b | |||
5a0757cf74 | |||
4b2c71f657 | |||
1943f3798d | |||
5b66288d51 | |||
621e4d8b48 | |||
49a4c6af58 | |||
0ba2652837 | |||
4bb706555e | |||
9c1dc7cbe1 | |||
ae27430a3c | |||
547c5aa2b5 | |||
c390e7e605 | |||
78ccdbf15b | |||
5c31511f35 | |||
3b755c20f8 | |||
cebb684417 | |||
f5b7e80c22 | |||
492e4db993 | |||
d129d43ea7 | |||
0db963a89e | |||
56f172d9c0 | |||
5bb159a6cf | |||
6c5925909d | |||
497737b711 | |||
092863b460 | |||
8735d1bdc7 | |||
3e582d1613 | |||
47503cd688 | |||
66ea1654f2 | |||
a48390690a | |||
66e602a7fa | |||
61e07f6ed6 | |||
dadfb34c41 | |||
49c30ba017 | |||
4182c80286 | |||
f5f1b383b1 | |||
64b759e201 | |||
a29d234b24 | |||
29c657f4c6 | |||
20c78048a7 | |||
7a11c900b6 | |||
2d0aaa7fc1 | |||
ad126109ca | |||
a850717dc7 | |||
f9de5a4b43 | |||
c4c2d4ec7a | |||
f65f297eff | |||
070b2d97e5 | |||
9adef1ed56 | |||
a2e282b06a | |||
9981177cb8 | |||
715a502c17 | |||
d4ac11f6fa | |||
3de303179a | |||
ea4d692d57 | |||
42ff2c05d9 | |||
ab0fdcd73d | |||
7161678407 | |||
1f64b01bbe | |||
55b183f112 | |||
c80435d340 | |||
c3c8122337 | |||
6572bddeff | |||
9dd89cd958 | |||
283f1f364e | |||
5430d013bf | |||
9740bcb0cf | |||
29c3f3b8e9 | |||
457d3ef2dc | |||
1ecec5f979 | |||
c48b70f744 | |||
7f937cb172 | |||
807e4232f7 | |||
f7c64f9428 | |||
b2252ce37c | |||
dc23396a30 | |||
99bacb7285 | |||
f3e2205dfc | |||
99d3ef85cf | |||
8abd7072f6 | |||
765120383b | |||
d2990ff5a3 | |||
381feb8883 | |||
4c16f8fe2b | |||
b6616ea636 | |||
4f5bed5210 | |||
41aa5ec2d6 | |||
8f6ea30597 | |||
a26c153791 | |||
372917dc4a | |||
712ef1f276 | |||
263076c49e | |||
6e019d88ee | |||
69de055865 | |||
b9e82f03b1 | |||
2f119a31f7 | |||
e18cbea8f5 | |||
b1fa2871c9 | |||
b77cf628d1 | |||
2e0f3d7770 | |||
31d82b572e | |||
7e6715a3a6 | |||
64049be508 | |||
c653623d59 | |||
23d62dd15c | |||
6f15ba0112 | |||
8f1e03920f | |||
5418b9bbfe | |||
d6dbdb264f | |||
c0257dd7ae | |||
f658edf434 | |||
0f1d45c33f | |||
4821789e7c | |||
59114579a2 | |||
2a8cc53620 | |||
a940e384b6 | |||
8b84f437b1 | |||
aa6971eed1 | |||
ac63b415ed | |||
25c7e322e8 | |||
838f296d05 | |||
e93634caa0 | |||
f46810171a | |||
f98a5d6a32 | |||
fabd0f4fa8 | |||
d3c0c0c318 | |||
0f9af5500e | |||
318fb80b88 | |||
9c05598f7a | |||
37dd7064e1 | |||
a44900a24b | |||
12deac1421 | |||
fe588985f2 | |||
38d875f387 | |||
51be4ed348 | |||
a060339774 | |||
77034fa7d4 | |||
e134db2535 | |||
b645ab6f07 | |||
909939503a | |||
564547f283 | |||
00877386ee | |||
12f345d671 | |||
d13c4cd621 | |||
f5180a957a | |||
8cfd76d44e | |||
6dc7b220a3 | |||
9b5c28af18 | |||
1e3e02a1d2 | |||
7978b8b725 | |||
d9105846bc | |||
1799994730 | |||
b7641e899c | |||
16a70a48c6 | |||
dfce932cf0 | |||
95c48cbbb5 | |||
66f1bd2085 | |||
cc1e3b64ed | |||
15f232df08 | |||
3dc02ff637 | |||
9c5d4634dd | |||
9ab9db0bc5 | |||
666c172d38 | |||
67aca3e7dc | |||
4c81d4464f | |||
317bb56428 | |||
09d1d5969d | |||
f925c56fe9 | |||
d2d8a31305 | |||
fc1b49691f | |||
64d2d106a4 | |||
6275360d56 | |||
ab8743c02e | |||
706aabcd4c | |||
fea02e1439 | |||
658a9348f0 | |||
6dcdaaf205 | |||
a8bb6c10c5 | |||
2261e91ad8 | |||
7a52c17f16 | |||
ccfa18feff | |||
c01a9ab562 | |||
3775f1c0e1 | |||
6e0f0f7f9c | |||
7850b5836b | |||
3a2fd57e71 | |||
036aff9e65 | |||
294446a137 | |||
9ba8f7c28e | |||
ecef322bf4 | |||
621abec1e8 | |||
03f2536f9d | |||
482f82278b | |||
b1181c302f | |||
36a208dcf9 | |||
12d65f80da | |||
47d587c837 | |||
c7d5e4395f | |||
7533e49fc6 | |||
9a033af137 | |||
db8e8f39d3 | |||
36ece9380a | |||
cee9b6ee30 | |||
c4f897ee3c | |||
64e091fc8a | |||
6c48618597 | |||
d4e5762bd7 | |||
5a33d12c24 | |||
5be7bb3fa6 | |||
20767baf0f | |||
581fe58b8a | |||
963d312e62 | |||
fdca65572e | |||
5e7ad65f6f | |||
b23833fb29 | |||
81084368d0 | |||
c0451791bf | |||
a2faac2168 | |||
5c9df70031 | |||
9b41bae921 | |||
f03daf7d29 | |||
af52f8c436 | |||
c71c6683be | |||
12c12d1e07 | |||
614135359d | |||
5c49d18537 | |||
d1a3366d56 | |||
f7caa67ebc | |||
e6280918fd | |||
4c887eaeba | |||
99fe7d243d | |||
c5387ddd53 | |||
987f16b28c | |||
8b6c2e548b | |||
302700e04d | |||
24b1305dac | |||
01afd534f4 | |||
0c80d2f8e3 | |||
4713b5cd9e | |||
f2be550d3d | |||
5135f1184d | |||
062c729c9b | |||
6cc813a5e9 | |||
94984a8461 | |||
7ca400665e | |||
0b78ae5476 | |||
95673afc78 | |||
37c721d786 | |||
557b9bbdf2 | |||
2d72a17058 | |||
bc8762eaef | |||
570b183f7e | |||
e37387c8b5 | |||
43c211bee3 | |||
d648730fe8 | |||
75ed7781cc | |||
42ae0baead | |||
a96e31b469 | |||
cab643e472 | |||
82d0f91420 | |||
d3c5aeac2b | |||
aae73d763e | |||
4b032e457f | |||
e74ba1984d | |||
5e48c75fca | |||
e361ac9fa8 | |||
f895216c4f | |||
3eee533d93 | |||
1c09cfa37b | |||
55b46454bc | |||
93c9130a67 | |||
225b03534c | |||
963419a312 | |||
2e97780750 | |||
696c642afa | |||
d127be102b | |||
1732dcb90c | |||
a695a736b4 | |||
f874442553 | |||
0f35af8f42 | |||
cfb1680a88 | |||
785509c66c | |||
49b4285c0c | |||
9618cf4362 | |||
55fe0827dc | |||
6681cf0966 | |||
f2b4993b1d | |||
5bc1f13b84 | |||
894e3a9ec8 | |||
f35cc4d60f | |||
e07e4f3961 | |||
90b3095093 | |||
ed76908e4a | |||
1705d6546d | |||
3b16e78a9e | |||
c546c766c0 | |||
6403167d29 | |||
38fd6685e9 | |||
7a7c70b26a | |||
4886a6591b | |||
4e8adbc227 | |||
851dde8255 | |||
6c2b10e989 | |||
484aa42403 | |||
c82e48d7e4 | |||
d5e4746cf8 | |||
ae18f80feb | |||
7f5e734638 | |||
b5eee682dc | |||
2b72e6bdfd | |||
9a1bb36137 | |||
2a466cc283 | |||
57003d48e7 | |||
a626d2748d | |||
e56189cfd1 | |||
6fcb9b00c8 | |||
e6db189561 | |||
551e1fe06f | |||
39c4bb0211 | |||
2e8f4ccfe6 | |||
51895d1838 | |||
26be35a507 | |||
afabaede2c | |||
9258021873 | |||
6d5093d8e7 | |||
08c4ce851e | |||
4d25212346 | |||
92263853ad | |||
7fb2ab6d43 | |||
f93e63cfaf | |||
0bb93707c8 | |||
7719d50352 | |||
a2e17586dc | |||
a8a717de30 | |||
809fa7b5c2 | |||
79f1c3e2a5 | |||
f03c63ef95 | |||
efeb6903fe | |||
a4e8f67b94 | |||
276049f9ee | |||
1994e448be | |||
0bf87de667 | |||
adc571a54c | |||
0cdaad36eb | |||
2a67c37020 | |||
0ac94ee3b0 | |||
ad4ddfcfdb | |||
405d2eabe0 | |||
0391d0b023 | |||
aac3b31dbb | |||
44ad86a723 | |||
f3bd97cb89 | |||
1b36c9de66 | |||
a4bf0b7cd1 | |||
c8412ed1f9 | |||
82683c0d6d | |||
0a2b9d4ab3 | |||
dabebc3716 | |||
0c024208cd | |||
9f79d60910 | |||
b709b50a36 | |||
3d34ae3fc4 | |||
bbcfa8afd5 | |||
e148ddc3dd | |||
1564bf09ee | |||
4677f6bbfa | |||
99b65668f9 | |||
edf2f59b1d | |||
1b92474412 | |||
30df2a41ce | |||
0e9aa2623a | |||
3781e1fda9 | |||
f8d13d5658 | |||
57d8ccb5f0 | |||
0c557cd983 | |||
fa529bb940 | |||
cee8532ce3 | |||
0b643d2499 | |||
70df5d6e43 | |||
2c3e3ef654 | |||
24231893d6 | |||
0af272c1a9 | |||
5d27f40418 | |||
48e074975d | |||
0beb62760d | |||
53af78d4fb | |||
2f4dde6b9e | |||
99f54a60bf | |||
e96df83583 | |||
1f54e9571e | |||
d67a4bd5a7 | |||
c578efd9ca | |||
0029d2bcf3 | |||
21db6cccd4 | |||
73cd7cf0f2 | |||
f42c7d9670 | |||
a0437b7563 | |||
8f031d8234 | |||
fbc66b9dc0 | |||
e32cea15c8 | |||
ba91cd33b6 | |||
79efe52e7d | |||
68f688896c | |||
5fbe788bae | |||
e9eb14079c | |||
bb3a5efaf7 | |||
2e744e0fa5 | |||
7b37a08b82 | |||
e4dbd368ac | |||
b93f48205a | |||
ac312c690c | |||
445368cdde | |||
f952983b37 | |||
0e100f65a0 | |||
24de59702f | |||
e09ba47b8b | |||
551e4be730 | |||
6d61db0d2c | |||
09a16e6a32 | |||
e2f301d34b | |||
8ee93ae267 | |||
7fa9f73ac7 | |||
9f9f7a23d9 | |||
f059f96c38 | |||
60e8f1dbd9 | |||
c74ad267ad | |||
b67cfbbe42 | |||
7024e66a13 | |||
67031a565b | |||
64f0bcb6b0 | |||
bd5fb66d96 | |||
42ac977333 | |||
b11ca33a43 | |||
f357c2562a | |||
b10e96f196 | |||
68a1542692 | |||
5e32f41b43 | |||
2c3fd499cf | |||
d538dd1fe7 | |||
d6a82007bd | |||
f126b4b8f8 | |||
97b337b252 | |||
f7dc972fde | |||
4764be33e0 | |||
7632ce0392 | |||
a6464b7ffd | |||
6053a9ce05 | |||
b90c0d90cf | |||
ecea3d450c | |||
3f7de0686d | |||
f9b8ce810f | |||
7b1b246411 | |||
cacc5a3eb0 | |||
3caf34167c | |||
438ca72460 | |||
d58dd5c988 | |||
8882ac55ef | |||
7efdacd748 | |||
2004b93aed | |||
71cbd71eb5 | |||
06c8c0d1fe | |||
1dd7a11ec4 | |||
679f923cfc | |||
d85c4afea5 | |||
3f42a26b42 | |||
cb8f04dc83 | |||
0601f1e164 | |||
59d89a8e59 | |||
91c8e23e01 | |||
32c3069fd7 | |||
2a50a1f534 | |||
8e50b6d63d | |||
385e8fc5a9 | |||
8e1f563cd6 | |||
a12c6019b5 | |||
ace0c06de1 | |||
c37b0e3d07 | |||
2afe4dc075 | |||
db06cf0576 | |||
99519bc0aa | |||
85c76c9bc0 | |||
f92fcabba8 | |||
65d2d21a04 | |||
2f828ebb59 | |||
0b861daecc | |||
03c7b05a5a | |||
4783db2cf1 | |||
ffeee42091 | |||
e7e35674d6 | |||
d738749d47 | |||
8dce5bcca5 | |||
d6630d1165 | |||
7824d9bf69 | |||
b1fc13ac9a | |||
c2a9f0cf76 | |||
f0082ac71a | |||
76d17719fe | |||
132bbe6be5 | |||
c7edf18f7c | |||
0bcd86a14a | |||
5b84fad5a9 | |||
ba49c09b2f | |||
ade3bc5c40 | |||
f5116952bb | |||
8b76605a4a | |||
a050817ce5 | |||
a6ab9afc49 | |||
9aae51ad11 | |||
2410cd9379 | |||
4c8fbc0658 | |||
4df7d2c495 | |||
969ef10f54 | |||
83abfdfb21 | |||
f47c2c5ce6 | |||
e6c8a38986 | |||
314db17c69 | |||
54fe32f677 | |||
be04583331 | |||
b7b49b00de | |||
ae423852c2 | |||
be78775a93 | |||
6aa28d93b3 | |||
7a2cf65032 | |||
7693c94ecf | |||
2c1cdea413 | |||
bd24d039fc | |||
676887d2e2 | |||
e415a4c355 | |||
6dd4f76c77 | |||
ea5c0a15ab | |||
f595ba2a9e | |||
cf1ba95fa4 | |||
d18f42ab6f | |||
80d042c467 | |||
50021cdb06 | |||
5041e9b416 | |||
8cf149007f | |||
2da6ec40bb | |||
8330866067 | |||
efce854fc6 | |||
57afc5e0f2 | |||
3d9462a07f | |||
5b2a4b4087 | |||
4183260304 | |||
579d4550d2 | |||
25c1781cba | |||
70f051f236 | |||
5479525c74 | |||
a3ad990089 | |||
088b6e8f8b | |||
5044b01697 | |||
1fa724b40c | |||
d90d17c544 | |||
445d553af8 | |||
4a664fa61b | |||
d0bc79be47 | |||
f7b5955b36 | |||
c293496f41 | |||
794d097072 | |||
05132707ca | |||
e11a11265b | |||
bf7dea0028 | |||
3669a06c95 | |||
f46bd35663 | |||
3cb00ef84e | |||
22595f6e45 | |||
04ccd5f9b5 | |||
c4276a3fdc | |||
cc6953bb34 | |||
f12bb7bcf2 | |||
6dfbb59307 | |||
6bff3bf4be | |||
64294eb5e2 | |||
fd228e979c | |||
a9f49366c0 | |||
013f1024c3 | |||
0e0e93cce1 | |||
2cfc862a3e | |||
6d5e10c05d | |||
211bb97c67 | |||
1356d6288b | |||
4e0b47a5ed | |||
6a0eafefc4 | |||
e7513e0d5c | |||
7de8503d76 | |||
773488f3f7 | |||
cb9f55ec38 | |||
d91c932517 | |||
3bfd734e6b | |||
21df67ecd4 | |||
995d989ecb | |||
192afb6ad6 | |||
f5205a3c81 | |||
ec19354b9a | |||
6575306663 | |||
be33a674bb | |||
681ef51d73 | |||
3ab36b84f7 | |||
36c926d86c | |||
daec14da23 | |||
0995b2da38 | |||
898e2b4399 | |||
a894ebb420 | |||
27c2ab694d | |||
c3d4c428e0 | |||
f211165334 | |||
efbfdd2d60 | |||
d83faceefa | |||
80edc84687 | |||
b22bbe27fc | |||
8da81da3b9 | |||
9858bd2e3d | |||
546923f906 | |||
7b37668650 | |||
001848c415 | |||
7d1593aeb0 | |||
5d8faef805 | |||
467cce4d1c | |||
a51e379eaf | |||
8a6377ec24 | |||
cb06fab1fc | |||
5d6ab45dbb | |||
5dd4a2a4b0 | |||
b3b47e1a85 | |||
cc761e84af | |||
dc5d24c837 | |||
85d98d9236 | |||
62bef5a6be | |||
cbedd8fd2a | |||
c5f354b97b | |||
bbb2a9551d | |||
b5c5177bc4 | |||
f393d43b97 | |||
640141ef2e | |||
8d23152e69 | |||
6a3891404c | |||
687eb30dd8 | |||
df2ae96ad8 | |||
e5372ded41 | |||
4f226414db | |||
9a31dfeb18 | |||
ae6210e500 | |||
fad5c4465f | |||
0e755d4f7a | |||
9d2e597908 | |||
ee62c4937d | |||
a0ff6fc860 | |||
d255830418 | |||
050b6fb125 | |||
067a340117 | |||
83ef07a92a | |||
7440cc881c | |||
3ef241f0c8 | |||
2be3bdd748 | |||
d182b63347 | |||
50f06a14cd | |||
fd50b7c3d7 | |||
3879ef49ea | |||
069ca66ea4 | |||
345d1e3962 | |||
4132893808 | |||
908ea9132b | |||
39d3021b16 | |||
fa9f107319 | |||
10c3b96ac7 | |||
591be2d581 | |||
bcf9a0a7ab | |||
8aaa00401b | |||
60320182d0 | |||
277f4b9974 | |||
d2517af6f9 | |||
45cc2ba882 | |||
4100f2b97c | |||
aef0d6b0a7 | |||
0f49bbceef | |||
81a6f109ba | |||
e85e0f57ac | |||
3dd88f175d | |||
70ba1b7e78 | |||
06e3e1f055 | |||
23cff8bf50 | |||
bb75effd87 | |||
a8c9efe655 | |||
9d231a9fd3 | |||
a3af8eb76b | |||
c8f0a6c31a | |||
c3892c8fa8 | |||
e099b30964 | |||
3c2310d2df | |||
51700313f5 | |||
d2d2aef6a3 | |||
5fd1d5ad12 | |||
932b5bdb6d | |||
ab2618d488 | |||
bd65480593 | |||
99fd08d324 | |||
3ca534f302 | |||
8389fe6da3 | |||
5ea714acce | |||
12f656ced7 | |||
4ecd42f9b5 | |||
8f825e0cd0 | |||
f6106718a8 | |||
bf0a67f3ee | |||
36b568ce7c | |||
2e81f394cf | |||
fc31e44e47 | |||
13089b008f | |||
fd75e55fea | |||
7b89a28149 | |||
51605e2c9e | |||
9672b54087 | |||
206821ee2f | |||
416ded8dc1 | |||
e83d057c3e | |||
f9eaede518 | |||
736a03fd24 | |||
5f1da55b49 | |||
a5baccfd03 | |||
95b4d0c25d | |||
97ab880082 | |||
2269a3c328 | |||
235daa4bf6 | |||
fa650f5e8c | |||
950332b6e4 | |||
7be74dbb38 | |||
cb304c1d85 | |||
9b3da9fc57 | |||
5268b76801 | |||
e33f120cb8 | |||
3934198418 | |||
3af80a9377 | |||
61864143d4 | |||
a5c49b8d43 | |||
042a8336f3 | |||
b26759d703 | |||
2764919dfb | |||
27d3402258 | |||
601197c768 | |||
feefcca601 | |||
92712d361d | |||
86fd16cc0b | |||
c9aa0c3d07 | |||
35972def1d | |||
f984a05cc7 | |||
c205ae0c6e | |||
ebb86be9fc | |||
476c2c5808 | |||
3fe3f0409c | |||
5b131e27c5 | |||
178e65d227 | |||
bb90fb55d0 | |||
0dcfb59220 | |||
82145a1275 | |||
c0dbedac43 | |||
ed089376e3 | |||
5a2c7969e9 | |||
b424caa25a | |||
d5a1928527 | |||
3c5019dfd9 | |||
bd9ddbcd33 | |||
4f13640572 | |||
e46ef4c0ba | |||
126614b87b | |||
a25283d8ae | |||
e1b8221498 | |||
20123a8838 | |||
3f672323b5 | |||
7e2fe06a46 | |||
c303d74163 | |||
b716e55033 | |||
3faa2c802e | |||
9ec6928b8c | |||
3f0c7242c9 | |||
db9709d67d | |||
2b732a2b4c | |||
3985112898 | |||
e0d306447a | |||
405f72952c | |||
5e83e8b130 | |||
af15268c10 | |||
f7da8927f6 | |||
2012a2357d | |||
a45d94ac0b | |||
a94b112aec | |||
0017004b06 | |||
f1b1d92854 | |||
2242919177 | |||
030b5bb7c3 | |||
01d0467af9 | |||
ff0d8698c2 | |||
3b63e0fb5a | |||
cc3b69bd14 | |||
c92f13533b | |||
7681481f65 | |||
8f2a7e073b | |||
bb6c3f59d1 | |||
c2f6da00f4 | |||
e71745bdf9 | |||
dd2c7b12bb | |||
52f5cdce17 | |||
047b23fc31 | |||
3be35976d6 | |||
1b64ae1119 | |||
106a9fe882 | |||
f0b3a5fe4f | |||
3dd7d84c7c | |||
b924f40570 | |||
47dd96db97 | |||
9be42b5953 | |||
53b62130c9 | |||
76e9d6b1ac | |||
2bfae02d1d | |||
681bf41087 | |||
ba39770f2e | |||
2db6fbc47b | |||
6ee716e863 | |||
93fde11aef | |||
6b78b73d79 | |||
2a81fedd6a | |||
54fa28efc3 | |||
e8e432953d | |||
2a9e8124e1 | |||
dc4bc06bb7 | |||
d242892d4f | |||
4c5a3b67e0 | |||
c8fcc46025 | |||
07fe6184bc | |||
857a387520 | |||
f3c57a7c28 | |||
8d6e0e0a72 | |||
ac1cd44525 | |||
828c39eb6b | |||
9076b7bd07 | |||
278a5064b4 | |||
e962840282 | |||
f43adf0b89 | |||
acc2a4819c | |||
742a0e911c | |||
3f7411e198 | |||
5542bb6531 | |||
457d1c8fa2 | |||
f300f36210 | |||
485c0ad078 | |||
921fa84f9e | |||
ad282592b4 | |||
f9d9781292 | |||
4004081e08 | |||
179a9048dd | |||
ddb4dcab8a | |||
7b6a32f5c4 | |||
7492bcbb5a | |||
9cf7a469b6 | |||
75f5d9991d | |||
25874b86c3 | |||
74ea48efb3 | |||
f5e37751f3 | |||
e0ea98258a | |||
da6f4ae0b9 | |||
c12dff9098 | |||
c4f94b1a75 | |||
0592776467 | |||
07f9748f22 | |||
b0bea2bf6f | |||
e8d8b064e8 | |||
3e9694ef48 | |||
867d0df736 | |||
01976815e4 | |||
d2abed5a3c | |||
9f1bd35b6d | |||
6598bdf2b8 | |||
e5eaa4b5a5 | |||
ea942169f9 | |||
850df4d3dd | |||
50db9a208e | |||
1177bf5165 | |||
8b40b675a8 | |||
310abe0bde | |||
9d07910d24 | |||
91ebbfdc5c | |||
89c2e7f77d | |||
6d643cf722 | |||
8e08a844f7 | |||
98d2d3940e | |||
1df0c570c3 | |||
1cce10ed5c | |||
2177ccfac9 | |||
9dc5600f86 | |||
adda3f810f | |||
879eab8626 | |||
97d58bcc09 | |||
f18c0415ef | |||
85a2c71550 | |||
4ad1f7d67e | |||
823dbde2ab | |||
0876caa473 | |||
8cc5fdec90 | |||
1f27357829 | |||
65d78e880a | |||
10510255f7 | |||
fbed9a5fac | |||
2a5e15ce11 | |||
34fa425308 | |||
f9bfe05bd1 | |||
b1204aab86 | |||
215bc53117 | |||
a88697444a | |||
662b6cb3ed | |||
61e4e1ab6f | |||
00c0cd2c45 | |||
6be6df0014 | |||
a8733e381d | |||
73b67dcee8 | |||
df74577e99 | |||
e2a7bf16f0 | |||
b2e1109f0f | |||
491728f1d3 | |||
db2aba9854 | |||
74558813c0 | |||
8b9f28994a | |||
bb1e539f14 | |||
3c8e00e4cc | |||
c32e6cb34a | |||
9b31ced509 | |||
c8f736bcdc | |||
9061318e21 | |||
896b6ab470 | |||
af0e7d18a7 | |||
6978971c4a | |||
f8344fb1d8 | |||
cb58683ef5 | |||
c96ad868d4 | |||
ec91dd8feb | |||
309d6ef4ab | |||
9325710d72 | |||
de3e84c925 | |||
7ad0ce7b40 | |||
0d2d77a597 | |||
063c00c2e0 | |||
1fcc9f3125 | |||
3c0d7cfb94 | |||
0499ce9f83 | |||
e87d3cdf59 | |||
339e771055 | |||
763e493602 | |||
a9868b2dfc | |||
0f68b23aaf | |||
26436fb09a | |||
22f54c5a81 | |||
3a649eec28 | |||
e98722856e | |||
92b487dd4b | |||
50cc53d0a9 | |||
7539b8c391 | |||
a20e0b288b | |||
c141323c62 | |||
0e329816bd | |||
9989171401 | |||
efea957ed6 | |||
8a1f095e50 | |||
9e17e11d8d | |||
25794d2a65 | |||
610e2e6faf | |||
51e4c1a76c | |||
f49ddb67de | |||
f70c1bf69a | |||
0660d1fa40 | |||
b94a27506e | |||
d861d4e7c3 | |||
9a045cf203 | |||
9d2ed4da66 | |||
13101a7be0 | |||
949d666b5c | |||
8787f24952 | |||
ca2ed9f450 | |||
4eaf0fa155 | |||
7c150472df | |||
cb8123ae48 | |||
c96a4f6b6b | |||
1428f0176d | |||
6de0cd2b7d | |||
f56e71b4d2 | |||
f7f01f70a4 | |||
a2fc1aee44 | |||
9cf2f707ab | |||
8aa0792c0f | |||
bf78d07feb | |||
24079323d4 | |||
137484dee7 | |||
1014de6858 | |||
a971254d67 | |||
d99f9d526f | |||
b7d79cddf0 | |||
9aee8194c4 | |||
439cee9098 | |||
11284d7d43 | |||
c618b90119 | |||
eb7e6b5c81 | |||
63278ab07d | |||
94ef4a8a47 | |||
c0c2d457a5 | |||
e6108b2ce3 | |||
feb0883a3b | |||
bff4545ccf | |||
8bd8cd3a22 | |||
65d2754e1a | |||
b8d338c467 | |||
d1a44a140b | |||
ba29c9992c | |||
254f10e9e6 | |||
843f3abcbd | |||
e539c85386 | |||
19a5ed1f3b | |||
66dbb0c5d6 | |||
73f19dca38 | |||
583e0522f1 | |||
972d95cd7f | |||
9de8ab9ace | |||
1758fd2a32 | |||
ff4025c5f7 | |||
101485c73d | |||
d5dee1e8a0 | |||
fa0bdfc120 | |||
3cb25bbbc3 | |||
8324d87bf4 | |||
36e809ffd6 | |||
7bcd6ecea6 | |||
687b96155c | |||
4a1ee4b53e | |||
c14a99feda | |||
6ad88274c9 | |||
0e956f2052 | |||
1f84704636 | |||
ff588063e9 | |||
50657aa48e | |||
7ea8e02f4b | |||
a318d2812d | |||
2ce90903b0 | |||
30a6b74f99 | |||
9d1eb292c3 | |||
f5c416c044 | |||
7c7181fc96 | |||
7459eeb18a | |||
a90e5ebde4 | |||
d1eca65908 | |||
82aa8338c7 | |||
1e931f3e47 | |||
c8c3aca818 | |||
7214141f5e | |||
a89d19a980 | |||
d77c764dd1 | |||
3a7de79885 | |||
2d51dd6625 | |||
21c5e15124 | |||
e01cfc9475 | |||
85b2e910df | |||
f69d2d6574 | |||
9826d1b272 | |||
2ca4ca3f21 | |||
8f274e147a | |||
4c65398c10 | |||
a9d4e2adce | |||
3fff81710c | |||
fda071ca7a | |||
f73914d1aa | |||
780e931eed | |||
86391f1605 | |||
d88fb36e61 | |||
64e2d19082 | |||
4fef7818ec | |||
630ea465b3 | |||
71a5138807 | |||
888520622b | |||
7410f8be8f | |||
6522bf1a81 | |||
7e687b84b2 | |||
1dfc2c3e54 | |||
0a4e0fd913 | |||
30bba281b9 | |||
cdecc0db4b | |||
71053a9f39 | |||
7332455a88 | |||
da384dd7a4 | |||
7d3f23ac48 | |||
bc81b67c9d | |||
bc356ee693 | |||
21ea964c3a | |||
e6033ce179 | |||
2bd6939dc5 | |||
9e3ba212f3 | |||
9b50a57e43 | |||
7210ec0dca | |||
0a19b080ef | |||
264566c177 | |||
f6af8943e2 | |||
779b32beff | |||
0026a53562 | |||
732fb2ab53 | |||
99c45dee0a | |||
b94b2c7306 | |||
fbcfdaf785 | |||
1898023fb1 | |||
99b02a1d7c | |||
76a4f71e89 | |||
afda56e1ad | |||
72d1089fac | |||
a17796e601 | |||
b2fa1b2494 | |||
6dd2f69878 | |||
fd470f7163 | |||
c1633045be | |||
4d1bbe9908 | |||
2f6a29e2e6 | |||
00a455c8a7 | |||
106a3e8c7a | |||
ffdd33c312 | |||
b451df2f40 | |||
e4a016ff17 | |||
3dce9f09d9 | |||
64e0799d3b | |||
6c14cd32ae | |||
2572153aef | |||
883de54fed | |||
c40d690b78 | |||
b57799ed5e | |||
5fb2613038 | |||
dc512f893f | |||
a273753c72 | |||
f46fca4bef | |||
1291c44abd | |||
aba468b329 | |||
ee8da1c3ae | |||
b15fe8e74e | |||
5a44176047 | |||
e1a75d4a94 | |||
7c2a6f984a | |||
09f8a834b3 | |||
e13a269f58 | |||
f40fd5b508 | |||
f9bd2c5052 | |||
3b543a2dfe | |||
a4b253a4b4 | |||
93142a452e | |||
0814b12228 | |||
533ea7adb5 | |||
ca966f9a2d | |||
3441292ecd | |||
6719862de8 | |||
750ec94314 | |||
69cd62c751 | |||
276c06a2f5 | |||
90137e3106 | |||
6603c01dd3 | |||
a9569cea61 | |||
ebab45444c | |||
ae8cb83223 | |||
2baf49fa67 | |||
8508f7d182 | |||
ffe6dd1f43 | |||
48ac29ee4c | |||
bb9bdeb594 | |||
1876f3ae45 | |||
044dfe9b69 | |||
f4ceff37c8 | |||
d4a3d01932 | |||
ef841b8469 | |||
a63f4c47b1 | |||
0255804c7f | |||
38fcc8ab50 | |||
b3585b9b35 | |||
567b4ee0b9 | |||
2b2c65c0ca | |||
e9be44e6d8 | |||
7ebabf9ccc | |||
b5e72b65a7 | |||
c9c29264b8 | |||
462e470092 | |||
a241d6c76b | |||
780a1c44e1 | |||
a98727849a | |||
08991bf4e4 | |||
4027521756 | |||
0766d2c228 | |||
b5b53db8fe | |||
4f512dba5f | |||
1a14375a88 | |||
b331923c69 | |||
7f61fb99d5 | |||
2d35ffbf94 | |||
60c1d87598 | |||
5495ed2a43 | |||
cf31072702 | |||
031020e431 | |||
d6f3dd83dc | |||
931ed7faa9 | |||
922619512d | |||
a71c66a52e | |||
ceb7788c80 | |||
6fc39d47d0 | |||
fc511277a5 | |||
5abe2d1472 | |||
f3122cedf5 | |||
14e0fa5ee0 | |||
8e4384d0b4 | |||
d46a3502b6 | |||
6ab3edac3c | |||
a5bb716b18 | |||
58a8c779b3 | |||
261b893b7c | |||
57a81a333c | |||
9c1bb6d8dd | |||
9d0921b348 | |||
c50296d997 | |||
ceac787a4f | |||
7a9520483a | |||
d7de7bc1ee | |||
1df6bc69fb | |||
e7fb7ce065 | |||
361d197d77 | |||
b8dc63bdfe | |||
17e85adc91 | |||
ece173cc6f | |||
1a274f406c | |||
47a655cde3 | |||
9c3a7b6a17 | |||
6dd9e5983e | |||
ceeafa45ca | |||
83b4fb9981 | |||
33cd28e7ac | |||
c1d99c9962 | |||
7f4ec96869 | |||
9b98febe7a | |||
e5ab9e28a6 | |||
bebec08ca0 | |||
41cfd5ba69 | |||
ac7b506181 | |||
bbff157df5 | |||
be6fd4c4b5 | |||
b5d4dd132c | |||
e07e39098a | |||
35325e1688 | |||
2387f928e8 | |||
7f5efd90e5 | |||
9d8be5a857 | |||
fd305156cd | |||
621b022c3b | |||
916fc80b69 | |||
2d26a36910 | |||
0ade8f5ab1 | |||
d8b4139bca | |||
22d20d6f14 | |||
1731a33e32 | |||
d1cc3c213f | |||
66dd399ac2 | |||
33c8773dfd | |||
854d4dd9e2 | |||
f183a85932 | |||
ec2e61ab2f | |||
6b6c94bacc | |||
f67c967af2 | |||
ff9005b0d6 | |||
2ff25f5179 | |||
1208391edd | |||
facf14996c | |||
60d9ce3937 | |||
1d2aed2367 | |||
6c2ab060a2 | |||
ce90c0df41 | |||
4dee7b528d | |||
08bea22c24 | |||
796abaeeb6 | |||
5e9ba6e3b4 | |||
2d12a901fb | |||
9c12e90819 | |||
f7cd2eb55d | |||
ac9fd165bd | |||
cbb6234ec3 | |||
5a796d710b | |||
5f7fa726a8 | |||
668dea0928 | |||
972f826935 | |||
2942db6d6d | |||
ff4da93f4e | |||
8f6cd22087 | |||
3aed84aa46 | |||
6344289873 | |||
f2e7b37c52 | |||
decd062875 | |||
934f433d87 | |||
6760d2de30 | |||
b4de9ec677 | |||
a71276b14e | |||
169c9dda39 | |||
3cf94032bc | |||
cb0c40d350 | |||
c3339ce9e3 | |||
2b96f421e6 | |||
410f3b402a | |||
10d65b06ae | |||
02103e34d7 | |||
9ab8ae6a55 | |||
ea0aa33ea3 | |||
91ea9f0b90 | |||
0cc28d7e61 | |||
138a1d2a68 | |||
14485efbb3 | |||
6827cb3857 | |||
466d8ce18e | |||
0019f1a6c0 | |||
8240a88c05 | |||
73f073d393 | |||
ff3162b5e4 | |||
73ff712082 | |||
96b2de9303 | |||
ced08642eb | |||
e89d444043 | |||
1b75994b4e | |||
562b168a77 | |||
02b43aa2e0 | |||
ec5a947b44 | |||
1156c6656a | |||
5c619a285c | |||
6bbc91a964 | |||
ffc790bc7f | |||
55fa54d0c0 | |||
0f82905be4 | |||
d6dffdc1fa | |||
ac9d6b8c73 | |||
8976e0dbe9 | |||
49ec3f0a5f | |||
318a03a417 | |||
19f67a392a | |||
0ad74ace8b | |||
f6f4ba9e45 | |||
cda1c4a521 | |||
82049cb850 | |||
060e2eb4f0 | |||
d46e216d00 | |||
2bbc3dc28d | |||
408d76f867 | |||
5598db254f | |||
ef935f04e0 | |||
888c9f6097 | |||
bc5c3e75a4 | |||
fbfe654c06 | |||
1533dfdd0e | |||
3417ee9a3f | |||
6d1fdb3410 | |||
f6bbc603fa | |||
a78319ba26 | |||
af32770755 | |||
2464efbca6 | |||
0c891d27df | |||
bddef0dae7 | |||
bf8db8d45b | |||
dc27d62921 | |||
826713ff61 | |||
87f67bc699 | |||
a8380fcfd8 | |||
ea8de493ff | |||
b3937bb108 | |||
950252675a | |||
17c354dda9 | |||
a55b0e5f65 | |||
7eda534ad5 | |||
9e0dd0169d | |||
5773c4ce02 | |||
ea17304e64 | |||
11f7dc87b2 | |||
cbae0cc931 | |||
a0ab764519 | |||
93fd8fa40f | |||
40d0bfa212 | |||
ff906fb95b | |||
9adcbfe486 | |||
97ac471a71 | |||
ec10fbb90e | |||
df5ae9ce64 | |||
3c838c7399 | |||
578a79d500 | |||
266aee002a | |||
27e8412b4a | |||
4792689f67 | |||
1e2720e467 | |||
ab21ab97ce | |||
45ccab3352 | |||
2270a15f11 | |||
819005f58b | |||
cd2c3334c4 | |||
97041de909 | |||
9d0aa99c5e | |||
b5f9645927 | |||
ebf3aa8c63 | |||
903472c3c8 | |||
48be29e392 | |||
9bfd8141fb | |||
94aed8d615 | |||
c73073c414 | |||
230ada6d3c | |||
75c6f4aeb6 | |||
b7b5666110 | |||
cb771a2383 | |||
fa7cc7823a | |||
85dc0d8dae | |||
7b093e4627 | |||
5c04a111e5 | |||
ea629fa8c4 | |||
376dc82dca | |||
8fdbd114ec | |||
4177679a84 | |||
b7e1557355 | |||
f38a10f8d2 | |||
96ed92d49d | |||
4ec3d9d69e | |||
2e029ac6a6 | |||
e2f17f782f | |||
ec477346bf | |||
079455f207 | |||
61847bf67f | |||
fc20ee43d7 | |||
e7b0dcea7d | |||
f3b97c5a70 | |||
7a835189b1 | |||
763b406107 | |||
bea9b473d1 | |||
df6b51baee | |||
fb4c7d250f | |||
7654f86f3a | |||
2bd52ff0bd | |||
02ce837674 | |||
9d867af725 | |||
a7104d002f | |||
55d26875b3 | |||
c68c4bca1a | |||
486704bed9 | |||
bec44f22a4 | |||
61c817d0af | |||
9b8ef11f00 | |||
c6fa12727a | |||
bfbe78caec | |||
180a7f67e5 | |||
e90e2e5e66 | |||
0b15b70b18 | |||
64d855dbb0 | |||
c0c31b6d1a | |||
3ca8b598ed | |||
b0de851ebb | |||
3f75f5da42 | |||
0baad61a4e | |||
2153ea5b83 | |||
07f065a3ce | |||
38115912c9 | |||
0a2eb17d32 | |||
33eef1374f | |||
2ba8bba99a | |||
4f92b15c13 | |||
48e44eecc7 | |||
88a61bbd00 | |||
6ff1078990 | |||
e4b38bc05f | |||
d9802f3703 | |||
f4c91e6613 | |||
4195b10d52 | |||
b077b91e60 | |||
2eb95f3db9 | |||
3ead8ae23d | |||
de7f8d3a19 | |||
59bd6a4d60 | |||
242ea84b01 | |||
3df9dbe886 | |||
214dde058c | |||
a6802ec30f | |||
771d611f9e | |||
94dc50e810 | |||
45a21381d6 | |||
c333b98fb8 | |||
a3a84565af | |||
a9f72776bd | |||
fede56bf81 | |||
71f7f0a8f8 | |||
ab85c45326 | |||
6d0c7bc77a | |||
fb15d463d2 | |||
add7666a47 | |||
18617bf21b | |||
25fb09b068 | |||
45f1b01324 | |||
538b9ef66f | |||
f4acb92c77 | |||
2e3ebb604a | |||
ecd600a0ca | |||
5220e5fba6 | |||
51de1802f3 | |||
3b62d6b40a | |||
eb72207fee | |||
d0586d29ea | |||
0c2df6f027 | |||
b96712dfd9 | |||
ec23f048d0 | |||
ad07dc84a4 | |||
0e1d022e26 | |||
17e7a1e0e0 | |||
320b41b148 | |||
73031bcce0 | |||
6919a9376e | |||
73add175cd | |||
5e9dc37818 | |||
eca98ba460 | |||
5537f02bd5 | |||
6fd5a79d47 | |||
d18db73d49 | |||
482d16fb0a | |||
bfd62fabc9 | |||
8f06ce3512 | |||
46234ea36b | |||
f1c8ede1a5 | |||
a35ad0e6ee | |||
cae58f1306 | |||
17431abab0 | |||
8788fd6395 | |||
beb0468fce | |||
ae01634e47 | |||
4d13307030 | |||
2983c70815 | |||
db7b8afc91 | |||
2bc6ad3ff1 | |||
8727e644ea | |||
0d0408ad4f | |||
f1eb0ea537 | |||
ece69f2123 | |||
7057a27a44 | |||
0e022038fc | |||
a85f8b94ab | |||
1ad41525ca | |||
9af3f2d63a | |||
75b154334d | |||
21573e9f4e | |||
afd03d8a28 | |||
da6b1bc9e2 | |||
241391841e | |||
6c623ca565 | |||
c94021b0ef | |||
73a52d212b | |||
1cdb6f2a1d | |||
c09c2a4883 | |||
a800bdb298 | |||
209ea1459b | |||
a778237948 | |||
c6518b2712 | |||
91b80416b7 | |||
081851a9e4 | |||
918c8717b2 | |||
6d941bad78 | |||
15af281744 | |||
690afa1f8c | |||
744104e24d | |||
059988dbe4 | |||
85eb0311d2 | |||
067031e0e1 | |||
c8999a7c43 | |||
519680948b | |||
bffff54e09 | |||
4a722f5e2f | |||
5c08c73dd1 | |||
93bbd41ea8 | |||
e4a36c7b52 | |||
8f20044c77 | |||
f0349023a2 | |||
09ab15798a | |||
37da8846fa | |||
d60b4930bb | |||
bfd17e3421 | |||
ebd67c23ed | |||
f8e4eb84e5 | |||
477942e253 | |||
4cd93b3b7f | |||
78b05dfbb2 | |||
b2c0d08a4e | |||
b564eae5e1 | |||
d6ccf4eaa9 | |||
112ae4860f | |||
28f30a138a | |||
f5e057c885 | |||
6350b8789f | |||
5e2e74f981 | |||
7465b9dc8d | |||
cbdf9762d7 | |||
dffd280b55 | |||
b77bc6f5e7 | |||
fa3aff0906 | |||
ac35e622c2 | |||
e1f4d790e4 | |||
f3885618d9 | |||
290a59284e | |||
31c8cdda73 | |||
cc7aba7cb1 | |||
3e4e4c5f88 | |||
c4f9f4bdae | |||
8e3b5e849c | |||
16995fb7ea | |||
15129b4db4 | |||
c0ec28642f | |||
5a283ef65c | |||
cca50852fe | |||
09564fce55 | |||
6c4b5916fc | |||
f79b636088 | |||
36dbf1d74a | |||
bf131b2616 | |||
0756880b80 | |||
c5ada65620 | |||
870fe79e64 | |||
f9592ccef0 | |||
68592c34e3 | |||
6139a5c6ad | |||
77fee09509 | |||
cd04e31c8b | |||
3f6c400310 | |||
4af2342673 | |||
67c2a7b487 | |||
185988234d | |||
05e06cd0be | |||
330dc10cfd | |||
cb01efcda1 | |||
eeb475c5c8 | |||
6f1e8d24af | |||
7a39e02cfd | |||
8fc694ff25 | |||
3e4aeec5f4 | |||
469af7b1d7 | |||
605c2dc251 | |||
d37107e130 | |||
2ecf3f8cb9 | |||
e0a6ee8880 | |||
95afc46382 | |||
07132a4c32 | |||
5f0520a909 | |||
596ecec009 | |||
154239aff1 | |||
22bb2bee60 | |||
2d69d75749 | |||
b838256a51 | |||
677d261519 | |||
ae848f8719 | |||
798564333d | |||
98c11ddc9e | |||
bf94292522 | |||
5bcb23ebbb | |||
351059a0b4 | |||
83670c5176 | |||
a5b88e442b | |||
d038d53a33 | |||
3ce678367c | |||
b879ad9dfb | |||
7ab5dcd5c8 | |||
a39aedec9d | |||
66c210ae37 | |||
f528195bdf | |||
6a81184058 | |||
12217f2878 | |||
67b3268fac | |||
5a6e389747 | |||
c90f1d7be0 | |||
140a827daa | |||
92f0513a0c | |||
0c42cd3240 | |||
3dbd28470b | |||
54f45c684c | |||
eb4ded6925 | |||
c467334620 | |||
76e387319b | |||
399d35fee0 | |||
3727708aef | |||
1ab8c01050 | |||
59e9080dcb | |||
b202a01acd | |||
4239a1671c | |||
733ad92c65 | |||
6d53c6bc6a | |||
64f87f3541 | |||
0709dc0468 | |||
3ab13a8691 | |||
8b59b31514 | |||
4d211ac08d | |||
b2b2015be0 | |||
3173d4444f | |||
174abc5180 | |||
426dc8e827 | |||
8dd4006161 | |||
e3f7d44d3b | |||
7b2d1ae299 | |||
9bb684a0ec | |||
f08ed7d790 | |||
96939ae694 | |||
b1aa6114b1 | |||
0781cbe1d3 | |||
7bd4715a70 | |||
ebd7c44d7b | |||
86fd88407b | |||
6b06abb461 | |||
44e2abf38f | |||
7b6a8cec9b | |||
af36f1d525 | |||
17034d6f63 | |||
df5b83fe2b | |||
1812311645 | |||
8fcd559ef9 | |||
e3d8471a78 | |||
158170b0a8 | |||
42ac307330 | |||
5bb0d75566 | |||
f1f67c3b75 | |||
0d29a30093 | |||
b31119a348 | |||
cb2d21d24d | |||
8890dccb23 | |||
0cdb505d26 | |||
b9c1a4e8d9 | |||
427feecbf0 | |||
8eed67b3ab | |||
11015342b4 | |||
c649fbbf29 | |||
0187380875 | |||
d540d740b6 | |||
fa7d2a07fe | |||
64e83409a1 | |||
b843c5e3f3 | |||
57ea9b41e7 | |||
0d0be39bb9 | |||
22db82d91d | |||
454cfa00b9 | |||
545593d62c | |||
ee2dae2f17 | |||
dda58a2a3c | |||
d958300590 | |||
d0e51330ed | |||
36e40e40a7 | |||
cb25974f5a | |||
cf24da4c53 | |||
5473c1a947 | |||
f4258dec63 | |||
383ef6eef8 | |||
7d06a3fe5a | |||
cbb78cd752 | |||
14ef26b07b | |||
7a694318e5 | |||
76db7886f4 | |||
154cd41037 | |||
9a506d5c9a | |||
d2c636582d | |||
65623efda5 | |||
a26c94e854 | |||
19ba2e0210 | |||
68c7118266 | |||
66f1f382cd | |||
dfd2a8b7e7 | |||
2c0696ad0f | |||
ec48c749c2 | |||
6e70d67824 | |||
c68d410ef7 | |||
8db7f8bad7 | |||
73abfead52 | |||
b1cee62512 | |||
38304eb534 | |||
cf24226ed9 | |||
64b8fbadb0 | |||
2d65d20436 | |||
504d1eff4b | |||
18228168a5 | |||
625160fd6a | |||
6fea323ffe | |||
0c2f0c1d31 | |||
8aba24d3e1 | |||
899f5ffbdd | |||
a3cbbf7652 | |||
bb59f67ee8 | |||
95b61752db | |||
66b5acc54b | |||
a547e40992 | |||
c6202e8c00 | |||
435299461f | |||
f5e8fe5d95 | |||
af88398887 | |||
74d8ed0cb8 | |||
b8d66bb6fd | |||
aa8e5d36b1 | |||
5da1e3156c | |||
fd0a891ee9 | |||
fb1cd09596 | |||
9b6384c1a5 | |||
2f1b7aaa3e | |||
bb98b38b93 | |||
177f7731aa | |||
cc9c0cbc7e | |||
17c5771530 | |||
c85890d0d8 | |||
fea2429e25 | |||
9e0d69bf1e | |||
c25c998888 | |||
a8b35be75e | |||
c5b9658961 | |||
3d60718f82 | |||
c0a32cad28 | |||
f68e3bab9f | |||
5b8f2c7823 | |||
e0603e3183 | |||
6370e7dfc1 | |||
251e8a8d8a | |||
cb23e0f71d | |||
3191e0fcf5 | |||
1899fbe420 | |||
ec69c48353 | |||
268e1f9119 | |||
bd31642ad8 | |||
b6ac3a2997 | |||
794d222886 | |||
bdfc5f5790 | |||
ebd533065f | |||
bd885c5bac | |||
e8e72bd0ca | |||
f1c8ea35b3 | |||
2e8476c35d | |||
c866f878bc | |||
6a09eee4ad | |||
418535e222 | |||
d06c7646ac | |||
0e5eb46bb7 | |||
90ebf96df5 | |||
03a2353df6 | |||
771d4833d1 | |||
ba142c5ef0 | |||
2960043155 | |||
7eb363c505 | |||
c450fbe909 | |||
44aaf6137d | |||
fe84292eeb | |||
70b92456eb | |||
6a35fab272 | |||
c5ecd3e14d | |||
782b9a7b75 | |||
025e0ccc59 | |||
e7a1e7d3c4 | |||
ed1694157c | |||
f506cf0b8d | |||
b0c4cbb7af | |||
0e35eb2434 | |||
4bf11ce2b5 | |||
e77d588ee4 | |||
216ad2170c | |||
771be480a6 | |||
15cb5be5b0 | |||
e097585fdf | |||
9fee35c6c4 | |||
c700829cd3 | |||
57760e3cdf | |||
4e4a763703 | |||
1432cbc4da | |||
4854761ba4 | |||
70b257f1b4 | |||
dd825fe73e | |||
7284efe594 | |||
8f2eadd8d0 | |||
c565bd44d1 | |||
3efeeb2c8f | |||
2ce4ec0dcb | |||
a2480184e0 | |||
43810d9332 | |||
ab6201835a | |||
e48fb54b16 | |||
2dc5eadccc | |||
f36ed21c57 | |||
f46a9a0d3a | |||
c672043766 | |||
584af87483 | |||
0b21ad9e80 | |||
580bc412c7 | |||
6cf501c3ae | |||
53660ed499 | |||
c869cd2f44 | |||
caca9c7c62 | |||
47569cf3a9 | |||
d2cadc39f3 | |||
319e3b4cce | |||
c1ca65df3f | |||
e01bf6452f | |||
530c6f9cc8 | |||
de897a6dba | |||
efe1e2d2d4 | |||
e7d9248d9f | |||
c81bb2cd36 | |||
e200c1cf6f | |||
1dd448c0cf | |||
c06a3f72f8 | |||
c714137d95 | |||
d45011c9c6 | |||
14cb828f4f | |||
776b5ba017 | |||
4cde9a752a | |||
1d6002a27c | |||
ceb52711d7 | |||
a41277d1d3 | |||
9305704454 | |||
b6b1b237eb | |||
f57f1310c5 | |||
6708d3abc7 | |||
ec1a24ca02 | |||
f329f0c3af | |||
7151778847 | |||
c5d3944ad5 | |||
a5f225f288 | |||
78130663e5 | |||
30f9b953a8 | |||
fc9d5011a9 | |||
95c4aa5121 | |||
1d24b96310 | |||
813462ec31 | |||
f8bf9a7eaa | |||
79df1fb090 | |||
7e710e047f | |||
f4dc596a38 | |||
94bc265b64 | |||
81b5bde7e4 | |||
aa1838577d | |||
1a81a4d135 | |||
38a906b0e1 | |||
fe5030eceb | |||
b93fb1ab16 | |||
d2b5b734e8 | |||
66030fa5ab | |||
43a285f983 | |||
4f886cc19a | |||
3918887c18 | |||
2188f57a80 | |||
c8374e3292 | |||
35213664cf | |||
9681cdc1b4 | |||
d6735b0f14 | |||
a34cf52469 | |||
8a02727f50 | |||
f6aa7d94c8 | |||
53e4195625 | |||
74145f7615 | |||
c4e652ff57 | |||
bbd5ee4187 | |||
630b644cec | |||
b4e275f97b | |||
4df1c4cedb | |||
63300f7292 | |||
c0d1e31617 | |||
0ccc3c49e4 | |||
0315b6740a | |||
6af8aab539 | |||
f73bc0b2d1 | |||
6754e4ea20 | |||
0c8237aa0d | |||
bc37c67837 | |||
5b9a7f5217 | |||
bf375e3943 | |||
12631a4d1d | |||
d6c0af6c54 | |||
5547c371c1 | |||
8ce7bc18fa | |||
219ebb969b | |||
e9d8959c4f | |||
22579596ff | |||
f2fc497228 | |||
43ae4336b2 | |||
ef1a5ede6c | |||
2749c52080 | |||
687b023d97 | |||
c6a0050198 | |||
9d3de2649f | |||
cba7316c26 | |||
c1ef5c1752 | |||
f614277099 | |||
a06f55b8e4 | |||
4a8f45f9ad | |||
d61f723590 | |||
5930285206 | |||
128205fd08 | |||
2b9f5b5c12 | |||
8269096bd9 | |||
ae565463b6 | |||
d347680995 | |||
f073872e22 | |||
a75d6808ca | |||
d61c670705 | |||
7f72c64195 | |||
b3e18c7a43 | |||
bd55c02a23 | |||
53b8a82e72 | |||
0e1ea279d0 | |||
6287a69530 | |||
0d3b11898b | |||
b0b4fd45e5 | |||
47dffa59f3 | |||
94b64431f3 | |||
6fbf98a462 | |||
74bd2b0e4c | |||
7334c6f868 | |||
92d483a892 | |||
b632c29aeb | |||
868b3761c7 | |||
ed3e6b8b94 | |||
5d11cc9d7e | |||
747f05675e | |||
c1a4928609 | |||
f0eb99996d | |||
a515849259 | |||
1483d1fcda | |||
a9b5a39395 | |||
51bfc594bb | |||
6d8ef24566 | |||
ca3e121607 | |||
29922a5409 | |||
4460e8fc56 | |||
ac4f21631b | |||
f824784a20 | |||
4dd2269f57 | |||
25cc76ff48 | |||
1760cd3eb4 | |||
a05fdcb269 | |||
f039a0befc | |||
36a2356fb1 | |||
c6c4a213c5 | |||
66e62da4c7 | |||
eecb794c96 | |||
16745e39b6 | |||
f7ace0da45 | |||
9db0a2dcc8 | |||
714c087788 | |||
abac64d4d0 | |||
e0459c78e4 | |||
cf20c90430 | |||
7c48b891fe | |||
f80a431c11 | |||
da6e4f6935 | |||
df31904133 | |||
38f19400f9 | |||
e9b862eb2c | |||
6746d3784f | |||
b639bef836 | |||
c060fb5aac | |||
7c60498de7 | |||
8e2f6caaf0 | |||
4286502140 | |||
d3e00ab209 | |||
bc652b9717 | |||
0b42c8ae0c | |||
d2fa337333 | |||
46300aa2ce | |||
f2a3822488 | |||
6d717ae55f | |||
395b469958 | |||
37b8bdef6b | |||
77be394b1d | |||
c6c4217968 | |||
5a061852b2 | |||
3b2712d757 | |||
69a143d682 | |||
d54c1cc770 | |||
5a01d6a152 | |||
7090377a87 | |||
7a2d4e56c7 | |||
d61e832e53 | |||
18b477ea41 | |||
9db8a44081 | |||
6c74706856 | |||
ed501d5b3f | |||
f82aa10d56 | |||
b617211910 | |||
f7bcc180eb | |||
33803aa04a | |||
7c6e3399ae | |||
a7bfbbedd6 | |||
dc194e2bc4 | |||
4bc6edf909 | |||
fcf8820505 | |||
9cffe25ce0 | |||
469c01ebd2 | |||
13839e151c | |||
30c0ebe015 | |||
efd395c6f7 | |||
7ec0e5a387 | |||
c966075f46 | |||
109ba284a1 | |||
6c521d3897 | |||
d277960eb8 | |||
a57cc2ffb2 | |||
752d447b61 | |||
297b8392bc | |||
c8832e1cee | |||
7ac2af32f3 | |||
bbf91af9a2 | |||
29f1b74795 | |||
c8050f4bfc | |||
a4ab665a55 | |||
a2094835b1 | |||
d4955f0ade | |||
0f6c0b1a6f | |||
63fac81fc8 | |||
8bf978c2aa | |||
f724e89dce | |||
525930bdf4 | |||
d41feed800 | |||
d229d4a28e | |||
d42b799a9e | |||
87df26731e | |||
e66e39059e | |||
e52738b428 | |||
e1dced4561 | |||
b6850ddbff | |||
a871059ef2 | |||
8f08f5f5c7 | |||
3a182f7e31 | |||
df27690df3 | |||
3b0f5426af | |||
5661945c3b | |||
c8bc983673 | |||
8b64e7ae21 | |||
b47444533b | |||
b29078e401 | |||
1850aa6df6 | |||
5218533ae7 | |||
dd9754dd62 | |||
2ac149d294 | |||
7eb0157fca | |||
c88e370f85 | |||
524d497355 | |||
a2248cbf9a | |||
fdddc463ce | |||
73b8503183 | |||
7387e04a35 | |||
ef059c5a09 | |||
82ef364f9a | |||
19dbffd010 | |||
c7590cd9f3 | |||
5d2928cdab | |||
fd440bb79e | |||
1dce590447 | |||
105e368247 | |||
ae7e7ccdc9 | |||
e2592be952 | |||
cbe8c58e07 | |||
d6815240bf | |||
ab002fae2b | |||
9b0204d744 | |||
3b498a0b53 | |||
6fd2e0e088 | |||
2f7813f7b3 | |||
cd935e678a | |||
229e021110 | |||
c800d90b34 | |||
1524f99de1 | |||
aaa16fede7 | |||
402276574b | |||
841416f6f8 | |||
09703f6494 | |||
03937391bc | |||
1eb02592b3 | |||
0990fbf2d9 | |||
fe265a1b9c | |||
976200388b | |||
cfe7ad1e8f | |||
b19e33f05c | |||
64b4bddcbc | |||
d1fc8c1343 | |||
bcd0bdabed | |||
b9d9b79ced | |||
3118b6277d | |||
118a84f8f5 | |||
9fde0d780d | |||
aa51cd5c12 | |||
7d5452c42d | |||
5d982d72be | |||
bea2d75f31 | |||
387dec815c | |||
2785c118a6 | |||
0ab4904481 | |||
588a72210d | |||
ac87a9804b | |||
5c84f87fcf | |||
7f00965209 | |||
67fb347668 | |||
a0e0b054bd | |||
d082b6ae84 | |||
c924f39829 | |||
6781648054 | |||
f11d0c3414 | |||
d7e0cb93ae | |||
2fd9651b23 | |||
612ec0ed0a | |||
4651d4501c | |||
1bf6506e97 | |||
fa5f99430d | |||
c863be7ba4 | |||
693315160e | |||
590cfc5d63 | |||
79f8f22499 | |||
a21d0a1073 | |||
6a878a1f24 | |||
a1c42cca00 | |||
602d0a42d4 | |||
4f20a4ae47 | |||
7427abce07 | |||
1d4d3f3f73 | |||
4ea66e6b6f | |||
18f8f622d5 | |||
77343fd668 | |||
c661c8eab1 | |||
ea4649f65f | |||
6a051f2b49 | |||
57c5af30dd | |||
b45b22f6b2 | |||
1638a85b49 | |||
848f5db345 | |||
025d819ee1 | |||
e69a9c7581 | |||
982688a41a | |||
b2d6902086 | |||
c82e1fbcab | |||
efd0eb35af | |||
35cceb861c | |||
653f019d0d | |||
738414586d | |||
82cdfa73d5 | |||
aa090cb6ea | |||
d07f377872 | |||
0823183323 | |||
1210026bda | |||
d136b8ef21 | |||
c8e4742f91 | |||
f7d0f02b36 | |||
b92f6d36df | |||
0025247171 | |||
7bc0e42749 | |||
f796dd86a7 | |||
1fbc1927b1 | |||
5613b175de | |||
38bded0eb0 | |||
e2697de821 | |||
b00ba2ae6b | |||
06766c1efa | |||
0801b335dd | |||
7e464dcb85 | |||
a097fb8fff | |||
7673f2f5e9 | |||
e14d7def4f | |||
d0301c1a01 | |||
82fbb1cf55 | |||
e2bb059187 | |||
461797e3ed | |||
52f0871b23 | |||
3670cc1bad | |||
e1bdc6aa16 | |||
a17e4e4423 | |||
2b074d90ae | |||
6732b4fcdc | |||
c6dcdbfe19 | |||
92ce1fb45e | |||
91d98e78ff | |||
e4188a23dd | |||
33863b6eff | |||
a257efcfcc | |||
b7959b5921 | |||
6f55154cd7 | |||
fdf668795b | |||
f7ca672118 | |||
f3ec5ed555 | |||
0a9982f3fb | |||
5036ebd190 | |||
47b283605a | |||
b8e325a714 | |||
b77eec82f3 | |||
b051a9f534 | |||
bfabe62a6e | |||
0a712c3337 | |||
2d1e0eb8a7 | |||
6223a200aa | |||
5a1f9a87cb | |||
0b80bd1cf4 | |||
3b4b069a0c | |||
f51c5fd655 | |||
c18aa1c777 | |||
de60e603e8 | |||
b5d998b9e0 | |||
1e39236f96 | |||
c17e855da0 | |||
916b331a8d | |||
d35c06d09e | |||
b617e32bb9 | |||
348a6d519c | |||
2c8ac22873 | |||
143a836e5a | |||
0c68530f15 | |||
77c01e1f2f | |||
bd427803ab | |||
af896d071b | |||
b83858af5b | |||
65e54662e3 | |||
f8e9449df0 | |||
740afc4dde | |||
a7421fb9cb | |||
d87e4b3469 | |||
534b23639b | |||
6dc148a42b | |||
2be64048c1 | |||
64df52e269 | |||
081b66951f | |||
8a8386eeb9 | |||
c2a921bec1 | |||
a26377b063 | |||
130b4a29eb | |||
1517735714 | |||
eab5c12ee0 | |||
900ecbf6e1 | |||
6d7063c2ac | |||
8688536ca2 | |||
6ab4ed40d3 | |||
33f1273f9f | |||
e41b0d09ba | |||
3a19a1c38e | |||
2997a97a3a | |||
cdd3a4327b | |||
ced3a0c249 | |||
3fd259c91d | |||
ef40c0ce91 | |||
7076aa5745 | |||
5fb2d3074f | |||
38aff1ad41 | |||
8f39f1f097 | |||
6c0f3c7ee1 | |||
78fc3fc105 | |||
250272340b | |||
3397aa1fd4 | |||
5744369025 | |||
7a1fbdb1e6 | |||
699143aa35 | |||
027af74999 | |||
b40c72ae18 | |||
f71a7e66c6 | |||
bdc7567cf5 | |||
f2f27c6bbd | |||
1194aa8d08 | |||
746241f114 | |||
b92ad0b077 | |||
768843e9e3 | |||
cdc9af9ebd | |||
251748426f | |||
e8741fe954 | |||
faf7a8e859 | |||
a404133547 | |||
84c4987eae | |||
5bceca1c53 | |||
824c85c9a5 | |||
0805a7e66a | |||
4c17098faf | |||
1918c81d65 | |||
3f43edc351 | |||
b2a3ac4705 | |||
3f12d9321a | |||
d9ccb4e5f8 | |||
e9edd27099 | |||
db6153dc80 | |||
1db500c101 | |||
adb026f76a | |||
1104c278e3 | |||
2ad1ddb390 | |||
e816315ee2 | |||
4e20307052 | |||
1f3daeab41 | |||
aaebb415d7 | |||
c8c741d9f9 | |||
9b675796a7 | |||
69b5cdb33c | |||
f516dd8b40 | |||
28e02556c1 | |||
f3e23a3135 | |||
d37ebddfd8 | |||
c97b0607ff | |||
5d883661ae | |||
a281c0f1bf | |||
ce90c78d7f | |||
ce9653fe78 | |||
a0618201d4 | |||
662cf7f8a6 | |||
1b526621c9 | |||
6acaca7e40 | |||
3754cda835 | |||
4e2294b429 | |||
5bf3457bc4 | |||
74ecfef2a5 | |||
823063c86f | |||
24b631ab3e | |||
80b8f69ac9 | |||
be76344331 | |||
fd77d714f9 | |||
c87c6e68a3 | |||
b045d4cd7b | |||
3ed5969661 | |||
edf459fe65 | |||
a62520bc79 | |||
869f22ff7d | |||
24231aceac | |||
4f62d165df | |||
73f448f04d | |||
2678cd693a | |||
f10c8f9cf3 | |||
1533a3cae8 | |||
b3023b697a | |||
d533b16669 | |||
f9267f9bcd | |||
5934be25fd | |||
529ef49590 | |||
c9f119fac8 | |||
484587be26 | |||
9abbcc0aa6 | |||
8c57d09729 | |||
eeab2710ef | |||
feefbd7127 | |||
e013df9a67 | |||
7a2d4ea4ee | |||
7bb0325884 | |||
45448eda51 | |||
933ca5b9bc | |||
b233916f50 | |||
24512dee2b | |||
382783d017 | |||
64b53d66df | |||
925337a633 | |||
7c3f1e718f | |||
fed9deb2b3 | |||
1203115077 | |||
8e0bc131c8 | |||
7a10c9b106 | |||
fc72448a89 | |||
21c8c39e2f | |||
e363894d06 | |||
e029c18f67 | |||
e5cecd0ea4 | |||
c3e4f6344d | |||
5bb27b7815 | |||
afa627db2e | |||
9c7ce28b2f | |||
959dfc1261 | |||
3f3025d7f1 | |||
0818a2a774 | |||
b26e01a067 | |||
97a09454d2 | |||
f61ffcf9a4 | |||
949491979c | |||
6fbf23efc2 | |||
7d4dca51ee | |||
5aeaeb9560 | |||
15a462b662 | |||
f5a26ff6fe | |||
d56345b77e | |||
5dcf5f666f | |||
a2d9afc5ea | |||
f15e170de3 | |||
6712b231bc | |||
3d4f04f6b1 | |||
3ff82ca665 | |||
3fa80a9c6f | |||
ad8669ef30 | |||
aec5e663eb | |||
c648aac31d | |||
77c13f03f5 | |||
448e5a2810 | |||
5836bf23c6 | |||
ed18859ab1 | |||
e5e9439715 | |||
51ee7ce3ea | |||
39648bb54b | |||
9027e1ba2f | |||
15943df29c | |||
4f6e341e88 | |||
639bf8a4bd | |||
84f428f740 | |||
b51f54b518 | |||
2d1dd5943d | |||
c204aaa23b | |||
bcefbe163f | |||
eb064b3947 | |||
20a5a8964f | |||
7dfd5f707a | |||
91b682c33c | |||
0ff2e01e80 | |||
d3af7d7fcc | |||
05b2f69cd0 | |||
5f34b37d80 | |||
01eda28bff | |||
23e5ba9a73 | |||
6dd620bf10 | |||
0bf3f55b5c | |||
9e741bb218 | |||
08f7d1ae0d | |||
2900d4b92e | |||
74e854ca78 | |||
a7aa57a6ed | |||
f27cb243c2 | |||
ffdb6e87c8 | |||
acc8ac649d | |||
46379c74ad | |||
65200be7fe | |||
6dcd4bcf77 | |||
aeadd84e7b | |||
a84e34be25 | |||
ffa527002a | |||
8176af91e8 | |||
1f3af89895 | |||
f5fe3590af | |||
89942a5aa7 | |||
66dce275e5 | |||
d3f0243299 | |||
bd6ac22f48 | |||
53461ad1f8 | |||
5bddcc48b8 | |||
a0d31d8d7d | |||
538a570c98 | |||
bbd60e31be | |||
fb94585554 | |||
714709fde6 | |||
390ba044dc | |||
1438245334 | |||
90e07b460c | |||
b98391c0ee | |||
a429761b7b | |||
0f2f069b4f | |||
4bd68b8e4f | |||
fbf1018805 | |||
f7cd2f5b94 | |||
ee9168737f | |||
3c15a39ea1 | |||
1785f8b2f5 | |||
4a2cef4ef7 | |||
3a44b6a34c | |||
d5fb99eab6 | |||
b3dfcb863c | |||
7a357eb865 | |||
53d68b4ffb | |||
9cd6a265e2 | |||
641370e1dc | |||
bb73c98d24 | |||
928c6c6336 | |||
b016f144cc | |||
7f395fe95b | |||
a9117770e9 | |||
215beb028b | |||
57f8386a2b | |||
226065834b | |||
7e9cb92815 | |||
ce4c9ec4f6 | |||
19a7adeffe | |||
d6bd825d6c | |||
f771de445d | |||
6278867065 | |||
3f09b0ffef | |||
b15769186c | |||
3455672797 | |||
98f30340cf | |||
4ff449272d | |||
1b04aa2591 | |||
24798a1544 | |||
6d7a8c1125 | |||
e464ccd116 | |||
e09cd1b787 | |||
a9450081cf | |||
2e50142f62 | |||
0cc2ce4327 | |||
ff284f6566 | |||
aeb2d64c85 | |||
aef8542d81 | |||
632d6abb8a | |||
0594c5973c | |||
581738642f | |||
0f2dd1eff9 | |||
457fba6be5 | |||
728d488ab3 | |||
6f08ef9bda | |||
df48d8b2c2 | |||
03e96a8a9e | |||
85a90e1207 | |||
5f84310bb1 | |||
321111774c | |||
201fa8ffe5 | |||
dc1e6bc277 | |||
a102a029c5 | |||
d0269a636d | |||
e6aab7f120 | |||
e0b5795b81 | |||
992d8a7711 | |||
0bb936da9a | |||
82f13e91fa | |||
3e55044645 | |||
b27aa82a50 | |||
f710955b93 | |||
111926a166 | |||
cd7578030b | |||
b2b1d66826 | |||
588c2c42c3 | |||
07f5b62aa8 | |||
752dc8e425 | |||
1e6b980b1e | |||
65c8be4ccb | |||
95f296e47c | |||
0fda9f54c7 | |||
69b800bf9d | |||
69206d90fe | |||
2f764f7dfe | |||
8465a81e81 | |||
e2ef3cf8e3 | |||
efa606b77b | |||
a045fb9de8 | |||
40b2ae3ff8 | |||
a2ab1fd0ff | |||
506bc8e2ff | |||
6bfcf666b0 | |||
029dfff30c | |||
673e014fab | |||
ea383676cf | |||
35bfb9d9be | |||
de4a1a0909 | |||
6037b200d1 | |||
4277667499 | |||
cdea598e89 | |||
dfeb1c4da9 | |||
4b7b18d14a | |||
c3cbe9433c | |||
ccdef19cfb | |||
0f6187a55a | |||
b4411d3c9e | |||
6dc3492355 | |||
ebe08e0ee3 | |||
44d399c394 | |||
ae1548621a | |||
7c8d331fbb | |||
b58366a4c0 | |||
285f9f2fe3 | |||
6c9c196f1c | |||
e624e270e6 | |||
fea92167f9 | |||
abc69cd001 | |||
ea4ece61b6 | |||
9602483607 | |||
a8198eb9ad | |||
3b90b5f129 | |||
3406dd64c3 | |||
836f94c612 | |||
b794a69ce9 | |||
db27e3384a | |||
24680d0902 | |||
d7dcc44eb9 | |||
0c67a66d23 | |||
2a4aadab70 | |||
cc22b73c21 | |||
58810c7af5 | |||
d0df1d7c4e | |||
0722613563 | |||
4769cc3c0c | |||
ed0ee0a83d | |||
7eab2889d1 | |||
71c1b93924 | |||
12a3fbdb7e | |||
60ce6152fd | |||
6d5873d7f2 | |||
46e293ddff | |||
aa3d78d5e6 | |||
de0326b96c | |||
9cbf3b12f5 | |||
8304d6fcbe | |||
c30d913f1f | |||
e9787ff61f | |||
86b9467c0e | |||
0068a9f579 | |||
93cdc8bbc2 | |||
83e9823aec | |||
9dffbdd9c5 | |||
2991f3c48f | |||
85227a27fb | |||
189909ea76 | |||
b0ac01b4c2 | |||
2f0d4efa20 | |||
dcce8bef0e | |||
2cfdde7346 | |||
e88fa490a5 | |||
8da2286885 | |||
6aea6f7a6b | |||
6683e409d3 | |||
d1a0c57708 | |||
ab1d2ac626 | |||
d4ce1ded01 | |||
ad29ec351e | |||
16fe79048f | |||
12d010306b | |||
7c5eb073e7 | |||
589474fec7 | |||
5cb2263004 | |||
f3bf7d0fb7 | |||
1679c42292 | |||
c4f60f33bd | |||
1cda0d0e50 | |||
0767f89be4 | |||
5a89b40b15 | |||
570583ea8e | |||
bbedef9cfa | |||
241bd40966 | |||
9156cac2ef | |||
dfdea2aa40 | |||
403fdbc226 | |||
d85e485c58 | |||
1c0b603673 | |||
5a752f7b8f | |||
d00d682670 | |||
4225493159 | |||
dcf99b0445 | |||
ea5336d240 | |||
3a6b0ca60a | |||
2adab28ff6 | |||
fb53242716 | |||
33e57906f5 | |||
d46b8d581a | |||
1ac0aa9c1c | |||
d42eb37be4 | |||
8656914cda | |||
14c8f71b0b | |||
903ce25040 | |||
dbd64953ae | |||
bf201d58eb | |||
e95b6b291e | |||
6e37b0acb6 | |||
c43cd97802 | |||
7369e83de1 | |||
fb32be4090 | |||
a18f58b862 | |||
21e609c1c9 | |||
ed8d2777f8 | |||
a3d644fcd1 | |||
b0931d3d10 | |||
28c4d2f7e0 | |||
c7dcec6a1b | |||
0a7cab8de8 | |||
0e01c4841d | |||
6cb4ee31ed | |||
b08d73b845 | |||
54cb493f97 | |||
1cd303a6fc | |||
7a4c02145d | |||
284409fd8c | |||
0182aea283 | |||
67ce5052fe | |||
c93d79b6cb | |||
a2c5b2f252 | |||
05c3e84622 | |||
6c581bc43f | |||
ba973bd2de | |||
6c1c9d5d5f | |||
8f1e1bd44d | |||
0a15ed57c6 | |||
8ab105d490 | |||
9ad593b944 | |||
a1b07939f1 | |||
8040fbf9fb | |||
5ebc8652cc | |||
a8754bd2a3 | |||
257db58bdb | |||
583806a79d | |||
42e2064370 | |||
965f5e2d53 | |||
0c060a4e63 | |||
e48b3db519 | |||
d303311ce2 | |||
23b93dd7d8 | |||
2b5c021431 | |||
f1778ce333 | |||
ef869305cf | |||
c81800a0e1 | |||
c27daff542 | |||
a61884a8a1 | |||
3c6377fb4f | |||
b9810a4cd6 | |||
e5f2d4c44c | |||
015082dff3 | |||
91664d4d6f | |||
a1af090002 | |||
ff1477911e | |||
c38ab85cd4 | |||
909536a666 | |||
4a51ea8470 | |||
e9352a13b2 | |||
f55ec3d4f9 | |||
ca74434a8a | |||
3dcbb4541b | |||
5f339163b0 | |||
6b75ee2220 | |||
b925f8bce6 | |||
beb12880a1 | |||
ee193362ad | |||
6f174ee0dd | |||
a9d3d65a92 | |||
83367c4483 | |||
2d79f16dc8 | |||
b14e04bd7c | |||
e7557ded69 | |||
9df969aebf | |||
c95d6ffa7c | |||
7bf860ffed | |||
03e44f46b0 | |||
1a4add9e87 | |||
a67dd9de77 | |||
812f1783bb | |||
38b6100229 | |||
806ea08bb2 | |||
01ea8f1fcc | |||
f19ee0d737 | |||
34e92a9be5 | |||
0f307957b4 | |||
58eb634659 | |||
c319bab3cd | |||
735779cc9a | |||
d59f62bbda | |||
50ab84fa37 | |||
c5362029e1 | |||
5ce0fe1176 | |||
a81f321924 | |||
efc0fa09fe | |||
e56939e48e | |||
09195ac0f9 | |||
ab94ba309e | |||
e4ff2b75fa | |||
e5c8077c94 | |||
87af36ac17 | |||
7d96565190 | |||
99428566a6 | |||
0e4f83e7b0 | |||
87863fd692 | |||
6d2cbb9e58 | |||
e203aa1d58 | |||
3cbd3b0367 | |||
097bd95837 | |||
815417145e | |||
4859ce0b81 | |||
50987a7b9e | |||
8e51319b03 | |||
4635787895 | |||
7f35d3aa16 | |||
1d5e240ea3 | |||
130f266c6e | |||
695576799b | |||
5266c3b778 | |||
e1695e2cd4 | |||
0cce14341a | |||
c1055ab07a | |||
43be77db31 | |||
ad5014952b | |||
b4560cd523 | |||
467a87abce | |||
fa1d383f93 | |||
41114650d0 | |||
e5dcaf1269 | |||
899577676b | |||
7654a0db7e | |||
fb0984d30f | |||
c903b9376e | |||
078e324080 | |||
5bb5307c7d | |||
f02171efc6 | |||
2671afcbbc | |||
9aa45e6952 | |||
3f6421e1fa | |||
4a1d450d07 | |||
907a0cfc30 | |||
50522254fb | |||
80358a1f47 | |||
70de396958 | |||
b137c13e57 | |||
837afb0938 | |||
dbe7f893c0 | |||
399c022a8c | |||
4cfae2f574 | |||
e2804c14a4 | |||
3876f24221 | |||
12a4e98cea | |||
349e08535a | |||
7b9c139ac2 | |||
c3198543b6 | |||
8e39009c57 | |||
ba3ae3eead | |||
3ff14a0c85 | |||
a77c68adf3 | |||
148a7a60d8 | |||
65943e1670 | |||
ac8e4db246 | |||
ea864f4a2d | |||
959ac071d4 | |||
9dc62ea133 | |||
fb66e81e6c | |||
fb95a52b6e | |||
14deaeec61 | |||
05a2b1aacd | |||
d27a565211 | |||
c2363d0fa4 | |||
0ade3133a0 | |||
e8253fea63 | |||
59e0834f52 | |||
6486e7819c | |||
4ed8b30553 | |||
1642e13158 | |||
acfc149f7b | |||
6228b9efb7 | |||
959cab4f1f | |||
ff48b3b1ec | |||
27db0dd790 | |||
a959a1456b | |||
6771645678 | |||
935ff1b208 | |||
6dc125f0e3 | |||
c854b49db9 | |||
fc8eaf579e | |||
5b88301073 | |||
48f96739ed | |||
a271b1d13d | |||
60a7e78de2 | |||
9f4864f499 | |||
8a303b7865 | |||
5df9df55b7 | |||
517cab97fd | |||
bebd766f16 | |||
9de82612fe | |||
044dec27b4 | |||
b6a0fe59fc | |||
0755ab98a5 | |||
0beac81f64 | |||
b5a5aa6450 | |||
aa2504a10e | |||
2c628f1652 | |||
3c874e9d04 | |||
52793444be | |||
0e660873bf | |||
b8534f767c | |||
5998198f0c | |||
99aa6ce053 | |||
7a1a3ad2ce | |||
9fa8ebe1a4 | |||
d5960c4674 | |||
330c46b963 | |||
e16f1d7810 | |||
19fdedbdd6 | |||
fec6fa799c | |||
5a0d29d460 | |||
acd13985b5 | |||
bfe6bcab74 | |||
7f5d0f3c92 | |||
8c81c6ac43 | |||
20c3ea5c4f | |||
2a7fbea3f1 | |||
d1c1a382f3 | |||
6543d9a4f0 | |||
d3bb09d9f4 | |||
0fa92b31b0 | |||
9634547eae | |||
1858d6a90a | |||
32c27c2f85 | |||
e6ff1596e7 | |||
fed4303b45 | |||
6a00113de8 | |||
9f244a5494 | |||
f35804ba6f | |||
3e2e0508c2 | |||
5b8987ae46 | |||
4dc9fb026c | |||
ce9c88348c | |||
c35a1e8887 | |||
7ecb538209 | |||
a80a0eba11 | |||
379c863ef1 | |||
099f43a317 | |||
a00e10474a | |||
eef7633e4f | |||
13da730b9c | |||
93be41dcc1 | |||
ce1b28f966 | |||
9cd59312f8 | |||
42315688b5 | |||
1440c66b16 | |||
76b93fe05f | |||
89f3a60a37 | |||
18859342c4 | |||
64a702f41b | |||
bac23033d3 | |||
19c2ad8758 | |||
bdae93571b | |||
fa47042e1c | |||
54db255529 | |||
3d38448619 | |||
3214bc4ecc | |||
b5c5b9dc7c | |||
1914337936 | |||
fa2786a010 | |||
2db7922cca | |||
55ea013842 | |||
9413cb5f95 | |||
c587b971dd | |||
7104fe2618 | |||
bf2d219996 | |||
8f2cdad882 | |||
5d09d48050 | |||
3f2fe18965 | |||
2fdf895867 | |||
a04aa3d566 | |||
8c94e14a0c | |||
9460a986e1 | |||
99acf27d3f | |||
aa95af6bf0 | |||
b3d4abe208 | |||
65822a5222 | |||
1d721ed08b | |||
96734f1b45 | |||
77a58b92e8 | |||
3c35ad9053 | |||
894977b2cd | |||
4eb84cf878 | |||
7ffb329f27 | |||
b21f5d708a | |||
f8574bf4a7 | |||
898a77521d | |||
50bda05e46 | |||
8320b9a997 | |||
b9bc2571be | |||
70c27de571 | |||
25dbc17a36 | |||
ccd233b4bc | |||
9858796a1b | |||
a0aea5669b | |||
ddb64d33a0 | |||
43927bae18 | |||
356b519049 | |||
f95911ad37 | |||
1bf55b4070 | |||
5764cbbf91 | |||
12bed18951 | |||
5b2954e62d | |||
de0acb5583 | |||
dab81a4e26 | |||
312b23522a | |||
fa0725dead | |||
889ce9c91e | |||
d9d351d251 | |||
e7d0a37501 | |||
0d9b360b42 | |||
0c731b512a | |||
ab85e2b816 | |||
0405de9784 | |||
99f50c7465 | |||
68243a5157 | |||
cfc73952b8 | |||
89a7b6bd24 | |||
5e21cd450c | |||
a1de1a0810 | |||
9692f31a4f | |||
f476867af2 | |||
dea94abebb | |||
af81a9132a | |||
7378a1792a | |||
b14aefece3 | |||
67f26cc3c1 | |||
ec4a0b3b5f | |||
20cd54fff1 | |||
05782384a7 | |||
8868fc616c | |||
692e7df6c1 | |||
127d339580 | |||
c439109359 | |||
6e6261e893 | |||
083504b66b | |||
5f9c6734fc | |||
956cfa307b | |||
d39c68a0c0 | |||
028e18ff3c | |||
d28bd0c79e | |||
81096041b8 | |||
786bd5d293 | |||
d16022bdd4 | |||
edd591d8ca | |||
96b89ae5eb | |||
7c78970214 | |||
12983db91d | |||
9d6b8b4d68 | |||
89bb6ab40a | |||
94ee937e7a | |||
2185798019 | |||
f5c3518f0e | |||
b3b114c28f | |||
ebade5dec9 | |||
ffdee287df | |||
5f46af6325 | |||
2a6f4aecfe | |||
837da6ade7 | |||
8eb55bbfe7 | |||
4988af8ca8 | |||
3b633bbf1d | |||
27e1801ea7 | |||
168ef399c4 | |||
70083a1de9 | |||
42b37f537f | |||
0b4d5648f2 | |||
cb3205d153 | |||
f968a4c970 | |||
f138320f9e | |||
c6ef9dbd94 | |||
7edba2e134 | |||
6a9f846bcd | |||
8a906dff84 | |||
f3dc71e031 | |||
4e101ada37 | |||
4692e2fc95 | |||
b3f2c9ac59 | |||
106e28582c | |||
7c4a8e57dc | |||
47916fbef2 | |||
037dbe42d7 | |||
6744dfe7e0 | |||
a564811e71 | |||
cd87e1ba2d | |||
18c74d69af | |||
8d29dd1258 | |||
a26dbbd9d0 | |||
33232604a7 | |||
71693ba43f | |||
5f98f98098 | |||
bc3150913b | |||
5128f1b593 | |||
67ed261200 | |||
e06e2fdce1 | |||
8e6bb80e9a | |||
c02b5e22a3 | |||
b09822cf82 | |||
18437c46bd | |||
bf6a844580 | |||
8ade68a270 | |||
604f69868f | |||
3e47fc9e94 | |||
33906d2347 | |||
07cca22c22 | |||
f059f6f0ab | |||
a02b65c40b | |||
c8aa2d81f6 | |||
df9a71443e | |||
a7a5a56370 | |||
98409cff92 | |||
13bc5e5c80 | |||
8bd88341e8 | |||
d4b6ac19b0 | |||
f3ed7c1a34 | |||
6796d787c5 | |||
08bb837268 | |||
f652f82137 | |||
069c11e8b3 | |||
82890928d3 | |||
f2a2db3a42 | |||
7d4ba55343 | |||
2df118cdf0 | |||
1587dc8a2b | |||
21cde8b832 | |||
244848462d | |||
a0199d8e1a | |||
d55f5ebe44 | |||
72dc21cb7c | |||
a6381d63d5 | |||
7327386051 | |||
91d38a5b0e | |||
71dacacb74 | |||
db666a4d61 | |||
81693d41b1 | |||
c66fd3c267 | |||
80d11b2d58 | |||
9c07722555 | |||
6bb8ff4637 | |||
2721e1fab7 | |||
58d16af918 | |||
acac02d5d2 | |||
aa9643e850 | |||
92a144cf13 | |||
287f9638af | |||
be05f5d7d1 | |||
0380e0a68e | |||
154d209ac3 | |||
9e01a0be89 | |||
25a885b52d | |||
08f93599a9 | |||
ca117e7f49 | |||
3b5934936e | |||
a86d1b8af5 | |||
d9351099ef | |||
0cae6e9e5d | |||
eacda2eb83 | |||
ba03d8de63 | |||
1a5936b96c | |||
0528b6132e | |||
5aa64b97db | |||
db287aad25 | |||
1b5eda0233 | |||
f511c1f118 | |||
927f06a565 | |||
eef1e9896f | |||
23e88910cf | |||
5dc153885b | |||
53815e1561 | |||
d4f994bbc4 | |||
a4677e426a | |||
1827ec1f4e | |||
8f8668d87f | |||
09634d0328 | |||
aaf6322a11 | |||
9a848dde8b | |||
8b388e4741 | |||
046848ce1f | |||
a677feca88 | |||
65623b7264 | |||
94ee328b97 | |||
1e1bbb17a0 | |||
eacac20bd5 | |||
d8cbd5633f | |||
63142153ba | |||
ea6f700632 | |||
d3b15c7821 | |||
aff9b30851 | |||
739ded5c18 | |||
5aaa8ce21c | |||
f739e7f56a | |||
2ae2742065 | |||
2fa66164d8 | |||
9c27eda052 | |||
432ac615d0 | |||
24c3fef31b | |||
48d6b76d53 | |||
3038b48de3 | |||
95d6dd21c9 | |||
1d3661be0a | |||
212a026ca4 | |||
9aca643ccb | |||
ee14ccca7a | |||
fc20926130 | |||
a1f842d158 | |||
e8f6569ab3 | |||
ac3e48257e | |||
402e9c18dd | |||
5c82026ca6 | |||
d65ff22988 | |||
660de34bbf | |||
296c79c9be | |||
dec6d4e8c7 | |||
b2f423578e | |||
268eea0e41 | |||
d629e433dd | |||
ab37e9a171 | |||
fce582fa1c | |||
f0b0712023 | |||
cde2bdf496 | |||
cce508fed2 | |||
be3aa04f21 | |||
ef08545bff | |||
6bf13012c1 | |||
01f9aa5e54 | |||
d9762f70ac | |||
e1058c7c99 | |||
a00d84536b | |||
7daac91236 | |||
c21ba2cd3e | |||
c4ff1de8bf | |||
59dd466414 | |||
c34e41fef6 | |||
049347fee0 | |||
9ed74b54b5 | |||
dcd3cef874 | |||
f6934f5c6c | |||
82651463e3 | |||
ab7127771d | |||
035cf71822 | |||
ccc5513bd7 | |||
877b586691 | |||
53de6cd1c3 | |||
6a3d0bfc1f | |||
e20f3d02b5 | |||
e34a7705e6 | |||
4b18a922f0 | |||
1318ea600b | |||
da8ca6561f | |||
901bdb3795 | |||
d2a86da6e6 | |||
eeef6459a3 | |||
0f1dc0ef74 | |||
a26f9da6ba | |||
66fe0c43be | |||
1517bab693 | |||
9e55ff6a87 | |||
f004f66ca7 | |||
0a203d13f6 | |||
19b546f48c | |||
6520e01a46 | |||
97daf98806 | |||
682355ab16 | |||
93d5f40be5 | |||
efc92a86c2 | |||
0b34fc6f54 | |||
ea0497c786 | |||
acd02b5b3f | |||
208587e0f6 | |||
46a7178267 | |||
7609c654b1 | |||
43dcbfd855 | |||
debb785d59 | |||
0ff3b73990 | |||
9d8cd507a6 | |||
6b8570d864 | |||
0e977fca9c | |||
34a30a648f | |||
2766ebf585 | |||
047475cbd7 | |||
ab5b4c19c3 | |||
2f48b7b1e9 | |||
b191c9f0ab | |||
bb5fb64e11 | |||
3c0d7d21ef | |||
f05d2e17b0 | |||
930577ac7b | |||
f6cfa71217 | |||
9095e2f50e | |||
96c3ef81fc | |||
87f7588c50 | |||
459d2198eb | |||
6a67ffb6ea | |||
397c7b3411 | |||
dc1b78130a | |||
b9959e279c | |||
21e7424fc9 | |||
5e10422df2 | |||
0dc405de98 | |||
37afb270b4 | |||
2e7f6ccafc | |||
d4ebeaf475 | |||
26ce9af9a0 | |||
eb881d46e2 | |||
7b79a338bd | |||
6ab7e5e090 | |||
a038835716 | |||
6086b4ee38 | |||
811d93af39 | |||
a18353d7b7 | |||
8849f3be4a | |||
2dafd89769 | |||
5677e7da4b | |||
f482396625 | |||
d2bbaffe40 | |||
f0c7be4e63 | |||
9121a364a6 | |||
e18e6427d0 | |||
e81ce0483d | |||
59e2113670 | |||
a8843dee58 | |||
619e83045a | |||
e213bf3767 | |||
afbc2c9c0c | |||
7f46fff24c | |||
c2165671b0 | |||
54fd92bc34 | |||
3af6985050 | |||
00b9f4c4b1 | |||
b40e5c72b7 | |||
af83db2659 | |||
c269211149 | |||
4a47e4b8ee | |||
503965f939 | |||
e7947df462 | |||
c272a87f5c | |||
da94e171b5 | |||
0660c6c1ff | |||
ed9c9ce268 | |||
ac826c8fd7 | |||
a2cf686396 | |||
b09933a2eb | |||
34e10871f9 | |||
4c9cf304c7 | |||
842776e1dc | |||
1fa16c9cb6 | |||
22b2c793e3 | |||
1041d399cb | |||
5391e554e1 | |||
d86e0e6638 | |||
74e1fb0b1a | |||
f069edb975 | |||
3c3c7a1dcb | |||
b79d058767 | |||
ce768f3baf | |||
6d8266b91d | |||
49d99fcebc | |||
f7ca225a7e | |||
c4b4ff3b1f | |||
cadd7c7ed3 | |||
af4c0a431c | |||
32a618b03b | |||
1a5c6201da | |||
e7cb29493d | |||
3de6d38642 | |||
8cb70914ca | |||
4db78e39da | |||
f4835a85c0 | |||
a6909f88e9 | |||
7971582ec4 | |||
ce642f08b9 | |||
41807626e2 | |||
cfbb815efd | |||
c058d1c0f8 | |||
f848ed091e | |||
fab0a49019 | |||
f9c46f0ebc | |||
2b1e996bbf | |||
051d6085e4 | |||
80d55b3ef3 | |||
2ac86c37b2 | |||
87b5ff0124 | |||
8db3c2a485 | |||
8274f988d9 | |||
d18b53f45d | |||
f5f7c84a58 | |||
9deb23a4ad | |||
1581543185 | |||
3178bdc345 | |||
39480c7204 | |||
1186915c1f | |||
a672d155a2 | |||
8b96fd2e5a | |||
c5bd8b359b | |||
fa2df2a3f8 | |||
a703393612 | |||
7a3d6e1435 | |||
cd37fef2e1 | |||
57cbd21a52 | |||
07a597feff | |||
f124b88cfb | |||
cd6b22f9a0 | |||
a92851939c | |||
c25b2a18fa | |||
baa3e70084 | |||
3db7653aab | |||
e801fcb421 | |||
4c1e41c636 | |||
17b1a69c52 | |||
e63ba791dd | |||
8953d4a137 | |||
dd82edc388 | |||
c96f757af1 | |||
16c49b5ff5 | |||
70d92b9465 | |||
ef8bb9136e | |||
1cf7f86d92 | |||
b858157dba | |||
a8ca03223a | |||
5be0b2e03d | |||
6b697ef207 | |||
dc5eea1cfa | |||
73108ded48 | |||
04edaefad7 | |||
9ec25f7678 | |||
a6f0b2754b | |||
d635506fa7 | |||
000cc598cb | |||
36dafd88bc | |||
41f937382d | |||
34dba35831 | |||
b25b2329a9 | |||
37689fae38 | |||
1d407cceaf | |||
dd8d24759d | |||
53bbf87a4c | |||
12eca76469 | |||
2cd03f1696 | |||
2d9a99535d | |||
f8662ca3bc | |||
e424a59729 | |||
56c88ebc02 | |||
e173ee8f01 | |||
23d5d99098 | |||
02c0743a24 | |||
b46e9f6029 | |||
250715eb2f | |||
0fb6568444 | |||
4a907c79a2 | |||
f714965e8d | |||
3038e9bd08 | |||
240409a5f6 | |||
7941c96f8e | |||
75ef6ec29e | |||
fd8e00092a | |||
1b1ecae0a4 | |||
5196642870 | |||
2d689f9e0d | |||
4bbfe57959 | |||
afa9aefce0 | |||
7b811d5e36 | |||
1b2d95feb3 | |||
746aa054e2 | |||
0df9a01009 | |||
10326ba889 | |||
bb72852baf | |||
27f0ca18bc | |||
93eac6a89d | |||
c670a41ca7 | |||
ac27d3688a | |||
7565cf1a49 | |||
cfa2eaa4cc | |||
3db82be764 | |||
abc504f427 | |||
e729366d7a | |||
1222162d12 | |||
bd23bd62b4 | |||
365d97e938 | |||
77be7339cd | |||
e2fc5e25f2 | |||
a1491574ef | |||
bd9e32efdd | |||
7863395ad1 | |||
30221b45e0 | |||
fc1a123aa7 | |||
f422fd2c78 | |||
78bc6ddfd0 | |||
714baa119b | |||
aeae34ffa4 | |||
ecd4be8114 | |||
53d6d84c3f | |||
76b8c0e044 | |||
d906bb68c3 | |||
57e15e609e | |||
bdb5c8feae | |||
43314ffae5 | |||
e87564ffe7 | |||
61be3603f4 | |||
17bb225be7 | |||
a7dd645594 | |||
ae6a4b6d3c | |||
36b09b8a6c | |||
fe122d4dfc | |||
2684efc492 | |||
c7ccb6b29f | |||
ae10ec6239 | |||
9e9cf270c4 | |||
c5eab98e78 | |||
4f7d536ed3 | |||
8888072230 | |||
d271afc0a7 | |||
6f1bfaba8c | |||
d84c8f8601 | |||
6b45ee44a9 | |||
481b364222 | |||
7bde848d62 | |||
7a00a63829 | |||
ff2938ff4b | |||
6d3ce3a996 | |||
bddf86a259 | |||
7ad44eed08 | |||
a7092750b2 | |||
2a59a44416 | |||
fe6052c2e4 | |||
c3da3fe1d3 | |||
7d46e96ed7 | |||
cfd433b96d | |||
dd2e35edc1 | |||
55cad16ca5 | |||
4becfcdafc | |||
48dbc663d7 | |||
f542aca090 | |||
7723133073 | |||
b3456a9e80 | |||
0435f97acb | |||
12e6562289 | |||
267d086a08 | |||
ca39df8195 | |||
30670121c3 | |||
5fd00ce71a | |||
5f9fe7232a | |||
3c4ddab1d4 | |||
7fd20beaf8 | |||
a5fcc2e427 | |||
f63fbdb63a | |||
10984d1034 | |||
90d41779d1 | |||
d84a1cae09 | |||
512a2d1c4f | |||
1dcb2ac199 | |||
c5fba2c17c | |||
0d2ff132e6 | |||
4125dde2be | |||
6c4e574872 | |||
e085a8a359 | |||
65d15c0f11 | |||
bf5d5093fc | |||
72f730e23c | |||
1c1c071b88 | |||
293445ae1f | |||
6dcb789da9 | |||
1f064d7551 | |||
06ef889718 | |||
935dff53b6 | |||
83f7baec30 | |||
502131a6ad | |||
709bc6eada | |||
5e3cb72a71 | |||
2e7efe65a2 | |||
c80748c2d0 | |||
4c4f56a6ba | |||
e411f8eb72 | |||
1ea7cce8ae | |||
a585358f9b | |||
16bc9bab2a | |||
52f29743b1 | |||
1f355178d6 | |||
ddc8828697 | |||
0edf5dc331 | |||
5c48b7e9f2 | |||
d06e06c36f | |||
2abbbf1503 | |||
57d912bacc | |||
f27d98fadc | |||
de705fa1f4 | |||
f1db5fdb4d | |||
35418f9814 | |||
4aaa7e35f5 | |||
23ccb0de3c | |||
73b1797378 | |||
fc98c0195e | |||
669a1a04b6 | |||
b9126fe46c | |||
c623aa055d | |||
e68d22fbbc | |||
44526cd1fc | |||
1d64e26e12 | |||
c368620d60 | |||
5c31af8e1a | |||
c9026b2945 | |||
f52ea7fe00 | |||
39b633b26d | |||
8caf8a23f9 | |||
915a4cadf4 | |||
d44d028050 | |||
f49785e8e2 | |||
e311f94279 | |||
769f46625b | |||
3c02699dd7 | |||
730fc6c7d8 | |||
c2b1390d47 | |||
cf6392f756 | |||
bfcc1e37b9 | |||
91fbb25ec7 | |||
8565c03caf | |||
eae521f913 | |||
ec10c9a11c | |||
1a51086815 | |||
fff2e6c556 | |||
dcc4d43151 | |||
21b08522c2 | |||
ecf3489df8 | |||
a93387b0d5 | |||
20cb85fa98 | |||
dbe81612ad | |||
53485d2eab | |||
8c5884e8d7 | |||
a459a8a145 | |||
553f7fb27c | |||
a118c2edcc | |||
b7b64a9f68 | |||
e70142c9c2 | |||
7146445be9 | |||
c261c4b426 | |||
7f2c29b6d6 | |||
6a7ebd4e08 | |||
d0e465456e | |||
43d0d0d1f4 | |||
89331cd4c8 | |||
281ccca373 | |||
2be2840a1d | |||
d0eb6cd8bd | |||
0a4a4f7ae4 |
@ -16,6 +16,10 @@
|
||||
--ignore VOLATILE
|
||||
--ignore CONFIG_DESCRIPTION
|
||||
--ignore MISSING_SPACE
|
||||
--ignore CORRUPTED_PATCH
|
||||
--ignore SPDX_LICENSE_TAG
|
||||
--ignore UNDOCUMENTED_DT_STRING
|
||||
--ignore PRINTK_WITHOUT_KERN_LEVEL
|
||||
|
||||
# FILE_PATH_CHANGES seems to not be working correctly. It will
|
||||
# choke on added / deleted files even if the MAINTAINERS file
|
||||
@ -28,4 +32,3 @@
|
||||
|
||||
# Exclude the vendorcode directory
|
||||
--exclude src/vendorcode
|
||||
|
||||
|
@ -1,6 +1,21 @@
|
||||
BasedOnStyle: LLVM
|
||||
IndentWidth: 8
|
||||
UseTab: Always
|
||||
BreakBeforeBraces: Linux
|
||||
AllowShortIfStatementsOnASingleLine: false
|
||||
IndentCaseLabels: false
|
||||
BasedOnStyle: LLVM
|
||||
Language: Cpp
|
||||
IndentWidth: 8
|
||||
UseTab: Always
|
||||
BreakBeforeBraces: Linux
|
||||
AllowShortIfStatementsOnASingleLine: false
|
||||
IndentCaseLabels: false
|
||||
SortIncludes: false
|
||||
ContinuationIndentWidth: 8
|
||||
ColumnLimit: 0
|
||||
AlwaysBreakBeforeMultilineStrings: true
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: false
|
||||
AlignEscapedNewlinesLeft: false
|
||||
AlignTrailingComments: true
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
AlignAfterOpenBracket: true
|
||||
SpaceAfterCStyleCast: false
|
||||
MaxEmptyLinesToKeep: 2
|
||||
BreakBeforeBinaryOperators: NonAssignment
|
||||
BreakStringLiterals: false
|
||||
|
26
.gitignore
vendored
@ -16,7 +16,9 @@ payloads/coreinfo/lp.config*
|
||||
payloads/external/depthcharge/depthcharge/
|
||||
payloads/external/FILO/filo/
|
||||
payloads/external/GRUB2/grub2/
|
||||
payloads/external/LinuxBoot/linuxboot/
|
||||
payloads/external/SeaBIOS/seabios/
|
||||
payloads/external/tianocore/tianocore/
|
||||
payloads/external/tint/tint/
|
||||
payloads/external/U-Boot/u-boot/
|
||||
payloads/external/Memtest86Plus/memtest86plus/
|
||||
@ -60,6 +62,7 @@ site-local
|
||||
*.pyc
|
||||
*.sw[po]
|
||||
/*.rom
|
||||
coreboot-builds*/
|
||||
|
||||
# Development friendly files
|
||||
tags
|
||||
@ -82,7 +85,10 @@ util/*/.test
|
||||
util/amdfwtool/amdfwtool
|
||||
util/archive/archive
|
||||
util/bimgtool/bimgtool
|
||||
util/bincfg/bincfg
|
||||
util/board_status/board-status
|
||||
util/bucts/bucts
|
||||
util/cbfstool/cbfs-compression-tool
|
||||
util/cbfstool/cbfstool
|
||||
util/cbfstool/fmaptool
|
||||
util/cbfstool/ifwitool
|
||||
@ -95,7 +101,6 @@ util/futility/futility
|
||||
util/genprof/genprof
|
||||
util/getpir/getpir
|
||||
util/ifdtool/ifdtool
|
||||
util/ifdfake/ifdfake
|
||||
util/intelmetool/intelmetool
|
||||
util/inteltool/.dependencies
|
||||
util/inteltool/inteltool
|
||||
@ -115,16 +120,15 @@ util/superiotool/superiotool
|
||||
util/vgabios/testbios
|
||||
util/viatool/viatool
|
||||
util/autoport/autoport
|
||||
util/kbc1126/kbc1126_ec_dump
|
||||
util/kbc1126/kbc1126_ec_insert
|
||||
|
||||
documentation/*.aux
|
||||
documentation/*.idx
|
||||
documentation/*.log
|
||||
documentation/*.toc
|
||||
documentation/*.out
|
||||
documentation/*.pdf
|
||||
documentation/cpukconfig.tex
|
||||
documentation/mainboardkconfig.tex
|
||||
documentation/skconfig.tex
|
||||
documentation/socketfkconfig.tex
|
||||
Documentation/*.aux
|
||||
Documentation/*.idx
|
||||
Documentation/*.log
|
||||
Documentation/*.toc
|
||||
Documentation/*.out
|
||||
Documentation/*.pdf
|
||||
Documentation/_build
|
||||
|
||||
doxygen/*
|
||||
|
19
.gitmodules
vendored
@ -1,23 +1,28 @@
|
||||
[submodule "3rdparty/blobs"]
|
||||
path = 3rdparty/blobs
|
||||
url = ../blobs.git
|
||||
url = https://github.com/coreboot/blobs.git
|
||||
update = none
|
||||
ignore = dirty
|
||||
[submodule "util/nvidia-cbootimage"]
|
||||
path = util/nvidia/cbootimage
|
||||
url = ../nvidia-cbootimage.git
|
||||
url = https://github.com/coreboot/nvidia-cbootimage.git
|
||||
[submodule "vboot"]
|
||||
path = 3rdparty/vboot
|
||||
url = ../vboot.git
|
||||
url = https://github.com/coreboot/vboot.git
|
||||
[submodule "arm-trusted-firmware"]
|
||||
path = 3rdparty/arm-trusted-firmware
|
||||
url = ../arm-trusted-firmware.git
|
||||
url = https://github.com/coreboot/arm-trusted-firmware.git
|
||||
[submodule "3rdparty/chromeec"]
|
||||
path = 3rdparty/chromeec
|
||||
url = ../chrome-ec.git
|
||||
url = https://github.com/coreboot/chrome-ec.git
|
||||
[submodule "libhwbase"]
|
||||
path = 3rdparty/libhwbase
|
||||
url = ../libhwbase.git
|
||||
url = https://github.com/coreboot/libhwbase.git
|
||||
[submodule "libgfxinit"]
|
||||
path = 3rdparty/libgfxinit
|
||||
url = ../libgfxinit.git
|
||||
url = https://github.com/coreboot/libgfxinit.git
|
||||
[submodule "3rdparty/fsp"]
|
||||
path = 3rdparty/fsp
|
||||
url = https://github.com/coreboot/fsp.git
|
||||
update = none
|
||||
ignore = dirty
|
||||
|
2
3rdparty/arm-trusted-firmware
vendored
2
3rdparty/blobs
vendored
2
3rdparty/chromeec
vendored
1
3rdparty/fsp
vendored
Submodule
2
3rdparty/libgfxinit
vendored
2
3rdparty/libhwbase
vendored
2
3rdparty/vboot
vendored
@ -13,7 +13,7 @@
|
||||
/_/ \_\_| |_|_____/ |_____/ |____/
|
||||
|
||||
|
||||
S3 in Coreboot (V 1.2)
|
||||
S3 in coreboot (V 1.2)
|
||||
----------------------------------------
|
||||
Zheng Bao
|
||||
<zheng.bao@amd.com>
|
||||
@ -78,7 +78,7 @@ as reserved in e820, or BIOS saves the content into reserved space.
|
||||
Here is the address Map for S3 Resume. Assumingly the total memory is 1GB.
|
||||
00000000 --- 00100000 BIOS Reserved area.
|
||||
00100000 --- 00200000 Free
|
||||
00200000 --- 01000000 Coreboot ramstage area.
|
||||
00200000 --- 01000000 coreboot ramstage area.
|
||||
01000000 --- 2e160000 Free
|
||||
2e160000 --- 2e170000 ACPI table
|
||||
2e170000 --- 2ef70000 OSRAM
|
||||
@ -99,7 +99,7 @@ board.[2]
|
||||
Provided by Southbridge vendor code. Early is called before PCI
|
||||
enumeration, and Late is called after that.
|
||||
|
||||
Lifecycle of booting, sleeping and waking Coreboot and Ubuntu
|
||||
Lifecycle of booting, sleeping and waking coreboot and Ubuntu
|
||||
=============================================================
|
||||
1. Cold boot.
|
||||
For a system with S3 feature, the BIOS needs to save some data to
|
||||
@ -130,7 +130,7 @@ when system wakeups.
|
||||
As we mentioned, Firmware detects the SLP_TYPx to find out if the board
|
||||
wakes up. In romstage.c, AmdInitReset and AmdInitEarly are called
|
||||
as they are during cold boot. AmdInitResume and AmdS3LateRestore are
|
||||
called only during resume. For whole ramstage, Coreboot goes through
|
||||
called only during resume. For whole ramstage, coreboot goes through
|
||||
almost the same way as cold boot, other than not calling the AmdInitMid,
|
||||
AmdInitLate and AmdS3Save, and restoring all the MTRRs.
|
||||
At last step of coreboot stage, coreboot finds out the wakeup vector in FADT,
|
||||
@ -141,13 +141,13 @@ When Linux resumes, all the sleeping scripts call their resume
|
||||
hooks. If we are more lucky, all the scripts can go through. More
|
||||
chances that the 99video hangs or fails to get the display
|
||||
back. Sometimes it can fixed if CONFIG_S3_VGA_ROM_RUN is unset in
|
||||
Coreboot/Kconfig. That needs more troubleshooting.
|
||||
coreboot/Kconfig. That needs more troubleshooting.
|
||||
|
||||
|
||||
Reference
|
||||
=========
|
||||
[1] ACPI40a, http://www.acpi.info/spec40a.htm
|
||||
[2] Coreboot Vendorcode, {top}/src/vendorcode/amd/agesa/{family}/Proc/Common/
|
||||
[3] Coreboot AGESA wrapper, {top}/src/mainboard/amd/parmer/agesawrapper.c
|
||||
[4] Coreboot AGESA wrapper, {top}/src/cpu/amd/agesa/s3_resume.c
|
||||
[5] Coreboot Southbridge, {top}/src/southbridge/amd/agesa/hudson/spi.c
|
||||
[2] coreboot Vendorcode, {top}/src/vendorcode/amd/agesa/{family}/Proc/Common/
|
||||
[3] coreboot AGESA wrapper, {top}/src/mainboard/amd/parmer/agesawrapper.c
|
||||
[4] coreboot AGESA wrapper, {top}/src/cpu/amd/agesa/s3_resume.c
|
||||
[5] coreboot Southbridge, {top}/src/southbridge/amd/agesa/hudson/spi.c
|
||||
|
68
Documentation/Binary_Extraction.md
Normal file
@ -0,0 +1,68 @@
|
||||
# Intel IFD Binary Extraction Tutorial
|
||||
|
||||
## Part 1: Extracting Binaries
|
||||
|
||||
To begin extracting the binaries, first create a directory labeled "binaries"
|
||||
in the coreboot directory (i.e. /path/to/coreboot/binaries/).
|
||||
|
||||
Now, execute the following commands to extract the binaries from a ROM image.
|
||||
**Note:** Make sure you are in the root coreboot directory.
|
||||
|
||||
cd /path/to/coreboot/util/ifdtool
|
||||
./ifdtool COREBOOT_IMAGE
|
||||
./ifdtool -d COREBOOT_IMAGE
|
||||
./ifdtool -x COREBOOT_IMAGE
|
||||
|
||||
In the above steps, COREBOOT_IMAGE is the name of the ROM image to extract the
|
||||
binaries from, including the file path (ex. /build/coreboot.rom).
|
||||
|
||||
Copy the extracted .bin files to the binaries directory you created previously.
|
||||
**Note:** You may want to rename your various .bin files to more clearly
|
||||
indicate what they are and their purpose.
|
||||
|
||||
To extract the mrc.bin, move to the /coreboot/build directory and run the
|
||||
following command:
|
||||
|
||||
cd /path/to/coreboot/build/
|
||||
./cbfstool COREBOOT_IMAGE extract -n mrc.bin -f /path/to/destination/filename
|
||||
|
||||
where COREBOOT_IMAGE is the filepath to the ROM image (same image as above),
|
||||
/path/to/destination is the filepath to the destination directory and filename
|
||||
is the output filename. An example command is given below:
|
||||
|
||||
./cbfstool coreboot.rom extract -n mrc.bin -f /path/to/coreboot/binaries/mrc.bin
|
||||
|
||||
## Part 2: Using extract_blobs.sh
|
||||
|
||||
To simplify some of the steps above, there is a script in the
|
||||
/path/to/coreboot/util/chromeos/ directory called extract_blobs.sh what will
|
||||
extract the flashdescriptor.bin and intel_me.bin files.
|
||||
|
||||
To run this script, switch to the /path/to/coreboot/util/chromeos/ directory
|
||||
and execute the script providing a coreboot image as an argument.
|
||||
|
||||
cd /path/to/coreboot/util/chromeos/
|
||||
./extract_blobs.sh COREBOOT_IMAGE
|
||||
|
||||
Executing those commands will result in two binary blobs to appear in the
|
||||
/path/to/coreboot/util/chromeos/ directory under the names
|
||||
'flashdescriptor.bin' and 'me.bin'.
|
||||
|
||||
## Part 3: Changing the coreboot configuration settings
|
||||
|
||||
To begin using the binaries extracted above, enable the use of binary
|
||||
repositories in the menuconfig. From the main coreboot directory, run
|
||||
'make menuconfig'. Select "General Setup", then select "Allow use of
|
||||
binary-only repository", then exit to the main menu.
|
||||
|
||||
To configure the ROM image for a specific board, select "Mainboard". Select
|
||||
"Mainboard vendor" and scroll to the correct vendor. Then select "Mainboard
|
||||
model" and select the name of the board model. Exit back to the main menu.
|
||||
|
||||
To add the binaries you extracted, select "Chipset". Scroll and select "Add a
|
||||
System Agent Binary" and set the filepath to your mrc.bin file's filepath.
|
||||
Scroll and select "Add Intel descriptor.bin file" and type the filepath for
|
||||
your descriptor.bin file. Scroll down and select "Add Intel ME/TXE firmware
|
||||
file" and type the filepath for your ME file. Exit to the main menu.
|
||||
|
||||
Select "Exit", and select "Yes" when prompted to save your configuration.
|
401
Documentation/COPYING
Normal file
@ -0,0 +1,401 @@
|
||||
Files under Documentation/ are licensed under CC-BY 4.0 terms, printed below.
|
||||
As an exception, files under Documentation/ with a history older than 2017-05-24
|
||||
might be under different licenses (but should be cleared up ASAP).
|
||||
|
||||
------
|
||||
Attribution 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More_considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution 4.0 International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution 4.0 International Public License ("Public License"). To the
|
||||
extent this Public License may be interpreted as a contract, You are
|
||||
granted the Licensed Rights in consideration of Your acceptance of
|
||||
these terms and conditions, and the Licensor grants You such rights in
|
||||
consideration of benefits the Licensor receives from making the
|
||||
Licensed Material available under these terms and conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
d. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
e. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
f. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
g. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
h. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
i. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
j. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
k. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
4. If You Share Adapted Material You produce, the Adapter's
|
||||
License You apply must not prevent recipients of the Adapted
|
||||
Material from complying with this Public License.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material; and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
|
@ -1,671 +0,0 @@
|
||||
%
|
||||
% This document is released under the GPL
|
||||
% Initially written by Stefan Reinauer, <stepan@coresystems.de>
|
||||
%
|
||||
|
||||
\documentclass[titlepage,12pt]{article}
|
||||
\usepackage{a4}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{epsfig}
|
||||
\usepackage{epstopdf}
|
||||
\usepackage{url}
|
||||
\usepackage{color}
|
||||
% \usepackage{geometry}
|
||||
\usepackage[pdftex]{hyperref}
|
||||
% \usepackage{makeidx}
|
||||
% \makeindex
|
||||
% \geometry{left=2cm,right=2cm,top=2cm,bottom=2cm}
|
||||
|
||||
\hypersetup{
|
||||
urlbordercolor={1 1 1},
|
||||
menubordercolor={1 1 1},
|
||||
linkbordercolor={1 1 1},
|
||||
colorlinks=false,
|
||||
% pdfpagemode=None, % PDF-Viewer starts without TOC
|
||||
% pdfstartview=FitH,
|
||||
pdftitle={Coreboot Porting Guide},
|
||||
pdfauthor={Zheng Bao},
|
||||
pdfsubject={coreboot configuration and build process},
|
||||
pdfkeywords={coreboot, AMD, configuration, Build}
|
||||
}
|
||||
|
||||
\setlength{\parindent}{0pt}
|
||||
\setlength{\hoffset}{0pt}
|
||||
|
||||
\title{Coreboot from Scratch}
|
||||
\author{Stefan Reinauer $<$stepan@coresystems.de$>$\and Zheng Bao $<$zheng.bao@amd.com$>$}
|
||||
\date{Dec 4th, 2013}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\maketitle
|
||||
|
||||
\thispagestyle{empty}
|
||||
|
||||
\tableofcontents
|
||||
|
||||
\newpage
|
||||
|
||||
\section{What is Coreboot}
|
||||
coreboot aims to replace the normal BIOS found on x86, AMD64, PPC,
|
||||
Alpha, and other machines with a Linux kernel that can boot Linux from a cold
|
||||
start. The startup code of an average coreboot port is about 500 lines of
|
||||
assembly and 5000 lines of C. It executes 16 instructions to get into 32bit
|
||||
protected mode and then performs DRAM and other hardware initializations
|
||||
required before Linux can take over.
|
||||
|
||||
The projects primary motivation initially was maintenance of large
|
||||
clusters. Not surprisingly interest and contributions have come from
|
||||
people with varying backgrounds. Nowadays a large and growing number of
|
||||
Systems can be booted with coreboot, including embedded systems,
|
||||
Desktop PCs and Servers.
|
||||
|
||||
This document is used to build, modify, and port the CoreBoot code
|
||||
base on the AMD platform.
|
||||
|
||||
|
||||
\section{Changes}
|
||||
|
||||
\begin{itemize}
|
||||
\item 2013/12/20 Add Git, Gerrit, toolchains building.
|
||||
\item 2009/04/19 replace LinuxBIOS with coreboot
|
||||
\item 2004/06/02 url and language fixes from Ken Fuchs $<$kfuchs@winternet.com$>$
|
||||
\item 2004/02/10 ACPI and option ROM updates
|
||||
\item 2003/11/18 initial release
|
||||
\end{itemize}
|
||||
|
||||
%
|
||||
% Build Requirements
|
||||
%
|
||||
|
||||
\section{Build Requirements}
|
||||
To build coreboot for AMD64 from the sources you need a recent Linux.
|
||||
SUSE Linux 11.2, CentOS release 6.3, Fedora Core 16, Cygwin, FreeBSD,
|
||||
NetBSD are known to work fine.
|
||||
|
||||
To build the toolchain, you need following host compilers:
|
||||
|
||||
\begin{itemize}
|
||||
\item GNUtar
|
||||
\item GNUpatch
|
||||
\item GNUmake
|
||||
\item GCC
|
||||
\item binutils
|
||||
\item bison
|
||||
\item flex
|
||||
\item m4
|
||||
\item wget
|
||||
\end{itemize}
|
||||
|
||||
Besides the tools above, after the toolchains are built, you also need the following
|
||||
tools to build the source.
|
||||
|
||||
\begin{itemize}
|
||||
\item git: Get the source code from repository
|
||||
\item libncurses-dev (or ncursesw, ncurses, curses, pdcursesw, pdcurses): for menuconfig
|
||||
\item python: Optional for gdb.
|
||||
\item perl: Optional for gdb.
|
||||
\end{itemize}
|
||||
|
||||
%
|
||||
% Getting Coreboot
|
||||
%
|
||||
|
||||
\section{Getting Coreboot}
|
||||
The latest coreboot sources are available via GIT.
|
||||
For users who doesn't need to change and commit the code:
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git clone http://review.coreboot.org/p/coreboot
|
||||
\end{verbatim}
|
||||
}
|
||||
For developers, you need to get a gerrit account which you can register
|
||||
at \url{http://review.coreboot.org}. Please refer section ~\ref{sec:gerrit}
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git clone ssh://<username>@review.coreboot.org:29418/coreboot
|
||||
$ git clone http://[<username>:<password>@]review.coreboot.org/coreboot.git
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
Checks out a sub-repository in the 3rdparty directory.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git submodule update --init --checkout
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
%
|
||||
% Building the toolchain
|
||||
%
|
||||
|
||||
\section{Building the toolchain}
|
||||
Coreboot recommends and guarantees the toolchain integrated with Coreboot.
|
||||
Linux distributions usually modify their compilers in ways incompatible with Coreboot.
|
||||
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ cd coreboot
|
||||
$ make crossgcc
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
or
|
||||
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ cd util/crossgcc
|
||||
$ buildgcc
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
The buildgcc will try to get packages from website. You need to make sure you can
|
||||
get access the internet. Or you can get the source.tar.gz and put it in util/crossgcc/tarballs.
|
||||
|
||||
{ \small
|
||||
\textcolor{blue} {Welcome to the} \textcolor{red} {coreboot} \textcolor{blue} {cross toolchain builder v1.23 (September 20th, 2013)}
|
||||
|
||||
Target arch is now i386-elf
|
||||
|
||||
Will skip GDB ... ok
|
||||
|
||||
Downloading tar balls ...
|
||||
|
||||
* gmp-5.1.2.tar.bz2 (cached)
|
||||
|
||||
* mpfr-3.1.2.tar.bz2 (cached)
|
||||
|
||||
* mpc-1.0.1.tar.gz (cached)
|
||||
|
||||
* libelf-0.8.13.tar.gz (cached)
|
||||
|
||||
* gcc-4.7.3.tar.bz2 (cached)
|
||||
|
||||
* binutils-2.23.2.tar.bz2 (cached)
|
||||
|
||||
* acpica-unix-20130626.tar.gz (cached)
|
||||
|
||||
Downloaded tar balls ... \textcolor {green}{ok}
|
||||
|
||||
Unpacking and patching ...
|
||||
|
||||
* gmp-5.1.2.tar.bz2
|
||||
|
||||
* mpfr-3.1.2.tar.bz2
|
||||
|
||||
* mpc-1.0.1.tar.gz
|
||||
|
||||
* libelf-0.8.13.tar.gz
|
||||
|
||||
* gcc-4.7.3.tar.bz2
|
||||
|
||||
* binutils-2.23.2.tar.bz2
|
||||
|
||||
o binutils-2.23.2\_arv7a.patch
|
||||
|
||||
o binutils-2.23.2\_no-bfd-doc.patch
|
||||
|
||||
* acpica-unix-20130626.tar.gz
|
||||
|
||||
Unpacked and patched ... \textcolor {green}{ok}
|
||||
|
||||
Building GMP 5.1.2 ... \textcolor {green}{ok}
|
||||
|
||||
Building MPFR 3.1.2 ... \textcolor {green}{ok}
|
||||
|
||||
Building MPC 1.0.1 ... \textcolor {green}{ok}
|
||||
|
||||
Building libelf 0.8.13 ... \textcolor {green}{ok}
|
||||
|
||||
Building binutils 2.23.2 ... \textcolor {green}{ok}
|
||||
|
||||
Building GCC 4.7.3 ... ok
|
||||
|
||||
Skipping Expat (Python scripting not enabled)
|
||||
|
||||
Skipping Python (Python scripting not enabled)
|
||||
|
||||
Skipping GDB (GDB support not enabled)
|
||||
|
||||
Building IASL 20130626 ... \textcolor {green}{ok}
|
||||
|
||||
Cleaning up... \textcolor {green}{ok}
|
||||
|
||||
\textcolor {green}{You can now run your i386-elf cross toolchain from /home/baozheng/x86/coreboot-gerrit/util/crossgcc/xgcc.}
|
||||
}
|
||||
If you are lucky, you can get toolchains located in util/crossgcc/xgcc.
|
||||
|
||||
%
|
||||
% Build Coreboot
|
||||
%
|
||||
|
||||
\section{Building Coreboot}
|
||||
\subsection{Build main module of Coreboot}
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ cd coreboot
|
||||
$ make menuconfig
|
||||
.config - coreboot v4.0-4895-gc5025a4-dirty Configuration
|
||||
+------------------------ coreboot Configuration -------------------------+
|
||||
| Arrow keys navigate the menu. <Enter> selects submenus --->. |
|
||||
| Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, |
|
||||
| <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help, </> |
|
||||
| for Search. Legend: [*] built-in [ ] excluded <M> module < > |
|
||||
| +---------------------------------------------------------------------+ |
|
||||
| | General setup ---> | |
|
||||
| | Mainboard ---> | |
|
||||
| | Architecture (x86) ---> | |
|
||||
| | Chipset ---> | |
|
||||
| | Devices ---> | |
|
||||
| | VGA BIOS ---> | |
|
||||
| | Display ---> | |
|
||||
| | PXE ROM ---> | |
|
||||
| | Generic Drivers ---> | |
|
||||
| | Console ---> | |
|
||||
| | [ ] Relocatable Modules | |
|
||||
| | System tables ---> | |
|
||||
| | Payload ---> | |
|
||||
| | Debugging ---> | |
|
||||
| | --- | |
|
||||
| +----v(+)-------------------------------------------------------------+ |
|
||||
+-------------------------------------------------------------------------+
|
||||
| <Select> < Exit > < Help > |
|
||||
+-------------------------------------------------------------------------
|
||||
\end{verbatim}
|
||||
}
|
||||
Select Mainboard -$>$ Mainboard Vendor -$>$ AMD
|
||||
-$>$ Mainboard Model -$>$ Olive Hill
|
||||
|
||||
Then save, exit and run make.
|
||||
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ make
|
||||
\end{verbatim}
|
||||
}
|
||||
The built image, coreboot.rom, is located at folder build.
|
||||
|
||||
\section{Programming coreboot to flash memory}
|
||||
The image resulting from a coreboot build can be directly programmed to
|
||||
a flash device, either using an external flash programmers, e.g., Dediprog SF100, or by using the
|
||||
Linux flash utility, flashrom.
|
||||
|
||||
|
||||
\subsection{Add modules and payload}
|
||||
|
||||
\subsubsection{VGA BIOS}
|
||||
There is a big Chance that you need to get a VGA BIOS.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
.config - coreboot v4.0 Configuration
|
||||
------------------------------------------------------------------------------
|
||||
+-------------------------------- VGA BIOS --------------------------------+
|
||||
| Arrow keys navigate the menu. <Enter> selects submenus --->. |
|
||||
| Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, |
|
||||
| <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help, </> |
|
||||
| for Search. Legend: [*] built-in [ ] excluded <M> module < > module |
|
||||
| +----------------------------------------------------------------------+ |
|
||||
| | [*] Add a VGA BIOS image | |
|
||||
| | (vgabios.bin) VGA BIOS path and filename | |
|
||||
| | (1002,1306) VGA device PCI IDs | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| +----------------------------------------------------------------------+ |
|
||||
+--------------------------------------------------------------------------+
|
||||
| <Select> < Exit > < Help > |
|
||||
+--------------------------------------------------------------------------+
|
||||
\end{verbatim}
|
||||
}
|
||||
Select VGA BIOS. ``The VGA device PCI IDs'' should be the same as your device. Get the
|
||||
Option ROM from Vendor's website.
|
||||
|
||||
\subsubsection{Payload}
|
||||
coreboot in itself is "only" minimal code for initializing a mainboard
|
||||
with peripherals. After the initialization, it jumps to a payload.
|
||||
|
||||
Currently, SeaBIOS is the most widely used payload. The best way to integrate SeaBIOS
|
||||
is setting it in menuconfig.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
+------------------------------- Payload ---------------------------------+
|
||||
| Arrow keys navigate the menu. <Enter> selects submenus --->. |
|
||||
| Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, |
|
||||
| <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help, </> |
|
||||
| for Search. Legend: [*] built-in [ ] excluded <M> module < > module |
|
||||
| +----------------------------------------------------------------------+ |
|
||||
| | Add a payload (SeaBIOS) ---> | |
|
||||
| | SeaBIOS version (1.7.2.1) ---> | |
|
||||
| | [*] Use LZMA compression for payloads (NEW) | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| +----------------------------------------------------------------------+ |
|
||||
+--------------------------------------------------------------------------+
|
||||
| <Select> < Exit > < Help > |
|
||||
+--------------------------------------------------------------------------+
|
||||
\end{verbatim}
|
||||
The script in Makefile will automatically checkout, config, build the SeaBIOS source,
|
||||
and integrat the binary into the final image.
|
||||
|
||||
%
|
||||
% Working with Git
|
||||
%
|
||||
|
||||
\section{Working with Git}
|
||||
\subsection{Configuration of Git}
|
||||
Inside the checkout you should install a commit-msg hook that adds a
|
||||
Change-Id into commit messages, which uniquely identifies the logical
|
||||
change in Gerrit even across multiple iterations of the commit. The
|
||||
hook only needs to be installed once per clone, and installation can
|
||||
be done with:
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ cd coreboot
|
||||
$ cp ./util/gitconfig/* .git/hooks
|
||||
\end{verbatim}
|
||||
}
|
||||
configure your name and email in git.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git config --global user.name "Your Name Comes Here"
|
||||
$ git config --global user.email your.email@example.com'
|
||||
\end{verbatim}
|
||||
}
|
||||
The name~\ref{user name} and email~\ref{Contact Information} should be the same the settings in gerrit.
|
||||
Otherwise you can not push you code to community.
|
||||
|
||||
Then run the following command once, to tell git that by default you
|
||||
want to submit all commits in the currently checked-out branch for
|
||||
review on gerrit:
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git config remote.origin.push HEAD:refs/for/master
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
The above configurations for git has been integrated into Makefile. You can run
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ make gitconfig
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
\subsection{Work flow}
|
||||
|
||||
It is recommended that you make a new branch when you start to work, not pushing changes to master.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git checkout master -b mybranch
|
||||
\end{verbatim}
|
||||
}
|
||||
After you have done your changes, run:
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git add file_need_to_submit.c
|
||||
$ git commit -m "my first change."
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
% Does anyone have a better word to describe the phylosophy of spliting changes to patches?
|
||||
You need to realize that the changes you have made should be well devided into
|
||||
several commits. Each of them has one and only one meaning. You could use git rebase -i to
|
||||
split, squash, remove, rewrite you comment.
|
||||
|
||||
Here is an example of a well-formatted commit message:
|
||||
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
examplecomponent: Refactor duplicated setup into a function
|
||||
|
||||
Setting up the demo device correctly requires the exact same register
|
||||
values to be written into each of the PCI device functions. Moving the
|
||||
writes into a function allows also otherexamplecomponent to use them.
|
||||
|
||||
Signed-off-by: Joe Hacker <joe@hacker.email>
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
Then you can push the code.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git push
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
You can go to the ~\ref{sec:gerrit} gerrit to see if your changes is successfully pushed.
|
||||
|
||||
Often it might happen that the patch you sent for approval is not good
|
||||
enough from the first attempt. Gerrit and git make it easy to track
|
||||
patch evolution during the review process until patches meet our
|
||||
quality standards and are ready for approval.
|
||||
|
||||
You can easily modify a patch sent to gerrit by you or even by someone
|
||||
else. Just apply it locally using one of the possible ways to do it,
|
||||
make a new local commit that fixes the issues reported by the
|
||||
reviewers, then rebase the change by preserving the same Change-ID. We
|
||||
recommend you to use the git rebase command in interactive mode,
|
||||
|
||||
Once your patch gets a +2 comment, your patch can be merged (cherry-pick, actually) to origin/master.
|
||||
|
||||
%
|
||||
% Working with Gerrit
|
||||
%
|
||||
|
||||
\section{Working with Gerrit}
|
||||
\label{sec:gerrit}
|
||||
If you are a coreboot user, not planning to contribute, you can skip this section.
|
||||
\subsection{Get gerrit account}
|
||||
You need to get an OpenID first. Currently Google account give you an OpenID. It means, if you have a gmail account, you have an OpenID. You can try to signed in.
|
||||
click \url{http://review.coreboot.org}
|
||||
|
||||
%\includegraphics[width=6.00in,height=1.00in]{gerrit_signin.png}
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
+-----------------------------------------------------------+
|
||||
|All Projects Documentation Register Sign In |
|
||||
|Open Merged Abandoned |
|
||||
|Search for status:open |
|
||||
+-----------------------------------------------------------+
|
||||
|Subject Status Owner Project Branch Updated CR V |
|
||||
|cpu: Rename.. Alexandru coreboot master 1:20 PM +1 |
|
||||
|cpu: Only a.. Alexandru coreboot master 1:17 PM X |
|
||||
|arch/x86: D.. Alexandru coreboot master 1:09 PM |
|
||||
| |
|
||||
| Next -> |
|
||||
|Press '?' to view keyboard shortcuts | Powered by Gerrit |
|
||||
+-----------------------------------------------------------+
|
||||
\end{verbatim}
|
||||
}
|
||||
Click ``Sign In'', You will get
|
||||
|
||||
%\includegraphics[width=6.00in,height=4.00in]{openid.png}
|
||||
|
||||
You will be redirected to Google to get logging in.
|
||||
|
||||
% \includegraphics[width=6.00in,height=1.50in]{login.png}
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
Sign In to Gerrit Code Review at review.coreboot.org
|
||||
+--------------------------------------------------+
|
||||
+--------------------------------------------------+
|
||||
[] Remember me
|
||||
Sign In Cancel
|
||||
Sign in with a Google Account
|
||||
Sign in with a Yahoo! ID
|
||||
What is OpenID?
|
||||
|
||||
OpenID provides secure single-sign-on, without revealing your passwords to this website.
|
||||
|
||||
There are many OpenID providers available. You may already be member of one!
|
||||
|
||||
Get OpenID
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
\subsection{Configure account}
|
||||
Click the dropdown button near the user name and click ``Settings''
|
||||
|
||||
% \includegraphics[width=6.00in,height=4.00in]{settings}
|
||||
% \epsfig{figure=keystroke_left}
|
||||
% \epstopdf {file=settings.eps}
|
||||
% \epsfig{file=settings.eps}
|
||||
|
||||
\label{user name} In ``profile'' section, type the user name for git. This probably can be changed only once.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
Profile Username zbao
|
||||
Preferences Full Name Zheng Bao
|
||||
Watched Projects Email Address zheng.bao@amd.com
|
||||
Contact Information Registered Jun 28, 2011 4:33 PM
|
||||
SSH Public Keys Account ID 1000034
|
||||
HTTP Password
|
||||
Identities
|
||||
Groups
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
\label{Contact Information} In ``Contact Information'', enter you full name and your Email, which should be configured in your .gitconfig
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
Full Name __________________________________
|
||||
Preferred Email ______________ Registered Email
|
||||
|
||||
Save Changes
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
In ``SSH Public Keys'' section, upload your public key.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
Status Algorithm Key Comment
|
||||
|
||||
Delete
|
||||
Add SSH Public Key
|
||||
> How to Generate an SSH Key
|
||||
+--------------------------+
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
+--------------------------+
|
||||
clear Add Close
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
Click ``Add Key ...''
|
||||
Go back to you linux command line and type:
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ ssh-keygen
|
||||
Generating public/private rsa key pair.
|
||||
Enter file in which to save the key (/home/zhengbao/.ssh/id_rsa):
|
||||
Enter passphrase (empty for no passphrase):
|
||||
Enter same passphrase again:
|
||||
Your identification has been saved in /home/zhengbao/.ssh/id_rsa.
|
||||
Your public key has been saved in /home/zhengbao/.ssh/id_rsa.pub.
|
||||
The key fingerprint is:
|
||||
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx zhengb@host.domain
|
||||
The key's randomart image is:
|
||||
+--[ RSA 2048]----+
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
+-----------------+
|
||||
\end{verbatim}
|
||||
}
|
||||
The data in ~/.ssh/id\_rsa.pub is your public key. Copy them to the box in the page of ``SSH Public Keys'' and click add.
|
||||
|
||||
In ``HTTP Password'' section, click button ``Generate Password''. You will get the password for http checkout.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
Username XXX
|
||||
Password XXXXXXXXXXXX
|
||||
|
||||
Generate Password Clear Password
|
||||
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
\subsection{Reviewing Changes}
|
||||
For each listed changes in Gerrit, you can review, comment, evaluate,
|
||||
cherry-pick, and even re-submit them. For you own patches, only you can
|
||||
abandon them. Click in the file and commit message, you can add in-line comment.
|
||||
|
||||
%
|
||||
% 14 Glossary
|
||||
%
|
||||
|
||||
\section{Glossary}
|
||||
\begin{itemize}
|
||||
\item payload
|
||||
|
||||
coreboot only cares about low level machine initialization, but also has
|
||||
very simple mechanisms to boot a file either from FLASHROM or IDE. That
|
||||
file, possibly a Linux Kernel, a boot loader or Etherboot, are called
|
||||
payload, since it is the first software executed that does not cope with
|
||||
pure initialization.
|
||||
|
||||
\item flash device
|
||||
|
||||
Flash devices are commonly used in all different computers since unlike
|
||||
ROMs they can be electronically erased and reprogrammed.
|
||||
|
||||
\item Gerrit
|
||||
|
||||
Gerrit is a web based code review system, facilitating online code
|
||||
reviews for projects using the Git version control system.
|
||||
|
||||
Gerrit makes reviews easier by showing changes in a side-by-side
|
||||
display, and allowing inline comments to be added by any reviewer.
|
||||
|
||||
Gerrit simplifies Git based project maintainership by permitting any
|
||||
authorized user to submit changes to the master Git repository, rather
|
||||
than requiring all approved changes to be merged in by hand by the
|
||||
project maintainer. This functionality enables a more centralized
|
||||
usage of Git.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\newpage
|
||||
|
||||
%
|
||||
% 14 Bibliography
|
||||
%
|
||||
|
||||
\section{Bibliography}
|
||||
\subsection{Additional Papers on coreboot}
|
||||
|
||||
\begin{itemize}
|
||||
\item
|
||||
\textit{\url{http://www.coreboot.org/Documentation}}
|
||||
\end{itemize}
|
||||
|
||||
\subsection {Links}
|
||||
|
||||
\begin{itemize}
|
||||
\item Etherboot: \textit{\url{http://www.etherboot.org/}}
|
||||
\item OpenBIOS: \textit{\url{http://www.openbios.org/}}
|
||||
\item Flashrom: \textit{\url{http://www.flashrom.org/}}
|
||||
\item Seabios: \textit{\url{http://www.seabios.org/}}
|
||||
\end{itemize}
|
||||
|
||||
|
||||
\end{document}
|
@ -1,162 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Galileo Implementation Status</title>
|
||||
</title>
|
||||
<body>
|
||||
<h1>Galileo Implementation Status<br>2016/07/08 06:51:34 PDT</h1>
|
||||
<table>
|
||||
<tr><td colspan=2><b>Legend</b></td></tr>
|
||||
<tr><td bgcolor="#ffc0c0">Red</td><td>Required - To-be-implemented</td></tr>
|
||||
<tr><td bgcolor="#ffffc0">Yellow</td><td>Optional</td></tr>
|
||||
<tr><td bgcolor="#c0ffc0">Green</td><td>Implemented</td></tr>
|
||||
</table>
|
||||
<table>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
<table border=1>
|
||||
<tr><th colspan=2>bootblock: 100% Done</th></tr>
|
||||
<tr><th>Type</th><th>Routine</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>bootblock_c_entry</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>bootblock_main_with_timestamp</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>bootblock_mainboard_early_init</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>bootblock_mainboard_init</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>bootblock_pre_c_entry</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>bootblock_protected_mode_entry</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>bootblock_soc_early_init</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>bootblock_soc_init</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>tsc_freq_mhz</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>uart_init</td></tr>
|
||||
</table>
|
||||
</td>
|
||||
<td width=5> </td>
|
||||
<td>
|
||||
<table border=1>
|
||||
<tr><th colspan=2>romstage: 67% Done</th></tr>
|
||||
<tr><th>Type</th><th>Routine</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>arch_segment_loaded</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>backup_top_of_ram</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>boot_device_init</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>car_mainboard_post_console_init</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>car_mainboard_pre_console_init</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>car_soc_post_console_init</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>car_soc_pre_console_init</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>car_stage_entry</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>cbfs_master_header_locator</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>cbmem_fail_resume</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>clear_recovery_mode_switch</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>cpu_smi_handler</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>fill_power_state</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>get_sw_write_protect_state</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>get_top_of_ram</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>gpio_acpi_path</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>init_timer</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_add_dimm_info</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_check_ec_image</td></tr>
|
||||
<tr bgcolor=#ffc0c0><td>Required</td><td>mainboard_fill_spd_data</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_io_trap_handler</td></tr>
|
||||
<tr bgcolor=#ffc0c0><td>Required</td><td>mainboard_memory_init_params</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_post</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>mainboard_romstage_entry</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_save_dimm_info</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_smi_apmc</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_smi_gpi</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_smi_sleep</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>map_oprom_vendev</td></tr>
|
||||
<tr bgcolor=#ffc0c0><td>Required</td><td>migrate_power_state</td></tr>
|
||||
<tr bgcolor=#ffc0c0><td>Required</td><td>mrc_cache_get_current_with_version</td></tr>
|
||||
<tr bgcolor=#ffc0c0><td>Required</td><td>mrc_cache_stash_data_with_version</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>platform_prog_run</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>platform_segment_loaded</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>print_fsp_info</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>raminit</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>ramstage_cache_invalid</td></tr>
|
||||
<tr bgcolor=#ffc0c0><td>Required</td><td>report_memory_config</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>romstage_common</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>save_chromeos_gpios</td></tr>
|
||||
<tr bgcolor=#ffc0c0><td>Required</td><td>set_max_freq</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>setup_stack_and_mtrrs</td></tr>
|
||||
<tr bgcolor=#ffc0c0><td>Required</td><td>smm_region</td></tr>
|
||||
<tr bgcolor=#ffc0c0><td>Required</td><td>smm_region_size</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>soc_after_ram_init</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>soc_display_memory_init_params</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>soc_display_mtrrs</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>soc_get_variable_mtrr_count</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>soc_memory_init_params</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>soc_pre_ram_init</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>southbridge_smi_handler</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>stage_cache_add</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>stage_cache_load_stage</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>timestamp_get</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>tsc_freq_mhz</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>vb2ex_hwcrypto_digest_extend</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>vb2ex_hwcrypto_digest_finalize</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>vb2ex_hwcrypto_digest_init</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>vboot_platform_prepare_reboot</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>verstage_mainboard_init</td></tr>
|
||||
</table>
|
||||
</td>
|
||||
<td width=5> </td>
|
||||
<td>
|
||||
<table border=1>
|
||||
<tr><th colspan=2>ramstage: 60% Done</th></tr>
|
||||
<tr><th>Type</th><th>Routine</td></tr>
|
||||
<tr bgcolor=#ffc0c0><td>Required</td><td>acpi_create_serialio_ssdt</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>arch_segment_loaded</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>backup_top_of_ram</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>boot_device_init</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>cbfs_master_header_locator</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>cbmem_fail_resume</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>clear_recovery_mode_switch</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>cpu_smi_handler</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>fw_cfg_acpi_tables</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>get_sw_write_protect_state</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>get_top_of_ram</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>gpio_acpi_path</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>init_timer</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>lb_board</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>lb_framebuffer</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_add_dimm_info</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_io_trap_handler</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_post</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_silicon_init_params</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_smi_apmc</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_smi_gpi</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_smi_sleep</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mainboard_suspend_resume</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>map_oprom_vendev</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>mirror_payload</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>northbridge_smi_handler</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>nvm_mmio_to_flash_offset</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>platform_prog_run</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>platform_segment_loaded</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>save_chromeos_gpios</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>smbios_mainboard_bios_version</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>smbios_mainboard_manufacturer</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>smbios_mainboard_product_name</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>smbios_mainboard_serial_number</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>smbios_mainboard_set_uuid</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>smbios_mainboard_version</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>smm_disable_busmaster</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>soc_after_silicon_init</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>soc_display_silicon_init_params</td></tr>
|
||||
<tr bgcolor=#ffc0c0><td>Required</td><td>soc_fill_acpi_wake</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>soc_silicon_init_params</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>soc_skip_ucode_update</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>southbridge_smi_handler</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>stage_cache_add</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>stage_cache_load_stage</td></tr>
|
||||
<tr bgcolor=#ffc0c0><td>Required</td><td>timestamp_get</td></tr>
|
||||
<tr bgcolor=#ffc0c0><td>Required</td><td>timestamp_tick_freq_mhz</td></tr>
|
||||
<tr bgcolor=#c0ffc0><td>Required</td><td>tsc_freq_mhz</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>vb2ex_hwcrypto_digest_extend</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>vb2ex_hwcrypto_digest_finalize</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>vb2ex_hwcrypto_digest_init</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>wifi_regulatory_domain</td></tr>
|
||||
<tr bgcolor=#ffffc0><td>Optional</td><td>write_smp_table</td></tr>
|
||||
</table>
|
||||
</td>
|
||||
<td width=5> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
@ -22,7 +22,7 @@
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="RequiredFiles">Required Files</a></h1>
|
||||
<h2><a name="RequiredFiles">Required Files</a></h2>
|
||||
<p>
|
||||
Create the board directory as src/mainboard/<Vendor>/<Board>.
|
||||
</p>
|
||||
@ -72,7 +72,6 @@
|
||||
<li>Set the CPU_MICROCODE_CBFS_LOC</li>
|
||||
<li>Set the FSP_IMAGE_ID_STRING</li>
|
||||
<li>Set the FSP_LOC</li>
|
||||
<li>Disable GOP_SUPPORT</li>
|
||||
<li>No payload</li>
|
||||
<li>Choose the default value for all other options</li>
|
||||
</ol>
|
||||
@ -81,7 +80,7 @@
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="SerialOutput">Enable Serial Output</a></h1>
|
||||
<h2><a name="SerialOutput">Enable Serial Output</a></h2>
|
||||
<p>
|
||||
Use the following steps to enable serial output:
|
||||
</p>
|
||||
@ -104,7 +103,7 @@
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="SpdData">Memory Timing Data</a></h1>
|
||||
<h2><a name="SpdData">Memory Timing Data</a></h2>
|
||||
<p>
|
||||
Memory timing data is located in the flash. This data is in the format of
|
||||
<a target="_blank" href="https://en.wikipedia.org/wiki/Serial_presence_detect">serial presence detect</a>
|
||||
@ -161,20 +160,20 @@
|
||||
<ol type="A">
|
||||
<li>0x34:
|
||||
- Just after entering
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l67">raminit</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l67">raminit</a>
|
||||
</li>
|
||||
<li>0x36:
|
||||
- Just before displaying the
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l106">UPD parameters</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l106">UPD parameters</a>
|
||||
for FSP MemoryInit
|
||||
</li>
|
||||
<li>0x92: <a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l219">POST_FSP_MEMORY_INIT</a>
|
||||
<li>0x92: <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l219">POST_FSP_MEMORY_INIT</a>
|
||||
- Just before calling FSP
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l125">MemoryInit</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l125">MemoryInit</a>
|
||||
</li>
|
||||
<li>0x37:
|
||||
- Just after returning from FSP
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l127">MemoryInit</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l127">MemoryInit</a>
|
||||
</li>
|
||||
</ol>
|
||||
</li>
|
||||
@ -184,7 +183,7 @@
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="DisablePciDevices">Disable PCI Devices</a></h1>
|
||||
<h2><a name="DisablePciDevices">Disable PCI Devices</a></h2>
|
||||
<p>
|
||||
Ramstage's BS_DEV_ENUMERATE state displays the PCI vendor and device IDs for all
|
||||
of the devices in the system. Edit the devicetree.cb file:
|
||||
@ -210,7 +209,7 @@
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="AcpiTables">ACPI Tables</a></h1>
|
||||
<h2><a name="AcpiTables">ACPI Tables</a></h2>
|
||||
<ol>
|
||||
<li>Edit Kconfig
|
||||
<ol type="A">
|
||||
|
@ -17,7 +17,6 @@
|
||||
<li><a target="_blank" href="../SoC/soc.html">SoC</a> support</li>
|
||||
<li><a target="_blank" href="../fsp1_1.html">FSP 1.1</a> integration</li>
|
||||
<li><a target="_blank" href="board.html">Board</a> support</li>
|
||||
<li><a target="_blank" href="Galileo_checklist.html">Implementation Checklist</a></li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
@ -26,7 +25,7 @@
|
||||
|
||||
|
||||
<hr>
|
||||
<h1>Galileo Board Documentation</h1>
|
||||
<h2>Galileo Board Documentation</h2>
|
||||
<ul>
|
||||
<li>Common Components
|
||||
<ul>
|
||||
@ -46,7 +45,7 @@
|
||||
<li>Make a bootable <a target="_blank" href="https://software.intel.com/en-us/get-started-galileo-linux-step1">micro SD card</a></li>
|
||||
</ul>
|
||||
|
||||
<h2>Galileo Gen 2 Board Documentation</h2>
|
||||
<h3>Galileo Gen 2 Board Documentation</h3>
|
||||
<ul>
|
||||
<li><a target="_blank" href="http://files.linuxgizmos.com/intel_galileo_gen2_blockdiagram.jpg">Block Diagram</a></li>
|
||||
<li><a target="_blank" href="https://software.intel.com/en-us/iot/library/galileo-getting-started">Getting Started</a></li>
|
||||
@ -70,7 +69,7 @@
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2>Galileo Gen 1 Board Documentation</h2>
|
||||
<h3>Galileo Gen 1 Board Documentation</h3>
|
||||
<ul>
|
||||
<li><a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/datasheets/galileo-g1-datasheet.pdf">Datasheet</a></li>
|
||||
<li><a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/guides/galileo-g1-schematic.pdf">Schematic</a></li>
|
||||
@ -89,7 +88,7 @@
|
||||
|
||||
|
||||
<hr>
|
||||
<h1>Debug Tools</h1>
|
||||
<h2>Debug Tools</h2>
|
||||
<ul>
|
||||
<li>Flash Programmer:
|
||||
<ul>
|
||||
|
@ -28,7 +28,7 @@
|
||||
|
||||
|
||||
<hr>
|
||||
<h1>Quark™ Documentation</h1>
|
||||
<h2>Quark™ Documentation</h2>
|
||||
<ul>
|
||||
<li><a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/images/embedded/16x9/edc-quark-block-diagram-16x9.png">Block Diagram</a></li>
|
||||
<li><a target="_blank" href="http://www.intel.com/content/www/us/en/embedded/products/quark/specifications.html">Specifications</a>:
|
||||
@ -49,7 +49,7 @@
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="CorebootPayloadPkg">Quark™ EDK2 CorebootPayloadPkg</a></h1>
|
||||
<h2><a name="CorebootPayloadPkg">Quark™ EDK2 CorebootPayloadPkg</a></h2>
|
||||
<p>
|
||||
Build Instructions:
|
||||
</p>
|
||||
@ -81,7 +81,7 @@ dir Build\CorebootPayloadPkgIA32\DEBUG_VS2015x86\FV\UEFIPAYLOAD.fd
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="BuildEnvironment">Quark™ EDK2 Build Environment</a></h1>
|
||||
<h2><a name="BuildEnvironment">Quark™ EDK2 Build Environment</a></h2>
|
||||
<p>
|
||||
Use the following steps to setup a build environment:
|
||||
</p>
|
||||
@ -118,7 +118,7 @@ edksetup.bat
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="QuarkFsp">Quark™ FSP</a></h1>
|
||||
<h2><a name="QuarkFsp">Quark™ FSP</a></h2>
|
||||
<p>
|
||||
Getting the Quark FSP source:
|
||||
</p>
|
||||
@ -130,7 +130,7 @@ Getting the Quark FSP source:
|
||||
<li>Use git to clone <a target="_blank" href="https://review.gerrithub.io/#/admin/projects/LeeLeahy/quarkfsp">QuarkFspPkg</a> into the QuarkFpsPkg directory (.)</li>
|
||||
</ol>
|
||||
|
||||
<h2>Building QuarkFspPkg</h2>
|
||||
<h3>Building QuarkFspPkg</h3>
|
||||
<p>
|
||||
There are two versions of FSP: FSP 1.1 and FSP 2.0. There are also two
|
||||
different implementations of FSP, one using subroutines without SEC and
|
||||
@ -157,7 +157,7 @@ Build commands shown building debug FSP:
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2>Copying FSP files into coreboot Source Tree</h2>
|
||||
<h3>Copying FSP files into coreboot Source Tree</h3>
|
||||
<p>
|
||||
There are some helper scripts to copy the FSP output into the coreboot
|
||||
source tree. The parameters to these scripts are:
|
||||
@ -182,7 +182,7 @@ Script files:
|
||||
|
||||
|
||||
<hr>
|
||||
<h1>Quark™ EDK2 BIOS</h1>
|
||||
<h2>Quark™ EDK2 BIOS</h2>
|
||||
<p>
|
||||
Build Instructions:
|
||||
</p>
|
||||
|
@ -39,7 +39,7 @@
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="RequiredFiles">Required Files</a></h1>
|
||||
<h2><a name="RequiredFiles">Required Files</a></h2>
|
||||
<p>
|
||||
Create the directory as src/soc/<Vendor>/<Chip Family>.
|
||||
</p>
|
||||
@ -69,13 +69,13 @@
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="Descriptor">Start Booting</a></h1>
|
||||
<h2><a name="Descriptor">Start Booting</a></h2>
|
||||
<p>
|
||||
Some SoC parts require additional firmware components in the flash.
|
||||
This section describes how to add those pieces.
|
||||
</p>
|
||||
|
||||
<h2>Intel Firmware Descriptor</h2>
|
||||
<h3>Intel Firmware Descriptor</h3>
|
||||
<p>
|
||||
The Intel Firmware Descriptor (IFD) is located at the base of the flash part.
|
||||
The following command overwrites the base of the flash image with the Intel
|
||||
@ -84,7 +84,7 @@
|
||||
<pre><code>dd if=descriptor.bin of=build/coreboot.rom conv=notrunc >/dev/null 2>&1</code></pre>
|
||||
|
||||
|
||||
<h2><a name="MEB">Management Engine Binary</a></h2>
|
||||
<h3><a name="MEB">Management Engine Binary</a></h3>
|
||||
<p>
|
||||
Some SoC parts contain and require that the Management Engine (ME) be running
|
||||
before it is possible to bring the x86 processor out of reset. A binary file
|
||||
@ -96,29 +96,29 @@ mv build/coreboot.rom.new build/coreboot.rom
|
||||
</code></pre>
|
||||
|
||||
|
||||
<h2><a name="EarlyDebug">Early Debug</a></h2>
|
||||
<h3><a name="EarlyDebug">Early Debug</a></h3>
|
||||
<p>
|
||||
Early debugging between the reset vector and the time the serial port is enabled
|
||||
is most easily done by writing values to port 0x80.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>Success</h2>
|
||||
<h3>Success</h3>
|
||||
<p>
|
||||
When the reset vector is successfully invoked, port 0x80 will output the following value:
|
||||
</p>
|
||||
<ul>
|
||||
<li>0x01: <a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l45">POST_RESET_VECTOR_CORRECT</a>
|
||||
<li>0x01: <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l45">POST_RESET_VECTOR_CORRECT</a>
|
||||
- Bootblock successfully executed the
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/reset16.inc;hb=HEAD#l4">reset vector</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/reset16.inc;hb=HEAD#l4">reset vector</a>
|
||||
and entered the 16-bit code at
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/entry16.inc;hb=HEAD#l35">_start</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/entry16.inc;hb=HEAD#l35">_start</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="Bootblock">Bootblock</a></h1>
|
||||
<h2><a name="Bootblock">Bootblock</a></h2>
|
||||
<p>
|
||||
Implement the bootblock using the following steps:
|
||||
</p>
|
||||
@ -154,15 +154,15 @@ mv build/coreboot.rom.new build/coreboot.rom
|
||||
<li>Add the necessary .h files to define the necessary values and structures</li>
|
||||
<li>When successful port 0x80 will output the following values:
|
||||
<ol type="A">
|
||||
<li>0x01: <a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l45">POST_RESET_VECTOR_CORRECT</a>
|
||||
<li>0x01: <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l45">POST_RESET_VECTOR_CORRECT</a>
|
||||
- Bootblock successfully executed the
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/reset16.inc;hb=HEAD#l4">reset vector</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/reset16.inc;hb=HEAD#l4">reset vector</a>
|
||||
and entered the 16-bit code at
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/entry16.inc;hb=HEAD#l35">_start</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/entry16.inc;hb=HEAD#l35">_start</a>
|
||||
</li>
|
||||
<li>0x10: <a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l53">POST_ENTER_PROTECTED_MODE</a>
|
||||
<li>0x10: <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l53">POST_ENTER_PROTECTED_MODE</a>
|
||||
- Bootblock executing in
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/32bit/entry32.inc;hb=HEAD#l55">32-bit mode</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/32bit/entry32.inc;hb=HEAD#l55">32-bit mode</a>
|
||||
</li>
|
||||
<li>0x10 - Verstage/romstage reached 32-bit mode</li>
|
||||
</ol>
|
||||
@ -173,26 +173,26 @@ mv build/coreboot.rom.new build/coreboot.rom
|
||||
<b>Build Note:</b> The following files are included into the default bootblock image:
|
||||
</p>
|
||||
<ul>
|
||||
<li><a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/bootblock_romcc.S;hb=HEAD">src/arch/x86/bootblock_romcc.S</a>
|
||||
added by <a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/Makefile.inc;hb=HEAD#l133">src/arch/x86/Makefile.inc</a>
|
||||
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/bootblock_romcc.S;hb=HEAD">src/arch/x86/bootblock_romcc.S</a>
|
||||
added by <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/Makefile.inc;hb=HEAD#l133">src/arch/x86/Makefile.inc</a>
|
||||
and includes the following files:
|
||||
<ul>
|
||||
<li><a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/prologue.inc">src/arch/x86/prologue.inc</a></li>
|
||||
<li><a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/reset16.inc">src/cpu/x86/16bit/reset16.inc</a></li>
|
||||
<li><a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/entry16.inc">src/cpu/x86/16bit/entry16.inc</a></li>
|
||||
<li><a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/32bit/entry32.inc">src/cpu/x86/32bit/entry32.inc</a></li>
|
||||
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/prologue.inc">src/arch/x86/prologue.inc</a></li>
|
||||
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/reset16.inc">src/cpu/x86/16bit/reset16.inc</a></li>
|
||||
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/16bit/entry16.inc">src/cpu/x86/16bit/entry16.inc</a></li>
|
||||
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/32bit/entry32.inc">src/cpu/x86/32bit/entry32.inc</a></li>
|
||||
<li>The code in
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/bootblock_romcc.S">src/arch/x86/bootblock_romcc.S</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/bootblock_romcc.S">src/arch/x86/bootblock_romcc.S</a>
|
||||
includes src/soc/<Vendor>/<Chip Family>/bootblock/timestamp.inc using the
|
||||
CONFIG_CHIPSET_BOOTBLOCK_INCLUDE value set above
|
||||
</li>
|
||||
<li><a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/sse_enable.inc">src/cpu/x86/sse_enable.inc</a></li>
|
||||
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/sse_enable.inc">src/cpu/x86/sse_enable.inc</a></li>
|
||||
<li>The code in
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/Makefile.inc;hb=HEAD#l156">src/arch/x86/Makefile.inc</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/Makefile.inc;hb=HEAD#l156">src/arch/x86/Makefile.inc</a>
|
||||
invokes the ROMCC tool to convert the following "C" code into assembler as bootblock.inc:
|
||||
<ul>
|
||||
<li><a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/include/arch/bootblock_romcc.h">src/arch/x86/include/arch/bootblock_romcc.h</a></li>
|
||||
<li><a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/lapic/boot_cpu.c">src/cpu/x86/lapic/boot_cpu.c</a></li>
|
||||
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/include/arch/bootblock_romcc.h">src/arch/x86/include/arch/bootblock_romcc.h</a></li>
|
||||
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/x86/lapic/boot_cpu.c">src/cpu/x86/lapic/boot_cpu.c</a></li>
|
||||
<li>The CONFIG_BOOTBLOCK_CPU_INIT value set above typically points to the code in
|
||||
src/soc/<Vendor>/<Chip Family>/bootblock/bootblock.c
|
||||
</li>
|
||||
@ -200,20 +200,20 @@ mv build/coreboot.rom.new build/coreboot.rom
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/id.S">src/arch/x86/id.S</a>
|
||||
added by <a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/Makefile.inc;hb=HEAD#l110">src/arch/x86/Makefile.inc</a>
|
||||
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/id.S">src/arch/x86/id.S</a>
|
||||
added by <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/Makefile.inc;hb=HEAD#l110">src/arch/x86/Makefile.inc</a>
|
||||
</li>
|
||||
<li><a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/intel/fit/fit.S">src/cpu/intel/fit/fit.S</a>
|
||||
added by <a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/intel/fit/Makefile.inc;hb=HEAD">src/cpu/intel/fit/Makefile.inc</a>
|
||||
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/intel/fit/fit.S">src/cpu/intel/fit/fit.S</a>
|
||||
added by <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/cpu/intel/fit/Makefile.inc;hb=HEAD">src/cpu/intel/fit/Makefile.inc</a>
|
||||
</li>
|
||||
<li><a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/walkcbfs.S">src/arch/x86/walkcbfs.S</a>
|
||||
added by <a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/Makefile.inc;hb=HEAD#l137">src/arch/x86/Makefile.inc</a>
|
||||
<li><a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/walkcbfs.S">src/arch/x86/walkcbfs.S</a>
|
||||
added by <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/Makefile.inc;hb=HEAD#l137">src/arch/x86/Makefile.inc</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="TempRamInit">TempRamInit</a></h1>
|
||||
<h2><a name="TempRamInit">TempRamInit</a></h2>
|
||||
<p>
|
||||
Enable the call to TempRamInit in two stages:
|
||||
</p>
|
||||
@ -223,7 +223,7 @@ mv build/coreboot.rom.new build/coreboot.rom
|
||||
</ol>
|
||||
|
||||
|
||||
<h2>Find FSP Binary</h2>
|
||||
<h3>Find FSP Binary</h3>
|
||||
<p>
|
||||
Use the following steps to locate the FSP binary:
|
||||
</p>
|
||||
@ -231,19 +231,17 @@ Use the following steps to locate the FSP binary:
|
||||
<li>Edit the src/soc/<Vendor>/<Chip Family>/Kconfig file
|
||||
<ol type="A">
|
||||
<li>Add "select USE_GENERIC_FSP_CAR_INC" to enable the use of
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc">src/drivers/intel/fsp1_1/cache_as_ram.inc</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc">src/drivers/intel/fsp1_1/cache_as_ram.inc</a>
|
||||
</li>
|
||||
<li>Add "select SOC_INTEL_COMMON" to enable the use of the files from src/soc/intel/common
|
||||
specifically building
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/soc/intel/common/util.c">util.c</a>
|
||||
</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li>Debug the result until port 0x80 outputs
|
||||
<ol type="A">
|
||||
<li>0x90: <a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l205">POST_FSP_TEMP_RAM_INIT</a>
|
||||
<li>0x90: <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l205">POST_FSP_TEMP_RAM_INIT</a>
|
||||
- Just before calling
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l73">TempRamInit</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l73">TempRamInit</a>
|
||||
</li>
|
||||
<li>Alternating 0xba and 0x01 - The FSP image was not found</li>
|
||||
</ol>
|
||||
@ -257,9 +255,9 @@ Use the following steps to locate the FSP binary:
|
||||
</li>
|
||||
<li>Debug the result until port 0x80 outputs
|
||||
<ol type="A">
|
||||
<li>0x90: <a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l205">POST_FSP_TEMP_RAM_INIT</a>
|
||||
<li>0x90: <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l205">POST_FSP_TEMP_RAM_INIT</a>
|
||||
- Just before calling
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l73">TempRamInit</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l73">TempRamInit</a>
|
||||
</li>
|
||||
<li>Alternating 0xbb and 0x02 - TempRamInit executed, no CPU microcode update found</li>
|
||||
</ol>
|
||||
@ -267,7 +265,7 @@ Use the following steps to locate the FSP binary:
|
||||
</ol>
|
||||
|
||||
|
||||
<h2>Calling TempRamInit</h2>
|
||||
<h3>Calling TempRamInit</h3>
|
||||
<p>
|
||||
Use the following steps to debug the call to TempRamInit:
|
||||
</p>
|
||||
@ -287,12 +285,12 @@ Use the following steps to debug the call to TempRamInit:
|
||||
</li>
|
||||
<li>Debug the result until port 0x80 outputs
|
||||
<ol type="A">
|
||||
<li>0x90: <a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l205">POST_FSP_TEMP_RAM_INIT</a>
|
||||
<li>0x90: <a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l205">POST_FSP_TEMP_RAM_INIT</a>
|
||||
- Just before calling
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l73">TempRamInit</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l73">TempRamInit</a>
|
||||
</li>
|
||||
<li>0x2A - Just before calling
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l151">cache_as_ram_main</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l151">cache_as_ram_main</a>
|
||||
which is the start of the verstage code which may be part of romstage
|
||||
</li>
|
||||
</ol>
|
||||
@ -301,9 +299,9 @@ Use the following steps to debug the call to TempRamInit:
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="Romstage">Romstage</a></h1>
|
||||
<h2><a name="Romstage">Romstage</a></h2>
|
||||
|
||||
<h2><a name="SerialOutput">Serial Output</a></h2>
|
||||
<h3><a name="SerialOutput">Serial Output</a></h3>
|
||||
<p>
|
||||
The following steps add the serial output support for romstage:
|
||||
</p>
|
||||
@ -339,7 +337,7 @@ Use the following steps to debug the call to TempRamInit:
|
||||
</ol>
|
||||
|
||||
|
||||
<h2><a name="PreviousSleepState">Determine Previous Sleep State</a></h2>
|
||||
<h3><a name="PreviousSleepState">Determine Previous Sleep State</a></h3>
|
||||
<p>
|
||||
The following steps implement the code to get the previous sleep state:
|
||||
</p>
|
||||
@ -349,20 +347,20 @@ Use the following steps to debug the call to TempRamInit:
|
||||
<ol type="A">
|
||||
<li>0x32:
|
||||
- Just after entering
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/romstage.c;hb=HEAD#l99">romstage_common</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/romstage.c;hb=HEAD#l99">romstage_common</a>
|
||||
</li>
|
||||
<li>0x33 - Just after calling
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/romstage.c;hb=HEAD#l113">soc_pre_ram_init</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/romstage.c;hb=HEAD#l113">soc_pre_ram_init</a>
|
||||
</li>
|
||||
<li>0x34:
|
||||
- Just after entering
|
||||
<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l67">raminit</a>
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/raminit.c;hb=HEAD#l67">raminit</a>
|
||||
</li>
|
||||
</ol>
|
||||
</ol>
|
||||
|
||||
|
||||
<h2><a name="MemoryInit">MemoryInit Support</a></h2>
|
||||
<h3><a name="MemoryInit">MemoryInit Support</a></h3>
|
||||
<p>
|
||||
The following steps implement the code to support the FSP MemoryInit call:
|
||||
</p>
|
||||
@ -390,7 +388,7 @@ Use the following steps to debug the call to TempRamInit:
|
||||
</ol>
|
||||
|
||||
|
||||
<h2><a name="DisableShadowRom">Disable Shadow ROM</a></h2>
|
||||
<h3><a name="DisableShadowRom">Disable Shadow ROM</a></h3>
|
||||
<p>
|
||||
A shadow of the SPI flash part is mapped from 0x000e0000 to 0x000fffff.
|
||||
This shadow needs to be disabled to allow RAM to properly respond to
|
||||
@ -402,22 +400,22 @@ Use the following steps to debug the call to TempRamInit:
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="Ramstage">Ramstage</a></h1>
|
||||
<h2><a name="Ramstage">Ramstage</a></h2>
|
||||
|
||||
<h2><a name="DeviceTree">Start Device Tree Processing</a></h2>
|
||||
<h3><a name="DeviceTree">Start Device Tree Processing</a></h3>
|
||||
<p>
|
||||
The src/mainboard/<Vendor>/<Board>/devicetree.cb file drives the
|
||||
execution during ramstage. This file is processed by the util/sconfig utility
|
||||
to generate build/mainboard/<Vendor>/<Board>/static.c. The various
|
||||
state routines in
|
||||
src/lib/<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/lib/hardwaremain.c;hb=HEAD#l128">hardwaremain.c</a>
|
||||
src/lib/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/lib/hardwaremain.c;hb=HEAD#l128">hardwaremain.c</a>
|
||||
call dev_* routines which use the tables in static.c to locate operation tables
|
||||
associated with the various chips and devices. After location the operation
|
||||
tables, the state routines call one or more functions depending upon the
|
||||
state of the state machine.
|
||||
</p>
|
||||
|
||||
<h3><a name="ChipOperations">Chip Operations</a></h3>
|
||||
<h4><a name="ChipOperations">Chip Operations</a></h4>
|
||||
<p>
|
||||
Kick-starting the ramstage state machine requires creating the operation table
|
||||
for the chip listed in devicetree.cb:
|
||||
@ -437,7 +435,7 @@ Use the following steps to debug the call to TempRamInit:
|
||||
<li>Edit src/soc/<SoC Vendor>/<SoC Family>/Makefile.inc and add chip.c to ramstage</li>
|
||||
</ol>
|
||||
|
||||
<h3>Domain Operations</h3>
|
||||
<h4>Domain Operations</h4>
|
||||
<p>
|
||||
coreboot uses the domain operation table to initiate operations on all of the
|
||||
devices in the domain. By default coreboot enables all PCI devices which it
|
||||
@ -456,7 +454,6 @@ Use the following steps to debug the call to TempRamInit:
|
||||
.read_resources = pci_domain_read_resources,
|
||||
.set_resources = pci_domain_set_resources,
|
||||
.scan_bus = pci_domain_scan_bus,
|
||||
.ops_pci_bus = pci_bus_default_ops,
|
||||
};
|
||||
</code></pre>
|
||||
</li>
|
||||
@ -482,7 +479,7 @@ Use the following steps to debug the call to TempRamInit:
|
||||
</ol>
|
||||
|
||||
|
||||
<h2><a name="DeviceDrivers">PCI Device Drivers</a></h2>
|
||||
<h3><a name="DeviceDrivers">PCI Device Drivers</a></h3>
|
||||
<p>
|
||||
PCI device drivers consist of a ".c" file which contains a "pci_driver" data
|
||||
structure at the end of the file with the attribute tag "__pci_driver". This
|
||||
@ -509,7 +506,7 @@ Use the following steps to debug the call to TempRamInit:
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h3><a name="SubsystemIds">Subsystem IDs</a></h3>
|
||||
<h4><a name="SubsystemIds">Subsystem IDs</a></h4>
|
||||
<p>
|
||||
PCI subsystem IDs are assigned during the BS_DEV_ENABLE state. The device
|
||||
driver may use the common mechanism to assign subsystem IDs by adding
|
||||
@ -517,7 +514,7 @@ Use the following steps to debug the call to TempRamInit:
|
||||
a "struct pci_operations" that specifies a routine to set the subsystem
|
||||
IDs for the device. The routine might look something like this:
|
||||
</p>
|
||||
<pre><code>static void pci_set_subsystem(device_t dev, unsigned vendor, unsigned device)
|
||||
<pre><code>static void pci_set_subsystem(struct device *dev, unsigned vendor, unsigned device)
|
||||
{
|
||||
if (!vendor || !device) {
|
||||
vendor = pci_read_config32(dev, PCI_VENDOR_ID);
|
||||
@ -534,13 +531,13 @@ Use the following steps to debug the call to TempRamInit:
|
||||
|
||||
|
||||
|
||||
<h2>Set up the <a name="MemoryMap">Memory Map</a></h2>
|
||||
<h3>Set up the <a name="MemoryMap">Memory Map</a></h3>
|
||||
<p>
|
||||
The memory map is built by the various PCI device drivers during the
|
||||
BS_DEV_RESOURCES state of ramstage. The northcluster driver will typically
|
||||
specify the DRAM resources while the other drivers will typically specify
|
||||
the IO resources. These resources are hung off the device_t data structure by
|
||||
src/device/device_util.c/<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/device/device_util.c;hb=HEAD#l448">new_resource</a>.
|
||||
the IO resources. These resources are hung off the struct device *data structure by
|
||||
src/device/device_util.c/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/device/device_util.c;hb=HEAD#l448">new_resource</a>.
|
||||
</p>
|
||||
<p>
|
||||
During the BS_WRITE_TABLES state, coreboot collects these resources and
|
||||
@ -552,7 +549,7 @@ Use the following steps to debug the call to TempRamInit:
|
||||
<ol>
|
||||
<li>
|
||||
Implement a read_resources routine which calls macros defined in
|
||||
src/include/device/<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/device/device.h;hb=HEAD#l237">device.h</a>
|
||||
src/include/device/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/device/device.h;hb=HEAD#l237">device.h</a>
|
||||
like:
|
||||
<ul>
|
||||
<li>ram_resource</li>
|
||||
@ -571,12 +568,12 @@ Use the following steps to debug the call to TempRamInit:
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="AcpiTables">ACPI Tables</a></h1>
|
||||
<h2><a name="AcpiTables">ACPI Tables</a></h2>
|
||||
<p>
|
||||
One of the payloads that needs ACPI tables is the EDK2 <a target="_blank" href="quark.html#CorebootPayloadPkg">CorebootPayloadPkg</a>.
|
||||
</p>
|
||||
|
||||
<h2>FADT</h2>
|
||||
<h3>FADT</h3>
|
||||
<p>
|
||||
The EDK2 module
|
||||
CorebootModulePkg/Library/CbParseLib/<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/CorebootModulePkg/Library/CbParseLib/CbParseLib.c#l450">CbParseLib.c</a>
|
||||
@ -588,7 +585,7 @@ Use the following steps to debug the call to TempRamInit:
|
||||
</p>
|
||||
<table border="1">
|
||||
<tr bgcolor="#c0ffc0">
|
||||
<td>Coreboot Field</td>
|
||||
<td>coreboot Field</td>
|
||||
<td>EDK2 Field</td>
|
||||
<td>gUefiAcpiBoardInfoGuid</td>
|
||||
<td>Use</li>
|
||||
@ -661,7 +658,7 @@ Use the following steps to debug the call to TempRamInit:
|
||||
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>
|
||||
The coreboot data structure is defined in
|
||||
src/arch/x86/include/arch/<a target="_blank" href="http://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/arch/acpi.h;hb=HEAD#l237">acpi.h</a>
|
||||
</p>
|
||||
|
||||
<ol>
|
||||
@ -679,7 +676,7 @@ Use the following steps to debug the call to TempRamInit:
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="LegacyHardware">Legacy Hardware</a></h1>
|
||||
<h2><a name="LegacyHardware">Legacy Hardware</a></h2>
|
||||
<p>
|
||||
One of the payloads that needs legacy hardare is the EDK2 <a target="_blank" href="quark.html#CorebootPayloadPkg">CorebootPayloadPkg</a>.
|
||||
</p>
|
||||
@ -731,4 +728,4 @@ Use the following steps to debug the call to TempRamInit:
|
||||
<hr>
|
||||
<p>Modified: 4 March 2016</p>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
@ -170,7 +170,7 @@
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/after_raminit.S;hb=HEAD#l41">after_raminit.S</a><br>
|
||||
</td>
|
||||
<td>FindFSP: POST code 0x90
|
||||
(<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l205">POST_FSP_TEMP_RAM_INIT</a>)
|
||||
(<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l205">POST_FSP_TEMP_RAM_INIT</a>)
|
||||
is displayed<br>
|
||||
Enable: POST code
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l151">0x2A</a>
|
||||
@ -264,7 +264,7 @@
|
||||
<ul>
|
||||
<li>MemoryInit UPD values are correct</li>
|
||||
<li>MemoryInit returns 0 (success) and</li>
|
||||
<li>The the message "ERROR - coreboot's requirements not met by FSP binary!"
|
||||
<li>The message "ERROR - coreboot's requirements not met by FSP binary!"
|
||||
is not displayed
|
||||
</li>
|
||||
</ul>
|
||||
@ -303,7 +303,7 @@
|
||||
<td>TempRamInit</td>
|
||||
<td>FSP <a target="_blank" href="SoC/soc.html#TempRamInit">TempRamInit</a></td>
|
||||
<td>FSP binary found: POST code 0x90
|
||||
(<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l205">POST_FSP_TEMP_RAM_INIT</a>)
|
||||
(<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l205">POST_FSP_TEMP_RAM_INIT</a>)
|
||||
is displayed<br>
|
||||
TempRamInit successful: POST code
|
||||
<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/cache_as_ram.inc;hb=HEAD#l151">0x2A</a>
|
||||
@ -324,7 +324,7 @@
|
||||
<ul>
|
||||
<li>MemoryInit UPD values are correct</li>
|
||||
<li>MemoryInit returns 0 (success) and</li>
|
||||
<li>The the message "ERROR - coreboot's requirements not met by FSP binary!"
|
||||
<li>The message "ERROR - coreboot's requirements not met by FSP binary!"
|
||||
is not displayed
|
||||
</li>
|
||||
</ul>
|
||||
@ -332,7 +332,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td>TempRamExit</td>
|
||||
<td>src/drivers/intel/fsp1_1/<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/after_raminit.S;hb=HEAD#l51">after_raminit.S</a></td>
|
||||
<td>src/drivers/intel/fsp1_1/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/after_raminit.S;hb=HEAD#l51">after_raminit.S</a></td>
|
||||
<td>Post code 0x91
|
||||
(<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/include/console/post_codes.h;hb=HEAD#l212">POST_FSP_TEMP_RAM_EXIT</a>)
|
||||
is displayed before calling TempRamExit by
|
||||
@ -354,7 +354,7 @@
|
||||
<td>FspNotify</td>
|
||||
<td>
|
||||
The code which calls FspNotify is located in
|
||||
src/drivers/intel/fsp1_1/<a target="_blank" href="http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/fsp_util.c;hb=HEAD#l182">fsp_util.c</a>.
|
||||
src/drivers/intel/fsp1_1/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/drivers/intel/fsp1_1/fsp_util.c;hb=HEAD#l182">fsp_util.c</a>.
|
||||
The fsp_notify_boot_state_callback routine is called three times as specified
|
||||
by the BOOT_STATE_INIT_ENTRY macros below the routine.
|
||||
</td>
|
||||
@ -374,4 +374,4 @@
|
||||
<hr>
|
||||
<p>Modified: 4 March 2016</p>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
@ -5,7 +5,9 @@
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>x86 FSP 1.1 Integration</h1>
|
||||
<h1>FSP 1.1</h1>
|
||||
|
||||
<h2>x86 FSP 1.1 Integration</h2>
|
||||
<p>
|
||||
Firmware Support Package (FSP) integration requires System-on-a-Chip (SoC)
|
||||
and board support. The combined steps are listed
|
||||
@ -26,8 +28,8 @@
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
<h1><a name="RequiredFiles">Required Files</a></h1>
|
||||
<h2><a name="corebootRequiredFiles">coreboot Required Files</a></h2>
|
||||
<h2><a name="RequiredFiles">Required Files</a></h2>
|
||||
<h3><a name="corebootRequiredFiles">coreboot Required Files</a></h3>
|
||||
<ol>
|
||||
<li>Create the following directories if they do not already exist:
|
||||
<ul>
|
||||
@ -47,7 +49,7 @@
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="FspBinary">Add the FSP Binary File to coreboot File System</a></h1>
|
||||
<h2><a name="FspBinary">Add the FSP Binary File to coreboot File System</a></h2>
|
||||
<p>
|
||||
Add the FSP binary to the coreboot flash image using the following command:
|
||||
</p>
|
||||
@ -59,7 +61,7 @@
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="corebootFspDebugging">Enable coreboot/FSP Debugging</a></h1>
|
||||
<h2><a name="corebootFspDebugging">Enable coreboot/FSP Debugging</a></h2>
|
||||
<p>
|
||||
Set the following Kconfig values:
|
||||
</p>
|
||||
|
@ -5,15 +5,15 @@
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>Intel® x86 Boards</h1>
|
||||
<h1>Intel® x86</h1>
|
||||
|
||||
<h2>Intel® x86 Boards</h2>
|
||||
<ul>
|
||||
<li><a target="_blank" href="Board/galileo.html">Galileo</a></li>
|
||||
<li><a target="_blank" href="http://wiki.minnowboard.org/Coreboot">MinnowBoard MAX</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
<h1>Intel® x86 SoCs</h1>
|
||||
<h2>Intel® x86 SoCs</h2>
|
||||
<ul>
|
||||
<li><a target="_blank" href="SoC/quark.html">Quark™</a></li>
|
||||
</ul>
|
||||
@ -21,7 +21,7 @@
|
||||
|
||||
|
||||
<hr>
|
||||
<h1>x86 coreboot Development</h1>
|
||||
<h2>x86 coreboot Development</h2>
|
||||
<ul>
|
||||
<li>Get the <a target="_blank" href="https://www.coreboot.org/Git">coreboot source</li>
|
||||
<li><a target="_blank" href="development.html">Overall</a> development</li>
|
||||
@ -29,12 +29,13 @@
|
||||
</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="vboot.html">Verified Boot (vboot)</a> support</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
<hr>
|
||||
<h1>Payload Development</h1>
|
||||
<h2>Payload Development</h2>
|
||||
<ul>
|
||||
<li><a target="_blank" href="SoC/quark.html#CorebootPayloadPkg">CorebootPayloadPkg</a>
|
||||
<ul>
|
||||
@ -49,13 +50,13 @@
|
||||
|
||||
|
||||
<hr>
|
||||
<h1><a name="Documentation">Documentation</a></h1>
|
||||
<h2><a name="Documentation">Documentation</a></h2>
|
||||
<ul>
|
||||
<li>Intel® 64 and IA-32 Architectures <a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf">Software Developer Manual</a></li>
|
||||
<li><a target="_blank" href="http://www.uefi.org/specifications">UEFI Specifications</a></li>
|
||||
</ul>
|
||||
|
||||
<h2><a name="Edk2Documentation">EDK-II Documentation</a></h2>
|
||||
<h3><a name="Edk2Documentation">EDK-II Documentation</a></h3>
|
||||
<ul>
|
||||
<li>Build <a target="_blank" href="https://github.com/tianocore-docs/Docs/raw/master/Specifications/Build_Spec_1_26.pdf">V1.26</a></li>
|
||||
<li>Coding Standards <a target="_blank" href="https://github.com/tianocore-docs/Docs/raw/master/Specifications/CCS_2_1_Draft.pdf">V2.1</a></li>
|
||||
@ -70,14 +71,14 @@
|
||||
<li>VRF <a target="_blank" href="https://github.com/tianocore-docs/Docs/raw/master/Specifications/VFR_1_9.pdf">V1.9</a></li>
|
||||
</ul>
|
||||
|
||||
<h2><a name="FspDocumentation">FSP Documentation</a></h2>
|
||||
<h3><a name="FspDocumentation">FSP Documentation</a></h3>
|
||||
<ul>
|
||||
<li>Intel® Firmware Support Package External Architecture Specification <a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/fsp-architecture-spec-v2.pdf">V2.0</a></li>
|
||||
<li>Intel® Firmware Support Package External Architecture Specification <a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/fsp-architecture-spec-v1-1.pdf">V1.1</a></li>
|
||||
<li>Intel® Firmware Support Package External Architecture Specification <a target="_blank" href="http://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/fsp-architecture-spec.pdf">V1.0</a></li>
|
||||
</ul>
|
||||
|
||||
<h2><a name="FeatureDocumentation">Feature Documentation</a></h2>
|
||||
<h3><a name="FeatureDocumentation">Feature Documentation</a></h3>
|
||||
<table border="1">
|
||||
<tr bgcolor="#c0ffc0"><th>Feature/Specification</th><th>Linux View/Test</th><th>EDK-II View/Test</th></tr>
|
||||
<tr>
|
||||
|
402
Documentation/Intel/vboot.html
Normal file
@ -0,0 +1,402 @@
|
||||
<!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>
|
@ -1,480 +0,0 @@
|
||||
\documentclass[10pt,letterpaper]{article}
|
||||
\usepackage[latin1]{inputenc}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{amsfonts}
|
||||
\usepackage{amssymb}
|
||||
\author{Ron Minnich}
|
||||
\title{Kconfig usage in coreboot v2}
|
||||
\begin{document}
|
||||
\section{Introduction}
|
||||
This document describes how to use Kconfig in v2. We describe our usage of Kconfig files, Makefile.inc files, when and where to use them, how to use them, and, interestingly, when and where not to use them.
|
||||
\section{Kconfig variations}
|
||||
Most Kconfig files set variables, which can be set as part of the Kconfig dialog. Not all Kconfig variables are set by the user, however; some are too dangerous. These are merely enabled by the mainboard.
|
||||
|
||||
For variables set by the user, see src/console/Kconfig.
|
||||
|
||||
For variables not set by the user, see src/mainboard/amd/serengeti\_cheetah/Kconfig. Users should never set such variables as the cache as RAM base. These are highly mainboard dependent.
|
||||
|
||||
Kconfig files use the source command to include subdirectories. In most cases, save for limited cases described below, subdirectories have Kconfig files. They are always sourced unconditionally.
|
||||
|
||||
\section{Makefile and Makefile.inc}
|
||||
There is only one Makefile, at the top level. All other makefiles are included as Makefile.inc. All the next-level Makefile.inc files are selected in the top level Makefile. Directories that are platform-independent are in BUILD-y; platform-dependent (e.g. Makefile.inc's that depend on architecture) are included in PLATFORM-y.
|
||||
|
||||
Make is not recursive. There is only one make process.
|
||||
\subsection{subdirs usage}
|
||||
Further includes of Makefile.inc, if needed, are done via subdirs-y commands. As in Linux, the subdirs can be conditional or unconditional. Conditional includes are done via subdirs-\$(CONFIG\_VARIABLE) usage; unconditional are done via subdirs-y.
|
||||
|
||||
We define the common rules for which variation to use below.
|
||||
\subsection{object file specification}
|
||||
There are several different types of objects specified in the tree. They are:
|
||||
\begin{description}
|
||||
\item[obj]objects for the RAM part of the code
|
||||
\item[driver]drivers for the RAM part. Drivers are not represented in the device tree but do have a driver struct attached in the driver section.
|
||||
\item[initobj]seperately-compiled code for the ROM section of coreboot
|
||||
\end{description}
|
||||
These items are specified via the -y syntax as well. Conditional object inclusion is done via the -\$(CONFIG\_VARIABLE) syntax.
|
||||
|
||||
\section{Example: AMD serengeti cheetah}
|
||||
\subsection{mainboard/Kconfig}
|
||||
Defines Vendor variables. Currently defined variables are:
|
||||
Sources all Kconfig files in the vendor directories.
|
||||
\input{ mainboardkconfig.tex}
|
||||
\subsection{mainboard/Makefile.inc}
|
||||
There is none at this time.
|
||||
\subsection{mainboard/$<$vendor$>$/Kconfig}
|
||||
We use the amd as a model. The only action currently taken is to source all Kconfig's in the
|
||||
subdirectories.
|
||||
\subsection{mainboard/$<$vendor$>$/Makefile.inc}
|
||||
We use amd as a model. There is currently no Makefile.inc at this level.
|
||||
\subsection{mainboard/$<$vendor$>$/$<$board$>$/Kconfig}
|
||||
The mainboard Kconfig and Makefile.inc are designed to be the heart of the build. The defines
|
||||
and rules in here determine everything about how a mainboard target is built.
|
||||
We will use serengeti\_cheetah as a model. It defines these variables.
|
||||
\input{ mainboardkconfig.tex}
|
||||
\subsection{mainboard/$<$vendor$>$/$<$board$>$/Makefile.inc}
|
||||
This is a fairly complex Makefile.inc. Because this is such a critical component, we are going to excerpt and take it piece by piece.
|
||||
Note that this is the mainboard as of August, 2009, and it may change over time.
|
||||
\subsubsection{objects}
|
||||
We define objects in the first part. The mainbard itself is a driver and included unconditionally. Other objects are conditional:
|
||||
\begin{verbatim}
|
||||
driver-y += mainboard.o
|
||||
|
||||
#needed by irq_tables and mptable and acpi_tables
|
||||
obj-y += get_bus_conf.o
|
||||
obj-$(CONFIG_HAVE_MP_TABLE) += mptable.o
|
||||
obj-$(CONFIG_HAVE_PIRQ_TABLE) += irq_tables.o
|
||||
obj-$(CONFIG_HAVE_ACPI_TABLES) += dsdt.o
|
||||
obj-$(CONFIG_HAVE_ACPI_TABLES) += acpi_tables.o
|
||||
obj-$(CONFIG_HAVE_ACPI_TABLES) += fadt.o
|
||||
|
||||
#./ssdt.o is in northbridge/amd/amdk8/Config.lb
|
||||
obj-$(CONFIG_ACPI_SSDTX_NUM) += ssdt2.o
|
||||
obj-$(CONFIG_ACPI_SSDTX_NUM) += ssdt3.o
|
||||
obj-$(CONFIG_HAVE_ACPI_TABLES) += ssdt4.o
|
||||
driver-y += ../../../drivers/i2c/i2cmux/i2cmux.o
|
||||
|
||||
# This is part of the conversion to init-obj and away from included code.
|
||||
|
||||
initobj-y += crt0.o
|
||||
\end{verbatim}
|
||||
\subsubsection{romcc legacy support}
|
||||
We hope to move away from romcc soon, but for now, if one is using romcc, the Makefile.inc must define
|
||||
crt0 include files (assembly code for startup, usually); and several ldscripts. These are taken directly from the
|
||||
old Config.lb. Note that these use the -y syntax and can use the ability to be included conditionally.
|
||||
\begin{verbatim}
|
||||
crt0-y += ../../../../src/cpu/x86/16bit/entry16.inc
|
||||
crt0-y += ../../../../src/cpu/x86/32bit/entry32.inc
|
||||
crt0-y += ../../../../src/cpu/x86/16bit/reset16.inc
|
||||
crt0-y += ../../../../src/arch/i386/lib/id.inc
|
||||
crt0-y += ../../../../src/cpu/amd/car/cache_as_ram.inc
|
||||
crt0-y += auto.inc
|
||||
|
||||
ldscript-y += ../../../../src/arch/i386/init/ldscript_fallback_cbfs.lb
|
||||
ldscript-y += ../../../../src/cpu/x86/16bit/entry16.lds
|
||||
ldscript-y += ../../../../src/cpu/x86/16bit/reset16.lds
|
||||
ldscript-y += ../../../../src/arch/i386/lib/id.lds
|
||||
ldscript-y += ../../../../src/arch/i386/lib/failover.lds
|
||||
|
||||
\end{verbatim}
|
||||
\subsubsection{POST\_EVALUATION}
|
||||
POST\_EVALUATION rules should be placed after this section:
|
||||
\begin{verbatim}
|
||||
ifdef POST_EVALUATION
|
||||
\end{verbatim}
|
||||
to ensure that the values of variables are correct.
|
||||
Here are the post-evaluation rules for this mainboard:
|
||||
\begin{verbatim}
|
||||
$(obj)/dsdt.c: $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
|
||||
iasl -p dsdt -tc $(src)/mainboard/$(MAINBOARDDIR)/dsdt.asl
|
||||
mv dsdt.hex $@
|
||||
|
||||
$(obj)/mainboard/$(MAINBOARDDIR)/dsdt.o: $(obj)/dsdt.c
|
||||
$(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c $< -o $@
|
||||
|
||||
$(obj)/ssdt2.c: $(src)/mainboard/$(MAINBOARDDIR)/dx/pci2.asl
|
||||
iasl -p $(CURDIR)/pci2 -tc $(CONFIG_MAINBOARD)/dx/pci2.asl
|
||||
perl -pi -e 's/AmlCode/AmlCode_ssdt2/g' pci2.hex
|
||||
mv pci2.hex ssdt2.c
|
||||
|
||||
$(obj)/ssdt3.c: $(src)/mainboard/$(MAINBOARDDIR)/dx/pci3.asl"
|
||||
iasl -p $(CURDIR)/pci3 -tc $(CONFIG_MAINBOARD)/
|
||||
perl -pi -e 's/AmlCode/AmlCode_ssdt3/g' pci3.hex
|
||||
mv pci3.hex ssdt3.c
|
||||
|
||||
$(obj)/ssdt4.c: $(src)/mainboard/$(MAINBOARDDIR)/dx/pci4.asl"
|
||||
iasl -p $(CURDIR)/pci4 -tc $(CONFIG_MAINBOARD)/dx/pci4.asl
|
||||
perl -pi -e 's/AmlCode/AmlCode_ssdt4/g' pci4.hex
|
||||
mv pci4.hex ssdt4.c
|
||||
|
||||
$(obj)/mainboard/$(MAINBOARDDIR)/auto.inc: $(src)/mainboard/$(MAINBOARDDIR)/rom.c $(obj)/option_table.h
|
||||
$(CC) $(DISTRO_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(DEBUG_CFLAGS) -I$(src) -I. -c -S $(src)/mainboard/$(MAINBOARDDIR)/rom.c -o $@
|
||||
perl -e 's/\.rodata/.rom.data/g' -pi $@
|
||||
perl -e 's/\.text/.section .rom.text/g' -pi $@
|
||||
|
||||
\end{verbatim}
|
||||
The last rule is for romcc, and, again, we hope to eliminate romcc usage and this rule soon. The first set of rules concern ACPI tables.
|
||||
\subsubsection{devicetree.cb}
|
||||
Most of the old Config.lb is gone, but one piece remains: the device tree specification. This tree is still required to build a mainboard
|
||||
properly, as it defines topology and chips that can be defined no other way.
|
||||
Let's go through the tree.
|
||||
\begin{verbatim}
|
||||
chip northbridge/amd/amdk8/root_complex
|
||||
device cpu_cluster 0 on
|
||||
chip cpu/amd/socket_F
|
||||
device lapic 0 on end
|
||||
end
|
||||
end
|
||||
\end{verbatim}
|
||||
This topology is always somewhat confusing to newcomers, and even to coreboot veterans.
|
||||
|
||||
We root the tree at the pci-e {\it root complex}. There is always the question of how and where to root the tree. Over the years we
|
||||
have found that the one part that never goes away is the root complex. CPU sockets may be empty or full; but there is always a northbridge
|
||||
somewhere, since it runs memory.
|
||||
|
||||
|
||||
What is the APIC? Northbridges always have an Advanced Programmable Interrupt Controller, and that {\it APIC cluster} is a topological connection to the
|
||||
CPU socket. So the tree is rooted at the northbridge, which has a link to a CPU cluster, and then the CPU. The CPU contains
|
||||
its own APIC, and will define any parameters needed. In this case, we have a northbridge of type
|
||||
{\it northbridge/amd/amdk8/root\_complex}, with its own cpu\_cluster device which we turn on,
|
||||
which connects to a {\it cpu/amd/socket\_F},
|
||||
which has a local apic, which is on.
|
||||
|
||||
Note that we do not enumerate all CPUs, even on this SMP mainboard. The reason is they may not all be there. The CPU we define here
|
||||
is the so-called Boot Strap Processor, or BSP; the other CPUs will come along later, as the are discovered. We do not require (unlike many
|
||||
BIOSes) that the BSP be CPU 0; any CPU will do.
|
||||
\begin{verbatim}
|
||||
device domain 0 on
|
||||
chip northbridge/amd/amdk8
|
||||
device pci 18.0 on # northbridge
|
||||
# devices on link 0, link 0 == LDT 0
|
||||
\end{verbatim}
|
||||
Here begins the pci domain, which usually starts with 0. Then there is the northbridge, which bridges to the PCI bus. On
|
||||
Opterons, certain CPU control registers are managed in PCI config space in device 18.0 (BSP), 19.0 (AP), and up.
|
||||
\begin{verbatim}
|
||||
chip southbridge/amd/amd8132
|
||||
# the on/off keyword is mandatory
|
||||
device pci 0.0 on end
|
||||
device pci 0.1 on end
|
||||
device pci 1.0 on end
|
||||
device pci 1.1 on end
|
||||
end
|
||||
\end{verbatim}
|
||||
This is the 8132, a bridge to a secondary PCI bus.
|
||||
\begin{verbatim}
|
||||
chip southbridge/amd/amd8111
|
||||
# this "device pci 0.0" is the parent the next one
|
||||
# PCI bridge
|
||||
device pci 0.0 on
|
||||
device pci 0.0 on end
|
||||
device pci 0.1 on end
|
||||
device pci 0.2 off end
|
||||
device pci 1.0 off end
|
||||
end
|
||||
\end{verbatim}
|
||||
The 8111 is a bridge to other busses and to the legacy ISA devices such as superio.
|
||||
\begin{verbatim}
|
||||
device pci 1.0 on
|
||||
chip superio/winbond/w83627hf
|
||||
device pnp 2e.0 off # Floppy
|
||||
io 0x60 = 0x3f0
|
||||
irq 0x70 = 6
|
||||
drq 0x74 = 2
|
||||
end
|
||||
device pnp 2e.1 off # Parallel Port
|
||||
io 0x60 = 0x378
|
||||
irq 0x70 = 7
|
||||
end
|
||||
device pnp 2e.2 on # Com1
|
||||
io 0x60 = 0x3f8
|
||||
irq 0x70 = 4
|
||||
end
|
||||
device pnp 2e.3 off # Com2
|
||||
io 0x60 = 0x2f8
|
||||
irq 0x70 = 3
|
||||
end
|
||||
device pnp 2e.5 on # Keyboard
|
||||
io 0x60 = 0x60
|
||||
io 0x62 = 0x64
|
||||
irq 0x70 = 1
|
||||
irq 0x72 = 12
|
||||
end
|
||||
device pnp 2e.6 off # CIR
|
||||
io 0x60 = 0x100
|
||||
end
|
||||
device pnp 2e.7 off # GAME_MIDI_GIPO1
|
||||
io 0x60 = 0x220
|
||||
io 0x62 = 0x300
|
||||
irq 0x70 = 9
|
||||
end
|
||||
device pnp 2e.8 off end # GPIO2
|
||||
device pnp 2e.9 off end # GPIO3
|
||||
device pnp 2e.a off end # ACPI
|
||||
device pnp 2e.b on # HW Monitor
|
||||
io 0x60 = 0x290
|
||||
irq 0x70 = 5
|
||||
end
|
||||
end
|
||||
end
|
||||
\end{verbatim}
|
||||
The pnp refers to the many Plug N Play devices on a superio. 2e refers to the base I/O address of the superio, and the number following the
|
||||
2e (i.e. 2e.1) is the Logical Device Number, or LDN. Each LDN has a common configuration (base, irq, etc.) and these are set by the statements under the LDN.
|
||||
\begin{verbatim}
|
||||
device pci 1.1 on end
|
||||
device pci 1.2 on end
|
||||
\end{verbatim}
|
||||
More devices. These statements set up placeholders in the device tree.
|
||||
\begin{verbatim}
|
||||
device pci 1.3 on
|
||||
chip drivers/i2c/i2cmux # pca9556 smbus mux
|
||||
device i2c 18 on #0 pca9516 1
|
||||
chip drivers/generic/generic #dimm 0-0-0
|
||||
device i2c 50 on end
|
||||
end
|
||||
chip drivers/generic/generic #dimm 0-0-1
|
||||
device i2c 51 on end
|
||||
end
|
||||
chip drivers/generic/generic #dimm 0-1-0
|
||||
device i2c 52 on end
|
||||
end
|
||||
chip drivers/generic/generic #dimm 0-1-1
|
||||
device i2c 53 on end
|
||||
end
|
||||
end
|
||||
device i2c 18 on #1 pca9516 2
|
||||
chip drivers/generic/generic #dimm 1-0-0
|
||||
device i2c 50 on end
|
||||
end
|
||||
chip drivers/generic/generic #dimm 1-0-1
|
||||
device i2c 51 on end
|
||||
end
|
||||
chip drivers/generic/generic #dimm 1-1-0
|
||||
device i2c 52 on end
|
||||
end
|
||||
chip drivers/generic/generic #dimm 1-1-1
|
||||
device i2c 53 on end
|
||||
end
|
||||
chip drivers/generic/generic #dimm 1-2-0
|
||||
device i2c 54 on end
|
||||
end
|
||||
chip drivers/generic/generic #dimm 1-2-1
|
||||
device i2c 55 on end
|
||||
end
|
||||
chip drivers/generic/generic #dimm 1-3-0
|
||||
device i2c 56 on end
|
||||
end
|
||||
chip drivers/generic/generic #dimm 1-3-1
|
||||
device i2c 57 on end
|
||||
end
|
||||
end
|
||||
end
|
||||
end # acpi
|
||||
\end{verbatim}
|
||||
These are the i2c devices.
|
||||
\begin{verbatim}
|
||||
device pci 1.5 off end
|
||||
device pci 1.6 off end
|
||||
\end{verbatim}
|
||||
More placeholders.
|
||||
\begin{verbatim}
|
||||
register "ide0_enable" = "1"
|
||||
register "ide1_enable" = "1"
|
||||
end
|
||||
end # device pci 18.0
|
||||
|
||||
\end{verbatim}
|
||||
These "register" commands set controls in the southbridge.
|
||||
\begin{verbatim}
|
||||
device pci 18.0 on end
|
||||
device pci 18.0 on end
|
||||
\end{verbatim}
|
||||
These are the other two hypertransport links.
|
||||
\begin{verbatim}
|
||||
device pci 18.1 on end
|
||||
device pci 18.2 on end
|
||||
device pci 18.3 on end
|
||||
\end{verbatim}
|
||||
The 18.1 devices are, again, northbridge control for various k8 functions.
|
||||
\begin{verbatim}
|
||||
end
|
||||
\end{verbatim}
|
||||
That's it for the BSP I/O and HT busses. Now we begin the AP busses. Not much here.
|
||||
\begin{verbatim}
|
||||
chip northbridge/amd/amdk8
|
||||
device pci 19.0 on # northbridge
|
||||
chip southbridge/amd/amd8151
|
||||
# the on/off keyword is mandatory
|
||||
device pci 0.0 on end
|
||||
device pci 1.0 on end
|
||||
end
|
||||
end # device pci 19.0
|
||||
|
||||
device pci 19.0 on end
|
||||
device pci 19.0 on end
|
||||
device pci 19.1 on end
|
||||
device pci 19.2 on end
|
||||
device pci 19.3 on end
|
||||
end
|
||||
|
||||
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{cpu socket}
|
||||
The CPU socket is the key link from mainboard to its CPUs. Since many models of CPU can go in a socket, the mainboard mentions only
|
||||
the socket, and the socket, in turn, references the various model CPUs which can be plugged into it. The socket is thus the focus
|
||||
of all defines and Makefile controls for building the CPU components of a board.
|
||||
|
||||
\subsubsection{ cpu/Kconfig}
|
||||
Defines variables. Current variables are:
|
||||
\input{cpukconfig.tex}
|
||||
Sources all Kconfig files in the vendor directories.
|
||||
\subsubsection{ cpu/Makefile.inc}
|
||||
Unconditionally sources all Makefile.inc in the vendor directories.
|
||||
|
||||
\subsection{cpu/$<$vendor$>$/Kconfig}
|
||||
The only action currently taken is to source all Kconfig's in the
|
||||
subdirectories.
|
||||
\subsection{cpu/$<$vendor$>$/Makefile.inc}
|
||||
{\em Conditionally} source the socket directories.
|
||||
Example:
|
||||
\begin{verbatim}
|
||||
subdirs-$(CONFIG_CPU_AMD_SOCKET_F) += socket_F
|
||||
\end{verbatim}
|
||||
.
|
||||
CONFIG\_CPU\_AMD\_SOCKET\_F is set in a mainboard file.
|
||||
|
||||
\subsection{cpu/$<$vendor$>$/$<$socket$>$/Kconfig}
|
||||
Set variables that relate to this {\em socket}, and {\em any models that plug into this socket}. Note that
|
||||
the socket, as much as possible, should control the models, because the models may plug into many sockets.
|
||||
Socket\_F currently sets:
|
||||
\input{socketfkconfig.tex}
|
||||
|
||||
It sources only those Kconfigs that relate to this particular socket, i.e. not all possible models are sourced.
|
||||
|
||||
\subsection{cpu/$<$vendor$>$/$<$model$>$/Kconfig}
|
||||
CPU Model Kconfigs only set variables, We do not expect that they will source any other Kconfig. The socket Kconfig should do that
|
||||
if needed.
|
||||
\subsection{cpu/$<$vendor$>$/$<$model$>$/Makefile.inc}
|
||||
The Makefile.inc {\em unconditionally} specifies drivers and objects to be included in the build. There is no conditional
|
||||
compilation at this point. IF a socket is included, it includes the models. If a model is included, it should include {em all}
|
||||
objects, because it is not possible to determine at build time what options may be needed for a given model CPU.
|
||||
This Makefile.inc includes no other Makefile.inc files; any inclusion should be done in the socket Makefile.inc.
|
||||
|
||||
\subsection{northbridge}
|
||||
\subsubsection{northbridge/Kconfig}
|
||||
No variables. Source all vendor directory Kconfigs.
|
||||
\subsubsection{northbridge/Makefile.inc}
|
||||
No variables. unconditionally include all vendor Makefile.inc
|
||||
\subsubsection{northbridge/$<$vendor$>$/Kconfig}
|
||||
No variables. Source all chip directory Kconfigs.
|
||||
\subsubsection{northbridge/$<$vendor$>$/Makefile.inc}
|
||||
No variables. {\em Conditionally} include all chipset Makefile.inc. The variable
|
||||
is the name of the part, e.g.
|
||||
\begin{verbatim}
|
||||
subdirs-$(CONFIG_NORTHBRIDGE_AMD_AMDK8) += amdk8
|
||||
\end{verbatim}
|
||||
.
|
||||
\subsubsection{northbridge/$<$vendor$>$/$<$chip$>$/Kconfig}
|
||||
Typically a small number of variables. One defines the part name. Here is an example
|
||||
of the variables defined for the K8.
|
||||
\begin{verbatim}
|
||||
config NORTHBRIDGE_AMD_AMDK8
|
||||
bool
|
||||
default n
|
||||
|
||||
config AGP_APERTURE_SIZE
|
||||
hex
|
||||
default 0x4000000
|
||||
\end{verbatim}
|
||||
\subsubsection{northbridge/$<$vendor$>$/$<$chip$>$/Makefile.inc}
|
||||
Typically very small set of rules, and very simple.
|
||||
Since this file is already conditionally included,
|
||||
we don't need to test for the chipset CONFIG variable. We
|
||||
can therefore test other variables (which is part of the reason
|
||||
we set up conditional inclusion of this file, instead
|
||||
of unconditionally including it). Here is an example from AMD K8.
|
||||
Note that we can make a variable conditional on the ACPI tables.
|
||||
\begin{verbatim}
|
||||
driver-y += northbridge.o
|
||||
driver-y += misc_control.o
|
||||
obj-y += get_sblk_pci1234.o
|
||||
obj-$(CONFIG_HAVE_ACPI_TABLES) += amdk8_acpi.o
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{southbridge}
|
||||
\subsubsection{southbridge/Kconfig}
|
||||
No variables. Source all vendor directory Kconfigs.
|
||||
\subsubsection{southbridge/Makefile.inc}
|
||||
No variables. {\em Unconditionally} include all vendor Makefile.inc
|
||||
\subsubsection{southbridge/$<$vendor$>$/Kconfig}
|
||||
No variables. Source all chip directory Kconfigs.
|
||||
\subsubsection{southbridge/$<$vendor$>$/Makefile.inc}
|
||||
No variables. {\em Conditionally} include all chipset Makefile.inc. The variable
|
||||
is the name of the part, e.g.
|
||||
\begin{verbatim}
|
||||
subdirs-$(CONFIG_SOUTHBRIDGE_AMD_AMD8111) += amd8111
|
||||
\end{verbatim}
|
||||
.
|
||||
\subsubsection{southbridge/$<$vendor$>$/$<$chip$>$/Kconfig}
|
||||
Typically a small number of variables. One defines the part name. Here is an example
|
||||
of the variables defined for the K8.
|
||||
\begin{verbatim}
|
||||
config SOUTHBRIDGE_AMD_AMD8111
|
||||
bool
|
||||
default n
|
||||
|
||||
\end{verbatim}
|
||||
\subsubsection{southbridge/$<$vendor$>$/$<$chip$>$/Makefile.inc}
|
||||
Typically very small set of rules, and very simple.
|
||||
Since this file is already conditionally included,
|
||||
we don't need to test for the chipset CONFIG variable. We
|
||||
can therefore test other variables (which is part of the reason
|
||||
we set up conditional inclusion of this file, instead
|
||||
of unconditionally including it). Here is an example from AMD 8111.
|
||||
No conditionals in this one yet.
|
||||
\begin{verbatim}
|
||||
driver-y += amd8111.o
|
||||
driver-y += amd8111_usb.o
|
||||
driver-y += amd8111_lpc.o
|
||||
driver-y += amd8111_ide.o
|
||||
driver-y += amd8111_acpi.o
|
||||
driver-y += amd8111_usb2.o
|
||||
driver-y += amd8111_ac97.o
|
||||
driver-y += amd8111_nic.o
|
||||
driver-y += amd8111_pci.o
|
||||
driver-y += amd8111_smbus.o
|
||||
obj-y += amd8111_reset.o
|
||||
\end{verbatim}
|
||||
|
||||
\subsubsection{vendor and part}
|
||||
\subsection{southbridge}
|
||||
\subsubsection{vendor and part}
|
||||
\subsection{superio}
|
||||
\subsection{drivers/i2c}
|
||||
This is a rather special case. There are no Kconfig files or Makefile.inc files here. They are not needed.
|
||||
To compile in one of these files, name the .o directory. E.g. in serengeti\_cheetah we have:
|
||||
\begin{verbatim}
|
||||
\end{verbatim}
|
||||
|
||||
\subsubsection{vendor and part}
|
||||
|
||||
\end{document}
|
@ -7,7 +7,7 @@ PDFLATEX=pdflatex -t a4
|
||||
|
||||
FIGS=codeflow.pdf hypertransport.pdf
|
||||
|
||||
all: CorebootPortingGuide.pdf Kconfig.pdf
|
||||
all: corebootPortingGuide.pdf
|
||||
|
||||
SVG2PDF=$(shell which svg2pdf)
|
||||
INKSCAPE=$(shell which inkscape)
|
||||
@ -31,40 +31,25 @@ else ifneq ($(strip $(CONVERT)),)
|
||||
convert $< $@
|
||||
endif
|
||||
|
||||
CorebootPortingGuide.toc: $(FIGS) CorebootBuildingGuide.tex
|
||||
corebootPortingGuide.toc: $(FIGS) corebootBuildingGuide.tex
|
||||
# 2 times to make sure we have a current toc.
|
||||
$(PDFLATEX) CorebootBuildingGuide.tex
|
||||
$(PDFLATEX) CorebootBuildingGuide.tex
|
||||
$(PDFLATEX) corebootBuildingGuide.tex
|
||||
$(PDFLATEX) corebootBuildingGuide.tex
|
||||
|
||||
CorebootPortingGuide.pdf: $(FIGS) CorebootBuildingGuide.tex CorebootPortingGuide.toc
|
||||
$(PDFLATEX) CorebootBuildingGuide.tex
|
||||
corebootPortingGuide.pdf: $(FIGS) corebootBuildingGuide.tex corebootPortingGuide.toc
|
||||
$(PDFLATEX) corebootBuildingGuide.tex
|
||||
|
||||
Kconfig.pdf: Kconfig.tex mainboardkconfig.tex cpukconfig.tex socketfkconfig.tex
|
||||
$(PDFLATEX) $<
|
||||
sphinx:
|
||||
$(MAKE) -f Makefile.sphinx html
|
||||
|
||||
# quick, somebody! make me a macro!
|
||||
mainboardkconfig.tex: ../src/mainboard/Kconfig
|
||||
cat beginverbatim.tex > $@
|
||||
grep '^config' $< | awk '{print $2}' >>$@
|
||||
cat endverbatim.tex >> $@
|
||||
clean-sphinx:
|
||||
$(MAKE) -f Makefile.sphinx clean
|
||||
|
||||
skconfig.tex: ../src/mainboard/amd/serengeti_cheetah/Kconfig
|
||||
cat beginverbatim.tex > $@
|
||||
grep '^config' $< | awk '{print $2}' >>$@
|
||||
cat endverbatim.tex >> $@
|
||||
|
||||
cpukconfig.tex: ../src/cpu/Kconfig
|
||||
cat beginverbatim.tex > $@
|
||||
grep '^config' $< | awk '{print $2}' >>$@
|
||||
cat endverbatim.tex >> $@
|
||||
|
||||
socketfkconfig.tex: ../src/cpu/amd/socket_F/Kconfig
|
||||
cat beginverbatim.tex > $@
|
||||
grep '^config' $< | awk '{print $2}' >>$@
|
||||
cat endverbatim.tex >> $@
|
||||
|
||||
clean:
|
||||
rm -f *.aux *.idx *.log *.toc *.out $(FIGS) mainboardkconfig.tex skconfig.tex cpukconfig.tex socketfkconfig.tex
|
||||
clean: clean-sphinx
|
||||
rm -f *.aux *.idx *.log *.toc *.out $(FIGS)
|
||||
|
||||
distclean: clean
|
||||
rm -f CorebootPortingGuide.pdf Kconfig.pdf
|
||||
rm -f corebootPortingGuide.pdf
|
||||
|
||||
livesphinx:
|
||||
$(MAKE) -f Makefile.sphinx livehtml SPHINXOPTS="$(SPHINXOPTS)"
|
||||
|
233
Documentation/Makefile.sphinx
Normal file
@ -0,0 +1,233 @@
|
||||
# Makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = sphinx-build
|
||||
SPHINXAUTOBUILD = sphinx-autobuild
|
||||
PAPER =
|
||||
BUILDDIR = _build
|
||||
|
||||
# Internal variables.
|
||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||
PAPEROPT_letter = -D latex_paper_size=letter
|
||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
# the i18n builder cannot share the environment and doctrees with the others
|
||||
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
|
||||
.PHONY: help
|
||||
help:
|
||||
@echo "Please use \`make <target>' where <target> is one of"
|
||||
@echo " html to make standalone HTML files"
|
||||
@echo " dirhtml to make HTML files named index.html in directories"
|
||||
@echo " singlehtml to make a single large HTML file"
|
||||
@echo " pickle to make pickle files"
|
||||
@echo " json to make JSON files"
|
||||
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||
@echo " qthelp to make HTML files and a qthelp project"
|
||||
@echo " applehelp to make an Apple Help Book"
|
||||
@echo " devhelp to make HTML files and a Devhelp project"
|
||||
@echo " epub to make an epub"
|
||||
@echo " epub3 to make an epub3"
|
||||
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
|
||||
@echo " text to make text files"
|
||||
@echo " man to make manual pages"
|
||||
@echo " texinfo to make Texinfo files"
|
||||
@echo " info to make Texinfo files and run them through makeinfo"
|
||||
@echo " gettext to make PO message catalogs"
|
||||
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||
@echo " xml to make Docutils-native XML files"
|
||||
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
|
||||
@echo " linkcheck to check all external links for integrity"
|
||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||
@echo " coverage to run coverage check of the documentation (if enabled)"
|
||||
@echo " dummy to check syntax errors of document sources"
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -rf $(BUILDDIR)
|
||||
|
||||
.PHONY: html
|
||||
html:
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
|
||||
.PHONY: livehtml
|
||||
livehtml:
|
||||
@echo "Starting sphinx-autobuild. The HTML pages are in $(BUILDDIR)."
|
||||
@echo "Press Ctrl-C to stop."
|
||||
@echo
|
||||
$(SPHINXAUTOBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)
|
||||
|
||||
.PHONY: dirhtml
|
||||
dirhtml:
|
||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||
|
||||
.PHONY: singlehtml
|
||||
singlehtml:
|
||||
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||
|
||||
.PHONY: pickle
|
||||
pickle:
|
||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||
@echo
|
||||
@echo "Build finished; now you can process the pickle files."
|
||||
|
||||
.PHONY: json
|
||||
json:
|
||||
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||
@echo
|
||||
@echo "Build finished; now you can process the JSON files."
|
||||
|
||||
.PHONY: htmlhelp
|
||||
htmlhelp:
|
||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||
|
||||
.PHONY: qthelp
|
||||
qthelp:
|
||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/coreboot.qhcp"
|
||||
@echo "To view the help file:"
|
||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/coreboot.qhc"
|
||||
|
||||
.PHONY: applehelp
|
||||
applehelp:
|
||||
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
|
||||
@echo
|
||||
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
|
||||
@echo "N.B. You won't be able to view it unless you put it in" \
|
||||
"~/Library/Documentation/Help or install it in your application" \
|
||||
"bundle."
|
||||
|
||||
.PHONY: devhelp
|
||||
devhelp:
|
||||
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||
@echo
|
||||
@echo "Build finished."
|
||||
@echo "To view the help file:"
|
||||
@echo "# mkdir -p $$HOME/.local/share/devhelp/coreboot"
|
||||
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/coreboot"
|
||||
@echo "# devhelp"
|
||||
|
||||
.PHONY: epub
|
||||
epub:
|
||||
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||
@echo
|
||||
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||
|
||||
.PHONY: epub3
|
||||
epub3:
|
||||
$(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3
|
||||
@echo
|
||||
@echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3."
|
||||
|
||||
.PHONY: latex
|
||||
latex:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo
|
||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||
"(use \`make latexpdf' here to do that automatically)."
|
||||
|
||||
.PHONY: latexpdf
|
||||
latexpdf:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through pdflatex..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
.PHONY: latexpdfja
|
||||
latexpdfja:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through platex and dvipdfmx..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
.PHONY: text
|
||||
text:
|
||||
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||
@echo
|
||||
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||
|
||||
.PHONY: man
|
||||
man:
|
||||
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||
@echo
|
||||
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||
|
||||
.PHONY: texinfo
|
||||
texinfo:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo
|
||||
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
||||
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||
"(use \`make info' here to do that automatically)."
|
||||
|
||||
.PHONY: info
|
||||
info:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo "Running Texinfo files through makeinfo..."
|
||||
make -C $(BUILDDIR)/texinfo info
|
||||
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
||||
|
||||
.PHONY: gettext
|
||||
gettext:
|
||||
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
||||
@echo
|
||||
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
||||
|
||||
.PHONY: changes
|
||||
changes:
|
||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||
@echo
|
||||
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||
|
||||
.PHONY: linkcheck
|
||||
linkcheck:
|
||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||
@echo
|
||||
@echo "Link check complete; look for any errors in the above output " \
|
||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||
|
||||
.PHONY: doctest
|
||||
doctest:
|
||||
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||
@echo "Testing of doctests in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/doctest/output.txt."
|
||||
|
||||
.PHONY: coverage
|
||||
coverage:
|
||||
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
|
||||
@echo "Testing of coverage in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/coverage/python.txt."
|
||||
|
||||
.PHONY: xml
|
||||
xml:
|
||||
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
|
||||
@echo
|
||||
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
|
||||
|
||||
.PHONY: pseudoxml
|
||||
pseudoxml:
|
||||
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
|
||||
@echo
|
||||
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
|
||||
|
||||
.PHONY: dummy
|
||||
dummy:
|
||||
$(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy
|
||||
@echo
|
||||
@echo "Build finished. Dummy builder generates no files."
|
@ -14,7 +14,7 @@ as southbridges. Multiple chips of same or different type are supported.
|
||||
\section{Goals}
|
||||
The goals of the new chip architecture are these:
|
||||
\begin{itemize}
|
||||
\item seperate implementation details from specification in the Config file
|
||||
\item separate implementation details from specification in the Config file
|
||||
(translation: no more C code in Config files)
|
||||
\item make the specification easier for people to use and understand
|
||||
\item remove private details of a given chip to the chip file as much
|
||||
@ -223,7 +223,7 @@ struct configuration {
|
||||
const char *value;
|
||||
};
|
||||
|
||||
These get filled in by the config tool as before. The linuxbios libary can
|
||||
These get filled in by the config tool as before. The linuxbios library can
|
||||
then provide a generic parsing function for the superios to use.
|
||||
|
||||
The remaining question is how should the superio command look in
|
||||
|
@ -119,8 +119,8 @@ addaction ::= 'addaction' PATH ``ACTION''
|
||||
statement ::=
|
||||
option
|
||||
| default
|
||||
| cpu
|
||||
| arch
|
||||
| cpu
|
||||
| arch
|
||||
| northbridge
|
||||
| southbridge
|
||||
| superio
|
||||
|
19
Documentation/_static/theme_overrides.css
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright 2018 Patrick Rudolph <siro@das-labor.org>
|
||||
*
|
||||
* licensed under CC-by 4.0
|
||||
*/
|
||||
|
||||
/* override table width restrictions */
|
||||
@media screen and (min-width: 767px) {
|
||||
.wy-table-responsive table td {
|
||||
/* !important prevents the common CSS stylesheets from overriding
|
||||
this as on RTD they are loaded after this stylesheet */
|
||||
white-space: normal !important;
|
||||
}
|
||||
|
||||
.wy-table-responsive {
|
||||
overflow: visible !important;
|
||||
}
|
||||
}
|
||||
|
24
Documentation/abi-data-consumption.md
Normal file
@ -0,0 +1,24 @@
|
||||
# ABI data consumption
|
||||
|
||||
This text describes the ABI coreboot presents to downstream users. Such
|
||||
users are payloads and/or operating systems. Therefore, this text serves
|
||||
at what can be relied on for downstream consumption. Anything not explicitly
|
||||
listed as consumable is subject to change without notice.
|
||||
|
||||
## Background and Usage
|
||||
|
||||
coreboot passes information to downstream users using coreboot tables. These
|
||||
table definitions can be found in src/include/boot/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
|
||||
found within these tables is the memory map of the system indicating
|
||||
available and reserved memory.
|
||||
|
||||
In 2009 cbmem was added to coreboot. The "CBMEM high table memory manager"
|
||||
serves a way for coreboot to bookkeep its own internal data. While some
|
||||
of this data may be exposed through the coreboot tables the data structures
|
||||
used to manage the data within the cbmem area is subject to change.
|
||||
|
||||
Provided the above, if one needs a piece of data exposed to the OS
|
||||
or payload it should reside within the coreboot tables. If it isn't there
|
||||
then a code change will be required to add it to the coreboot tables.
|
@ -1,22 +0,0 @@
|
||||
This text describes the ABI coreboot presents to downstream users. Such
|
||||
users are payloads and/or operating systems. Therefore, this text serves
|
||||
at what can be relied on for downstream consumption. Anything not explicitly
|
||||
listed as consumable is subject to change without notice.
|
||||
|
||||
Background and Usage
|
||||
|
||||
coreboot passes information to downstream users using coreboot tables. These
|
||||
table definitions can be found in src/include/boot/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
|
||||
found within these tables is the memory map of the system indicating
|
||||
available and reserved memory.
|
||||
|
||||
In 2009 cbmem was added to coreboot. The "CBMEM high table memory manager"
|
||||
serves a way for coreboot to bookkeep its own internal data. While some
|
||||
of this data may be exposed through the coreboot tables the data structures
|
||||
used to manage the data within the cbmem area is subject to change.
|
||||
|
||||
Provided the above, if one needs a piece of data exposed to the OS
|
||||
or payload it should reside within the coreboot tables. If it isn't there
|
||||
then a code change will be required to add it to the coreboot tables.
|
@ -1,13 +1,13 @@
|
||||
# GPIO toggling in ACPI AML for coreboot #
|
||||
# GPIO toggling in ACPI AML for coreboot
|
||||
|
||||
# Table of contents #
|
||||
## Table of contents
|
||||
- Introduction
|
||||
- Platform Interface
|
||||
- Helper routines
|
||||
- Implementation details
|
||||
- Arguments and Local Variables Management
|
||||
|
||||
# Introduction #
|
||||
## Introduction
|
||||
|
||||
ACPI provides platform-independent interfaces enabling the operating
|
||||
system to perform power management for devices as well as the entire
|
||||
@ -25,7 +25,7 @@ depend upon platform to do the required work. This document presents a
|
||||
simple interface that can be used by any coreboot driver to generate
|
||||
ACPI AML code for reading or toggling platform GPIOs.
|
||||
|
||||
# Platform Interface #
|
||||
## Platform Interface
|
||||
|
||||
All platforms that use drivers requiring ACPI AML code for GPIO
|
||||
interactions need to be implement the following functions:
|
||||
@ -56,7 +56,7 @@ adding them as AML code callbacks for the following reasons:
|
||||
3. Allows GPIO AML methods to be present under any device scope and
|
||||
gives SoC the flexibility to call them without any restrictions.
|
||||
|
||||
# Helper routines #
|
||||
## Helper routines
|
||||
|
||||
In order to relieve drivers of the task of implementing the same code
|
||||
for enabling/disabling Tx GPIOs based on the GPIO polarity, helper
|
||||
@ -73,7 +73,7 @@ calling the platform specific acpigen_soc_{set,clear}_tx_gpio
|
||||
functions internally. Thus, all the ACPI AML calling conventions for
|
||||
the platform functions apply to these helper functions as well.
|
||||
|
||||
# Implementation Details #
|
||||
## Implementation Details
|
||||
|
||||
ACPI library in coreboot will provide weak definitions for all the
|
||||
above functions with error messages indicating that these functions
|
||||
@ -92,6 +92,7 @@ functions to return values. This means that the driver code should not
|
||||
make any assumptions about the values in Local5, Local6 and Local7
|
||||
variables.
|
||||
|
||||
```
|
||||
**Function** **Operation** **Return**
|
||||
acpigen_soc_read_rx_gpio Generate ACPI AML code to Error = -1
|
||||
read value of Rx in Local0. Success = 0
|
||||
@ -101,6 +102,7 @@ variables.
|
||||
set Tx to 1. Success = 0
|
||||
acpigen_soc_clear_tx_gpio Generate ACPI AML code to Error = -1
|
||||
set Tx to 0. Success = 0
|
||||
```
|
||||
|
||||
Ideally, the operation column in the above table should use one or
|
||||
more functions implemented by the platform in AML code library (like
|
||||
@ -157,13 +159,13 @@ for the GPIO.
|
||||
|
||||
|
||||
These are reference implementations and the platforms are free to
|
||||
implement these functions in any way they like. Coreboot driver can
|
||||
implement these functions in any way they like. coreboot driver can
|
||||
then simply call into these functions to generate ACPI AML code to
|
||||
get/set/clear any GPIO. In order to decide whether GPIO operations are
|
||||
required, driver code can rely either on some config option or read
|
||||
device-tree to use any user-provided GPIOs.
|
||||
|
||||
# Arguments and Local Variables Management #
|
||||
## Arguments and Local Variables Management
|
||||
|
||||
Platform-defined functions can call methods using the same calling
|
||||
conventions provided by AML code. However, use of Local Variables is
|
||||
|
11
Documentation/arch/index.md
Normal file
@ -0,0 +1,11 @@
|
||||
# Architecture-specific documentation
|
||||
|
||||
This section contains documentation about coreboot on specific CPU
|
||||
architectures.
|
||||
|
||||
## RISC-V
|
||||
|
||||
- [RISC-V documentation](riscv/index.md)
|
||||
|
||||
## x86
|
||||
- [x86 documentation](x86/index.md)
|
46
Documentation/arch/riscv/index.md
Normal file
@ -0,0 +1,46 @@
|
||||
# RISC-V architecture documentation
|
||||
|
||||
This section contains documentation about coreboot on RISC-V architecture.
|
||||
|
||||
## Mode usage
|
||||
All stages run in M mode.
|
||||
|
||||
Payloads have a choice of managing M mode activity: they can control
|
||||
everything or nothing.
|
||||
|
||||
Payloads run from the romstage (i.e. rampayloads) are started in M mode.
|
||||
The payload must, for example, prepare and install its own SBI.
|
||||
|
||||
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.
|
||||
|
||||
## Stage handoff protocol
|
||||
On entry to a stage or payload,
|
||||
* all harts are running.
|
||||
* A0 is the hart ID.
|
||||
* A1 is the pointer to the Flattened Device Tree (FDT).
|
||||
|
||||
## Additional payload handoff requirements
|
||||
The location of cbmem should be placed in a node in the FDT.
|
||||
|
||||
## Trap delegation
|
||||
Traps are delegated in the ramstage.
|
||||
|
||||
## SMP within a stage
|
||||
At the beginning of each stage, all harts save 0 are spinning in a loop on
|
||||
a semaphore. At the end of the stage harts 1..max are released by changing
|
||||
the semaphore.
|
||||
|
||||
A possible way to do this is to have a pointer to a struct containing
|
||||
variables, e.g.
|
||||
|
||||
```c
|
||||
struct blocker {
|
||||
void (*fn)(); // never returns
|
||||
}
|
||||
```
|
||||
|
||||
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.
|
||||
|
||||
Only hart 0 runs through most of the code in each stage.
|
42
Documentation/arch/x86/index.md
Normal file
@ -0,0 +1,42 @@
|
||||
# x86 architecture documentation
|
||||
|
||||
This section contains documentation about coreboot on x86 architecture.
|
||||
|
||||
## State of x86_64 support
|
||||
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`.
|
||||
|
||||
In order to add support for x86_64 the following assumptions are made:
|
||||
* The CPU supports long mode
|
||||
* All memory returned by malloc must be below 4GiB in physical memory
|
||||
* All code that is to be run must be below 4GiB in physical memory
|
||||
* The high dword of pointers is always zero
|
||||
* The reference implementation is qemu
|
||||
* The CPU supports 1GiB hugepages
|
||||
|
||||
## Assuptions for ARCH_ROMSTAGE_X86_64 reference implementation
|
||||
* 0-4GiB are identity mapped using 1GiB huge-pages
|
||||
* Memory above 4GiB isn't accessible
|
||||
* pagetables reside in _pagetables
|
||||
* Romstage must install new pagetables in CBMEM after RAMINIT
|
||||
|
||||
## Assuptions for ARCH_RAMSTAGE_X86_64 reference implementation
|
||||
* Romstage installed pagetables according to memory layout
|
||||
* Memory above 4GiB is accessible
|
||||
|
||||
## Steps to add basic support for x86_64
|
||||
* Add x86_64 toolchain support - *DONE*
|
||||
* Fix compilation errors - *DONE*
|
||||
* Fix linker errors - *TODO*
|
||||
* Add x86_64 rmodule support - *ONGERRIT*
|
||||
* Add x86_64 exception handlers - *TODO*
|
||||
* Setup page tables for long mode - *TODO*
|
||||
* Add assembly code for long mode - *TODO*
|
||||
* Add assembly code to return to protected mode - *TODO*
|
||||
* Implement reference code for mainboard `emulation/qemu-q35` - *TODO*
|
||||
|
||||
## Porting other boards
|
||||
* Fix compilation errors
|
||||
* Test how well CAR works with x86_64 and paging
|
||||
* Improve mode switches
|
||||
* Test libgfxinit / VGA Option ROMs / FSP
|
@ -19,7 +19,7 @@ scheme. Over time, the scheme evolved slightly, but I think you'll find
|
||||
that it remains true to the original idea. Below is the beginnings of
|
||||
an architecture document - I did it in text form, but if met with
|
||||
aclaim, it should be wikified. This presents what I call CBFS - the
|
||||
next generation LAR for next generation Coreboot. Its easier to
|
||||
next generation LAR for next generation coreboot. Its easier to
|
||||
describe what it is by describing what changed:
|
||||
|
||||
A header has been added somewhere in the bootblock similar to Carl
|
||||
@ -36,7 +36,7 @@ CBFS by type (i.e - bayou can ask for all components that are payloads).
|
||||
The header on each "file" (or component, as I like to style them) has
|
||||
been simplified - We now only store the length, the type, the checksum,
|
||||
and the offset to the data. The name scheme remains the same. The
|
||||
addtional information, which is component specific, has been moved to
|
||||
additional information, which is component specific, has been moved to
|
||||
the component itself (see below).
|
||||
|
||||
The components are arranged in the ROM aligned along the specified
|
||||
@ -73,7 +73,7 @@ bucks, will you?
|
||||
|
||||
Jordan
|
||||
|
||||
Coreboot CBFS Specification
|
||||
coreboot CBFS Specification
|
||||
Jordan Crouse <jordan@cosmicpenguin.net>
|
||||
|
||||
= Introduction =
|
||||
@ -152,7 +152,7 @@ struct cbfs_header {
|
||||
u32 offset;
|
||||
u32 architecture;
|
||||
u32 pad[1];
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
The meaning of each member is as follows:
|
||||
|
||||
@ -163,7 +163,7 @@ number is 0x4F524243, which is 'ORBC' in ASCII.
|
||||
'version' is a version number for CBFS header. cbfs_header structure may be
|
||||
different if version is not matched.
|
||||
|
||||
'romsize' is the size of the ROM in bytes. Coreboot will subtract 'size' from
|
||||
'romsize' is the size of the ROM in bytes. coreboot will subtract 'size' from
|
||||
0xFFFFFFFF to locate the beginning of the ROM in memory.
|
||||
|
||||
'bootblocksize' is the size of bootblock reserved in firmware image.
|
||||
@ -174,7 +174,7 @@ with
|
||||
regards to the erase block sizes on the ROM - allowing one to replace a
|
||||
component at runtime without disturbing the others.
|
||||
|
||||
'offset' is the offset of the the first CBFS component (from the start of
|
||||
'offset' is the offset of the first CBFS component (from the start of
|
||||
the ROM). This is to allow for arbitrary space to be left at the beginning
|
||||
of the ROM for things like embedded controller firmware.
|
||||
|
||||
@ -245,7 +245,7 @@ structure of the header:
|
||||
| ... |
|
||||
\--------/ <- start + 'offset' + 'len'
|
||||
|
||||
== Searching Alogrithm ==
|
||||
== Searching Algorithm ==
|
||||
|
||||
To locate a specific component in the ROM, one starts at the 'offset'
|
||||
specified in the CBFS master header. For this example, the offset will
|
||||
@ -379,12 +379,12 @@ struct cbfs_payload_segment {
|
||||
|
||||
PAYLOAD_SEGMENT_CODE 0x45444F43 The segment contains executable code
|
||||
PAYLOAD_SEGMENT_DATA 0x41544144 The segment contains data
|
||||
PAYLOAD_SEGMENT_BSS 0x20535342 The memory speicfied by the segment
|
||||
PAYLOAD_SEGMENT_BSS 0x20535342 The memory specified by the segment
|
||||
should be zeroed
|
||||
PAYLOAD_SEGMENT_PARAMS 0x41524150 The segment contains information for
|
||||
the payload
|
||||
PAYLOAD_SEGMENT_ENTRY 0x52544E45 The segment contains the entry point
|
||||
for the payload
|
||||
for the payload
|
||||
|
||||
'compression' is the compression scheme for the segment. Each segment can
|
||||
be independently compressed. There are three compression types defined by
|
||||
|
@ -98,10 +98,10 @@
|
||||
<g>
|
||||
<g>
|
||||
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,31.246 130.359,46.62 132.854,44.7
|
||||
132.027,51.206 131.201,57.711 124.701,56.845 118.201,55.98 120.608,54.127 110.178,33.439 "/>
|
||||
132.027,51.206 131.201,57.711 124.701,56.845 118.201,55.98 120.608,54.127 110.178,33.439 "/>
|
||||
</g>
|
||||
<polygon fill="#231F20" points="131.101,57.636 132.228,59.101 133.828,45.178 133.062,44.181 "/>
|
||||
<polygon fill="#231F20" points="131.152,57.643 132.28,59.108 118.41,57.093 117.644,56.096 "/>
|
||||
<polygon fill="#231F20" points="131.101,57.636 132.228,59.101 133.828,45.178 133.062,44.181 "/>
|
||||
<polygon fill="#231F20" points="131.152,57.643 132.28,59.108 118.41,57.093 117.644,56.096 "/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
@ -118,10 +118,10 @@
|
||||
<g>
|
||||
<g>
|
||||
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,81.246 130.359,96.62 132.854,94.7
|
||||
132.027,101.206 131.201,107.711 124.701,106.845 118.201,105.98 120.608,104.127 110.178,83.439 "/>
|
||||
132.027,101.206 131.201,107.711 124.701,106.845 118.201,105.98 120.608,104.127 110.178,83.439 "/>
|
||||
</g>
|
||||
<polygon fill="#231F20" points="131.101,107.636 132.228,109.101 133.828,95.178 133.062,94.181 "/>
|
||||
<polygon fill="#231F20" points="131.152,107.643 132.28,109.108 118.41,107.093 117.644,106.096 "/>
|
||||
<polygon fill="#231F20" points="131.101,107.636 132.228,109.101 133.828,95.178 133.062,94.181 "/>
|
||||
<polygon fill="#231F20" points="131.152,107.643 132.28,109.108 118.41,107.093 117.644,106.096 "/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
@ -138,10 +138,10 @@
|
||||
<g>
|
||||
<g>
|
||||
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,151.586 130.359,166.961 132.854,165.041
|
||||
132.027,171.546 131.201,178.052 124.701,177.186 118.201,176.321 120.608,174.468 110.178,153.78 "/>
|
||||
132.027,171.546 131.201,178.052 124.701,177.186 118.201,176.321 120.608,174.468 110.178,153.78 "/>
|
||||
</g>
|
||||
<polygon fill="#231F20" points="131.101,177.977 132.228,179.442 133.828,165.519 133.062,164.522 "/>
|
||||
<polygon fill="#231F20" points="131.152,177.983 132.28,179.449 118.41,177.434 117.644,176.437 "/>
|
||||
<polygon fill="#231F20" points="131.101,177.977 132.228,179.442 133.828,165.519 133.062,164.522 "/>
|
||||
<polygon fill="#231F20" points="131.152,177.983 132.28,179.449 118.41,177.434 117.644,176.437 "/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
@ -158,10 +158,10 @@
|
||||
<g>
|
||||
<g>
|
||||
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,227.013 130.359,242.387 132.854,240.467
|
||||
132.027,246.973 131.201,253.478 124.701,252.612 118.201,251.747 120.608,249.894 110.178,229.207 "/>
|
||||
132.027,246.973 131.201,253.478 124.701,252.612 118.201,251.747 120.608,249.894 110.178,229.207 "/>
|
||||
</g>
|
||||
<polygon fill="#231F20" points="131.101,253.403 132.228,254.868 133.828,240.945 133.062,239.948 "/>
|
||||
<polygon fill="#231F20" points="131.152,253.41 132.28,254.875 118.41,252.86 117.644,251.863 "/>
|
||||
<polygon fill="#231F20" points="131.101,253.403 132.228,254.868 133.828,240.945 133.062,239.948 "/>
|
||||
<polygon fill="#231F20" points="131.152,253.41 132.28,254.875 118.41,252.86 117.644,251.863 "/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
@ -178,10 +178,10 @@
|
||||
<g>
|
||||
<g>
|
||||
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,303.013 130.359,318.388 132.854,316.468
|
||||
132.027,322.973 131.201,329.479 124.701,328.612 118.201,327.747 120.607,325.895 110.178,305.207 "/>
|
||||
132.027,322.973 131.201,329.479 124.701,328.612 118.201,327.747 120.607,325.895 110.178,305.207 "/>
|
||||
</g>
|
||||
<polygon fill="#231F20" points="131.101,329.404 132.228,330.868 133.829,316.945 133.062,315.948 "/>
|
||||
<polygon fill="#231F20" points="131.152,329.41 132.28,330.876 118.41,328.86 117.643,327.864 "/>
|
||||
<polygon fill="#231F20" points="131.101,329.404 132.228,330.868 133.829,316.945 133.062,315.948 "/>
|
||||
<polygon fill="#231F20" points="131.152,329.41 132.28,330.876 118.41,328.86 117.643,327.864 "/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
@ -198,10 +198,10 @@
|
||||
<g>
|
||||
<g>
|
||||
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,395.872 130.359,411.247 132.854,409.327
|
||||
132.027,415.833 131.201,422.338 124.701,421.473 118.201,420.606 120.608,418.754 110.178,398.066 "/>
|
||||
132.027,415.833 131.201,422.338 124.701,421.473 118.201,420.606 120.608,418.754 110.178,398.066 "/>
|
||||
</g>
|
||||
<polygon fill="#231F20" points="131.101,422.264 132.228,423.728 133.828,409.805 133.062,408.808 "/>
|
||||
<polygon fill="#231F20" points="131.152,422.27 132.28,423.735 118.41,421.72 117.644,420.724 "/>
|
||||
<polygon fill="#231F20" points="131.101,422.264 132.228,423.728 133.828,409.805 133.062,408.808 "/>
|
||||
<polygon fill="#231F20" points="131.152,422.27 132.28,423.735 118.41,421.72 117.644,420.724 "/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
@ -218,10 +218,10 @@
|
||||
<g>
|
||||
<g>
|
||||
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="0.3876" points="113.028,452.152 130.359,467.528 132.854,465.608
|
||||
132.027,472.113 131.201,478.619 124.701,477.753 118.201,476.888 120.607,475.035 110.178,454.347 "/>
|
||||
132.027,472.113 131.201,478.619 124.701,477.753 118.201,476.888 120.607,475.035 110.178,454.347 "/>
|
||||
</g>
|
||||
<polygon fill="#231F20" points="131.101,478.545 132.228,480.009 133.829,466.085 133.062,465.089 "/>
|
||||
<polygon fill="#231F20" points="131.152,478.551 132.28,480.017 118.41,478.001 117.643,477.004 "/>
|
||||
<polygon fill="#231F20" points="131.101,478.545 132.228,480.009 133.829,466.085 133.062,465.089 "/>
|
||||
<polygon fill="#231F20" points="131.152,478.551 132.28,480.017 118.41,478.001 117.643,477.004 "/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
938
Documentation/coding_style.md
Normal file
@ -0,0 +1,938 @@
|
||||
# Coding Style
|
||||
|
||||
This is a short document describing the preferred coding style for the
|
||||
coreboot project. It is in many ways exactly the same as the Linux
|
||||
kernel coding style. In fact, most of this document has been copied from
|
||||
the [Linux kernel coding style](http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/CodingStyle?id=HEAD)
|
||||
|
||||
Please at least consider the points made here.
|
||||
|
||||
First off, I'd suggest printing out a copy of the GNU coding standards,
|
||||
and NOT read it. Burn them, it's a great symbolic gesture.
|
||||
|
||||
Anyway, here goes:
|
||||
|
||||
## Indentation
|
||||
|
||||
Tabs are 8 characters, and thus indentations are also 8 characters.
|
||||
There are heretic movements that try to make indentations 4 (or even 2!)
|
||||
characters deep, and that is akin to trying to define the value of PI to
|
||||
be 3.
|
||||
|
||||
Rationale: The whole idea behind indentation is to clearly define where
|
||||
a block of control starts and ends. Especially when you've been looking
|
||||
at your screen for 20 straight hours, you'll find it a lot easier to
|
||||
see how the indentation works if you have large indentations.
|
||||
|
||||
Now, some people will claim that having 8-character indentations makes
|
||||
the code move too far to the right, and makes it hard to read on a
|
||||
80-character terminal screen. The answer to that is that if you need
|
||||
more than 3 levels of indentation, you're screwed anyway, and should
|
||||
fix your program.
|
||||
|
||||
In short, 8-char indents make things easier to read, and have the added
|
||||
benefit of warning you when you're nesting your functions too deep.
|
||||
Heed that warning.
|
||||
|
||||
The preferred way to ease multiple indentation levels in a switch
|
||||
statement is to align the "switch" and its subordinate "case" labels
|
||||
in the same column instead of "double-indenting" the "case" labels.
|
||||
E.g.:
|
||||
|
||||
```c
|
||||
switch (suffix) {
|
||||
case 'G':
|
||||
case 'g':
|
||||
mem <<= 30;
|
||||
break;
|
||||
case 'M':
|
||||
case 'm':
|
||||
mem <<= 20;
|
||||
break;
|
||||
case 'K':
|
||||
case 'k':
|
||||
mem <<= 10;
|
||||
/* fall through */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
```
|
||||
|
||||
Don't put multiple statements on a single line unless you have
|
||||
something to hide:
|
||||
|
||||
```c
|
||||
if (condition) do_this;
|
||||
do_something_everytime;
|
||||
```
|
||||
|
||||
Don't put multiple assignments on a single line either. Kernel coding
|
||||
style is super simple. Avoid tricky expressions.
|
||||
|
||||
Outside of comments, documentation and except in Kconfig, spaces are
|
||||
never used for indentation, and the above example is deliberately
|
||||
broken.
|
||||
|
||||
Get a decent editor and don't leave whitespace at the end of lines.
|
||||
|
||||
## Breaking long lines and strings
|
||||
|
||||
Coding style is all about readability and maintainability using commonly
|
||||
available tools.
|
||||
|
||||
The limit on the length of lines is 80 columns and this is a strongly
|
||||
preferred limit.
|
||||
|
||||
Statements longer than 80 columns will be broken into sensible chunks,
|
||||
unless exceeding 80 columns significantly increases readability and does
|
||||
not hide information. Descendants are always substantially shorter than
|
||||
the parent and are placed substantially to the right. The same applies
|
||||
to function headers with a long argument list. However, never break
|
||||
user-visible strings such as printk messages, because that breaks the
|
||||
ability to grep for them.
|
||||
|
||||
## Placing Braces and Spaces
|
||||
|
||||
The other issue that always comes up in C styling is the placement of
|
||||
braces. Unlike the indent size, there are few technical reasons to
|
||||
choose one placement strategy over the other, but the preferred way, as
|
||||
shown to us by the prophets Kernighan and Ritchie, is to put the opening
|
||||
brace last on the line, and put the closing brace first, thusly:
|
||||
|
||||
```c
|
||||
if (x is true) {
|
||||
we do y
|
||||
}
|
||||
```
|
||||
|
||||
This applies to all non-function statement blocks (if, switch, for,
|
||||
while, do). E.g.:
|
||||
|
||||
```c
|
||||
switch (action) {
|
||||
case KOBJ_ADD:
|
||||
return "add";
|
||||
case KOBJ_REMOVE:
|
||||
return "remove";
|
||||
case KOBJ_CHANGE:
|
||||
return "change";
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
```
|
||||
|
||||
However, there is one special case, namely functions: they have the
|
||||
opening brace at the beginning of the next line, thus:
|
||||
|
||||
```c
|
||||
int function(int x)
|
||||
{
|
||||
body of function
|
||||
}
|
||||
```
|
||||
|
||||
Heretic people all over the world have claimed that this inconsistency
|
||||
is ... well ... inconsistent, but all right-thinking people know that
|
||||
(a) K&R are _right_ and (b) K&R are right. Besides, functions are
|
||||
special anyway (you can't nest them in C).
|
||||
|
||||
Note that the closing brace is empty on a line of its own, _except_ in
|
||||
the cases where it is followed by a continuation of the same statement,
|
||||
ie a "while" in a do-statement or an "else" in an if-statement, like
|
||||
this:
|
||||
|
||||
```c
|
||||
do {
|
||||
body of do-loop
|
||||
} while (condition);
|
||||
```
|
||||
|
||||
and
|
||||
|
||||
```c
|
||||
if (x == y) {
|
||||
..
|
||||
} else if (x > y) {
|
||||
...
|
||||
} else {
|
||||
....
|
||||
}
|
||||
```
|
||||
|
||||
Rationale: K&R.
|
||||
|
||||
Also, note that this brace-placement also minimizes the number of empty
|
||||
(or almost empty) lines, without any loss of readability. Thus, as the
|
||||
supply of new-lines on your screen is not a renewable resource (think
|
||||
25-line terminal screens here), you have more empty lines to put
|
||||
comments on.
|
||||
|
||||
Do not unnecessarily use braces where a single statement will do.
|
||||
|
||||
```c
|
||||
if (condition)
|
||||
action();
|
||||
```
|
||||
|
||||
and
|
||||
|
||||
```c
|
||||
if (condition)
|
||||
do_this();
|
||||
else
|
||||
do_that();
|
||||
```
|
||||
|
||||
This does not apply if only one branch of a conditional statement is a
|
||||
single statement; in the latter case use braces in both branches:
|
||||
|
||||
```c
|
||||
if (condition) {
|
||||
do_this();
|
||||
do_that();
|
||||
} else {
|
||||
otherwise();
|
||||
}
|
||||
```
|
||||
|
||||
### Spaces
|
||||
|
||||
Linux kernel style for use of spaces depends (mostly) on
|
||||
function-versus-keyword usage. Use a space after (most) keywords. The
|
||||
notable exceptions are sizeof, typeof, alignof, and __attribute__,
|
||||
which look somewhat like functions (and are usually used with
|
||||
parentheses in Linux, although they are not required in the language, as
|
||||
in: "sizeof info" after "struct fileinfo info;" is declared).
|
||||
|
||||
So use a space after these keywords:
|
||||
|
||||
```
|
||||
if, switch, case, for, do, while
|
||||
```
|
||||
|
||||
but not with sizeof, typeof, alignof, or __attribute__. E.g.,
|
||||
|
||||
```c
|
||||
s = sizeof(struct file);
|
||||
```
|
||||
|
||||
Do not add spaces around (inside) parenthesized expressions. This
|
||||
example is
|
||||
|
||||
- bad*:
|
||||
|
||||
```c
|
||||
s = sizeof( struct file );
|
||||
```
|
||||
|
||||
When declaring pointer data or a function that returns a pointer type,
|
||||
the preferred use of '*' is adjacent to the data name or function
|
||||
name and not adjacent to the type name. Examples:
|
||||
|
||||
```c
|
||||
char *linux_banner;
|
||||
unsigned long long memparse(char *ptr, char **retptr);
|
||||
char *match_strdup(substring_t *s);
|
||||
```
|
||||
|
||||
Use one space around (on each side of) most binary and ternary
|
||||
operators, such as any of these:
|
||||
|
||||
```
|
||||
= + - < > * / % | & ^ <= >= == != ? :
|
||||
```
|
||||
|
||||
but no space after unary operators:
|
||||
|
||||
```
|
||||
& * + - ~ ! sizeof typeof alignof __attribute__ defined
|
||||
```
|
||||
|
||||
no space before the postfix increment & decrement unary operators:
|
||||
|
||||
```
|
||||
++ --
|
||||
```
|
||||
|
||||
no space after the prefix increment & decrement unary operators:
|
||||
|
||||
```
|
||||
++ --
|
||||
```
|
||||
|
||||
and no space around the '.' and "->" structure member operators.
|
||||
|
||||
Do not leave trailing whitespace at the ends of lines. Some editors with
|
||||
"smart" indentation will insert whitespace at the beginning of new
|
||||
lines as appropriate, so you can start typing the next line of code
|
||||
right away. However, some such editors do not remove the whitespace if
|
||||
you end up not putting a line of code there, such as if you leave a
|
||||
blank line. As a result, you end up with lines containing trailing
|
||||
whitespace.
|
||||
|
||||
Git will warn you about patches that introduce trailing whitespace, and
|
||||
can optionally strip the trailing whitespace for you; however, if
|
||||
applying a series of patches, this may make later patches in the series
|
||||
fail by changing their context lines.
|
||||
|
||||
### Naming
|
||||
|
||||
C is a Spartan language, and so should your naming be. Unlike Modula-2
|
||||
and Pascal programmers, C programmers do not use cute names like
|
||||
ThisVariableIsATemporaryCounter. A C programmer would call that variable
|
||||
"tmp", which is much easier to write, and not the least more difficult
|
||||
to understand.
|
||||
|
||||
HOWEVER, while mixed-case names are frowned upon, descriptive names for
|
||||
global variables are a must. To call a global function "foo" is a
|
||||
shooting offense.
|
||||
|
||||
GLOBAL variables (to be used only if you _really_ need them) need to
|
||||
have descriptive names, as do global functions. If you have a function
|
||||
that counts the number of active users, you should call that
|
||||
"count_active_users()" or similar, you should _not_ call it
|
||||
"cntusr()".
|
||||
|
||||
Encoding the type of a function into the name (so-called Hungarian
|
||||
notation) is brain damaged - the compiler knows the types anyway and can
|
||||
check those, and it only confuses the programmer. No wonder MicroSoft
|
||||
makes buggy programs.
|
||||
|
||||
LOCAL variable names should be short, and to the point. If you have some
|
||||
random integer loop counter, it should probably be called "i". Calling
|
||||
it "loop_counter" is non-productive, if there is no chance of it
|
||||
being mis-understood. Similarly, "tmp" can be just about any type of
|
||||
variable that is used to hold a temporary value.
|
||||
|
||||
If you are afraid to mix up your local variable names, you have another
|
||||
problem, which is called the function-growth-hormone-imbalance syndrome.
|
||||
See chapter 6 (Functions).
|
||||
|
||||
## Typedefs
|
||||
|
||||
Please don't use things like "vps_t".
|
||||
|
||||
It's a _mistake_ to use typedef for structures and pointers. When you
|
||||
see a
|
||||
|
||||
```c
|
||||
vps_t a;
|
||||
```
|
||||
|
||||
in the source, what does it mean?
|
||||
|
||||
In contrast, if it says
|
||||
|
||||
```c
|
||||
struct virtual_container *a;
|
||||
```
|
||||
|
||||
you can actually tell what "a" is.
|
||||
|
||||
Lots of people think that typedefs "help readability". Not so. They
|
||||
are useful only for:
|
||||
|
||||
(a) totally opaque objects (where the typedef is actively used to
|
||||
_hide_ what the object is).
|
||||
|
||||
Example: "pte_t" etc. opaque objects that you can only access using
|
||||
the proper accessor functions.
|
||||
|
||||
NOTE! Opaqueness and "accessor functions" are not good in themselves.
|
||||
The reason we have them for things like pte_t etc. is that there really
|
||||
is absolutely _zero_ portably accessible information there.
|
||||
|
||||
(b) Clear integer types, where the abstraction _helps_ avoid confusion
|
||||
whether it is "int" or "long".
|
||||
|
||||
u8/u16/u32 are perfectly fine typedefs, although they fit into category
|
||||
(d) better than here.
|
||||
|
||||
NOTE! Again - there needs to be a _reason_ for this. If something is
|
||||
"unsigned long", then there's no reason to do
|
||||
|
||||
```c
|
||||
typedef unsigned long myflags_t;
|
||||
```
|
||||
|
||||
but if there is a clear reason for why it under certain circumstances
|
||||
might be an "unsigned int" and under other configurations might be
|
||||
"unsigned long", then by all means go ahead and use a typedef.
|
||||
|
||||
(c) when you use sparse to literally create a _new_ type for
|
||||
type-checking.
|
||||
|
||||
(d) New types which are identical to standard C99 types, in certain
|
||||
exceptional circumstances.
|
||||
|
||||
Although it would only take a short amount of time for the eyes and
|
||||
brain to become accustomed to the standard types like 'uint32_t',
|
||||
some people object to their use anyway.
|
||||
|
||||
Therefore, the Linux-specific 'u8/u16/u32/u64' types and their signed
|
||||
equivalents which are identical to standard types are permitted --
|
||||
although they are not mandatory in new code of your own.
|
||||
|
||||
When editing existing code which already uses one or the other set of
|
||||
types, you should conform to the existing choices in that code.
|
||||
|
||||
(e) Types safe for use in userspace.
|
||||
|
||||
In certain structures which are visible to userspace, we cannot require
|
||||
C99 types and cannot use the 'u32' form above. Thus, we use __u32
|
||||
and similar types in all structures which are shared with userspace.
|
||||
|
||||
Maybe there are other cases too, but the rule should basically be to
|
||||
NEVER EVER use a typedef unless you can clearly match one of those
|
||||
rules.
|
||||
|
||||
In general, a pointer, or a struct that has elements that can reasonably
|
||||
be directly accessed should _never_ be a typedef.
|
||||
|
||||
## Functions
|
||||
|
||||
Functions should be short and sweet, and do just one thing. They should
|
||||
fit on one or two screenfuls of text (the ISO/ANSI screen size is 80x24,
|
||||
as we all know), and do one thing and do that well.
|
||||
|
||||
The maximum length of a function is inversely proportional to the
|
||||
complexity and indentation level of that function. So, if you have a
|
||||
conceptually simple function that is just one long (but simple)
|
||||
case-statement, where you have to do lots of small things for a lot of
|
||||
different cases, it's OK to have a longer function.
|
||||
|
||||
However, if you have a complex function, and you suspect that a
|
||||
less-than-gifted first-year high-school student might not even
|
||||
understand what the function is all about, you should adhere to the
|
||||
maximum limits all the more closely. Use helper functions with
|
||||
descriptive names (you can ask the compiler to in-line them if you think
|
||||
it's performance-critical, and it will probably do a better job of it
|
||||
than you would have done).
|
||||
|
||||
Another measure of the function is the number of local variables. They
|
||||
shouldn't exceed 5-10, or you're doing something wrong. Re-think the
|
||||
function, and split it into smaller pieces. A human brain can generally
|
||||
easily keep track of about 7 different things, anything more and it gets
|
||||
confused. You know you're brilliant, but maybe you'd like to
|
||||
understand what you did 2 weeks from now.
|
||||
|
||||
In source files, separate functions with one blank line. If the function
|
||||
is exported, the EXPORT* macro for it should follow immediately after
|
||||
the closing function brace line. E.g.:
|
||||
|
||||
```c
|
||||
int system_is_up(void)
|
||||
{
|
||||
return system_state == SYSTEM_RUNNING;
|
||||
}
|
||||
EXPORT_SYMBOL(system_is_up);
|
||||
```
|
||||
|
||||
In function prototypes, include parameter names with their data types.
|
||||
Although this is not required by the C language, it is preferred in
|
||||
Linux because it is a simple way to add valuable information for the
|
||||
reader.
|
||||
|
||||
## Centralized exiting of functions
|
||||
|
||||
Albeit deprecated by some people, the equivalent of the goto statement
|
||||
is used frequently by compilers in form of the unconditional jump
|
||||
instruction.
|
||||
|
||||
The goto statement comes in handy when a function exits from multiple
|
||||
locations and some common work such as cleanup has to be done. If there
|
||||
is no cleanup needed then just return directly.
|
||||
|
||||
The rationale is:
|
||||
|
||||
- unconditional statements are easier to understand and follow
|
||||
- nesting is reduced
|
||||
- errors by not updating individual exit points when making
|
||||
modifications are prevented
|
||||
- saves the compiler work to optimize redundant code away ;)
|
||||
|
||||
```c
|
||||
int fun(int a)
|
||||
{
|
||||
int result = 0;
|
||||
char *buffer = kmalloc(SIZE);
|
||||
|
||||
if (buffer == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
if (condition1) {
|
||||
while (loop1) {
|
||||
...
|
||||
}
|
||||
result = 1;
|
||||
goto out;
|
||||
}
|
||||
...
|
||||
out:
|
||||
kfree(buffer);
|
||||
return result;
|
||||
}
|
||||
```
|
||||
|
||||
## Commenting
|
||||
|
||||
Comments are good, but there is also a danger of over-commenting. NEVER
|
||||
try to explain HOW your code works in a comment: it's much better to
|
||||
write the code so that the _working_ is obvious, and it's a waste of
|
||||
time to explain badly written code.
|
||||
|
||||
Generally, you want your comments to tell WHAT your code does, not HOW.
|
||||
Also, try to avoid putting comments inside a function body: if the
|
||||
function is so complex that you need to separately comment parts of it,
|
||||
you should probably go back to chapter 6 for a while. You can make small
|
||||
comments to note or warn about something particularly clever (or ugly),
|
||||
but try to avoid excess. Instead, put the comments at the head of the
|
||||
function, telling people what it does, and possibly WHY it does it.
|
||||
|
||||
When commenting the kernel API functions, please use the kernel-doc
|
||||
format. See the files Documentation/kernel-doc-nano-HOWTO.txt and
|
||||
scripts/kernel-doc for details.
|
||||
|
||||
coreboot style for comments is the C89 "/* ... */" style. You may
|
||||
use C99-style "// ..." comments.
|
||||
|
||||
The preferred style for *short* (multi-line) comments is:
|
||||
|
||||
```c
|
||||
/* This is the preferred style for short multi-line
|
||||
comments in the Linux kernel source code.
|
||||
Please use it consistently. */
|
||||
```
|
||||
|
||||
The preferred style for *long* (multi-line) comments is:
|
||||
|
||||
```c
|
||||
/*
|
||||
* This is the preferred style for multi-line
|
||||
* comments in the Linux kernel source code.
|
||||
* Please use it consistently.
|
||||
*
|
||||
* Description: A column of asterisks on the left side,
|
||||
* with beginning and ending almost-blank lines.
|
||||
*/
|
||||
```
|
||||
|
||||
It's also important to comment data, whether they are basic types or
|
||||
derived types. To this end, use just one data declaration per line (no
|
||||
commas for multiple data declarations). This leaves you room for a small
|
||||
comment on each item, explaining its use.
|
||||
|
||||
## You've made a mess of it
|
||||
That's OK, we all do. You've probably been told by your long-time Unix user
|
||||
helper that "GNU emacs" automatically formats the C sources for you, and
|
||||
you've noticed that yes, it does do that, but the defaults it uses are less
|
||||
than desirable (in fact, they are worse than random typing - an infinite
|
||||
number of monkeys typing into GNU emacs would never make a good program).
|
||||
|
||||
So, you can either get rid of GNU emacs, or change it to use saner values.
|
||||
To do the latter, you can stick the following in your .emacs file:
|
||||
|
||||
```lisp
|
||||
(defun c-lineup-arglist-tabs-only (ignored)
|
||||
"Line up argument lists by tabs, not spaces"
|
||||
(let* ((anchor (c-langelem-pos c-syntactic-element))
|
||||
(column (c-langelem-2nd-pos c-syntactic-element))
|
||||
(offset (- (1+ column) anchor))
|
||||
(steps (floor offset c-basic-offset)))
|
||||
(* (max steps 1)
|
||||
c-basic-offset)))
|
||||
|
||||
(add-hook 'c-mode-common-hook
|
||||
(lambda ()
|
||||
;; Add kernel style
|
||||
(c-add-style
|
||||
"linux-tabs-only"
|
||||
'("linux" (c-offsets-alist
|
||||
(arglist-cont-nonempty
|
||||
c-lineup-gcc-asm-reg
|
||||
c-lineup-arglist-tabs-only))))))
|
||||
|
||||
(add-hook 'c-mode-hook
|
||||
(lambda ()
|
||||
(let ((filename (buffer-file-name)))
|
||||
;; Enable kernel mode for the appropriate files
|
||||
(when (and filename
|
||||
(string-match (expand-file-name "~/src/linux-trees")
|
||||
filename))
|
||||
(setq indent-tabs-mode t)
|
||||
(c-set-style "linux-tabs-only")))))
|
||||
```
|
||||
|
||||
This will make emacs go better with the kernel coding style for C files
|
||||
below ~/src/linux-trees.
|
||||
|
||||
But even if you fail in getting emacs to do sane formatting, not
|
||||
everything is lost: use "indent".
|
||||
|
||||
Now, again, GNU indent has the same brain-dead settings that GNU emacs
|
||||
has, which is why you need to give it a few command line options.
|
||||
However, that's not too bad, because even the makers of GNU indent
|
||||
recognize the authority of K&R (the GNU people aren't evil, they are
|
||||
just severely misguided in this matter), so you just give indent the
|
||||
options "-kr -i8" (stands for "K&R, 8 character indents"), or use
|
||||
"scripts/Lindent", which indents in the latest style.
|
||||
|
||||
"indent" has a lot of options, and especially when it comes to comment
|
||||
re-formatting you may want to take a look at the man page. But remember:
|
||||
"indent" is not a fix for bad programming.
|
||||
|
||||
## Kconfig configuration files
|
||||
|
||||
For all of the Kconfig* configuration files throughout the source tree,
|
||||
the indentation is somewhat different. Lines under a "config"
|
||||
definition are indented with one tab, while help text is indented an
|
||||
additional two spaces. Example:
|
||||
|
||||
```kconfig
|
||||
config AUDIT
|
||||
bool "Auditing support"
|
||||
depends on NET
|
||||
help
|
||||
Enable auditing infrastructure that can be used with another
|
||||
kernel subsystem, such as SELinux (which requires this for
|
||||
logging of avc messages output). Does not do system-call
|
||||
auditing without CONFIG_AUDITSYSCALL.
|
||||
```
|
||||
|
||||
Seriously dangerous features (such as write support for certain
|
||||
filesystems) should advertise this prominently in their prompt string:
|
||||
|
||||
```kconfig
|
||||
config ADFS_FS_RW
|
||||
bool "ADFS write support (DANGEROUS)"
|
||||
depends on ADFS_FS
|
||||
...
|
||||
```
|
||||
|
||||
For full documentation on the configuration files, see the file
|
||||
Documentation/kbuild/kconfig-language.txt.
|
||||
|
||||
Data structures
|
||||
---------------
|
||||
|
||||
Data structures that have visibility outside the single-threaded
|
||||
environment they are created and destroyed in should always have
|
||||
reference counts. In the kernel, garbage collection doesn't exist (and
|
||||
outside the kernel garbage collection is slow and inefficient), which
|
||||
means that you absolutely _have_ to reference count all your uses.
|
||||
|
||||
Reference counting means that you can avoid locking, and allows multiple
|
||||
users to have access to the data structure in parallel - and not having
|
||||
to worry about the structure suddenly going away from under them just
|
||||
because they slept or did something else for a while.
|
||||
|
||||
Note that locking is _not_ a replacement for reference counting.
|
||||
Locking is used to keep data structures coherent, while reference
|
||||
counting is a memory management technique. Usually both are needed, and
|
||||
they are not to be confused with each other.
|
||||
|
||||
Many data structures can indeed have two levels of reference counting,
|
||||
when there are users of different "classes". The subclass count counts
|
||||
the number of subclass users, and decrements the global count just once
|
||||
when the subclass count goes to zero.
|
||||
|
||||
Examples of this kind of "multi-level-reference-counting" can be found
|
||||
in memory management ("struct mm_struct": mm_users and mm_count),
|
||||
and in filesystem code ("struct super_block": s_count and
|
||||
s_active).
|
||||
|
||||
Remember: if another thread can find your data structure, and you don't
|
||||
have a reference count on it, you almost certainly have a bug.
|
||||
|
||||
Macros, Enums and RTL
|
||||
---------------------
|
||||
|
||||
Names of macros defining constants and labels in enums are capitalized.
|
||||
|
||||
```c
|
||||
#define CONSTANT 0x12345
|
||||
```
|
||||
|
||||
Enums are preferred when defining several related constants.
|
||||
|
||||
CAPITALIZED macro names are appreciated but macros resembling functions
|
||||
may be named in lower case.
|
||||
|
||||
Generally, inline functions are preferable to macros resembling
|
||||
functions.
|
||||
|
||||
Macros with multiple statements should be enclosed in a do - while
|
||||
block:
|
||||
|
||||
```c
|
||||
#define macrofun(a, b, c) \
|
||||
do { \
|
||||
if (a == 5) \
|
||||
do_this(b, c); \
|
||||
} while (0)
|
||||
```
|
||||
|
||||
Things to avoid when using macros:
|
||||
|
||||
1) macros that affect control flow:
|
||||
|
||||
```c
|
||||
#define FOO(x) \
|
||||
do { \
|
||||
if (blah(x) < 0) \
|
||||
return -EBUGGERED; \
|
||||
} while(0)
|
||||
```
|
||||
|
||||
is a *very* bad idea. It looks like a function call but exits the
|
||||
"calling" function; don't break the internal parsers of those who
|
||||
will read the code.
|
||||
|
||||
2) macros that depend on having a local variable with a magic name:
|
||||
|
||||
```c
|
||||
#define FOO(val) bar(index, val)
|
||||
```
|
||||
|
||||
might look like a good thing, but it's confusing as hell when one reads
|
||||
the code and it's prone to breakage from seemingly innocent changes.
|
||||
|
||||
3) macros with arguments that are used as l-values: FOO(x) = y; will
|
||||
bite you if somebody e.g. turns FOO into an inline function.
|
||||
|
||||
4) forgetting about precedence: macros defining constants using
|
||||
expressions must enclose the expression in parentheses. Beware of
|
||||
similar issues with macros using parameters.
|
||||
|
||||
```c
|
||||
#define CONSTANT 0x4000
|
||||
#define CONSTEXP (CONSTANT | 3)
|
||||
```
|
||||
|
||||
The cpp manual deals with macros exhaustively. The gcc internals manual
|
||||
also covers RTL which is used frequently with assembly language in the
|
||||
kernel.
|
||||
|
||||
Printing kernel messages
|
||||
------------------------
|
||||
|
||||
Kernel developers like to be seen as literate. Do mind the spelling of
|
||||
kernel messages to make a good impression. Do not use crippled words
|
||||
like "dont"; use "do not" or "don't" instead. Make the messages
|
||||
concise, clear, and unambiguous.
|
||||
|
||||
Kernel messages do not have to be terminated with a period.
|
||||
|
||||
Printing numbers in parentheses (%d) adds no value and should be
|
||||
avoided.
|
||||
|
||||
There are a number of driver model diagnostic macros in
|
||||
<linux/device.h> which you should use to make sure messages are
|
||||
matched to the right device and driver, and are tagged with the right
|
||||
level: dev_err(), dev_warn(), dev_info(), and so forth. For messages
|
||||
that aren't associated with a particular device, <linux/printk.h>
|
||||
defines pr_debug() and pr_info().
|
||||
|
||||
Coming up with good debugging messages can be quite a challenge; and
|
||||
once you have them, they can be a huge help for remote troubleshooting.
|
||||
Such messages should be compiled out when the DEBUG symbol is not
|
||||
defined (that is, by default they are not included). When you use
|
||||
dev_dbg() or pr_debug(), that's automatic. Many subsystems have
|
||||
Kconfig options to turn on -DDEBUG. A related convention uses
|
||||
VERBOSE_DEBUG to add dev_vdbg() messages to the ones already enabled
|
||||
by DEBUG.
|
||||
|
||||
Allocating memory
|
||||
-----------------
|
||||
|
||||
coreboot provides a single general purpose memory allocator: malloc()
|
||||
|
||||
The preferred form for passing a size of a struct is the following:
|
||||
|
||||
```c
|
||||
p = malloc(sizeof(*p));
|
||||
```
|
||||
|
||||
The alternative form where struct name is spelled out hurts readability
|
||||
and introduces an opportunity for a bug when the pointer variable type
|
||||
is changed but the corresponding sizeof that is passed to a memory
|
||||
allocator is not.
|
||||
|
||||
Casting the return value which is a void pointer is redundant. The
|
||||
conversion from void pointer to any other pointer type is guaranteed by
|
||||
the C programming language.
|
||||
|
||||
You should contain your memory usage to stack variables whenever
|
||||
possible. Only use malloc() as a last resort. In ramstage, you may also
|
||||
be able to get away with using static variables. Never use malloc()
|
||||
outside of ramstage.
|
||||
|
||||
Since coreboot only runs for a very short time, there is no memory
|
||||
deallocator, although a corresponding free() is offered. It is a no-op.
|
||||
Use of free() is not required though it is accepted. It is useful when
|
||||
sharing code with other codebases that make use of free().
|
||||
|
||||
The inline disease
|
||||
------------------
|
||||
|
||||
There appears to be a common misperception that gcc has a magic "make
|
||||
me faster" speedup option called "inline". While the use of inlines
|
||||
can be appropriate (for example as a means of replacing macros, see
|
||||
Chapter 12), it very often is not. Abundant use of the inline keyword
|
||||
leads to a much bigger kernel, which in turn slows the system as a whole
|
||||
down, due to a bigger icache footprint for the CPU and simply because
|
||||
there is less memory available for the pagecache. Just think about it; a
|
||||
pagecache miss causes a disk seek, which easily takes 5 milliseconds.
|
||||
There are a LOT of cpu cycles that can go into these 5 milliseconds.
|
||||
|
||||
A reasonable rule of thumb is to not put inline at functions that have
|
||||
more than 3 lines of code in them. An exception to this rule are the
|
||||
cases where a parameter is known to be a compiletime constant, and as a
|
||||
result of this constantness you *know* the compiler will be able to
|
||||
optimize most of your function away at compile time. For a good example
|
||||
of this later case, see the kmalloc() inline function.
|
||||
|
||||
Often people argue that adding inline to functions that are static and
|
||||
used only once is always a win since there is no space tradeoff. While
|
||||
this is technically correct, gcc is capable of inlining these
|
||||
automatically without help, and the maintenance issue of removing the
|
||||
inline when a second user appears outweighs the potential value of the
|
||||
hint that tells gcc to do something it would have done anyway.
|
||||
|
||||
Function return values and names
|
||||
--------------------------------
|
||||
|
||||
Functions can return values of many different kinds, and one of the most
|
||||
common is a value indicating whether the function succeeded or failed.
|
||||
Such a value can be represented as an error-code integer (-Exxx =
|
||||
failure, 0 = success) or a "succeeded" boolean (0 = failure, non-zero
|
||||
= success).
|
||||
|
||||
Mixing up these two sorts of representations is a fertile source of
|
||||
difficult-to-find bugs. If the C language included a strong distinction
|
||||
between integers and booleans then the compiler would find these
|
||||
mistakes for us... but it doesn't. To help prevent such bugs, always
|
||||
follow this convention:
|
||||
|
||||
If the name of a function is an action or an imperative command,
|
||||
the function should return an error-code integer. If the name
|
||||
is a predicate, the function should return a "succeeded" boolean.
|
||||
|
||||
For example, "add work" is a command, and the add_work() function
|
||||
returns 0 for success or -EBUSY for failure. In the same way, "PCI
|
||||
device present" is a predicate, and the pci_dev_present() function
|
||||
returns 1 if it succeeds in finding a matching device or 0 if it
|
||||
doesn't.
|
||||
|
||||
All EXPORTed functions must respect this convention, and so should all
|
||||
public functions. Private (static) functions need not, but it is
|
||||
recommended that they do.
|
||||
|
||||
Functions whose return value is the actual result of a computation,
|
||||
rather than an indication of whether the computation succeeded, are not
|
||||
subject to this rule. Generally they indicate failure by returning some
|
||||
out-of-range result. Typical examples would be functions that return
|
||||
pointers; they use NULL or the ERR_PTR mechanism to report failure.
|
||||
|
||||
Don't re-invent the kernel macros
|
||||
----------------------------------
|
||||
|
||||
The header file include/linux/kernel.h contains a number of macros that
|
||||
you should use, rather than explicitly coding some variant of them
|
||||
yourself. For example, if you need to calculate the length of an array,
|
||||
take advantage of the macro
|
||||
|
||||
```c
|
||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
||||
```
|
||||
|
||||
There are also min() and max() macros that do strict type checking if
|
||||
you need them. Feel free to peruse that header file to see what else is
|
||||
already defined that you shouldn't reproduce in your code.
|
||||
|
||||
Editor modelines and other cruft
|
||||
--------------------------------
|
||||
|
||||
Some editors can interpret configuration information embedded in source
|
||||
files, indicated with special markers. For example, emacs interprets
|
||||
lines marked like this:
|
||||
|
||||
```
|
||||
-*- mode: c -*-
|
||||
```
|
||||
|
||||
Or like this:
|
||||
|
||||
```
|
||||
/*
|
||||
Local Variables:
|
||||
compile-command: "gcc -DMAGIC_DEBUG_FLAG foo.c"
|
||||
End:
|
||||
*/
|
||||
```
|
||||
|
||||
Vim interprets markers that look like this:
|
||||
|
||||
```
|
||||
/* vim:set sw=8 noet */
|
||||
```
|
||||
|
||||
Do not include any of these in source files. People have their own
|
||||
personal editor configurations, and your source files should not
|
||||
override them. This includes markers for indentation and mode
|
||||
configuration. People may use their own custom mode, or may have some
|
||||
other magic method for making indentation work correctly.
|
||||
|
||||
Inline assembly
|
||||
---------------
|
||||
|
||||
In architecture-specific code, you may need to use inline assembly to
|
||||
interface with CPU or platform functionality. Don't hesitate to do so
|
||||
when necessary. However, don't use inline assembly gratuitously when C
|
||||
can do the job. You can and should poke hardware from C when possible.
|
||||
|
||||
Consider writing simple helper functions that wrap common bits of inline
|
||||
assembly, rather than repeatedly writing them with slight variations.
|
||||
Remember that inline assembly can use C parameters.
|
||||
|
||||
Large, non-trivial assembly functions should go in .S files, with
|
||||
corresponding C prototypes defined in C header files. The C prototypes
|
||||
for assembly functions should use "asmlinkage".
|
||||
|
||||
You may need to mark your asm statement as volatile, to prevent GCC from
|
||||
removing it if GCC doesn't notice any side effects. You don't always
|
||||
need to do so, though, and doing so unnecessarily can limit
|
||||
optimization.
|
||||
|
||||
When writing a single inline assembly statement containing multiple
|
||||
instructions, put each instruction on a separate line in a separate
|
||||
quoted string, and end each string except the last with nt to
|
||||
properly indent the next instruction in the assembly output:
|
||||
|
||||
```c
|
||||
asm ("magic %reg1, #42nt"
|
||||
"more_magic %reg2, %reg3"
|
||||
: /* outputs */ : /* inputs */ : /* clobbers */);
|
||||
```
|
||||
|
||||
References
|
||||
----------
|
||||
|
||||
The C Programming Language, Second Edition by Brian W. Kernighan and
|
||||
Dennis M. Ritchie. Prentice Hall, Inc., 1988. ISBN 0-13-110362-8
|
||||
(paperback), 0-13-110370-9 (hardback). URL:
|
||||
<http://cm.bell-labs.com/cm/cs/cbook/>
|
||||
|
||||
The Practice of Programming by Brian W. Kernighan and Rob Pike.
|
||||
Addison-Wesley, Inc., 1999. ISBN 0-201-61586-X. URL:
|
||||
<http://cm.bell-labs.com/cm/cs/tpop/>
|
||||
|
||||
GNU manuals - where in compliance with K&R and this text - for cpp, gcc,
|
||||
gcc internals and indent, all available from
|
||||
<http://www.gnu.org/manual/>
|
||||
|
||||
WG14 is the international standardization working group for the
|
||||
programming language C, URL: <http://www.open-std.org/JTC1/SC22/WG14/>
|
||||
|
||||
Kernel CodingStyle, by greg@kroah.com at OLS 2002:
|
||||
<http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/>
|
112
Documentation/community/code_of_conduct.md
Normal file
@ -0,0 +1,112 @@
|
||||
# Code of Conduct
|
||||
|
||||
This code of conduct outlines our rules and expectations for everybody
|
||||
participating in the coreboot community.
|
||||
|
||||
## coreboot community etiquette
|
||||
|
||||
We have a friendly and productive atmosphere on our mailing lists,
|
||||
development / code review tools, IRC chat rooms and when we meet in
|
||||
person. Our principles evolve around the following:
|
||||
|
||||
* It's not the user's fault if something goes wrong.
|
||||
* Attempt collaboration before conflict.
|
||||
* People who intentionally insult others (users, developers, corporations,
|
||||
other projects, or the coreboot project itself) will be dealt with. See
|
||||
policy below.
|
||||
* We are dealing with hardware with lots of undocumented pitfalls. It is quite
|
||||
possible that you did everything right, but coreboot or its tools still
|
||||
won't work for you.
|
||||
|
||||
Refrain from insulting anyone or the group they belong to. Remember that
|
||||
people might be sensitive to other things than you are.
|
||||
|
||||
Most of our community members are not native English speakers, thus
|
||||
misunderstandings can (and do) happen. Always assume that others are
|
||||
friendly and may have picked less-than-stellar wording by accident.
|
||||
|
||||
If you have a grievance due to conduct in this community, we want to hear
|
||||
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.
|
||||
|
||||
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
|
||||
(and who won't) read your message.
|
||||
|
||||
However since people might be on travel or otherwise be unavailable at
|
||||
times, consider reaching out to multiple persons.
|
||||
|
||||
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
|
||||
country of residence of each team member.
|
||||
|
||||
## Unacceptable Behavior
|
||||
|
||||
Unacceptable behaviors include: intimidating, harassing, abusive,
|
||||
discriminatory, derogatory or demeaning speech or actions by any
|
||||
participant in our community online, at all related events and in
|
||||
one-on-one communications carried out in the context of community
|
||||
business. Community event venues may be shared with members of the public;
|
||||
please be respectful to all patrons of these locations.
|
||||
|
||||
Examples of behaviors we do not accept in our community:
|
||||
|
||||
* harmful or prejudicial verbal or written comments related to gender,
|
||||
sexual orientation, race, religion, disability;
|
||||
* inappropriate physical contact, and unwelcome sexual advances;
|
||||
* deliberate intimidation, stalking or following;
|
||||
* harassing photography or recording;
|
||||
* sustained disruption of talks or other events.
|
||||
|
||||
Using this code of conduct aggressively against other people in the
|
||||
community might also be harassment. Be considerate when enforcing the code
|
||||
of conduct and always try to listen to both sides before passing judgment.
|
||||
|
||||
## Consequences of Unacceptable Behavior
|
||||
|
||||
Unacceptable behavior from any community member, including sponsors and
|
||||
those with decision-making authority, will not be tolerated.
|
||||
|
||||
Anyone asked to stop unacceptable behavior is expected to comply
|
||||
immediately.
|
||||
|
||||
If a community member engages in unacceptable behavior, the community
|
||||
organizers may take any action they deem appropriate, up to and including
|
||||
a temporary ban or permanent expulsion from the community without warning
|
||||
(and without refund in the case of a paid event). Community organizers
|
||||
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.
|
||||
|
||||
|
||||
## Addressing Grievances
|
||||
|
||||
If you feel you have been falsely or unfairly accused of violating this
|
||||
Code of Conduct, you should notify the arbitration team with a concise
|
||||
description of your grievance.
|
||||
|
||||
## Scope
|
||||
|
||||
We expect all community participants (contributors, paid or otherwise;
|
||||
sponsors; and other guests) to abide by this Code of Conduct in all
|
||||
community venues, online and in-person, as well as in all one-on-one
|
||||
communications pertaining to community business.
|
||||
|
||||
## Contact info
|
||||
|
||||
Our arbitration team consists of the following people
|
||||
* Stefan Reinauer <stefan.reinauer@coreboot.org> (USA)
|
||||
* Patrick Georgi <patrick@coreboot.org> (Germany)
|
||||
* Ronald Minnich <rminnich@coreboot.org> (USA)
|
||||
* Marc Jones <mjones@coreboot.org> (USA)
|
||||
|
||||
## License and attribution
|
||||
|
||||
This Code of Conduct is distributed under
|
||||
a [Creative Commons Attribution-ShareAlike
|
||||
license](http://creativecommons.org/licenses/by-sa/3.0/). It is based
|
||||
on the [Citizen Code of Conduct](http://citizencodeofconduct.org/)
|
70
Documentation/community/conferences.md
Normal file
@ -0,0 +1,70 @@
|
||||
# Conferences
|
||||
The coreboot community is present at a number of conferences over the year,
|
||||
usually at [FOSDEM](https://fosdem.org), [OSFC](https://osfc.io), and the
|
||||
[Chaos Communication Congress](https://events.ccc.de/congress/).
|
||||
|
||||
The kind of presence differs, but there's usually a booth or other kind of
|
||||
gathering where everybody is welcome to say hello and to learn more about
|
||||
coreboot.
|
||||
|
||||
Depending on the nature of the conference, coreboot developers might bring
|
||||
their development kit with them and conduct development sessions.
|
||||
|
||||
## Talks
|
||||
|
||||
[Open Source Firmware at Facebook](https://fosdem.org/2019/schedule/event/open_source_firmware_at_facebook/) by [David Hendricks](https://github.com/dhendrix) and [Andrea Barberio](https://github.com/insomniacslk) at [FOSDEM 2019](https://fosdem.org/2019/) ([video](https://video.fosdem.org/2019/K.4.401/open_source_firmware_at_facebook.mp4)) ([slides](https://insomniac.slackware.it/static/2019_fosdem_linuxboot_at_facebook.pdf)) (2019-02-03)
|
||||
|
||||
[Open Source Firmware - A love story](https://www.youtube.com/watch?v=xfqKm190dbU) by [Philipp Deppenwiese](https://cybersecurity.9elements.com) at [35c3](https://events.ccc.de/congress/2018)
|
||||
([slides](https://cdn.media.ccc.de/congress/2018/slides-h264-hd/35c3-9778-deu-eng-Open_Source_Firmware_hd-slides.mp4)) (2018-12-27)
|
||||
|
||||
[coreboot mainboard porting with Intel FSP 2.0](https://www.youtube.com/watch?v=qUgo-AVsSCI) by Subrata Banik at OSFC 2018
|
||||
|
||||
[A tale of reusability in coreboot](https://www.youtube.com/watch?v=p2bnEYKBDpI) by Furquan Shaikh at OSFC 2018
|
||||
|
||||
[How to enable AMD IOMMU in coreboot](https://www.youtube.com/watch?v=5JoEuh9qXx0) by Piotr Król at OSFC 2018
|
||||
|
||||
[ARM Trusted Firmware for coreboot developers](https://www.youtube.com/watch?v=UC35q4OJg3k) by Julius Werner at OSFC 2018
|
||||
|
||||
[Google Secure Microcontroller and Case Closed Debugging](https://www.youtube.com/watch?v=gC-lbMNmIsg) by Vadim Bendebury at OSFC 2018
|
||||
|
||||
[coreboot rompayload](https://www.youtube.com/watch?v=ukSh1n7wjSA) by Ron Minnich at OSFC 2018
|
||||
|
||||
[Run upstream coreboot on an ARM Chromebook](https://www.youtube.com/watch?v=N7_9okzPeHo) by Paul Menzel at ECC 2017
|
||||
|
||||
[DDR3 memory initialization basics on Intel Sandybrige platforms](https://www.youtube.com/watch?v=h-Lkkg03Erk) by Patrick Rudolph at ECC 2017
|
||||
|
||||
[Let's move SMM out of firmware and into the kernel](https://www.youtube.com/watch?v=6GEaw4msq6g) by Ron Minnich at ECC 2017
|
||||
|
||||
[SINUMERIK – step ahead with coreboot](https://www.youtube.com/watch?v=tq4xSipCWEU) by Werner Zeh at ECC 2017
|
||||
|
||||
[Booting UEFI-aware OS on coreboot enabled platform](https://www.youtube.com/watch?v=nt0BkqVUu3w) by Piotr Król and Kamil Wcisło at ECC 2017
|
||||
|
||||
[Reverse engineering MT8173 PCM firmwares and ISA for a fully free bootchain](https://www.youtube.com/watch?v=9rKxfo7Gkqo) by Paul Kocialkowski at ECC 2017
|
||||
|
||||
[A Tale of six motherboards, two BSDs and coreboot](https://www.youtube.com/watch?v=jlCGzML6zF8) by Piotr Kubaj at ECC 2017
|
||||
|
||||
[Enabling TPM 2.0 on coreboot based devices](https://www.youtube.com/watch?v=Yjb9n5p3giI) by Piotr Król and Kamil Wcisło at ECC 2017
|
||||
|
||||
[Porting coreboot to the HP ProLiant MicroServer Gen8](https://www.youtube.com/watch?v=BcmUSW2J53k) by Alexander Couzens and Felix Held at ECC 2017
|
||||
|
||||
[Implementing coreboot in a ground breaking secure system: ORWL](https://www.youtube.com/watch?v=D4oQjcP6AVI) by Wim Vervoorn and Gerard Duynisveld at ECC 2017
|
||||
|
||||
[Buying trustworthy hardware for federal agencies: How open source firmware saves the day](https://www.youtube.com/watch?v=DG_wfaw4zl0) by Carl-Daniel Hailfinger at ECC 2017
|
||||
|
||||
[Verified Boot: Surviving in the Internet of Insecure Things: Randall Spangler](https://www.youtube.com/watch?v=4EvTcfcYfMY) by Randall Spangler at coreboot conference 2016
|
||||
|
||||
[coreboot on RISC-V](https://www.youtube.com/watch?v=CDNIWuf1jAk) by Ron Minnich at coreboot conference 2016
|
||||
|
||||
[An Open Source Embedded Controller](https://www.youtube.com/watch?v=hQb8waUBVSQ) by Bill Richardson at coreboot conference 2016
|
||||
|
||||
[KB9012 EC Firmware Reverse Engineering](https://www.youtube.com/watch?v=B708jdCiW7o) by Paul Kocialkowski at coreboot conference 2016
|
||||
|
||||
[coreboot on ARM](https://www.youtube.com/watch?v=z-KpAA4_afs) by Julius Werner at coreboot conference 2016
|
||||
|
||||
[Intel FSP 2.0 overview](https://www.youtube.com/watch?v=uzfiTiP9dEM) by Giri Mudusuru and Vincent Zimmer at coreboot conference 2016
|
||||
|
||||
[coreboot Internals](https://www.youtube.com/watch?v=7YUXr1MH9d4) by Aaron Durbin at coreboot conference 2016
|
||||
|
||||
[Skylake FSP to coreboot integration overview](https://www.youtube.com/watch?v=SpL8LbquSVs) by Robbie Zhang at coreboot conference 2016
|
||||
|
||||
[S3 implementation on Braswell](https://www.youtube.com/watch?v=GfwTijFnFl0) by Hannah Williams at coreboot conference 2016
|
18
Documentation/community/forums.md
Normal file
@ -0,0 +1,18 @@
|
||||
# Our forums
|
||||
|
||||
The coreboot community has various venues to help each other and discuss the
|
||||
direction of our project.
|
||||
|
||||
## Mailing list
|
||||
|
||||
The first address for coreboot related discussion is our mailing list.
|
||||
You can subscribe on its
|
||||
[information page](https://mail.coreboot.org/postorius/lists/coreboot.coreboot.org/) and
|
||||
read its
|
||||
[archives](https://mail.coreboot.org/hyperkitty/list/coreboot@coreboot.org/).
|
||||
|
||||
## IRC
|
||||
|
||||
We also have a
|
||||
[real time chat](https://webchat.freenode.net?channels=%23coreboot)
|
||||
on the Freenode IRC network's #coreboot channel.
|
196
Documentation/conf.py
Normal file
@ -0,0 +1,196 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import subprocess
|
||||
from recommonmark.parser import CommonMarkParser
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix(es) of source filenames.
|
||||
source_suffix = ['.md']
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'coreboot'
|
||||
copyright = u'CC-by 4.0 the coreboot project'
|
||||
author = u'the coreboot project'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = subprocess.check_output(('git', 'describe')).decode("utf-8")
|
||||
# The short X.Y version.
|
||||
version = release.split("-")[0]
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#
|
||||
# This is also used if you do content translation via gettext catalogs.
|
||||
# Usually you set "language" from the command line for these cases.
|
||||
language = None
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
# This patterns also effect to html_static_path and html_extra_path
|
||||
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
# modindex_common_prefix = []
|
||||
|
||||
# If true, keep warnings as "system message" paragraphs in the built documents.
|
||||
# keep_warnings = False
|
||||
|
||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
||||
todo_include_todos = False
|
||||
|
||||
|
||||
# -- Options for HTML output ----------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
#
|
||||
html_theme = 'sphinx_rtd_theme'
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = ['_static']
|
||||
|
||||
html_context = {
|
||||
'css_files': [
|
||||
'_static/theme_overrides.css', # override wide tables in RTD theme
|
||||
],
|
||||
}
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'corebootdoc'
|
||||
|
||||
# -- Options for LaTeX output ---------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#
|
||||
# 'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#
|
||||
# 'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#
|
||||
# 'preamble': '',
|
||||
|
||||
# Latex figure (float) alignment
|
||||
#
|
||||
# 'figure_align': 'htbp',
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
(master_doc, 'coreboot.tex', u'coreboot Documentation',
|
||||
u'the coreboot project', 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
# the title page.
|
||||
#
|
||||
# latex_logo = None
|
||||
|
||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||
# not chapters.
|
||||
#
|
||||
# latex_use_parts = False
|
||||
|
||||
# If true, show page references after internal links.
|
||||
#
|
||||
# latex_show_pagerefs = False
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#
|
||||
# latex_show_urls = False
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#
|
||||
# latex_appendices = []
|
||||
|
||||
# If false, will not define \strong, \code, itleref, \crossref ... but only
|
||||
# \sphinxstrong, ..., \sphinxtitleref, ... To help avoid clash with user added
|
||||
# packages.
|
||||
#
|
||||
# latex_keep_old_macro_names = True
|
||||
|
||||
# If false, no module index is generated.
|
||||
#
|
||||
# latex_domain_indices = True
|
||||
|
||||
|
||||
# -- Options for manual page output ---------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
(master_doc, 'coreboot', u'coreboot Documentation',
|
||||
[author], 1)
|
||||
]
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#
|
||||
# man_show_urls = False
|
||||
|
||||
|
||||
# -- Options for Texinfo output -------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(master_doc, 'coreboot', u'coreboot Documentation',
|
||||
author, 'coreboot', 'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
enable_auto_toc_tree = True
|
||||
|
||||
class MyCommonMarkParser(CommonMarkParser):
|
||||
# remove this hack once upsteam RecommonMark supports inline code
|
||||
def visit_code(self, mdnode):
|
||||
from docutils import nodes
|
||||
n = nodes.literal(mdnode.literal, mdnode.literal)
|
||||
self.current_node.append(n)
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#
|
||||
# texinfo_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#
|
||||
# texinfo_domain_indices = True
|
||||
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||
#
|
||||
# texinfo_show_urls = 'footnote'
|
||||
|
||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||
#
|
||||
# texinfo_no_detailmenu = False
|
||||
|
||||
|
||||
def setup(app):
|
||||
from recommonmark.transform import AutoStructify
|
||||
app.add_source_parser('.md', MyCommonMarkParser)
|
||||
|
||||
app.add_config_value('recommonmark_config', {
|
||||
'enable_auto_toc_tree': True,
|
||||
'enable_auto_doc_ref': False, # broken in Sphinx 1.6+
|
||||
'enable_eval_rst': True,
|
||||
'url_resolver': lambda url: '/' + url
|
||||
}, True)
|
||||
app.add_transform(AutoStructify)
|
147
Documentation/contributing/project_ideas.md
Normal file
@ -0,0 +1,147 @@
|
||||
# Project Ideas
|
||||
|
||||
This section collects ideas to improve coreboot and related projects and
|
||||
should serve as a pool of ideas for people who want to enter the field
|
||||
of firmware development but need some guidance what to work on.
|
||||
|
||||
These tasks can be adopted as part of programs like Google Summer of
|
||||
Code or by motivated individuals outside such programs.
|
||||
|
||||
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 - since we started building this list for Google Summer of Code,
|
||||
we'll adopt its term for those people and call them mentors.
|
||||
|
||||
The requirements for each project aim for productive work on the project,
|
||||
but it's always possible to learn them "on the job". If you have any
|
||||
doubt if you can bring yourself up to speed in a required time frame
|
||||
(e.g. for GSoC), feel free to ask in the community or the mentors listed
|
||||
with the projects. We can then try together to figure out if you're a
|
||||
good match for a project, even when requirements might not all be met.
|
||||
|
||||
## Provide toolchain binaries
|
||||
Our crossgcc subproject provides a uniform compiler environment for
|
||||
working on coreboot and related projects. Sadly, building it takes hours,
|
||||
which is a bad experience when trying to build coreboot the first time.
|
||||
|
||||
Provide packages/installers of our compiler toolchain for Linux distros,
|
||||
Windows, Mac OS. For Windows, this should also include the environment
|
||||
(shell, make, ...).
|
||||
|
||||
### Requirements
|
||||
* coreboot knowledge: Should know how to build coreboot images and where
|
||||
the compiler comes into play in our build system.
|
||||
* other knowledge: Should know how packages or installers for their
|
||||
target OS work. Knowledge of the GCC build system is a big plus
|
||||
* hardware requirements: Nothing special
|
||||
|
||||
### Mentors
|
||||
* Patrick Georgi <patrick@georgi.software>
|
||||
|
||||
## Support Power9/Power8 in coreboot
|
||||
There are some basic PPC64 stubs in coreboot, and there's open hardware
|
||||
in TALOS2 and its family. While they already have fully open source
|
||||
firmware, coreboot support adds a unified story for minimal firmware
|
||||
across architectures.
|
||||
|
||||
### Requirements
|
||||
* coreboot knowledge: Should be familiar with making chipset level
|
||||
changes to the code.
|
||||
* other knowledge: A general idea of the Power architecture, the more,
|
||||
the better
|
||||
* hardware requirements: QEMU Power bring-up exists, and even if it
|
||||
probably needs to be fixed up, that shouldn't be an exceedingly large
|
||||
task. For everything else, access to real Power8/9 hardware and recovery
|
||||
tools (e.g. for external flashing) is required.
|
||||
|
||||
### Mentors
|
||||
* 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
|
||||
The Kernel Address Sanitizer (KASAN) is a runtime dynamic memory error detector.
|
||||
The idea is to check every memory access (variables) for its validity
|
||||
during runtime and find bugs like stack overflow or out-of-bounds accesses.
|
||||
Implementing this stub into coreboot like "Undefined behavior sanitizer support"
|
||||
would help to ensure code quality and make the runtime code more robust.
|
||||
|
||||
### Requirements
|
||||
* knowledge in the coreboot build system and the concept of stages
|
||||
* the KASAN feature can be improved in a way so that the memory space needed
|
||||
during runtime is not on a fixed address provided during compile time but
|
||||
determined during runtime. For this to achieve a small patch to the GCC will
|
||||
be helpful. Therefore minor GCC knowledge would be beneficial.
|
||||
* Implementation can be initially done in QEMU and improved on different
|
||||
mainboards and platforms
|
||||
|
||||
### Mentors
|
||||
* Werner Zeh <werner.zeh@gmx.net>
|
||||
|
||||
## Port payloads to ARM, AArch64, MIPS or RISC-V
|
||||
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
|
||||
to one of the platforms, for example GRUB2, U-Boot (the UI part), Tianocore,
|
||||
yabits, FILO, or Linux-as-Payload.
|
||||
|
||||
Since this is a bit of a catch-all idea, an application to GSoC should pick a
|
||||
combination of payload and architecture to support.
|
||||
|
||||
### Requirements
|
||||
* coreboot knowledge: Should know the general boot flow in coreboot
|
||||
* other knowledge: It helps to be familiar with the architecture you want to
|
||||
work on.
|
||||
* hardware requirements: Much of this can be done in QEMU or other emulators,
|
||||
but the ability to test on real hardware is a plus.
|
||||
|
||||
### Mentors
|
||||
* Simon Glass <sjg@chromium.org> for U-Boot payload projects
|
||||
|
||||
## Fully support building coreboot with the Clang compiler
|
||||
Most coreboot code is written in C, and it would be useful to support
|
||||
a second compiler suite in addition to gcc. Clang is another popular
|
||||
compiler suite and the build system generally supports building coreboot
|
||||
with it, but firmware is a rather special situation and we need to
|
||||
adjust coreboot and Clang some more to get usable binaries out of that
|
||||
combination.
|
||||
|
||||
The goal would be to get the emulation targets to boot reliably first,
|
||||
but also to support real hardware. If you don't have hardware around,
|
||||
you likely will find willing testers for devices they own and work from
|
||||
their bug reports.
|
||||
|
||||
### Requirements
|
||||
* coreboot knowledge: Have a general concept of the build system
|
||||
* Clang knowledge: It may be necessary to apply minor modifications to Clang
|
||||
itself, but at least there will be Clang-specific compiler options etc to
|
||||
adapt, so some idea how compilers work and how to modify their behavior is
|
||||
helpful.
|
||||
* hardware requirements: If you have your own hardware that is already
|
||||
supported by coreboot that can be a good test target, but you will debug
|
||||
other people's hardware, too.
|
||||
* debugging experience: It helps if you know how to get the most out of a bug
|
||||
report, generate theories, build patches to test them and figure out what's
|
||||
going on from the resulting logs.
|
||||
|
||||
### Mentors
|
||||
* Patrick Georgi <patrick@georgi.software>
|
671
Documentation/corebootBuildingGuide.tex
Normal file
@ -0,0 +1,671 @@
|
||||
%
|
||||
% This document is released under the GPL
|
||||
% Initially written by Stefan Reinauer, <stepan@coresystems.de>
|
||||
%
|
||||
|
||||
\documentclass[titlepage,12pt]{article}
|
||||
\usepackage{a4}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{epsfig}
|
||||
\usepackage{epstopdf}
|
||||
\usepackage{url}
|
||||
\usepackage{color}
|
||||
% \usepackage{geometry}
|
||||
\usepackage[pdftex]{hyperref}
|
||||
% \usepackage{makeidx}
|
||||
% \makeindex
|
||||
% \geometry{left=2cm,right=2cm,top=2cm,bottom=2cm}
|
||||
|
||||
\hypersetup{
|
||||
urlbordercolor={1 1 1},
|
||||
menubordercolor={1 1 1},
|
||||
linkbordercolor={1 1 1},
|
||||
colorlinks=false,
|
||||
% pdfpagemode=None, % PDF-Viewer starts without TOC
|
||||
% pdfstartview=FitH,
|
||||
pdftitle={coreboot Porting Guide},
|
||||
pdfauthor={Zheng Bao},
|
||||
pdfsubject={coreboot configuration and build process},
|
||||
pdfkeywords={coreboot, AMD, configuration, Build}
|
||||
}
|
||||
|
||||
\setlength{\parindent}{0pt}
|
||||
\setlength{\hoffset}{0pt}
|
||||
|
||||
\title{coreboot from Scratch}
|
||||
\author{Stefan Reinauer $<$stepan@coresystems.de$>$\and Zheng Bao $<$zheng.bao@amd.com$>$}
|
||||
\date{Dec 4th, 2013}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\maketitle
|
||||
|
||||
\thispagestyle{empty}
|
||||
|
||||
\tableofcontents
|
||||
|
||||
\newpage
|
||||
|
||||
\section{What is coreboot}
|
||||
coreboot aims to replace the normal BIOS found on x86, AMD64, PPC,
|
||||
Alpha, and other machines with a Linux kernel that can boot Linux from a cold
|
||||
start. The startup code of an average coreboot port is about 500 lines of
|
||||
assembly and 5000 lines of C. It executes 16 instructions to get into 32bit
|
||||
protected mode and then performs DRAM and other hardware initializations
|
||||
required before Linux can take over.
|
||||
|
||||
The projects primary motivation initially was maintenance of large
|
||||
clusters. Not surprisingly interest and contributions have come from
|
||||
people with varying backgrounds. Nowadays a large and growing number of
|
||||
Systems can be booted with coreboot, including embedded systems,
|
||||
Desktop PCs and Servers.
|
||||
|
||||
This document is used to build, modify, and port the coreboot code
|
||||
base on the AMD platform.
|
||||
|
||||
|
||||
\section{Changes}
|
||||
|
||||
\begin{itemize}
|
||||
\item 2013/12/20 Add Git, Gerrit, toolchains building.
|
||||
\item 2009/04/19 replace LinuxBIOS with coreboot
|
||||
\item 2004/06/02 url and language fixes from Ken Fuchs $<$kfuchs@winternet.com$>$
|
||||
\item 2004/02/10 ACPI and option ROM updates
|
||||
\item 2003/11/18 initial release
|
||||
\end{itemize}
|
||||
|
||||
%
|
||||
% Build Requirements
|
||||
%
|
||||
|
||||
\section{Build Requirements}
|
||||
To build coreboot for AMD64 from the sources you need a recent Linux.
|
||||
SUSE Linux 11.2, CentOS release 6.3, Fedora Core 16, Cygwin, FreeBSD,
|
||||
NetBSD are known to work fine.
|
||||
|
||||
To build the toolchain, you need following host compilers:
|
||||
|
||||
\begin{itemize}
|
||||
\item GNUtar
|
||||
\item GNUpatch
|
||||
\item GNUmake
|
||||
\item GCC
|
||||
\item binutils
|
||||
\item bison
|
||||
\item flex
|
||||
\item m4
|
||||
\item wget
|
||||
\end{itemize}
|
||||
|
||||
Besides the tools above, after the toolchains are built, you also need the following
|
||||
tools to build the source.
|
||||
|
||||
\begin{itemize}
|
||||
\item git: Get the source code from repository
|
||||
\item libncurses-dev (or ncursesw, ncurses, curses, pdcursesw, pdcurses): for menuconfig
|
||||
\item python: Optional for gdb.
|
||||
\item perl: Optional for gdb.
|
||||
\end{itemize}
|
||||
|
||||
%
|
||||
% Getting coreboot
|
||||
%
|
||||
|
||||
\section{Getting coreboot}
|
||||
The latest coreboot sources are available via GIT.
|
||||
For users who doesn't need to change and commit the code:
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git clone https://review.coreboot.org/coreboot
|
||||
\end{verbatim}
|
||||
}
|
||||
For developers, you need to get a gerrit account which you can register
|
||||
at \url{https://review.coreboot.org}. Please refer section ~\ref{sec:gerrit}
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git clone ssh://<username>@review.coreboot.org:29418/coreboot
|
||||
$ git clone https://[<username>:<password>@]review.coreboot.org/coreboot.git
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
Checks out a sub-repository in the 3rdparty directory.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git submodule update --init --checkout
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
%
|
||||
% Building the toolchain
|
||||
%
|
||||
|
||||
\section{Building the toolchain}
|
||||
coreboot recommends and guarantees the toolchain integrated with coreboot.
|
||||
Linux distributions usually modify their compilers in ways incompatible with coreboot.
|
||||
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ cd coreboot
|
||||
$ make crossgcc
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
or
|
||||
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ cd util/crossgcc
|
||||
$ buildgcc
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
The buildgcc will try to get packages from website. You need to make sure you can
|
||||
get access the internet. Or you can get the source.tar.gz and put it in util/crossgcc/tarballs.
|
||||
|
||||
{ \small
|
||||
\textcolor{blue} {Welcome to the} \textcolor{red} {coreboot} \textcolor{blue} {cross toolchain builder v1.23 (September 20th, 2013)}
|
||||
|
||||
Target arch is now i386-elf
|
||||
|
||||
Will skip GDB ... ok
|
||||
|
||||
Downloading tar balls ...
|
||||
|
||||
* gmp-5.1.2.tar.bz2 (cached)
|
||||
|
||||
* mpfr-3.1.2.tar.bz2 (cached)
|
||||
|
||||
* mpc-1.0.1.tar.gz (cached)
|
||||
|
||||
* libelf-0.8.13.tar.gz (cached)
|
||||
|
||||
* gcc-4.7.3.tar.bz2 (cached)
|
||||
|
||||
* binutils-2.23.2.tar.bz2 (cached)
|
||||
|
||||
* acpica-unix-20130626.tar.gz (cached)
|
||||
|
||||
Downloaded tar balls ... \textcolor {green}{ok}
|
||||
|
||||
Unpacking and patching ...
|
||||
|
||||
* gmp-5.1.2.tar.bz2
|
||||
|
||||
* mpfr-3.1.2.tar.bz2
|
||||
|
||||
* mpc-1.0.1.tar.gz
|
||||
|
||||
* libelf-0.8.13.tar.gz
|
||||
|
||||
* gcc-4.7.3.tar.bz2
|
||||
|
||||
* binutils-2.23.2.tar.bz2
|
||||
|
||||
o binutils-2.23.2\_arv7a.patch
|
||||
|
||||
o binutils-2.23.2\_no-bfd-doc.patch
|
||||
|
||||
* acpica-unix-20130626.tar.gz
|
||||
|
||||
Unpacked and patched ... \textcolor {green}{ok}
|
||||
|
||||
Building GMP 5.1.2 ... \textcolor {green}{ok}
|
||||
|
||||
Building MPFR 3.1.2 ... \textcolor {green}{ok}
|
||||
|
||||
Building MPC 1.0.1 ... \textcolor {green}{ok}
|
||||
|
||||
Building libelf 0.8.13 ... \textcolor {green}{ok}
|
||||
|
||||
Building binutils 2.23.2 ... \textcolor {green}{ok}
|
||||
|
||||
Building GCC 4.7.3 ... ok
|
||||
|
||||
Skipping Expat (Python scripting not enabled)
|
||||
|
||||
Skipping Python (Python scripting not enabled)
|
||||
|
||||
Skipping GDB (GDB support not enabled)
|
||||
|
||||
Building IASL 20130626 ... \textcolor {green}{ok}
|
||||
|
||||
Cleaning up... \textcolor {green}{ok}
|
||||
|
||||
\textcolor {green}{You can now run your i386-elf cross toolchain from /home/baozheng/x86/coreboot-gerrit/util/crossgcc/xgcc.}
|
||||
}
|
||||
If you are lucky, you can get toolchains located in util/crossgcc/xgcc.
|
||||
|
||||
%
|
||||
% Build coreboot
|
||||
%
|
||||
|
||||
\section{Building coreboot}
|
||||
\subsection{Build main module of coreboot}
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ cd coreboot
|
||||
$ make menuconfig
|
||||
.config - coreboot v4.0-4895-gc5025a4-dirty Configuration
|
||||
+------------------------ coreboot Configuration -------------------------+
|
||||
| Arrow keys navigate the menu. <Enter> selects submenus --->. |
|
||||
| Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, |
|
||||
| <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help, </> |
|
||||
| for Search. Legend: [*] built-in [ ] excluded <M> module < > |
|
||||
| +---------------------------------------------------------------------+ |
|
||||
| | General setup ---> | |
|
||||
| | Mainboard ---> | |
|
||||
| | Architecture (x86) ---> | |
|
||||
| | Chipset ---> | |
|
||||
| | Devices ---> | |
|
||||
| | VGA BIOS ---> | |
|
||||
| | Display ---> | |
|
||||
| | PXE ROM ---> | |
|
||||
| | Generic Drivers ---> | |
|
||||
| | Console ---> | |
|
||||
| | [ ] Relocatable Modules | |
|
||||
| | System tables ---> | |
|
||||
| | Payload ---> | |
|
||||
| | Debugging ---> | |
|
||||
| | --- | |
|
||||
| +----v(+)-------------------------------------------------------------+ |
|
||||
+-------------------------------------------------------------------------+
|
||||
| <Select> < Exit > < Help > |
|
||||
+-------------------------------------------------------------------------
|
||||
\end{verbatim}
|
||||
}
|
||||
Select Mainboard -$>$ Mainboard Vendor -$>$ AMD
|
||||
-$>$ Mainboard Model -$>$ Olive Hill
|
||||
|
||||
Then save, exit and run make.
|
||||
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ make
|
||||
\end{verbatim}
|
||||
}
|
||||
The built image, coreboot.rom, is located at folder build.
|
||||
|
||||
\section{Programming coreboot to flash memory}
|
||||
The image resulting from a coreboot build can be directly programmed to
|
||||
a flash device, either using an external flash programmers, e.g., Dediprog SF100, or by using the
|
||||
Linux flash utility, flashrom.
|
||||
|
||||
|
||||
\subsection{Add modules and payload}
|
||||
|
||||
\subsubsection{VGA BIOS}
|
||||
There is a big Chance that you need to get a VGA BIOS.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
.config - coreboot v4.0 Configuration
|
||||
------------------------------------------------------------------------------
|
||||
+-------------------------------- VGA BIOS --------------------------------+
|
||||
| Arrow keys navigate the menu. <Enter> selects submenus --->. |
|
||||
| Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, |
|
||||
| <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help, </> |
|
||||
| for Search. Legend: [*] built-in [ ] excluded <M> module < > module |
|
||||
| +----------------------------------------------------------------------+ |
|
||||
| | [*] Add a VGA BIOS image | |
|
||||
| | (vgabios.bin) VGA BIOS path and filename | |
|
||||
| | (1002,1306) VGA device PCI IDs | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| +----------------------------------------------------------------------+ |
|
||||
+--------------------------------------------------------------------------+
|
||||
| <Select> < Exit > < Help > |
|
||||
+--------------------------------------------------------------------------+
|
||||
\end{verbatim}
|
||||
}
|
||||
Select VGA BIOS. ``The VGA device PCI IDs'' should be the same as your device. Get the
|
||||
Option ROM from Vendor's website.
|
||||
|
||||
\subsubsection{Payload}
|
||||
coreboot in itself is "only" minimal code for initializing a mainboard
|
||||
with peripherals. After the initialization, it jumps to a payload.
|
||||
|
||||
Currently, SeaBIOS is the most widely used payload. The best way to integrate SeaBIOS
|
||||
is setting it in menuconfig.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
+------------------------------- Payload ---------------------------------+
|
||||
| Arrow keys navigate the menu. <Enter> selects submenus --->. |
|
||||
| Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, |
|
||||
| <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help, </> |
|
||||
| for Search. Legend: [*] built-in [ ] excluded <M> module < > module |
|
||||
| +----------------------------------------------------------------------+ |
|
||||
| | Add a payload (SeaBIOS) ---> | |
|
||||
| | SeaBIOS version (1.7.2.1) ---> | |
|
||||
| | [*] Use LZMA compression for payloads (NEW) | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
| +----------------------------------------------------------------------+ |
|
||||
+--------------------------------------------------------------------------+
|
||||
| <Select> < Exit > < Help > |
|
||||
+--------------------------------------------------------------------------+
|
||||
\end{verbatim}
|
||||
The script in Makefile will automatically checkout, config, build the SeaBIOS source,
|
||||
and integrat the binary into the final image.
|
||||
|
||||
%
|
||||
% Working with Git
|
||||
%
|
||||
|
||||
\section{Working with Git}
|
||||
\subsection{Configuration of Git}
|
||||
Inside the checkout you should install a commit-msg hook that adds a
|
||||
Change-Id into commit messages, which uniquely identifies the logical
|
||||
change in Gerrit even across multiple iterations of the commit. The
|
||||
hook only needs to be installed once per clone, and installation can
|
||||
be done with:
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ cd coreboot
|
||||
$ cp ./util/gitconfig/* .git/hooks
|
||||
\end{verbatim}
|
||||
}
|
||||
configure your name and email in git.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git config --global user.name "Your Name Comes Here"
|
||||
$ git config --global user.email your.email@example.com'
|
||||
\end{verbatim}
|
||||
}
|
||||
The name~\ref{user name} and email~\ref{Contact Information} should be the same the settings in gerrit.
|
||||
Otherwise you can not push you code to community.
|
||||
|
||||
Then run the following command once, to tell git that by default you
|
||||
want to submit all commits in the currently checked-out branch for
|
||||
review on gerrit:
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git config remote.origin.push HEAD:refs/for/master
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
The above configurations for git has been integrated into Makefile. You can run
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ make gitconfig
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
\subsection{Work flow}
|
||||
|
||||
It is recommended that you make a new branch when you start to work, not pushing changes to master.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git checkout master -b mybranch
|
||||
\end{verbatim}
|
||||
}
|
||||
After you have done your changes, run:
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git add file_need_to_submit.c
|
||||
$ git commit -m "my first change."
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
% Does anyone have a better word to describe the philosophy of splitting changes to patches?
|
||||
You need to realize that the changes you have made should be well divided into
|
||||
several commits. Each of them has one and only one meaning. You could use git rebase -i to
|
||||
split, squash, remove, rewrite you comment.
|
||||
|
||||
Here is an example of a well-formatted commit message:
|
||||
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
examplecomponent: Refactor duplicated setup into a function
|
||||
|
||||
Setting up the demo device correctly requires the exact same register
|
||||
values to be written into each of the PCI device functions. Moving the
|
||||
writes into a function allows also otherexamplecomponent to use them.
|
||||
|
||||
Signed-off-by: Joe Hacker <joe@hacker.email>
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
Then you can push the code.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ git push
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
You can go to the ~\ref{sec:gerrit} gerrit to see if your changes is successfully pushed.
|
||||
|
||||
Often it might happen that the patch you sent for approval is not good
|
||||
enough from the first attempt. Gerrit and git make it easy to track
|
||||
patch evolution during the review process until patches meet our
|
||||
quality standards and are ready for approval.
|
||||
|
||||
You can easily modify a patch sent to gerrit by you or even by someone
|
||||
else. Just apply it locally using one of the possible ways to do it,
|
||||
make a new local commit that fixes the issues reported by the
|
||||
reviewers, then rebase the change by preserving the same Change-ID. We
|
||||
recommend you to use the git rebase command in interactive mode,
|
||||
|
||||
Once your patch gets a +2 comment, your patch can be merged (cherry-pick, actually) to origin/master.
|
||||
|
||||
%
|
||||
% Working with Gerrit
|
||||
%
|
||||
|
||||
\section{Working with Gerrit}
|
||||
\label{sec:gerrit}
|
||||
If you are a coreboot user, not planning to contribute, you can skip this section.
|
||||
\subsection{Get gerrit account}
|
||||
You need to get an OpenID first. Currently Google account give you an OpenID. It means, if you have a gmail account, you have an OpenID. You can try to signed in.
|
||||
click \url{https://review.coreboot.org}
|
||||
|
||||
%\includegraphics[width=6.00in,height=1.00in]{gerrit_signin.png}
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
+-----------------------------------------------------------+
|
||||
|All Projects Documentation Register Sign In |
|
||||
|Open Merged Abandoned |
|
||||
|Search for status:open |
|
||||
+-----------------------------------------------------------+
|
||||
|Subject Status Owner Project Branch Updated CR V |
|
||||
|cpu: Rename.. Alexandru coreboot master 1:20 PM +1 |
|
||||
|cpu: Only a.. Alexandru coreboot master 1:17 PM X |
|
||||
|arch/x86: D.. Alexandru coreboot master 1:09 PM |
|
||||
| |
|
||||
| Next -> |
|
||||
|Press '?' to view keyboard shortcuts | Powered by Gerrit |
|
||||
+-----------------------------------------------------------+
|
||||
\end{verbatim}
|
||||
}
|
||||
Click ``Sign In'', You will get
|
||||
|
||||
%\includegraphics[width=6.00in,height=4.00in]{openid.png}
|
||||
|
||||
You will be redirected to Google to get logging in.
|
||||
|
||||
% \includegraphics[width=6.00in,height=1.50in]{login.png}
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
Sign In to Gerrit Code Review at review.coreboot.org
|
||||
+--------------------------------------------------+
|
||||
+--------------------------------------------------+
|
||||
[] Remember me
|
||||
Sign In Cancel
|
||||
Sign in with a Google Account
|
||||
Sign in with a Yahoo! ID
|
||||
What is OpenID?
|
||||
|
||||
OpenID provides secure single-sign-on, without revealing your passwords to this website.
|
||||
|
||||
There are many OpenID providers available. You may already be member of one!
|
||||
|
||||
Get OpenID
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
\subsection{Configure account}
|
||||
Click the dropdown button near the user name and click ``Settings''
|
||||
|
||||
% \includegraphics[width=6.00in,height=4.00in]{settings}
|
||||
% \epsfig{figure=keystroke_left}
|
||||
% \epstopdf {file=settings.eps}
|
||||
% \epsfig{file=settings.eps}
|
||||
|
||||
\label{user name} In ``profile'' section, type the user name for git. This probably can be changed only once.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
Profile Username zbao
|
||||
Preferences Full Name Zheng Bao
|
||||
Watched Projects Email Address zheng.bao@amd.com
|
||||
Contact Information Registered Jun 28, 2011 4:33 PM
|
||||
SSH Public Keys Account ID 1000034
|
||||
HTTP Password
|
||||
Identities
|
||||
Groups
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
\label{Contact Information} In ``Contact Information'', enter you full name and your Email, which should be configured in your .gitconfig
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
Full Name __________________________________
|
||||
Preferred Email ______________ Registered Email
|
||||
|
||||
Save Changes
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
In ``SSH Public Keys'' section, upload your public key.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
Status Algorithm Key Comment
|
||||
|
||||
Delete
|
||||
Add SSH Public Key
|
||||
> How to Generate an SSH Key
|
||||
+--------------------------+
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
+--------------------------+
|
||||
clear Add Close
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
Click ``Add Key ...''
|
||||
Go back to you linux command line and type:
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
$ ssh-keygen
|
||||
Generating public/private rsa key pair.
|
||||
Enter file in which to save the key (/home/zhengbao/.ssh/id_rsa):
|
||||
Enter passphrase (empty for no passphrase):
|
||||
Enter same passphrase again:
|
||||
Your identification has been saved in /home/zhengbao/.ssh/id_rsa.
|
||||
Your public key has been saved in /home/zhengbao/.ssh/id_rsa.pub.
|
||||
The key fingerprint is:
|
||||
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx zhengb@host.domain
|
||||
The key's randomart image is:
|
||||
+--[ RSA 2048]----+
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
+-----------------+
|
||||
\end{verbatim}
|
||||
}
|
||||
The data in ~/.ssh/id\_rsa.pub is your public key. Copy them to the box in the page of ``SSH Public Keys'' and click add.
|
||||
|
||||
In ``HTTP Password'' section, click button ``Generate Password''. You will get the password for http checkout.
|
||||
{ \small
|
||||
\begin{verbatim}
|
||||
Username XXX
|
||||
Password XXXXXXXXXXXX
|
||||
|
||||
Generate Password Clear Password
|
||||
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
\subsection{Reviewing Changes}
|
||||
For each listed changes in Gerrit, you can review, comment, evaluate,
|
||||
cherry-pick, and even re-submit them. For you own patches, only you can
|
||||
abandon them. Click in the file and commit message, you can add in-line comment.
|
||||
|
||||
%
|
||||
% 14 Glossary
|
||||
%
|
||||
|
||||
\section{Glossary}
|
||||
\begin{itemize}
|
||||
\item payload
|
||||
|
||||
coreboot only cares about low level machine initialization, but also has
|
||||
very simple mechanisms to boot a file either from FLASHROM or IDE. That
|
||||
file, possibly a Linux Kernel, a boot loader or Etherboot, are called
|
||||
payload, since it is the first software executed that does not cope with
|
||||
pure initialization.
|
||||
|
||||
\item flash device
|
||||
|
||||
Flash devices are commonly used in all different computers since unlike
|
||||
ROMs they can be electronically erased and reprogrammed.
|
||||
|
||||
\item Gerrit
|
||||
|
||||
Gerrit is a web based code review system, facilitating online code
|
||||
reviews for projects using the Git version control system.
|
||||
|
||||
Gerrit makes reviews easier by showing changes in a side-by-side
|
||||
display, and allowing inline comments to be added by any reviewer.
|
||||
|
||||
Gerrit simplifies Git based project maintainership by permitting any
|
||||
authorized user to submit changes to the master Git repository, rather
|
||||
than requiring all approved changes to be merged in by hand by the
|
||||
project maintainer. This functionality enables a more centralized
|
||||
usage of Git.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\newpage
|
||||
|
||||
%
|
||||
% 14 Bibliography
|
||||
%
|
||||
|
||||
\section{Bibliography}
|
||||
\subsection{Additional Papers on coreboot}
|
||||
|
||||
\begin{itemize}
|
||||
\item
|
||||
\textit{\url{https://www.coreboot.org/Documentation}}
|
||||
\end{itemize}
|
||||
|
||||
\subsection {Links}
|
||||
|
||||
\begin{itemize}
|
||||
\item Etherboot: \textit{\url{http://www.etherboot.org/}}
|
||||
\item OpenBIOS: \textit{\url{http://www.openbios.org/}}
|
||||
\item Flashrom: \textit{\url{http://www.flashrom.org/}}
|
||||
\item Seabios: \textit{\url{http://www.seabios.org/}}
|
||||
\end{itemize}
|
||||
|
||||
|
||||
\end{document}
|
91
Documentation/distributions.md
Normal file
@ -0,0 +1,91 @@
|
||||
# Distributions
|
||||
|
||||
coreboot doesn't provide binaries but provides a toolbox that others can use
|
||||
to build boot firmware for all kinds of purposes. These third-parties can be
|
||||
broadly separated in two groups: Those shipping coreboot on their hardware,
|
||||
and those providing after-market firmware to extend the usefulness of devices.
|
||||
|
||||
|
||||
## Hardware shipping with coreboot
|
||||
|
||||
### Purism
|
||||
|
||||
[Purism](https://www.puri.sm) sells laptops with a focus on user privacy and
|
||||
security; part of that effort is to minimize the amount of proprietary and/or
|
||||
binary code. Their laptops ship with a blob-free OS and coreboot firmware
|
||||
with a neutralized Intel Management Engine (ME) and SeaBIOS as the payload.
|
||||
|
||||
### ChromeOS Devices
|
||||
|
||||
All ChromeOS devices ([Chromebooks](https://chromebookdb.com/), Chromeboxes,
|
||||
Chromebit, etc) released from 2012 onward use coreboot for their main system
|
||||
firmware. Additionally, starting with the 2013 Chromebook Pixel, the firmware
|
||||
running on the Embedded Controller (EC - a small microcontroller which provides
|
||||
functions like battery management, keyboard support, and sensor interfacing)
|
||||
is open source as well.
|
||||
|
||||
### Libretrend
|
||||
|
||||
[Libretrend](https://libretrend.com) sells the Librebox, a NUC-like PC which
|
||||
ships with coreboot firmware.
|
||||
|
||||
|
||||
### PC Engines APUs
|
||||
|
||||
[PC Engines](https://pcengines.ch) designs and sells embedded PC hardware that
|
||||
ships with coreboot and support upstream maintenance for the devices through a
|
||||
third party, [3mdeb](https://3mdeb.com). They provide current and tested
|
||||
firmware binaries on [GitHub](https://pcengines.github.io).
|
||||
|
||||
## After-market firmware
|
||||
|
||||
### Libreboot
|
||||
|
||||
[Libreboot](https://libreboot.org) is a downstream coreboot distribution that
|
||||
provides ready-made firmware images for supported devices: those which can be
|
||||
built entirely from source code. Their copy of the coreboot repository is
|
||||
therefore stripped of all devices that require binary components to boot.
|
||||
|
||||
### MrChromebox
|
||||
|
||||
[MrChromebox](https://mrchromebox.tech/) provides upstream coreboot firmware
|
||||
images for the vast majority of x86-based Chromebooks and Chromeboxes, using
|
||||
Tianocore as the payload to provide a modern UEFI bootloader. Why replace
|
||||
coreboot with coreboot? Mr Chromebox's images are built using upstream
|
||||
coreboot (vs Google's older, static tree/branch), include many features and
|
||||
fixes not found in the stock firmware, and offer much broader OS compatibility
|
||||
(i.e., they run Windows as well as Linux). They also offer updated CPU
|
||||
microcode, as well as firmware updates for the device's embedded controller
|
||||
(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](http://osresearch.net) is an open source custom firmware and OS
|
||||
configuration for laptops and servers that aims to provide slightly better
|
||||
physical security and protection for data on the system. Unlike
|
||||
[Tails](https://tails.boum.org/), which aims to be a stateless OS that leaves
|
||||
no trace on the computer of its presence, Heads is intended for the case where
|
||||
you need to store data and state on the computer.
|
||||
|
||||
Heads is not just another Linux distribution – it combines physical hardening
|
||||
of specific hardware platforms and flash security features with custom coreboot
|
||||
firmware and a Linux boot loader in ROM.
|
||||
|
||||
### Skulls
|
||||
|
||||
[Skulls](https://github.com/merge/skulls) provides firmware images for
|
||||
laptops like the Lenovo Thinkpad X230. It uses upstream coreboot, an easy
|
||||
to use payload like SeaBIOS and Intel's latest microcode update.
|
||||
|
||||
It simplifies installation and includes compact documentation. Skulls also
|
||||
enables easy switching to [Heads](#heads) and back.
|
28
Documentation/flash_tutorial/ext_power.md
Normal file
@ -0,0 +1,28 @@
|
||||
# Flashing firmware externally supplying direct power
|
||||
|
||||
**WARNING:** Never use a high current rated power supply, like PC ATX power
|
||||
supply. It'll literally melt your PCB traces on short circuit.
|
||||
|
||||
On some mainboards the flash IC Vcc pin is connected to a diode, which prevents
|
||||
powering the rest of the board.
|
||||
|
||||
![][flash_ic_diode]
|
||||
|
||||
Please have a look at the mainboard specific documentation for details.
|
||||
|
||||
On those boards it's safe to use a programmer and supply power externally.
|
||||
|
||||
**WARNING:** Verify that you apply the correct voltage!
|
||||
|
||||
## USB programmer
|
||||
USB programmers are usually current limited by the host USB hub. On USB 2.0
|
||||
ports the limit is 500mA, which is sufficient to power the flash. Those are
|
||||
the best choice as they are stateless and have a fast power on reset cycle.
|
||||
|
||||
## Single board computers (like BeagleBone Black / RPi)
|
||||
Be careful when connecting a flash chip, especially when using a Pomona
|
||||
test-clip. A short circuit or overcurrent (250mA) causes a brown-out reset,
|
||||
resulting in a reboot of the running operating system (and possible loss of
|
||||
remote shell).
|
||||
|
||||
[flash_ic_diode]: flash_ic_diode.svg
|
23
Documentation/flash_tutorial/ext_standalone.md
Normal file
@ -0,0 +1,23 @@
|
||||
# Flashing firmware standalone
|
||||
|
||||
If none of the other methods work, there are three possibilities:
|
||||
|
||||
## Desolder
|
||||
You must remove or desolder the flash IC before you can flash it.
|
||||
It's recommended to solder a socket in place of the flash IC.
|
||||
|
||||
When flashing the IC, always connect all input pins.
|
||||
If in doubt, pull /WP, /HOLD, /RESET and alike up towards Vcc.
|
||||
|
||||
## SPI flash emulator
|
||||
If you are a developer, you might want to use an [EM100Pro] instead, which sets
|
||||
the onboard flash on hold, and allows to run custom firmware.
|
||||
It provides a very fast development cycle without actually writing to flash.
|
||||
|
||||
## SPI flash overwrite
|
||||
It is possible to set the onboard flash on hold and use another flash chip.
|
||||
Connect all lines one-to-one, except /HOLD. Pull /HOLD of the soldered flash IC
|
||||
low, and /HOLD of your replacement flash IC high.
|
||||
|
||||
|
||||
[EM100Pro]: https://www.dediprog.com/product/EM100Pro
|
61
Documentation/flash_tutorial/flash_ic_diode.svg
Normal file
@ -0,0 +1,61 @@
|
||||
<?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="4cm" height="3cm" viewBox="311 435 68 45" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g>
|
||||
<g>
|
||||
<rect style="fill: #ffffff" x="322.125" y="451.034" width="37.75" height="26.6444"/>
|
||||
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="322.125" y="451.034" width="37.75" height="26.6444"/>
|
||||
<text font-size="4.51549" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="341" y="465.734">
|
||||
<tspan x="341" y="465.734"></tspan>
|
||||
</text>
|
||||
</g>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="359.875" y1="456.784" x2="368.527" y2="456.784"/>
|
||||
<text font-size="4.51549" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="348.75" y="457.909">
|
||||
<tspan x="348.75" y="457.909">VCC</tspan>
|
||||
</text>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="359.763" y1="461.772" x2="368.652" y2="461.784"/>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="360.138" y1="466.872" x2="368.527" y2="466.909"/>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="360.277" y1="471.534" x2="368.402" y2="471.534"/>
|
||||
<text font-size="4.51549" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="345.752" y="463.247">
|
||||
<tspan x="345.752" y="463.247">HOLD</tspan>
|
||||
</text>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x1="346.652" y1="459.159" x2="358.402" y2="459.159"/>
|
||||
<text font-size="4.51549" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="349.752" y="468.247">
|
||||
<tspan x="349.752" y="468.247">CLK</tspan>
|
||||
</text>
|
||||
<text font-size="4.51549" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="353.502" y="472.997">
|
||||
<tspan x="353.502" y="472.997">DI</tspan>
|
||||
</text>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="313.49" y1="456.922" x2="322.143" y2="456.922"/>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="313.378" y1="461.909" x2="322.268" y2="461.922"/>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="313.753" y1="467.009" x2="322.143" y2="467.047"/>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="313.893" y1="471.672" x2="322.018" y2="471.672"/>
|
||||
<text font-size="4.51549" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="323.752" y="458.372">
|
||||
<tspan x="323.752" y="458.372">CS</tspan>
|
||||
</text>
|
||||
<text font-size="4.51549" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="324.127" y="468.497">
|
||||
<tspan x="324.127" y="468.497">WP</tspan>
|
||||
</text>
|
||||
<text font-size="4.51549" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="323.752" y="472.997">
|
||||
<tspan x="323.752" y="472.997">GND</tspan>
|
||||
</text>
|
||||
<text font-size="4.51549" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="324.127" y="463.497">
|
||||
<tspan x="324.127" y="463.497">DO</tspan>
|
||||
</text>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x1="330.852" y1="454.397" x2="323.902" y2="454.409"/>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x1="330.802" y1="464.397" x2="323.852" y2="464.409"/>
|
||||
</g>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="368.252" y1="456.797" x2="373.902" y2="456.784"/>
|
||||
<g>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="374.027" y1="456.784" x2="374.027" y2="438.895"/>
|
||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" points="375.027,439.777 374.027,437.777 373.027,439.777 "/>
|
||||
</g>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="314.277" y1="471.784" x2="314.277" y2="479.659"/>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="317.027" y1="479.659" x2="311.502" y2="479.672"/>
|
||||
<g>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1.2; stroke: #000000" x1="374.027" y1="443.284" x2="374.027" y2="447.434"/>
|
||||
<polygon style="fill: #000000" points="372.027,447.434 374.027,451.434 376.027,447.434 "/>
|
||||
<polygon style="fill: none; fill-opacity:0; stroke-width: 1.2; stroke: #000000" points="372.027,447.434 374.027,451.434 376.027,447.434 "/>
|
||||
</g>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1.2; stroke: #000000" x1="370.402" y1="452.032" x2="377.527" y2="452.032"/>
|
||||
</svg>
|
After Width: | Height: | Size: 5.0 KiB |
55
Documentation/flash_tutorial/flash_ic_no_diode.svg
Normal file
@ -0,0 +1,55 @@
|
||||
<?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="4cm" height="3cm" viewBox="311 435 65 45" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g>
|
||||
<g>
|
||||
<rect style="fill: #ffffff" x="322.124" y="451.034" width="37.75" height="26.6444"/>
|
||||
<rect style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x="322.124" y="451.034" width="37.75" height="26.6444"/>
|
||||
<text font-size="4.51556" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="340.999" y="465.734">
|
||||
<tspan x="340.999" y="465.734"></tspan>
|
||||
</text>
|
||||
</g>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="359.874" y1="456.784" x2="368.528" y2="456.784"/>
|
||||
<text font-size="4.51556" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="348.75" y="457.91">
|
||||
<tspan x="348.75" y="457.91">VCC</tspan>
|
||||
</text>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="359.762" y1="461.772" x2="368.652" y2="461.784"/>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="360.138" y1="466.872" x2="368.528" y2="466.91"/>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="360.278" y1="471.534" x2="368.402" y2="471.534"/>
|
||||
<text font-size="4.51556" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="345.752" y="463.246">
|
||||
<tspan x="345.752" y="463.246">HOLD</tspan>
|
||||
</text>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x1="346.652" y1="459.16" x2="358.402" y2="459.16"/>
|
||||
<text font-size="4.51556" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="349.752" y="468.246">
|
||||
<tspan x="349.752" y="468.246">CLK</tspan>
|
||||
</text>
|
||||
<text font-size="4.51556" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="353.502" y="472.996">
|
||||
<tspan x="353.502" y="472.996">DI</tspan>
|
||||
</text>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="313.49" y1="456.922" x2="322.142" y2="456.922"/>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="313.378" y1="461.91" x2="322.268" y2="461.922"/>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="313.752" y1="467.01" x2="322.142" y2="467.046"/>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="313.892" y1="471.672" x2="322.018" y2="471.672"/>
|
||||
<text font-size="4.51556" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="323.752" y="458.372">
|
||||
<tspan x="323.752" y="458.372">CS</tspan>
|
||||
</text>
|
||||
<text font-size="4.51556" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="324.128" y="468.496">
|
||||
<tspan x="324.128" y="468.496">WP</tspan>
|
||||
</text>
|
||||
<text font-size="4.51556" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="323.752" y="472.996">
|
||||
<tspan x="323.752" y="472.996">GND</tspan>
|
||||
</text>
|
||||
<text font-size="4.51556" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="324.128" y="463.496">
|
||||
<tspan x="324.128" y="463.496">DO</tspan>
|
||||
</text>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x1="330.852" y1="454.396" x2="323.902" y2="454.41"/>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 0.2; stroke: #000000" x1="330.802" y1="464.396" x2="323.852" y2="464.41"/>
|
||||
</g>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="368.252" y1="456.796" x2="373.902" y2="456.784"/>
|
||||
<g>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="374.028" y1="456.784" x2="374.028" y2="438.896"/>
|
||||
<polyline style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" points="375.028,439.778 374.028,437.778 373.028,439.778 "/>
|
||||
</g>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="314.278" y1="471.784" x2="314.278" y2="479.66"/>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" x1="317.028" y1="479.66" x2="311.502" y2="479.672"/>
|
||||
</svg>
|
After Width: | Height: | Size: 4.5 KiB |
111
Documentation/flash_tutorial/index.md
Normal file
@ -0,0 +1,111 @@
|
||||
# Flashing firmware tutorial
|
||||
|
||||
Updating the firmware is possible using the **internal method**, where the updates
|
||||
happen from a running system, or using the **external method**, where the system
|
||||
is in a shut down state and an external programmer is attached to write into the
|
||||
flash IC.
|
||||
|
||||
## Contents
|
||||
|
||||
* [Flashing internaly](int_flashrom.md)
|
||||
* [Flashing firmware standalone](ext_standalone.md)
|
||||
* [Flashing firmware externally supplying direct power](ext_power.md)
|
||||
* [Flashing firmware externally without supplying direct power](no_ext_power.md)
|
||||
|
||||
## General advice
|
||||
|
||||
* It's recommended to only flash the BIOS region.
|
||||
* Always verify the firmware image.
|
||||
* If you flash externally and have transmission errors:
|
||||
* Use short wires
|
||||
* Reduce clock frequency
|
||||
* Check power supply
|
||||
* Make sure that there are no other bus masters (EC, ME, SoC, ...)
|
||||
|
||||
## Internal method
|
||||
|
||||
This method using [flashrom] is available on many platforms, as long as they
|
||||
aren't locked down.
|
||||
|
||||
There are various protection schemes that make it impossible to modify or
|
||||
replace a firmware from a running system. coreboot allows to disable these
|
||||
mechanisms, making it possible to overwrite (or update) the firmware from a
|
||||
running system.
|
||||
|
||||
Usually you must use the **external method** once to install a retrofitted
|
||||
coreboot and then you can use the **internal method** for future updates.
|
||||
|
||||
There are multiple ways to update the firmware:
|
||||
* Using flashrom's *internal* programmer to directly write into the firmware
|
||||
flash IC, running on the target machine itself
|
||||
* A proprietary software to update the firmware, running on the target machine
|
||||
itself
|
||||
* A UEFI firmware update capsule
|
||||
|
||||
More details on flashrom's
|
||||
* [internal programmer](int_flashrom.md)
|
||||
|
||||
## External method
|
||||
|
||||
External flashing is possible on many platforms, but requires disassembling
|
||||
the target hardware. You need to buy a flash programmer, that
|
||||
exposes the same interface as your flash IC (likely SPI).
|
||||
|
||||
Please also have a look at the mainboard-specific documentation for details.
|
||||
|
||||
After exposing the firmware flash IC, read the schematics and use one of the
|
||||
possible methods:
|
||||
|
||||
* [Flashing firmware standalone](ext_standalone.md)
|
||||
* [Flashing firmware externally supplying direct power](ext_power.md)
|
||||
* [Flashing firmware externally without supplying direct power](no_ext_power.md)
|
||||
|
||||
**WARNING:** Using the wrong method or accidentally using the wrong pinout might
|
||||
permanently damage your hardware!
|
||||
|
||||
**WARNING:** Do not rely on dots *painted* on flash ICs to orient the pins!
|
||||
Any dots painted on flash ICs may only indicate if they've been tested. Dots
|
||||
that appear in datasheets to indicate pin 1 correspond to some kind of physical
|
||||
marker, such as a drilled hole, or one side being more flat than the other.
|
||||
|
||||
## Using a layout file
|
||||
On platforms where the flash IC is shared with other components you might want
|
||||
to write only a part of the flash IC. On Intel for example there are IFD, ME and
|
||||
GBE which don't need to be updated to install coreboot.
|
||||
To make [flashrom] only write the *bios* region, leaving Intel ME and Intel IFD
|
||||
untouched, you can use a layout file, which can be created with ifdtool and a backup
|
||||
of the original firmware.
|
||||
|
||||
```bash
|
||||
ifdtool -f rom.layout backup.rom
|
||||
```
|
||||
|
||||
and looks similar to:
|
||||
|
||||
```
|
||||
00000000:00000fff fd
|
||||
00500000:00bfffff bios
|
||||
00003000:004fffff me
|
||||
00001000:00002fff gbe
|
||||
```
|
||||
|
||||
By specifying *-l* and *-i* [flashrom] writes a single region:
|
||||
```bash
|
||||
flashrom -l rom.layout -i bios -w coreboot.rom -p <programmer>
|
||||
```
|
||||
|
||||
## Using an IFD to determine the layout
|
||||
flashrom version 1.0 supports reading the layout from the IFD (first 4KiB of
|
||||
the ROM). You don't need to manually specify a layout it, but it only works
|
||||
under the following conditions:
|
||||
|
||||
* Only available on Intel ICH7+
|
||||
* There's only one flash IC when flashing externally
|
||||
|
||||
```bash
|
||||
flashrom --ifd -i bios -w coreboot.rom -p <programmer>
|
||||
```
|
||||
|
||||
**TODO** explain FMAP regions, normal/fallback mechanism, flash lock mechanisms
|
||||
|
||||
[flashrom]: https://www.flashrom.org/Flashrom
|
19
Documentation/flash_tutorial/int_flashrom.md
Normal file
@ -0,0 +1,19 @@
|
||||
# Flashing firmware internally
|
||||
|
||||
**WARNING:** If you flash a broken firmware and have no recovery mechanism, you
|
||||
must use the **external method** to flash a working firmware again.
|
||||
|
||||
## Using flashrom
|
||||
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
|
||||
line if CONFIG_IO_STRICT_DEVMEM is set.
|
||||
|
||||
|
||||
For more details please also check [flashrom's wiki].
|
||||
Use the programmer *internal* to flash *coreboot.rom* internally:
|
||||
|
||||
```bash
|
||||
flashrom -p internal -w coreboot.rom
|
||||
```
|
||||
|
||||
[flashrom's wiki]: https://www.flashrom.org/Flashrom
|
22
Documentation/flash_tutorial/no_ext_power.md
Normal file
@ -0,0 +1,22 @@
|
||||
# Flashing firmware externally supplying no power
|
||||
|
||||
On some mainboards the flash IC's Vcc pin is connected to the internal
|
||||
power-rail, powering the entire board if the flash IC is powered externally.
|
||||
Likely it powers other chips which access the flash IC, preventing the external
|
||||
programmer from reading/writing the chip. It also violates the components'
|
||||
power sequence, bringing the ICs into an undefined state.
|
||||
|
||||
![][flash_ic_no_diode]
|
||||
|
||||
Please have a look at the mainboard specific documentation for details.
|
||||
|
||||
On those boards it's recommended to use a programmer without supplying power
|
||||
externally.
|
||||
|
||||
The key to read and write the flash IC is to put the machine into *S3* sleep-
|
||||
state or *S5* sleep-state *maybe* with Wake-On-LAN enabled.
|
||||
Another option that sometimes works is to keep the device in reset. This method requires
|
||||
knowledge of the board schematics and might require hardware modifications.
|
||||
Use a multimeter to make sure the flash IC is powered in those sleep states.
|
||||
|
||||
[flash_ic_no_diode]: flash_ic_no_diode.svg
|
@ -13,8 +13,8 @@ here, please discuss it in the mailing list to get this document updated.
|
||||
Don't just assume that it's okay, even if someone on IRC says it is.
|
||||
|
||||
|
||||
Summary:
|
||||
--------
|
||||
Summary
|
||||
-------
|
||||
These are the expectations for committing, reviewing, and submitting code
|
||||
into coreboot git and gerrit. While breaking individual rules may not have
|
||||
immediate consequences, the coreboot leadership may act on repeated or
|
||||
@ -33,15 +33,15 @@ addresses.
|
||||
* Don’t submit patches that you know will break other platforms.
|
||||
|
||||
|
||||
More detail:
|
||||
------------
|
||||
More detail
|
||||
-----------
|
||||
* Don't violate the licenses. If you're submitting code that you didn't
|
||||
write yourself, make sure the license is compatible with the license of the
|
||||
project you're submitting the changes to. If you’re submitting code that
|
||||
you wrote that might be owned by your employer, make sure that your
|
||||
employer is aware and you are authorized to submit the code. For
|
||||
clarification, see the Developer's Certificate of Origin in the coreboot
|
||||
[Signed-off-by policy](http://www.coreboot.org/Development_Guidelines#Sign-off_Procedure).
|
||||
[Signed-off-by policy](https://www.coreboot.org/Development_Guidelines#Sign-off_Procedure).
|
||||
|
||||
* Let non-trivial patches sit in a review state for at least 24 hours
|
||||
before submission. Remember that there are coreboot developers in timezones
|
||||
@ -98,8 +98,8 @@ must at least provide a path that will allow other platforms to continue
|
||||
working.
|
||||
|
||||
|
||||
Recommendations for gerrit activity:
|
||||
------------------------------------
|
||||
Recommendations for gerrit activity
|
||||
-----------------------------------
|
||||
These guidelines are less strict than the ones listed above. These are more
|
||||
of the “good idea” variety. You are requested to follow the below
|
||||
guidelines, but there will probably be no actual consequences if they’re
|
||||
@ -150,8 +150,8 @@ together so people can easily see the connection at the top level of
|
||||
gerrit. Topics can be set for individual patches in gerrit by going into
|
||||
the patch and clicking on the icon next to the topic line. Topics can also
|
||||
be set when you push the patches into gerrit. For example, to push a set of
|
||||
commits with the the i915-kernel-x60 set, use the command:
|
||||
git push origin HEAD:refs/for/master/i915-kernel-x60
|
||||
commits with the i915-kernel-x60 set, use the command:
|
||||
git push origin HEAD:refs/for/master%topic=i915-kernel-x60
|
||||
|
||||
* If one of your patches isn't ready to be merged, make sure it's obvious
|
||||
that you don't feel it's ready for merge yet. The preferred way to show
|
||||
@ -159,15 +159,19 @@ this is by marking in the commit message that it’s not ready until X. The
|
||||
commit message can be updated easily when it’s ready to be pushed.
|
||||
Examples of this are "WIP: title" or "[NEEDS_TEST]: title". Another way to
|
||||
mark the patch as not ready would be to give it a -1 or -2 review, but
|
||||
isn't as obvious as the commit message. These patches can also be pushed as
|
||||
drafts as shown in the next guideline.
|
||||
isn't as obvious as the commit message. These patches can also be pushed with
|
||||
the wip flag:
|
||||
git push origin HEAD:refs/for/master%wip
|
||||
|
||||
* When pushing patches that are not for submission, these should be marked
|
||||
as such. This can be done in the title ‘[DONOTSUBMIT]’, or can be pushed as
|
||||
draft commits, so that only explicitly added reviewers will see them. These
|
||||
private changes, so that only explicitly added reviewers will see them. These
|
||||
sorts of patches are frequently posted as ideas or RFCs for the community
|
||||
to look at. To push a draft, use the command:
|
||||
git push origin HEAD:refs/drafts/master
|
||||
to look at. To push a private change, use the command:
|
||||
git push origin HEAD:refs/for/master%private
|
||||
|
||||
* Multiple push options can be combined:
|
||||
git push origin HEAD:refs/for/master%private,wip,topic=experiment
|
||||
|
||||
* Respond to anyone who has taken the time to review your patches, even if
|
||||
it's just to say that you disagree. While it may seem annoying to address a
|
||||
@ -205,7 +209,7 @@ would be a good reviewer, look in the MAINTAINERS file or git history of
|
||||
the files that you’ve changed, and add those people.
|
||||
|
||||
* Familiarize yourself with the coreboot [commit message
|
||||
guidelines](http://www.coreboot.org/Git#Commit_messages), before pushing
|
||||
guidelines](https://www.coreboot.org/Git#Commit_messages), before pushing
|
||||
patches. This will help to keep annoying requests to fix your commit
|
||||
message to a minimum.
|
||||
|
||||
@ -251,8 +255,8 @@ The script 'util/gitconfig/rebase.sh' can be used to help automate this.
|
||||
Other tags such as 'Commit-Queue' can simply be removed.
|
||||
|
||||
|
||||
Expectations contributors should have:
|
||||
--------------------------------------
|
||||
Expectations contributors should have
|
||||
-------------------------------------
|
||||
* Don't expect that people will review your patch unless you ask them to.
|
||||
Adding other people as reviewers is the easiest way. Asking for reviews for
|
||||
individual patches in the IRC channel, or by sending a direct request to an
|
8
Documentation/getting_started/index.md
Normal file
@ -0,0 +1,8 @@
|
||||
# Getting Started
|
||||
|
||||
* [Build System](build_system.md)
|
||||
* [Submodules](submodules.md)
|
||||
* [Kconfig](kconfig.md)
|
||||
* [Gerrit Guidelines](gerrit_guidelines.md)
|
||||
* [Documentation License](license.md)
|
||||
* [Writing Documentation](writing_documentation.md)
|
164
Documentation/getting_started/license.md
Normal file
@ -0,0 +1,164 @@
|
||||
# coreboot documentation license
|
||||
|
||||
Files under Documentation/ are licensed under CC-BY 4.0 terms, printed below.
|
||||
As an exception, files under Documentation/ with a history older than 2017-05-24
|
||||
might be under different licenses (but should be cleared up ASAP).
|
||||
|
||||
## Attribution 4.0 International
|
||||
|
||||
Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
|
||||
|
||||
### Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
|
||||
|
||||
* __Considerations for licensors:__ Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. [More considerations for licensors](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensors).
|
||||
|
||||
* __Considerations for the public:__ By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. [More considerations for the public](http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensees).
|
||||
|
||||
## Creative Commons Attribution 4.0 International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
|
||||
|
||||
### Section 1 – Definitions.
|
||||
|
||||
a. __Adapted Material__ means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
|
||||
|
||||
b. __Adapter's License__ means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. __Copyright and Similar Rights__ means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
|
||||
|
||||
d. __Effective Technological Measures__ means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
|
||||
|
||||
e. __Exceptions and Limitations__ means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
|
||||
|
||||
f. __Licensed Material__ means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
|
||||
|
||||
g. __Licensed Rights__ means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
h. __Licensor__ means the individual(s) or entity(ies) granting rights under this Public License.
|
||||
|
||||
i. __Share__ means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
|
||||
|
||||
j. __Sui Generis Database Rights__ means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
|
||||
|
||||
k. __You__ means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
|
||||
|
||||
### Section 2 – Scope.
|
||||
|
||||
a. ___License grant.___
|
||||
|
||||
1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
A. reproduce and Share the Licensed Material, in whole or in part; and
|
||||
|
||||
B. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. __Exceptions and Limitations.__ For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
|
||||
|
||||
3. __Term.__ The term of this Public License is specified in Section 6(a).
|
||||
|
||||
4. __Media and formats; technical modifications allowed.__ The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
|
||||
|
||||
5. __Downstream recipients.__
|
||||
|
||||
A. __Offer from the Licensor – Licensed Material.__ Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
|
||||
|
||||
B. __No downstream restrictions.__ You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
|
||||
|
||||
6. __No endorsement.__ Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. ___Other rights.___
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties.
|
||||
|
||||
### Section 3 – License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the following conditions.
|
||||
|
||||
a. ___Attribution.___
|
||||
|
||||
1. If You Share the Licensed Material (including in modified form), You must:
|
||||
|
||||
A. retain the following if it is supplied by the Licensor with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
|
||||
|
||||
B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
|
||||
|
||||
C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
|
||||
|
||||
4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License.
|
||||
|
||||
### Section 4 – Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
|
||||
|
||||
### Section 5 – Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. __Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.__
|
||||
|
||||
b. __To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.__
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
|
||||
|
||||
### Section 6 – Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
|
||||
|
||||
### Section 7 – Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
|
||||
|
||||
### Section 8 – Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
|
||||
|
||||
> Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at [creativecommons.org/policies](http://creativecommons.org/policies), Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
|
||||
>
|
||||
> Creative Commons may be contacted at creativecommons.org
|
||||
|
110
Documentation/getting_started/writing_documentation.md
Normal file
@ -0,0 +1,110 @@
|
||||
# coreboot documentation guidelines
|
||||
|
||||
> Documentation is like sex: when it is good, it is very, very good;
|
||||
> and when it is bad, it is better than nothing.
|
||||
|
||||
That said please always try to write documentation! One problem in the
|
||||
firmware development is the missing documentation. In this document
|
||||
you will get a brief introduction how to write, submit and publish
|
||||
documenation to coreboot.
|
||||
|
||||
## Preparations
|
||||
|
||||
coreboot uses [Sphinx] documentation tool. We prefer the markdown format
|
||||
over reStructuredText so only embedded ReST is supported. Checkout the
|
||||
[Markdown Guide] for more information.
|
||||
|
||||
### Install Sphinx
|
||||
|
||||
Please follow this official [guide] to install sphinx.
|
||||
You will also need python-recommonmark for sphinx to be able to handle
|
||||
markdown documenation.
|
||||
|
||||
The recommended version is sphinx 1.7.7, sphinx_rtd_theme 0.4.1 and
|
||||
recommonmark 0.4.0.
|
||||
|
||||
### Optional
|
||||
|
||||
Install [shpinx-autobuild] for rebuilding markdown/rst sources on the fly!
|
||||
|
||||
## Basic and simple rules
|
||||
|
||||
The following rules should be followed in order to get it at least reviewed
|
||||
on [review.coreboot.org].
|
||||
|
||||
Documentation:
|
||||
|
||||
1. Must be written in **markdown** with **embedded reStructuredText**
|
||||
format.
|
||||
2. Must be written in **English**.
|
||||
3. Must be placed into **Documentation/** directory subfolder.
|
||||
4. Should follow the same directory structure as **src/** when practical.
|
||||
5. Must be referenced from within other markdown files
|
||||
6. The commit must follow the [Gerrit Guidelines].
|
||||
7. Must have all **lowercase filenames**.
|
||||
8. Running text should have a visible width of about **72 chars**.
|
||||
9. Should not **duplicate** documentation, but reference it instead.
|
||||
10. Must not include the same picture in multiple markdown files.
|
||||
11. Images should be kept small. They should be under 700px in width, as
|
||||
the current theme doesn't allow bigger images.
|
||||
12. Shouldn't cover implementation details; for details, the code is the
|
||||
reference.
|
||||
|
||||
## Referencing markdown documents
|
||||
|
||||
Starting with Sphinx 1.6 recommonmark's *auto_doc_ref* feature is broken.
|
||||
To reference documents use the TOC tree or inline RST code.
|
||||
|
||||
## Markdown and Tables
|
||||
|
||||
Under Sphinx markdown tables are not supported. Therefore you can use following
|
||||
code block to write tables in reStructuredText and embed them into the markdown:
|
||||
|
||||
```eval_rst
|
||||
+------------+------------+-----------+
|
||||
| Header 1 | Header 2 | Header 3 |
|
||||
+============+============+===========+
|
||||
| body row 1 | column 2 | column 3 |
|
||||
+------------+------------+-----------+
|
||||
| body row 2 | Cells may span columns.|
|
||||
+------------+------------+-----------+
|
||||
| body row 3 | Cells may | - Cells |
|
||||
+------------+ span rows. | - contain |
|
||||
| body row 4 | | - blocks. |
|
||||
+------------+------------+-----------+
|
||||
``` #just a code block is enough
|
||||
|
||||
## TocTree
|
||||
|
||||
To make sure that all documents are included into the final documentation, you
|
||||
must reference each document from at least one *toctree*. The *toctree* must
|
||||
only reference files in the same folder or in subfolders !
|
||||
To create a toctree, simply use a bullet list or numbered list with a single
|
||||
reference. References in regular text aren't considered as *toctree* .
|
||||
This feature is enabled by recommonmark's *enable_auto_toc_tree* .
|
||||
|
||||
**Example toctree:**
|
||||
|
||||
```
|
||||
* [Chapter 1](chapter1.md)
|
||||
* [Chapter 2](chapter2.md)
|
||||
* [Subchapter](sub/index.md)
|
||||
```
|
||||
|
||||
```
|
||||
1. [Chapter 1](chapter1.md)
|
||||
2. [Chapter 2](chapter2.md)
|
||||
```
|
||||
|
||||
If you do only reference the document, but do not include it in any toctree,
|
||||
you'll see the following warning:
|
||||
**WARNING: document isn't included in any toctree**
|
||||
|
||||
[coreboot]: https://coreboot.org
|
||||
[Documentation]: https://review.coreboot.org/cgit/coreboot.git/tree/Documentation
|
||||
[shpinx-autobuild]: https://github.com/GaretJax/sphinx-autobuild
|
||||
[guide]: http://www.sphinx-doc.org/en/stable/install.html
|
||||
[Sphinx]: http://www.sphinx-doc.org/en/master/
|
||||
[Markdown Guide]: https://www.markdownguide.org/
|
||||
[Gerrit Guidelines]: https://doc.coreboot.org/gerrit_guidelines.html
|
||||
[review.coreboot.org]: https://review.coreboot.org
|
127
Documentation/gfx/libgfxinit.md
Normal file
@ -0,0 +1,127 @@
|
||||
libgfxinit - Native Graphics Initialization
|
||||
===========================================
|
||||
|
||||
Introduction and Current State in coreboot
|
||||
------------------------------------------
|
||||
|
||||
*libgfxinit* is a library of full-featured graphics initialization
|
||||
(aka. modesetting) drivers. It's implemented in SPARK (a subset of
|
||||
Ada with formal verification features). While not restricted to in
|
||||
any way, it currently only supports Intel's integrated gfx control-
|
||||
lers (GMA).
|
||||
|
||||
Currently, it supports the Intel Core i3/i5/i7 processor line and
|
||||
will support HDMI and DP on the Atom successor Apollo Lake. At the
|
||||
time of writing, Sandy Bridge, Ivy Bridge, and Haswell are veri-
|
||||
fied to work within *coreboot*.
|
||||
|
||||
GMA: Framebuffer Configuration
|
||||
------------------------------
|
||||
|
||||
*coreboot* supports two different framebuffer setups. The default
|
||||
enables the legacy VGA plane in textmode. Due to legacy hardware
|
||||
constraints, only the first found display is enabled in this mode.
|
||||
(cf. `src/drivers/intel/gma/text_fb/gma.adb`).
|
||||
|
||||
The second option sets up a high-resolution framebuffer with the
|
||||
native resolution of the display if only one is detected, or the
|
||||
smallest of all resolutions (per dimension) if multiple displays
|
||||
are detected. This option is selected by
|
||||
`CONFIG_FRAMEBUFFER_KEEP_VESA_MODE`.
|
||||
(cf. `src/drivers/intel/gma/hires_fb/gma.adb`).
|
||||
|
||||
In any case, a smaller framebuffer is up-scaled to each display's
|
||||
native resolution while keeping aspect ratio.
|
||||
|
||||
GMA: Hook-up in Chipset Initialization
|
||||
--------------------------------------
|
||||
|
||||
Both configurations described above implement a procedure
|
||||
`GMA.gfxinit()`:
|
||||
|
||||
procedure gfxinit (lightup_ok : out int);
|
||||
|
||||
This procedure is exported as the C function `gma_gfxinit()` as
|
||||
follows:
|
||||
|
||||
void gma_gfxinit(int *lightup_ok);
|
||||
|
||||
* `lightup_ok`: returns whether the initialization succeeded `1` or
|
||||
failed `0`. Currently, only the case that no display
|
||||
could be found counts as failure. A failure at a la-
|
||||
ter stage (e.g. failure to train a DP) is not propa-
|
||||
gated.
|
||||
|
||||
GMA: Per Board Configuration
|
||||
----------------------------
|
||||
|
||||
There are a few Kconfig symbols to consider. To indicate that a
|
||||
board can initialize graphics through *libgfxinit*:
|
||||
|
||||
select MAINBOARD_HAS_LIBGFXINIT
|
||||
|
||||
Internal ports share some hardware blocks (e.g. backlight, panel
|
||||
power sequencer). Therefore, each board has to select either eDP
|
||||
or LVDS as the internal port, if any:
|
||||
|
||||
select GFX_GMA_INTERNAL_IS_EDP # the default, or
|
||||
select GFX_GMA_INTERNAL_IS_LVDS
|
||||
|
||||
Boards with a DVI-I connector share the DDC (I2C) pins for both
|
||||
analog and digital displays. In this case, *libgfxinit* needs to
|
||||
know through which interface the EDID can be queried:
|
||||
|
||||
select GFX_GMA_ANALOG_I2C_HDMI_B # or
|
||||
select GFX_GMA_ANALOG_I2C_HDMI_C # or
|
||||
select GFX_GMA_ANALOG_I2C_HDMI_D
|
||||
|
||||
Beside Kconfig options, *libgfxinit* needs to know which ports are
|
||||
implemented on a board and should be probed for displays. The mapping
|
||||
between the physical ports and these entries depends on the hardware
|
||||
implementation and can be recovered by testing or studying the output
|
||||
of `intelvbttool` or `intel_vbt_decode`.
|
||||
Each board has to implement the package `GMA.Mainboard` with a list:
|
||||
|
||||
ports : HW.GFX.GMA.Display_Probing.Port_List;
|
||||
|
||||
or a function returning such a list:
|
||||
|
||||
function ports return HW.GFX.GMA.Display_Probing.Port_List;
|
||||
|
||||
You can select from the following Ports:
|
||||
|
||||
type Port_Type is
|
||||
(Disabled, -- optionally terminates the list
|
||||
Internal, -- either eDP or LVDS as selected in Kconfig
|
||||
DP1,
|
||||
DP2,
|
||||
DP3,
|
||||
HDMI1, -- also DVI-D, or HDMI over DP++
|
||||
HDMI2,
|
||||
HDMI3,
|
||||
Analog); -- legacy VGA port, or analog part of DVI-I
|
||||
|
||||
Each `DPx` and `HDMIx` pair share pins. If they are exposed as DP
|
||||
ports, they are usually DP++ (aka. dual-mode DP) ports that can
|
||||
also output HDMI signals through passive adapters. In this case,
|
||||
both DPx and HDMIx should be listed.
|
||||
|
||||
A good example is the mainboard Kontron/KTQM77, it features two
|
||||
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 can be enabled. It defines `ports` as follows:
|
||||
|
||||
ports : constant Port_List :=
|
||||
(DP2,
|
||||
DP3,
|
||||
HDMI1,
|
||||
HDMI2,
|
||||
HDMI3,
|
||||
Analog,
|
||||
Internal,
|
||||
others => Disabled);
|
||||
|
||||
The `GMA.gfxinit()` procedure probes for display EDIDs in the
|
||||
given order until all available pipes are taken. That's 1 pipe
|
||||
in VGA textmode, 2 pipes in high-resolution mode until Sandy
|
||||
Bridge, 3 pipes from Ivy Bridge on.
|
@ -1,26 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>coreboot Documentation</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>coreboot Documentation</h1>
|
||||
<ul>
|
||||
<li><a target="_blank" href="https://www.coreboot.org/Lesson1">Lesson 1</a></li>
|
||||
<li><a href="gerrit_guidelines.md">Gerrit Guidelines</a></li>
|
||||
<li><a href="timestamp.md">Timestamp</a></li>
|
||||
<li>Documentation directory<a target="_blank" href=:https://review.coreboot.org/cgit/coreboot.git/tree/Documentation">listing</a></li>
|
||||
</ul>
|
||||
|
||||
<h1>Chipset Documentation</h1>
|
||||
<ul>
|
||||
<li><a target="_blank" href="Intel/index.html">Intel</a></li>
|
||||
<li><a target="_blank" href="AMD-S3.txt">AMD S3</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<hr>
|
||||
<p>Modified: 17 June 2016</p>
|
||||
</body>
|
||||
</html>
|
188
Documentation/index.md
Normal file
@ -0,0 +1,188 @@
|
||||
# Welcome to the coreboot documentation
|
||||
|
||||
This is the developer documentation for [coreboot](https://coreboot.org).
|
||||
It is built from Markdown files in the
|
||||
[Documentation](https://review.coreboot.org/cgit/coreboot.git/tree/Documentation)
|
||||
directory in the source code.
|
||||
|
||||
## Purpose of coreboot
|
||||
|
||||
coreboot is a project to develop open source boot firmware for various
|
||||
architectures. Its design philosophy is to do the bare minimum necessary to
|
||||
ensure that hardware is usable and then pass control to a different program
|
||||
called the _payload_.
|
||||
|
||||
### Separation of concerns
|
||||
|
||||
The payload can then provide user interfaces, file system drivers,
|
||||
various policies etc. to load the OS. Through this separation of concerns
|
||||
coreboot maximizes reusability of the complicated and fundamental hardware
|
||||
initialization routines across many different use cases, no matter if
|
||||
they provide standard interfaces or entirely custom boot flows.
|
||||
|
||||
Popular [payloads](payloads.md) in use with coreboot are SeaBIOS,
|
||||
which provides PCBIOS services, Tianocore, which provides UEFI services,
|
||||
GRUB2, the bootloader used by many Linux distributions, or depthcharge,
|
||||
a custom boot loader used on Chromebooks.
|
||||
|
||||
### No resident services (if possible)
|
||||
|
||||
Ideally coreboot completely hands over control to the payload with no
|
||||
piece of coreboot remaining resident in the system, or even available
|
||||
for callback. Given the reality of contemporary computer design,
|
||||
there's often a small piece that survives for the whole runtime of
|
||||
the computer. It runs in a highly privileged CPU mode (e.g. SMM on x86)
|
||||
and provides some limited amount of services to the OS. But here, too,
|
||||
coreboot aims to keep everything at the minimum possible, both in scope
|
||||
(e.g. services provided) and code size.
|
||||
|
||||
### No specification of its own
|
||||
|
||||
coreboot uses a very minimal interface to the payload, and otherwise
|
||||
doesn't impose any standards on the ecosystem. This is made possible by
|
||||
separating out concerns (interfaces and resident services are delegated
|
||||
to the payload), but it's also a value that is deeply ingrained in the
|
||||
project. We fearlessly rip out parts of the architecture and remodel it
|
||||
when a better way of doing the same was identified.
|
||||
|
||||
### One tree for everything
|
||||
|
||||
Another difference to various other firmware projects is that we try
|
||||
to avoid fragmentation: the traditional development model of firmware
|
||||
is one of "set and forget" in which some code base is copied, adapted
|
||||
for the purpose at hands, shipped and only touched again if there's an
|
||||
important fix to do.
|
||||
|
||||
All newer development happens on another copy of some code base without
|
||||
flowing back to any older copy, and so normally there's a huge amount
|
||||
of fragmentation.
|
||||
|
||||
In coreboot, we try to keep everything in a single source tree, and
|
||||
lift up older devices when we change something fundamentally. That way,
|
||||
new and old devices benefit alike from new development in the common parts.
|
||||
|
||||
There's a downside to that: Some devices might have no maintainer anymore
|
||||
who could ensure that coreboot is still functional for them after a big
|
||||
rework, or maybe a rework even requires knowledge that doesn't exist
|
||||
anymore within the project (for example because the developer moved on
|
||||
to do something else).
|
||||
|
||||
In this case, we announce the deprecation of the device and defer the big
|
||||
rework until the deprecation period passed, typically 6-12 months. This
|
||||
gives interested developers a chance to step in and bring devices up to
|
||||
latest standards.
|
||||
|
||||
While without this deprecation mechanism we could inflate the number
|
||||
of supported devices (probably 300+), only a tiny fraction of them
|
||||
would even work, which helps nobody.
|
||||
|
||||
## Scope of the coreboot project
|
||||
|
||||
coreboot as a project is closer to the Linux kernel than to most
|
||||
user level programs. One place where this becomes apparent is the
|
||||
distribution mechanism: The project itself only provides source code
|
||||
and does not ship ready-to-install coreboot-based firmware binaries.
|
||||
|
||||
What the project distributes, even if - strictly speaking - it's not
|
||||
part of the project, is a collection of vendor binaries (that we call
|
||||
"blobs") that are redistributable. They cover the parts of hardware init
|
||||
that we haven't managed to open up, and while some hardware requires them,
|
||||
there's still hardware that can boot without any such binary components.
|
||||
|
||||
The build system can integrate them into the build automatically if
|
||||
required, but that requires explicit opt-in and downloads a separate
|
||||
repository to ensure that the distinction remains clear.
|
||||
|
||||
There are various [distributions](distributions.md), some shipping
|
||||
coreboot with their hardware (e.g. Purism or Chromebooks), others
|
||||
providing after-market images for various devices (e.g. Libreboot,
|
||||
MrChromebox).
|
||||
|
||||
If you want to use coreboot on your system, that's great!
|
||||
|
||||
Please note that the infrastructure around coreboot.org is built for
|
||||
development purposes. We gladly help out users through our communication
|
||||
channels, but we also expect a "firmware developer mindset": If compiling
|
||||
your own firmware and, at some point, recovering from a bad flash by
|
||||
hooking wires onto chips in your computer sounds scary to you, you're
|
||||
right, as it is.
|
||||
|
||||
If that's _way_ beyond your comfort zone, consider looking into the
|
||||
various distributions, as they typically provide pre-tested binaries
|
||||
which massively reduces the risk that the binary you write to flash is
|
||||
one that won't boot the system (with the consequence that to get it to work
|
||||
again, you'll need to attach various tools to various chips)
|
||||
|
||||
## The coreboot community
|
||||
|
||||
If you're interested in getting your hands dirty (incl. potentially wiring
|
||||
up an external flasher to your computer), you've come to the right place!
|
||||
|
||||
We have various [forums](community/forums.md) where we discuss and coordinate
|
||||
our activities, review patches, and help out each other. To
|
||||
help promote a positive atmosphere, we established a [Code of
|
||||
Conduct](community/code_of_conduct.md). We invested a lot of time
|
||||
to balance it out, so please keep it in mind when engaging with the
|
||||
coreboot community.
|
||||
|
||||
Every now and then, coreboot is present in one way or another at
|
||||
[conferences](community/conferences.md). If you're around, come and
|
||||
say hello!
|
||||
|
||||
## Getting the source code
|
||||
|
||||
coreboot is primarily developed in the
|
||||
[git](https://review.coreboot.org/cgit/coreboot.git) version control
|
||||
system, using [Gerrit](https://review.coreboot.org) to manage
|
||||
contributions and code review.
|
||||
|
||||
In general we try to keep the `master` branch in the repository functional
|
||||
for all hardware we support. So far, the only guarantee we can make is
|
||||
that the master branch will (nearly) always build for all boards in a
|
||||
standard configuration.
|
||||
|
||||
However, we're continually working on improvements to our infrastructure to
|
||||
get better in that respect, e.g. by setting up boot testing facilities. This
|
||||
is obviously more complex than regular integration testing, so progress
|
||||
is slow.
|
||||
|
||||
### What our releases mean
|
||||
|
||||
We also schedule two source code releases every year, around April and
|
||||
October. These releases see some very limited testing and mostly serve
|
||||
as synchronization points for deprecation notices and for other projects
|
||||
such as external distributions.
|
||||
|
||||
This approach and terminology differs somewhat from how other projects handle
|
||||
releases where releases are well-tested artifacts and the development
|
||||
repository tends to be unstable. The "rolling release" model of some projects,
|
||||
for example OpenBSD, is probably the closest cousin of our approach.
|
||||
|
||||
Contents:
|
||||
|
||||
* [Getting Started](getting_started/index.md)
|
||||
* [Rookie Guide](lessons/index.md)
|
||||
* [Coding Style](coding_style.md)
|
||||
* [Project Ideas](contributing/project_ideas.md)
|
||||
* [Code of Conduct](community/code_of_conduct.md)
|
||||
* [Community forums](community/forums.md)
|
||||
* [coreboot at conferences](community/conferences.md)
|
||||
* [Security](security.md)
|
||||
* [Payloads](payloads.md)
|
||||
* [Distributions](distributions.md)
|
||||
* [Timestamps](timestamp.md)
|
||||
* [Intel IFD Binary Extraction](Binary_Extraction.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)
|
||||
* [Architecture-specific documentation](arch/index.md)
|
||||
* [Northbridge-specific documentation](northbridge/index.md)
|
||||
* [System on Chip-specific documentation](soc/index.md)
|
||||
* [Mainboard-specific documentation](mainboard/index.md)
|
||||
* [Payload-specific documentation](lib/payloads/index.md)
|
||||
* [SuperIO-specific documentation](superio/index.md)
|
||||
* [Vendorcode-specific documentation](vendorcode/index.md)
|
||||
* [Utilities](util.md)
|
||||
* [Release notes for past releases](releases/index.md)
|
||||
* [Flashing firmware tutorial](flash_tutorial/index.md)
|
4
Documentation/lessons/index.md
Normal file
@ -0,0 +1,4 @@
|
||||
# Rookie Guide
|
||||
|
||||
* [Lesson 1: Starting from scratch](lesson1.md)
|
||||
* [Lesson 2: Submitting a patch to coreboot.org](lesson2.md)
|
169
Documentation/lessons/lesson1.md
Normal file
@ -0,0 +1,169 @@
|
||||
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.
|
291
Documentation/lessons/lesson2.md
Normal file
@ -0,0 +1,291 @@
|
||||
# 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.
|
167
Documentation/lib/payloads/fit.md
Normal file
@ -0,0 +1,167 @@
|
||||
# Flattened uImage Tree documentation
|
||||
|
||||
[uImage.FIT] is the new format used for uImage payloads developed by
|
||||
[U-boot].
|
||||
|
||||
## Supported architectures
|
||||
|
||||
* aarch64
|
||||
|
||||
## Supported FIT sections
|
||||
|
||||
The FIT can contain multiple sections, each holding a unique
|
||||
kernel, initrd or config. Out of the sections one kernel and
|
||||
one initrd is chosen, depending on the matching config.
|
||||
|
||||
The config is selected depending on the compat string.
|
||||
|
||||
The section must be named in order to be found by the FIT parser:
|
||||
|
||||
* kernel
|
||||
* fdt
|
||||
* ramdisk
|
||||
|
||||
## Architecture specifics
|
||||
|
||||
The FIT parser needs architecure support.
|
||||
### aarch64
|
||||
The source code can be found in `src/arch/arm64/fit_payload.c`.
|
||||
|
||||
On aarch64 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 architectures aren't supported.
|
||||
|
||||
## Supported compression
|
||||
|
||||
The FIT image has to be included uncompressed into the CBFS. The sections
|
||||
inside the FIT image can use different compression schemes.
|
||||
|
||||
Supported compression algorithms:
|
||||
* LZMA
|
||||
* LZ4
|
||||
* none
|
||||
|
||||
## Compat string
|
||||
|
||||
The config entries contain a compatible string, that is used to find a
|
||||
matching config.
|
||||
|
||||
The following mainboard specific funtions provide the BOARDID and SKUID:
|
||||
|
||||
```c
|
||||
uint32_t board_id(void);
|
||||
```
|
||||
|
||||
```c
|
||||
uint32_t sku_id(void);
|
||||
```
|
||||
|
||||
By default the following compat strings are added:
|
||||
|
||||
* *CONFIG_MAINBOARD_VENDOR*,*CONFIG_MAINBOARD_PART_NUMBER*
|
||||
* *CONFIG_MAINBOARD_VENDOR*,*CONFIG_MAINBOARD_PART_NUMBER*-rev*BOARDID*
|
||||
* *CONFIG_MAINBOARD_VENDOR*,*CONFIG_MAINBOARD_PART_NUMBER*-rev*BOARDID*-sku*SKUID*
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
cavium,cn8100_sff_evb
|
||||
```
|
||||
|
||||
If *board_id()* or *sku_id()* return invalid, the single comapt string isn't added.
|
||||
|
||||
You can add custom compat strings by calling:
|
||||
|
||||
```c
|
||||
fit_add_compat_string(const char *str);
|
||||
```
|
||||
|
||||
If no matching compat string is found, the default config is chosen.
|
||||
|
||||
## Building FIT image
|
||||
|
||||
The FIT image has to be built by calling `mkimage`. You can use
|
||||
the following example configuration:
|
||||
|
||||
```
|
||||
/*
|
||||
* Simple U-Boot uImage source file containing a single kernel and FDT blob
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
/ {
|
||||
description = "Simple image with single Linux kernel and FDT blob";
|
||||
#address-cells = <1>;
|
||||
|
||||
images {
|
||||
kernel {
|
||||
description = "Vanilla Linux kernel";
|
||||
data = /incbin/("Image.lzma");
|
||||
type = "kernel";
|
||||
arch = "arm64";
|
||||
os = "linux";
|
||||
compression = "lzma";
|
||||
load = <0x80000>;
|
||||
entry = <0x80000>;
|
||||
hash-1 {
|
||||
algo = "crc32";
|
||||
};
|
||||
};
|
||||
fdt-1 {
|
||||
description = "Flattened Device Tree blob";
|
||||
data = /incbin/("target.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm64";
|
||||
compression = "none";
|
||||
hash-1 {
|
||||
algo = "crc32";
|
||||
};
|
||||
};
|
||||
ramdisk-1 {
|
||||
description = "Compressed Initramfs";
|
||||
data = /incbin/("initramfs.cpio.xz");
|
||||
type = "ramdisk";
|
||||
arch = "arm64";
|
||||
os = "linux";
|
||||
compression = "none";
|
||||
load = <00000000>;
|
||||
entry = <00000000>;
|
||||
hash-1 {
|
||||
algo = "sha1";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
configurations {
|
||||
default = "conf-1";
|
||||
conf-1 {
|
||||
description = "Boot Linux kernel with FDT blob";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt-1";
|
||||
ramdisk = "ramdisk-1";
|
||||
};
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
Save it as ITS file `config.its` along with the other files defined here:
|
||||
* target.dtb
|
||||
* initramfs.cpio.xz
|
||||
* Image.lzma
|
||||
|
||||
Generate the `uImage` that will be included into the CBFS by calling
|
||||
|
||||
```bash
|
||||
mkimage -f config.its uImage
|
||||
```
|
||||
|
||||
The generated file includes a compressed initrd **initramfs.cpio.xz**, which
|
||||
will be decompressed by the Linux kernel, a compressed kernel **Image.lzma**,
|
||||
which will be decompressed by the FIT loader and an uncompressed devicetree blob.
|
||||
|
||||
[uImage.FIT]: https://raw.githubusercontent.com/u-boot/u-boot/master/doc/uImage.FIT/howto.txt
|
||||
[U-Boot]: https://www.denx.de/wiki/U-Boot
|
11
Documentation/lib/payloads/index.md
Normal file
@ -0,0 +1,11 @@
|
||||
# Payload-specific documentation
|
||||
|
||||
This section contains documentation about coreboot on specific payloads.
|
||||
|
||||
Payloads are run after coreboot has initialized the hardware.
|
||||
coreboot supports multiple payloads, depending on the architecture of the
|
||||
selected mainboard.
|
||||
|
||||
## FIT
|
||||
|
||||
- [uImage.FIT support](fit.md)
|
133
Documentation/mainboard/asrock/h81m-hds.md
Normal file
@ -0,0 +1,133 @@
|
||||
# ASRock H81M-HDS
|
||||
|
||||
This page describes how to run coreboot on the [ASRock H81M-HDS].
|
||||
|
||||
## Required proprietary blobs
|
||||
|
||||
```eval_rst
|
||||
Please see :doc:`../../northbridge/intel/haswell/mrc.bin`.
|
||||
```
|
||||
|
||||
## Building coreboot
|
||||
|
||||
A fully working image should be possible just by setting your MAC
|
||||
address and obtaining the Haswell mrc. You can set the basic config
|
||||
with the following commands. However, it is strongly advised to use
|
||||
`make menuconfig` afterwards (or instead), so that you can see all of
|
||||
the settings.
|
||||
|
||||
```bash
|
||||
make distclean # Note: this will remove your current config, if it exists.
|
||||
touch .config
|
||||
./util/scripts/config --enable VENDOR_ASROCK
|
||||
./util/scripts/config --enable BOARD_ASROCK_H81M_HDS
|
||||
./util/scripts/config --enable HAVE_MRC
|
||||
./util/scripts/config --set-str REALTEK_8168_MACADDRESS "xx:xx:xx:xx:xx:xx" # Fill this in!
|
||||
make olddefconfig
|
||||
```
|
||||
|
||||
If you don't plan on using coreboot's serial console to collect logs,
|
||||
you might want to disable it at this point (`./util/scripts/config
|
||||
--disable CONSOLE_SERIAL`). It should reduce the boot time by several
|
||||
seconds. 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).
|
||||
|
||||
The following command may be used to flash coreboot:
|
||||
|
||||
```bash
|
||||
sudo flashrom -p internal --ifd -i bios --noverify-all -w coreboot.rom
|
||||
```
|
||||
|
||||
The use of `--noverify-all` is required since the Management Engine
|
||||
region is not readable even by the host.
|
||||
|
||||
### External programming
|
||||
|
||||
The flash chip is a 4 MiB socketed DIP-8 chip. Specifically, it's a
|
||||
Winbond W25Q32FV, whose datasheet can be found [here][W25Q32FV].
|
||||
The chip is located to the bottom right-hand side of the board. For
|
||||
a precise location, refer to section 1.4 (Motherboard Layout) of the
|
||||
[board manual], where the chip is labelled "32Mb 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 until the OS reinitialises the display.
|
||||
|
||||
- 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, but the required driver doesn't exist
|
||||
in coreboot. The `coretemp` driver can still be used for accurate CPU
|
||||
temperature readings from an OS.
|
||||
|
||||
```eval_rst
|
||||
Please also see :doc:`../../northbridge/intel/haswell/known-issues`.
|
||||
```
|
||||
|
||||
## Untested
|
||||
|
||||
- parallel port
|
||||
- PS/2 keyboard
|
||||
- EHCI debug
|
||||
- TPM
|
||||
- infrared module
|
||||
- chassis intrusion header
|
||||
- chassis speaker header
|
||||
|
||||
## Working
|
||||
|
||||
- USB
|
||||
- S3 suspend/resume
|
||||
- Gigabit Ethernet
|
||||
- integrated graphics
|
||||
- PCIe
|
||||
- SATA
|
||||
- PS/2 mouse
|
||||
- serial port
|
||||
- hardware monitor (see [Known issues](#known-issues))
|
||||
- onboard audio
|
||||
- front panel audio
|
||||
- initialisation with Haswell mrc version 1.6.1 build 2
|
||||
- graphics init with libgfxinit (see [Known issues](#known-issues))
|
||||
- flashrom under the vendor firmware
|
||||
- flashrom under coreboot
|
||||
- Wake-on-LAN
|
||||
- Using `me_cleaner`
|
||||
|
||||
## Technology
|
||||
|
||||
```eval_rst
|
||||
+------------------+--------------------------------------------------+
|
||||
| Northbridge | :doc:`../../northbridge/intel/haswell/index` |
|
||||
+------------------+--------------------------------------------------+
|
||||
| Southbridge | Intel Lynx Point (H81) |
|
||||
+------------------+--------------------------------------------------+
|
||||
| CPU | Intel Haswell (LGA1150) |
|
||||
+------------------+--------------------------------------------------+
|
||||
| Super I/O | Nuvoton NCT6776 |
|
||||
+------------------+--------------------------------------------------+
|
||||
| EC | None |
|
||||
+------------------+--------------------------------------------------+
|
||||
| Coprocessor | Intel Management Engine |
|
||||
+------------------+--------------------------------------------------+
|
||||
```
|
||||
|
||||
[ASRock H81M-HDS]: https://www.asrock.com/mb/Intel/H81M-HDS/
|
||||
[W25Q32FV]: https://www.winbond.com/resource-files/w25q32fv%20revi%2010202015.pdf
|
||||
[flashrom]: https://flashrom.org/Flashrom
|
||||
[Board manual]: http://asrock.pc.cdn.bitgravity.com/Manual/H81M-HDS.pdf
|
111
Documentation/mainboard/asus/p8h61-m_lx.md
Normal file
@ -0,0 +1,111 @@
|
||||
# ASUS P8H61-M LX
|
||||
|
||||
This page describes how to run coreboot on the [ASUS P8H61-M LX].
|
||||
|
||||
## 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 |
|
||||
+---------------------+------------+
|
||||
```
|
||||
|
||||
### 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
|
||||
|
||||
- S3 suspend/resume does not work. This is the case for both coreboot
|
||||
and the vendor firmware, tested with Linux 4.9, Linux 4.17, and
|
||||
OpenBSD 6.3. Interestingly, it is possible to resume from S3 with
|
||||
Linux, but _only_ if the resume is started immediately after the
|
||||
suspend.
|
||||
|
||||
- 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.
|
||||
|
||||
## Untested
|
||||
|
||||
- PCIe graphics
|
||||
- parallel port
|
||||
- PS/2 keyboard
|
||||
- EHCI debug
|
||||
- S/PDIF audio
|
||||
|
||||
## Working
|
||||
|
||||
- USB
|
||||
- Gigabit Ethernet
|
||||
- integrated graphics
|
||||
- PCIe
|
||||
- SATA
|
||||
- PS/2 mouse
|
||||
- serial port
|
||||
- hardware monitor (see [Known issues](#known-issues) for caveats)
|
||||
- onboard audio
|
||||
- front panel audio
|
||||
- native raminit (2 x 2GB, DDR3-1333)
|
||||
- native graphics init (libgfxinit)
|
||||
- flashrom under the vendor firmware
|
||||
- flashrom under coreboot
|
||||
- Wake-on-LAN
|
||||
- Using `me_cleaner` (add `-S --whitelist EFFS,FCRS` if not using
|
||||
`me_cleaner` as part of the coreboot build process).
|
||||
|
||||
## 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
|
||||
|
||||
- [Board manual]
|
||||
- [Flash chip datasheet][W25Q32BV]
|
||||
|
||||
[ASUS P8H61-M LX]: https://www.asus.com/Motherboards/P8H61M_LX/
|
||||
[W25Q32BV]: https://www.winbond.com/resource-files/w25q32bv_revi_100413_wo_automotive.pdf
|
||||
[flashrom]: https://flashrom.org/Flashrom
|
||||
[Board manual]: http://dlcdnet.asus.com/pub/ASUS/mb/LGA1155/P8H61_M_LX/E6803_P8H61-M_LX.zip
|
BIN
Documentation/mainboard/cavium/cavium_cn81xx_sff_evb.jpg
Normal file
After Width: | Height: | Size: 148 KiB |
76
Documentation/mainboard/cavium/cn8100_sff_evb.md
Normal file
@ -0,0 +1,76 @@
|
||||
# CN81xx Evaluation-board SFF
|
||||
|
||||
## Specs
|
||||
|
||||
* 3 mini PCIe slots
|
||||
* 4 SATA ports
|
||||
* one USB3.0 A connector
|
||||
* 20Pin JTAG
|
||||
* 4 Gigabit Ethernet
|
||||
* 2 SFP+ connectors
|
||||
* PCIe x4 slot
|
||||
* UART over USB
|
||||
* eMMC Flash or MicroSD card slot for on-board storage
|
||||
* 1 Slot with DDR-4 memory with ECC support
|
||||
* SPI flash
|
||||
* MMC and uSD-card
|
||||
|
||||
## Flashing coreboot
|
||||
|
||||
```eval_rst
|
||||
+---------------------+----------------+
|
||||
| Type | Value |
|
||||
+=====================+================+
|
||||
| Socketed flash | no |
|
||||
+---------------------+----------------+
|
||||
| Model | Micron 25Q128A |
|
||||
+---------------------+----------------+
|
||||
| Size | 8 MiB |
|
||||
+---------------------+----------------+
|
||||
| In circuit flashing | no |
|
||||
+---------------------+----------------+
|
||||
| Package | SOIC-8 |
|
||||
+---------------------+----------------+
|
||||
| Write protection | No |
|
||||
+---------------------+----------------+
|
||||
| Dual BIOS feature | No |
|
||||
+---------------------+----------------+
|
||||
| Internal flashing | ? |
|
||||
+---------------------+----------------+
|
||||
```
|
||||
|
||||
## Notes about the hardware
|
||||
|
||||
1. Cavium connected *GPIO10* to a global reset line.
|
||||
It's unclear which chips are connected, but at least the PHY and SATA chips
|
||||
are connected.
|
||||
|
||||
2. The 4 QLMs can be configured using DIP switches (SW1). That means only a
|
||||
subset of of the available connectors is working at time.
|
||||
|
||||
3. The boot source can be configure using DIP switches (SW1).
|
||||
|
||||
4. The core and system clock frequency can be configured using DIP switches
|
||||
(SW3 / SW2).
|
||||
|
||||
5. The JTAG follows Cavium's own protocol. Support for it is missing in
|
||||
OpenOCD. You have to use ARMs official hardware and software.
|
||||
|
||||
## Technology
|
||||
|
||||
```eval_rst
|
||||
+---------------+----------------------------------------+
|
||||
| SoC | :doc:`../../soc/cavium/cn81xx/index` |
|
||||
+---------------+----------------------------------------+
|
||||
| CPU | Cavium ARMv8-Quadcore `CN81XX`_ |
|
||||
+---------------+----------------------------------------+
|
||||
|
||||
.. _CN81XX: https://www.cavium.com/product-octeon-tx-cn80xx-81xx.html
|
||||
|
||||
```
|
||||
|
||||
## Picture
|
||||
|
||||
![][cn81xx_board]
|
||||
|
||||
[cn81xx_board]: cavium_cn81xx_sff_evb.jpg
|
8
Documentation/mainboard/emulation/qemu-riscv.md
Normal file
@ -0,0 +1,8 @@
|
||||
# Qemu RISC-V emulator
|
||||
|
||||
## Building coreboot and running it in Qemu
|
||||
|
||||
- Configure coreboot and run `make` as usual
|
||||
- Run `util/riscv/make-spike-elf.sh build/coreboot.rom build/coreboot.elf` to
|
||||
convert coreboot to an ELF that Qemu can load
|
||||
- Run `qemu-system-riscv64 -M virt -m 1024M -nographic -kernel build/coreboot.elf`
|
23
Documentation/mainboard/emulation/spike-riscv.md
Normal file
@ -0,0 +1,23 @@
|
||||
# Spike RISC-V emulator
|
||||
|
||||
[Spike], also known as riscv-isa-sim, is a commonly used [RISC-V] emulator.
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
- Download `riscv-fesvr` and `riscv-isa-sim` from <https://github.com/riscv/>
|
||||
- Apply the two patches in <https://github.com/riscv/riscv-isa-sim/pull/53>,
|
||||
which are necessary in order to have a serial console
|
||||
- Compile `riscv-fesvr` and then `riscv-isa-sim`
|
||||
|
||||
|
||||
## Building coreboot and running it in Spike
|
||||
|
||||
- Configure coreboot and run `make` as usual
|
||||
- Run `util/riscv/make-spike-elf.sh build/coreboot.rom build/coreboot.elf` to
|
||||
convert coreboot to an ELF that Spike can load
|
||||
- Run `spike -m1024 build/coreboot.elf`
|
||||
|
||||
|
||||
[Spike]: https://github.com/riscv/riscv-isa-sim
|
||||
[RISC-V]: https://riscv.org/
|
75
Documentation/mainboard/foxconn/d41s.md
Normal file
@ -0,0 +1,75 @@
|
||||
# Foxconn D41S
|
||||
|
||||
This page describes how to run coreboot on the [FOXCONN D41S] desktop from [FOXCONN].
|
||||
The D42S, D51S, D52S are compatible boards with the difference being the CPU.
|
||||
|
||||
## Building coreboot
|
||||
|
||||
The default options for this board should result in a fully working image:
|
||||
|
||||
# echo "CONFIG_VENDOR_FOXCONN=y" > .config
|
||||
# echo "CONFIG_BOARD_FOXCONN_D41S=y" >> .config
|
||||
# make olddefconfig && make
|
||||
|
||||
|
||||
## Flashing coreboot
|
||||
|
||||
```eval_rst
|
||||
+---------------------+--------+
|
||||
| Type | Value |
|
||||
+=====================+========+
|
||||
| Socketed flash | yes |
|
||||
+---------------------+--------+
|
||||
| Model | W25X80 |
|
||||
+---------------------+--------+
|
||||
| Size | 1 MiB |
|
||||
+---------------------+--------+
|
||||
| In circuit flashing | yes |
|
||||
+---------------------+--------+
|
||||
| Package | DIP-8 |
|
||||
+---------------------+--------+
|
||||
| Write protection | No |
|
||||
+---------------------+--------+
|
||||
| Dual BIOS feature | No |
|
||||
+---------------------+--------+
|
||||
| Internal flashing | yes |
|
||||
+---------------------+--------+
|
||||
```
|
||||
|
||||
### Internal programming
|
||||
|
||||
The SPI flash can be accessed using [flashrom].
|
||||
|
||||
### External programming
|
||||
|
||||
The easiest to flash externally is to simply extract the SPI flash from its socket.
|
||||
To do this gently take the SPI flash out of its socket and flash with your programmer.
|
||||
|
||||
**NOTE: Don't forget to set the WP# AND HOLD# to 3V.**
|
||||
|
||||
**NOTE2: Make sure to reinsert it in the right direction afterward**
|
||||
|
||||
**Location and orientation of the SPI flash socket**
|
||||
![][d41s_flash]
|
||||
|
||||
[d41s_flash]: d41s_flash.jpg
|
||||
|
||||
## Technology
|
||||
|
||||
```eval_rst
|
||||
+------------------+------------------+
|
||||
| Northbridge | Intel Pinevew |
|
||||
+------------------+------------------+
|
||||
| Southbridge | Intel NM10 |
|
||||
+------------------+------------------+
|
||||
| CPU | model_106cx |
|
||||
+------------------+------------------+
|
||||
| SuperIO | ITE IT8721F |
|
||||
+------------------+------------------+
|
||||
| clockgen (CK505) | ICS 9LPRS525AGLF |
|
||||
+------------------+------------------+
|
||||
```
|
||||
|
||||
[FOXCONN D41S]: http://www.foxconnchannel.com/ProductDetail.aspx?T=motherboard&U=en-us0000481
|
||||
[FOXCONN]: http://www.foxconnchannel.com
|
||||
[Flashrom]: https://flashrom.org/Flashrom
|
BIN
Documentation/mainboard/foxconn/d41s_flash.jpg
Normal file
After Width: | Height: | Size: 126 KiB |
84
Documentation/mainboard/gigabyte/ga-h61m-s2pv.md
Normal file
@ -0,0 +1,84 @@
|
||||
# Gigabyte GA-H61M-S2PV
|
||||
|
||||
This page describes how to run coreboot on the [Gigabyte GA-H61M-S2PV] desktop
|
||||
from [Gigabyte].
|
||||
|
||||
## Flashing coreboot
|
||||
|
||||
```eval_rst
|
||||
+---------------------+------------+
|
||||
| Type | Value |
|
||||
+=====================+============+
|
||||
| Socketed flash | No |
|
||||
+---------------------+------------+
|
||||
| Model | MX25L3206E |
|
||||
+---------------------+------------+
|
||||
| Size | 4 MiB |
|
||||
+---------------------+------------+
|
||||
| In circuit flashing | Yes |
|
||||
+---------------------+------------+
|
||||
| Package | SOIC-8 |
|
||||
+---------------------+------------+
|
||||
| Write protection | No |
|
||||
+---------------------+------------+
|
||||
| Dual BIOS feature | Yes |
|
||||
+---------------------+------------+
|
||||
| Internal flashing | Yes |
|
||||
+---------------------+------------+
|
||||
```
|
||||
|
||||
### Internal programming
|
||||
|
||||
The main SPI flash can be accessed using [flashrom]. The DualBIOS backup flash
|
||||
chip is accessible as well using the `dualbiosindex` programmer parameter.
|
||||
Since the flash recovery mechanism works even with coreboot installed on the
|
||||
main flash chip (it still restores the vendor UEFI though), it is useful to
|
||||
leave the backup chip untouched.
|
||||
|
||||
### Notes about the original firmware
|
||||
|
||||
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
|
||||
flash chip's contents when using the --ifd option. However, this can be easily
|
||||
fixed by reading the IFD with flashrom, editing the correct values into it with
|
||||
ifdtool and then reflashing it.
|
||||
|
||||
Create a layout.txt with the following contents:
|
||||
|
||||
00000000:00000fff fd
|
||||
00180000:003fffff bios
|
||||
00001000:0017ffff me
|
||||
|
||||
After that, simply run:
|
||||
|
||||
```bash
|
||||
sudo flashrom -p internal --ifd -i fd -r ifd.rom
|
||||
ifdtool -n layout.txt ifd.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.
|
||||
If only a reboot is done, the old IFD layout is still seen by flashrom, even if
|
||||
the IFD on the flash chip is correctly defining the new region layout.
|
||||
|
||||
## Technology
|
||||
|
||||
```eval_rst
|
||||
+------------------+--------------------------------------------------+
|
||||
| Northbridge | :doc:`../../northbridge/intel/sandybridge/index` |
|
||||
+------------------+--------------------------------------------------+
|
||||
| Southbridge | bd82x6x |
|
||||
+------------------+--------------------------------------------------+
|
||||
| CPU | model_206ax |
|
||||
+------------------+--------------------------------------------------+
|
||||
| SuperIO | ITE IT8728F |
|
||||
+------------------+--------------------------------------------------+
|
||||
| EC | None |
|
||||
+------------------+--------------------------------------------------+
|
||||
| Coprocessor | Intel ME |
|
||||
+------------------+--------------------------------------------------+
|
||||
```
|
||||
|
||||
[Gigabyte GA-H61M-S2PV]: https://www.gigabyte.com/us/Motherboard/GA-H61M-S2PV-rev-10
|
||||
[Gigabyte]: https://www.gigabyte.com
|
||||
[flashrom]: https://flashrom.org/Flashrom
|
40
Documentation/mainboard/google/dragonegg.md
Normal file
@ -0,0 +1,40 @@
|
||||
# Google Dragonegg (Chromebook)
|
||||
|
||||
This page describes how to run coreboot on the google dragonegg board.
|
||||
|
||||
Dragonegg is based on Intel Ice Lake platform, please refer to below link to get more details
|
||||
```eval_rst
|
||||
:doc:`../../soc/intel/icelake/iceLake_coreboot_development`
|
||||
```
|
||||
|
||||
## Building coreboot
|
||||
|
||||
* Follow build instructions mentioned in Ice Lake document
|
||||
```eval_rst
|
||||
:doc:`../../soc/intel/icelake/iceLake_coreboot_development`
|
||||
```
|
||||
|
||||
* The default options for this board should result in a fully working image:
|
||||
```bash
|
||||
# echo "CONFIG_VENDOR_GOOGLE=y" > .config
|
||||
# echo "CONFIG_BOARD_GOOGLE_DRAGONEGG=y" >> .config
|
||||
# make olddefconfig && make
|
||||
```
|
||||
|
||||
## Flashing coreboot
|
||||
|
||||
```eval_rst
|
||||
+---------------------+------------+
|
||||
| Type | Value |
|
||||
+=====================+============+
|
||||
| Socketed flash | no |
|
||||
+---------------------+------------+
|
||||
| Vendor | Winbond |
|
||||
+---------------------+------------+
|
||||
| Size | 32 MiB |
|
||||
+---------------------+------------+
|
||||
| Internal flashing | yes |
|
||||
+---------------------+------------+
|
||||
| External flashing | yes |
|
||||
+---------------------+------------+
|
||||
```
|
80
Documentation/mainboard/hp/compaq_8200_sff.md
Normal file
@ -0,0 +1,80 @@
|
||||
# HP Compaq 8200 Elite SFF
|
||||
|
||||
This page describes how to run coreboot on the [Compaq 8200 Elite SFF] 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 | MX25L6406E |
|
||||
+---------------------+------------+
|
||||
| Size | 8 MiB |
|
||||
+---------------------+------------+
|
||||
| In circuit flashing | yes |
|
||||
+---------------------+------------+
|
||||
| Package | SOIC-8 |
|
||||
+---------------------+------------+
|
||||
| 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.
|
||||
|
||||
**Position of SOIC-8 flash IC near 2nd DIMM holder**
|
||||
![][compaq_8200_flash1]
|
||||
|
||||
[compaq_8200_flash1]: compaq_8200_sff_flash1.jpg
|
||||
|
||||
**Closeup view of SOIC-8 flash IC**
|
||||
![][compaq_8200_flash2]
|
||||
|
||||
[compaq_8200_flash2]: compaq_8200_sff_flash2.jpg
|
||||
|
||||
## Technology
|
||||
|
||||
```eval_rst
|
||||
+------------------+--------------------------------------------------+
|
||||
| Northbridge | :doc:`../../northbridge/intel/sandybridge/index` |
|
||||
+------------------+--------------------------------------------------+
|
||||
| Southbridge | bd82x6x |
|
||||
+------------------+--------------------------------------------------+
|
||||
| CPU | model_206ax |
|
||||
+------------------+--------------------------------------------------+
|
||||
| SuperIO | :doc:`../../superio/nuvoton/npcd378` |
|
||||
+------------------+--------------------------------------------------+
|
||||
| EC | |
|
||||
+------------------+--------------------------------------------------+
|
||||
| Coprocessor | Intel ME |
|
||||
+------------------+--------------------------------------------------+
|
||||
```
|
||||
|
||||
[Compaq 8200 Elite SFF]: https://support.hp.com/us-en/document/c03414707
|
||||
[HP]: https://www.hp.com/
|
||||
[flashrom]: https://flashrom.org/Flashrom
|
BIN
Documentation/mainboard/hp/compaq_8200_sff_flash1.jpg
Normal file
After Width: | Height: | Size: 160 KiB |
BIN
Documentation/mainboard/hp/compaq_8200_sff_flash2.jpg
Normal file
After Width: | Height: | Size: 107 KiB |
76
Documentation/mainboard/index.md
Normal file
@ -0,0 +1,76 @@
|
||||
# Mainboard-specific documentation
|
||||
|
||||
This section contains documentation about coreboot on specific mainboards.
|
||||
|
||||
## ASUS
|
||||
|
||||
- [P8H61-M LX](asus/p8h61-m_lx.md)
|
||||
|
||||
## ASRock
|
||||
|
||||
- [H81M-HDS](asrock/h81m-hds.md)
|
||||
|
||||
## Cavium
|
||||
|
||||
- [CN81XX EVB SFF](cavium/cn8100_sff_evb.md)
|
||||
|
||||
## Emulation
|
||||
|
||||
The boards in this section are not real mainboards, but emulators.
|
||||
|
||||
- [Spike RISC-V emulator](emulation/spike-riscv.md)
|
||||
- [Qemu RISC-V emulator](emulation/qemu-riscv.md)
|
||||
|
||||
## Intel
|
||||
|
||||
- [DG43GT](intel/dg43gt.md)
|
||||
- [IceLake RVP](intel/icelake_rvp.md)
|
||||
- [KBLRVP11](intel/kblrvp11.md)
|
||||
|
||||
## Foxconn
|
||||
|
||||
- [D41S](foxconn/d41s.md)
|
||||
|
||||
## Gigabyte
|
||||
|
||||
- [GA-H61M-S2PV](gigabyte/ga-h61m-s2pv.md)
|
||||
|
||||
## Google
|
||||
|
||||
- [Dragonegg](google/dragonegg.md)
|
||||
|
||||
## Open Cellular
|
||||
|
||||
- [Elgon](opencellular/elgon.md)
|
||||
|
||||
## HP
|
||||
|
||||
- [Compaq 8200 Elite SFF](hp/compaq_8200_sff.md)
|
||||
|
||||
## Lenovo
|
||||
|
||||
- [Hardware Maintenance Manual of ThinkPads](lenovo/thinkpad_hmm.md)
|
||||
- [T4xx common](lenovo/t4xx_series.md)
|
||||
- [X2xx common](lenovo/x2xx_series.md)
|
||||
|
||||
### Sandy Bridge series
|
||||
|
||||
- [T420](lenovo/t420.md)
|
||||
- [T420 / T520 / X220 / T420s / W520 common](lenovo/xx20_series.md)
|
||||
- [x1](lenovo/x1.md)
|
||||
|
||||
### Ivy Bridge series
|
||||
|
||||
- [T430](lenovo/t430.md)
|
||||
- [T530](lenovo/w530.md)
|
||||
- [W530](lenovo/w530.md)
|
||||
- [T430 / T530 / X230 / W530 common](lenovo/xx30_series.md)
|
||||
- [T431s](lenovo/t431s.md)
|
||||
|
||||
## SiFive
|
||||
|
||||
- [SiFive HiFive Unleashed](sifive/hifive-unleashed.md)
|
||||
|
||||
## Supermicro
|
||||
|
||||
- [X10SLM+-F](supermicro/x10slm-f.md)
|
99
Documentation/mainboard/intel/dg43gt.md
Normal file
@ -0,0 +1,99 @@
|
||||
# Intel DG43GT
|
||||
|
||||
This page describes how to run coreboot on the [Intel DG43GT] desktop.
|
||||
|
||||
## Flashing coreboot
|
||||
|
||||
```eval_rst
|
||||
+---------------------+------------+
|
||||
| Type | Value |
|
||||
+=====================+============+
|
||||
| Socketed flash | no |
|
||||
+---------------------+------------+
|
||||
| Model | W25X32 |
|
||||
+---------------------+------------+
|
||||
| Size | 4 MiB |
|
||||
+---------------------+------------+
|
||||
| In circuit flashing | NO! |
|
||||
+---------------------+------------+
|
||||
| Package | SOIC-8 |
|
||||
+---------------------+------------+
|
||||
| Write protection | No |
|
||||
+---------------------+------------+
|
||||
| Dual BIOS feature | No |
|
||||
+---------------------+------------+
|
||||
| Internal flashing | yes |
|
||||
+---------------------+------------+
|
||||
```
|
||||
|
||||
### Internal programming
|
||||
|
||||
The SPI flash can be accessed internally using [flashrom].
|
||||
Only the BIOS region can and needs to be written to.
|
||||
|
||||
```bash
|
||||
$ flashrom -p internal --ifd -i bios -w coreboot.rom --noverify-all
|
||||
```
|
||||
|
||||
### External programming
|
||||
|
||||
ISP (in circuit programming) seems to be impossible on this board, which
|
||||
is a property it shares with many boards featuring the ICH10 southbridge.
|
||||
**Recovering from a bad flash will require desoldering the flash!**
|
||||
Desoldering the SPI flash can easily be done with a hot air station.
|
||||
Apply some flux around the SPI flash, set the hot air station to 350-400°C
|
||||
and after heating the chip up for a minute it should be possible to remove it.
|
||||
|
||||
Having removed the flash chip, you can reprogram it externally then resolder
|
||||
it using a soldering iron.
|
||||
Another option would be to hook up a SPI flash (socket) to the SPI header,
|
||||
for easier flash removing in the future (if you expect to be hacking on this
|
||||
board). To do this you first need to solder the SPI header to the board.
|
||||
|
||||
**NOTE: This header cannot be used for ISP either.**
|
||||
|
||||
**NOTE2: Don't forget to connect the WP# and HOLD# pin on the SPI flash to 3.3V.**
|
||||
|
||||
The layout of the header is:
|
||||
|
||||
```
|
||||
+---+---+
|
||||
GND <- | x | x | -> SPI_CLK
|
||||
+---+---+
|
||||
3VSB <- | x | x | -> SPI_MISO
|
||||
+---+---+
|
||||
| | x | -> SPI_MOSI
|
||||
+---+---+
|
||||
SPI_CS# <-| x | x | -> SPI_CS# (again)
|
||||
+---+---+
|
||||
```
|
||||
|
||||
**Picture of the board with the flash hooked on externally**
|
||||
![][dg43gt_full]
|
||||
|
||||
**Close up picture of the SPI flash pads and recovery header**
|
||||
![][dg43gt_closeup]
|
||||
|
||||
[dg43gt_full]: dg43gt_full.jpg
|
||||
[dg43gt_closeup]: dg43gt_closeup.jpg
|
||||
|
||||
## Technology
|
||||
|
||||
```eval_rst
|
||||
+------------------+---------------------------------------------------+
|
||||
| Northbridge | Intel G43 (called x4x in coreboot code) |
|
||||
+------------------+---------------------------------------------------+
|
||||
| Southbridge | Intel ICH10 (called i82801jx in coreboot code) |
|
||||
+------------------+---------------------------------------------------+
|
||||
| CPU (LGA775) | model f4x, f6x, 6fx, 1067x (pentium 4, d, core 2) |
|
||||
+------------------+---------------------------------------------------+
|
||||
| SuperIO | Winbond W83627DHG |
|
||||
+------------------+---------------------------------------------------+
|
||||
| Coprocessor | Intel ME (optionally enabled) |
|
||||
+------------------+---------------------------------------------------+
|
||||
| Clockgen (CK505) | SLG8XP549T |
|
||||
+------------------+---------------------------------------------------+
|
||||
```
|
||||
|
||||
[Intel DG43GT]: https://ark.intel.com/products/41036/Intel-Desktop-Board-DG43GT
|
||||
[flashrom]: https://flashrom.org/Flashrom
|
BIN
Documentation/mainboard/intel/dg43gt_closeup.jpg
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
Documentation/mainboard/intel/dg43gt_full.jpg
Normal file
After Width: | Height: | Size: 90 KiB |
40
Documentation/mainboard/intel/icelake_rvp.md
Normal file
@ -0,0 +1,40 @@
|
||||
# Intel Ice Lake RVP (Reference Validation Platform)
|
||||
|
||||
This page describes how to run coreboot on the Intel icelake_rvp board.
|
||||
|
||||
Ice Lake RVP is based on Intel Ice Lake platform, please refer to below link to get more details
|
||||
```eval_rst
|
||||
:doc:`../../soc/intel/icelake/iceLake_coreboot_development`
|
||||
```
|
||||
|
||||
## Building coreboot
|
||||
|
||||
* Follow build instructions mentioned in Ice Lake document
|
||||
```eval_rst
|
||||
:doc:`../../soc/intel/icelake/iceLake_coreboot_development`
|
||||
```
|
||||
|
||||
* The default options for this board should result in a fully working image:
|
||||
```bash
|
||||
# echo "CONFIG_VENDOR_INTEL=y" > .config
|
||||
# echo "CONFIG_BOARD_INTEL_ICELAKE_RVPU=y" >> .config
|
||||
# make olddefconfig && make
|
||||
```
|
||||
|
||||
## Flashing coreboot
|
||||
|
||||
```eval_rst
|
||||
+---------------------+------------+
|
||||
| Type | Value |
|
||||
+=====================+============+
|
||||
| Socketed flash | no |
|
||||
+---------------------+------------+
|
||||
| Vendor | Winbond |
|
||||
+---------------------+------------+
|
||||
| Size | 32 MiB |
|
||||
+---------------------+------------+
|
||||
| Internal flashing | yes |
|
||||
+---------------------+------------+
|
||||
| External flashing | yes |
|
||||
+---------------------+------------+
|
||||
```
|
79
Documentation/mainboard/intel/kblrvp11.md
Normal file
@ -0,0 +1,79 @@
|
||||
# Intel Kaby lake RVP11
|
||||
|
||||
## Specs
|
||||
|
||||
* 1 SATA cable connect
|
||||
* 1 SATAe direct
|
||||
* 2 USB2.0 connector
|
||||
* 4 USB3.0 connector
|
||||
* 1 Gigabit Ethernet
|
||||
* 1 x4 PCIe slot
|
||||
* 1 x1 PCIe slot
|
||||
* 1 X16 PEG slot
|
||||
* UART debug DB9 connector
|
||||
* 4 DIMMS with DDR4 memory
|
||||
* SPI flash
|
||||
* Audio Jack
|
||||
* PS2 Keyboard and Mouse
|
||||
* Display: HDMI, DP, VGA
|
||||
|
||||
## Target Audience
|
||||
|
||||
* OEMs, internal only
|
||||
|
||||
## Flashing coreboot
|
||||
|
||||
```eval_rst
|
||||
+---------------------+------------+
|
||||
| Type | Value |
|
||||
+=====================+============+
|
||||
| Socketed flash | no |
|
||||
+---------------------+------------+
|
||||
| Vendor | Winbond |
|
||||
+---------------------+------------+
|
||||
| Model | W25Q128FV |
|
||||
+---------------------+------------+
|
||||
| Size | 16 MiB |
|
||||
+---------------------+------------+
|
||||
| Package | SOIC-8 |
|
||||
+---------------------+------------+
|
||||
| Write protection | No |
|
||||
+---------------------+------------+
|
||||
| Dual BIOS feature | No |
|
||||
+---------------------+------------+
|
||||
```
|
||||
|
||||
### Instruction to flash coreboot to SPI
|
||||
|
||||
### Internal programming
|
||||
|
||||
The SPI flash can be accessed internally using [flashrom].
|
||||
The following command is used to flash BIOS region.
|
||||
|
||||
```bash
|
||||
$ flashrom -p internal --ifd -i bios -w coreboot.rom --noverify-all
|
||||
```
|
||||
|
||||
### External programming
|
||||
|
||||
1. Dediprog SF600 with adapter B is used.
|
||||
2. Make sure power supply is disconnected from board.
|
||||
3. Connect Dediprog SF600 to header at J7H1.
|
||||
4. Ensure that "currently working on" is in "application memory chip 1"
|
||||
5. Go to "file" and select the .rom file (16 MB) to program chip1.
|
||||
6. Execute the batch operation to erase and program the chip.
|
||||
|
||||
## Technology
|
||||
|
||||
```eval_rst
|
||||
+------------------+---------------------------------------------------+
|
||||
| CPU | Kaby lake H (i7-7820EQ) |
|
||||
+------------------+---------------------------------------------------+
|
||||
| PCH | Skylake PCH-H (called SPT-H) |
|
||||
+------------------+---------------------------------------------------+
|
||||
| Coprocessor | Intel ME |
|
||||
+------------------+---------------------------------------------------+
|
||||
```
|
||||
|
||||
[W25Q128FV]: https://www.winbond.com/resource-files/w25q128fv%20rev.m%2005132016%20kms.pdf
|
||||
[flashrom]: https://flashrom.org/Flashrom
|
52
Documentation/mainboard/lenovo/flashlayout_xx20.svg
Normal file
@ -0,0 +1,52 @@
|
||||
<?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="10cm" height="8cm" viewBox="265 -156 186 159" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<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: #000000" x="307.888" y="-152.131" width="49.1438" height="30.4667"/>
|
||||
<text font-size="6.77333" 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>
|
||||
<rect style="fill: #ffffff" x="308" y="-91.1844" width="49.1438" height="59.7756"/>
|
||||
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="308" y="-91.1844" width="49.1438" height="59.7756"/>
|
||||
<text font-size="6.77333" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="332.572" y="-59.2299">
|
||||
<tspan x="332.572" y="-59.2299">ME</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect style="fill: #ffffff" x="307.934" y="-31.6442" width="49.1438" height="30.8828"/>
|
||||
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="307.934" y="-31.6442" width="49.1438" height="30.8828"/>
|
||||
<text font-size="6.77333" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="332.506" y="-14.1361">
|
||||
<tspan x="332.506" y="-14.1361">BIOS</tspan>
|
||||
</text>
|
||||
</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: #000000" x="308" y="-121.59" width="49.1438" height="30.4667"/>
|
||||
<text font-size="6.77333" 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="6.77333" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="265.968" y="-149.208">
|
||||
<tspan x="265.968" y="-149.208">0x000000</tspan>
|
||||
</text>
|
||||
<text font-size="6.77333" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="266.362" y="-120.102">
|
||||
<tspan x="266.362" y="-120.102">0x001000</tspan>
|
||||
</text>
|
||||
<text font-size="6.77333" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="266.162" y="-88.8972">
|
||||
<tspan x="266.162" y="-88.8972">0x003000</tspan>
|
||||
</text>
|
||||
<text font-size="6.77333" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="266.144" y="-29.6656">
|
||||
<tspan x="266.144" y="-29.6656">0x500000</tspan>
|
||||
</text>
|
||||
<text font-size="6.77333" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="266.326" y="1.87412">
|
||||
<tspan x="266.326" y="1.87412">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="10.1598" 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>
|
||||
</svg>
|
After Width: | Height: | Size: 3.7 KiB |
61
Documentation/mainboard/lenovo/flashlayout_xx30.svg
Normal file
@ -0,0 +1,61 @@
|
||||
<?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="10cm" height="11cm" viewBox="265 -156 187 213" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<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: #000000" x="307.888" y="-152.131" width="49.1438" height="30.4667"/>
|
||||
<text font-size="6.77333" 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>
|
||||
<rect style="fill: #ffffff" x="308" y="-91.1844" width="49.1438" height="59.7756"/>
|
||||
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="308" y="-91.1844" width="49.1438" height="59.7756"/>
|
||||
<text font-size="6.77333" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="332.572" y="-59.2299">
|
||||
<tspan x="332.572" y="-59.2299">ME</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g>
|
||||
<rect style="fill: #ffffff" x="307.934" y="-31.6442" width="49.1438" height="85.7161"/>
|
||||
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="307.934" y="-31.6442" width="49.1438" height="85.7161"/>
|
||||
<text font-size="6.77333" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="332.506" y="13.2805">
|
||||
<tspan x="332.506" y="13.2805">BIOS</tspan>
|
||||
</text>
|
||||
</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: #000000" x="308" y="-121.59" width="49.1438" height="30.4667"/>
|
||||
<text font-size="6.77333" 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="6.77333" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="265.968" y="-149.208">
|
||||
<tspan x="265.968" y="-149.208">0x000000</tspan>
|
||||
</text>
|
||||
<text font-size="6.77333" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="266.362" y="-120.102">
|
||||
<tspan x="266.362" y="-120.102">0x001000</tspan>
|
||||
</text>
|
||||
<text font-size="6.77333" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="266.162" y="-88.8972">
|
||||
<tspan x="266.162" y="-88.8972">0x003000</tspan>
|
||||
</text>
|
||||
<text font-size="6.77333" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="266.144" y="-29.6656">
|
||||
<tspan x="266.144" y="-29.6656">0x500000</tspan>
|
||||
</text>
|
||||
<text font-size="6.77333" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="266.326" y="1.87412">
|
||||
<tspan x="266.326" y="1.87412">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="10.1598" 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>
|
||||
<path style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" d="M 381.223 -0.537117 C 402.222,-0.537117 379.285,28.8102 399.872,27.8376"/>
|
||||
<path style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" d="M 382.176 54.9128 C 396.037,54.9128 385.445,27.9997 399.548,27.8376"/>
|
||||
<text font-size="10.1598" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="407.157" y="30.2529">
|
||||
<tspan x="407.157" y="30.2529">Flash #1</tspan>
|
||||
</text>
|
||||
<text font-size="6.77333" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="266.591" y="54.9733">
|
||||
<tspan x="266.591" y="54.9733">0xc00000</tspan>
|
||||
</text>
|
||||
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke-dasharray: 4; stroke: #000000" x1="305.271" y1="-1.2113" x2="378.831" y2="-1.17038"/>
|
||||
</svg>
|
After Width: | Height: | Size: 4.5 KiB |
25
Documentation/mainboard/lenovo/t420.md
Normal file
@ -0,0 +1,25 @@
|
||||
# Lenovo T420
|
||||
|
||||
## Flashing instructions
|
||||
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 MX25L6404E (shown above) 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!
|
||||
|
||||
For more details have a look at [T420 / T520 / X220 / T420s / W520 common] and
|
||||
|
||||
```eval_rst
|
||||
:doc:`../../flash_tutorial/ext_power`
|
||||
```
|
||||
|
||||
Steps to access the flash IC are described here [T4xx series].
|
||||
|
||||
[T4xx series]: t4xx_series.md
|
||||
[T420 / T520 / X220 / T420s / W520 common]: xx20_series.md
|
BIN
Documentation/mainboard/lenovo/t420_chip_location.jpg
Normal file
After Width: | Height: | Size: 309 KiB |
15
Documentation/mainboard/lenovo/t430.md
Normal file
@ -0,0 +1,15 @@
|
||||
# Lenovo T430
|
||||
|
||||
## Flashing instructions
|
||||
You have to disassemble the whole device, as the flash ICs are on the bottom
|
||||
of the mainboard.
|
||||
|
||||
For more details have a look at [T430 / T530 / X230 / T430s / W530 common] and
|
||||
```eval_rst
|
||||
:doc:`../../flash_tutorial/ext_power`
|
||||
```
|
||||
|
||||
Steps to access the flash IC are described here [T4xx series].
|
||||
|
||||
[T4xx series]: t4xx_series.md
|
||||
[T430 / T530 / X230 / T430s / W530 common]: xx30_series.md
|
42
Documentation/mainboard/lenovo/t431s.md
Normal file
@ -0,0 +1,42 @@
|
||||
# Lenovo T431s
|
||||
|
||||
## Disassembly Instructions
|
||||
|
||||
You must remove the following parts before flipping the mainboard
|
||||
off the main frame:
|
||||
|
||||

|
||||
|
||||
* Base cover
|
||||
* Hard disk drive
|
||||
* Battery pack
|
||||
* Keyboard
|
||||
|
||||
Its [Hardware Maintenance Manual](https://thinkpads.com/support/hmm/hmm_pdf/t431s_hmm_en_0c10894_02.pdf) could be used as a guidance of disassembly.
|
||||
|
||||

|
||||
|
||||
The WSON-8 flash chip (surrounded with red circle in the photo above)
|
||||
sits on the opposite side of the mainboard, under a piece of insulating
|
||||
tape. If solders between the chip and soldering pads fortunately
|
||||
overflows beside the chip as tiny tin balls attached to soldering pads,
|
||||
it will be possible to use a pomona 5250 clip to hold the chip, with
|
||||
its metal tips just attached to tin balls, thus connecting the chip to
|
||||
the programmer.
|
||||
|
||||

|
||||
|
||||
```eval_rst
|
||||
:doc:`../../flash_tutorial/ext_power`
|
||||
```
|
||||
|
||||
Currently, detecting the model of soldered RAM at runtime and loading
|
||||
the corresponding SPD datum from CBFS is not implemented yet. You may
|
||||
have to dump the SPD data when running the vendor firmware with
|
||||
inteltool, and replace the content of the SPD hex with what is dumped.
|
||||
|
||||
(the mechanism may be similar to that on x1_carbon_gen1 and s230u, but
|
||||
I do not know how to find gpio ports for that, and SPD data stored in
|
||||
vendor firmware.)
|
||||
|
||||
[T420 / T520 / X220 / T420s / W520 common]: xx20_series.md
|
BIN
Documentation/mainboard/lenovo/t431s_bc_removed.jpg
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
Documentation/mainboard/lenovo/t431s_flash_chip.jpg
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
Documentation/mainboard/lenovo/t431s_programming.jpg
Normal file
After Width: | Height: | Size: 67 KiB |
36
Documentation/mainboard/lenovo/t4xx_series.md
Normal file
@ -0,0 +1,36 @@
|
||||
# Lenovo T4xx series disassembly instructions
|
||||
|
||||
A skilled engineer takes around 40 minutes to disassemble, flash and reassemble
|
||||
the whole device.
|
||||
|
||||
Read their [Hardware Maintenance Manual](thinkpad_hmm.md) for detailed steps.
|
||||
|
||||
## Steps to access the flash IC
|
||||
|
||||
* Unplug the main battery
|
||||
* Remove the harddisk, CDROM, ExpressCard, SIM-card, SDcard, SmartCard, ...
|
||||
* Open the bottom flap and remove the keyboard screw
|
||||
* Remove the keyboard
|
||||
* Remove the screen
|
||||
* Remove the top enclosure
|
||||
* Remove the CMOS battery
|
||||
* Remove the speakers
|
||||
* Remove WWAN and WIFI card
|
||||
* Remove the CPU fan
|
||||
* Unplug the power cable
|
||||
* Remove the bottom enclosure
|
||||
* Flip the mainboard and remove the main frame
|
||||
|
||||
## Docking stations
|
||||
The following docking stations are supported by coreboot:
|
||||
* Type 2505
|
||||
* VGA, Ethernet, Modem, PS2, 4 USB Ports
|
||||
* Dock ID on pc87382 reads as: 2
|
||||
* Type 2504
|
||||
* Serial, LPT, LEDs, Audio, DVI, VGA, Ethernet, Modem, PS2, 4 USB Ports
|
||||
* Dock ID on pc87382 reads as: 1
|
||||
* PNP IO address of SuperIO pc87384: 0x2e
|
||||
|
||||
There's no hotplug support for LPT and Serial on Type 2504.
|
||||
|
||||
The Dock ID reads as 7 if no dock is connected.
|
6
Documentation/mainboard/lenovo/thinkpad_hmm.md
Normal file
@ -0,0 +1,6 @@
|
||||
# Obtain Hardware Maintenance Manual of ThinkPads
|
||||
|
||||
You are suggested obtain the "Hardware Maintenance Manual" for your corresponding
|
||||
model as a guidance. Some can be found from [Hardware Specifications of ThinkWiki].
|
||||
|
||||
[Hardware Specifications of ThinkWiki]: https://www.thinkwiki.org/wiki/Hardware_Specifications
|