Compare commits
4456 Commits
Author | SHA1 | Date | |
---|---|---|---|
64c3618e91 | |||
d563135d4b | |||
bccef94545 | |||
dca083da74 | |||
94612338ef | |||
9e729e44a8 | |||
65e5b100e2 | |||
500eb450b5 | |||
030bace562 | |||
dce0ce954f | |||
7571110d78 | |||
12a4d05b9e | |||
94b0c791a0 | |||
89cdb36279 | |||
38eec5bc73 | |||
79572e4f32 | |||
3eb8dbaee2 | |||
b74975e403 | |||
a208c6ce73 | |||
4b1b0efeda | |||
e8e2e3e00d | |||
2e5e99c48c | |||
7db5ce15a3 | |||
4787f2953c | |||
192b57cc8b | |||
1b5a7dec43 | |||
77653e3bce | |||
24a61841e3 | |||
3658c62908 | |||
73e35f6af9 | |||
9b09093878 | |||
a92878152f | |||
9ea45ffb39 | |||
45d5f8f163 | |||
75db8c8ea8 | |||
666c8f8fc5 | |||
d2245d890b | |||
ef59c93f77 | |||
65600cdec6 | |||
0115ba8835 | |||
f524188f48 | |||
bec6731c76 | |||
752c471348 | |||
c6a593bc3e | |||
5212ece6cf | |||
6d391e649f | |||
ff75c21e6d | |||
0fba23bc64 | |||
24ec79c39b | |||
de4baffb6b | |||
03294a3849 | |||
550cd05995 | |||
9837493e4f | |||
b88409deb1 | |||
538de782b1 | |||
538ebafe54 | |||
1917a3525c | |||
dbac2b5912 | |||
d2b173657a | |||
c1122168de | |||
28980fdf85 | |||
a469736cca | |||
42d4a57b77 | |||
34aab089e3 | |||
12732536df | |||
4794264ff1 | |||
b39e10dbaa | |||
37d1206c6e | |||
6812626382 | |||
79ab7d7780 | |||
d458358379 | |||
b20a16ef4e | |||
a92a07d9c0 | |||
bf6541d876 | |||
bf9eb00c11 | |||
56f949cd0c | |||
6a5c77cc84 | |||
ddfec569d1 | |||
9961343e67 | |||
eb912ed9ad | |||
19a2a2db7e | |||
96dc015519 | |||
adb6922a6d | |||
a5ca4a0c75 | |||
b29d16fc8a | |||
b8d0d089b3 | |||
14eca573d1 | |||
aa4c1d2b5b | |||
9754f38e82 | |||
31b7d95350 | |||
31a3788739 | |||
df5571dc9d | |||
91323593f3 | |||
e0407a8e44 | |||
3f5de1c8f4 | |||
60e6f6e1e5 | |||
1a8949c0c4 | |||
742abd3daf | |||
1aa5cff709 | |||
e62a17b118 | |||
b3d7ced512 | |||
0c0bcd4072 | |||
7c1fe4bd12 | |||
380789a6ee | |||
f06d7d7003 | |||
692dde599f | |||
de3fe84ca9 | |||
13ec6a03ab | |||
288646744f | |||
0f72ddfd20 | |||
c3c7ef3ec2 | |||
6ee77517c0 | |||
91ca2ddde1 | |||
34e417316a | |||
2bd25bfb7f | |||
530cde8a9e | |||
cee5ff0629 | |||
8321d760b0 | |||
e3ee36498e | |||
a0545e6e15 | |||
3992698388 | |||
06a5e854e1 | |||
14aff23b92 | |||
d970e39eae | |||
eb7e166ea1 | |||
bd42b06495 | |||
8ebad6d78d | |||
3ea5b2d2e6 | |||
0badea85a7 | |||
ad619a2473 | |||
854782330c | |||
5320f5387e | |||
225be5f7ee | |||
5a8e072020 | |||
f0d1c9a423 | |||
ddeba9f196 | |||
51c6d4429c | |||
370868766b | |||
8cf43f6c98 | |||
30392ae396 | |||
cff2635a22 | |||
20cf396c96 | |||
009a23d5c8 | |||
33d9eeae5f | |||
411a6ab703 | |||
26f25d7105 | |||
637f941f66 | |||
45b51e0180 | |||
355d1c9870 | |||
c0dfa7596b | |||
3787b67d41 | |||
025af31423 | |||
35a30c5526 | |||
a3a8ff97fb | |||
8f5fbb0f26 | |||
4a924dce99 | |||
18d315910a | |||
07ac2ec021 | |||
c34079cea0 | |||
c8d8777750 | |||
86acc04d28 | |||
f7cd0d5a05 | |||
478d47f777 | |||
dbf6f688aa | |||
1866a8cba4 | |||
8b85e8152b | |||
a339c3600f | |||
c676ecaecf | |||
e07ea4cd38 | |||
145a76182c | |||
0ccb3828bc | |||
bb50c67227 | |||
2e1f764429 | |||
db5557972a | |||
f3de8859a8 | |||
f33ab7c30f | |||
23d3ad0f64 | |||
ef079c86ea | |||
6aedba2f13 | |||
21aece8653 | |||
049ab12c45 | |||
e51f030e62 | |||
d8bc5c127a | |||
9d017d2d29 | |||
2c952d6bd9 | |||
ae0eeb2ab6 | |||
8aab7876d1 | |||
39a6093d79 | |||
d37b7d89fd | |||
3ac92b7c93 | |||
317399366e | |||
1be9f5841d | |||
6c8e4dd87b | |||
9a369718d6 | |||
d7bf3ad939 | |||
ae4fb10240 | |||
de34168436 | |||
411ae05f1d | |||
3e72f87fe7 | |||
e8ecabca73 | |||
e93cbd23a3 | |||
dd7470cb7e | |||
45f448f4a4 | |||
c05c2b3fb2 | |||
14c4f4f43c | |||
6eea191511 | |||
517bc99db1 | |||
a0a94d8c64 | |||
54ff67c698 | |||
73fa035b20 | |||
c06648b8c1 | |||
2446c1e9e9 | |||
bd5c721f6b | |||
81c9c275e6 | |||
fc5469c345 | |||
000784bc84 | |||
93fe3727e0 | |||
32f90d8c68 | |||
99bd1ab00d | |||
0357ab7b8f | |||
62c583622d | |||
4489cb5284 | |||
1a31b103c7 | |||
fc06af867e | |||
f261e8183f | |||
1c0b9f25a1 | |||
f6f1f734ee | |||
7b1cb0d603 | |||
0c707d4dbc | |||
cff479e930 | |||
5bb926e3c9 | |||
812efb1fc2 | |||
853c6237cb | |||
3b5e196e67 | |||
69c9aa9dc5 | |||
a13007b49a | |||
89525b3b4f | |||
1b85f18a97 | |||
afd0e9e88a | |||
1a0e048656 | |||
2825d6cb14 | |||
a69a687ec7 | |||
8642c659e1 | |||
e8ea97c945 | |||
dd1da42f85 | |||
e70d1d4b58 | |||
0ac24fc405 | |||
6065ead9c5 | |||
c9e42b98ef | |||
b9bdcaecc1 | |||
82ab9ca72c | |||
a8620639a3 | |||
fa557bf4cc | |||
3dde7e7a25 | |||
58e3bc3410 | |||
3a11fc80b6 | |||
7d5e1129a1 | |||
a478568f5b | |||
7378e9cd2a | |||
1d19bcd7fb | |||
4b3dbbaa4b | |||
7e9654aa71 | |||
ea1953f492 | |||
cdee5e9d12 | |||
3c05531632 | |||
2047588de5 | |||
f29e0ea2a0 | |||
8dc5f3017d | |||
dc4a8d0260 | |||
8a13206549 | |||
5eb75fe550 | |||
357cc6552a | |||
66dcda9e15 | |||
7c3192e44b | |||
c4b6a8a4d7 | |||
6dd466c002 | |||
20d7bd0291 | |||
649fc6bb8a | |||
5532d93990 | |||
4a1938f186 | |||
bab37a2a2d | |||
0a65b738d5 | |||
5ac928dd14 | |||
649505b077 | |||
822b267a8c | |||
03f0e43a3c | |||
f0b5e91b1b | |||
91aae2e0bc | |||
9b29e5e1a0 | |||
6e1c471f70 | |||
2cb3cc5238 | |||
93084103d9 | |||
a5c970d433 | |||
61dee5c865 | |||
26b49cc9a3 | |||
b5320b2dc1 | |||
8104effa0d | |||
96dec04207 | |||
f7c551cf6e | |||
7f87812c30 | |||
96b00a50f1 | |||
56b2550316 | |||
037ee4b556 | |||
85dcd2f1ea | |||
30ee0d881b | |||
ca36acf773 | |||
e6b415f0e3 | |||
715b9555de | |||
934f683078 | |||
09b9b1673f | |||
07e461f8eb | |||
456852f437 | |||
fb767d8397 | |||
e8393bd482 | |||
6c82012e5e | |||
279ace6669 | |||
725657aa4c | |||
b4f9833028 | |||
55d148ca37 | |||
2e25ac6afe | |||
284a54775b | |||
e816829e7a | |||
8d3bc49876 | |||
e12de372d7 | |||
b6427b0b18 | |||
ba045653dc | |||
9511ce7d7f | |||
5f201ef866 | |||
bfc80098da | |||
4d962b2ecf | |||
f67bf49ead | |||
837141fa56 | |||
29cd350c46 | |||
d85d7e2329 | |||
7c71f7d15b | |||
0b5673dd33 | |||
6e5f909830 | |||
00b37d3007 | |||
c35d4fa377 | |||
f38af663d2 | |||
95d05e43b1 | |||
137f86149e | |||
d09b9747e7 | |||
9aa8d11885 | |||
6303671189 | |||
362eaf3f4c | |||
c7acf1666a | |||
ac41f58235 | |||
ab70d0ff66 | |||
b351875f1e | |||
793bf7e605 | |||
fca0cba6a1 | |||
e769bcee9a | |||
da1fde2ffb | |||
742bccfb5c | |||
03a79520d6 | |||
d5321bf2fb | |||
9d69d881e6 | |||
05f996d433 | |||
32b13131c1 | |||
492d55fa46 | |||
3d44c9925f | |||
cef108cc90 | |||
b8fbf3f972 | |||
984a6b43d4 | |||
e4aab352ee | |||
e69b1af925 | |||
93d7bcbc67 | |||
f694502697 | |||
c5316ec4d6 | |||
3452cb1359 | |||
5d16a25e0c | |||
cb01c2a315 | |||
5664bc8cf9 | |||
c130687e1e | |||
1114b208a0 | |||
7b46aae062 | |||
4db893b6fc | |||
feb5d10061 | |||
03465f4b0f | |||
e4d8ebcef7 | |||
bb5c255907 | |||
2ad8ffed6f | |||
46f6fcf88f | |||
3a9cde9ab6 | |||
7eb1136c27 | |||
c41f7f15c1 | |||
ff2f6b2478 | |||
4b748140ba | |||
c0199919e3 | |||
c85d7c59ac | |||
f2741aa632 | |||
b087a940a2 | |||
4f77f61d2d | |||
879b3c195f | |||
1ffee9d7f1 | |||
964033f7d2 | |||
1245b1e098 | |||
c3a83bf514 | |||
7d00293af8 | |||
c01fa5ad5d | |||
4ab0db2d27 | |||
ae5679366b | |||
887c1f1daf | |||
d964fea5a6 | |||
cdd84e7f62 | |||
072a9b96eb | |||
907ddc3e07 | |||
9ce5bee8c0 | |||
6ab28b465a | |||
f446b81f8f | |||
d9dea65615 | |||
7d28f20051 | |||
b2a10f8264 | |||
18d41e1c45 | |||
06b68d1097 | |||
8008c530e7 | |||
698647a8c0 | |||
01c1815eae | |||
572d66abb6 | |||
8ba85deb8f | |||
562279e6ca | |||
c73ad35e39 | |||
18a8ba41cc | |||
7c040adc8c | |||
63358eaff6 | |||
a94136f082 | |||
1e3e528d23 | |||
04dfc26f94 | |||
6e62223f01 | |||
11715d8dc6 | |||
dab20f887e | |||
8d119fcfba | |||
30d7b54742 | |||
e927d9b3ad | |||
a8b80942a0 | |||
4d38c7546c | |||
6663ad99cf | |||
d9c6862809 | |||
484f107ac4 | |||
fa78dd16bf | |||
8b6b07b942 | |||
e284bff9cf | |||
31b816b42f | |||
dfd7e9d560 | |||
ee68b88bab | |||
aff9f54e6b | |||
06a70e0a7c | |||
9cc6493e8f | |||
1be23b0733 | |||
f91cd6970e | |||
56fdafbaff | |||
34a5a9b3e6 | |||
e414ce4532 | |||
54be395a9b | |||
e5f25cee1c | |||
ad0ccb336d | |||
29f61a2110 | |||
37f38505f2 | |||
5e8709f89e | |||
4a8e58fd93 | |||
b8899ef7e7 | |||
542cffacbb | |||
34cfeee406 | |||
02b3937083 | |||
407b35aa9f | |||
54a7f41de1 | |||
99198b2f76 | |||
f861f99967 | |||
eb1f5bc079 | |||
02a1b338f8 | |||
401671c7ab | |||
76fcf82901 | |||
d3758540a9 | |||
b798deb1d5 | |||
3456a68649 | |||
e8f091580a | |||
53c22873b0 | |||
a1061639d2 | |||
7b2f503038 | |||
8056c910bc | |||
dc7b94450f | |||
181c3f846b | |||
78a8c85a47 | |||
d0089c2b07 | |||
899b28acdb | |||
43bcc7b6ed | |||
aee3b148ba | |||
583ba8b1ef | |||
0d787a1b06 | |||
d2d5e44a67 | |||
7245100cdd | |||
8c88ceca57 | |||
8cdb0b3767 | |||
e9b0b08079 | |||
dd4f64346e | |||
c5bb02f2ec | |||
f3ba5937e7 | |||
57285820a3 | |||
f664321508 | |||
ecdbc842e2 | |||
5a9fddc3de | |||
489ffefef6 | |||
ffbf5d9818 | |||
15311d246f | |||
46dacbd7c3 | |||
ca18073861 | |||
8308e2b9fa | |||
68ab745086 | |||
dd6a3d841b | |||
b639707056 | |||
8edfddcb54 | |||
c6dd4435d2 | |||
16868bcaa2 | |||
ffc2e75362 | |||
587338295d | |||
d1998a5f14 | |||
70b7fa1434 | |||
189a5c7cf6 | |||
9f47a053a3 | |||
7340efcf19 | |||
1247616304 | |||
17c46042eb | |||
e266eb82d9 | |||
94dfaad725 | |||
ec5b71ae30 | |||
bd8e761be2 | |||
bc76cf56a4 | |||
157851fdbb | |||
24e6221706 | |||
72afe02cfc | |||
d7238eb518 | |||
abd3cae588 | |||
b389f3aa0b | |||
ed31024d1d | |||
c47e314753 | |||
a65afdb833 | |||
999d29ee37 | |||
239abaf759 | |||
6bed1c47f6 | |||
f4617c0ce8 | |||
094639c214 | |||
8bfa51e4c4 | |||
84b9653b38 | |||
e9fe3661b3 | |||
10185866f0 | |||
05726e8e69 | |||
aaff4017d0 | |||
05d30605ec | |||
20af71dc64 | |||
8d9b878f63 | |||
2099716f69 | |||
d942c23203 | |||
af8123cf81 | |||
6f5e5e5aa8 | |||
9ba7399ee9 | |||
a5c2b48e13 | |||
811284125f | |||
f4a940c236 | |||
9f9b97e6bc | |||
6caa4769c7 | |||
bfc5dabe12 | |||
bdcccc0b88 | |||
05ba1e9bf2 | |||
0c1dd9c841 | |||
bc1cb38ce1 | |||
c5646e426b | |||
f8668e9890 | |||
3d6066eacc | |||
ff4ead052b | |||
bda27cd336 | |||
e8d230d65d | |||
421184e73a | |||
d4174b5f02 | |||
07a4e56e75 | |||
4459b6355f | |||
04c88e9113 | |||
3858fb121e | |||
c077f4a84c | |||
af05c86dcb | |||
38569d0610 | |||
d87277abbf | |||
c4f5e4e793 | |||
419c6901d9 | |||
39bd46f4a4 | |||
9f6622fb55 | |||
3f2f5edfed | |||
373ae2e734 | |||
be1ff7eb72 | |||
5b672d5954 | |||
b0ae42b5bb | |||
19edbf640b | |||
c746a748c4 | |||
360684b41a | |||
5270ce133e | |||
3c9b35f8c3 | |||
7c606eca05 | |||
b721f045e3 | |||
858890765e | |||
104c3e5f9b | |||
d4698d94af | |||
db654eae79 | |||
ba26aa8981 | |||
346f391642 | |||
664ba9767d | |||
42b0e8f438 | |||
fa8b75fb17 | |||
490473edec | |||
e1a616cf99 | |||
b60aeca26c | |||
547fe82cd0 | |||
7c86f4a822 | |||
f4bbea0f79 | |||
741508bb3e | |||
3fc2dc444e | |||
9e5b432ef9 | |||
9cf2abd6f9 | |||
dd7fa543c5 | |||
22a6d11a54 | |||
5403423656 | |||
4c7ef81a23 | |||
8caa53133f | |||
40783f2862 | |||
298aa98b81 | |||
cf39f89fd9 | |||
c9ee2c0323 | |||
fc7bc54e34 | |||
87a74eb767 | |||
f183626b22 | |||
4ab5ce1430 | |||
97716b18d7 | |||
b212b67df1 | |||
88e54e38d4 | |||
264f4cd55b | |||
8e7ffe4952 | |||
3b8e9fa539 | |||
ad977efa23 | |||
3d53d5397f | |||
23cdcb8bef | |||
469dda3339 | |||
154625bcb2 | |||
bc6aa222a6 | |||
cd36c52d78 | |||
79d41263d9 | |||
e8afb0ee92 | |||
b294e590d9 | |||
211e74e0f4 | |||
b9d0c0f7a3 | |||
6e2c6eb6b5 | |||
c4b2f8c5d8 | |||
e40b9481e6 | |||
d95dba0ce3 | |||
3105136660 | |||
e233a916d0 | |||
75bc530aa5 | |||
01e38559c3 | |||
951a409f66 | |||
6d27778973 | |||
c9222f9567 | |||
d34405438d | |||
d6a47729d3 | |||
496bd1555d | |||
6359d0661f | |||
ed624c7158 | |||
eba0433b17 | |||
2ef3b2df1f | |||
8302585c15 | |||
462f3ed111 | |||
da459c46bd | |||
c699255ba5 | |||
8ae77f62cc | |||
996fdc0057 | |||
624c1ca04e | |||
39a6145e41 | |||
28da35417b | |||
f9d3d33a55 | |||
d92d0e24ae | |||
8c28e51a16 | |||
c1bb32f869 | |||
ab3947a021 | |||
34053fab21 | |||
fbb023245b | |||
8528867088 | |||
fac2893584 | |||
a23aff3651 | |||
0623b01036 | |||
c08d4c5c55 | |||
c3c55210ee | |||
5daa1d3898 | |||
e37459ed64 | |||
cf06124cc6 | |||
36aaddf7d7 | |||
9e92c1d787 | |||
8af1bcd38f | |||
394b5fabf4 | |||
cfc170b213 | |||
f1e696b4a5 | |||
f3343f2560 | |||
baf1364f79 | |||
5d33d03d3f | |||
b6737fc54a | |||
7587526583 | |||
4229dfc215 | |||
6ceca5d064 | |||
e54487f207 | |||
6e5e24e2b3 | |||
03743b7fa3 | |||
d91d2df2cc | |||
a138366f3a | |||
96a7a835bf | |||
013711b533 | |||
aaa8ab7ac3 | |||
98a8b441e5 | |||
7a2864b421 | |||
c9d6333ab6 | |||
3bff419824 | |||
9f75f68978 | |||
9b43b89296 | |||
90cd4aaccb | |||
3f7a52f00e | |||
63ce260a3e | |||
feecdc2c0b | |||
38c9b8045e | |||
5569ee9d13 | |||
a890138968 | |||
16dbbeb895 | |||
231020132c | |||
f3d399eb8b | |||
2cc060061e | |||
59495543db | |||
2c807ff6fe | |||
2dcca0f924 | |||
a31a769760 | |||
a3db721633 | |||
826523b679 | |||
08ef4f10c7 | |||
7ba0e99127 | |||
0df0c7e359 | |||
d8b4ea992b | |||
5a082825aa | |||
d9196d0696 | |||
ae758fa41d | |||
bea1980c4e | |||
eb43ca5fb1 | |||
51f0129ffd | |||
8e91509a92 | |||
f846d6951e | |||
8d9a6f1625 | |||
1a1b04ea51 | |||
fc57d6c4c2 | |||
6f1d35e72d | |||
ec26428fcf | |||
95b9ef2dfc | |||
c664b90f05 | |||
8a0d130391 | |||
32661c7a35 | |||
c4ef8e4c2b | |||
b486f29a44 | |||
933f90147b | |||
d15183144a | |||
3fccec5322 | |||
40b3943093 | |||
eb86016570 | |||
645d2a817a | |||
4c0f1430b2 | |||
4119616718 | |||
7896b8ce59 | |||
08e8cab578 | |||
fe1d80cb08 | |||
e6315f74d6 | |||
12b0f7746e | |||
eb3ae1a202 | |||
e64ef9dee0 | |||
a9f881d039 | |||
df99d13f25 | |||
3b1f21e4f2 | |||
fca4535acf | |||
b8febf44d1 | |||
277e11b390 | |||
5e29c0ef8e | |||
51e0fd91d5 | |||
a5ba5133ce | |||
9412b3e9bb | |||
02f7471b19 | |||
11aca6bb7c | |||
b8fba86b14 | |||
3588d7b76f | |||
87f9fc8584 | |||
4cb2f7684e | |||
f13b6ebc89 | |||
71800909f3 | |||
34fb9399de | |||
ef3395d990 | |||
61ab3fe6ef | |||
3635c39237 | |||
c5853e95f2 | |||
000d91af00 | |||
7ac76ecf91 | |||
6abee84250 | |||
8021b474fb | |||
203af60464 | |||
0be23eda13 | |||
dd48b176f3 | |||
57ead89356 | |||
447472ec54 | |||
a147c85796 | |||
5e53bd5822 | |||
7583ffbb60 | |||
d8aff6098a | |||
8d6f587da4 | |||
d182425af2 | |||
ab673cee08 | |||
c7e2b6d140 | |||
7336f97deb | |||
5edbb1c5d9 | |||
3cd3cb6f33 | |||
6f2f236862 | |||
c9a3451305 | |||
097e449013 | |||
ca481ee87f | |||
4c466c9c96 | |||
90a93a8a32 | |||
e0de23478e | |||
a0eb64ad33 | |||
91fb139956 | |||
c66c15334a | |||
549a853f8f | |||
2fdabd9038 | |||
41fec869fb | |||
c59d9e3917 | |||
9de8c8013b | |||
802cbee789 | |||
aeacf8b444 | |||
2ebea2d427 | |||
02c565b35a | |||
aac79e0b8f | |||
b0a89bfc26 | |||
49e0e00168 | |||
7e75f33de5 | |||
f71f3ae9c2 | |||
da7749c5d6 | |||
eadd251bf7 | |||
96cb2522fd | |||
87e6796a90 | |||
b264c5ce10 | |||
0778c86b3b | |||
040c531158 | |||
21ba5eea89 | |||
ad882c3b17 | |||
b6585481e8 | |||
9446447475 | |||
f3973bd4cf | |||
f6846efd84 | |||
babffce0eb | |||
0f11e03220 | |||
a1dfce1ce0 | |||
e5a7a1f314 | |||
d71754d1b9 | |||
a202aec5fd | |||
cbf6e6bdba | |||
6b303d54aa | |||
4883252912 | |||
baba3e9610 | |||
b9c2ecffda | |||
8a3a3c820b | |||
61ba7fb2d9 | |||
44ef38f703 | |||
49c44cdccb | |||
c36469e0b1 | |||
4824d747fc | |||
86ba0d73f3 | |||
33d9c4ad7e | |||
f7841d03e2 | |||
76f1713ff2 | |||
b5d98667c6 | |||
2232e89065 | |||
5591b91b1a | |||
c64755bcd7 | |||
d53c281d0b | |||
4f5936b456 | |||
5d0893adce | |||
83ca56acdf | |||
7454005a4f | |||
4a3a73c042 | |||
1e53a89f63 | |||
103bd5e4bb | |||
f3668fc1de | |||
3e2fabfa5e | |||
c8fa51b877 | |||
bc0fc39022 | |||
3a6d8fd889 | |||
c110595503 | |||
890cf2299d | |||
110d1a98e1 | |||
3172f987fa | |||
2c4866228e | |||
5b185840f7 | |||
ad1a835c69 | |||
3380faa283 | |||
17c6bf7a24 | |||
d6f7ecb12f | |||
ba5a951a93 | |||
0490f5affb | |||
ad78553f5d | |||
80c555d7a8 | |||
dc6bb6cb82 | |||
ed318f2001 | |||
03248033e7 | |||
e334fea94b | |||
31be15c7a2 | |||
bc45650b5f | |||
c3bb6923bd | |||
00a8ed8fcd | |||
3b03206426 | |||
46514c2b87 | |||
00148bba71 | |||
55d00c5a99 | |||
1e14de8bda | |||
a2977ae72d | |||
7368da32e7 | |||
e18f71964d | |||
b75d5743af | |||
22aeed307d | |||
304925714d | |||
f2ccd072cc | |||
c9ec63b78b | |||
d5f1e0f973 | |||
6740647cfd | |||
e36733bf84 | |||
2048cb4386 | |||
efd23d92ef | |||
ca428c3027 | |||
0484c85cb3 | |||
8a580cb7a7 | |||
bc3e31005d | |||
1ca3e44c90 | |||
4d58083703 | |||
92c779200a | |||
91844b1f35 | |||
ad9f8cf02d | |||
6ba591b447 | |||
a5b7ddf940 | |||
26a0c66c13 | |||
9f71b1713a | |||
02cce9024e | |||
e3c68d2e1b | |||
c803f65206 | |||
7333ea91ea | |||
f9be2d10c9 | |||
dbce8ba05a | |||
46399b5f8d | |||
2778420f7f | |||
24b642e726 | |||
0f1394abd6 | |||
f1b9006fd6 | |||
67a537c35a | |||
d8bf22a863 | |||
9d1cbf1033 | |||
9fb3d792be | |||
214c719eed | |||
b468d569f6 | |||
f74aa649b1 | |||
a6e3b5ac09 | |||
cfc3c358b2 | |||
45ecd49eea | |||
571eda609e | |||
b8c473e32f | |||
306e8930a7 | |||
26766fd85d | |||
a4098c759d | |||
56da63c3dc | |||
ab516294a5 | |||
61ef71bcb2 | |||
55c0c4bc86 | |||
4a09b97cad | |||
ba17829de4 | |||
64e07ebde2 | |||
8ad52fff64 | |||
df63ff8b55 | |||
e5f4b2f39d | |||
2bcf4565c7 | |||
92a3a304af | |||
6d81eceb74 | |||
d4acee887e | |||
4a9569a123 | |||
26886076f4 | |||
aab226cc83 | |||
342a8c3b2b | |||
be242788c2 | |||
8770954b99 | |||
e9e13d41e9 | |||
45aea0b1d0 | |||
8a50827bea | |||
32b9ef35b5 | |||
f2aaddc1eb | |||
71892b4bec | |||
9733f6a336 | |||
8ad0a4c0b8 | |||
2f3456a873 | |||
af36b29735 | |||
3e241f54d2 | |||
a2c045bd40 | |||
e80a1b1690 | |||
d6161d46ff | |||
9455474f1b | |||
37305e78fc | |||
e9b27e5527 | |||
0d0b2f45f6 | |||
bcb4a77fb1 | |||
16ef59e81e | |||
95b4ece0fe | |||
aaebfa800c | |||
4dbe84e432 | |||
02fd15dbcf | |||
1edf8b77e0 | |||
315710af7b | |||
4b6b2609e5 | |||
a3e228ce15 | |||
7051a40b0b | |||
da6fcb13f1 | |||
7f32df379c | |||
93375f270c | |||
c47422d6c3 | |||
4164476dfc | |||
4812cf96c2 | |||
f9aac92880 | |||
bf06c0fc46 | |||
1fc0edd9fe | |||
fa276862f2 | |||
8376f2d4b2 | |||
455097616c | |||
5249624963 | |||
f4036742cb | |||
9f7f92c7ee | |||
76d55e5f00 | |||
b07e262c48 | |||
071182ade3 | |||
379aab47f9 | |||
cecc4a0d7a | |||
48b388f911 | |||
8679ad6eb6 | |||
be2b5ac0ea | |||
f9b9166431 | |||
abf51abe1d | |||
e1df7eef91 | |||
7c52283f78 | |||
5131c6f79a | |||
04506e2987 | |||
efea70c0ee | |||
aec0e31028 | |||
4612632edc | |||
b9adb11edf | |||
038757d2d0 | |||
a39d54edce | |||
f3a642de6d | |||
20ecf2268b | |||
4a93ba9f77 | |||
9ddc2c54fc | |||
2ccb972df4 | |||
7d6697d51c | |||
459655abe7 | |||
ae7ebcb316 | |||
17dfa7e25c | |||
5ce3bca1e7 | |||
4bd95295f1 | |||
70001fe1f7 | |||
ae96874e48 | |||
96f231ac4b | |||
0a9e72e87e | |||
c328a680de | |||
2e270ae297 | |||
9145ce2149 | |||
c6f2e58a64 | |||
b646e28769 | |||
b7cf7d36d7 | |||
eaa219b5bb | |||
a4e2e0550c | |||
554b03038e | |||
017ec16588 | |||
466374924c | |||
1929b571ce | |||
24ee0b5991 | |||
e530d816cc | |||
dccef0da0c | |||
84fac41d35 | |||
fba0ad84d1 | |||
268d25715c | |||
c61870108c | |||
42cf287a62 | |||
05577fc186 | |||
09b8f28bb0 | |||
cde1985ec3 | |||
5b18ffb566 | |||
dedbf63522 | |||
24ba49558e | |||
6441ecceed | |||
7919d618f8 | |||
d06f9c7699 | |||
bd3245c207 | |||
6bd5d1934c | |||
37dc6de31d | |||
5c6c34c32b | |||
64faf29f6b | |||
27753e2b4f | |||
7f40e1b1f7 | |||
3909908de8 | |||
15eec6ad44 | |||
ba59168f06 | |||
a14d7ac871 | |||
19704cdcdc | |||
066a9af02c | |||
79e12abb1b | |||
0ef6562656 | |||
954a4a4d16 | |||
efbf638b9a | |||
58d3fce181 | |||
4b4c0c6016 | |||
9e94cce35d | |||
506479d2a8 | |||
181e2d445c | |||
ffb5811b32 | |||
e585f5b5cc | |||
a1c767a19b | |||
d8717197ae | |||
06897d1b1a | |||
b8125e0336 | |||
a8dcbe686d | |||
31d86c48de | |||
94e04658ce | |||
6ceb532612 | |||
61293a4cde | |||
f700be00e9 | |||
27b6b0ed72 | |||
1761d33da6 | |||
09bb428afa | |||
2fe7471962 | |||
9ff79c2280 | |||
b763a4febc | |||
7c34865c92 | |||
bebb2a1705 | |||
5f86b0b7e3 | |||
ebeaad9298 | |||
b1c53fc94a | |||
695d86243e | |||
12e9bd4394 | |||
43462782dc | |||
9db8c2585a | |||
4dffa9cbb7 | |||
47b7b3402b | |||
36e6c6f8d2 | |||
1ebbb165ef | |||
e1bf0656af | |||
fa5eded303 | |||
a21eae0441 | |||
061cd78a1a | |||
1f572b9276 | |||
9eb85b1292 | |||
8e6fa57e52 | |||
2267158776 | |||
be63cf46e5 | |||
4b3995c25f | |||
641642e11c | |||
e761497674 | |||
6258ec9f70 | |||
2fc0b1c018 | |||
f01a7696f6 | |||
cb4672885e | |||
729c0695e5 | |||
c5dd57ab65 | |||
d50cde279b | |||
e83c56ae46 | |||
0c154af217 | |||
48378e1f8d | |||
a3b02e2818 | |||
9ffef56c45 | |||
ebddada48d | |||
fcf7d992bf | |||
a685fcb7ce | |||
f2b21f6d42 | |||
98e360e835 | |||
8b08c69386 | |||
51a5495841 | |||
32da3437f9 | |||
9d00242e24 | |||
c62c98a884 | |||
a895344936 | |||
3855a9806e | |||
ad2eb28c10 | |||
9657fc2bd9 | |||
57bbcb3dff | |||
d09459fe30 | |||
9b110bf97a | |||
a9117ed496 | |||
b781680d6e | |||
4247ba3628 | |||
924fe94075 | |||
5d79a0cc5a | |||
f219b6a2b9 | |||
af983db3f4 | |||
29c6169efd | |||
3fd5a1bbbb | |||
0625765de5 | |||
87e36c442e | |||
8d09a06aa6 | |||
d5d4fbc072 | |||
d49690bbe8 | |||
4b975bb79f | |||
95d429b1cd | |||
db0d949380 | |||
db2e11841a | |||
a81be27dc5 | |||
fc3eb1ca1d | |||
03a05b47e0 | |||
5694342a81 | |||
23e8b5b494 | |||
74b1919f17 | |||
11217de375 | |||
c3063c5567 | |||
c6d89fba7a | |||
0c6abd786d | |||
44e683d6dd | |||
36a67e1f3c | |||
1a438f33ff | |||
8a017aa394 | |||
8952d1c573 | |||
6da82139c3 | |||
92d96e84c4 | |||
6046739b9d | |||
c7854b064f | |||
90e683b307 | |||
3c93b7e166 | |||
94c2f76616 | |||
ecbfa99f64 | |||
7729b29a58 | |||
0013623b7c | |||
a85febcb1c | |||
84f394e9c0 | |||
3b8284f37a | |||
7f21ad0cba | |||
7a6f27ce1e | |||
58b8054cca | |||
df771c1ee4 | |||
69589294c2 | |||
316c180c41 | |||
1b35ec97cc | |||
95226b3e74 | |||
a0a198f779 | |||
a3402973ab | |||
5f17458cfb | |||
4cabf789fd | |||
c356861239 | |||
c0dc1e1bbe | |||
918ee62977 | |||
32f385ebfa | |||
1bb05ef30b | |||
c351f57dcc | |||
087064f471 | |||
be7507db29 | |||
d2fea1ab21 | |||
b4ab1e78cd | |||
825005ac3d | |||
0d512179c5 | |||
8f27374768 | |||
c43a09b118 | |||
25ae99fe65 | |||
bd4e6e38b4 | |||
de27499b52 | |||
333ba2aadd | |||
3ae17a42c1 | |||
ffd480fac2 | |||
d1a76c58e7 | |||
8666643d06 | |||
1fcb238d62 | |||
45761c5e99 | |||
40bcdba652 | |||
bf72dcbd2f | |||
78e8db1eeb | |||
a121f95393 | |||
02a1344921 | |||
0018d0f0de | |||
e3f564988b | |||
b3c41329fd | |||
fc9b8b916f | |||
01a9493cfc | |||
d64779acaa | |||
bd4af105c4 | |||
dd274e2971 | |||
dd59762729 | |||
dfdf102000 | |||
826094f65c | |||
f2a0be235c | |||
4dc4cb6b5c | |||
5c5049e283 | |||
030d214738 | |||
02e76c2e4d | |||
563e614bcd | |||
55c735a417 | |||
2b76ee0179 | |||
8288555ead | |||
ab114c9606 | |||
828ca06cdb | |||
b77b446ca8 | |||
e184e39e2e | |||
7f00dba33b | |||
0cbe320ac8 | |||
879eba583b | |||
a1d0fb031c | |||
dd956cbb57 | |||
fd7373809e | |||
23b874a374 | |||
7cf96aeeb7 | |||
8bdf3f4a04 | |||
f4bc9eb2e6 | |||
468bc6cd8f | |||
69395742b8 | |||
afaae8aa00 | |||
f531244d20 | |||
730b2616aa | |||
1075b29444 | |||
ae22fe293f | |||
2f2191a3d0 | |||
5ac723e5a4 | |||
b30fe36734 | |||
b4d7116a74 | |||
165efa1b86 | |||
f381d97856 | |||
2adb50d32e | |||
a54bfd5e95 | |||
f5b33c0016 | |||
3c8cb24fc3 | |||
8aac881fe8 | |||
1408798637 | |||
d9cd064ac6 | |||
4751390b61 | |||
fcbbb91116 | |||
1c3faabf24 | |||
309ccf74dd | |||
7d054bd38f | |||
e6e9fa6ef9 | |||
9ea70c02cd | |||
95dcf29b2f | |||
38b58d4f51 | |||
bfc255a121 | |||
a1b19de447 | |||
93b62e6170 | |||
a0bf2d6cf5 | |||
ec6e03e4d8 | |||
6482916111 | |||
7ee8e7f129 | |||
7e577ad22f | |||
5f82370d7b | |||
41b820cbd6 | |||
0c983df7ca | |||
033ea49bef | |||
c072e794e6 | |||
f689d2ee19 | |||
66ee42daba | |||
927f6ae84a | |||
477b4f8886 | |||
39ea0eab41 | |||
641221c0a1 | |||
56f5cc7ee3 | |||
10999ea628 | |||
fa8f567f32 | |||
e6fcfc2a48 | |||
f309204c53 | |||
acf80f287f | |||
e61f149659 | |||
005fe89daa | |||
41aab355c1 | |||
ebf1daa001 | |||
8a4536dfb7 | |||
d1e44b033e | |||
da606d4114 | |||
88d16c33d4 | |||
39fc181e55 | |||
65bd97c636 | |||
020f5a79bf | |||
4e448fb79b | |||
af90a1e6af | |||
be698de76e | |||
b29b22888d | |||
6107064d66 | |||
da8f5077ff | |||
60894a0711 | |||
ba56da85e8 | |||
73ce9fb18a | |||
e0563cc16e | |||
2d0655008f | |||
c2891f15fd | |||
526880754f | |||
47b5a9820f | |||
105e02d4fd | |||
712311f56e | |||
30ce0f383f | |||
6de79b9a1d | |||
5df9a04640 | |||
4732f23a1f | |||
77f6627a19 | |||
3abd206d4f | |||
38d901e88d | |||
d5b780c5b1 | |||
2be5900087 | |||
e7afcd5391 | |||
ad70400519 | |||
b631d07494 | |||
7ed04e460d | |||
b768723c72 | |||
368873ced3 | |||
5640cfdc92 | |||
5b01f2bf0c | |||
10f55a2c9d | |||
08a942fd32 | |||
e8189b7426 | |||
ebf1932f23 | |||
cfd78b1500 | |||
238b10a5f7 | |||
f572d5ed0b | |||
dd467bfc14 | |||
bba5bfc7d2 | |||
9bafc49c5a | |||
8d002f515d | |||
7d6bc60db9 | |||
32585de39e | |||
062646670f | |||
efaf1b32ba | |||
2c26108208 | |||
6d20d0c140 | |||
dbcf7b1621 | |||
17118a833a | |||
d2132469ae | |||
425d8640fa | |||
b7911c8e98 | |||
71d365d458 | |||
b9907042d4 | |||
af417b4143 | |||
38c308515c | |||
88712991ba | |||
a2789328f7 | |||
8952de55cb | |||
40d00ddcf2 | |||
030037d3e9 | |||
736024afdb | |||
64e15aac1b | |||
66b9c0efb5 | |||
6dc858a01f | |||
01750ef8d7 | |||
c336130c44 | |||
5434deaf2a | |||
eb72487784 | |||
49b09a06a9 | |||
28d4275622 | |||
839f668d89 | |||
f36c38355b | |||
bf21308705 | |||
4480dc1ca1 | |||
86abc8dff0 | |||
5f0e8d8462 | |||
14ea2fc90c | |||
aae1633069 | |||
fb6606b8db | |||
2540037406 | |||
21744811bb | |||
ed03371e76 | |||
15fd30f040 | |||
b74f45e9c4 | |||
f769ee3e1b | |||
cbaa835f21 | |||
f836a234e2 | |||
5dd76fd4cc | |||
82fb12ccec | |||
02043c995b | |||
cabcfe276c | |||
7a05e6e2ad | |||
d7b9e363e3 | |||
7f5f9331d1 | |||
f39dab1b95 | |||
68975b15cf | |||
979e80dc47 | |||
fa42d568a0 | |||
71a9a7c70f | |||
1fb15b0ac5 | |||
8eaa5dc684 | |||
ed34967303 | |||
2abe9cf2d7 | |||
7ff5f28228 | |||
4d4424658f | |||
54b706e654 | |||
e88f0311be | |||
97c5464443 | |||
19c2ce7639 | |||
0aad0531dc | |||
30e9149c4f | |||
544cc83470 | |||
d0ded16529 | |||
e8d1bef8cb | |||
4fafd41209 | |||
5f52c0e91f | |||
8f694dd51f | |||
022d935919 | |||
9e9f301b58 | |||
81a30ec3a7 | |||
d906b21e2e | |||
33e19ac619 | |||
6aa7cca815 | |||
ca00dec624 | |||
8e66124240 | |||
d13bd05b7a | |||
2b79203bdb | |||
b3162b5a38 | |||
44e310bc6c | |||
c4b70276ed | |||
189e753cbf | |||
3e30c1284f | |||
7449b625f8 | |||
c1c6c51ec0 | |||
81f9ae9ff1 | |||
99dbca381b | |||
17b4803381 | |||
edf2c8eb55 | |||
6186cbcdc7 | |||
bca71f643c | |||
196d8559d9 | |||
563424e986 | |||
72f06ca554 | |||
fba08308f0 | |||
b7dd4abee4 | |||
ec5cb88ea1 | |||
37384c6b67 | |||
6191b85f87 | |||
6ad7010542 | |||
9e8dd06cd4 | |||
ecc4c4e5f1 | |||
9a41af60c4 | |||
e8ee6f975b | |||
cd6804cd16 | |||
d6973e811b | |||
bcac1cbacd | |||
1dac605872 | |||
fc752b6918 | |||
ffa5e8ddcf | |||
1ca24332c4 | |||
7ac6a987d0 | |||
2412924bc7 | |||
cc35f723fd | |||
abd4714ee0 | |||
1085fee761 | |||
0348ce2085 | |||
6b95507ec5 | |||
7410992391 | |||
92ba06fb3e | |||
7adcfde079 | |||
7d1a4b2584 | |||
bc867d5b1d | |||
6a197964d9 | |||
e30c396ffa | |||
f70bd99d2a | |||
4611ad8930 | |||
702cf30e98 | |||
ed8ceabf3e | |||
70063ff565 | |||
785a3b4a6f | |||
38779e6b83 | |||
69d5bbf073 | |||
5181ac15c8 | |||
789aefc227 | |||
658a2913a5 | |||
e44651b496 | |||
b1ffca3057 | |||
cd39a41278 | |||
4c7e0d734f | |||
94acba86fa | |||
4bb9c59558 | |||
2fc0cf66a4 | |||
9647903dfc | |||
ca203f85a0 | |||
ad4fb6e569 | |||
6d28802d32 | |||
3f3f53cd5e | |||
5819eab5a6 | |||
79412ed364 | |||
04953ebf5f | |||
5cb34e2ea0 | |||
194695fd95 | |||
7f9bca7328 | |||
727fe92564 | |||
511aa44ee6 | |||
98bc961ee3 | |||
32b8a51153 | |||
f318e03495 | |||
dd5264612a | |||
5cc41f2a6b | |||
470f627c2b | |||
f3ac812e02 | |||
62d13437e2 | |||
ca892fe44b | |||
13b8158672 | |||
033aa0dfc3 | |||
08c524c0b7 | |||
56875113b7 | |||
dcbf6454b6 | |||
871baf2230 | |||
44ae0eacb8 | |||
3b02006afe | |||
e6fb1344ed | |||
3b3512941b | |||
5e64f01e79 | |||
c08bf025f7 | |||
a3a71c64ab | |||
edd9a4f9e7 | |||
d82c7d24ff | |||
2f5183c7af | |||
f2c32515ee | |||
c36cd07f9e | |||
2b6bb79fe4 | |||
561b8cc2e7 | |||
8ad0c86da2 | |||
593a4c32df | |||
16eb4031c6 | |||
9ec99342eb | |||
9bf0dd80a0 | |||
60108fd89d | |||
1e279a5cb2 | |||
efe27cf3f9 | |||
235a75128a | |||
ab87703c88 | |||
13c13623cf | |||
c6f24af160 | |||
1dd517c8dd | |||
55189c9d33 | |||
8e40275dab | |||
593124d520 | |||
878a7a7922 | |||
e03132a10a | |||
320d5528c3 | |||
7051707129 | |||
16849bbe0c | |||
1afe286367 | |||
4ca6368797 | |||
6b5bc77c9b | |||
a83c6bc907 | |||
deea25be1b | |||
50544a1999 | |||
edd38465a5 | |||
75476ec303 | |||
d6b682cf92 | |||
f5472a10c6 | |||
c844d14ca5 | |||
3263309ce5 | |||
0d0fe141a4 | |||
ec65adcf7e | |||
61b617c933 | |||
f0967a7e04 | |||
6d500a2476 | |||
4d472a76c7 | |||
ed849ed82c | |||
f00b337525 | |||
e5ec91b393 | |||
85cd9a1c93 | |||
bc41ccf12c | |||
137c5c4759 | |||
5ee19cda81 | |||
fbf3a47e42 | |||
674ad92923 | |||
7a0bcb7fb4 | |||
8dd1b21a88 | |||
8480c0b3f2 | |||
c49d7a3e63 | |||
7333a116b3 | |||
ea063cb975 | |||
2faeb11fcd | |||
45535e4a05 | |||
e294752055 | |||
88117c16f0 | |||
d164dd2f24 | |||
f208e51e57 | |||
0f11811ab7 | |||
fa200b0587 | |||
419d23908a | |||
29fbfcc472 | |||
192a12fb6a | |||
0cdc97cdd9 | |||
71a131415e | |||
f8f5650873 | |||
8211bde9c2 | |||
1efa7d9093 | |||
6cd6e71b71 | |||
d8abb266f4 | |||
e91af4dc15 | |||
f7b2fe6b64 | |||
36787b0e7b | |||
8741510d83 | |||
a7e06800d6 | |||
42eda83cf6 | |||
081c4d5e91 | |||
d72155d507 | |||
3a7346c729 | |||
16bc46c7ad | |||
231b251a3e | |||
e4fc65bf74 | |||
132384aa4c | |||
8c92bcc966 | |||
c409a3e585 | |||
bca848c84e | |||
b0800d3e41 | |||
d8bd3ff197 | |||
e8936747eb | |||
6d592c623f | |||
2b75ce2309 | |||
ad2d73b1d9 | |||
bbade24241 | |||
9f681d2d7c | |||
4ebe953090 | |||
40454b7b00 | |||
ac9590395e | |||
afd4c876a9 | |||
02363b5e46 | |||
56e3df459a | |||
e685107dd6 | |||
18e632f8b3 | |||
0985fba370 | |||
4a36cfb625 | |||
8c2872964a | |||
d9b2f7971a | |||
733ef79424 | |||
d4ad3f537f | |||
a4412d68d5 | |||
296ce46bcc | |||
07171b480c | |||
1d0b99ba1d | |||
314c716aff | |||
65cc80f740 | |||
6ad8352a3d | |||
e7a083ec3d | |||
4eadcb0537 | |||
df134c1873 | |||
b651032ea7 | |||
2b2f67fb7e | |||
57e37c5863 | |||
fcd9f36b6e | |||
0f4977705d | |||
5086ccef19 | |||
939cabfae4 | |||
13dee2a911 | |||
e01054d86e | |||
066007590f | |||
f87ff33a89 | |||
89ac87a976 | |||
7f9c064263 | |||
7ba4ada8af | |||
44e304abe1 | |||
bf59fac286 | |||
822148c5e7 | |||
fbcfefe5f3 | |||
f49f4d48ba | |||
576315e1be | |||
0e0fdbef1c | |||
11bce2059b | |||
095f927016 | |||
67c73110e9 | |||
336d9a2148 | |||
40a3888128 | |||
c0bff9755f | |||
56a5ebf48d | |||
bf4b7b0577 | |||
56eafbbc3a | |||
e5bcc72049 | |||
00367b2243 | |||
6099aa308b | |||
3a3fb365a9 | |||
fada3e56c4 | |||
76cedd2c29 | |||
e0844636ac | |||
6cc1e9e81e | |||
a298668b99 | |||
bc26e77170 | |||
819005332b | |||
eba32d217a | |||
8c4ad5b4a5 | |||
9d821fa1d1 | |||
f213f17992 | |||
076605bc92 | |||
7bab4c90a7 | |||
5687c98f75 | |||
8bd784eba5 | |||
dc78275993 | |||
b1859a6687 | |||
a268aac9e5 | |||
50c1f27069 | |||
806ea463db | |||
00a220877c | |||
e04c2c4527 | |||
4e48ac04da | |||
cf270f0d62 | |||
15070e7ea8 | |||
26679699cd | |||
f8f9b282b4 | |||
8fb221dbd5 | |||
d2b3e81095 | |||
d2b418bd33 | |||
2bb3e78066 | |||
89d2aa0cdc | |||
ed7d91d257 | |||
6468d87dde | |||
f87ad9225c | |||
d2bbc68fa3 | |||
066e61f3ea | |||
ad87d1c8b9 | |||
2ec1c13ac4 | |||
b887adf7a5 | |||
3e42ee05d8 | |||
e4c81bcca5 | |||
1234925ad7 | |||
38df060aba | |||
09f60ff0e2 | |||
4cf3af49ca | |||
f771b1669b | |||
89e51e6178 | |||
b468f9b9ea | |||
5874c7831c | |||
7be0df8dd3 | |||
1d17529954 | |||
ed6eb2713a | |||
de13519ca5 | |||
c1adeb68a0 | |||
7d18f88c6d | |||
0025f777ed | |||
09a106907e | |||
d991bf1fb4 | |||
f86c3265e8 | |||
e11072e6c7 | |||
7023174b88 | |||
a67cc5f5e8 | |||
2d0ee36913 | |||
ef1c968374 | |||
6449b67427 | |||
da5e07e6c7 | |||
ac08c81836 | |||
d149f1db69 | |||
30322785c4 | |||
a4f8e40663 | |||
0d6cc22017 | |||
4c7bc8db74 | |||
52e56e8479 | |||
804a34022c | |||
d82faa8ea3 | |||
ca4ff25290 | |||
b9d2e228b6 | |||
73ae076e95 | |||
8b6dfdeb20 | |||
7b2646536a | |||
b30d054584 | |||
a15eaec1e6 | |||
798fd4b69f | |||
b8a0cd11c6 | |||
c712144124 | |||
8d09cf6186 | |||
f60a8f02c5 | |||
a02bf7468a | |||
3c3a760513 | |||
c98f2eacfc | |||
7724f1142e | |||
2d7173d462 | |||
fdbdca2ec3 | |||
24a65f8019 | |||
e0b7a88f58 | |||
3b9d995ecb | |||
5fcfbe1481 | |||
c00f74a82c | |||
04a2edf689 | |||
98a47ac9b5 | |||
247d027a4f | |||
7fb6a6a6c9 | |||
fa0e8b5e92 | |||
0eabe139e5 | |||
69c2811acc | |||
173c7c4594 | |||
a0284db08d | |||
73716d0e92 | |||
38206886e6 | |||
00961676fd | |||
4e06c6eeb1 | |||
b8bfe142c6 | |||
4cea00a64f | |||
c7f473642a | |||
a932f6e507 | |||
6c1a669b44 | |||
6f028e7993 | |||
26afd648a1 | |||
6ba3a0758f | |||
577db029a0 | |||
d7a6d61d51 | |||
4e300cc780 | |||
8939d28f16 | |||
c2af6097c2 | |||
ab90782e72 | |||
60e0dc3919 | |||
318e5830db | |||
d4ef9a4485 | |||
9094410158 | |||
4e8b639703 | |||
2bfce48b6e | |||
39288038f6 | |||
30bc5b3131 | |||
47cdf430e4 | |||
91a7abf25c | |||
f9392990d5 | |||
2c213d35b0 | |||
f510c75d64 | |||
edfc5a9df5 | |||
45f06c56ca | |||
f9e6d3e050 | |||
f9c4a8dd3f | |||
10757897c0 | |||
4667322628 | |||
ca928c6768 | |||
3ae3ff2828 | |||
fa52f31e11 | |||
eb148d88d1 | |||
cd41fa378d | |||
f98bbda5fb | |||
64f477b401 | |||
52f8926159 | |||
088b9e337c | |||
69c0469bb9 | |||
d7d22a4a53 | |||
80b464af18 | |||
8df012775d | |||
a57240687f | |||
c97bb64aad | |||
1463c56139 | |||
029b5432a1 | |||
f0ebaf2260 | |||
338fd9ad30 | |||
7536a398e9 | |||
ec3dafd97c | |||
3b54fdf282 | |||
8220c4b778 | |||
4fc17b47a4 | |||
0f6e652f39 | |||
00296ea96f | |||
5b5c233e90 | |||
d14d03a6a8 | |||
0f007d8ceb | |||
f939df7a95 | |||
9e1a49cea5 | |||
c82aabca01 | |||
a1cd7eb93e | |||
590bdc649e | |||
d1130af40e | |||
ef0cb90ae3 | |||
5b574e1c85 | |||
c486c78020 | |||
0ee9b14c09 | |||
d2b2be3929 | |||
007faee948 | |||
d1e0a466d3 | |||
d31c150f81 | |||
979c8c7cae | |||
8745a2743c | |||
8536072346 | |||
ec926e0803 | |||
febe5b8a01 | |||
168d8a49b6 | |||
b4a0ec5284 | |||
ae48b42683 | |||
8c82010c97 | |||
6093c5099f | |||
78feacc440 | |||
7bcd9a1d91 | |||
fd50aea03e | |||
780639b4ed | |||
1a82923fd2 | |||
2f7f0c62fd | |||
2f58a007a7 | |||
db4f3bacce | |||
49f63e0aa1 | |||
fcfca1da5e | |||
34d9e68ff9 | |||
d6f7ec5f44 | |||
184b1ce171 | |||
fadd6353db | |||
b45912f453 | |||
cd23084284 | |||
bd2dc2b764 | |||
9a521d7125 | |||
8ebbe17b86 | |||
5d76958de1 | |||
e37d1f724a | |||
dddb9a85bd | |||
2f96970e1f | |||
6d9dc243c7 | |||
ddb3359754 | |||
dec73da3c2 | |||
e8ac242e65 | |||
7e78e56c34 | |||
740c29a478 | |||
988a273396 | |||
6edfa654d2 | |||
9e0b28cbe5 | |||
5632841c82 | |||
0b682636f3 | |||
956f56d645 | |||
a4faec3b01 | |||
cfdac82661 | |||
b26f792d72 | |||
21a4053fde | |||
d9f26edfec | |||
5feef37de8 | |||
16a29e53ff | |||
1f3055aa36 | |||
38b349cb35 | |||
93193a0f09 | |||
b77963c423 | |||
eec30f7bea | |||
7778e5c55f | |||
86803784d3 | |||
4cd150f5b5 | |||
5171960b23 | |||
21530bd421 | |||
abaa1de93b | |||
e7f176cd61 | |||
4ac376a67b | |||
b8d083ec74 | |||
9138eee4f7 | |||
f3003657a0 | |||
ca584085d7 | |||
e8abb5ab88 | |||
52353d09fc | |||
47a0832f82 | |||
7ae833bdaa | |||
cea0d9c0ff | |||
9d25207aaf | |||
ef5ff0b49a | |||
aa832c19b2 | |||
c5028b2e86 | |||
962c788861 | |||
89eef55718 | |||
a28e3fb694 | |||
e6b0a32cb3 | |||
b81147cb56 | |||
85801f670d | |||
2246216971 | |||
fe7c2b996b | |||
fb8823ddaa | |||
7691ebc379 | |||
52f18df1e3 | |||
04a8cfbbc0 | |||
1b457f8517 | |||
4ec683d077 | |||
a48e711120 | |||
9a3486e018 | |||
4a8cd72c05 | |||
6f48df1deb | |||
c423293d20 | |||
da38715ec3 | |||
816c5cb9fc | |||
8af30ab576 | |||
c84babb8e0 | |||
116cd21837 | |||
4af269171c | |||
82e0a81cf1 | |||
ab0da17856 | |||
85ecdb1471 | |||
38e386f2d0 | |||
ce39ba97bc | |||
229d5b2f46 | |||
101f454596 | |||
f3dbf4ce6b | |||
8920ee0dcc | |||
da42724549 | |||
c42cf911ad | |||
8e66b23b35 | |||
5e1326a7d6 | |||
3814116b42 | |||
97e4422a58 | |||
5c27182366 | |||
cae9887996 | |||
d06a606915 | |||
fc9302465b | |||
64ba44f7fb | |||
3e7633a6fe | |||
e9605bb153 | |||
069cd67854 | |||
9e3e49234d | |||
ab734d8c05 | |||
18f888598d | |||
75f4776610 | |||
3acf43c336 | |||
5d8ad8598b | |||
b7c11c6953 | |||
6f1494b252 | |||
d6d9a4e8c5 | |||
0e2d515b99 | |||
365f52eb1f | |||
901cb9ca46 | |||
4fc59af03d | |||
dff56a056c | |||
622c6b84ab | |||
3ed55e5da1 | |||
1e06611768 | |||
a95907b066 | |||
b2634c1f98 | |||
afa71b6113 | |||
c049572385 | |||
74bee3c8ad | |||
7d30418605 | |||
90b8339b8d | |||
43126edc3a | |||
e8ffa9ffd3 | |||
e26da8ba16 | |||
ffe26b6c1a | |||
77410efebf | |||
0b9ed92c40 | |||
56360d4f7b | |||
b95a1a4ea0 | |||
11278dbabe | |||
53525771f0 | |||
e433bccb86 | |||
b438dab367 | |||
3980132987 | |||
df5b051e6d | |||
56473ca9a7 | |||
14929253a5 | |||
374d7c2e94 | |||
0b50099c8b | |||
68da241ba4 | |||
31fef3f6f8 | |||
6d2a51eb85 | |||
63be06008d | |||
9ff2af2b47 | |||
5a73fc35e2 | |||
0c70b4ac11 | |||
1ad73926f2 | |||
609b7fb303 | |||
b894ad5233 | |||
4f176913c1 | |||
ef43711aad | |||
aee0baf069 | |||
17277ff658 | |||
72d9366721 | |||
9e0dd9af47 | |||
afc593d99c | |||
3fe5f2cfa4 | |||
53e82f67ea | |||
3ba64ca3d1 | |||
aecbe7a988 | |||
71e2b2903a | |||
0fdd9fd2aa | |||
895c77f361 | |||
a6b887e017 | |||
3e4f7a39f8 | |||
dd662870dd | |||
05d4bf7ea7 | |||
48d5b8d463 | |||
abc17d10d6 | |||
efc3d04af2 | |||
4f771fe98b | |||
dd1a0acc4a | |||
15161d9284 | |||
26ea43a5c2 | |||
633a36af58 | |||
d0c0fd736f | |||
53ac68e551 | |||
e3bf8ba2d8 | |||
5943117647 | |||
ba41ee1f0a | |||
5926fb5035 | |||
56a25a98db | |||
65535332db | |||
fc8867c3d8 | |||
45a354fe78 | |||
c68902c210 | |||
287cf6c7d1 | |||
bc885c194c | |||
56a3ef2e74 | |||
c02bda0f06 | |||
2255ebaa23 | |||
c6f5b05cf3 | |||
06684979f9 | |||
3639f38171 | |||
999001144f | |||
3907a64a48 | |||
4ed96f2443 | |||
d2d93829bb | |||
d6b7236732 | |||
a67c753d55 | |||
da968d5f2e | |||
d7564dc1b9 | |||
9225fd5040 | |||
9a90a439a2 | |||
083379d0f8 | |||
32107dffb7 | |||
2a203c50ef | |||
3dff32c804 | |||
fd8de1860d | |||
a0722870a8 | |||
cf0d1c3164 | |||
d38108f26f | |||
30ab312322 | |||
e9eb4d5df9 | |||
ea9787a6b2 | |||
e6d1c7fae8 | |||
4d319c3d09 | |||
7eed98ac88 | |||
2f8ba69b0e | |||
a461b694a6 | |||
9734325f45 | |||
c2e796290a | |||
db2c8dfecb | |||
17419ff948 | |||
3408a0ef0c | |||
408fdeba7f | |||
b2f8ce7591 | |||
6670f44cd0 | |||
a6cf8d6465 | |||
e6c04b9255 | |||
a895c32242 | |||
af0f410c70 | |||
961658f3dc | |||
eb00e8722b | |||
25d20d3332 | |||
200f02a518 | |||
ef6eceea56 | |||
dc98bed869 | |||
84ff4bbc2b | |||
00058f513e | |||
72e987d540 | |||
e0b41fd12e | |||
5b06ffea56 | |||
ce2399a446 | |||
182d7bae47 | |||
b98c89626e | |||
869ac71483 | |||
7daf3cd32e | |||
192666f352 | |||
66579d4e36 | |||
ecaa2d4741 | |||
7b28801223 | |||
2f399b7d5b | |||
540af09602 | |||
1b7fc32a54 | |||
16f6aa81b6 | |||
230e4f9df2 | |||
fabfe9da77 | |||
32abdd66a8 | |||
80d9238610 | |||
f5627e8454 | |||
f94ac9ad7d | |||
c3f58f6aca | |||
0612b27b9d | |||
ba38f37d18 | |||
3bd1e3db9c | |||
8559277fc9 | |||
6bc1374e2d | |||
888064d65d | |||
47f26dbe15 | |||
2712398a69 | |||
d28443e5c6 | |||
08b5280c9f | |||
2e8a4b0498 | |||
d9d1d20c97 | |||
11ba353806 | |||
b5a2a52bee | |||
952f6b0a77 | |||
feedf23de0 | |||
96d93d142e | |||
e816d807b9 | |||
2e53038cf9 | |||
7caffce31f | |||
68dd0d53d6 | |||
94d079ac5d | |||
cc98db367c | |||
141402dfc7 | |||
c31c09fe0e | |||
57566307a8 | |||
8d0e929efd | |||
163030bcd3 | |||
ef975087cd | |||
378a955d1b | |||
af4ecc24d4 | |||
b6636b0ea8 | |||
4d94ae4cfb | |||
16c851fa9a | |||
62079a595e | |||
34b707ff63 | |||
8a7d786b5b | |||
9b10c098cc | |||
b40546ed4b | |||
fb95ff8d50 | |||
e3218a2d4a | |||
2de6bdf857 | |||
6bc1b92977 | |||
54c5472f3f | |||
64b5d974d5 | |||
58c0d32ca8 | |||
8a3453fc86 | |||
bbc99cfe36 | |||
1ddb894e69 | |||
5f249e60f9 | |||
f4a99550e4 | |||
a2ee761bfb | |||
3e9cd53bbc | |||
236c637180 | |||
3fe302edfe | |||
b04c2f8ea9 | |||
5f1bf2f905 | |||
60ec3656eb | |||
93bcf24795 | |||
1d5192894f | |||
b6a523927d | |||
e8d483923b | |||
a0e72c4867 | |||
04da5d72d9 | |||
52a9599d07 | |||
f33e07f0bc | |||
9364864ad1 | |||
a5c27096a4 | |||
e67ab180fb | |||
7c1d70e8e2 | |||
5de47d0323 | |||
dd9c09d342 | |||
560796c750 | |||
b1c8369c19 | |||
fc0af1e183 | |||
32859fccc6 | |||
4b42983c7a | |||
ae593879f5 | |||
210a00872e | |||
205df70eb2 | |||
338c8d4b37 | |||
11cfcdd784 | |||
667d8af08a | |||
92646ea3e3 | |||
deeccbf4e9 | |||
7c45c8363d | |||
37f3d7bb70 | |||
118a9c7b03 | |||
986d50ea47 | |||
d32b6dee6b | |||
6ad917606c | |||
7544e2fc2c | |||
53e528a607 | |||
f4702c297d | |||
08d9f9562e | |||
89ab2503c9 | |||
a21dff6799 | |||
30a511cea6 | |||
381c4eb53b | |||
2dfba3708e | |||
8dcc818b40 | |||
c80e350089 | |||
ec9eb64f4c | |||
585495e887 | |||
08da24e059 | |||
0c58dc6ce3 | |||
652dce4d1f | |||
2c82fe3a4c | |||
f149d4cd64 | |||
4f2dacbf7f | |||
274a037f08 | |||
7a400e2185 | |||
1f35dae585 | |||
5c59680e7a | |||
1731d46ddc | |||
e4cce3fb36 | |||
0fcb1b826c | |||
09481b1b86 | |||
85bf79d31f | |||
b67e979f48 | |||
c74dae927a | |||
f23ae0b0f6 | |||
a019524d35 | |||
3ef916fa1b | |||
182dbdeac4 | |||
8670e829a8 | |||
ebda03ea56 | |||
b706ab379f | |||
d61350c403 | |||
adbb224f5a | |||
bb8b23eeaf | |||
1d6e07348a | |||
c0b028f205 | |||
bf6b7bf60c | |||
a2804781fe | |||
8fbfcc3a06 | |||
0d58e64ddf | |||
e7dc4f40ef | |||
d957d12e6d | |||
e4c784bd0d | |||
ae01122b57 | |||
b54c5168bd | |||
8ff2ecd344 | |||
c72f5f74a8 | |||
a372f8ae86 | |||
8f42472faa | |||
79b35019a3 | |||
5bbef4bd1b | |||
affd771ba3 | |||
e91883f545 | |||
fd054bc7d4 | |||
33f89eea9f | |||
6b059eac5e | |||
348f9f0ad2 | |||
41c4eb5fa6 | |||
ae51bb4ba9 | |||
93fcf37017 | |||
c19c704c02 | |||
28f727b59b | |||
c821f00b51 | |||
948a5d0310 | |||
53e24468f0 | |||
38641aa8b4 | |||
68680dd7cd | |||
35bff432e5 | |||
5b1f335ef8 | |||
3c57819005 | |||
dba3229b90 | |||
737e56aa56 | |||
5646a648df | |||
da1b088885 | |||
ce48284978 | |||
23a82e87ee | |||
555c9b6268 | |||
a23e0c9d74 | |||
51ce41c0e6 | |||
5117c27cc1 | |||
00eb7d7bda | |||
8dcadc9189 | |||
3e666898cd | |||
45808399fc | |||
12eef084fd | |||
7774de53d4 | |||
e8fcf1bf8d | |||
4c0432ae65 | |||
03a3404d5b | |||
b8b8ec8323 | |||
175ffd827a | |||
6343cd846a | |||
14cf3245fe | |||
516967c681 | |||
b40e780f8b | |||
ddd4f9a717 | |||
9f5c8503d1 | |||
f02bf35e00 | |||
516c0a5338 | |||
bad08c2c29 | |||
ea861ce831 | |||
61ba3ac92e | |||
98f609aad4 | |||
6269636418 | |||
cfaf4c7ac8 | |||
8602fb7f65 | |||
eff1306ea4 | |||
c79e96b4eb | |||
6b7bbc2b78 | |||
8a6e036861 | |||
e5565c45cb | |||
991ee05de9 | |||
0c0b16ac9e | |||
95cdd9f21b | |||
98b78efabe | |||
7e269ad06c | |||
bf7d6f1a82 | |||
0a9650c1d4 | |||
1908340b69 | |||
f79f8b4e33 | |||
654d9d6b36 | |||
d8bff383c2 | |||
3a1a037231 | |||
97bd2a7f33 | |||
91dddd47b3 | |||
fc932374a2 | |||
bc83738301 | |||
d47afe90ef | |||
d72cca0c44 | |||
1e40a11577 | |||
5d841e6a17 | |||
b0b25c8e9c | |||
9af0b15e95 | |||
c2e46420cc | |||
8107c81e07 | |||
de349ed45c | |||
044b49c381 | |||
6e50849b8c | |||
b49e210984 | |||
4554942c8c | |||
eb30e1a9aa | |||
8cb5c30c2a | |||
79dfa909bb | |||
ddb4cf08f7 | |||
1eea1dd7d7 | |||
512b77abb5 | |||
dd7acaad27 | |||
18fd26cb08 | |||
f0619f47c3 | |||
90557f4a4b | |||
d4e9978793 | |||
1b325dd971 | |||
7b42bba3cf | |||
2e410757ef | |||
b75bcc978a | |||
5e5d9c2d1b | |||
9ed5a36e98 | |||
aa56c11b19 | |||
bfa8166b71 | |||
8a7aff4b0b | |||
8bf921c32f | |||
69e1714dd2 | |||
394ac5b33e | |||
ca2f68abed | |||
5fd50b6b19 | |||
098240eb4f | |||
0c3936e41b | |||
a38fee31b5 | |||
07609028ec | |||
efbed263df | |||
29f391ec8f | |||
a6c8b4becb | |||
2a0a02f98f | |||
0e1380683f | |||
d08bc5ad7a | |||
2a82f744d4 | |||
335384d2b7 | |||
403f215cb4 | |||
662da6cf7b | |||
a1b15172d7 | |||
5e20c1cbc8 | |||
65f05505a6 | |||
48409b8229 | |||
df09bdb726 | |||
5271776689 | |||
b84c616750 | |||
612a867677 | |||
4f012694dd | |||
b43d74a798 | |||
9e71fdd506 | |||
e680caa298 | |||
34d8036333 | |||
dafcc7a26d | |||
a616a4be36 | |||
4cc2cacd33 | |||
17a478c854 | |||
26dc8f2c4e | |||
ba5062d78b | |||
2e4bc06b49 | |||
9550e97304 | |||
a956063e5f | |||
ebb7f54b1a | |||
3180af7fd6 | |||
825332d3c9 | |||
6e5aabd58a | |||
4d177e47c3 | |||
8e46d42009 | |||
c04871a398 | |||
d07ac8ee13 | |||
e47132be66 | |||
53ec8c5722 | |||
bed7ad9cd3 | |||
c0be410760 | |||
53c1717dc1 | |||
e98f6af77b | |||
cc85ce0aa0 | |||
4bd6927388 | |||
c632bda2f6 | |||
4629830b73 | |||
3fbd2af112 | |||
208318cdf4 | |||
89ae6b8fc2 | |||
a6a64183d6 | |||
80037f715c | |||
5c1baf5bec | |||
2b5c1e73a5 | |||
7f6586ff78 | |||
0e47ad6d2c | |||
be3979c873 | |||
09eb8d0c9b | |||
ece6b2fc8a | |||
143309fad4 | |||
66f569f4ae | |||
66671ded2f | |||
c91b93f22a | |||
8d7afcca36 | |||
aee7ab2f6e | |||
140a4ae7bf | |||
205a5620af | |||
6ebb7394f9 | |||
12b86b6433 | |||
6975e07997 | |||
79a219813b | |||
97ea709d42 | |||
a5b0bc4b34 | |||
e9aef1fe45 | |||
0fd179aeb1 | |||
77e0baa6e9 | |||
0beddb5e23 | |||
b3884dc59b | |||
cf8602b453 | |||
117ee71698 | |||
10d522133e | |||
96cf680c3d | |||
dbcb0ce5e9 | |||
838fbc71cf | |||
8ca1ada083 | |||
064c7999ae | |||
903d9a225e | |||
59e6f3c6e3 | |||
bf48f6ab11 | |||
a1c82c5ebe | |||
12b835050f | |||
70ea3b9141 | |||
78b43c8990 | |||
3d5d6e8dc7 | |||
64402bbeb8 | |||
c67e4db2dc | |||
610b3d7a33 | |||
4130eb5f04 | |||
2144bb569d | |||
1fffa4ecec | |||
957481c307 | |||
dc2d07cf42 | |||
260ba6b25e | |||
34473ea6c9 | |||
e82b02c004 | |||
44eeed0e5c | |||
81877365d5 | |||
df248f0c10 | |||
5baadba532 | |||
9d49598cd6 | |||
505fe3d73c | |||
7c49cb8f9c | |||
1cd7d3e664 | |||
dc1c30ac17 | |||
5529231598 | |||
b6b8575c0a | |||
7eeaeeecc5 | |||
11637452cc | |||
31b081a48d | |||
c4917775fd | |||
00cc4c9455 | |||
117a66070a | |||
b0b3219666 | |||
223a30ce11 | |||
1c6d8a9cf4 | |||
078bc41ce2 | |||
a2fe7789e9 | |||
a808d63cd1 | |||
5f2adfe1a3 | |||
53a9e41891 | |||
3b618bbe31 | |||
af505671a1 | |||
4017de0d10 | |||
ba37b94e8e | |||
f3f36faf35 | |||
8e04a1762b | |||
69cfbb0750 | |||
cbae2e401e | |||
7790cb680a | |||
0ae21ff7ff | |||
789bdc3d9b | |||
bc25a361dc | |||
1af482c9c9 | |||
b6e2afb1ff | |||
bfb0f755b9 | |||
2974ec2cbf | |||
2d977b2dcb | |||
2190a632e0 | |||
9c6274cd8f | |||
1429092d02 | |||
672f7d7b2d | |||
d3dab12244 | |||
9952e72d06 | |||
fe8170f909 | |||
e6cff0d830 | |||
8676c268a0 | |||
3c78445ad9 | |||
e32ded82f0 | |||
7da602ff47 | |||
aff7d1f864 | |||
e98af86a2e | |||
f80c5d9133 | |||
d5a65304c0 | |||
dca20cd77f | |||
2395425653 | |||
db992acb73 | |||
2cf9d3883c | |||
b159d443dd | |||
b4d9f229d4 | |||
6b88f90f06 | |||
e7a5062997 | |||
0d1366dedc | |||
01b6b245f0 | |||
75afc79aae | |||
6d6fb6bdd2 | |||
2f62a352ea | |||
2677e2dbf6 | |||
2edffffa2d | |||
93b0c7cfc6 | |||
03abf8dbd1 | |||
083e4ef1ef | |||
59c7cb7d37 | |||
d16187ed2a | |||
39ff703aa9 | |||
099975debd | |||
ee1739cd00 | |||
a8305e74a2 | |||
31b7ee4201 | |||
95de2317c6 | |||
2aff3005e0 | |||
fdd5afde49 | |||
5ddce58bff | |||
d789b658f7 | |||
842dd3328d | |||
f897623aac | |||
fac491dab7 | |||
599bc6070d | |||
dd57ac2f35 | |||
9f11185920 | |||
655dba4055 | |||
4d5fd77cf8 | |||
cb1e386eab | |||
a6bff2d8ab | |||
4b9fa2d6ea | |||
1db5bc7dac | |||
3663d55a23 | |||
1f4f0b47f5 | |||
aeaeeb7687 | |||
ee47fe42f5 | |||
6e5693386b | |||
f354c8c625 | |||
136e0cbbc1 | |||
f9c6a8821f | |||
c04757b108 | |||
dabc0adb3a | |||
22d5b07160 | |||
6daa8c3ba5 | |||
49111cd2ba | |||
a7ec42619c | |||
4f8b00602c | |||
d1f3022ebf | |||
396bb46e7d | |||
84b4882b99 | |||
9a2922871d | |||
18129f919a | |||
6f785b0f62 | |||
f787e87145 | |||
ccde6be13a | |||
5f26d8cb4a | |||
cb858d6d62 | |||
6dc488a678 | |||
a02f00e5d6 | |||
fe2a4c1001 | |||
6bc471461b | |||
c34bb3807c | |||
35d7843799 | |||
840bef061f | |||
a53dbd4780 | |||
0965044c99 | |||
04e0712f46 | |||
66815114cf | |||
2bd2be545f | |||
fc59f0860b | |||
9006df98c7 | |||
e3a1386694 | |||
149620fdfd | |||
3002eb42ed | |||
f4cfefe788 | |||
e13bc1c12c | |||
8273e13a11 | |||
8355aa4de2 | |||
1645ecc8f6 | |||
5674bf15f9 | |||
69a88ddb5d | |||
47ac6355b3 | |||
56a74bca69 | |||
ecb0e409a4 | |||
a51f490870 | |||
aa6a8fb919 | |||
b7731574f4 | |||
2d65608733 | |||
2c18ba5bd7 | |||
54e9894353 | |||
49fb39b783 | |||
79f7fcc927 | |||
b863468533 | |||
549a33091a | |||
0266be0d2b | |||
8fb7cd4123 | |||
b9f9f6c12b | |||
48be6b276a | |||
dcd3d072d4 | |||
2b4ded0be8 | |||
01ec713c26 | |||
f6f54dd3fa | |||
cd0a5fcafc | |||
45473dd370 | |||
0afd3f41d6 | |||
4ebe6dff1a | |||
c83c5af3ae | |||
2c208bddc9 | |||
8499f7fb1b | |||
3bc41cf7b4 | |||
fa0bdd9ee0 | |||
83565dea86 | |||
9d422ef381 | |||
d903fffbc9 | |||
acabbce229 | |||
915d1eaeae | |||
f8cd291344 | |||
4ce52903b0 | |||
9f3e734e5c | |||
ef613b97cf | |||
de74842049 | |||
e612418221 | |||
c97bf6fdb4 | |||
9900cf8009 | |||
7e303581bc | |||
7b6a82dc1a | |||
b3bfb2a1a7 | |||
ac7d6b409e | |||
3d676f147e | |||
d0ee87032a | |||
a317353f42 | |||
a3eb3df01c | |||
3cd4327ad9 | |||
682b166886 | |||
7fc6847dd6 | |||
97fe371b9f | |||
58cf6030f5 | |||
94b032ee5e | |||
34944be317 | |||
dd3604422f | |||
4ed2598c67 | |||
c96f802f7f | |||
7f9ceef51b | |||
8034813581 | |||
9a2021c09b | |||
7fa1d9de5c | |||
11bf9df9ac | |||
ffcf641cc4 | |||
cf4ede85f9 | |||
6e61c5ec00 | |||
fd2d4730c6 | |||
69dd524993 | |||
447e339656 | |||
d3b4de7bea | |||
8247cc3328 | |||
8488853fab | |||
dbc958495d | |||
75985f1d0c | |||
8f89549d3c | |||
e425a09d6a | |||
e0060a80f0 | |||
04b02069e2 | |||
8e6fde0157 | |||
0c526386f4 | |||
b2ecc572de | |||
04571d8dbe | |||
25930f4a3f | |||
998737df71 | |||
bb65180ee8 | |||
3b89ebd891 | |||
6704049fc9 | |||
44fc40e091 | |||
1e67a04ff6 | |||
1f088c8757 | |||
5e5e789f9b | |||
efc4be6bf1 | |||
ad64781dee | |||
17dda3adb3 | |||
11f0079c5a | |||
d1e50f9e9f | |||
e342cd3322 | |||
0a2a670502 | |||
0a3d4e0ca0 | |||
864dc3b008 | |||
ce603d5911 | |||
eded500e3c | |||
8bee86ef23 | |||
e0b74a142c | |||
6a8cde4927 | |||
eb6887e1b6 | |||
6e9f42bed9 | |||
a608dd80d5 | |||
a839581855 | |||
c156b584ee | |||
53e282acc0 | |||
b753006f38 | |||
b5b5490bbd | |||
9364afd3c0 | |||
8d5c17389a | |||
c46dd39541 | |||
257cc4f9c3 | |||
e7dd380402 | |||
7325ac5740 | |||
446e4dc238 | |||
761dbe228d | |||
ee37c39a43 | |||
79ccc69332 | |||
f3161df2eb | |||
e5b2453f91 | |||
573481bf6f | |||
63266c7e66 | |||
4af0adb443 | |||
fdccfc6267 | |||
2d7bb7e141 | |||
abd02cc1ca | |||
c6ab2ffaa0 | |||
8187f11d1a | |||
63cdea2b2d | |||
f0303dbf91 | |||
7b98e3ebfc | |||
3a02147d22 | |||
9a768be0a5 | |||
af681b62a0 | |||
b3fa6a03a8 | |||
d615230cce | |||
632e241468 | |||
7671bce33b | |||
3e576739c9 | |||
dc1596c8c8 | |||
3a7a3390f5 | |||
aa3b5e29f2 | |||
bd6bdc5c1d | |||
73704533d6 | |||
1c2313d339 | |||
c052ba0ac1 | |||
8e9801380b | |||
2f3c37bd62 | |||
2b9004de60 | |||
3fa3bf97e5 | |||
872fced41d | |||
ce62238998 | |||
7af59f709a | |||
eaba79cc66 | |||
528ae9e811 | |||
23f870ad3a | |||
dbc90df35d | |||
c4a8c48b2f | |||
4062b6a3b1 | |||
c105d9ab3f | |||
10615996cc | |||
b61a4da5ec | |||
70282aece0 | |||
e5e24107f9 | |||
56a0c2579d | |||
cfe1016883 | |||
59e7a43f9a | |||
cb06cfeca6 | |||
1ee3dbc63b | |||
c8b0f31ca1 | |||
d778b3bc90 | |||
2a6140ea85 | |||
9ab4dc32b4 | |||
a1d7db8215 | |||
c0380a24e8 | |||
68cd0d0b2c | |||
7ef06b0234 | |||
310623b2dd | |||
4d9dd22bd1 | |||
0751d7bded | |||
24a974a8cb | |||
c2a2d2ba26 | |||
aaf28d2507 | |||
792fd51b14 | |||
977b8e83cb | |||
e1498ce6da | |||
56626cf5d8 | |||
3db439eb1a | |||
1ac2cc253b | |||
2f55726609 | |||
6d295ac950 | |||
4c28ccd0dc | |||
084233bbb6 | |||
9bffbc0873 | |||
fa043c4e9d | |||
d51665600e | |||
9ed10bff31 | |||
a5f8b8c806 | |||
1ad159094b | |||
6f1bebe984 | |||
b7fb24677c | |||
dba6c4cfc0 | |||
de36d7ebfa | |||
1bfd56cb25 | |||
fdba0cd6af | |||
1f9112f798 | |||
d5a67aa4a4 | |||
6130ad26b7 | |||
6424ac9232 | |||
44f558ec26 | |||
dfd3f21174 | |||
741dec4681 | |||
71090c6063 | |||
4f81bba18b | |||
646109a4ea | |||
8d7937abb9 | |||
e53f8c9025 | |||
68bb307418 | |||
d2bba86bf7 | |||
1c8e464e36 | |||
4311d9f852 | |||
71b1ed8f77 | |||
1f220a9da7 | |||
41de2a08ec | |||
3f4af0da93 | |||
7e8998466f | |||
00b7533629 | |||
e5c1aa69c7 | |||
9318d6d625 | |||
75cd6d2a97 | |||
5f6cfef424 | |||
32fecd689b | |||
8297fa1e20 | |||
6a4f46ac5e | |||
c44d1e2c7c | |||
2119d0ba43 | |||
ebdf298ec2 | |||
24c1f94258 | |||
541498be0a | |||
dddd5cca75 | |||
a185665de4 | |||
0bed4c84cc | |||
0dcbcd3191 | |||
bb45f38eb9 | |||
6ed9df448b | |||
c896df7f15 | |||
e3229a5192 | |||
44db2f6012 | |||
938ae2655f | |||
d6cb3bc942 | |||
9d667906f3 | |||
f07d3b4585 | |||
672a4feee6 | |||
255aeaa9a2 | |||
8d1b0f1dbd | |||
23e3f9d6ed | |||
1b296ee3b8 | |||
e9f86c1016 | |||
22f8ee0f0e | |||
d254fc4ac2 | |||
e1ebabe3cd | |||
3ae1765df6 | |||
ef90609cbb | |||
183ad06f52 | |||
a0b0d42d69 | |||
4684dc0c63 | |||
a6531a335c | |||
0d4dd167f5 | |||
8c4c370030 | |||
94022a0abf | |||
0868f96439 | |||
96eceba314 | |||
be6583ae5c | |||
7225ed6035 | |||
5cfe449814 | |||
182a0aee3d | |||
4ab7ef93ee | |||
f5529d9edc | |||
291a014e15 | |||
17f0f01188 | |||
9d4f94af24 | |||
5544f62746 | |||
2b6d249632 | |||
dc83cd2ac1 | |||
cbc5b99ac9 | |||
0d866f8cd8 | |||
f71c6ae216 | |||
5efe122b27 | |||
abe9673774 | |||
e549503967 | |||
172ef5fe61 | |||
338e9dcd6b | |||
24d994afd2 | |||
52c89d302b | |||
d1f7c6f286 | |||
286b07ca33 | |||
4bf67af212 | |||
900a254475 | |||
5bf7b1ac69 | |||
2e7c2cef15 | |||
09ea37172e | |||
206905c309 | |||
5bf7ffbe08 | |||
eb3cd85610 | |||
214fb9b511 | |||
d346a19ded | |||
bda161b4b5 | |||
1e7da75b77 | |||
89f919072d | |||
1bd5d2e07d | |||
afb3a7bd22 | |||
b3a247ccca | |||
f6be41a988 | |||
f9e10f26ba | |||
6dc9d0352e | |||
c7a3152273 | |||
b39bc2510e | |||
d48dd84ae8 | |||
fab9ae8167 | |||
8407d4f12e | |||
2f2c7ebfb4 | |||
6ca5b475bf | |||
984d0c6afe | |||
824b4b8a20 | |||
9c26605353 | |||
3465d2730b | |||
3e89b65c2c | |||
75909184fe | |||
b143e677ee | |||
cdabc407cd | |||
99e54fece3 | |||
16043d6742 | |||
96f18a01da | |||
141020a80a | |||
75c5eadaf6 | |||
6f6be5afbd | |||
1ced4e64b0 | |||
433bf770fc | |||
bf33b03acf | |||
6cf33858b6 | |||
3404247115 | |||
4714100c49 | |||
4e3cb9588b | |||
b4a2938f09 | |||
a151311b59 | |||
f68cc81513 | |||
443fbd7049 | |||
fa36d0b79f | |||
1d812e893a | |||
0ae3a14307 | |||
55c8702324 | |||
95ea799019 | |||
2a3cef29d8 | |||
47607bdc83 | |||
53e92360f5 | |||
970ed2ad29 | |||
2ae9d69888 | |||
ca15430bf7 | |||
4aab4abfa2 | |||
ee38b991eb | |||
84400180fa | |||
c9a717ddb0 | |||
bd75e0c5cb | |||
56e2f130a6 | |||
81726663bc | |||
e921911f10 | |||
0e61a53b06 | |||
77eaecf06b | |||
611ec48c1d | |||
6824173704 | |||
b1f1ee38d5 | |||
814c8657cb | |||
92780afb68 | |||
adc0d3b4e9 | |||
820ad004bb | |||
61b46a2dd7 | |||
a71071c96b | |||
0f6f70c394 | |||
1c08a9a9c4 | |||
cccb2d76c5 | |||
65718760fa | |||
5aa043b800 | |||
5a62427e14 | |||
516f0acbb0 | |||
3d27705d27 | |||
f538d74e9c | |||
75f0124c44 | |||
5b43484db3 | |||
5a1ba1bc29 | |||
6cd5243295 | |||
737b77c4bb | |||
e6db9105ec | |||
12e9c5ee86 | |||
804b560704 | |||
32c63e050c | |||
1cb26a6300 | |||
37bead6d26 | |||
8a3bc3be92 | |||
9f78faedab | |||
eabb0c06f5 | |||
089790c7a3 | |||
d666ee86a4 | |||
20b03bb706 | |||
15ffb63db9 | |||
1c40cdf360 | |||
e7ad0f2a2a | |||
cb03065074 | |||
e653ad07ca | |||
e967cfa409 | |||
c015bcc304 | |||
441867d2f0 | |||
cc633f2e3a | |||
118e9755ec | |||
540b8ecc1e | |||
b1fa25fab7 | |||
f978191b64 | |||
7bac50e824 | |||
bfe0948f7d | |||
3fde8c9977 | |||
f8a13d5a22 | |||
75372e5a75 | |||
cedd4525f2 | |||
f9bb675690 | |||
6f9a77851b | |||
f2eb687d19 | |||
63be9181cb | |||
ff072e6ebf | |||
8e4654527e | |||
6d5f007813 | |||
fbdd18b650 | |||
466ca2c1ad | |||
91dc1e74a5 | |||
bcd62f5737 | |||
01bfa53f77 | |||
ec12bd011b | |||
b40c600914 | |||
2806ec971e | |||
faa1118fc7 | |||
7354605f86 | |||
eae254efb3 | |||
a547584445 | |||
c34ebab410 | |||
c294fe792c | |||
ae438be578 | |||
d498e52c3f | |||
9c5263c9c7 | |||
a3d79292e7 | |||
b48148f4b3 | |||
3f5f74d134 | |||
cf2ac543a0 | |||
821004776f | |||
7a4983d1d2 | |||
ebc8423cbc | |||
c9ac0bcb98 | |||
e65f500a0b | |||
4d9d3f164d | |||
d8663e0fc6 | |||
6ec322ec7c | |||
3d2e18ad50 | |||
16a23c0e10 | |||
bd3c1c7dd8 | |||
bd62472f76 | |||
94e5ceea8c | |||
84c7d2dfea | |||
4519277ca2 | |||
e127a8711f | |||
1ab6f0c176 | |||
e7601b5d6c | |||
81fa1b34dc | |||
123b191b47 | |||
b3100775ae | |||
cc805d9dd6 | |||
0174ea78bf | |||
a58e503442 | |||
60a4e952e9 | |||
e6078290c5 | |||
87afa90731 | |||
60510733ae | |||
02b29b9d01 | |||
99035650aa | |||
a017e5fb3d | |||
24d0ed7978 | |||
d6900a96e0 | |||
7cd39d2770 | |||
c3488988b8 | |||
3bee7df954 | |||
178d644d62 | |||
1278728fbc | |||
5c0ef70244 | |||
dafd514d30 | |||
b729d8b6e3 | |||
220c2092ae | |||
34ca460af3 | |||
94545910e6 | |||
5c65d00ef2 | |||
fbbef02f06 | |||
01cfecc883 | |||
805b291830 | |||
3f3eca9b32 | |||
874466481c | |||
2cbfadd1de | |||
38f7db79b5 | |||
b765fa6e47 | |||
7e2625587d | |||
71299c274b | |||
ea4d1246e8 | |||
b52354b6be | |||
e6111a9e01 | |||
06f855cfe9 | |||
d5f0b4a17b | |||
c4a71467d1 | |||
272fecafbb | |||
c332a47c54 | |||
03b20350e3 | |||
e0cd2eb6d3 | |||
291e88a01c | |||
71a7ca786e | |||
6b7d40a973 | |||
46cef44dad | |||
9f2e3ad628 | |||
61657c2fae | |||
23e7361334 | |||
4b1bfe6d85 | |||
fc7b953366 | |||
98eeb96135 | |||
3f76a2ec4c | |||
e4d6c033fe | |||
380c6b2c62 | |||
87ddea26cf | |||
3f3b4d5d74 | |||
6f6afe514f | |||
a3a1a1c39b | |||
dd80b5c7a1 | |||
f74b6e351c | |||
ec430ee343 | |||
f93c157a93 | |||
161df738a7 | |||
36a0bb823f | |||
501e3c1837 | |||
b7b11475c1 | |||
d60386ef2f | |||
edad34b883 | |||
85c52c5d97 | |||
da60958ae3 | |||
e9b3fd1d5d | |||
d6f259e834 | |||
4444ea54e6 | |||
6f28157fca | |||
4f65b87cf4 | |||
36eb500994 | |||
fa8f9ecc69 | |||
f895dade61 | |||
06e067e4cf | |||
591b0ff535 | |||
6d126acfac | |||
a8cb7ed784 | |||
e8338da597 | |||
b38586f77f | |||
86e0ac4755 | |||
21d79ad0d5 | |||
8f18eb510c | |||
9eca4b15ff | |||
9bcdeb274a | |||
d250063c09 | |||
815d96a975 | |||
8b3380044d | |||
f8d9a13aba | |||
6476e41512 | |||
a211298d20 | |||
ef8258a830 | |||
27db6c866c | |||
5cb80763d7 | |||
1c6cbf3a6a | |||
d8eadffc7b | |||
887093b627 | |||
6fbb57fb22 | |||
f0bd902a2a | |||
3005ceecf2 | |||
8aa05ff5de | |||
8db8a6154f | |||
ba2edaffdc | |||
d801b1feb8 | |||
9d678f2e56 | |||
26136092c0 | |||
8406179eff | |||
13471bc864 | |||
b362938bef | |||
bccc7e7072 | |||
951a6207f3 | |||
a5ce45b954 | |||
e9e1c4048e | |||
0ebb7840e7 | |||
16434322ed | |||
33768dd08b | |||
73692e8b77 | |||
d125593b2e | |||
80556ec247 | |||
a682fc81ae | |||
724753d472 | |||
186c2f9abc | |||
d76947f13b | |||
302951d9c3 | |||
79d7f6b5fc | |||
aa1eff3031 | |||
e181dd164b | |||
c83b9783d4 | |||
9cc1603173 | |||
05bc9b38a3 | |||
42d300533e | |||
ba9e482a36 | |||
650a56f7bb | |||
533e4399f1 | |||
e4faf5a209 | |||
5aee8262d5 | |||
a3580e59be | |||
8abb05ac45 | |||
63fd650e2e | |||
a988091d39 | |||
39e1f44f33 | |||
06a078a067 | |||
6ce42616bb | |||
c004857da0 | |||
1d8568c914 | |||
954a5b50ad | |||
69855f2e60 | |||
97fa809f7c | |||
50337f164c | |||
97e1e3e264 | |||
1d20cfa1d4 | |||
83af733a47 | |||
2fd49721b1 | |||
92bd83979f | |||
ee6557c06e | |||
a6d7c00f1d | |||
3c015a06b7 | |||
71397fa690 | |||
5f73e220ab | |||
e202e67709 | |||
1d534981d9 | |||
b4cac8f763 | |||
088f3d7988 | |||
cb4fa5dc47 | |||
8629b49606 | |||
0826e35a35 | |||
815611ef56 | |||
029d67278b | |||
b2e440a6d8 | |||
6455740c09 | |||
8d6eae5d6d | |||
5abeb06a73 | |||
a6c73c8987 | |||
ae43f32458 | |||
1bfa2c79f8 | |||
2fff391513 | |||
937931ea04 | |||
f584f19efc | |||
cb01aa586f | |||
56258ff92b | |||
aa30d6237e | |||
fb19c8aae0 | |||
283b446612 | |||
941c9ac074 | |||
b52f7c7c46 | |||
bd467d1481 | |||
3e7f006280 | |||
fbd6869f91 | |||
607ee30403 | |||
3b90603668 | |||
331d71bad8 | |||
c84f73aec5 | |||
b31d1d76e7 | |||
bfafa9e037 | |||
7bc90bce36 | |||
23140933b7 | |||
ebb2d3c8b7 | |||
a26986e1a7 | |||
8eef3bf3ca | |||
40d816e964 | |||
9b4b33ac37 | |||
f555a58abc | |||
542fa6de38 | |||
8dd2d485b8 | |||
ffa520fc13 | |||
1cfafe25e3 | |||
7adc370dc7 | |||
a28ee1b186 | |||
10bc806ab3 | |||
40f539f8c4 | |||
eda12901fa | |||
a1114f608b | |||
63ae8dec79 | |||
2883f7af94 | |||
3b4db8f4a7 | |||
d4440fa641 | |||
159cd3f421 | |||
04e49425ec | |||
db10892a17 | |||
9e17b749d2 | |||
615ef58a29 | |||
7a4e5e3988 | |||
cf76076f22 | |||
25479cd207 | |||
3faefa2651 | |||
b7da27ccf4 | |||
293b5b3531 | |||
31b2f8f1d0 | |||
6716babee5 | |||
af995bbd75 | |||
dfd89fc85b | |||
50ee91c17c | |||
58ecefb181 | |||
af258cc179 | |||
cbbfb702f6 | |||
1862b503a4 | |||
0e971e11a0 | |||
b71fb5282e | |||
bd077cb396 | |||
d1141ab5a4 | |||
61af679838 | |||
9e581ec226 | |||
7a95575b85 | |||
3f882fafa0 | |||
93e08c75d3 | |||
7f40bd667c | |||
e7840af3b7 | |||
891f2bc6c8 | |||
bece6e86dd | |||
11c5b3b180 | |||
b877013fbd | |||
bd713574ce | |||
9636f2cb30 | |||
12197db238 | |||
c97802fd4a | |||
a022535f2c | |||
942650f240 | |||
0e557aba4e | |||
94aaf5b471 | |||
b2680a12e4 | |||
da41b6182d | |||
b8473d0191 | |||
4436ebef06 | |||
0c9630eeff | |||
0f82c12f71 | |||
58f3fd636c | |||
805da6ba53 | |||
834d8c2998 | |||
b8de015835 | |||
07e78649e3 | |||
4ccea758e9 | |||
4ddbbd84d9 | |||
fc31158522 | |||
a0a3eab36d | |||
0560a66450 | |||
efa022db50 | |||
8852188113 | |||
d589be3648 | |||
54f8116d86 | |||
f394fbefba | |||
bf224f85d0 | |||
7f996244a9 | |||
118b18e63a | |||
9f363fc85a | |||
90a9db537b | |||
e6ac20b9d0 | |||
2d68cec918 | |||
b48ca53091 | |||
4b59fe402a | |||
9e81aacd9c | |||
d548edde4b | |||
8b93cb756c | |||
37bf996efb | |||
26d1be15ca | |||
cd57d576eb | |||
026fd87f39 | |||
8b45399adc | |||
45b5e03641 | |||
221b894e7d | |||
8aced763b3 | |||
0d4c593c4f | |||
60efd6fa53 | |||
f1f0a0f98b | |||
2d69d594de | |||
92e000cfff | |||
5c74911f71 | |||
d2f3afcc17 | |||
7a61c6c398 | |||
23d5c4c532 | |||
dad7f37f72 | |||
e1484e4b3e | |||
c045a02174 | |||
b6df6b065c | |||
1c3086a603 | |||
73451fdea2 | |||
7cdcc38f29 | |||
c528426b26 | |||
1cae45432e | |||
5e9ae0c2bc | |||
bd65985a63 | |||
65f5de2bc4 | |||
b49638dbe4 | |||
bbcf1a0878 | |||
d1c69c65ce | |||
7ca19b289e | |||
265cd9a2ee | |||
756646757e | |||
4ae9f1e5d8 | |||
c2ce370f30 | |||
7c07110923 | |||
506b9c102c | |||
e1e3289052 | |||
034cf6390f | |||
cbf9571588 | |||
2a0e3b25ea | |||
3838701c84 | |||
c83bab62b3 | |||
5c8ff794a8 | |||
1aba2a32e8 | |||
d5be4e4046 | |||
a8280e4cc0 | |||
a48e8f52d8 | |||
6779d2352c | |||
38a4f2a974 | |||
0bc9f0b827 | |||
8250e2e2d5 | |||
6e33797841 | |||
0c89c297e6 | |||
3ccae2b7cd | |||
6bb9aaf93f | |||
1c9746ceaf | |||
23063305dc | |||
fd15c0b8fa | |||
731e58e319 | |||
bb5b9fee8c | |||
a581166820 | |||
1a9b7b50c7 | |||
a0259b4273 | |||
73be5f7211 | |||
596cb6cde6 | |||
3de43e9541 | |||
2f72a204a7 | |||
e938fb78f9 | |||
cc0b6f18cd | |||
389c827943 | |||
2dd3b5c0f8 | |||
d701ef7475 | |||
9e877ec60d | |||
9b5447b781 | |||
26e2eeb276 | |||
391bb132be | |||
287910765d | |||
19be7b569e | |||
e67f539de4 | |||
933e6ff02d | |||
bd74b602cc | |||
287ce5f1ee | |||
d913036e18 | |||
d1b80f0fc2 | |||
0b707f6667 | |||
39930b79c1 | |||
32f2ccce41 | |||
895fb4b361 | |||
6118cda858 | |||
3f56ad9f72 | |||
8a20edc861 | |||
14b81bb461 | |||
658c3fec91 | |||
473d97940f | |||
c1604d0bff | |||
4ed8e9ce9d | |||
8b1cdd55a9 | |||
173620a88d | |||
1513d72a38 | |||
3480457285 | |||
f4bade774a | |||
6af55e583d | |||
22d2604c46 | |||
6575854856 | |||
9e83840bdc | |||
2469a9eee8 | |||
bc17b6f98f | |||
ec35a3d885 | |||
a347ea3787 | |||
320d6e88af | |||
bd3dd59f4a | |||
4a45ab8bd3 | |||
e348eba641 | |||
ff08188839 | |||
c732d689ac | |||
b7d08923b9 | |||
7cd2047c7b | |||
b0d3695d38 | |||
1f66809111 | |||
ceff01e3b8 | |||
2782048512 | |||
46b99dd4bd | |||
74e22b5ce7 | |||
8970992f5e | |||
0558d0c215 | |||
416f411b8c | |||
d8ce9a8de1 | |||
ec21170b87 | |||
73c92dac0d | |||
a04dee6895 | |||
bee82ab798 | |||
c5a5b369a8 | |||
630aa4b3db | |||
731e6288e6 | |||
ef4fe3e37c | |||
26be0bdbf6 | |||
3473f76e90 | |||
2a9a49b7ba | |||
50b7ed2bbe | |||
f54ae3875f | |||
7c09c6a960 | |||
dee167ee39 | |||
85e1491eba | |||
651f99f12b | |||
6ad0ab1a69 | |||
e3d9d67e99 | |||
94694a810e | |||
99b075aa94 | |||
5bca34193d | |||
e29c70dea1 | |||
4a216475f5 | |||
d225834220 | |||
2450a7e724 | |||
2e5f1f7e94 | |||
9594550452 | |||
76ea54e962 | |||
f41eea4c0c | |||
66bd887005 | |||
48c7870e52 | |||
408d1dac9e | |||
ae863e2e25 | |||
959f406bf3 | |||
748caed022 | |||
536799d5f6 | |||
734c999637 | |||
35103fd961 | |||
15b6c4af63 | |||
d756c27a54 | |||
8fa02a8ef9 | |||
bc3668a468 | |||
4902fee441 | |||
cf425783c8 | |||
a76cf28279 | |||
0acfe1c8cd | |||
5b9062f3f6 | |||
92bc83674b | |||
d6db845f01 | |||
9fadd9a917 | |||
6c2c018e15 | |||
1fe7dcb047 | |||
f71991edc3 | |||
d60e9ab74e | |||
405812209d | |||
25c6d3a35f | |||
945b698f82 | |||
c2092569d5 | |||
efa56ab12b | |||
b8d575c644 | |||
12b1d7df70 | |||
0d9fb55ae2 | |||
f07d7dc2fd | |||
d6de92ef1e | |||
2ad6f8138a | |||
7abc037da4 | |||
b5b8a7d540 | |||
eafa2035ce | |||
f107b6c3a0 | |||
d4f39abebf | |||
b091b33c2a | |||
325fd3462e | |||
086f0faf75 | |||
a8ab2b33a4 | |||
93b343a779 | |||
d28b74ce6a | |||
92b0e8dcae | |||
f9ad22d9f7 | |||
cca7486120 | |||
da6170a223 | |||
58ececfb28 | |||
66406d4754 | |||
34f52dd0ad | |||
0405109eed | |||
4200a52263 | |||
a8a7374e84 | |||
e150876910 | |||
33ff4cc137 | |||
5395123b84 | |||
f96c638a60 | |||
f814ff15f9 | |||
1f7a11699a | |||
5dd4bf3644 | |||
e69798b5ae | |||
b73111cfa7 | |||
e6b313da36 | |||
2bdc05d89b | |||
7a70a46ecc | |||
b824f7dbae | |||
d33b02e7f3 | |||
7899cd9088 | |||
c735a31861 | |||
3dbe593906 | |||
c4a3f51618 | |||
60889e55ea | |||
028570b445 | |||
b417786525 | |||
295fdbef39 | |||
e8b7ff1ab5 | |||
95bff2e17e | |||
7db16ddc88 | |||
28dab93390 | |||
0142d441c6 | |||
282717e5cc | |||
b915faedd5 | |||
520717dff1 | |||
b9bd69e70e | |||
ed69de318f | |||
cdf6f3a4ba | |||
e9b1e0fe88 | |||
6ee5559d6a | |||
6de7ecb585 | |||
9ac409c7e5 | |||
727ac0d263 | |||
a87a741b41 | |||
bba4ec4ca1 | |||
f863176423 | |||
67117c3971 | |||
0e45b2875a | |||
ba9b504ec5 | |||
361a935332 | |||
f97c1c9d86 | |||
836b8d2e45 | |||
b2f3698781 | |||
fedaac84da | |||
fa0df7d316 | |||
b4f1ecb3c7 | |||
40a1f70bb0 | |||
b61f33cd48 | |||
d4823664a8 | |||
8f454fd2ea | |||
badd460229 | |||
4f14cd8a39 | |||
6766f4fd04 | |||
23c1c4e153 | |||
94ce79d6c8 | |||
d1371508f5 | |||
53490444f7 | |||
1e83e5c61a | |||
b9e8448384 | |||
3280b76729 | |||
25eb1b3149 | |||
629abbe751 | |||
f82fa746bf | |||
bd3037bfa7 | |||
9a5fc849fd | |||
88f5c7178e | |||
0420e50b6b | |||
608fbf8110 | |||
d51ee90f12 | |||
8cf28dbf93 | |||
38d2540674 | |||
dc987fecce | |||
b12c2761f4 | |||
94b503094f | |||
dda17fa222 | |||
88f107012a | |||
4b463c71c0 | |||
aa57187f82 | |||
e5476db4aa | |||
4540a990a5 | |||
b85fe66e39 | |||
7104cdb375 | |||
45f05a13ed | |||
98b0ae6561 | |||
20a329718e | |||
3f870446a6 | |||
cbea47c744 | |||
8eeff1e0f4 | |||
43d5f7e8ea | |||
c00d46353c | |||
3c24a40d53 | |||
add0b4712d | |||
494b031eb7 | |||
1cb9cd5798 | |||
4f66cb9b28 | |||
3917904878 | |||
c184e65ed9 | |||
025cb700a1 | |||
6dc2fda469 | |||
1a8dbfc899 | |||
eb34d8bf18 | |||
f0b79daeba | |||
85d44f4a5e | |||
26060bc7c8 | |||
413a742ad9 | |||
297b6b862a | |||
4f613c1b1f | |||
9c786fa310 | |||
7a1b60b694 | |||
9612a3c32a | |||
555efe4792 | |||
f4b9ec6784 | |||
542919f370 | |||
ee8f969e1e | |||
b5ba8b6d1a | |||
0f9858f5a1 | |||
31e2188c38 | |||
d908916642 | |||
9cb88a70f7 | |||
50a4454892 | |||
a4e9395979 | |||
021462bb26 | |||
c7305f7b37 | |||
b4a68a5a28 | |||
fc749b23ef | |||
9c6e9c684f | |||
7b7bc59f20 | |||
116a837818 | |||
03f78b069d | |||
bf14c0050c | |||
bbe66e4555 | |||
9db39879a8 | |||
41956b5742 | |||
c32ca089c9 | |||
5a365cb8ef | |||
ac247b64e8 | |||
658ae3eb29 | |||
591dbfe295 | |||
45d05d0823 | |||
bf15b2f7c3 | |||
b86e96ab8c | |||
80759b0dbd | |||
ece88ab765 | |||
98579a9e86 | |||
ed06e11900 | |||
2f99897d00 | |||
f17396591f | |||
40bb6c340f | |||
8d9262a7e7 | |||
b7eb1097e5 | |||
b320bc5e0e | |||
d912df22a8 | |||
9f4c4856f3 | |||
50b82ef2bb | |||
ebcd0a8d8d | |||
1a5c3bb7fa | |||
7176a54c2b | |||
9efc7fc540 | |||
b17a0f592c | |||
de64078102 | |||
91c47c0dea | |||
f8e1764bb9 | |||
9b7c232924 | |||
5232eb1a10 | |||
8b4528aae5 | |||
12a651c060 | |||
d1613f5681 | |||
98b72dadf0 | |||
8a2204896a | |||
6a5c61583b | |||
bc979cc904 | |||
3d5e1e5d52 | |||
24f0455016 | |||
3833f0ffdb | |||
928511add1 | |||
a1d668efe9 | |||
86867dd707 | |||
e077cdbc62 | |||
442fb05acf | |||
2cd02610ee | |||
83b2740ba7 | |||
4240e32980 | |||
3012948b39 | |||
9a0f093343 | |||
a6eab80dc9 | |||
149d523c9a | |||
32bae49435 | |||
9fe3d692c7 | |||
f1a4ae0a48 | |||
199f98bc43 | |||
3c73dadd6f | |||
cc6100f2d9 | |||
b9edd8be67 | |||
a73317e5cf | |||
5ee8283250 | |||
1b12b64dab | |||
b643d3df8a | |||
6cfda93c6c | |||
e18dba8e9a | |||
e2291f5ad4 | |||
07e6098d48 | |||
8245bd25a3 | |||
ad27283a3c | |||
d786843ca6 | |||
6851922f08 | |||
e1988f5e0a | |||
7987c1cb6f | |||
fd6fb289ce | |||
e4951055dd | |||
ba8d8f2583 | |||
540a98001d | |||
86da00db89 | |||
e0cdaf0b19 | |||
ddb4b0d576 | |||
a7ddf4cdb0 | |||
42174235ba | |||
106abb82fe | |||
c1c5354e45 | |||
c8e1c0d395 | |||
8d98d80e53 | |||
9484792ad1 | |||
12520134f1 | |||
9e052c2b6c | |||
18aa6fe261 | |||
263f129a8e | |||
200d213d1b | |||
a244d5edd4 | |||
0a2de7b538 | |||
13746076e9 | |||
e86ded841f | |||
19b963ce86 | |||
d83bd535be | |||
4841203c3a | |||
3979def529 | |||
d01b675067 | |||
abb0ebbb51 | |||
b8b9786ad4 | |||
07b2fdb594 | |||
bbb00d7404 | |||
289b7d65fc | |||
7e128576c2 | |||
5ee7e472d1 | |||
f15f310ea4 | |||
322635a955 | |||
aeff512a50 | |||
c79efa822d | |||
808f5c3849 | |||
0b82b3d6fd | |||
96e2a5da34 | |||
3b34db6c0f | |||
edcce07531 | |||
1bb330348d | |||
14dd073e80 | |||
57aa8e37dc | |||
0bb644754d | |||
657d68bddc | |||
dafc78bb8d | |||
9f56eeda41 | |||
a0c97590b9 | |||
2ee6fbf0d7 | |||
67910db907 | |||
4ba70a7575 | |||
7c04acff8a | |||
cbc878d2a2 | |||
2ab4f4b2c5 | |||
05fe16c4f3 | |||
934ae21b52 | |||
8cb5ea7879 | |||
879ea7fce8 | |||
6fdf122fc3 | |||
462738299b | |||
5cf4d0c148 | |||
d3f2a1e4a9 | |||
683657e93a | |||
1debc0c101 | |||
fcd8c9e99e | |||
344b331783 | |||
b9d5b26458 | |||
68b6eb78d2 | |||
53486a0be0 | |||
51359d6c84 | |||
2e0bca011a | |||
bb345abbfc | |||
31a5ff5e36 | |||
655220ae69 | |||
050be72e77 | |||
6bbf8f238f | |||
634c783d1f | |||
7e51f15129 | |||
e46a41542b | |||
36c6f95602 | |||
b21999cbed | |||
9a669b1c68 | |||
2f50d7cd3b | |||
b1ea707bda | |||
0e03aa2c6f | |||
08cd65198e | |||
8cee45c3f8 | |||
55009af42c | |||
1c37157218 | |||
41fe62b6dc | |||
afd687f71f | |||
d9105d98b7 | |||
2f35744e40 | |||
6b9cff49b0 | |||
5a6620277d | |||
f65c1e4088 | |||
73a544d453 | |||
c08fdf3dec | |||
b6161be9de | |||
596947ccf7 | |||
5e4c663a5a | |||
d14673f0b1 | |||
70a03dd960 | |||
54daaecacb | |||
73b1bd7992 | |||
91e7fe7b54 | |||
a37eef131a | |||
08c8cf9586 | |||
5cdbce8072 | |||
f824378526 | |||
c487ac1a9f | |||
c650e130ce | |||
6f8f34f1bf | |||
f9fa985242 | |||
c135b829e7 | |||
68ec3eb1f0 | |||
b9aaa33722 | |||
63b9700b2c | |||
a2962daf6f | |||
2317b4f114 | |||
00517b687a | |||
68f0eb5269 | |||
be0dfef30c | |||
c0b9c8cbc0 | |||
ecfb4b81ae | |||
2d54fc9581 | |||
1804b15896 | |||
ab62d940fe | |||
e58eafc45a | |||
b7f30ad25f | |||
bd36ea9866 | |||
5736846581 | |||
2d086e6971 | |||
d7e92e8958 | |||
12507ce895 | |||
cc3e2a031a | |||
fdcc9ab317 | |||
c9b13594eb | |||
ae64f22e8d | |||
a8582c4c02 | |||
92542469e2 | |||
eef7c69d49 | |||
a854c9d787 | |||
cd666d992d | |||
bc2204edd2 | |||
8601afb679 | |||
fdb8b13e64 | |||
1b8df77ac1 | |||
706251d913 | |||
6ea3a13a17 | |||
c0a4e20887 | |||
3802563bdc | |||
2c2df5b6dd | |||
33d0fb8d34 | |||
3aa17f7604 | |||
2fa1cb15de | |||
c574947223 | |||
9b71804e4f | |||
dc34a9d6de | |||
ce51d6d9d1 | |||
aeb85d53e9 | |||
34ac1ab4a3 | |||
547de69de7 | |||
0178760867 | |||
179da7fb5c | |||
6229cc93ff | |||
462a7daeec | |||
d20b0a842b | |||
91eb2816fa | |||
56d913eedb | |||
2d33c3e6c3 | |||
7c2994bb73 | |||
ff168e9e63 | |||
eb501f0543 | |||
5d70978920 | |||
4e223db66c | |||
9e1ea54b18 | |||
48ae50c3d2 | |||
22be29e23b | |||
c2a9c42670 | |||
5fadb46b36 | |||
2b77881564 | |||
7c2fd97c05 | |||
95b3f286a8 | |||
dba22d2f9d | |||
f0664cfc7b | |||
1a71163675 | |||
0ca944b16f | |||
344e86bb3b | |||
7255610d9f | |||
5b0db35e0d | |||
b6c9a5d797 | |||
fba9f33187 | |||
a3ce27d3dd | |||
f3db2aea85 | |||
c1abf137ff | |||
b52cc0e094 | |||
ed50d85576 | |||
bf5aacca2c | |||
30da30c1db | |||
b6e3618138 | |||
c2a05d143b | |||
c9eae795d1 | |||
9f5c895ec7 | |||
5c44c4ac7d | |||
c9ece506e0 | |||
282171c105 | |||
6572fe538a | |||
c4b7ad4db5 | |||
7b3e8730ee | |||
693e04f5c6 | |||
d618aaceae | |||
3e8ef1028d | |||
d492f01bf1 | |||
c7fc199f40 | |||
12294d0c48 | |||
3ac0ab524b | |||
65a8c2e076 | |||
d367503147 | |||
b0f15f0f86 | |||
7d802a48f3 | |||
b48d63359b | |||
4ff63d3a11 | |||
941796a50d | |||
7ad1a34ea7 | |||
8cfffb4427 | |||
64dc5c1d53 | |||
a2ac3ad5e5 | |||
3ba84c5950 | |||
18315db8e0 | |||
a2fbddfabc | |||
33847db3ce | |||
2368681c83 | |||
18ecdbfeb8 | |||
9266ce90c6 | |||
56397364c9 | |||
46f04cbb49 | |||
b81731d9db | |||
a0a50775c2 | |||
f77f2c79c2 | |||
6a23352515 | |||
91709c91df | |||
a4f5954159 | |||
24ab1c5db6 | |||
0d2dbcab5f | |||
e1470ea6a3 | |||
433acc2d3d | |||
026863b2ff | |||
47a6603f34 | |||
a3eb125238 | |||
3397ef9627 | |||
515ef38db4 | |||
2ed6848ea3 | |||
8d82109c08 | |||
c61d415701 | |||
2b297d92a7 | |||
a9b1a72a8f | |||
2c3d91c9c8 | |||
9367d91e22 | |||
e719288a3c | |||
1fa240a3c5 | |||
df0c731e68 | |||
c05b1a66b3 | |||
689256797e | |||
878b685814 | |||
cc6809c8b1 | |||
21c9aa125c | |||
d64b04609d | |||
0bb83469ed | |||
f3758b6738 | |||
27cb3e0d31 | |||
0df1cccc0a | |||
d0c52b72f3 | |||
1bdfe8c280 | |||
436296b9bd | |||
1916d68ee3 | |||
d653e491e1 | |||
eb80e053b6 | |||
85678b8419 | |||
54cabb977d | |||
d198e2e553 | |||
540b2adb61 | |||
d5e7a6d9c5 | |||
4debbe74ac | |||
1818733faa | |||
7f8b0cd89c | |||
94146009a1 | |||
53509cf15a | |||
7aeeb9bf96 | |||
06f2fcc0ff | |||
eb2e0b56ee | |||
07b402b3b9 | |||
5a0edcbde1 | |||
61e3d01739 | |||
5015502414 | |||
45ecb0eba1 | |||
386d3418ef | |||
9ea4c8a71e | |||
490eab46a8 | |||
f5c0d61296 | |||
75396f67aa | |||
56715ec23f | |||
f8dc4bc022 | |||
9bb16cd9c5 | |||
3382e53c64 | |||
bd585fa89f | |||
79ca4b55c5 | |||
35a047c4e5 | |||
baa16e9c25 | |||
7715c0dea7 | |||
de56a66e73 | |||
eef63607b8 | |||
181de282b5 | |||
15c012181d | |||
f67c81fc70 | |||
433471244b | |||
d980211112 | |||
eb5147027e | |||
c2c634a089 | |||
298619f6d9 | |||
bc29bd0de6 | |||
6059c9d133 | |||
ffcac3eb50 | |||
1ca978ee65 | |||
185691eedb | |||
87bc755447 | |||
4c9bbb9b34 | |||
fc20682f07 | |||
57803ba3f5 | |||
334699d205 | |||
24284270c7 | |||
ecebee0561 | |||
979d4ce02f | |||
b274ccf596 | |||
f2e42c4a8e | |||
ad983eeec7 | |||
e8fd6e9c6f | |||
0fd398a5a1 | |||
4c38ed3c38 | |||
fbc59ffb64 | |||
8a3dadab7c | |||
43d2527203 | |||
8370f6b79c | |||
dce6359773 | |||
1c6ea92e6f | |||
35e76dde77 | |||
efe3cfb476 | |||
1248731991 | |||
941f2a9c0c | |||
3bc70228a2 | |||
f2cae5085c | |||
baeced336a | |||
a4a512c68a | |||
f9e74991d3 | |||
d6fc557b93 | |||
fe338e2319 | |||
aeb652a4a0 | |||
ea544574d0 | |||
a0e1e596f8 | |||
2c08ea7cfc | |||
dc0b1875a9 | |||
4f1d6ff42e | |||
26d2dad980 | |||
f96d9051c2 | |||
63c444a69b | |||
5027ecfb19 | |||
f81e2ad385 | |||
29c8fa4769 | |||
ca35998d29 | |||
d49c64e17f | |||
5bf53bc73b | |||
560238e052 | |||
ecd04d98b2 | |||
dae38b24e7 | |||
c8600c36d7 | |||
37c69a0123 | |||
27b4ae24f4 | |||
852283919e | |||
36f788c558 | |||
ad1ddc0343 | |||
76e2ab61bb | |||
46cc5d6b53 | |||
0a0b9c599d | |||
610b680154 | |||
486c132f1e | |||
9ca336f837 | |||
e2e360e3f8 | |||
9f16fa4e74 | |||
f0e552d664 | |||
a22c00bc39 | |||
14fa57aa54 | |||
57d53e9635 | |||
954d813a61 | |||
d4e111ff97 | |||
86ddef58dc | |||
0fd77e191b | |||
015f42bbe4 | |||
7a944bda90 | |||
3225862d82 | |||
fbdb388c39 | |||
3e2083ba43 | |||
00b6224b65 | |||
57c382c424 | |||
bc09219912 | |||
9d22c72d15 | |||
d99ff72fa9 | |||
7214976b60 | |||
ea8658b1d1 | |||
ad626ce7de | |||
49b4fe8478 | |||
26f0060f60 | |||
b09afbb9fa | |||
aaba647096 | |||
5e46698ee9 | |||
a8cb89b101 | |||
fcd2891d6f | |||
d472cda80a | |||
7c8a9f60f4 | |||
fc1062809a | |||
8a734e7045 | |||
5a4a99cf43 | |||
adc9851e1f | |||
9784a2c677 | |||
f7b117bba7 | |||
95778bf7ea | |||
744c9acbe1 | |||
99406e6b09 | |||
f5519f0df3 | |||
fbfba7cb84 | |||
82dd1fc5a1 | |||
97317433ed | |||
87e186e7a8 | |||
d1e6a842c7 | |||
1d39c09349 | |||
fcba28382a | |||
2e9bae8216 | |||
0bcf238f2c | |||
80c4017d85 | |||
8d5df05d7d | |||
39223b859e | |||
2106c470f3 | |||
ee528da151 | |||
6adc503a3b | |||
1eb4a65e0a | |||
aeb79392cc | |||
53c0e6c494 | |||
1c813a7e4b | |||
6ac5c4bf8a | |||
e90c6c8e4c | |||
d249ac929f | |||
09f85ecf66 | |||
635c88090e | |||
34b4341eac | |||
12bb32890f | |||
6512180461 | |||
764d87a6d4 | |||
747364169f | |||
6bbc98a1ef | |||
5580493101 | |||
724c1b5cf8 | |||
852d63f618 | |||
e90740693f | |||
b99d0bfa32 | |||
51802ead2d | |||
b0f598558e | |||
28148e9442 | |||
8a67395e4e | |||
e1e1025c6b | |||
67a5b962d0 | |||
00b535505d | |||
946ecabd31 | |||
ef4042cf61 |
6
.gitignore
vendored
@ -54,11 +54,13 @@ util/crossgcc/xgcc
|
|||||||
site-local
|
site-local
|
||||||
|
|
||||||
*.\#
|
*.\#
|
||||||
|
*.a
|
||||||
*.bin
|
*.bin
|
||||||
*.debug
|
*.debug
|
||||||
!Kconfig.debug
|
!Kconfig.debug
|
||||||
*.elf
|
*.elf
|
||||||
*.o
|
*.o
|
||||||
|
*.o.d
|
||||||
*.out
|
*.out
|
||||||
*.pyc
|
*.pyc
|
||||||
*.sw[po]
|
*.sw[po]
|
||||||
@ -85,7 +87,6 @@ util/*/.dependencies
|
|||||||
util/*/.test
|
util/*/.test
|
||||||
util/amdfwtool/amdfwtool
|
util/amdfwtool/amdfwtool
|
||||||
util/archive/archive
|
util/archive/archive
|
||||||
util/bimgtool/bimgtool
|
|
||||||
util/bincfg/bincfg
|
util/bincfg/bincfg
|
||||||
util/board_status/board-status
|
util/board_status/board-status
|
||||||
util/bucts/bucts
|
util/bucts/bucts
|
||||||
@ -115,11 +116,10 @@ util/msrtool/msrtool
|
|||||||
util/nvramtool/.dependencies
|
util/nvramtool/.dependencies
|
||||||
util/nvramtool/nvramtool
|
util/nvramtool/nvramtool
|
||||||
util/optionlist/Options.wiki
|
util/optionlist/Options.wiki
|
||||||
util/romcc/build
|
util/pmh7tool/pmh7tool
|
||||||
util/runfw/googlesnow
|
util/runfw/googlesnow
|
||||||
util/superiotool/superiotool
|
util/superiotool/superiotool
|
||||||
util/vgabios/testbios
|
util/vgabios/testbios
|
||||||
util/viatool/viatool
|
|
||||||
util/autoport/autoport
|
util/autoport/autoport
|
||||||
util/kbc1126/kbc1126_ec_dump
|
util/kbc1126/kbc1126_ec_dump
|
||||||
util/kbc1126/kbc1126_ec_insert
|
util/kbc1126/kbc1126_ec_insert
|
||||||
|
33
.gitmodules
vendored
@ -1,44 +1,53 @@
|
|||||||
[submodule "3rdparty/blobs"]
|
[submodule "3rdparty/blobs"]
|
||||||
path = 3rdparty/blobs
|
path = 3rdparty/blobs
|
||||||
url = ../blobs.git
|
url = https://review.coreboot.org/blobs.git
|
||||||
update = none
|
update = none
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
[submodule "util/nvidia-cbootimage"]
|
[submodule "util/nvidia-cbootimage"]
|
||||||
path = util/nvidia/cbootimage
|
path = util/nvidia/cbootimage
|
||||||
url = ../nvidia-cbootimage.git
|
url = https://review.coreboot.org/nvidia-cbootimage.git
|
||||||
[submodule "vboot"]
|
[submodule "vboot"]
|
||||||
path = 3rdparty/vboot
|
path = 3rdparty/vboot
|
||||||
url = ../vboot.git
|
url = https://review.coreboot.org/vboot.git
|
||||||
[submodule "arm-trusted-firmware"]
|
[submodule "arm-trusted-firmware"]
|
||||||
path = 3rdparty/arm-trusted-firmware
|
path = 3rdparty/arm-trusted-firmware
|
||||||
url = ../arm-trusted-firmware.git
|
url = https://review.coreboot.org/arm-trusted-firmware.git
|
||||||
[submodule "3rdparty/chromeec"]
|
[submodule "3rdparty/chromeec"]
|
||||||
path = 3rdparty/chromeec
|
path = 3rdparty/chromeec
|
||||||
url = ../chrome-ec.git
|
url = https://review.coreboot.org/chrome-ec.git
|
||||||
[submodule "libhwbase"]
|
[submodule "libhwbase"]
|
||||||
path = 3rdparty/libhwbase
|
path = 3rdparty/libhwbase
|
||||||
url = ../libhwbase.git
|
url = https://review.coreboot.org/libhwbase.git
|
||||||
[submodule "libgfxinit"]
|
[submodule "libgfxinit"]
|
||||||
path = 3rdparty/libgfxinit
|
path = 3rdparty/libgfxinit
|
||||||
url = ../libgfxinit.git
|
url = https://review.coreboot.org/libgfxinit.git
|
||||||
[submodule "3rdparty/fsp"]
|
[submodule "3rdparty/fsp"]
|
||||||
path = 3rdparty/fsp
|
path = 3rdparty/fsp
|
||||||
url = ../fsp.git
|
url = https://review.coreboot.org/fsp.git
|
||||||
update = none
|
update = none
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
[submodule "opensbi"]
|
[submodule "opensbi"]
|
||||||
path = 3rdparty/opensbi
|
path = 3rdparty/opensbi
|
||||||
url = ../opensbi.git
|
url = https://review.coreboot.org/opensbi.git
|
||||||
[submodule "intel-microcode"]
|
[submodule "intel-microcode"]
|
||||||
path = 3rdparty/intel-microcode
|
path = 3rdparty/intel-microcode
|
||||||
url = ../intel-microcode.git
|
url = https://review.coreboot.org/intel-microcode.git
|
||||||
update = none
|
update = none
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
[submodule "3rdparty/ffs"]
|
[submodule "3rdparty/ffs"]
|
||||||
path = 3rdparty/ffs
|
path = 3rdparty/ffs
|
||||||
url = ../ffs.git
|
url = https://review.coreboot.org/ffs.git
|
||||||
[submodule "3rdparty/amd_blobs"]
|
[submodule "3rdparty/amd_blobs"]
|
||||||
path = 3rdparty/amd_blobs
|
path = 3rdparty/amd_blobs
|
||||||
url = ../amd_blobs
|
url = https://review.coreboot.org/amd_blobs.git
|
||||||
|
update = none
|
||||||
|
ignore = dirty
|
||||||
|
[submodule "3rdparty/cmocka"]
|
||||||
|
path = 3rdparty/cmocka
|
||||||
|
url = https://review.coreboot.org/cmocka.git
|
||||||
|
update = none
|
||||||
|
[submodule "3rdparty/qc_blobs"]
|
||||||
|
path = 3rdparty/qc_blobs
|
||||||
|
url = https://review.coreboot.org/qc_blobs.git
|
||||||
update = none
|
update = none
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
|
2
3rdparty/amd_blobs
vendored
2
3rdparty/blobs
vendored
1
3rdparty/cmocka
vendored
Submodule
2
3rdparty/fsp
vendored
2
3rdparty/intel-microcode
vendored
2
3rdparty/libgfxinit
vendored
2
3rdparty/libhwbase
vendored
1
3rdparty/qc_blobs
vendored
Submodule
2
3rdparty/vboot
vendored
143
AUTHORS
@ -8,120 +8,239 @@
|
|||||||
# To see a list of contributors: git log --pretty=format:%an | sort | uniq
|
# To see a list of contributors: git log --pretty=format:%an | sort | uniq
|
||||||
# For patches adding or removing a name: git log -i -S "NAME" --source --all
|
# For patches adding or removing a name: git log -i -S "NAME" --source --all
|
||||||
|
|
||||||
|
3mdeb Embedded Systems Consulting
|
||||||
9elements Agency GmbH
|
9elements Agency GmbH
|
||||||
|
Abhinav Hardikar
|
||||||
|
Advanced Computing Lab, LANL
|
||||||
Advanced Micro Devices, Inc.
|
Advanced Micro Devices, Inc.
|
||||||
|
AdaCore
|
||||||
|
AG Electronics Ltd.
|
||||||
|
Alex Thiessen
|
||||||
Alex Züpke
|
Alex Züpke
|
||||||
Alexander Couzens
|
Alexander Couzens
|
||||||
Alexandru Gagniuc
|
Alexandru Gagniuc
|
||||||
Analog Devices Inc.
|
Analog Devices Inc.
|
||||||
|
Analogix Semiconductor
|
||||||
|
Andre Heider
|
||||||
|
Andriy Gapon
|
||||||
Andy Fleming
|
Andy Fleming
|
||||||
|
Angel Pons
|
||||||
|
Anton Kochkov
|
||||||
ARM Limited and Contributors
|
ARM Limited and Contributors
|
||||||
Arthur Heymans
|
Arthur Heymans
|
||||||
|
Asami Doi
|
||||||
ASPEED Technology Inc.
|
ASPEED Technology Inc.
|
||||||
Atheros Corporation
|
Atheros Corporation
|
||||||
Atmel Corporation
|
Atmel Corporation
|
||||||
|
BAP - Bruhnspace Advanced Projects
|
||||||
|
Bill Xie
|
||||||
|
Bitland Tech Inc.
|
||||||
|
Boris Barbulovski
|
||||||
Carl-Daniel Hailfinger
|
Carl-Daniel Hailfinger
|
||||||
|
Cavium Inc.
|
||||||
|
Christoph Grenz
|
||||||
|
Code Aurora Forum
|
||||||
coresystems GmbH
|
coresystems GmbH
|
||||||
|
Corey Osgood
|
||||||
|
Curt Brune
|
||||||
|
Custom Ideas
|
||||||
Damien Zammit
|
Damien Zammit
|
||||||
|
Dave Airlie
|
||||||
David Brownell
|
David Brownell
|
||||||
|
David Greenman
|
||||||
David Hendricks
|
David Hendricks
|
||||||
David Mosberger-Tang
|
David Mosberger-Tang
|
||||||
|
David Mueller
|
||||||
|
David S. Peterson
|
||||||
|
Denis 'GNUtoo' Carikli
|
||||||
Denis Dowling
|
Denis Dowling
|
||||||
DENX Software Engineering
|
DENX Software Engineering
|
||||||
|
Derek Waldner
|
||||||
|
Digital Design Corporation
|
||||||
DMP Electronics Inc.
|
DMP Electronics Inc.
|
||||||
|
Donghwa Lee
|
||||||
Drew Eckhardt
|
Drew Eckhardt
|
||||||
|
Dynon Avionics
|
||||||
|
Edward O'Callaghan
|
||||||
Egbert Eich
|
Egbert Eich
|
||||||
|
ELSOFT AG
|
||||||
Eltan B.V
|
Eltan B.V
|
||||||
|
Elyes Haouas
|
||||||
Eric Biederman
|
Eric Biederman
|
||||||
Eswar Nallusamy
|
Eswar Nallusamy
|
||||||
|
Evgeny Zinoviev
|
||||||
|
Fabian Kunkel
|
||||||
|
Fabrice Bellard
|
||||||
Facebook, Inc.
|
Facebook, Inc.
|
||||||
Felix Held
|
Felix Held
|
||||||
|
Felix Singer
|
||||||
Frederic Potter
|
Frederic Potter
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
Freescale Semiconductor, Inc.
|
Freescale Semiconductor, Inc.
|
||||||
Gary Jennejohn
|
Gary Jennejohn
|
||||||
|
George Trudeau
|
||||||
|
Gerald Van Baren
|
||||||
Gerd Hoffmann
|
Gerd Hoffmann
|
||||||
|
Gergely Kiss
|
||||||
Google LLC
|
Google LLC
|
||||||
Greg Watson
|
Greg Watson
|
||||||
|
Guennadi Liakhovetski
|
||||||
|
Hal Martin
|
||||||
|
HardenedLinux
|
||||||
|
Hewlett-Packard Development Company, L.P.
|
||||||
|
Hewlett Packard Enterprise Development LP
|
||||||
|
Huaqin Telecom Inc.
|
||||||
|
IBM Corporation
|
||||||
Idwer Vollering
|
Idwer Vollering
|
||||||
|
Igor Pavlov
|
||||||
Imagination Technologies
|
Imagination Technologies
|
||||||
Infineon Technologies
|
Infineon Technologies
|
||||||
|
InKi Dae
|
||||||
Intel Corporation
|
Intel Corporation
|
||||||
|
Iru Cai
|
||||||
|
Isaku Yamahata
|
||||||
|
Ivan Vatlin
|
||||||
|
James Ye
|
||||||
Jason Zhao
|
Jason Zhao
|
||||||
|
Joe Pillow
|
||||||
|
Johanna Schander
|
||||||
|
Jonas 'Sortie' Termansen
|
||||||
|
Jonathan A. Kollasch
|
||||||
Jonathan Neuschäfer
|
Jonathan Neuschäfer
|
||||||
Jordan Crouse
|
Jordan Crouse
|
||||||
Joseph Smith
|
Joseph Smith
|
||||||
Keith Hui
|
Keith Hui
|
||||||
Keith Packard
|
Keith Packard
|
||||||
|
Kevin Cody-Little
|
||||||
|
Kevin O'Connor
|
||||||
|
Kontron Europe GmbH
|
||||||
Kshitij
|
Kshitij
|
||||||
Kyösti Mälkki
|
Kyösti Mälkki
|
||||||
|
Leah Rowe
|
||||||
Lei Wen
|
Lei Wen
|
||||||
Li-Ta Lo
|
Li-Ta Lo
|
||||||
Libra Li
|
Libra Li
|
||||||
|
Libretrend LDA
|
||||||
|
Linaro Limited
|
||||||
Linus Torvalds
|
Linus Torvalds
|
||||||
Linux Networx, Inc.
|
Linux Networx, Inc.
|
||||||
|
LiPPERT ADLINK Technology GmbH
|
||||||
|
Lubomir Rintel
|
||||||
Luc Verhaegen
|
Luc Verhaegen
|
||||||
|
Maciej Matuszczyk
|
||||||
|
Marc Bertens
|
||||||
Marc Jones
|
Marc Jones
|
||||||
Marek Vasut
|
Marek Vasut
|
||||||
Marius Gröger
|
Marius Gröger
|
||||||
Martin Mares
|
Martin Mares
|
||||||
|
Martin Renters
|
||||||
|
Martin Roth
|
||||||
Marvell International Ltd.
|
Marvell International Ltd.
|
||||||
Marvell Semiconductor Inc.
|
Marvell Semiconductor Inc.
|
||||||
|
Matt DeVillier
|
||||||
|
Maxim Polyakov
|
||||||
MediaTek Inc.
|
MediaTek Inc.
|
||||||
|
Michael Brunner
|
||||||
|
Michael Schroeder
|
||||||
|
Michael Niewöhner
|
||||||
|
Mika Westerberg
|
||||||
|
Mondrian Nuessle
|
||||||
MontaVista Software, Inc.
|
MontaVista Software, Inc.
|
||||||
Myles Watson
|
Myles Watson
|
||||||
Network Appliance Inc.
|
Network Appliance Inc.
|
||||||
Nicholas Sielicki
|
Nicholas Sielicki
|
||||||
Nick Barker
|
Nick Barker
|
||||||
Nico Huber
|
Nico Huber
|
||||||
|
Nico Rikken
|
||||||
|
Nicola Corna
|
||||||
|
Nils Jacobs
|
||||||
|
Nir Tzachar
|
||||||
|
Nokia Corporation
|
||||||
|
NVIDIA Corporation
|
||||||
|
Olivier Langlois
|
||||||
Ollie Lo
|
Ollie Lo
|
||||||
|
Omar Pakker
|
||||||
|
Online SAS
|
||||||
Orion Technologies, LLC
|
Orion Technologies, LLC
|
||||||
Patrick Georgi
|
Patrick Georgi
|
||||||
Patrick Rudolph
|
Patrick Rudolph
|
||||||
|
Pattrick Hueper
|
||||||
|
Paulo Alcantara
|
||||||
|
Pavel Sayekat
|
||||||
PC Engines GmbH
|
PC Engines GmbH
|
||||||
Per Odlund
|
Per Odlund
|
||||||
|
Peter Korsgaard
|
||||||
Peter Stuge
|
Peter Stuge
|
||||||
|
Philipp Degler
|
||||||
|
Philipp Deppenwiese
|
||||||
|
Philipp Hug
|
||||||
|
Protectli
|
||||||
|
Purism SPC
|
||||||
|
Qualcomm Technologies
|
||||||
Raptor Engineering, LLC
|
Raptor Engineering, LLC
|
||||||
Red Hat Inc
|
Red Hat, Inc
|
||||||
Reinhard Meyer
|
Reinhard Meyer
|
||||||
|
Renze Nicolai
|
||||||
|
Richard Spiegel
|
||||||
Richard Woodruff
|
Richard Woodruff
|
||||||
|
Rob Landley
|
||||||
|
Robert Reeves
|
||||||
|
Robinson P. Tryon
|
||||||
|
Rockchip, Inc.
|
||||||
|
Romain Lievin
|
||||||
|
Roman Zippel
|
||||||
Ronald G. Minnich
|
Ronald G. Minnich
|
||||||
Rudolf Marek
|
Rudolf Marek
|
||||||
Russell King
|
Russell King
|
||||||
|
Ruud Schramp
|
||||||
Sage Electronic Engineering, LLC
|
Sage Electronic Engineering, LLC
|
||||||
|
Sam Ravnborg
|
||||||
Samsung Electronics
|
Samsung Electronics
|
||||||
|
Samuel Holland
|
||||||
SciTech Software, Inc.
|
SciTech Software, Inc.
|
||||||
Sebastian Grzywna
|
Sebastian Grzywna
|
||||||
secunet Security Networks AG
|
secunet Security Networks AG
|
||||||
|
Sencore Inc
|
||||||
|
Sergej Ivanov
|
||||||
Siemens AG
|
Siemens AG
|
||||||
|
SiFive, Inc
|
||||||
Silicon Integrated System Corporation
|
Silicon Integrated System Corporation
|
||||||
|
Silverback Ltd.
|
||||||
Stefan Reinauer
|
Stefan Reinauer
|
||||||
|
Stefan Tauner
|
||||||
Steve Magnani
|
Steve Magnani
|
||||||
|
Steve Shenton
|
||||||
ST Microelectronics
|
ST Microelectronics
|
||||||
SUSE LINUX AG
|
SUSE LINUX AG
|
||||||
Sven Schnelle
|
Sven Schnelle
|
||||||
Syed Mohammed Khasim
|
Syed Mohammed Khasim
|
||||||
|
System76
|
||||||
Texas Instruments
|
Texas Instruments
|
||||||
|
The Android Open Source Project
|
||||||
|
The ChromiumOS Authors
|
||||||
The Linux Foundation
|
The Linux Foundation
|
||||||
|
The Regents of the University of California
|
||||||
Thomas Winischhofer
|
Thomas Winischhofer
|
||||||
Timothy Pearson
|
Timothy Pearson
|
||||||
|
Tobias Diedrich
|
||||||
|
Tristan Corrick
|
||||||
Tungsten Graphics, Inc.
|
Tungsten Graphics, Inc.
|
||||||
Tyan Computer Corp.
|
Tyan Computer Corp.
|
||||||
ucRobotics Inc.
|
ucRobotics Inc.
|
||||||
|
University of Heidelberg
|
||||||
Uwe Hermann
|
Uwe Hermann
|
||||||
VIA Technologies, Inc
|
VIA Technologies, Inc
|
||||||
|
Vikram Narayanan
|
||||||
Vipin Kumar
|
Vipin Kumar
|
||||||
|
Vladimir Serbinenko
|
||||||
|
Vlado Cibic
|
||||||
|
Wang Qing Pei
|
||||||
Ward Vandewege
|
Ward Vandewege
|
||||||
|
Wilbert Duijvenvoorde
|
||||||
|
Win Enterprises
|
||||||
|
Wiwynn Corp.
|
||||||
Wolfgang Denk
|
Wolfgang Denk
|
||||||
|
YADRO
|
||||||
|
Yann Collet
|
||||||
Yinghai Lu
|
Yinghai Lu
|
||||||
|
Zachary Yedidia
|
||||||
|
|
||||||
|
|
||||||
# Directories transferred
|
|
||||||
src/acpi
|
|
||||||
src/arch
|
|
||||||
src/commonlib
|
|
||||||
src/console
|
|
||||||
src/cpu
|
|
||||||
src/device
|
|
||||||
src/drivers
|
|
||||||
|
@ -222,7 +222,7 @@
|
|||||||
<li>Add the acpi_create_fadt routine
|
<li>Add the acpi_create_fadt routine
|
||||||
<ol type="I">
|
<ol type="I">
|
||||||
<li>fill in the ACPI header</li>
|
<li>fill in the ACPI header</li>
|
||||||
<li>Call the acpi_fill_in_fadt routine</li>
|
<li>Call the acpi_fill_fadt routine</li>
|
||||||
</ol>
|
</ol>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
@ -657,7 +657,7 @@ Use the following steps to debug the call to TempRamInit:
|
|||||||
The EDK2 data structure is defined in
|
The EDK2 data structure is defined in
|
||||||
MdeModulePkg/Include/IndustryStandard/<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/MdePkg/Include/IndustryStandard/Acpi61.h#l111">Acpi61.h</a>
|
MdeModulePkg/Include/IndustryStandard/<a target="_blank" href="https://github.com/tianocore/edk2/blob/master/MdePkg/Include/IndustryStandard/Acpi61.h#l111">Acpi61.h</a>
|
||||||
The coreboot data structure is defined in
|
The coreboot data structure is defined in
|
||||||
src/arch/x86/include/arch/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/include/arch/acpi.h;hb=HEAD#l237">acpi.h</a>
|
src/arch/x86/include/arch/<a target="_blank" href="https://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=src/arch/x86/include/acpi/acpi.h;hb=HEAD#l237">acpi.h</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<ol>
|
<ol>
|
||||||
@ -667,7 +667,7 @@ Use the following steps to debug the call to TempRamInit:
|
|||||||
</li>
|
</li>
|
||||||
<li>Create a acpi.c module:
|
<li>Create a acpi.c module:
|
||||||
<ol type="A">
|
<ol type="A">
|
||||||
<li>Add the acpi_fill_in_fadt routine and initialize the values above</li>
|
<li>Add the acpi_fill_fadt routine and initialize the values above</li>
|
||||||
</ol>
|
</ol>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
# You can set these variables from the command line.
|
# You can set these variables from the command line.
|
||||||
SPHINXOPTS =
|
SPHINXOPTS ?=
|
||||||
SPHINXBUILD = sphinx-build
|
SPHINXBUILD = sphinx-build
|
||||||
SPHINXAUTOBUILD = sphinx-autobuild
|
SPHINXAUTOBUILD = sphinx-autobuild
|
||||||
PAPER =
|
PAPER =
|
||||||
|
@ -23,7 +23,7 @@ write the ASL (ACPI Source Language) code yourself.
|
|||||||
## Device drivers
|
## Device drivers
|
||||||
|
|
||||||
Let's take a look at an example entry from
|
Let's take a look at an example entry from
|
||||||
``src/mainboard/google/hatch/variant/hatch/overridetree.cb``:
|
``src/mainboard/google/hatch/variants/hatch/overridetree.cb``:
|
||||||
|
|
||||||
```
|
```
|
||||||
device pci 15.0 on
|
device pci 15.0 on
|
||||||
@ -157,7 +157,7 @@ Note that the ACPI_IRQ_WAKE_EDGE_LOW macro informs the platform that the GPIO
|
|||||||
will be routed through SCI (ACPI's System Control Interrupt) for use as a wake
|
will be routed through SCI (ACPI's System Control Interrupt) for use as a wake
|
||||||
source. Also note that the IRQ names are SoC-specific, and you will need to
|
source. Also note that the IRQ names are SoC-specific, and you will need to
|
||||||
find the names in your SoC's header file. The ACPI_* macros are defined in
|
find the names in your SoC's header file. The ACPI_* macros are defined in
|
||||||
``src/arch/x86/include/arch/acpi_device.h``.
|
``src/arch/x86/include/acpi/acpi_device.h``.
|
||||||
|
|
||||||
Using a GPIO as an IRQ requires that it is configured in coreboot correctly.
|
Using a GPIO as an IRQ requires that it is configured in coreboot correctly.
|
||||||
This is often done in a mainboard-specific file named ``gpio.c``.
|
This is often done in a mainboard-specific file named ``gpio.c``.
|
||||||
|
@ -73,6 +73,15 @@ calling the platform specific acpigen_soc_{set,clear}_tx_gpio
|
|||||||
functions internally. Thus, all the ACPI AML calling conventions for
|
functions internally. Thus, all the ACPI AML calling conventions for
|
||||||
the platform functions apply to these helper functions as well.
|
the platform functions apply to these helper functions as well.
|
||||||
|
|
||||||
|
3. Get Rx GPIO
|
||||||
|
int acpigen_get_rx_gpio(struct acpi_gpio gpio)
|
||||||
|
|
||||||
|
This function takes as input, an struct acpi_gpio type and outputs
|
||||||
|
AML code to read the *logical* value of a gpio (after taking its
|
||||||
|
polarity into consideration), into the Local0 variable. It calls
|
||||||
|
the platform specific acpigen_soc_read_rx_gpio() to actually read
|
||||||
|
the raw Rx gpio value.
|
||||||
|
|
||||||
## Implementation Details
|
## Implementation Details
|
||||||
|
|
||||||
ACPI library in coreboot will provide weak definitions for all the
|
ACPI library in coreboot will provide weak definitions for all the
|
||||||
|
16
Documentation/acpi/index.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# ACPI-specific documentation
|
||||||
|
|
||||||
|
This section contains documentation about coreboot on ACPI. coreboot dropped
|
||||||
|
backwards support for ACPI 1.0 and is only compatible to ACPI version 2.0 and
|
||||||
|
upwards.
|
||||||
|
|
||||||
|
|
||||||
|
- [SSDT UID generation](uid.md)
|
||||||
|
|
||||||
|
## GPIO
|
||||||
|
|
||||||
|
- [GPIO toggling in ACPI AML](gpio.md)
|
||||||
|
|
||||||
|
## devicetree
|
||||||
|
|
||||||
|
- [Adding devices to a device tree](devicetree.md)
|
14
Documentation/acpi/uid.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# ACPI SSDT \_UID generation
|
||||||
|
|
||||||
|
According to the ACPI spec:
|
||||||
|
|
||||||
|
> The _UID must be unique across all devices with either a common _HID or _CID.
|
||||||
|
|
||||||
|
|
||||||
|
When generating SSDTs in coreboot the independent drivers don't know
|
||||||
|
which \_UID is already in use for a specific \_HID or \_CID. To generate
|
||||||
|
unique \_UIDs the ACPI device's path is hashed and used as ID. As every ACPI
|
||||||
|
device has a different path, the hash will be also different for every device.
|
||||||
|
|
||||||
|
Windows 10 verifies all devices with the same \_HID or \_CID and makes
|
||||||
|
sure that no \_UID is duplicated. If it is it'll BSOD.
|
@ -42,13 +42,23 @@ At the moment *$n* is 4, which results in identity mapping the lower 4 GiB.
|
|||||||
* Fix compilation errors - *DONE*
|
* Fix compilation errors - *DONE*
|
||||||
* Fix linker errors - *TODO*
|
* Fix linker errors - *TODO*
|
||||||
* Add x86_64 rmodule support - *DONE*
|
* Add x86_64 rmodule support - *DONE*
|
||||||
* Add x86_64 exception handlers - *TODO*
|
* Add x86_64 exception handlers - *DONE*
|
||||||
* Setup page tables for long mode - *DONE*
|
* Setup page tables for long mode - *DONE*
|
||||||
* Add assembly code for long mode - *DONE*
|
* Add assembly code for long mode - *DONE*
|
||||||
|
* Add assembly code for SMM - *DONE*
|
||||||
* Add assembly code for postcar stage - *TODO*
|
* Add assembly code for postcar stage - *TODO*
|
||||||
* Add assembly code to return to protected mode - *TODO*
|
* Add assembly code to return to protected mode - *TODO*
|
||||||
* Implement reference code for mainboard `emulation/qemu-q35` - *TODO*
|
* Implement reference code for mainboard `emulation/qemu-q35` - *TODO*
|
||||||
|
|
||||||
|
## Future work
|
||||||
|
|
||||||
|
1. Fine grained page tables for SMM:
|
||||||
|
* Must not have execute and write permissions for the same page.
|
||||||
|
* Must allow only that TSEG pages can be marked executable
|
||||||
|
* Must reside in SMRAM
|
||||||
|
2. Support 64bit PCI BARs above 4GiB
|
||||||
|
3. Place and run code above 4GiB
|
||||||
|
|
||||||
## Porting other boards
|
## Porting other boards
|
||||||
* Fix compilation errors
|
* Fix compilation errors
|
||||||
* Test how well CAR works with x86_64 and paging
|
* Test how well CAR works with x86_64 and paging
|
||||||
|
@ -1,6 +1,18 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import subprocess
|
import subprocess
|
||||||
from recommonmark.parser import CommonMarkParser
|
from recommonmark.parser import CommonMarkParser
|
||||||
|
import sphinx
|
||||||
|
|
||||||
|
# Get Sphinx version
|
||||||
|
major = 0
|
||||||
|
minor = 0
|
||||||
|
patchlevel = 0
|
||||||
|
version = sphinx.__version__.split(".")
|
||||||
|
if len(version) > 1:
|
||||||
|
major = int(version[0])
|
||||||
|
minor = int(version[1])
|
||||||
|
if len(version) > 2:
|
||||||
|
patchlevel = int(version[2])
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = ['_templates']
|
templates_path = ['_templates']
|
||||||
@ -25,6 +37,19 @@ release = subprocess.check_output(('git', 'describe')).decode("utf-8")
|
|||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = release.split("-")[0]
|
version = release.split("-")[0]
|
||||||
|
|
||||||
|
extensions = []
|
||||||
|
# Load recommonmark, supported since 1.8+
|
||||||
|
if major >= 2 or (major == 1 and minor >= 8):
|
||||||
|
extensions += ['recommonmark']
|
||||||
|
|
||||||
|
# Try to load DITAA
|
||||||
|
try:
|
||||||
|
import sphinxcontrib.ditaa
|
||||||
|
except ImportError:
|
||||||
|
print("Error: Please install sphinxcontrib.ditaa for ASCII art conversion\n")
|
||||||
|
else:
|
||||||
|
extensions += 'sphinxcontrib.ditaa'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
#
|
#
|
||||||
@ -185,6 +210,8 @@ class MyCommonMarkParser(CommonMarkParser):
|
|||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
from recommonmark.transform import AutoStructify
|
from recommonmark.transform import AutoStructify
|
||||||
|
# Load recommonmark on old Sphinx
|
||||||
|
if major == 1 and minor < 8:
|
||||||
app.add_source_parser('.md', MyCommonMarkParser)
|
app.add_source_parser('.md', MyCommonMarkParser)
|
||||||
|
|
||||||
app.add_config_value('recommonmark_config', {
|
app.add_config_value('recommonmark_config', {
|
||||||
|
173
Documentation/contributing/documentation_ideas.md
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
# Documentation Ideas
|
||||||
|
|
||||||
|
This section collects ideas to improve the coreboot documentation and
|
||||||
|
should serve as a pool of ideas for people who want to improve the current
|
||||||
|
documentation status of coreboot.
|
||||||
|
|
||||||
|
The main purpose of this document is to gather documentation ideas for technical
|
||||||
|
writers of the seasons of docs. Nevertheless anyone who wants to help improving
|
||||||
|
the current documentation situation can take one of the projects.
|
||||||
|
|
||||||
|
Each entry should outline what would be done, the benefit it brings
|
||||||
|
to the project, the pre-requisites, both in knowledge and parts. They
|
||||||
|
should also list people interested in supporting people who want to work
|
||||||
|
on them.
|
||||||
|
|
||||||
|
## Restructure Existing Documentation
|
||||||
|
|
||||||
|
The goal is to improve the user experience and structure the documentation more
|
||||||
|
logically. The current situation makes it very hard for beginners, but also for
|
||||||
|
experienced developers to find anything in the coreboot documentation.
|
||||||
|
|
||||||
|
One possible approach to restructure the documentation is to split it up such
|
||||||
|
that we divide the group of users into:
|
||||||
|
|
||||||
|
* (End-)users
|
||||||
|
Most probably users which _just_ want to use coreboot as fast as possible. This
|
||||||
|
section should include guidelines on how to build coreboot, how to flash coreboot
|
||||||
|
and also which hardware is currently supported.
|
||||||
|
|
||||||
|
* Developers
|
||||||
|
This section should more focus on the developer side-of-view. This section would
|
||||||
|
include how to get started developing coreboot, explaining the basic concepts of
|
||||||
|
coreboot and also give guideance on how to proceed after the first steps.
|
||||||
|
|
||||||
|
* Knowledge area
|
||||||
|
This section is very tighlight coupled to the developer section and might be merged
|
||||||
|
into it. The _Knowledge area_ can give a technical deep dive on various drivers,
|
||||||
|
technologies, etc.
|
||||||
|
|
||||||
|
* Community area
|
||||||
|
This section gives some room for the community: Youtube channels, conferences,
|
||||||
|
meetups, forums, chat, etc.
|
||||||
|
|
||||||
|
A [first approach](https://review.coreboot.org/c/coreboot/+/40327) has already been made here and might be a basis for the work.
|
||||||
|
Most of the documentation is already there, but scattered around the documentation
|
||||||
|
folder.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* Understanding on how a different groups of users might use the documentation area
|
||||||
|
* Basic understanding of how coreboot works (Can be worked out _on-the-fly_)
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* christian.walter@9elements.com
|
||||||
|
* TBD
|
||||||
|
|
||||||
|
## Update Howto/Guides
|
||||||
|
|
||||||
|
An important part to involve new people in the project, either as developer or
|
||||||
|
as enduser, are guides and how-to's. There are already some guides which need
|
||||||
|
to be updated to work, and could also be extended to multiple platforms, like
|
||||||
|
Fedora or Arch-Linux. Also guidance for setting up coreboot with a Windows
|
||||||
|
environment would be helpful.
|
||||||
|
|
||||||
|
In addition, the vboot guidance needs an update/extensions, that the security
|
||||||
|
features within coreboot can be used by non-technical people.
|
||||||
|
|
||||||
|
For developers, how to debug coreboot and various debugging techniques need
|
||||||
|
documentation.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* Knowledge of virtual machines, how to install different OSs and set up the
|
||||||
|
toolchain on different operating systems
|
||||||
|
* Knowledge of debugging tools like gdb
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* christian.walter@9elements.com
|
||||||
|
* TBD
|
||||||
|
|
||||||
|
## How to Support a New Board
|
||||||
|
|
||||||
|
coreboot benefits from running on as many platforms as possible. Therefore we
|
||||||
|
want to encourage new developers on porting existing hardware to coreboot.
|
||||||
|
Guidance for those new developers need to be made such that they are able to
|
||||||
|
take the first steps supporting new mainboards, when the SoC support already
|
||||||
|
exists. There should be a 'how-to' guide for this. Also what are common problems
|
||||||
|
and how to solve those.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* Knowledge of how to add support for a new mainboard in coreboot
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* christian.walter@9elements.com
|
||||||
|
* TBD
|
||||||
|
|
||||||
|
## Payloads
|
||||||
|
|
||||||
|
The current documentation of the payloads is not very effective. There should be
|
||||||
|
more detailed documentation on the payloads that can be selected via the make
|
||||||
|
menuconfig within coreboot. Also the use-cases should be described in more
|
||||||
|
detail: When to use which payload? What are the benefits of using payload X over
|
||||||
|
Y in a specific use-case ?
|
||||||
|
|
||||||
|
In addition it should be made clear how additional functionality e.g. extend
|
||||||
|
LinuxBoot with more commands, can be achieved.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* Basic knowledge of the supported payloads like SeaBIOS, TinanoCore, LinuxBoot,
|
||||||
|
GRUB, Linux, ...
|
||||||
|
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* christian.walter@9elements.com
|
||||||
|
* TBD
|
||||||
|
|
||||||
|
|
||||||
|
## coreboot Util Documentation
|
||||||
|
|
||||||
|
coreboot inherits a variaty of utilities. The current documentation only
|
||||||
|
provides a "one-liner" as an explanation. The list of util should be updated
|
||||||
|
with a more detailed explanation where possible. Also more "in-depths"
|
||||||
|
explanations should be added with examples if possible.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* coreboot utilities
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* christian.walter@9elements.com
|
||||||
|
* TBD
|
||||||
|
|
||||||
|
|
||||||
|
## CBMEM Developer Guide
|
||||||
|
|
||||||
|
CBMEM is the API that provides memory buffers for the use at OS runtime. It's a
|
||||||
|
core component and thus should be documented. Dos, don'ts and pitfalls when
|
||||||
|
using CBMEM. This "in-depth" guide is clearly for developers.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* Deep understanding of coreboot's internals
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* TBD
|
||||||
|
* TBD
|
||||||
|
|
||||||
|
|
||||||
|
## CBFS Developer Guide
|
||||||
|
|
||||||
|
CBFS is the in-flash filesystem that is used by coreboot. It's a core component
|
||||||
|
and thus should be documented. Update the existing CBFS.txt that still shows
|
||||||
|
version 1 of the implementation. A [first approach](https://review.coreboot.org/c/coreboot/+/33663/2)
|
||||||
|
has been made here.
|
||||||
|
This "in-depth" guide is clearly for developers.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* Deep understanding of coreboot's internals
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* TBD
|
||||||
|
* TBD
|
||||||
|
|
||||||
|
|
||||||
|
## Region API Developer Guide
|
||||||
|
|
||||||
|
The region API is used by coreboot when dealing with memory mapped objects that
|
||||||
|
can be split into chunks. It's a core component and thus should be documented.
|
||||||
|
This "in-depth" guide is clearly for developers.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* Deep understanding of coreboot's internals
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* TBD
|
||||||
|
* TBD
|
||||||
|
|
@ -27,7 +27,9 @@ which is a bad experience when trying to build coreboot the first time.
|
|||||||
|
|
||||||
Provide packages/installers of our compiler toolchain for Linux distros,
|
Provide packages/installers of our compiler toolchain for Linux distros,
|
||||||
Windows, Mac OS. For Windows, this should also include the environment
|
Windows, Mac OS. For Windows, this should also include the environment
|
||||||
(shell, make, ...).
|
(shell, make, ...). A student doesn't have to cover _all_ platforms, but
|
||||||
|
pick a set of systems that match their interest and knowledge and lay
|
||||||
|
out a plan on how to do this.
|
||||||
|
|
||||||
The scripts to generate these packages should be usable on a Linux
|
The scripts to generate these packages should be usable on a Linux
|
||||||
host, as that's what we're using for our automated build testing system
|
host, as that's what we're using for our automated build testing system
|
||||||
@ -64,28 +66,6 @@ across architectures.
|
|||||||
### Mentors
|
### Mentors
|
||||||
* Timothy Pearson <tpearson@raptorengineering.com>
|
* Timothy Pearson <tpearson@raptorengineering.com>
|
||||||
|
|
||||||
## Support QEMU AArch64 or MIPS
|
|
||||||
Having QEMU support for the architectures coreboot can boot helps with
|
|
||||||
some (limited) compatibility testing: While QEMU generally doesn't need
|
|
||||||
much hardware init, any CPU state changes in the boot flow will likely
|
|
||||||
be quite close to reality.
|
|
||||||
|
|
||||||
That could be used as a baseline to ensure that changes to architecture
|
|
||||||
code doesn't entirely break these architectures
|
|
||||||
|
|
||||||
### Requirements
|
|
||||||
* coreboot knowledge: Should know the general boot flow in coreboot.
|
|
||||||
* other knowledge: This will require knowing how the architecture
|
|
||||||
typically boots, to adapt the coreboot payload interface to be
|
|
||||||
appropriate and, for example, provide a device tree in the platform's
|
|
||||||
typical format.
|
|
||||||
* hardware requirements: since QEMU runs practically everywhere and
|
|
||||||
needs no recovery mechanism, these are suitable projects when no special
|
|
||||||
hardware is available.
|
|
||||||
|
|
||||||
### Mentors
|
|
||||||
* Patrick Georgi <patrick@georgi.software>
|
|
||||||
|
|
||||||
## Add Kernel Address Sanitizer functionality to coreboot
|
## Add Kernel Address Sanitizer functionality to coreboot
|
||||||
The Kernel Address Sanitizer (KASAN) is a runtime dynamic memory error detector.
|
The Kernel Address Sanitizer (KASAN) is a runtime dynamic memory error detector.
|
||||||
The idea is to check every memory access (variables) for its validity
|
The idea is to check every memory access (variables) for its validity
|
||||||
@ -105,7 +85,7 @@ would help to ensure code quality and make the runtime code more robust.
|
|||||||
### Mentors
|
### Mentors
|
||||||
* Werner Zeh <werner.zeh@gmx.net>
|
* Werner Zeh <werner.zeh@gmx.net>
|
||||||
|
|
||||||
## Port payloads to ARM, AArch64, MIPS or RISC-V
|
## Port payloads to ARM, AArch64 or RISC-V
|
||||||
While we have a rather big set of payloads for x86 based platforms, all other
|
While we have a rather big set of payloads for x86 based platforms, all other
|
||||||
architectures are rather limited. Improve the situation by porting a payload
|
architectures are rather limited. Improve the situation by porting a payload
|
||||||
to one of the platforms, for example GRUB2, U-Boot (the UI part), Tianocore,
|
to one of the platforms, for example GRUB2, U-Boot (the UI part), Tianocore,
|
||||||
@ -153,26 +133,6 @@ their bug reports.
|
|||||||
### Mentors
|
### Mentors
|
||||||
* Patrick Georgi <patrick@georgi.software>
|
* Patrick Georgi <patrick@georgi.software>
|
||||||
|
|
||||||
## Make coreboot coverity clean
|
|
||||||
coreboot and several other of our projects are automatically tested
|
|
||||||
using Synopsys' free "Coverity Scan" service. While some fare pretty
|
|
||||||
good, like [em100](https://scan.coverity.com/projects/em100) at 0 known
|
|
||||||
defects, there are still many open issues in other projects, most notably
|
|
||||||
[coreboot](https://scan.coverity.com/projects/coreboot) itself (which
|
|
||||||
is also the largest codebase).
|
|
||||||
|
|
||||||
Not all of the reports are actual issues, but the project benefits a
|
|
||||||
lot if the list of unhandled reports is down to 0 because that provides
|
|
||||||
a baseline when future changes reintroduce new issues: it's easier to
|
|
||||||
triage and handle a list of 5 issues rather than more than 350.
|
|
||||||
|
|
||||||
This project would be going through all reports and handling them
|
|
||||||
appropriately: Figure out if reports are valid or not and mark them
|
|
||||||
as such. For valid reports, provide patches to fix the underlying issue.
|
|
||||||
|
|
||||||
### Mentors
|
|
||||||
* Patrick Georgi <patrick@georgi.software>
|
|
||||||
|
|
||||||
## Extend Ghidra to support analysis of firmware images
|
## Extend Ghidra to support analysis of firmware images
|
||||||
[Ghidra](https://ghidra-sre.org) is a recently released cross-platform
|
[Ghidra](https://ghidra-sre.org) is a recently released cross-platform
|
||||||
disassembler and decompiler that is extensible through plugins. Make it
|
disassembler and decompiler that is extensible through plugins. Make it
|
||||||
@ -180,6 +140,11 @@ useful for firmware related work: Automatically parse formats (eg. by
|
|||||||
integrating UEFITool, cbfstool, decompressors), automatically identify
|
integrating UEFITool, cbfstool, decompressors), automatically identify
|
||||||
16/32/64bit code on x86/amd64, etc.
|
16/32/64bit code on x86/amd64, etc.
|
||||||
|
|
||||||
|
This has been done in 2019 with [some neat
|
||||||
|
features](https://github.com/al3xtjames/ghidra-firmware-utils) being
|
||||||
|
developed, but it may be possible to expand support for all kinds of firmware
|
||||||
|
analyses.
|
||||||
|
|
||||||
## Learn hardware behavior from I/O and memory access logs
|
## Learn hardware behavior from I/O and memory access logs
|
||||||
[SerialICE](https://www.serialice.com) is a tool to trace the behavior of
|
[SerialICE](https://www.serialice.com) is a tool to trace the behavior of
|
||||||
executable code like firmware images. One result of that is a long log file
|
executable code like firmware images. One result of that is a long log file
|
||||||
@ -201,3 +166,84 @@ This is a research-heavy project.
|
|||||||
|
|
||||||
### Mentors
|
### Mentors
|
||||||
* Ron Minnich <rminnich@google.com>
|
* Ron Minnich <rminnich@google.com>
|
||||||
|
|
||||||
|
## Libpayload based memtest payload
|
||||||
|
[Memtest86+](https://www.memtest.org/) has some limitations: first and
|
||||||
|
foremost it only works on x86, while it can print to serial console the
|
||||||
|
GUI only works in legacy VGA mode.
|
||||||
|
|
||||||
|
This project would involve porting the memtest suite to libpayload and
|
||||||
|
build a payload around it.
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* coreboot knowledge: Should know how to build coreboot images and
|
||||||
|
include payloads.
|
||||||
|
* other knowledge: Knowledge on how dram works is a plus.
|
||||||
|
* hardware requirements: Initial work can happen on qemu targets,
|
||||||
|
being able to test on coreboot supported hardware is a plus.
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* TODO
|
||||||
|
|
||||||
|
## Fix POST code handling
|
||||||
|
coreboot supports writing POST codes to I/O port 80.
|
||||||
|
There are various Kconfigs that deal with POST codes, which don't have
|
||||||
|
effect on most platforms.
|
||||||
|
The code to send POST codes is scattered in C and Assembly, some use
|
||||||
|
functions, some use macros and others simply use the `outb` instruction.
|
||||||
|
The POST codes are duplicated between stages and aren't documented properly.
|
||||||
|
|
||||||
|
|
||||||
|
Tasks:
|
||||||
|
* Guard Kconfigs with a *depends on* to only show on supported platforms
|
||||||
|
* Remove duplicated Kconfigs
|
||||||
|
* Replace `outb(0x80, ...)` with calls to `post_code(...)`
|
||||||
|
* Update Documentation/POSTCODES
|
||||||
|
* Use defines from console/post_codes.h where possible
|
||||||
|
* Drop duplicated POST codes
|
||||||
|
* Make use of all possible 255 values
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* knowledge in the coreboot build system and the concept of stages
|
||||||
|
* other knowledge: Little experience with C and x86 Assembly
|
||||||
|
* hardware requirements: Nothing special
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* Patrick Rudolph <patrick.rudolph@9elements.com>
|
||||||
|
* Christian Walter <christian.walter@9elements.com>
|
||||||
|
|
||||||
|
## Board status replacement
|
||||||
|
The [Board status page](https://coreboot.org/status/board-status.html) allows
|
||||||
|
to see last working commit of a board. The page is generated by a cron job
|
||||||
|
that runs on a huge git repository.
|
||||||
|
|
||||||
|
Build an open source replacement written in Golang using existing tools
|
||||||
|
and libraries, consisting of a backend, a frontend and client side
|
||||||
|
scripts. The backend should connect to an SQL database with can be
|
||||||
|
controlled using a RESTful API. The RESTful API should have basic authentication
|
||||||
|
for managment tasks and new board status uploads.
|
||||||
|
|
||||||
|
At least one older test result should be keept in the database.
|
||||||
|
|
||||||
|
The frontend should use established UI libraries or frameworks (for example
|
||||||
|
Angular) to display the current board status, that is if it's working or not
|
||||||
|
and some details provided with the last test. If a board isn't working the last
|
||||||
|
working commit (if any) should be shown in addition to the broken one.
|
||||||
|
|
||||||
|
Provide a script/tool that allows to:
|
||||||
|
1. Push mainboard details from coreboot master CI
|
||||||
|
2. Push mainboard test results from authenticated users containing
|
||||||
|
* working
|
||||||
|
* commit hash
|
||||||
|
* bootlog (if any)
|
||||||
|
* dmesg (if it's booting)
|
||||||
|
* timestamps (if it's booting)
|
||||||
|
* coreboot config
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
* coreboot knowledge: Non-technical, needed to perform requirements analysis
|
||||||
|
* software knowledge: Golang, SQL for the backend, JS for the frontend
|
||||||
|
|
||||||
|
### Mentors
|
||||||
|
* Patrick Rudolph <patrick.rudolph@9elements.com>
|
||||||
|
* Christian Walter <christian.walter@9elements.com>
|
||||||
|
313
Documentation/drivers/dptf.md
Normal file
@ -0,0 +1,313 @@
|
|||||||
|
# Intel DPTF implementations in coreboot
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
Intel Dynamic Platform and Thermal Framework is a framework that can be used to
|
||||||
|
help regulate the thermal properties (i.e., temperature) of an Intel-based
|
||||||
|
computer. It does this by allowing the system designer to specify the different
|
||||||
|
components that can generate heat, and/or dissipate heat. Under DPTF, the
|
||||||
|
different components are referred to as `participants`. The different types of
|
||||||
|
functionality available in DPTF are specified in terms of different `policies`.
|
||||||
|
|
||||||
|
## Components ("Participants")
|
||||||
|
|
||||||
|
The participants that can be involved in the current implementation are:
|
||||||
|
- CPU (monolithic from a DPTF point-of-view)
|
||||||
|
- Note that the CPU's internal temperature sensor is used here
|
||||||
|
- 1 fan
|
||||||
|
- Up to 4 temperature sensors (TSRs)
|
||||||
|
- Battery charger
|
||||||
|
|
||||||
|
## Policies
|
||||||
|
|
||||||
|
In the current implementation, there are 3 different policies available:
|
||||||
|
|
||||||
|
### Passive Policy
|
||||||
|
|
||||||
|
The purpose of this policy is to monitor participant temperatures and is capable
|
||||||
|
of controlling performance and throttling available on platform devices in order
|
||||||
|
to regulate the temperatures of each participant. The temperature threshold
|
||||||
|
points are defined by a `_PSV` ACPI object within each participant.
|
||||||
|
|
||||||
|
### Critical Policy
|
||||||
|
|
||||||
|
The Critical Policy is used for gracefully suspending or powering off the system
|
||||||
|
when the temperature of participants exceeds critical threshold
|
||||||
|
temperatures. Suspend is effected by specifying temperatures in a `_CRT` object
|
||||||
|
for a participant, and poweroff is effected by specifying a temperature
|
||||||
|
threshold in a `_HOT` ACPI object.
|
||||||
|
|
||||||
|
### Active Policy
|
||||||
|
|
||||||
|
This policy monitors the temperature of participants and controls fans to spin
|
||||||
|
at varying speeds. These speeds are defined by the platform, and will be enabled
|
||||||
|
depending on the various temperatures reported by participants.
|
||||||
|
|
||||||
|
# Note about units
|
||||||
|
|
||||||
|
ACPI uses unusual units for specifying various physical measurements. For
|
||||||
|
example, temperatures are specified in 10ths of a degree K, and time is measured
|
||||||
|
in tenths of a second. Those oddities are abstracted away in the DPTF library,
|
||||||
|
by using degrees C for temperature, milliseconds for time, mW for power, and mA
|
||||||
|
for current.
|
||||||
|
|
||||||
|
## Differences from the static ASL files (soc/intel/common/acpi/dptf/*.asl)
|
||||||
|
|
||||||
|
1) TCPU had many redundant methods. The many references to \_SB.CP00._* are not
|
||||||
|
created anymore in recent SoCs and the ACPI spec says these are optional objects
|
||||||
|
anyway. The defaults that were returned by these methods were redundant (all
|
||||||
|
data was a 0). The following Methods were removed:
|
||||||
|
|
||||||
|
* _TSS
|
||||||
|
* _TPC
|
||||||
|
* _PTC
|
||||||
|
* _TSD
|
||||||
|
* _TDL
|
||||||
|
* _PSS
|
||||||
|
* _PDL
|
||||||
|
|
||||||
|
2) There is no more implicit inclusion of _ACn methods for TCPU (these must be
|
||||||
|
specified in the devicetree entries or by calling the DPTF acpigen API).
|
||||||
|
|
||||||
|
# ACPI Tables
|
||||||
|
|
||||||
|
DPTF relies on an assortment of ACPI tables to provide parameters to the DPTF
|
||||||
|
application. We will discuss the more important ones here.
|
||||||
|
|
||||||
|
1) _TRT - Thermal Relationship Table
|
||||||
|
|
||||||
|
This table is used when the Passive Policy is enabled, and is used to represent
|
||||||
|
the thermal relationships in the system that can be controlled passively (i.e.,
|
||||||
|
by throttling participants). A passive policy is defined by a Source (which
|
||||||
|
generates heat), a Target (typically a temperature sensor), a Sampling Period
|
||||||
|
(how often to check the temperature), an activation temperature threshold (for
|
||||||
|
when to begin throttling), and a relative priority.
|
||||||
|
|
||||||
|
2) _ART - Active Relationship Table
|
||||||
|
|
||||||
|
This table is used when the Active Policy is enabled, and is used to represent
|
||||||
|
active cooling relationships (i.e., which TSRs the fan can cool). An active
|
||||||
|
policy contains a Target (the device the fan can cool), a Weight to control
|
||||||
|
which participant needs more attention than others, and a list of temperature /
|
||||||
|
fan percentage pairs. The list of pairs defines the fan control percentage that
|
||||||
|
should be applied when the TSR reaches each successive threshold (_AC0 is the
|
||||||
|
highest threshold, and represents the highest fan control percentage).
|
||||||
|
|
||||||
|
3) PPCC - Participant Power Control Capabilities
|
||||||
|
|
||||||
|
This table is used to describe parameters for controlling the SoC's Running
|
||||||
|
Average Power Limits (RAPL, see below).
|
||||||
|
|
||||||
|
4) _FPS - Fan Performance States
|
||||||
|
|
||||||
|
This table describes the various fan speeds available for DPTF to use, along with
|
||||||
|
various informational properties.
|
||||||
|
|
||||||
|
5) PPSS - Participant Performance Supported States
|
||||||
|
|
||||||
|
This table describes performance states supported by a participant (typically
|
||||||
|
the battery charger).
|
||||||
|
|
||||||
|
# ACPI Methods
|
||||||
|
|
||||||
|
The Active and Passive policies also provide for short Methods to define
|
||||||
|
different kinds of temperature thresholds.
|
||||||
|
|
||||||
|
1) _AC0, _AC1, _AC2, _AC3, ..., _AC9
|
||||||
|
|
||||||
|
These Methods can provide up to 10 temperature thresholds. What these do is set
|
||||||
|
temperatures which act as the thresholds to active rows (fan speeds) in the
|
||||||
|
ART. _AC0 is intended to be the highest temperature thresholds, and the lowest
|
||||||
|
one can be any of them; leave the rest defined as 0 and they will be omitted
|
||||||
|
from the output.
|
||||||
|
|
||||||
|
These are optional and are enabled by selecting the Active Policy.
|
||||||
|
|
||||||
|
2) _PSV
|
||||||
|
|
||||||
|
_PSV is a temperature threshold that is used to indicate to DPTF that it should
|
||||||
|
begin taking passive measures (i.e., throttling of the Source) in order to
|
||||||
|
reduce the temperature of the Target in question. It will check on the
|
||||||
|
temperature according to the given sampling period.
|
||||||
|
|
||||||
|
This is optional and is enabled by selecting the Passive Policy.
|
||||||
|
|
||||||
|
3) _CRT and _HOT
|
||||||
|
|
||||||
|
When the temperature of the Source reaches the threshold specified in _CRT, then
|
||||||
|
the system is supposed to execute a "graceful suspend". Similarly, when the Source
|
||||||
|
reaches the temperature specified in _HOT, then the system is supposed to execute
|
||||||
|
a "graceful shutdown".
|
||||||
|
|
||||||
|
These are optional, and are enabled by selecting the Critical Policy.
|
||||||
|
|
||||||
|
# How to use the devicetree entries
|
||||||
|
|
||||||
|
The `drivers/intel/dptf` chip driver is organized into several sections:
|
||||||
|
- Policies
|
||||||
|
- Controls
|
||||||
|
- Options
|
||||||
|
|
||||||
|
The Policies section (`policies.active`, `policies.passive`, and
|
||||||
|
`policies.critical`) is where the components of each policy are defined.
|
||||||
|
|
||||||
|
## Active Policy
|
||||||
|
|
||||||
|
Each Active Policy is defined in terms of 4 parts:
|
||||||
|
1) A Source (this is implicitly defined as TFN1, the system fan)
|
||||||
|
2) A Target (this is the device that can be affected by the policy, i.e.,
|
||||||
|
this is a device that can be cooled by the fan)
|
||||||
|
3) A 'Weight', which is defined as the Source's contribution to the Target's
|
||||||
|
cooling capability (as a percentage, 0-100, often just left at 100).
|
||||||
|
4) A list of temperature-fan percentage pairs, which define temperature
|
||||||
|
thresholds that, when the Target reaches, the fan is defined to spin
|
||||||
|
at the corresponding percentage of full duty cycle.
|
||||||
|
|
||||||
|
An example definition in the devicetree:
|
||||||
|
```C
|
||||||
|
register "policies.active[0]" = "{
|
||||||
|
.target=DPTF_CPU,
|
||||||
|
.weight=100,
|
||||||
|
.thresholds={TEMP_PCT(85, 90),
|
||||||
|
TEMP_PCT(80, 69),
|
||||||
|
TEMP_PCT(75, 56),
|
||||||
|
TEMP_PCT(70, 46),
|
||||||
|
TEMP_PCT(65, 36),}}"
|
||||||
|
```
|
||||||
|
|
||||||
|
This example sets up a policy wherein the CPU temperature sensor can be cooled
|
||||||
|
by the fan. The 'weight' of this policy is 100% (this policy contributes 100% of
|
||||||
|
the CPU's active cooling capability). When the CPU temperature first crosses
|
||||||
|
65C, the fan is defined to spin at 36% of its duty cycle, and so forth up the
|
||||||
|
rest of the table (note that it *must* be defined from highest temperature/
|
||||||
|
percentage on down to the lowest).
|
||||||
|
|
||||||
|
## Passive Policy
|
||||||
|
|
||||||
|
Each Passive Policy is defined in terms of 5 parts:
|
||||||
|
1) Source - The device that can be throttled
|
||||||
|
2) Target - The device that controls the amount of throttling
|
||||||
|
3) Period - How often to check the temperature of the Target
|
||||||
|
4) Trip point - What temperature threshold to start throttling
|
||||||
|
5) Priority - A number indicating the relative priority between different
|
||||||
|
Policies
|
||||||
|
|
||||||
|
An example definition in the devicetree:
|
||||||
|
```C
|
||||||
|
register "policies.passive[0]" = "DPTF_PASSIVE(CHARGER, TEMP_SENSOR_1, 65, 60000)"
|
||||||
|
```
|
||||||
|
|
||||||
|
This example sets up a policy to begin throttling the charger performance when
|
||||||
|
temperature sensor 1 reaches 65C. The sampling period here is 60000 ms (60 s).
|
||||||
|
The Priority is defaulted to 100 in this case.
|
||||||
|
|
||||||
|
## Critical Policy
|
||||||
|
|
||||||
|
Each Critical Policy is defined in terms of 3 parts:
|
||||||
|
1) Source - A device that can trigger a critical event
|
||||||
|
2) Type - What type of critical event to trigger (S4-entry or shutdown)
|
||||||
|
3) Temperature - The temperature threshold that will cause the entry into S4 or
|
||||||
|
to shutdown the system.
|
||||||
|
|
||||||
|
An example definition in the devicetree:
|
||||||
|
|
||||||
|
```C
|
||||||
|
register "policies.critical[1]" = "DPTF_CRITICAL(CPU, 75, SHUTDOWN)"
|
||||||
|
```
|
||||||
|
|
||||||
|
This example sets up a policy wherein ACPI will cause the system to shutdown
|
||||||
|
(in a "graceful" manner) when the CPU temperature reaches 75C.
|
||||||
|
|
||||||
|
## Power Limits
|
||||||
|
|
||||||
|
Control over the SoC's Running Average Power Limits (RAPL) is one of the tools
|
||||||
|
that DPTF uses to enact Passive policies. DPTF can control both PL1 and PL2, if
|
||||||
|
the PPCC table is provided for the TCPU object. Each power limit is given the
|
||||||
|
following options:
|
||||||
|
1) Minimum power (in mW)
|
||||||
|
2) Maximum power (in mW)
|
||||||
|
3) Minimum time window (in ms)
|
||||||
|
4) Maximum time window (in ms)
|
||||||
|
5) Granularity, or minimum step size to control limits (in mW)
|
||||||
|
|
||||||
|
An example:
|
||||||
|
```C
|
||||||
|
register "controls.power_limits.pl1" = "{
|
||||||
|
.min_power = 3000,
|
||||||
|
.max_power = 15000,
|
||||||
|
.time_window_min = 28 * MSECS_PER_SEC,
|
||||||
|
.time_window_max = 32 * MSECS_PER_SEC,
|
||||||
|
.granularity = 200,}"
|
||||||
|
```
|
||||||
|
|
||||||
|
This example allow DPTF to control the SoC's PL1 level to between 3W and 15W,
|
||||||
|
over a time interval ranging from 28 to 32 seconds, and it can move PL1 in
|
||||||
|
increments of 200 mW.
|
||||||
|
|
||||||
|
## Charger Performance
|
||||||
|
|
||||||
|
The battery charger can be a large contributor of unwanted heat in a system that
|
||||||
|
has one. Controlling the rate of charging is another tool that DPTF uses to enact
|
||||||
|
Passive Policies. Each entry in the PPSS table consists of:
|
||||||
|
1) A 'Control' value - an opaque value that the platform firmware uses
|
||||||
|
to initiate a transition to the specified performance state. DPTF will call an
|
||||||
|
ACPI method called `TCHG.SPPC` (Set Participant Performance Capability) if
|
||||||
|
applicable, and will pass this opaque control value as its argument.
|
||||||
|
2) The intended charging rate (in mA).
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```C
|
||||||
|
register "controls.charger_perf[0]" = "{ 255, 1700 }"
|
||||||
|
register "controls.charger_perf[1]" = "{ 24, 1500 }"
|
||||||
|
register "controls.charger_perf[2]" = "{ 16, 1000 }"
|
||||||
|
register "controls.charger_perf[3]" = "{ 8, 500 }"
|
||||||
|
```
|
||||||
|
|
||||||
|
In this example, when DPTF decides to throttle the charger, it has four different
|
||||||
|
performance states to choose from.
|
||||||
|
|
||||||
|
## Fan Performance
|
||||||
|
|
||||||
|
When using DPTF, the system fan (`TFN1`) is the device responsible for actively
|
||||||
|
cooling the other temperature sensors on the mainboard. A fan speed table can be
|
||||||
|
provided to DPTF to assist with fan control. Each entry holds the following:
|
||||||
|
1) Percentage of full duty to spin the fan at
|
||||||
|
2) Speed - Speed of the fan at that percentage; informational only, but given in
|
||||||
|
RPM
|
||||||
|
3) Noise - Amount of noise created by the fan at that percentage; informational
|
||||||
|
only, but given in tenths of a decibel (centibel).
|
||||||
|
4) Power - Amount of power consumed by the fan at that percentage; informational
|
||||||
|
only, but given in mA.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```C
|
||||||
|
register "controls.fan_perf[0]" = "{ 90, 6700, 220, 2200, }"
|
||||||
|
register "controls.fan_perf[1]" = "{ 80, 5800, 180, 1800, }"
|
||||||
|
register "controls.fan_perf[2]" = "{ 70, 5000, 145, 1450, }"
|
||||||
|
register "controls.fan_perf[3]" = "{ 60, 4900, 115, 1150, }"
|
||||||
|
register "controls.fan_perf[4]" = "{ 50, 3838, 90, 900, }"
|
||||||
|
register "controls.fan_perf[5]" = "{ 40, 2904, 55, 550, }"
|
||||||
|
register "controls.fan_perf[6]" = "{ 30, 2337, 30, 300, }"
|
||||||
|
register "controls.fan_perf[7]" = "{ 20, 1608, 15, 150, }"
|
||||||
|
register "controls.fan_perf[8]" = "{ 10, 800, 10, 100, }"
|
||||||
|
register "controls.fan_perf[9]" = "{ 0, 0, 0, 50, }"
|
||||||
|
```
|
||||||
|
|
||||||
|
In this example, the fan has 10 different performance states, each in an even
|
||||||
|
increment of 10 percentage points. This is common when specifying fine-grained
|
||||||
|
control of the fan, wherein DPTF will interpolate between the percentages in the
|
||||||
|
table for a given temperature threshold.
|
||||||
|
|
||||||
|
## Options
|
||||||
|
|
||||||
|
### Fan
|
||||||
|
1) Fine-grained control - a boolean (see Fan Performance section above)
|
||||||
|
2) Step-size - Recommended minimum step size (in percentage points) to adjust
|
||||||
|
the fan speed when using fine-grained control (ranges from 1 - 9).
|
||||||
|
3) Low-speed notify - If true, the platform will issue a `Notify (0x80)` to the
|
||||||
|
fan device if a low fan speed is detected.
|
||||||
|
|
||||||
|
### Temperature sensors
|
||||||
|
1) Hysteresis - The amount of hysteresis implemented in either circuitry or
|
||||||
|
the firmware that reads the temperature sensor (in degrees C).
|
||||||
|
2) Name - This name is applied to the _STR property of the sensor
|
@ -5,3 +5,5 @@ and plugin devices, significantly reducing integration complexity and
|
|||||||
they allow to easily reuse existing code accross platforms.
|
they allow to easily reuse existing code accross platforms.
|
||||||
|
|
||||||
* [IPMI KCS](ipmi_kcs.md)
|
* [IPMI KCS](ipmi_kcs.md)
|
||||||
|
* [SMMSTORE](smmstore.md)
|
||||||
|
* [SoundWire](soundwire.md)
|
||||||
|
134
Documentation/drivers/smmstore.md
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
# SMM based flash storage driver
|
||||||
|
|
||||||
|
This documents the API exposed by the x86 system management based
|
||||||
|
storage driver.
|
||||||
|
|
||||||
|
## SMMSTORE
|
||||||
|
|
||||||
|
SMMSTORE is a [SMM] mediated driver to read from, write to and erase a
|
||||||
|
predefined region in flash. It can be enabled by setting
|
||||||
|
`CONFIG_SMMSTORE=y` in menuconfig.
|
||||||
|
|
||||||
|
This can be used by the OS or the payload to implement persistent
|
||||||
|
storage to hold for instance configuration data, without needing
|
||||||
|
to implement a (platform specific) storage driver in the payload
|
||||||
|
itself.
|
||||||
|
|
||||||
|
The API provides append-only semantics for key/value pairs.
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
### Storage region
|
||||||
|
|
||||||
|
By default SMMSTORE will operate on a separate FMAP region called
|
||||||
|
`SMMSTORE`. The default generated FMAP will include such a region.
|
||||||
|
On systems with a locked FMAP, e.g. in an existing vboot setup
|
||||||
|
with a locked RO region, the option exists to add a cbfsfile
|
||||||
|
called `smm_store` in the `RW_LEGACY` (if CHROMEOS) or in the
|
||||||
|
`COREBOOT` FMAP regions. It is recommended for new builds using
|
||||||
|
a handcrafted FMD that intend to make use of SMMSTORE to include a
|
||||||
|
sufficiently large `SMMSTORE` FMAP region. It is recommended to
|
||||||
|
align the `SMMSTORE` region to 64KiB for the largest flash erase
|
||||||
|
op compatibility.
|
||||||
|
|
||||||
|
When a default generated FMAP is used the size of the FMAP region
|
||||||
|
is equal to `CONFIG_SMMSTORE_SIZE`. UEFI payloads expect at least
|
||||||
|
64KiB. Given that the current implementation lacks a way to rewrite
|
||||||
|
key-value pairs at least a multiple of this is recommended.
|
||||||
|
|
||||||
|
### generating the SMI
|
||||||
|
|
||||||
|
SMMSTORE is called via an SMI, which is generated via a write to the
|
||||||
|
IO port defined in the smi_cmd entry of the FADT ACPI table. `%al`
|
||||||
|
contains `APM_CNT_SMMSTORE=0xed` and is written to the smi_cmd IO
|
||||||
|
port. `%ah` contains the SMMSTORE command. `%ebx` contains the
|
||||||
|
parameter buffer to the SMMSTORE command.
|
||||||
|
|
||||||
|
### Return values
|
||||||
|
|
||||||
|
If a command succeeds, SMMSTORE will return with
|
||||||
|
`SMMSTORE_RET_SUCCESS=0` on `%eax`. On failure SMMSTORE will return
|
||||||
|
`SMMSTORE_RET_FAILURE=1`. For unsupported SMMSTORE commands
|
||||||
|
`SMMSTORE_REG_UNSUPPORTED=2` is returned.
|
||||||
|
|
||||||
|
**NOTE1**: The caller **must** check the return value and should make
|
||||||
|
no assumption on the returned data if `%eax` does not contain
|
||||||
|
`SMMSTORE_RET_SUCCESS`.
|
||||||
|
|
||||||
|
**NOTE2**: If the SMI returns without changing `%ax` assume that the
|
||||||
|
SMMSTORE feature is not installed.
|
||||||
|
|
||||||
|
### Calling arguments
|
||||||
|
|
||||||
|
SMMSTORE supports 3 subcommands that are passed via `%ah`, the additional
|
||||||
|
calling arguments are passed via `%ebx`.
|
||||||
|
|
||||||
|
**NOTE**: The size of the struct entries are in the native word size of
|
||||||
|
smihandler. This means 32 bits in almost all cases.
|
||||||
|
|
||||||
|
|
||||||
|
#### - SMMSTORE_CMD_CLEAR = 1
|
||||||
|
|
||||||
|
This clears the `SMMSTORE` storage region. The argument in `%ebx` is
|
||||||
|
unused.
|
||||||
|
|
||||||
|
#### - SMMSTORE_CMD_READ = 2
|
||||||
|
|
||||||
|
The additional parameter buffer `%ebx` contains a pointer to
|
||||||
|
the following struct:
|
||||||
|
|
||||||
|
```C
|
||||||
|
struct smmstore_params_read {
|
||||||
|
void *buf;
|
||||||
|
ssize_t bufsize;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
INPUT:
|
||||||
|
- `buf`: is a pointer to where the data needs to be read
|
||||||
|
- `bufsize`: is the size of the buffer
|
||||||
|
|
||||||
|
OUTPUT:
|
||||||
|
- `buf`
|
||||||
|
- `bufsize`: returns the amount of data that has actually been read.
|
||||||
|
|
||||||
|
#### - SMMSTORE_CMD_APPEND = 3
|
||||||
|
|
||||||
|
SMMSTORE takes a key-value approach to appending data. key-value pairs
|
||||||
|
are never updated, they are always appended. It is up to the caller to
|
||||||
|
walk through the key-value pairs after reading SMMSTORE to find the
|
||||||
|
latest one.
|
||||||
|
|
||||||
|
The additional parameter buffer `%ebx` contains a pointer to
|
||||||
|
the following struct:
|
||||||
|
|
||||||
|
```C
|
||||||
|
struct smmstore_params_append {
|
||||||
|
void *key;
|
||||||
|
size_t keysize;
|
||||||
|
void *val;
|
||||||
|
size_t valsize;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
INPUT:
|
||||||
|
- `key`: pointer to the key data
|
||||||
|
- `keysize`: size of the key data
|
||||||
|
- `val`: pointer to the value data
|
||||||
|
- `valsize`: size of the value data
|
||||||
|
|
||||||
|
#### Security
|
||||||
|
|
||||||
|
Pointers provided by the payload or OS are checked to not overlap with the SMM.
|
||||||
|
That protects the SMM handler from being manipulated.
|
||||||
|
|
||||||
|
*However there's no validation done on the source or destination pointing to
|
||||||
|
DRAM. A malicious application that is able to issue SMIs could extract arbitrary
|
||||||
|
data or modify the currently running kernel.*
|
||||||
|
|
||||||
|
## External links
|
||||||
|
|
||||||
|
* [A Tour Beyond BIOS Implementing UEFI Authenticated Variables in SMM with EDKI](https://software.intel.com/sites/default/files/managed/cf/ea/a_tour_beyond_bios_implementing_uefi_authenticated_variables_in_smm_with_edkii.pdf)
|
||||||
|
Note, this differs significantly from coreboot's implementation.
|
||||||
|
|
||||||
|
[SMM]: ../security/smm.md
|
496
Documentation/drivers/soundwire.md
Normal file
@ -0,0 +1,496 @@
|
|||||||
|
# SoundWire Implementation in coreboot
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
SoundWire is an audio interface specification from the MIPI Alliance.
|
||||||
|
|
||||||
|
- Low complexity
|
||||||
|
- Low power
|
||||||
|
- Low latency
|
||||||
|
- Two pins (clock and data)
|
||||||
|
- Multi-drop capable
|
||||||
|
- Multiple audio streams
|
||||||
|
- Embedded control/command channel
|
||||||
|
|
||||||
|
The main *SoundWire Specification* is at version 1.2 and can be downloaded from
|
||||||
|
<https://mipi.org> but it is unfortunately only available to MIPI Alliance members.
|
||||||
|
|
||||||
|
There is a separate *SoundWire Discovery and Configuration (DisCo) Specification* which
|
||||||
|
is at version 1.0 and is available for non-members after providing name and email at
|
||||||
|
<https://resources.mipi.org/disco_soundwire>.
|
||||||
|
|
||||||
|
The coreboot implementation is based on the SoundWire DisCo Specification which defines
|
||||||
|
object hierarchy and properties for providing topology and configuration information to
|
||||||
|
OS kernel drivers via ACPI or DeviceTree.
|
||||||
|
|
||||||
|
SoundWire itself is architecture independent and the coreboot basic definition is also not
|
||||||
|
specific to any to any SoC. The examples in this document use ACPI to generate properties,
|
||||||
|
but the same structures and properties would be needed in a DeviceTree implementation.
|
||||||
|
|
||||||
|
## Bus
|
||||||
|
|
||||||
|
The SoundWire bus commonly consists of two pins:
|
||||||
|
|
||||||
|
* Clock: A common clock signal distributed from the master to all of the slaves.
|
||||||
|
* Data: A shared data signal that can be driven by any of the devices, and has a defined
|
||||||
|
value when no device is driving it.
|
||||||
|
|
||||||
|
While most designs have one data lane it is possible for a multi-lane device to have up
|
||||||
|
to 8 data lanes and thus would have more than two pins.
|
||||||
|
|
||||||
|
A SoundWire bus consists of one master device, up to 11 slave devices, and an optional
|
||||||
|
monitor interface for debug.
|
||||||
|
|
||||||
|
SoundWire is an enumerable bus, but not a discoverable one. That means it is required
|
||||||
|
for firmware to provide details about the connected devices to the OS.
|
||||||
|
|
||||||
|
### Controller
|
||||||
|
|
||||||
|
A SoundWire controller contains one or more master devices. The handling of multiple
|
||||||
|
masters is left up to the implementation, they may share a clock or be operated
|
||||||
|
independently or entirely in tandem. The master devices connected to a controller are
|
||||||
|
also referred to as links.
|
||||||
|
|
||||||
|
In coreboot the controller device is provided by the SoC or an add-in PCI card.
|
||||||
|
|
||||||
|
### Master
|
||||||
|
|
||||||
|
A SoundWire master (or link) device is responsible for clock and data handling, bus
|
||||||
|
management, and bit slot allocation.
|
||||||
|
|
||||||
|
In coreboot the definition of the master device is left up to the controller and the
|
||||||
|
mainboard should only need to know the controller's SoundWire topology (number of masters)
|
||||||
|
to configure `devicetree.cb`.
|
||||||
|
|
||||||
|
It may however be expected to provide some additional SoC-specific configuration data to
|
||||||
|
the controller, such as an input clock rate or a list of available masters that cannot
|
||||||
|
be determined at run time.
|
||||||
|
|
||||||
|
### Slave
|
||||||
|
|
||||||
|
SoundWire slave devices are connected to a master and respond to the two-wire control
|
||||||
|
information on the SoundWire bus. There can be up to 11 slave devices on a bus and they
|
||||||
|
are capable of interrupting and waking the host.
|
||||||
|
|
||||||
|
Slave devices may also have master links which can be connected to other slave devices.
|
||||||
|
It is also possible for a multi-lane slave device to have multiple data lanes connected
|
||||||
|
to different combinations of master and slave devices.
|
||||||
|
|
||||||
|
In coreboot the slave device is defined by a codec driver which should be found in the
|
||||||
|
source tree at `src/drivers/soundwire`.
|
||||||
|
|
||||||
|
The mainboard provides:
|
||||||
|
|
||||||
|
* Master link that this slave device is connected to.
|
||||||
|
* Unique ID that this codec responds to on the SoundWire bus.
|
||||||
|
* Multi-lane mapping. (optional)
|
||||||
|
|
||||||
|
The codec driver provides:
|
||||||
|
|
||||||
|
* Slave device properties.
|
||||||
|
* Audio Mode properties including bus frequencies and sampling rates.
|
||||||
|
* Data Port 1-14 properties such as word lengths, interrupt support, channels.
|
||||||
|
* Data Port 0 and Bulk Register Access properties. (optional)
|
||||||
|
|
||||||
|
### Monitor
|
||||||
|
|
||||||
|
A SoundWire monitor device is defined that allows for test equipment to snoop the bus and
|
||||||
|
take over and issue commands. The monitor interface is not defined for coreboot.
|
||||||
|
|
||||||
|
### Example SoundWire Bus
|
||||||
|
|
||||||
|
```
|
||||||
|
+---------------+ +---------------+
|
||||||
|
| | Clock Signal | |
|
||||||
|
| Master |-------+-------------------------------| Slave |
|
||||||
|
| Interface | | Data Signal | Interface 1 |
|
||||||
|
| |-------|-------+-----------------------| |
|
||||||
|
+---------------+ | | +---------------+
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
+--+-------+--+
|
||||||
|
| |
|
||||||
|
| Slave |
|
||||||
|
| Interface 2 |
|
||||||
|
| |
|
||||||
|
+-------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## coreboot
|
||||||
|
|
||||||
|
The coreboot implementation of SoundWire integrates with the device model and takes
|
||||||
|
advantage of the hierarchical nature of `devicetree.cb` to populate the topology.
|
||||||
|
|
||||||
|
The architecture-independent SoundWire tables are defined at
|
||||||
|
|
||||||
|
src/include/device/soundwire.h
|
||||||
|
|
||||||
|
Support for new devices comes in three forms:
|
||||||
|
|
||||||
|
1. New controller and master drivers. The first implementation in coreboot is for an Intel
|
||||||
|
SoC but the SoundWire specification is in wide use on various ARM SoCs.
|
||||||
|
|
||||||
|
Controller drivers can be implemented in `src/soc` or `src/drivers` and should
|
||||||
|
strive to re-use code as much as possible between different SoC generations from the
|
||||||
|
same vendor.
|
||||||
|
|
||||||
|
2. New codec drivers. These should be implemented for each codec that is added which
|
||||||
|
supports SoundWire. The properties vary between codecs and careful study of the data sheet
|
||||||
|
is necessary to ensure proper operation.
|
||||||
|
|
||||||
|
Codec drivers should be implemented in `src/drivers/soundwire` as separate chip drivers.
|
||||||
|
As every codec is different there may not be opportunities of code re-use except between
|
||||||
|
similar codecs from the same vendor.
|
||||||
|
|
||||||
|
3. New mainboards with SoundWire support. The mainboard will combine controllers and codecs
|
||||||
|
to form a topology that is described in `devicetree.cb`. Some devices may need to provide
|
||||||
|
board-specific configuration information, and multi-lane devices will need to provide the
|
||||||
|
master/slave lane map.
|
||||||
|
|
||||||
|
## ACPI Implementation
|
||||||
|
|
||||||
|
The implementation for x86 devices relies on ACPI for providing device properties to the OS
|
||||||
|
kernel drivers.
|
||||||
|
|
||||||
|
The ACPI implementation can be found at
|
||||||
|
|
||||||
|
src/acpi/soundwire.c
|
||||||
|
|
||||||
|
And used by including
|
||||||
|
|
||||||
|
#include <acpi/acpi_soundwire.h>
|
||||||
|
|
||||||
|
### Controller
|
||||||
|
|
||||||
|
The controller driver should populate a `struct soundwire_controller`:
|
||||||
|
|
||||||
|
```c
|
||||||
|
/**
|
||||||
|
* struct soundwire_controller - SoundWire controller properties.
|
||||||
|
* @master_count: Number of masters present on this device.
|
||||||
|
* @master_list: One entry for each master device.
|
||||||
|
*/
|
||||||
|
struct soundwire_controller {
|
||||||
|
unsigned int master_list_count;
|
||||||
|
struct soundwire_link master_list[SOUNDWIRE_MAX_DEV];
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
Once the detail of the master links are specified in the `master_list` variable, the controller
|
||||||
|
properties for the ACPI object can be generated:
|
||||||
|
|
||||||
|
```c
|
||||||
|
struct acpi_dp *dsd = acpi_dp_new_table("_DSD");
|
||||||
|
soundwire_gen_controller(dsd, &soc_controller, NULL);
|
||||||
|
acpi_dp_write(dsd);
|
||||||
|
```
|
||||||
|
|
||||||
|
If the controller needs to generate custom properties for links it can provide a callback
|
||||||
|
function to `soundwire_gen_controller()` instead of passing NULL:
|
||||||
|
|
||||||
|
```c
|
||||||
|
static void controller_link_prop_cb(struct acpi_dp *dsd, unsigned int id,
|
||||||
|
struct soundwire_controller *controller)
|
||||||
|
{
|
||||||
|
acpi_dp_add_integer(dsd, "custom-link-property", 1);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Codec
|
||||||
|
|
||||||
|
The codec driver should populate a *struct soundwire_codec* with necessary properties:
|
||||||
|
|
||||||
|
```c
|
||||||
|
/**
|
||||||
|
* struct soundwire_codec - Contains all configuration for a SoundWire codec slave device.
|
||||||
|
* @slave: Properties for slave device.
|
||||||
|
* @audio_mode: Properties for Audio Mode for Data Ports 1-14.
|
||||||
|
* @dpn: Properties for Data Ports 1-14.
|
||||||
|
* @multilane: Properties for slave multilane device. (optional)
|
||||||
|
* @dp0_bra_mode: Properties for Bulk Register Access mode for Data Port 0. (optional)
|
||||||
|
* @dp0: Properties for Data Port 0 for Bulk Register Access. (optional)
|
||||||
|
*/
|
||||||
|
struct soundwire_codec {
|
||||||
|
struct soundwire_slave *slave;
|
||||||
|
struct soundwire_audio_mode *audio_mode[SOUNDWIRE_MAX_DEV];
|
||||||
|
struct soundwire_dpn_entry dpn[SOUNDWIRE_MAX_DPN - SOUNDWIRE_MIN_DPN];
|
||||||
|
struct soundwire_multilane *multilane;
|
||||||
|
struct soundwire_bra_mode *dp0_bra_mode[SOUNDWIRE_MAX_DEV];
|
||||||
|
struct soundwire_dp0 *dp0;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
Many of these properties are optional, and depending on the codec will not be supported.
|
||||||
|
|
||||||
|
#### Slave Device Properties
|
||||||
|
|
||||||
|
These properties provide information about the codec device and what features it supports:
|
||||||
|
|
||||||
|
* Wake capability
|
||||||
|
* Clock stop behavior
|
||||||
|
* Clock and channel state machine behavior
|
||||||
|
* Features like register pages, broadcast read, bank delay, and high performance PHY
|
||||||
|
|
||||||
|
#### Multi-lane Slave Device Properties
|
||||||
|
|
||||||
|
Most slave devices have a single data pin and a single lane, but it is possible for up to
|
||||||
|
7 other lanes to be supported on a device. These lanes can be connected to other master
|
||||||
|
links or to other slave devices.
|
||||||
|
|
||||||
|
If a codec supports this feature it must indicate that by providing an entry for
|
||||||
|
`struct soundwire_multilane` in the chip configuration.
|
||||||
|
|
||||||
|
```c
|
||||||
|
/**
|
||||||
|
* struct drivers_soundwire_example_config - Example codec configuration.
|
||||||
|
* @multilane: Multi-lane slave configuration.
|
||||||
|
*/
|
||||||
|
struct drivers_soundwire_example_config {
|
||||||
|
struct soundwire_multilane multilane;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
The mainboard is required to provide the lane map in `devicetree.cb` for any codec that has
|
||||||
|
multiple lanes connected. This includes the definition up to 7 entries that indicate which
|
||||||
|
lane number on the slave devices (array index starting at 1) maps to which other device:
|
||||||
|
|
||||||
|
```
|
||||||
|
chip drivers/soundwire/multilane_codec
|
||||||
|
register "multilane.lane_mapping" = "{
|
||||||
|
{
|
||||||
|
# Slave Lane 1 maps to Master Lane 2
|
||||||
|
.lane = 1,
|
||||||
|
.direction = MASTER_LANE,
|
||||||
|
.connection.master_lane = 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
# Slave Lane 3 maps to Slave Link B
|
||||||
|
.lane = 3,
|
||||||
|
.direction = SLAVE_LINK,
|
||||||
|
.connection.slave_link = 1
|
||||||
|
}
|
||||||
|
}"
|
||||||
|
device generic 0.0 on end
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Data Port 0 Properties
|
||||||
|
|
||||||
|
SoundWire Data Port 0 (DP0) is a special port used for control and status operation relating
|
||||||
|
to the whole device interface, and as a special data port for bulk read/write operations.
|
||||||
|
|
||||||
|
The properties for data port 0 are different from that of data ports 1-14 and are about the
|
||||||
|
control channel behavior and the overall bulk register mode.
|
||||||
|
|
||||||
|
Data port 0 is not required to be supported by the slave device.
|
||||||
|
|
||||||
|
#### Bulk Register Access Mode Properties
|
||||||
|
|
||||||
|
Bulk Register Access (BRA) is an optional mechanism for transporting higher bandwidth of
|
||||||
|
register operations than the typical command mechanism. The BRA protocol is a particular
|
||||||
|
format of the data on the (optional) data port 0 connection between the master and slave.
|
||||||
|
|
||||||
|
The BRA protocol may have alignment or timing requirements that are directly related to the
|
||||||
|
bus frequencies. As a result there may be several configurations listed, for symmetry with
|
||||||
|
the audio modes paired with data ports 1-14.
|
||||||
|
|
||||||
|
#### Data Port 1-14 Properties
|
||||||
|
|
||||||
|
Data ports 1-14 are typically dedicated to streaming audio payloads, and each data port can
|
||||||
|
have from 1 to 8 channels. There are different levels of data ports, with some registers
|
||||||
|
being required and supported on all data ports and some optional registers only being used
|
||||||
|
on some data ports.
|
||||||
|
|
||||||
|
Data ports can have both a sink and a source component, and the codec may support one or
|
||||||
|
both of these on each port.
|
||||||
|
|
||||||
|
Similar to data port 0 the properties defined here describe the capabilities and supported
|
||||||
|
features of each data port, and they may be configured separately. For example the Maxim
|
||||||
|
MAX98373 codec supports a 32bit source data port for speaker output, and a 16bit sink data
|
||||||
|
port for speaker sense data.
|
||||||
|
|
||||||
|
#### Audio Mode Properties
|
||||||
|
|
||||||
|
Each data port may be tied to one or more audio modes. The audio mode describes the actual
|
||||||
|
audio capabilities of the codec, including supported frequencies and sample rates. These
|
||||||
|
modes can be shared by multiple data ports and do not need to be duplicated.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```
|
||||||
|
static struct soundwire_audio_mode audio_mode = {
|
||||||
|
.bus_frequency_max = 24 * MHz,
|
||||||
|
.bus_frequency_min = 24 * KHz,
|
||||||
|
.max_sampling_frequency = 192 * KHz,
|
||||||
|
.min_sampling_frequency = 8 * KHz,
|
||||||
|
};
|
||||||
|
static struct soundwire_dpn codec_dp1 = {
|
||||||
|
[...]
|
||||||
|
.port_audio_mode_count = 1,
|
||||||
|
.port_audio_mode_list = {0}
|
||||||
|
};
|
||||||
|
static struct soundwire_dpn codec_dp3 = {
|
||||||
|
[...]
|
||||||
|
.port_audio_mode_count = 1,
|
||||||
|
.port_audio_mode_list = {0}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### Generating Codec Properties
|
||||||
|
|
||||||
|
Once the properties are known it can generate the ACPI code with:
|
||||||
|
|
||||||
|
```c
|
||||||
|
struct acpi_dp *dsd = acpi_dp_new_table("_DSD");
|
||||||
|
soundwire_gen_codec(dsd, &soundwire_codec, NULL);
|
||||||
|
acpi_dp_write(dsd);
|
||||||
|
```
|
||||||
|
|
||||||
|
If the codec needs to generate custom properties for links it can provide a callback
|
||||||
|
function to `soundwire_gen_codec()` instead of passing NULL:
|
||||||
|
|
||||||
|
```c
|
||||||
|
static void codec_dp_prop_cb(struct acpi_dp *dsd, unsigned int id,
|
||||||
|
struct soundwire_codec *codec)
|
||||||
|
{
|
||||||
|
acpi_dp_add_integer(dsd, "custom-dp-property", 1);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Codec Address
|
||||||
|
|
||||||
|
SoundWire slave devices use a SoundWire defined ACPI _ADR that requires a 64-bit integer
|
||||||
|
and uses the master link ID and slave device unique ID to form a unique address for the
|
||||||
|
device on this controller.
|
||||||
|
|
||||||
|
SoundWire addresses must be distinguishable from all other slave devices on the same master
|
||||||
|
link, so multiple instances of the same manufacturer and part on the same master link will
|
||||||
|
need different unique IDs. The value is typically determined by strapping pins on the codec
|
||||||
|
chip and can be decoded for this table with the codec datasheet and board schematics.
|
||||||
|
|
||||||
|
```c
|
||||||
|
/**
|
||||||
|
* struct soundwire_address - SoundWire ACPI Device Address Encoding.
|
||||||
|
* @version: SoundWire specification version from &enum soundwire_version.
|
||||||
|
* @link_id: Zero-based SoundWire Link Number.
|
||||||
|
* @unique_id: Unique ID for multiple devices.
|
||||||
|
* @manufacturer_id: Manufacturer ID from include/device/mipi_ids.h.
|
||||||
|
* @part_id: Vendor defined part ID.
|
||||||
|
* @class: MIPI class encoding in &enum mipi_class.
|
||||||
|
*/
|
||||||
|
struct soundwire_address {
|
||||||
|
enum soundwire_version version;
|
||||||
|
uint8_t link_id;
|
||||||
|
uint8_t unique_id;
|
||||||
|
uint16_t manufacturer_id;
|
||||||
|
uint16_t part_id;
|
||||||
|
enum mipi_class class;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
This ACPI address can be generated by calling the provided acpigen function:
|
||||||
|
|
||||||
|
acpigen_write_ADR_soundwire_device(const struct soundwire_address *sdw);
|
||||||
|
|
||||||
|
### Mainboard
|
||||||
|
|
||||||
|
The mainboard needs to select appropriate drivers in `Kconfig` and define the topology in
|
||||||
|
`devicetree.cb` with the controllers and codecs that exist on the board.
|
||||||
|
|
||||||
|
The topology uses the **generic** device to describe SoundWire:
|
||||||
|
|
||||||
|
```c
|
||||||
|
struct generic_path {
|
||||||
|
unsigned int id; /* SoundWire Master Link ID */
|
||||||
|
unsigned int subid; /* SoundWire Slave Unique ID */
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
This allows devices to be specified in `devicetree.cb` with the necessary information to
|
||||||
|
generate ACPI address and device properties.
|
||||||
|
|
||||||
|
```
|
||||||
|
chip drivers/intel/soundwire
|
||||||
|
# SoundWire Controller 0
|
||||||
|
device generic 0 on
|
||||||
|
chip drivers/soundwire/codec1
|
||||||
|
# SoundWire Link 0 ID 0
|
||||||
|
device generic 0.0 on end
|
||||||
|
end
|
||||||
|
chip drivers/soundwire/codec2
|
||||||
|
# SoundWire Link 1 ID 2
|
||||||
|
device generic 1.2 on end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
## Volteer Example
|
||||||
|
|
||||||
|
This is an example of an Intel Tiger Lake reference board using SoundWire Link 0 for the
|
||||||
|
headphone codec connection, and Link 1 for connecting two speaker amps for stereo speakers.
|
||||||
|
|
||||||
|
The mainboard can be found at
|
||||||
|
|
||||||
|
src/mainboard/google/volteer
|
||||||
|
|
||||||
|
```
|
||||||
|
+------------------+ +-------------------+
|
||||||
|
| | | Headphone Codec |
|
||||||
|
| Intel Tiger Lake | +--->| Realtek ALC5682 |
|
||||||
|
| SoundWire | | | ID 1 |
|
||||||
|
| Controller | | +-------------------+
|
||||||
|
| | |
|
||||||
|
| Link 0 +----+ +-------------------+
|
||||||
|
| | | Left Speaker Amp |
|
||||||
|
| Link 1 +----+--->| Maxim MAX98373 |
|
||||||
|
| | | | ID 3 |
|
||||||
|
| Link 2 | | +-------------------+
|
||||||
|
| | |
|
||||||
|
| Link 3 | | +-------------------+
|
||||||
|
| | | | Right Speaker Amp |
|
||||||
|
+------------------+ +--->| Maxim MAX98373 |
|
||||||
|
| ID 7 |
|
||||||
|
+-------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
This implementation requires a controller driver for the Intel Tigerlake SoC and a codec
|
||||||
|
driver for the Realtek and Maxim chips. If those drivers did not already exist they would
|
||||||
|
need to be added and reviewed separately before adding the support to the mainboard.
|
||||||
|
|
||||||
|
The volteer example requires some `Kconfig` options to be selected:
|
||||||
|
|
||||||
|
```
|
||||||
|
config BOARD_GOOGLE_BASEBOARD_VOLTEER
|
||||||
|
select DRIVERS_INTEL_SOUNDWIRE
|
||||||
|
select DRIVERS_SOUNDWIRE_ALC5682
|
||||||
|
select DRIVERS_SOUNDWIRE_MAX98373
|
||||||
|
```
|
||||||
|
|
||||||
|
And the following `devicetree.cb` entries to define this topology:
|
||||||
|
|
||||||
|
```
|
||||||
|
device pci 1f.3 on
|
||||||
|
chip drivers/intel/soundwire
|
||||||
|
# SoundWire Controller 0
|
||||||
|
device generic 0 on
|
||||||
|
chip drivers/soundwire/alc5682
|
||||||
|
# SoundWire Link 0 ID 1
|
||||||
|
register "desc" = ""Headphone Jack""
|
||||||
|
device generic 0.1 on end
|
||||||
|
end
|
||||||
|
chip drivers/soundwire/max98373
|
||||||
|
# SoundWire Link 0 ID 1
|
||||||
|
register "desc" = ""Left Speaker Amp""
|
||||||
|
device generic 1.3 on end
|
||||||
|
end
|
||||||
|
chip drivers/soundwire/max98373
|
||||||
|
# SoundWire Link 1 ID 7
|
||||||
|
register "desc" = ""Right Speaker Amp""
|
||||||
|
device generic 1.7 on end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
```
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
## Using flashrom
|
## Using flashrom
|
||||||
This method does only work on Linux, if it isn't locked down.
|
This method does only work on Linux, if it isn't locked down.
|
||||||
You may also need to boot with 'iomem=relaxed' in the kernel command
|
You may also need to boot with `iomem=relaxed` in the kernel command
|
||||||
line if CONFIG_IO_STRICT_DEVMEM is set.
|
line if CONFIG_IO_STRICT_DEVMEM is set.
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ coreboot consists of multiple stages that are compiled as separate binaries and
|
|||||||
are inserted into the CBFS with custom compression. The bootblock usually doesn't
|
are inserted into the CBFS with custom compression. The bootblock usually doesn't
|
||||||
have compression while the ramstage and payload are compressed with LZMA.
|
have compression while the ramstage and payload are compressed with LZMA.
|
||||||
|
|
||||||
Each stage loads the next stage a given address (possibly decompressing it).
|
Each stage loads the next stage at given address (possibly decompressing it).
|
||||||
|
|
||||||
Some stages are relocatable and can be placed anywhere in DRAM. Those stages are
|
Some stages are relocatable and can be placed anywhere in DRAM. Those stages are
|
||||||
usually cached in CBMEM for faster loading times on ACPI S3 resume.
|
usually cached in CBMEM for faster loading times on ACPI S3 resume.
|
||||||
|
@ -254,6 +254,23 @@ commit message itself:
|
|||||||
The script 'util/gitconfig/rebase.sh' can be used to help automate this.
|
The script 'util/gitconfig/rebase.sh' can be used to help automate this.
|
||||||
Other tags such as 'Commit-Queue' can simply be removed.
|
Other tags such as 'Commit-Queue' can simply be removed.
|
||||||
|
|
||||||
|
* Check if there's documentation that needs to be updated to remain current
|
||||||
|
after your change. If there's no documentation for the part of coreboot
|
||||||
|
you're working on, consider adding some.
|
||||||
|
|
||||||
|
* When contributing a significant change to core parts of the code base (such
|
||||||
|
as the boot state machine or the resource allocator), or when introducing
|
||||||
|
a new way of doing something that you think is worthwhile to apply across
|
||||||
|
the tree (e.g. board variants), please bring up your design on the [mailing
|
||||||
|
list](../community/forums.md). When changing behavior substantially, an
|
||||||
|
explanation of what changes and why may be useful to have, either in the
|
||||||
|
commit message or, if the discussion of the subject matter needs way more
|
||||||
|
space, in the documentation. Since "what we did in the past and why it isn't
|
||||||
|
appropriate anymore" isn't the most useful reading several years down the road,
|
||||||
|
such a description could be put into the release notes for the next version
|
||||||
|
(that you can find in Documentation/releases/) where it will inform people
|
||||||
|
now without cluttering up the regular documentation, and also gives a nice
|
||||||
|
shout-out to your contribution by the next release.
|
||||||
|
|
||||||
Expectations contributors should have
|
Expectations contributors should have
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
|
136
Documentation/getting_started/gpio.md
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
# Configuring a mainboard's GPIOs in coreboot
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
Every mainboard needs to appropriately configure its General Purpose Inputs /
|
||||||
|
Outputs (GPIOs). There are many facets of this issue, including which boot
|
||||||
|
stage a GPIO might need to be configured.
|
||||||
|
|
||||||
|
## Boot stages
|
||||||
|
|
||||||
|
Typically, coreboot does most of its non-memory related initialization work in
|
||||||
|
ramstage, when DRAM is available for use. Hence, the bulk of a mainboard's GPIOs
|
||||||
|
are configured in this stage. However, some boards might need a few GPIOs
|
||||||
|
configured before that; think of memory strapping pins which indicate what kind
|
||||||
|
of DRAM is installed. These pins might need to be read before initializing the
|
||||||
|
memory, so these GPIOs are then typically configured in bootblock or romstage.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Most mainboards will have a ``gpio.c`` file in their mainboard directory. This
|
||||||
|
file typically contains tables which describe the configuration of the GPIO
|
||||||
|
registers. Since these registers could be different on a per-SoC or per
|
||||||
|
SoC-family basis, you may need to consult the datasheet for your SoC to find out
|
||||||
|
how to appropriately set these registers. In addition, some mainboards are
|
||||||
|
based on a baseboard/variant model, where several variant mainboards may share a
|
||||||
|
lot of their circuitry and ICs and the commonality between the boards is
|
||||||
|
collected into a virtual ``baseboard.`` In that case, the GPIOs which are shared
|
||||||
|
between multiple boards are placed in the baseboard's ``gpio.c`` file, while the
|
||||||
|
ones that are board-specific go into each variant's ``gpio.c`` file.
|
||||||
|
|
||||||
|
## Intel SoCs
|
||||||
|
|
||||||
|
Many newer Intel SoCs share a common IP block for GPIOs, and that commonality
|
||||||
|
has been taken advantage of in coreboot, which has a large set of macros that
|
||||||
|
can be used to describe the configuration of each GPIO pad. This file lives in
|
||||||
|
``src/soc/intel/common/block/include/intelblocks/gpio_defs.h``.
|
||||||
|
|
||||||
|
### Older Intel SoCs
|
||||||
|
|
||||||
|
Baytrail and Braswell, for example, simply expect the mainboard to supply a
|
||||||
|
callback, `mainboard_get_gpios` which returns an array of `struct soc_gpio`
|
||||||
|
objects, defining the configuration of each pin.
|
||||||
|
|
||||||
|
### AMD SoCs
|
||||||
|
|
||||||
|
Some AMD SoCs use a list of `struct soc_amd_gpio` objects to define the
|
||||||
|
register values configuring each pin, similar to Intel.
|
||||||
|
|
||||||
|
### Register details
|
||||||
|
|
||||||
|
GPIO configuration registers typically control properties such as:
|
||||||
|
1. Input / Output
|
||||||
|
2. Pullups / Pulldowns
|
||||||
|
3. Termination
|
||||||
|
4. Tx / Rx Disable
|
||||||
|
5. Which reset signal to use
|
||||||
|
6. Native Function / IO
|
||||||
|
7. Interrupts
|
||||||
|
* IRQ routing (e.g. on x86, APIC, SCI, SMI)
|
||||||
|
* Edge or Level Triggered
|
||||||
|
* Active High or Active Low
|
||||||
|
8. Debouncing
|
||||||
|
|
||||||
|
## Configuring GPIOs for pre-ramstage
|
||||||
|
|
||||||
|
coreboot provides for several SoC-specific and mainboard-specific callbacks at
|
||||||
|
specific points in time, such as bootblock-early, bootblock, romstage entry,
|
||||||
|
pre-silicon init, pre-RAM init, or post-RAM init. The GPIOs that are
|
||||||
|
configured in either bootblock or romstage, depending on when they are needed,
|
||||||
|
are denoted the "early" GPIOs. Some mainboard will use
|
||||||
|
``bootblock_mainboard_init()`` to configure their early GPIOs, and this is
|
||||||
|
probably a good place to start. Many mainboards will declare their GPIO
|
||||||
|
configuration as structs, i.e. (Intel),
|
||||||
|
|
||||||
|
```C
|
||||||
|
struct pad_config {
|
||||||
|
/* offset of pad within community */
|
||||||
|
int pad;
|
||||||
|
/* Pad config data corresponding to DW0, DW1,.... */
|
||||||
|
uint32_t pad_config[GPIO_NUM_PAD_CFG_REGS];
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
and will usually place these in an array, one for each pad to be configured.
|
||||||
|
Mainboards using Intel SoCs can use a library which combines common
|
||||||
|
configurations together into a set of macros, e.g.,
|
||||||
|
|
||||||
|
```C
|
||||||
|
/* Native function configuration */
|
||||||
|
#define PAD_CFG_NF(pad, pull, rst, func)
|
||||||
|
/*
|
||||||
|
* Set native function with RX Level/Edge configuration and disable
|
||||||
|
* input/output buffer if necessary
|
||||||
|
*/
|
||||||
|
#define PAD_CFG_NF_BUF_TRIG(pad, pull, rst, func, bufdis, trig)
|
||||||
|
/* General purpose output, no pullup/down. */
|
||||||
|
#define PAD_CFG_GPO(pad, val, rst)
|
||||||
|
/* General purpose output, with termination specified */
|
||||||
|
#define PAD_CFG_TERM_GPO(pad, val, pull, rst)
|
||||||
|
/* General purpose output, no pullup/down. */
|
||||||
|
#define PAD_CFG_GPO_GPIO_DRIVER(pad, val, rst, pull)
|
||||||
|
/* General purpose input */
|
||||||
|
#define PAD_CFG_GPI(pad, pull, rst)
|
||||||
|
```
|
||||||
|
etc.
|
||||||
|
|
||||||
|
## Configuring GPIOs for ramstage and beyond...
|
||||||
|
|
||||||
|
In ramstage, most mainboards will configure the rest of their GPIOs for the
|
||||||
|
function they will be performing while the device is active. The goal is the
|
||||||
|
same as above in bootblock; another ``static const`` array is created, and the
|
||||||
|
rest of the GPIO registers are programmed.
|
||||||
|
|
||||||
|
In the baseboard/variant model described above, the baseboard will provide the
|
||||||
|
configuration for the GPIOs which are configured identically between variants,
|
||||||
|
and will provide a mechanism for a variant to override the baseboard's
|
||||||
|
configuration. This is usually done via two tables: the baseboard table and the
|
||||||
|
variant's override table.
|
||||||
|
|
||||||
|
This configuration is often hooked into the mainboard's `enable_dev` callback,
|
||||||
|
defined in its `struct chip_operations`.
|
||||||
|
|
||||||
|
## Potential issues (gotchas!)
|
||||||
|
|
||||||
|
There are a couple of configurations that you need to especially careful about,
|
||||||
|
as they can have a large impact on your mainboard.
|
||||||
|
|
||||||
|
The first is configuring a pin as an output, when it was designed to be an
|
||||||
|
input. There is a real risk in this case of short-circuiting a component which
|
||||||
|
could cause catastrophic failures, up to and including your mainboard!
|
||||||
|
|
||||||
|
The other configuration option to watch out for deals with unconnected GPIOs.
|
||||||
|
If no pullup or pulldown is declared with these, they may end up "floating",
|
||||||
|
i.e., not at logical high or logical low. This can cause problems such as
|
||||||
|
unwanted power consumption or not reading the pin correctly, if it was intended
|
||||||
|
to be strapped.
|
@ -7,3 +7,4 @@
|
|||||||
* [Gerrit Guidelines](gerrit_guidelines.md)
|
* [Gerrit Guidelines](gerrit_guidelines.md)
|
||||||
* [Documentation License](license.md)
|
* [Documentation License](license.md)
|
||||||
* [Writing Documentation](writing_documentation.md)
|
* [Writing Documentation](writing_documentation.md)
|
||||||
|
* [Setting up GPIOs](gpio.md)
|
||||||
|
@ -42,8 +42,25 @@ Please follow this official [guide] to install sphinx.
|
|||||||
You will also need python-recommonmark for sphinx to be able to handle
|
You will also need python-recommonmark for sphinx to be able to handle
|
||||||
markdown documentation.
|
markdown documentation.
|
||||||
|
|
||||||
The recommended version is sphinx 1.7.7, sphinx_rtd_theme 0.4.1 and
|
Since some Linux distributions don't package every needed sphinx extension,
|
||||||
recommonmark 0.4.0.
|
the installation via pip in a venv is recommended. You'll need these python3
|
||||||
|
modules:
|
||||||
|
|
||||||
|
* sphinx
|
||||||
|
* recommonmark
|
||||||
|
* sphinx_rtd_theme
|
||||||
|
* sphinxcontrib-ditaa
|
||||||
|
|
||||||
|
The following combination of versions has been tested: sphinx 2.3.1,
|
||||||
|
recommonmark 0.6.0, sphinx_rtd_theme 0.4.3 and sphinxcontrib-ditaa 0.7.
|
||||||
|
|
||||||
|
Now change into the `Documentation` folder in the coreboot directory and run
|
||||||
|
this command in there
|
||||||
|
|
||||||
|
make sphinx
|
||||||
|
|
||||||
|
If no error occurs, you can find the generated HTML documentation in
|
||||||
|
`Documentation/_build` now.
|
||||||
|
|
||||||
### Optional
|
### Optional
|
||||||
|
|
||||||
|
@ -65,11 +65,20 @@ board can initialize graphics through *libgfxinit*:
|
|||||||
select MAINBOARD_HAS_LIBGFXINIT
|
select MAINBOARD_HAS_LIBGFXINIT
|
||||||
|
|
||||||
Internal ports share some hardware blocks (e.g. backlight, panel
|
Internal ports share some hardware blocks (e.g. backlight, panel
|
||||||
power sequencer). Therefore, each board has to select either eDP
|
power sequencer). Therefore, each system with an integrated panel
|
||||||
or LVDS as the internal port, if any:
|
should set `GFX_GMA_PANEL_1_PORT` to the respective port, e.g.:
|
||||||
|
|
||||||
select GFX_GMA_INTERNAL_IS_EDP # the default, or
|
config GFX_GMA_PANEL_1_PORT
|
||||||
select GFX_GMA_INTERNAL_IS_LVDS
|
default "DP3"
|
||||||
|
|
||||||
|
For the most common cases, LVDS and eDP, exists a shorthand, one
|
||||||
|
can select either:
|
||||||
|
|
||||||
|
select GFX_GMA_PANEL_1_ON_EDP # the default, or
|
||||||
|
select GFX_GMA_PANEL_1_ON_LVDS
|
||||||
|
|
||||||
|
Some newer chips feature a second block of panel control logic.
|
||||||
|
For this, `GFX_GMA_PANEL_2_PORT` can be set.
|
||||||
|
|
||||||
Boards with a DVI-I connector share the DDC (I2C) pins for both
|
Boards with a DVI-I connector share the DDC (I2C) pins for both
|
||||||
analog and digital displays. In this case, *libgfxinit* needs to
|
analog and digital displays. In this case, *libgfxinit* needs to
|
||||||
@ -79,11 +88,28 @@ know through which interface the EDID can be queried:
|
|||||||
select GFX_GMA_ANALOG_I2C_HDMI_C # or
|
select GFX_GMA_ANALOG_I2C_HDMI_C # or
|
||||||
select GFX_GMA_ANALOG_I2C_HDMI_D
|
select GFX_GMA_ANALOG_I2C_HDMI_D
|
||||||
|
|
||||||
Beside Kconfig options, *libgfxinit* needs to know which ports are
|
*libgfxinit* needs to know which ports are implemented on a board
|
||||||
implemented on a board and should be probed for displays. The mapping
|
and should be probed for displays. There are two mechanisms to
|
||||||
between the physical ports and these entries depends on the hardware
|
constrain the list of ports to probe, 1. port presence straps on
|
||||||
implementation and can be recovered by testing or studying the output
|
the mainboard, and 2. a list of ports provided by *coreboot* (see
|
||||||
of `intelvbttool` or `intel_vbt_decode`.
|
below).
|
||||||
|
|
||||||
|
Presence straps are configured via the state of certains pins of
|
||||||
|
the chipset at reset time. They are documented in the chipset's
|
||||||
|
datasheets. By default, *libgfxinit* honors these straps for
|
||||||
|
safety. However, some boards don't implement the straps correctly.
|
||||||
|
If ports are not strapped as implemented by error, one can select
|
||||||
|
an option to ignore the straps:
|
||||||
|
|
||||||
|
select GFX_GMA_IGNORE_PRESENCE_STRAPS
|
||||||
|
|
||||||
|
In the opposite case, that ports are strapped as implemented,
|
||||||
|
but are actually unconnected, one has to make sure that the
|
||||||
|
list of ports in *coreboot* omits them.
|
||||||
|
|
||||||
|
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:
|
Each board has to implement the package `GMA.Mainboard` with a list:
|
||||||
|
|
||||||
ports : HW.GFX.GMA.Display_Probing.Port_List;
|
ports : HW.GFX.GMA.Display_Probing.Port_List;
|
||||||
@ -96,7 +122,8 @@ You can select from the following Ports:
|
|||||||
|
|
||||||
type Port_Type is
|
type Port_Type is
|
||||||
(Disabled, -- optionally terminates the list
|
(Disabled, -- optionally terminates the list
|
||||||
Internal, -- either eDP or LVDS as selected in Kconfig
|
LVDS,
|
||||||
|
eDP,
|
||||||
DP1,
|
DP1,
|
||||||
DP2,
|
DP2,
|
||||||
DP3,
|
DP3,
|
||||||
@ -112,8 +139,7 @@ both DPx and HDMIx should be listed.
|
|||||||
|
|
||||||
A good example is the mainboard Kontron/KTQM77, it features two
|
A good example is the mainboard Kontron/KTQM77, it features two
|
||||||
DP++ ports (DP2/HDMI2, DP3/HDMI3), one DVI-I port (HDMI1/Analog),
|
DP++ ports (DP2/HDMI2, DP3/HDMI3), one DVI-I port (HDMI1/Analog),
|
||||||
eDP and LVDS. Due to the constraints mentioned above, only one of
|
eDP and LVDS. It defines `ports` as follows:
|
||||||
eDP and LVDS can be enabled. It defines `ports` as follows:
|
|
||||||
|
|
||||||
ports : constant Port_List :=
|
ports : constant Port_List :=
|
||||||
(DP2,
|
(DP2,
|
||||||
@ -122,7 +148,8 @@ eDP and LVDS can be enabled. It defines `ports` as follows:
|
|||||||
HDMI2,
|
HDMI2,
|
||||||
HDMI3,
|
HDMI3,
|
||||||
Analog,
|
Analog,
|
||||||
Internal,
|
LVDS,
|
||||||
|
eDP,
|
||||||
others => Disabled);
|
others => Disabled);
|
||||||
|
|
||||||
The `GMA.gfxinit()` procedure probes for display EDIDs in the
|
The `GMA.gfxinit()` procedure probes for display EDIDs in the
|
||||||
|
@ -14,14 +14,26 @@ The names of the IFD regions in the FMAP should follow the convention of
|
|||||||
starting with the prefix `SI_` which stands for `silicon initialization` as a
|
starting with the prefix `SI_` which stands for `silicon initialization` as a
|
||||||
way to categorize anything required by the SoC but not provided by coreboot.
|
way to categorize anything required by the SoC but not provided by coreboot.
|
||||||
|
|
||||||
|IFD Region index|IFD Region name|FMAP Name|Notes|
|
```eval_rst
|
||||||
|---|---|---|---|
|
+------------+------------------+-----------+-------------------------------------------+
|
||||||
|0|Flash Descriptor|SI_DESC|Always the top 4KB of flash|
|
| IFD Region | IFD Region name | FMAP Name | Notes |
|
||||||
|1|BIOS|SI_BIOS|This is the region that contains coreboot|
|
| index | | | |
|
||||||
|2|Intel ME|SI_ME||
|
+============+==================+===========+===========================================+
|
||||||
|3|Gigabit Ethernet|SI_GBE||
|
| 0 | Flash Descriptor | SI_DESC | Always the top 4KB of flash |
|
||||||
|4|Platform Data|SI_PDR||
|
+------------+------------------+-----------+-------------------------------------------+
|
||||||
|8|EC Firmware|SI_EC|Most Chrome OS devices do not use this region; EC firmware is stored BIOS region of flash|
|
| 1 | BIOS | SI_BIOS | This is the region that contains coreboot |
|
||||||
|
+------------+------------------+-----------+-------------------------------------------+
|
||||||
|
| 2 | Intel ME | SI_ME | |
|
||||||
|
+------------+------------------+-----------+-------------------------------------------+
|
||||||
|
| 3 | Gigabit Ethernet | SI_GBE | |
|
||||||
|
+------------+------------------+-----------+-------------------------------------------+
|
||||||
|
| 4 | Platform Data | SI_PDR | |
|
||||||
|
+------------+------------------+-----------+-------------------------------------------+
|
||||||
|
| 8 | EC Firmware | SI_EC | Most Chrome OS devices do not use this |
|
||||||
|
| | | | region; EC firmware is stored in BIOS |
|
||||||
|
| | | | region of flash |
|
||||||
|
+------------+------------------+-----------+-------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
## Validation
|
## Validation
|
||||||
|
|
||||||
|
@ -164,6 +164,7 @@ Contents:
|
|||||||
* [Tutorial](tutorial/index.md)
|
* [Tutorial](tutorial/index.md)
|
||||||
* [Coding Style](coding_style.md)
|
* [Coding Style](coding_style.md)
|
||||||
* [Project Ideas](contributing/project_ideas.md)
|
* [Project Ideas](contributing/project_ideas.md)
|
||||||
|
* [Documentation Ideas](contributing/documentation_ideas.md)
|
||||||
* [Code of Conduct](community/code_of_conduct.md)
|
* [Code of Conduct](community/code_of_conduct.md)
|
||||||
* [Community forums](community/forums.md)
|
* [Community forums](community/forums.md)
|
||||||
* [Project services](community/services.md)
|
* [Project services](community/services.md)
|
||||||
@ -171,20 +172,19 @@ Contents:
|
|||||||
* [Payloads](payloads.md)
|
* [Payloads](payloads.md)
|
||||||
* [Distributions](distributions.md)
|
* [Distributions](distributions.md)
|
||||||
* [Technotes](technotes/index.md)
|
* [Technotes](technotes/index.md)
|
||||||
* [GPIO toggling in ACPI AML](acpi/gpio.md)
|
* [ACPI](acpi/index.md)
|
||||||
* [Adding devices to a device tree](acpi/devicetree.md)
|
|
||||||
* [Native Graphics Initialization with libgfxinit](gfx/libgfxinit.md)
|
* [Native Graphics Initialization with libgfxinit](gfx/libgfxinit.md)
|
||||||
* [Display panel-specific documentation](gfx/display-panel.md)
|
* [Display panel](gfx/display-panel.md)
|
||||||
* [Architecture-specific documentation](arch/index.md)
|
* [CPU Architecture](arch/index.md)
|
||||||
* [Platform independend drivers documentation](drivers/index.md)
|
* [Platform independent drivers](drivers/index.md)
|
||||||
* [Northbridge-specific documentation](northbridge/index.md)
|
* [Northbridge](northbridge/index.md)
|
||||||
* [System on Chip-specific documentation](soc/index.md)
|
* [System on Chip](soc/index.md)
|
||||||
* [Mainboard-specific documentation](mainboard/index.md)
|
* [Mainboard](mainboard/index.md)
|
||||||
* [Payload-specific documentation](lib/payloads/index.md)
|
* [Payloads](lib/payloads/index.md)
|
||||||
* [Library-specific documentation](lib/index.md)
|
* [Libraries](lib/index.md)
|
||||||
* [Security](security/index.md)
|
* [Security](security/index.md)
|
||||||
* [SuperIO-specific documentation](superio/index.md)
|
* [SuperIO](superio/index.md)
|
||||||
* [Vendorcode-specific documentation](vendorcode/index.md)
|
* [Vendorcode](vendorcode/index.md)
|
||||||
* [Utilities](util.md)
|
* [Utilities](util.md)
|
||||||
* [Release notes for past releases](releases/index.md)
|
* [Release notes for past releases](releases/index.md)
|
||||||
* [Flashing firmware tutorial](flash_tutorial/index.md)
|
* [Flashing firmware tutorial](flash_tutorial/index.md)
|
||||||
|
353
Documentation/lib/fw_config.md
Normal file
@ -0,0 +1,353 @@
|
|||||||
|
# Firmware Configuration Interface in coreboot
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
The firmware configuration interface in coreboot is designed to support a wide variety of
|
||||||
|
configuration options in that are dictated by the hardware at runtime. This allows a single
|
||||||
|
BIOS image to be used across a wide variety of devices which may have key differences but are
|
||||||
|
otherwise similar enough to use the same coreboot build target.
|
||||||
|
|
||||||
|
The initial implementation is designed to take advantage of a bitmask returned by the Embedded
|
||||||
|
Controller on Google Chrome OS devices which allows the manufacturer to use the same firmware
|
||||||
|
image across multiple devices by selecting various options at runtime. See the Chromium OS
|
||||||
|
[Firmware Config][1] documentation for more information.
|
||||||
|
|
||||||
|
This firmware configuration interface differs from the CMOS option interface in that this
|
||||||
|
bitmask value is not intended as a user-configurable setting as the configuration values must
|
||||||
|
match the actual hardware. In the case where a user was to swap their hardware this value
|
||||||
|
would need to be updated or overridden.
|
||||||
|
|
||||||
|
## Device Presence
|
||||||
|
|
||||||
|
One common example of why a firmware configuration interface is important is determining if a
|
||||||
|
device is present in the system. With some bus topologies and hardware mechanisms it is
|
||||||
|
possible to probe and enumerate this at runtime:
|
||||||
|
|
||||||
|
- PCI is a self-discoverable bus and is very easy to handle.
|
||||||
|
- I2C devices can often be probed with a combination of bus and address.
|
||||||
|
- The use of GPIOs with external strap to ground or different voltages can be used to detect
|
||||||
|
presence of a device.
|
||||||
|
|
||||||
|
However there are several cases where this is insufficient:
|
||||||
|
|
||||||
|
- I2C peripherals that require different drivers but have the same bus address cannot be
|
||||||
|
uniquely identified at runtime.
|
||||||
|
- A mainboard may be designed with multiple daughter board combinations which contain devices
|
||||||
|
and configurations that cannot be detected.
|
||||||
|
- While presence detect GPIOs are a convenient way for a single device presence, they are
|
||||||
|
unable to distinguish between different devices so it can require a large number of GPIOs to
|
||||||
|
support relatively few options.
|
||||||
|
|
||||||
|
This presence detection can impact different stages of boot:
|
||||||
|
|
||||||
|
### ACPI
|
||||||
|
|
||||||
|
Devices that are not present should not provide an ACPI device indicating that they are
|
||||||
|
present or the operating system may not be able to handle it correctly.
|
||||||
|
|
||||||
|
The ACPI devices are largely driven by chips defined in the mainboard `devicetree.cb` and
|
||||||
|
the variant overridetree.cb. This means it is important to be able to specify when a device
|
||||||
|
is present or not directly in `devicetree.cb` itself. Otherwise each mainboard needs custom
|
||||||
|
code to parse the tree and disable unused devices.
|
||||||
|
|
||||||
|
### GPIO
|
||||||
|
|
||||||
|
GPIOs with multiple functions may need to be configured correctly depending on the attached
|
||||||
|
device. Given the wide variety of GPIO configuration possibilities it is not feasible to
|
||||||
|
specify all combinations directly in `devicetree.cb` and it is best left to code provided by
|
||||||
|
the mainboard.
|
||||||
|
|
||||||
|
### FSP UPD
|
||||||
|
|
||||||
|
Enabling and disabling devices may require altering FSP UPD values that are provided to the
|
||||||
|
various stages of FSP. These options are also not easy to specify multiple times for
|
||||||
|
different configurations in `devicetree.cb` and can be provided by the mainboard as code.
|
||||||
|
|
||||||
|
## Firmware Configuration Interface
|
||||||
|
|
||||||
|
The firmware configuration interface can be enabled by selecting `CONFIG_FW_CONFIG` and also
|
||||||
|
providing a source for the value by defining an additional Kconfig option defined below.
|
||||||
|
|
||||||
|
If the firmware configuration interface is disabled via Kconfig then all probe attempts will
|
||||||
|
return true.
|
||||||
|
|
||||||
|
## Firmware Configuration Value
|
||||||
|
|
||||||
|
The 32bit value used as the firmware configuration bitmask is meant to be determined at runtime
|
||||||
|
but could also be defined at compile time if needed.
|
||||||
|
|
||||||
|
There are two supported sources for providing this information to coreboot.
|
||||||
|
|
||||||
|
### CBFS
|
||||||
|
|
||||||
|
The value can be provided with a 32bit raw value in CBFS that is read by coreboot. The value
|
||||||
|
can be set at build time but also adjusted in an existing image with `cbfstool`.
|
||||||
|
|
||||||
|
To enable this select the `CONFIG_FW_CONFIG_CBFS` option in the build configuration and add a
|
||||||
|
raw 32bit value to CBFS with the name of the current prefix at `CONFIG_FW_PREFIX/fw_config`.
|
||||||
|
|
||||||
|
When `fw_config_probe_device()` or `fw_config_probe()` is called it will look for the specified
|
||||||
|
file in CBFS use the value it contains when matching fields and options.
|
||||||
|
|
||||||
|
### Embedded Controller
|
||||||
|
|
||||||
|
Google Chrome OS devices support an Embedded Controller interface for reading and writing the
|
||||||
|
firmware configuration value, along with other board-specific information. It is possible for
|
||||||
|
coreboot to read this value at boot on systems that support this feature.
|
||||||
|
|
||||||
|
This option is selected by default for the mainboards that use it with
|
||||||
|
`CONFIG_FW_CONFIG_CHROME_EC_CBI` and it is not typically necessary to adjust the value. It is
|
||||||
|
possible by enabling the CBFS source and coreboot will look in CBFS first for a valid value
|
||||||
|
before asking the embedded controller.
|
||||||
|
|
||||||
|
It is also possible to adjust the value in the embedded controller *(after disabling write
|
||||||
|
protection)* with the `ectool` command in a Chrome OS environment.
|
||||||
|
|
||||||
|
For more information on the firmware configuration field on Chrome OS devices see the Chromium
|
||||||
|
documentation for [Firmware Config][1] and [Board Info][2].
|
||||||
|
|
||||||
|
[1]: http://chromium.googlesource.com/chromiumos/docs/+/master/design_docs/firmware_config.md
|
||||||
|
[2]: http://chromium.googlesource.com/chromiumos/docs/+/master/design_docs/cros_board_info.md
|
||||||
|
|
||||||
|
## Firmware Configuration Table
|
||||||
|
|
||||||
|
The firmware configuration table itself is defined in the mainboard `devicetree.cb` with
|
||||||
|
special tokens for defining fields and options.
|
||||||
|
|
||||||
|
The table itself is enclosed in a `fw_config` token and terminated with `end` and it contains
|
||||||
|
a mix of field and option definitions.
|
||||||
|
|
||||||
|
Each field is defined by providing the field name and the start and end bit marking the exact
|
||||||
|
location in the bitmask. Field names must be at least three characters long in order to
|
||||||
|
satisfy the sconfig parser requirements and they must be unique with non-overlapping masks.
|
||||||
|
|
||||||
|
field <name> <start-bit> <end-bit> [option...] end
|
||||||
|
|
||||||
|
For single-bit fields only one number is needed:
|
||||||
|
|
||||||
|
field <name> <bit> [option...] end
|
||||||
|
|
||||||
|
Each `field` definition starts a new block that can be composed of zero or more field options,
|
||||||
|
and it is terminated with `end`.
|
||||||
|
|
||||||
|
Inside the field block the options can be defined by providing the option name and the field
|
||||||
|
value that this option represents when the bit offsets are used to apply a mask and shift.
|
||||||
|
Option names must also be at least three characters for the sconfig parser.
|
||||||
|
|
||||||
|
option <name> <value>
|
||||||
|
|
||||||
|
It is possible for there to be multiple `fw_config` blocks and for subsequent `field` blocks
|
||||||
|
to add additional `option` definitions to the existing field. These subsequent definitions
|
||||||
|
should not provide the field bitmask as it has already been defined earlier in the file and
|
||||||
|
this is just matching an existing field by name.
|
||||||
|
|
||||||
|
field <name> [option...] end
|
||||||
|
|
||||||
|
This allows a baseboard to define the major fields and options in `devicetree.cb` and a board
|
||||||
|
variant to add specific options to fields in or define new fields in the unused bitmask in
|
||||||
|
`overridetree.cb`.
|
||||||
|
|
||||||
|
It is not possible to redefine a field mask or override the value of an existing option this
|
||||||
|
way, only to add new options to a field or new fields to the table.
|
||||||
|
|
||||||
|
### Firmware Configuration Table Example
|
||||||
|
|
||||||
|
In this example a baseboard defines a simple boolean feature that is enabled or disabled
|
||||||
|
depending on the value of bit 0, and a field at bits 1-2 that indicates which daughter board
|
||||||
|
is attached.
|
||||||
|
|
||||||
|
The baseboard itself defines one daughter board and the variant adds two more possibilities.
|
||||||
|
This way each variant can support multiple possible daughter boards in addition to the one
|
||||||
|
that was defined by the baseboard.
|
||||||
|
|
||||||
|
#### devicetree.cb
|
||||||
|
|
||||||
|
fw_config
|
||||||
|
field FEATURE 0
|
||||||
|
option DISABLED 0
|
||||||
|
option ENABLED 1
|
||||||
|
end
|
||||||
|
field DAUGHTER_BOARD 1 2
|
||||||
|
option NONE 0
|
||||||
|
option REFERENCE_DB 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
#### overridetree.cb
|
||||||
|
|
||||||
|
fw_config
|
||||||
|
field DAUGHTER_BOARD
|
||||||
|
option VARIANT_DB_ONE 2
|
||||||
|
option VARIANT_DB_TWO 3
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
The result of this table defined in `devicetree.cb` is a list of constants that can be used
|
||||||
|
to check if fields match the firmware configuration options determined at runtime with a
|
||||||
|
simple check of the field mask and the option value.
|
||||||
|
|
||||||
|
#### static.h
|
||||||
|
|
||||||
|
```c
|
||||||
|
/* field: FEATURE */
|
||||||
|
#define FW_CONFIG_FIELD_FEATURE_NAME "FEATURE"
|
||||||
|
#define FW_CONFIG_FIELD_FEATURE_MASK 0x00000001
|
||||||
|
#define FW_CONFIG_FIELD_FEATURE_OPTION_DISABLED_NAME "DISABLED"
|
||||||
|
#define FW_CONFIG_FIELD_FEATURE_OPTION_DISABLED_VALUE 0x00000000
|
||||||
|
#define FW_CONFIG_FIELD_FEATURE_OPTION_ENABLED_NAME "ENABLED"
|
||||||
|
#define FW_CONFIG_FIELD_FEATURE_OPTION_ENABLED_VALUE 0x00000001
|
||||||
|
|
||||||
|
/* field: DAUGHTER_BOARD */
|
||||||
|
#define FW_CONFIG_FIELD_DAUGHTER_BOARD_NAME "DAUGHTER_BOARD"
|
||||||
|
#define FW_CONFIG_FIELD_DAUGHTER_BOARD_MASK 0x00000006
|
||||||
|
#define FW_CONFIG_FIELD_DAUGHTER_BOARD_OPTION_NONE_NAME "NONE"
|
||||||
|
#define FW_CONFIG_FIELD_DAUGHTER_BOARD_OPTION_NONE_VALUE 0x00000000
|
||||||
|
#define FW_CONFIG_FIELD_DAUGHTER_BOARD_OPTION_REFERENCE_DB_NAME "REFERENCE_DB"
|
||||||
|
#define FW_CONFIG_FIELD_DAUGHTER_BOARD_OPTION_REFERENCE_DB_VALUE 0x00000002
|
||||||
|
#define FW_CONFIG_FIELD_DAUGHTER_BOARD_OPTION_VARIANT_DB_ONE_NAME "VARIANT_DB_ONE"
|
||||||
|
#define FW_CONFIG_FIELD_DAUGHTER_BOARD_OPTION_VARIANT_DB_ONE_VALUE 0x00000004
|
||||||
|
#define FW_CONFIG_FIELD_DAUGHTER_BOARD_OPTION_VARIANT_DB_TWO_NAME "VARIANT_DB_TWO"
|
||||||
|
#define FW_CONFIG_FIELD_DAUGHTER_BOARD_OPTION_VARIANT_DB_TWO_VALUE 0x00000006
|
||||||
|
```
|
||||||
|
|
||||||
|
## Device Probing
|
||||||
|
|
||||||
|
One use of the firmware configuration interface in devicetree is to allow device probing to be
|
||||||
|
specified directly with the devices themselves. A new `probe` token is introduced to allow a
|
||||||
|
device to be probed by field and option name. Multiple `probe` entries may be present for
|
||||||
|
each device and any successful probe will consider the device to be present.
|
||||||
|
|
||||||
|
### Probing Example
|
||||||
|
|
||||||
|
Continuing with the previous example this device would be considered present if the field
|
||||||
|
`DAUGHTER_BOARD` was set to either `VARIANT_DB_ONE` or `VARIANT_DB_TWO`:
|
||||||
|
|
||||||
|
#### overridetree.cb
|
||||||
|
|
||||||
|
chip drivers/generic/example
|
||||||
|
device generic 0 on
|
||||||
|
probe DAUGHTER_BOARD VARIANT_DB_ONE
|
||||||
|
probe DAUGHTER_BOARD VARIANT_DB_TWO
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
If the field were set to any other option, including `NONE` and `REFERENCE_DB` and any
|
||||||
|
undefined value then the device would be disabled.
|
||||||
|
|
||||||
|
### Probe Overrides
|
||||||
|
|
||||||
|
When a device is declared with a probe in the baseboard `devicetree.cb` and the same device
|
||||||
|
is also present in the `overridetree.cb` then the probing information from the baseboard
|
||||||
|
is discarded and the override device must provide all necessary probing information.
|
||||||
|
|
||||||
|
In this example a device is listed in the baseboard with `DAUGHTER_BOARD` field probing for
|
||||||
|
`REFERENCE_DB` as a field option, It is also defined as an override device with the field
|
||||||
|
probing for the `VARIANT_DB_ONE` option instead.
|
||||||
|
|
||||||
|
In this case only the probe listed in the override is checked and a field option of
|
||||||
|
`REFERENCE_DB` will not mark this device present. If both options are desired then the
|
||||||
|
override device must list both. This allows an override device to remove a probe entry that
|
||||||
|
was defined in the baseboard.
|
||||||
|
|
||||||
|
#### devicetree.cb
|
||||||
|
|
||||||
|
chip drivers/generic/example
|
||||||
|
device generic 0 on
|
||||||
|
probe DAUGHTER_BOARD REFERENCE_DB
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
#### overridetree.cb
|
||||||
|
|
||||||
|
chip drivers/generic/example
|
||||||
|
device generic 0 on
|
||||||
|
probe DAUGHTER_BOARD VARIANT_DB_ONE
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
### Automatic Device Probing
|
||||||
|
|
||||||
|
At boot time the firmware configuration interface will walk the device tree and apply any
|
||||||
|
probe entries that were defined in `devicetree.cb`. This probing takes effect before the
|
||||||
|
`BS_DEV_ENUMERATE` step during the boot state machine in ramstage.
|
||||||
|
|
||||||
|
Devices that have a probe list but do do not find a match are disabled by setting
|
||||||
|
`dev->enabled = 0` but the chip `enable_dev()` and device `enable()` handlers will still
|
||||||
|
be executed to allow any device disable code to execute.
|
||||||
|
|
||||||
|
The result of this probe definition is to provide an array of structures describing each
|
||||||
|
field and option to check.
|
||||||
|
|
||||||
|
#### fw_config.h
|
||||||
|
|
||||||
|
```c
|
||||||
|
/**
|
||||||
|
* struct fw_config - Firmware configuration field and option.
|
||||||
|
* @field_name: Name of the field that this option belongs to.
|
||||||
|
* @option_name: Name of the option within this field.
|
||||||
|
* @mask: Bitmask of the field.
|
||||||
|
* @value: Value of the option within the mask.
|
||||||
|
*/
|
||||||
|
struct fw_config {
|
||||||
|
const char *field_name;
|
||||||
|
const char *option_name;
|
||||||
|
uint32_t mask;
|
||||||
|
uint32_t value;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
#### static.c
|
||||||
|
|
||||||
|
```c
|
||||||
|
STORAGE struct fw_config __devN_probe_list[] = {
|
||||||
|
{
|
||||||
|
.field_name = FW_CONFIG_FIELD_DAUGHTER_BOARD_NAME,
|
||||||
|
.option_name = FW_CONFIG_FIELD_DAUGHTER_BOARD_OPTION_VARIANT_DB_ONE_NAME,
|
||||||
|
.mask = FW_CONFIG_FIELD_DAUGHTER_BOARD_MASK,
|
||||||
|
.value = FW_CONFIG_FIELD_DAUGHTER_BOARD_OPTION_VARIANT_DB_ONE_VALUE
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.field_name = FW_CONFIG_FIELD_DAUGHTER_BOARD_NAME,
|
||||||
|
.option_name = FW_CONFIG_FIELD_DAUGHTER_BOARD_OPTION_VARIANT_DB_TWO_NAME,
|
||||||
|
.mask = FW_CONFIG_FIELD_DAUGHTER_BOARD_MASK,
|
||||||
|
.value = FW_CONFIG_FIELD_DAUGHTER_BOARD_OPTION_VARIANT_DB_TWO_VALUE
|
||||||
|
},
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### Runtime Probing
|
||||||
|
|
||||||
|
The device driver probing allows for seamless integration with the mainboard but it is only
|
||||||
|
effective in ramstage and for specific devices declared in devicetree.cb. There are other
|
||||||
|
situations where code may need to probe or check the value of a field in romstage or at other
|
||||||
|
points in ramstage. For this reason it is also possible to use the firmware configuration
|
||||||
|
interface directly.
|
||||||
|
|
||||||
|
```c
|
||||||
|
/**
|
||||||
|
* fw_config_probe() - Check if field and option matches.
|
||||||
|
* @match: Structure containing field and option to probe.
|
||||||
|
*
|
||||||
|
* Return %true if match is found, %false if match is not found.
|
||||||
|
*/
|
||||||
|
bool fw_config_probe(const struct fw_config *match);
|
||||||
|
```
|
||||||
|
|
||||||
|
The argument provided to this function can be created from a macro for easy use:
|
||||||
|
|
||||||
|
FW_CONFIG(field, option)
|
||||||
|
|
||||||
|
This example has a mainboard check if a feature is disabled and set an FSP UPD before memory
|
||||||
|
training. This example expects that the default value of this `register` is set to `true` in
|
||||||
|
`devicetree.cb` and this code is disabling that feature before FSP is executed.
|
||||||
|
|
||||||
|
```c
|
||||||
|
#include <fw_config.h>
|
||||||
|
|
||||||
|
void mainboard_memory_init_params(FSPM_UPD *mupd)
|
||||||
|
{
|
||||||
|
if (fw_config_probe_one(FW_CONFIG(FEATURE, DISABLED))
|
||||||
|
mupd->ExampleFeature = false;
|
||||||
|
}
|
||||||
|
```
|
@ -3,7 +3,7 @@
|
|||||||
This section contains documentation about coreboot internal technical
|
This section contains documentation about coreboot internal technical
|
||||||
information and libraries.
|
information and libraries.
|
||||||
|
|
||||||
## Structure and layout
|
|
||||||
- [Flashmap and Flashmap Descriptor](flashmap.md)
|
- [Flashmap and Flashmap Descriptor](flashmap.md)
|
||||||
- [ABI data consumption](abi-data-consumption.md)
|
- [ABI data consumption](abi-data-consumption.md)
|
||||||
- [Timestamps](timestamp.md)
|
- [Timestamps](timestamp.md)
|
||||||
|
- [Firmware Configuration Interface](fw_config.md)
|
||||||
|
@ -58,7 +58,7 @@ Supported compression algorithms:
|
|||||||
The config entries contain a compatible string, that is used to find a
|
The config entries contain a compatible string, that is used to find a
|
||||||
matching config.
|
matching config.
|
||||||
|
|
||||||
The following mainboard specific funtions provide the BOARDID and SKUID:
|
The following mainboard specific functions provide the BOARDID and SKUID:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
uint32_t board_id(void);
|
uint32_t board_id(void);
|
||||||
|
BIN
Documentation/mainboard/51nb/x210.jpg
Normal file
After Width: | Height: | Size: 48 KiB |
46
Documentation/mainboard/51nb/x210.md
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
# 51NB X210
|
||||||
|
|
||||||
|
## Extracting vendor EC firmware
|
||||||
|
|
||||||
|
EC firmware is included in the SPI image. To extract it, run:
|
||||||
|
|
||||||
|
```
|
||||||
|
dd bs=64K skip=32 count=1 if=bios.rom of=ec.bin
|
||||||
|
```
|
||||||
|
|
||||||
|
and ensure that you have a file that includes the string "Insyde Software Corp".
|
||||||
|
|
||||||
|
## Flashing instructions
|
||||||
|
|
||||||
|
This can be performed using the internal SPI controller, even when flashing
|
||||||
|
from stock firmware. Use `flashrom -p internal` and follow the appropriate
|
||||||
|
flashrom instructions to force it. Alternatively, external flashing has been
|
||||||
|
tested with Dediprog SF100 and SF600 and using a Beaglebone Black. The flash
|
||||||
|
is located on the upper side of the motherboard, below the keyboard
|
||||||
|
connector. It is circled in red here:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Flashing a subset of the ROM
|
||||||
|
|
||||||
|
If you want to flash coreboot without extracting firmware blobs, you can
|
||||||
|
flash coreboot without overwriting those blobs. After building coreboot,
|
||||||
|
create a layout file with the following content:
|
||||||
|
|
||||||
|
```
|
||||||
|
00000000:001fffff me
|
||||||
|
00200000:0020ffff ec
|
||||||
|
00210000:007fffff main
|
||||||
|
```
|
||||||
|
|
||||||
|
and run flashrom with the `--layout rom.layout --image main` arguments. This
|
||||||
|
will flash the main firmware without overwriting the existing EC or ME
|
||||||
|
firmware.
|
||||||
|
|
||||||
|
## Working
|
||||||
|
|
||||||
|
All hardware features are believed to be working, although the SD reader is
|
||||||
|
untested. Note that certain hotkeys don't work (including the ThinkVantage
|
||||||
|
button) - this is a limitation of the EC firmware, and these keys also
|
||||||
|
generate no events under the stock vendor firmware.
|
||||||
|
|
@ -31,8 +31,6 @@ make distclean
|
|||||||
touch .config
|
touch .config
|
||||||
./util/scripts/config --enable VENDOR_ASROCK
|
./util/scripts/config --enable VENDOR_ASROCK
|
||||||
./util/scripts/config --enable BOARD_ASROCK_H110M_DVS
|
./util/scripts/config --enable BOARD_ASROCK_H110M_DVS
|
||||||
./util/scripts/config --enable CONFIG_ADD_FSP_BINARIES
|
|
||||||
./util/scripts/config --enable CONFIG_FSP_USE_REPO
|
|
||||||
./util/scripts/config --set-str REALTEK_8168_MACADDRESS "xx:xx:xx:xx:xx:xx"
|
./util/scripts/config --set-str REALTEK_8168_MACADDRESS "xx:xx:xx:xx:xx:xx"
|
||||||
make olddefconfig
|
make olddefconfig
|
||||||
```
|
```
|
||||||
|
77
Documentation/mainboard/asus/p5q.md
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# ASUS P5Q
|
||||||
|
|
||||||
|
This page describes how to run coreboot on the [ASUS P5Q] desktop board.
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
|
||||||
|
The following things are working in this coreboot port:
|
||||||
|
|
||||||
|
+ PCI slots
|
||||||
|
+ PCI-e slots
|
||||||
|
+ Onboard Ethernet
|
||||||
|
+ USB
|
||||||
|
+ Onboard sound card
|
||||||
|
+ PS/2 keyboard
|
||||||
|
+ All 4 DIMM slots
|
||||||
|
+ S3 suspend and resume
|
||||||
|
+ Red SATA ports
|
||||||
|
|
||||||
|
The following things are still missing from this coreboot port:
|
||||||
|
|
||||||
|
+ PS/2 mouse support
|
||||||
|
+ PATA aka IDE (because of buggy IDE controller)
|
||||||
|
+ Fan control (will be working on 100% power)
|
||||||
|
+ TPM module (support not implemented)
|
||||||
|
|
||||||
|
The following things are untested on this coreboot port:
|
||||||
|
|
||||||
|
+ S/PDIF
|
||||||
|
+ CD Audio In
|
||||||
|
+ Floppy disk drive
|
||||||
|
+ FireWire: PCI device shows up and driver loads, no further test
|
||||||
|
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+-------------------+----------------+
|
||||||
|
| Type | Value |
|
||||||
|
+===================+================+
|
||||||
|
| Socketed flash | Yes |
|
||||||
|
+-------------------+----------------+
|
||||||
|
| Model | MX25L8005 |
|
||||||
|
+-------------------+----------------+
|
||||||
|
| Size | 1 MiB |
|
||||||
|
+-------------------+----------------+
|
||||||
|
| Package | Socketed DIP-8 |
|
||||||
|
+-------------------+----------------+
|
||||||
|
| Write protection | No |
|
||||||
|
+-------------------+----------------+
|
||||||
|
| Dual BIOS feature | No |
|
||||||
|
+-------------------+----------------+
|
||||||
|
| Internal flashing | Yes |
|
||||||
|
+-------------------+----------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
You can flash coreboot into your motherboard using [this guide].
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+---------------------------------------------------+
|
||||||
|
| Northbridge | Intel P45 (called x4x in coreboot code) |
|
||||||
|
+------------------+---------------------------------------------------+
|
||||||
|
| Southbridge | Intel ICH10R (called i82801jx in coreboot code) |
|
||||||
|
+------------------+---------------------------------------------------+
|
||||||
|
| CPU (LGA775) | Model f4x, f6x, 6fx, 1067x (Pentium 4, d, Core 2) |
|
||||||
|
+------------------+---------------------------------------------------+
|
||||||
|
| SuperIO | Winbond W83667HG |
|
||||||
|
+------------------+---------------------------------------------------+
|
||||||
|
| Coprocessor | No |
|
||||||
|
+------------------+---------------------------------------------------+
|
||||||
|
| Clockgen (CK505) | ICS 9LPRS918JKLF |
|
||||||
|
+------------------+---------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
[ASUS P5Q]: https://www.asus.com/Motherboards/P5Q
|
||||||
|
[this guide]: https://doc.coreboot.org/flash_tutorial/int_flashrom.html
|
@ -1,6 +1,6 @@
|
|||||||
# ASUS P8Z77-M Pro
|
# ASUS P8Z77-M PRO
|
||||||
|
|
||||||
This page describes how to run coreboot on the [ASUS P8Z77-M Pro]
|
This page describes how to run coreboot on the [ASUS P8Z77-M PRO]
|
||||||
|
|
||||||
## Flashing coreboot
|
## Flashing coreboot
|
||||||
|
|
||||||
@ -163,6 +163,6 @@ easy to remove and reflash.
|
|||||||
|
|
||||||
- [Flash chip datasheet][W25Q64FVA1Q]
|
- [Flash chip datasheet][W25Q64FVA1Q]
|
||||||
|
|
||||||
[ASUS P8Z88-M Pro]: https://www.asus.com/Motherboards/P8Z77M_PRO/
|
[ASUS P8Z77-M PRO]: https://www.asus.com/Motherboards/P8Z77M_PRO/
|
||||||
[W25Q64FVA1Q]: https://www.winbond.com/resource-files/w25q64fv%20revs%2007182017.pdf
|
[W25Q64FVA1Q]: https://www.winbond.com/resource-files/w25q64fv%20revs%2007182017.pdf
|
||||||
[flashrom]: https://flashrom.org/Flashrom
|
[flashrom]: https://flashrom.org/Flashrom
|
||||||
|
BIN
Documentation/mainboard/dell/optiplex_9010.jpg
Normal file
After Width: | Height: | Size: 78 KiB |
147
Documentation/mainboard/dell/optiplex_9010.md
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
# Dell OptiPlex 9010
|
||||||
|
|
||||||
|
This page describes how to run coreboot on Dell OptiPlex 9010 SFF.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------+---------------------------------------------------------------+
|
||||||
|
| CPU | Intel Core 2nd Gen (Sandybridge) or 3rd Gen (Ivybridge) |
|
||||||
|
+------------+---------------------------------------------------------------+
|
||||||
|
| DRAM | Up to 4 DIMM slots, up to 32GB 1600MHz non-ECC DDR3 SDRAM |
|
||||||
|
+------------+---------------------------------------------------------------+
|
||||||
|
| Chipset | Intel Q77 Express |
|
||||||
|
+------------+---------------------------------------------------------------+
|
||||||
|
| Super I/O | SMSC SCH5545 (or SCH5544) with Environmental Controller |
|
||||||
|
+------------+---------------------------------------------------------------+
|
||||||
|
| TPM | ST Microelectronics ST33ZP24 |
|
||||||
|
+------------+---------------------------------------------------------------+
|
||||||
|
| Boot | From USB, SATA, NVMe (using PCIe x4 expansion card) |
|
||||||
|
+------------+---------------------------------------------------------------+
|
||||||
|
| Power | 200W-275W PSU |
|
||||||
|
+------------+---------------------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
More specifications on [Dell OptiPlex 9010 specifications].
|
||||||
|
|
||||||
|
## Required proprietary blobs
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+---------------------------------+---------------------+
|
||||||
|
| Binary file | Apply | Required / Optional |
|
||||||
|
+==================+=================================+=====================+
|
||||||
|
| smsc_sch5545.bin | SMSC SCH5545 EC | Optional |
|
||||||
|
+------------------+---------------------------------+---------------------+
|
||||||
|
| microcode | CPU microcode | Required |
|
||||||
|
+------------------+---------------------------------+---------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
Microcode updates are automatically included into the coreboot image by build
|
||||||
|
system from the `3rdparty/intel-microcode` submodule.
|
||||||
|
|
||||||
|
SMSC SC5545 EC firmware is optional, however lack of the binary will result in
|
||||||
|
EC malfunction after power failure and fans running at full speed. The blob can
|
||||||
|
be extracted from original firmware. It should be located under a file with
|
||||||
|
GUID D386BEB8-4B54-4E69-94F5-06091F67E0D3, raw section. The file begins with a
|
||||||
|
signature `SMSCUBIM`. The easiest way to do this is to use [UEFITool] and
|
||||||
|
`Extract body` option on the raw section of the file.
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+---------------------+--------------------------+
|
||||||
|
| Type | Value |
|
||||||
|
+=====================+==========================+
|
||||||
|
| Socketed flash | no |
|
||||||
|
+---------------------+--------------------------+
|
||||||
|
| Model | MX25L6406E/MX25L3206E |
|
||||||
|
+---------------------+--------------------------+
|
||||||
|
| Size | 8 + 4 MiB |
|
||||||
|
+---------------------+--------------------------+
|
||||||
|
| Package | SOIC-16 + SOIC-8 |
|
||||||
|
+---------------------+--------------------------+
|
||||||
|
| Write protection | chipset PRR |
|
||||||
|
+---------------------+--------------------------+
|
||||||
|
| Dual BIOS feature | no |
|
||||||
|
+---------------------+--------------------------+
|
||||||
|
| Internal flashing | yes |
|
||||||
|
+---------------------+--------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
### Internal programming
|
||||||
|
|
||||||
|
The SPI flash can be accessed using [flashrom].
|
||||||
|
|
||||||
|
flashrom -p internal -w coreboot.rom --ifd -i bios
|
||||||
|
|
||||||
|
Internal programming will not work when migrating from original UEFI firmware.
|
||||||
|
One will have to short the SERVICE_MODE jumper to enable HMRFPO and then boot
|
||||||
|
the machine to flash it.
|
||||||
|
|
||||||
|
### External programming
|
||||||
|
|
||||||
|
The external access to flash chip is available through standard SOP-8 clip
|
||||||
|
and/or SOP-16 clip on the right side of the CPU fan (marked on the board
|
||||||
|
image). The voltage of SPI flash is 3.3V.
|
||||||
|
|
||||||
|
There are no restrictions as to the programmer device. It is only recommended
|
||||||
|
to flash firmware without supplying power. There are no diodes connected to the
|
||||||
|
flash chips. External programming can be performed, for example using OrangePi
|
||||||
|
and Armbian. You can use linux_spi driver which provides communication with SPI
|
||||||
|
devices. Example command to program SPI flash with OrangePi using linux_spi:
|
||||||
|
|
||||||
|
flashrom -w coreboot.rom -p linux_spi:dev=/dev/spidev1.0,spispeed=16000
|
||||||
|
|
||||||
|
## Schematics
|
||||||
|
|
||||||
|
There are no schematics for SFF, but if one looks for MT/DT schematics, they
|
||||||
|
can be found publicly. Most of the schematics should match the SFF (although
|
||||||
|
MT/DT has additional PCIe and PCI slot).
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
|
||||||
|
- There seems to be a problem with DRAM clearing on reboot. The SSKPD register
|
||||||
|
still contains 0xCAFE which leads to reset loop.
|
||||||
|
|
||||||
|
## Untested
|
||||||
|
|
||||||
|
Not all mainboard's peripherals and functions were tested because of lack of
|
||||||
|
the cables or not being populated on the board case.
|
||||||
|
|
||||||
|
- Internal USB 2.0 header
|
||||||
|
- Wake from S3 using serial port
|
||||||
|
- Wake-on-Lan from ACPI S4/S5
|
||||||
|
|
||||||
|
## Working
|
||||||
|
|
||||||
|
- USB 3.0 and 2.0 rear and front ports (SeaBIOS and Linux 4.19)
|
||||||
|
- Gigabit Ethernet
|
||||||
|
- VGA and 2x DP port using libgfxinit
|
||||||
|
- flashrom
|
||||||
|
- PCIe x1 WiFi in PCIe x4 slot
|
||||||
|
- NVMe PCIe x4 using PCIe x4 expansion card
|
||||||
|
- PCIe x16 PEG port using Dell Radeon HD 7570
|
||||||
|
- SATA ports (SATA disks and DVD)
|
||||||
|
- Super I/O serial port 0 (RS232 DB9 connector on the rear side)
|
||||||
|
- SMBus (reading SPD from DIMMs)
|
||||||
|
- CPU initialization using Intel i7-3770
|
||||||
|
- Sandy Bridge/Ivy Bridge native RAM initialization
|
||||||
|
- SeaBIOS payload (version rel-1.13.0)
|
||||||
|
- PS/2 keyboard and mouse (including wake support)
|
||||||
|
- LPC debug header (requires soldering of the pin header and shorting RF24 for
|
||||||
|
LPC clock)
|
||||||
|
- USB debug dongle (the most bottom USB 2.0 port under RJ45 on the read side)
|
||||||
|
- SMSC SCH5545 Super I/O initialization
|
||||||
|
- SMSC SCH5545 EC initialization and firmware update
|
||||||
|
- SMSC SCH5545 EC automatic fan control
|
||||||
|
- TPM 1.2
|
||||||
|
- Booting Debian 10, Ubuntu 18.04, QubesOS R4.01
|
||||||
|
- Boot with cleaned ME
|
||||||
|
- Intruder detection
|
||||||
|
- Wake-on-Lan from ACPI S3
|
||||||
|
|
||||||
|
[flashrom]: https://flashrom.org/Flashrom
|
||||||
|
[Dell OptiPlex 9010 specifications]: https://www.dell.com/downloads/global/products/optix/en/dell_optiplex_9010_spec_sheet.pdf
|
||||||
|
[UEFITool]: https://github.com/LongSoft/UEFITool
|
@ -72,7 +72,7 @@ Specifically, it's a Winbond W25Q64FV (3.3V), whose datasheet can be found
|
|||||||
+------------------+--------------------------------------------------+
|
+------------------+--------------------------------------------------+
|
||||||
| CPU | Intel Braswell (N3710) |
|
| CPU | Intel Braswell (N3710) |
|
||||||
+------------------+--------------------------------------------------+
|
+------------------+--------------------------------------------------+
|
||||||
| Super I/O, EC | ITE8256 |
|
| Super I/O, EC | ITE8528 |
|
||||||
+------------------+--------------------------------------------------+
|
+------------------+--------------------------------------------------+
|
||||||
| Coprocessor | Intel Management Engine |
|
| Coprocessor | Intel Management Engine |
|
||||||
+------------------+--------------------------------------------------+
|
+------------------+--------------------------------------------------+
|
||||||
|
133
Documentation/mainboard/facebook/monolith.md
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
# Facebook Monolith
|
||||||
|
|
||||||
|
This page describes how to run coreboot on the Facebook Monolith.
|
||||||
|
|
||||||
|
Please note: the coreboot implementation for this boards is in its
|
||||||
|
Beta state and isn't fully tested yet.
|
||||||
|
|
||||||
|
## Required blobs
|
||||||
|
|
||||||
|
Mainboard is based on the Intel Kaby Lake U SoC.
|
||||||
|
Intel company provides [Firmware Support Package (2.0)](../../soc/intel/fsp/index.md)
|
||||||
|
(intel FSP 2.0) to initialize this generation silicon. Please see this
|
||||||
|
[document](../../soc/intel/code_development_model/code_development_model.md).
|
||||||
|
|
||||||
|
FSP Information:
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+-----------------------------+-------------------+-------------------+
|
||||||
|
| FSP Project Name | Directory | Specification |
|
||||||
|
+-----------------------------+-------------------+-------------------+
|
||||||
|
| 7th Generation Intel® Core™ | KabylakeFspBinPkg | 2.0 |
|
||||||
|
| processors and chipsets | | |
|
||||||
|
| (formerly Kaby Lake) | | |
|
||||||
|
+-----------------------------+-------------------+-------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
Microcode: 3rdparty/intel-microcode/intel-ucode
|
||||||
|
|
||||||
|
## Flash components
|
||||||
|
|
||||||
|
To create a complete flash image, the flash descriptor, GBE and ME blobs are required. The
|
||||||
|
complete image can be used when e.g. a blank flash should be programmed. In other cases (when
|
||||||
|
only coreboot needs to be replaced) placeholders can be used for the GBE and ME regions.
|
||||||
|
|
||||||
|
These can be extracted from the original flash image as follows:
|
||||||
|
1) Read the complete image from flash.
|
||||||
|
2) Create a layout file with the following content:
|
||||||
|
```
|
||||||
|
00000000:00000fff fd
|
||||||
|
00700000:00ffffff bios
|
||||||
|
00003000:006FFFFF me
|
||||||
|
00001000:00002fff gbe
|
||||||
|
```
|
||||||
|
3) Use `ifdtool -n <layout_file> <flash_image>` to resize the *bios* region from the default 6MB
|
||||||
|
to 9 MB, this is required to create sufficient space for LinuxBoot.
|
||||||
|
NOTE: Please make sure only the firmware descriptor (*fd*) region is changed. Older versions
|
||||||
|
of the ifdtool corrupt the *me* region.
|
||||||
|
4) Use `ifdtool -x <resized_flash_image>` to extract the components.
|
||||||
|
|
||||||
|
The regions extracted can be used to generate a full flash image. The *bios* region is
|
||||||
|
not needed as this is replaced by the coreboot image.
|
||||||
|
|
||||||
|
NOTE: The gbe region contains the MAC address so be careful. When updating the flash using
|
||||||
|
flashrom it is advisable to leave out the *gbe* area.
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
### Internal programming
|
||||||
|
|
||||||
|
The SPI flash can be accessed using [flashrom].
|
||||||
|
|
||||||
|
The descriptor area needs to be updated once to resize the *bios* region.
|
||||||
|
`flashrom -p internal --ifd -i fd -w <coreboot.bin>`
|
||||||
|
|
||||||
|
After that only the bios area should to be updated.
|
||||||
|
`flashrom -p internal --ifd -i bios -w <coreboot.bin>`
|
||||||
|
|
||||||
|
The *gbe* and *me* regions should not be updated.
|
||||||
|
|
||||||
|
NOTE: As `flashrom --ifd` uses the flash descriptor it is required to update the
|
||||||
|
descriptor and bios regions in the right sequence. Don't update both in one command.
|
||||||
|
|
||||||
|
### External programming
|
||||||
|
|
||||||
|
The system has an internal flash chip which is a 16 MiB soldered SOIC-8 chip.
|
||||||
|
Specifically, it's a Winbond W25Q128JVSIQ (3.3V).
|
||||||
|
|
||||||
|
The system has an external flash chip which is a 16 MiB soldered SOIC-8 chip.
|
||||||
|
Specifically, it's a Winbond W25Q128JVSIM (3.3V).
|
||||||
|
|
||||||
|
Flashing of these devices is very difficult, disassembling the system destroys the cooling
|
||||||
|
solution. Wires need to be connected to be able to flash using an external programmer.
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
|
||||||
|
- None
|
||||||
|
|
||||||
|
## Untested
|
||||||
|
|
||||||
|
- Hardware monitor
|
||||||
|
- Full Embedded Controller support
|
||||||
|
- SATA
|
||||||
|
- xDCI
|
||||||
|
|
||||||
|
## Working
|
||||||
|
|
||||||
|
- USB
|
||||||
|
- Gigabit Ethernet (i219 and i210)
|
||||||
|
- Graphics (Using FSP GOP)
|
||||||
|
- flashrom
|
||||||
|
- PCIe including hotplug on FPGA root port
|
||||||
|
- EC serial port
|
||||||
|
- EC CPU temperature
|
||||||
|
- SMBus
|
||||||
|
- Initialization with FSP
|
||||||
|
- SeaBIOS payload (commit a5cab58e9a3fb6e168aba919c5669bea406573b4)
|
||||||
|
- TianoCore payload (commit a5cab58e9a3fb6e168aba919c5669bea406573b4)
|
||||||
|
- LinuxBoot (kernel kernel-4_19_97) (uroot commit 9c9db9dbd6b532f5f91a511a0de885c6562aadd7)
|
||||||
|
- eMMC
|
||||||
|
|
||||||
|
All of the above has been briefly tested by booting Linux from eMMC using the TianoCore payload
|
||||||
|
and LinuxBoot.
|
||||||
|
|
||||||
|
SeaBios has been checked to the extend that it runs to the boot selection and provides display
|
||||||
|
output.
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| SoC | Intel Kaby Lake U |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| CPU | Intel i3-7100U |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O, EC | ITE8528 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Coprocessor | Intel Management Engine |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
[W25Q128JVSIQ]: https://www.winbond.com/resource-files/w25q128jv%20revf%2003272018%20plus.pdf
|
||||||
|
[W25Q128JVSIM]: https://www.winbond.com/resource-files/w25q128jv%20dtr%20revb%2011042016.pdf
|
||||||
|
[flashrom]: https://flashrom.org/Flashrom
|
@ -15,7 +15,7 @@ from [Gigabyte].
|
|||||||
+---------------------+------------+
|
+---------------------+------------+
|
||||||
| Size | 4 MiB |
|
| Size | 4 MiB |
|
||||||
+---------------------+------------+
|
+---------------------+------------+
|
||||||
| In circuit flashing | Yes |
|
| In circuit flashing | No |
|
||||||
+---------------------+------------+
|
+---------------------+------------+
|
||||||
| Package | SOIC-8 |
|
| Package | SOIC-8 |
|
||||||
+---------------------+------------+
|
+---------------------+------------+
|
||||||
@ -39,27 +39,23 @@ leave the backup chip untouched.
|
|||||||
|
|
||||||
The original IFD defines the BIOS region as the whole flash chip. While this is
|
The original IFD defines the BIOS region as the whole flash chip. While this is
|
||||||
not an issue if flashing a complete image, it confuses flashrom and trashes the
|
not an issue if flashing a complete image, it confuses flashrom and trashes the
|
||||||
flash chip's contents when using the --ifd option. However, this can be easily
|
flash chip's contents when using the `--ifd` option. A possible workaround is
|
||||||
fixed by reading the IFD with flashrom, editing the correct values into it with
|
to create a `layout.txt` file with a non-overlapping BIOS region:
|
||||||
ifdtool and then reflashing it.
|
|
||||||
|
|
||||||
Create a layout.txt with the following contents:
|
|
||||||
|
|
||||||
00000000:00000fff fd
|
00000000:00000fff fd
|
||||||
00180000:003fffff bios
|
00180000:003fffff bios
|
||||||
00001000:0017ffff me
|
00001000:0017ffff me
|
||||||
|
|
||||||
After that, simply run:
|
After that, use flashrom with the new layout file. For example, to create a
|
||||||
|
backup of the BIOS region and then flash a `coreboot.rom`, do:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo flashrom -p internal --ifd -i fd -r ifd.rom
|
sudo flashrom -p internal -l layout.txt -i bios -r backup.rom
|
||||||
ifdtool -n layout.txt ifd.rom
|
sudo flashrom -p internal -l layout.txt -i bios -w coreboot.rom
|
||||||
sudo flashrom -p internal --ifd -i fd -w ifd.rom.new
|
|
||||||
```
|
```
|
||||||
|
|
||||||
After flashing, power cycle the computer to ensure the new IFD is being used.
|
Modifying the IFD so that the BIOS region does not overlap would work as well.
|
||||||
If only a reboot is done, the old IFD layout is still seen by flashrom, even if
|
However, this makes DualBIOS unable to recover from a bad flash for some reason.
|
||||||
the IFD on the flash chip is correctly defining the new region layout.
|
|
||||||
|
|
||||||
## Technology
|
## Technology
|
||||||
|
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
# 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 |
|
|
||||||
+---------------------+------------+
|
|
||||||
```
|
|
@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
This page describes how to run coreboot on the [HP EliteBook 8760w].
|
This page describes how to run coreboot on the [HP EliteBook 8760w].
|
||||||
|
|
||||||
|
The coreboot code for this laptop is still not merged, you need to
|
||||||
|
checkout the [code on gerrit] to build coreboot for the laptop.
|
||||||
|
|
||||||
## Flashing coreboot
|
## Flashing coreboot
|
||||||
|
|
||||||
```eval_rst
|
```eval_rst
|
||||||
@ -29,7 +32,7 @@ This page describes how to run coreboot on the [HP EliteBook 8760w].
|
|||||||
## Required proprietary blobs
|
## Required proprietary blobs
|
||||||
|
|
||||||
- Intel Firmware Descriptor, ME and GbE firmware
|
- Intel Firmware Descriptor, ME and GbE firmware
|
||||||
- EC: please read [EliteBook Series](elitebook_series)
|
- EC: please read [HP Laptops with KBC1126 Embedded Controller](hp_kbc1126_laptops)
|
||||||
|
|
||||||
## Flashing instructions
|
## Flashing instructions
|
||||||
|
|
||||||
@ -80,3 +83,4 @@ clip to read and flash the chip.
|
|||||||
```
|
```
|
||||||
|
|
||||||
[HP EliteBook 8760w]: https://support.hp.com/us-en/product/hp-elitebook-8760w-mobile-workstation/5071180
|
[HP EliteBook 8760w]: https://support.hp.com/us-en/product/hp-elitebook-8760w-mobile-workstation/5071180
|
||||||
|
[code on gerrit]: https://review.coreboot.org/c/coreboot/+/30936
|
||||||
|
@ -1,111 +0,0 @@
|
|||||||
# HP EliteBook series
|
|
||||||
|
|
||||||
This document is about HP EliteBook series laptops up to Ivy Bridge era
|
|
||||||
which use SMSC KBC1126 as embedded controller.
|
|
||||||
|
|
||||||
## EC
|
|
||||||
|
|
||||||
SMSC KBC1098/KBC1126 has been used in HP EliteBooks for many generations.
|
|
||||||
They use similar EC firmware that will load other code and data from the
|
|
||||||
SPI flash chip, so we need to put some firmware blobs to the coreboot image.
|
|
||||||
|
|
||||||
The following document takes EliteBook 2760p as an example.
|
|
||||||
|
|
||||||
First, you need to extract the blobs needed by EC firmware using util/kbc1126.
|
|
||||||
You can extract them from your backup firmware image, or firmware update
|
|
||||||
provided by HP with [unar] as follows:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
wget https://ftp.hp.com/pub/softpaq/sp79501-80000/sp79710.exe
|
|
||||||
unar sp79710.exe
|
|
||||||
${COREBOOT_DIR}/util/kbc1126/kbc1126_ec_dump sp79710/Rompaq/68SOU.BIN
|
|
||||||
mv 68SOU.BIN.fw1 ${COREBOOT_DIR}/2760p-fw1.bin
|
|
||||||
mv 68SOU.BIN.fw2 ${COREBOOT_DIR}/2760p-fw2.bin
|
|
||||||
```
|
|
||||||
|
|
||||||
When you config coreboot, select:
|
|
||||||
|
|
||||||
```text
|
|
||||||
Chipset --->
|
|
||||||
[*] Add firmware images for KBC1126 EC
|
|
||||||
(2760p-fw1.bin) KBC1126 firmware #1 path and filename
|
|
||||||
(2760p-fw2.bin) KBC1126 filename #2 path and filename
|
|
||||||
```
|
|
||||||
|
|
||||||
## Super I/O
|
|
||||||
|
|
||||||
EliteBook 8000 series laptops have SMSC LPC47n217 Super I/O to provide
|
|
||||||
a serial port and a parallel port, you can debug the laptop via this
|
|
||||||
serial port.
|
|
||||||
|
|
||||||
## porting
|
|
||||||
|
|
||||||
To port coreboot to an HP EliteBook laptop, you need to do the following:
|
|
||||||
|
|
||||||
- select Kconfig option `EC_HP_KBC1126`
|
|
||||||
- select Kconfig option `SUPERIO_SMSC_LPC47N217` if there is LPC47n217 Super I/O
|
|
||||||
- initialize EC and Super I/O in romstage
|
|
||||||
- add EC and Super I/O support to devicetree.cb
|
|
||||||
|
|
||||||
To get the related values for EC in devicetree.cb, you need to extract the EFI
|
|
||||||
module EcThermalInit from the vendor UEFI firmware with [UEFITool]. Usually,
|
|
||||||
`ec_data_port`, `ec_cmd_port` and `ec_ctrl_reg` has the following values:
|
|
||||||
|
|
||||||
- For xx60 series: 0x60, 0x64, 0xca
|
|
||||||
- For xx70 series: 0x62, 0x66, 0x81
|
|
||||||
|
|
||||||
You can use [radare2] and the following [r2pipe] Python script to find
|
|
||||||
these values from the EcThermalInit EFI module:
|
|
||||||
|
|
||||||
```python
|
|
||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
# install radare2 and use `pip3 install --user r2pipe` to install r2pipe
|
|
||||||
|
|
||||||
import r2pipe
|
|
||||||
import sys
|
|
||||||
|
|
||||||
if len(sys.argv) < 2:
|
|
||||||
fn = "ecthermalinit.efi"
|
|
||||||
else:
|
|
||||||
fn = sys.argv[1]
|
|
||||||
|
|
||||||
r2 = r2pipe.open(fn)
|
|
||||||
r2.cmd("aa")
|
|
||||||
entryf = r2.cmdj("pdfj")
|
|
||||||
|
|
||||||
for insn in entryf["ops"]:
|
|
||||||
if "lea r8" in insn["opcode"]:
|
|
||||||
_callback = insn["ptr"]
|
|
||||||
break
|
|
||||||
|
|
||||||
r2.cmd("af @ {}".format(_callback))
|
|
||||||
callbackf_insns = r2.cmdj("pdfj @ {}".format(_callback))["ops"]
|
|
||||||
|
|
||||||
def find_port(addr):
|
|
||||||
ops = r2.cmdj("pdfj @ {}".format(addr))["ops"]
|
|
||||||
for insn in ops:
|
|
||||||
if "lea r8d" in insn["opcode"]:
|
|
||||||
return insn["ptr"]
|
|
||||||
|
|
||||||
ctrl_reg_found = False
|
|
||||||
|
|
||||||
for i in range(0, len(callbackf_insns)):
|
|
||||||
if not ctrl_reg_found and "mov cl" in callbackf_insns[i]["opcode"]:
|
|
||||||
ctrl_reg_found = True
|
|
||||||
ctrl_reg = callbackf_insns[i]["ptr"]
|
|
||||||
print("ec_ctrl_reg = 0x%02x" % ctrl_reg)
|
|
||||||
cmd_port = find_port(callbackf_insns[i+1]["jump"])
|
|
||||||
data_port = find_port(callbackf_insns[i+3]["jump"])
|
|
||||||
print("ec_cmd_port = 0x%02x\nec_data_port = 0x%02x" % (cmd_port, data_port))
|
|
||||||
|
|
||||||
if "mov bl" in callbackf_insns[i]["opcode"]:
|
|
||||||
ctrl_value = callbackf_insns[i]["ptr"]
|
|
||||||
print("ec_fan_ctrl_value = 0x%02x" % ctrl_value)
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
[unar]: https://theunarchiver.com/command-line
|
|
||||||
[UEFITool]: https://github.com/LongSoft/UEFITool
|
|
||||||
[radare2]: https://radare.org/
|
|
||||||
[r2pipe]: https://github.com/radare/radare2-r2pipe
|
|
109
Documentation/mainboard/hp/hp_kbc1126_laptops.md
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
# HP Laptops with KBC1126 Embedded Controller
|
||||||
|
|
||||||
|
This document is about HP EliteBook series laptops up to Ivy Bridge era
|
||||||
|
which use SMSC KBC1126 as embedded controller.
|
||||||
|
|
||||||
|
SMSC KBC1126 (and older similar chips like KBC1098) has been used in
|
||||||
|
HP EliteBooks for many generations. BIOS and EC firmware share an SPI
|
||||||
|
flash chip in these laptops, so we need to put firmware blobs for the
|
||||||
|
EC to the coreboot image.
|
||||||
|
|
||||||
|
## EC firmware extraction and coreboot building
|
||||||
|
|
||||||
|
The following document takes EliteBook 2760p as an example.
|
||||||
|
|
||||||
|
First, you need to extract the blobs needed by EC firmware using util/kbc1126.
|
||||||
|
You can extract them from your backup firmware image, or firmware update
|
||||||
|
provided by HP with [unar] as follows:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
wget https://ftp.hp.com/pub/softpaq/sp79501-80000/sp79710.exe
|
||||||
|
unar sp79710.exe
|
||||||
|
${COREBOOT_DIR}/util/kbc1126/kbc1126_ec_dump sp79710/Rompaq/68SOU.BIN
|
||||||
|
mv 68SOU.BIN.fw1 ${COREBOOT_DIR}/2760p-fw1.bin
|
||||||
|
mv 68SOU.BIN.fw2 ${COREBOOT_DIR}/2760p-fw2.bin
|
||||||
|
```
|
||||||
|
|
||||||
|
When you config coreboot, select:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Chipset --->
|
||||||
|
[*] Add firmware images for KBC1126 EC
|
||||||
|
(2760p-fw1.bin) KBC1126 firmware #1 path and filename
|
||||||
|
(2760p-fw2.bin) KBC1126 filename #2 path and filename
|
||||||
|
```
|
||||||
|
|
||||||
|
## Porting guide for HP laptops with KBC1126
|
||||||
|
|
||||||
|
To port coreboot to an HP laptop with KBC1126, you need to do the
|
||||||
|
following:
|
||||||
|
|
||||||
|
- select Kconfig option `EC_HP_KBC1126`
|
||||||
|
- select Kconfig option `SUPERIO_SMSC_LPC47N217` if there is LPC47n217
|
||||||
|
Super I/O, usually in EliteBook 8000 series, which can be used for
|
||||||
|
debugging via serial port
|
||||||
|
- initialize EC and Super I/O in romstage
|
||||||
|
- add EC and Super I/O support to devicetree.cb
|
||||||
|
|
||||||
|
To get the related values for EC in devicetree.cb, you need to extract the EFI
|
||||||
|
module EcThermalInit from the vendor UEFI firmware with [UEFITool]. Usually,
|
||||||
|
`ec_data_port`, `ec_cmd_port` and `ec_ctrl_reg` has the following values:
|
||||||
|
|
||||||
|
- For EliteBook xx60 series: 0x60, 0x64, 0xca
|
||||||
|
- For EliteBook xx70 series: 0x62, 0x66, 0x81
|
||||||
|
|
||||||
|
You can use [radare2] and the following [r2pipe] Python script to find
|
||||||
|
these values from the EcThermalInit EFI module:
|
||||||
|
|
||||||
|
```python
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# install radare2 and use `pip3 install --user r2pipe` to install r2pipe
|
||||||
|
|
||||||
|
import r2pipe
|
||||||
|
import sys
|
||||||
|
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
fn = "ecthermalinit.efi"
|
||||||
|
else:
|
||||||
|
fn = sys.argv[1]
|
||||||
|
|
||||||
|
r2 = r2pipe.open(fn)
|
||||||
|
r2.cmd("aa")
|
||||||
|
entryf = r2.cmdj("pdfj")
|
||||||
|
|
||||||
|
for insn in entryf["ops"]:
|
||||||
|
if "lea r8" in insn["opcode"]:
|
||||||
|
_callback = insn["ptr"]
|
||||||
|
break
|
||||||
|
|
||||||
|
r2.cmd("af @ {}".format(_callback))
|
||||||
|
callbackf_insns = r2.cmdj("pdfj @ {}".format(_callback))["ops"]
|
||||||
|
|
||||||
|
def find_port(addr):
|
||||||
|
ops = r2.cmdj("pdfj @ {}".format(addr))["ops"]
|
||||||
|
for insn in ops:
|
||||||
|
if "lea r8d" in insn["opcode"]:
|
||||||
|
return insn["ptr"]
|
||||||
|
|
||||||
|
ctrl_reg_found = False
|
||||||
|
|
||||||
|
for i in range(0, len(callbackf_insns)):
|
||||||
|
if not ctrl_reg_found and "mov cl" in callbackf_insns[i]["opcode"]:
|
||||||
|
ctrl_reg_found = True
|
||||||
|
ctrl_reg = callbackf_insns[i]["ptr"]
|
||||||
|
print("ec_ctrl_reg = 0x%02x" % ctrl_reg)
|
||||||
|
cmd_port = find_port(callbackf_insns[i+1]["jump"])
|
||||||
|
data_port = find_port(callbackf_insns[i+3]["jump"])
|
||||||
|
print("ec_cmd_port = 0x%02x\nec_data_port = 0x%02x" % (cmd_port, data_port))
|
||||||
|
|
||||||
|
if "mov bl" in callbackf_insns[i]["opcode"]:
|
||||||
|
ctrl_value = callbackf_insns[i]["ptr"]
|
||||||
|
print("ec_fan_ctrl_value = 0x%02x" % ctrl_value)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
[unar]: https://theunarchiver.com/command-line
|
||||||
|
[UEFITool]: https://github.com/LongSoft/UEFITool
|
||||||
|
[radare2]: https://radare.org/
|
||||||
|
[r2pipe]: https://github.com/radare/radare2-r2pipe
|
@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
This section contains documentation about coreboot on specific mainboards.
|
This section contains documentation about coreboot on specific mainboards.
|
||||||
|
|
||||||
|
## 51NB
|
||||||
|
|
||||||
|
- [X210](51nb/x210.md)
|
||||||
|
|
||||||
## AMD
|
## AMD
|
||||||
- [padmelon](amd/padmelon/padmelon.md)
|
- [padmelon](amd/padmelon/padmelon.md)
|
||||||
|
|
||||||
@ -13,6 +17,7 @@ This section contains documentation about coreboot on specific mainboards.
|
|||||||
## ASUS
|
## ASUS
|
||||||
|
|
||||||
- [F2A85-M](asus/f2a85-m.md)
|
- [F2A85-M](asus/f2a85-m.md)
|
||||||
|
- [P5Q](asus/p5q.md)
|
||||||
- [P8H61-M LX](asus/p8h61-m_lx.md)
|
- [P8H61-M LX](asus/p8h61-m_lx.md)
|
||||||
- [P8H61-M Pro](asus/p8h61-m_pro.md)
|
- [P8H61-M Pro](asus/p8h61-m_pro.md)
|
||||||
- [P8Z77-M Pro](asus/p8z77-m_pro.md)
|
- [P8Z77-M Pro](asus/p8z77-m_pro.md)
|
||||||
@ -21,6 +26,10 @@ This section contains documentation about coreboot on specific mainboards.
|
|||||||
|
|
||||||
- [CN81XX EVB SFF](cavium/cn8100_sff_evb.md)
|
- [CN81XX EVB SFF](cavium/cn8100_sff_evb.md)
|
||||||
|
|
||||||
|
## Dell
|
||||||
|
|
||||||
|
- [OptiPlex 9010 SFF](dell/optiplex_9010.md)
|
||||||
|
|
||||||
## Emulation
|
## Emulation
|
||||||
|
|
||||||
The boards in this section are not real mainboards, but emulators.
|
The boards in this section are not real mainboards, but emulators.
|
||||||
@ -32,6 +41,7 @@ The boards in this section are not real mainboards, but emulators.
|
|||||||
## Facebook
|
## Facebook
|
||||||
|
|
||||||
- [FBG-1701](facebook/fbg1701.md)
|
- [FBG-1701](facebook/fbg1701.md)
|
||||||
|
- [Monolith](facebook/monolith.md)
|
||||||
|
|
||||||
## Foxconn
|
## Foxconn
|
||||||
|
|
||||||
@ -41,10 +51,6 @@ The boards in this section are not real mainboards, but emulators.
|
|||||||
|
|
||||||
- [GA-H61M-S2PV](gigabyte/ga-h61m-s2pv.md)
|
- [GA-H61M-S2PV](gigabyte/ga-h61m-s2pv.md)
|
||||||
|
|
||||||
## Google
|
|
||||||
|
|
||||||
- [Dragonegg](google/dragonegg.md)
|
|
||||||
|
|
||||||
## HP
|
## HP
|
||||||
|
|
||||||
- [Compaq 8200 Elite SFF](hp/compaq_8200_sff.md)
|
- [Compaq 8200 Elite SFF](hp/compaq_8200_sff.md)
|
||||||
@ -52,7 +58,7 @@ The boards in this section are not real mainboards, but emulators.
|
|||||||
|
|
||||||
### EliteBook series
|
### EliteBook series
|
||||||
|
|
||||||
- [EliteBook common](hp/elitebook_series.md)
|
- [HP Laptops with KBC1126 EC](hp/hp_kbc1126_laptops.md)
|
||||||
- [EliteBook 8760w](hp/8760w.md)
|
- [EliteBook 8760w](hp/8760w.md)
|
||||||
|
|
||||||
## Intel
|
## Intel
|
||||||
@ -68,37 +74,49 @@ The boards in this section are not real mainboards, but emulators.
|
|||||||
- [R60](lenovo/r60.md)
|
- [R60](lenovo/r60.md)
|
||||||
- [T4xx common](lenovo/t4xx_series.md)
|
- [T4xx common](lenovo/t4xx_series.md)
|
||||||
- [X2xx common](lenovo/x2xx_series.md)
|
- [X2xx common](lenovo/x2xx_series.md)
|
||||||
|
- [vboot](lenovo/vboot.md)
|
||||||
|
|
||||||
### Nehalem series
|
### Arrandale series
|
||||||
|
|
||||||
- [T410](lenovo/t410.md)
|
- [T410](lenovo/t410.md)
|
||||||
|
|
||||||
### GM45 series
|
### GM45 series
|
||||||
|
|
||||||
|
- [X200 / T400 / T500 / X301 common](lenovo/montevina_series.md)
|
||||||
- [X301](lenovo/x301.md)
|
- [X301](lenovo/x301.md)
|
||||||
|
|
||||||
### Sandy Bridge series
|
### Sandy Bridge series
|
||||||
|
|
||||||
- [T420](lenovo/t420.md)
|
- [T420](lenovo/t420.md)
|
||||||
- [T420 / T520 / X220 / T420s / W520 common](lenovo/xx20_series.md)
|
- [T420 / T520 / X220 / T420s / W520 common](lenovo/Sandy_Bridge_series.md)
|
||||||
- [x1](lenovo/x1.md)
|
- [X1](lenovo/x1.md)
|
||||||
|
|
||||||
### Ivy Bridge series
|
### Ivy Bridge series
|
||||||
|
|
||||||
- [T430](lenovo/t430.md)
|
- [T430](lenovo/t430.md)
|
||||||
- [T530](lenovo/w530.md)
|
- [T530](lenovo/w530.md)
|
||||||
- [W530](lenovo/w530.md)
|
- [W530](lenovo/w530.md)
|
||||||
- [T430 / T530 / X230 / W530 common](lenovo/xx30_series.md)
|
- [T430 / T530 / X230 / W530 common](lenovo/Ivy_Bridge_series.md)
|
||||||
- [T431s](lenovo/t431s.md)
|
- [T431s](lenovo/t431s.md)
|
||||||
|
- [X230s](lenovo/x230s.md)
|
||||||
|
- [Internal flashing](lenovo/ivb_internal_flashing.md)
|
||||||
|
|
||||||
### Haswell series
|
### Haswell series
|
||||||
|
|
||||||
- [T440p](lenovo/t440p.md)
|
- [T440p](lenovo/t440p.md)
|
||||||
|
|
||||||
|
## Libretrend
|
||||||
|
|
||||||
|
- [LT1000](libretrend/lt1000.md)
|
||||||
|
|
||||||
## MSI
|
## MSI
|
||||||
|
|
||||||
- [MS-7707](msi/ms7707/ms7707.md)
|
- [MS-7707](msi/ms7707/ms7707.md)
|
||||||
|
|
||||||
|
## OCP
|
||||||
|
|
||||||
|
- [Tioga Pass](ocp/tiogapass.md)
|
||||||
|
|
||||||
## Open Cellular
|
## Open Cellular
|
||||||
|
|
||||||
- [Elgon](opencellular/elgon.md)
|
- [Elgon](opencellular/elgon.md)
|
||||||
@ -113,6 +131,15 @@ The boards in this section are not real mainboards, but emulators.
|
|||||||
|
|
||||||
- [PQ7-M107](portwell/pq7-m107.md)
|
- [PQ7-M107](portwell/pq7-m107.md)
|
||||||
|
|
||||||
|
## Prodrive
|
||||||
|
|
||||||
|
- [Hermes](prodrive/hermes.md)
|
||||||
|
|
||||||
|
## Protectli
|
||||||
|
|
||||||
|
- [FW2B / FW4B](protectli/fw2b_fw4b.md)
|
||||||
|
- [FW6A / FW6B / FW6C](protectli/fw6.md)
|
||||||
|
|
||||||
## Roda
|
## Roda
|
||||||
|
|
||||||
- [RK9 Flash Header](roda/rk9/flash_header.md)
|
- [RK9 Flash Header](roda/rk9/flash_header.md)
|
||||||
@ -125,6 +152,11 @@ The boards in this section are not real mainboards, but emulators.
|
|||||||
|
|
||||||
- [X10SLM+-F](supermicro/x10slm-f.md)
|
- [X10SLM+-F](supermicro/x10slm-f.md)
|
||||||
- [X11 LGA1151 series](supermicro/x11-lga1151-series/x11-lga1151-series.md)
|
- [X11 LGA1151 series](supermicro/x11-lga1151-series/x11-lga1151-series.md)
|
||||||
|
- [Flashing using the BMC](supermicro/flashing_on_vendorbmc.md)
|
||||||
|
|
||||||
|
## System76
|
||||||
|
|
||||||
|
- [Lemur Pro](system76/lemp9.md)
|
||||||
|
|
||||||
## UP
|
## UP
|
||||||
|
|
||||||
|
93
Documentation/mainboard/lenovo/Ivy_Bridge_series.md
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
# Lenovo Ivy Bridge series
|
||||||
|
|
||||||
|
This information is valid for all supported models, except T430s, [T431s](t431s.md) and [X230s](x230s.md).
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
```eval_rst
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Type | Value |
|
||||||
|
+=====================+================================+
|
||||||
|
| Socketed flash | no |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Size | 8 MiB + 4MiB |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| In circuit flashing | Yes |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Package | SOIC-8 |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Write protection | No |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Dual BIOS feature | No |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
| Internal flashing | Yes |
|
||||||
|
+---------------------+--------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installation instructions
|
||||||
|
* Update the EC firmware, as there's no support for EC updates in coreboot.
|
||||||
|
* Do **NOT** accidently swap pins or power on the board while a SPI flasher
|
||||||
|
is connected. It will permanently brick your device.
|
||||||
|
* It's recommended to only flash the BIOS region. In that case you don't
|
||||||
|
need to extract blobs from vendor firmware.
|
||||||
|
If you want to flash the whole chip, you need blobs when building
|
||||||
|
coreboot.
|
||||||
|
* The *Flash layout* shows that by default 7MiB of space are available for
|
||||||
|
the use with coreboot.
|
||||||
|
* In that case you only want to use a part of the BIOS region that must not
|
||||||
|
exceed 4MiB in size, which means CONFIG_CBFS_SIZE must be smaller than 4MiB.
|
||||||
|
* ROM chip size should be set to 12MiB.
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
Please also have a look at :doc:`../../flash_tutorial/index`.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Splitting the coreboot.rom
|
||||||
|
|
||||||
|
To split the coreboot.rom into two images (one for the 8MiB and one for the
|
||||||
|
4 MiB flash IC), run the following commands:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dd of=top.rom bs=1M if=build/coreboot.rom skip=8
|
||||||
|
dd of=bottom.rom bs=1M if=build/coreboot.rom count=8
|
||||||
|
```
|
||||||
|
|
||||||
|
That gives one ROM for each flash IC, where *top.rom* is the upper part of the
|
||||||
|
flash image, that resides on the 4 MiB flash and *bottom.rom* is the lower part
|
||||||
|
of the flash image, that resides on the 8 MiB flash.
|
||||||
|
|
||||||
|
## Dumping a full ROM
|
||||||
|
|
||||||
|
If you flash externally you need to read both flash chips to get two images
|
||||||
|
(one for the 8MiB and one for the 4 MiB flash IC), and then run the following
|
||||||
|
command to concatenate the files:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat bottom.rom top.rom > firmware.rom
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flash layout
|
||||||
|
There's one 8MiB and one 4 MiB flash which contains IFD, GBE, ME and
|
||||||
|
BIOS region. These two flash ICs appear as a single 12MiB when flashing
|
||||||
|
internally.
|
||||||
|
On Lenovo's UEFI the EC firmware update is placed at the start of the BIOS
|
||||||
|
region. The update is then written into the EC once.
|
||||||
|
|
||||||
|
![][fl]
|
||||||
|
|
||||||
|
[fl]: flashlayout_Ivy_Bridge.svg
|
||||||
|
|
||||||
|
## Reducing Intel Managment Engine firmware size
|
||||||
|
|
||||||
|
It is possible to reduce the Intel ME firmware size to free additional
|
||||||
|
space for the `bios` region. This is usually referred to as *cleaning the ME* or
|
||||||
|
*stripping the ME*.
|
||||||
|
After reducing the Intel ME firmware size you must modify the original IFD,
|
||||||
|
[split the resulting coreboot ROM](#splitting-the-coreboot-rom) and then write
|
||||||
|
each ROM using an [external programmer].
|
||||||
|
Have a look at [me_cleaner] for more information.
|
||||||
|
|
||||||
|
Tests on Lenovo W530 showed no issues with a stripped and shrunken ME firmware.
|
||||||
|
|
||||||
|
|
||||||
|
[me_cleaner]: ../../northbridge/intel/sandybridge/me_cleaner.md
|
||||||
|
[external programmer]: ../../flash_tutorial/index.md
|
70
Documentation/mainboard/lenovo/Sandy_Bridge_series.md
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
# Lenovo Sandy Bridge series
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
```eval_rst
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Type | Value |
|
||||||
|
+=====================+====================+
|
||||||
|
| Socketed flash | no |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Size | 8 MiB |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| In circuit flashing | Yes |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Package | SOIC-8 |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Write protection | No |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Dual BIOS feature | No |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
| Internal flashing | Yes |
|
||||||
|
+---------------------+--------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installation instructions
|
||||||
|
* Update the EC firmware, as there's no support for EC updates in coreboot.
|
||||||
|
* Do **NOT** accidently swap pins or power on the board while a SPI flasher
|
||||||
|
is connected. It will destroy your device.
|
||||||
|
* It's recommended to only flash the BIOS region. In that case you don't
|
||||||
|
need to extract blobs from vendor firmware.
|
||||||
|
If you want to flash the whole chip, you need blobs when building
|
||||||
|
coreboot.
|
||||||
|
* The shipped *Flash layout* allocates 3MiB to the BIOS region, which is the space
|
||||||
|
usable by coreboot.
|
||||||
|
* ROM chip size should be set to 8MiB.
|
||||||
|
|
||||||
|
Please also have a look at the [flashing tutorial]
|
||||||
|
|
||||||
|
## Flash layout
|
||||||
|
There's one 8MiB flash which contains IFD, GBE, ME and BIOS regions.
|
||||||
|
On Lenovo's UEFI the EC firmware update is placed at the start of the BIOS
|
||||||
|
region. The update is then written into the EC once.
|
||||||
|
|
||||||
|
![][fl]
|
||||||
|
|
||||||
|
[fl]: flashlayout_Sandy_Bridge.svg
|
||||||
|
|
||||||
|
## Reducing Intel Managment Engine firmware size
|
||||||
|
|
||||||
|
It is possible to reduce the Intel ME firmware size to free additional
|
||||||
|
space for the `bios` region. This is usually referred to as *cleaning the ME* or
|
||||||
|
*stripping the ME*.
|
||||||
|
After reducing the Intel ME firmware size you must modify the original IFD
|
||||||
|
and then write a full ROM using an [external programmer].
|
||||||
|
Have a look at [me_cleaner] for more information.
|
||||||
|
|
||||||
|
Tests on Lenovo X220 showed no issues with a stripped ME firmware.
|
||||||
|
|
||||||
|
**Modified flash layout:**
|
||||||
|
|
||||||
|
![][fl2]
|
||||||
|
|
||||||
|
[fl2]: flashlayout_Sandy_Bridge_stripped_me.svg
|
||||||
|
|
||||||
|
The overall size of the `gbe`, `me,` `ifd` region is less than 128KiB, leaving
|
||||||
|
the remaining space for the `bios` partition.
|
||||||
|
|
||||||
|
|
||||||
|
[me_cleaner]: ../../northbridge/intel/sandybridge/me_cleaner.md
|
||||||
|
[external programmer]: ../../flash_tutorial/index.md
|
||||||
|
[flashing tutorial]: ../../flash_tutorial/index.md
|
@ -1,4 +1,6 @@
|
|||||||
t60,magi-5|magi-7|austin-3
|
t60,magi (dGPU) | lisa (iGPU)
|
||||||
|
z61m,BW2
|
||||||
|
z61t,BV2
|
||||||
t400,malibu-3
|
t400,malibu-3
|
||||||
t400s,shinai
|
t400s,shinai
|
||||||
t410,nozomi-1
|
t410,nozomi-1
|
||||||
@ -16,13 +18,18 @@ w510,kendo-1 workstation
|
|||||||
w520,kendo-3 workstation
|
w520,kendo-3 workstation
|
||||||
w530,kendo-4 workstation
|
w530,kendo-4 workstation
|
||||||
w700,n-note
|
w700,n-note
|
||||||
|
w701,n-note 3.0 (nico-3)
|
||||||
x1_carbon_gen1,genesis-1
|
x1_carbon_gen1,genesis-1
|
||||||
x60,ks note
|
x60,ks note
|
||||||
x61,ks note-3
|
x61,ks note-3
|
||||||
x200,mocha-1
|
x200,mocha-1
|
||||||
|
x200s,pecan-1
|
||||||
|
x200t,caramel-1
|
||||||
x201,mocha-3
|
x201,mocha-3
|
||||||
x220,dasher-1
|
x220,dasher-1
|
||||||
|
x220t,comet-1
|
||||||
x230,dasher-2
|
x230,dasher-2
|
||||||
|
x230t,comet-2
|
||||||
x230s,rogue-1
|
x230s,rogue-1
|
||||||
x240,rogue-2
|
x240,rogue-2
|
||||||
x300,kodachi
|
x300,kodachi
|
||||||
|
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
@ -0,0 +1,74 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
|
||||||
|
<svg width="9cm" height="8cm" viewBox="268 -156 168 158" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #ffffff" x="307.888" y="-152.131" width="49.1438" height="30.4667"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ffffff" x="307.888" y="-152.131" width="49.1438" height="30.4667"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ffffff" x="307.888" y="-152.131" width="49.1438" height="30.4667"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="307.888" y="-152.131" width="49.1438" height="30.4667"/>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="332.46" y="-134.831">
|
||||||
|
<tspan x="332.46" y="-134.831">IFD</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #ffffff" x="307.934" y="-56.9106" width="49.1438" height="56.1492"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.02; stroke: #ffffff" x="307.934" y="-56.9106" width="49.1438" height="56.1492"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 0.02; stroke: #ffffff" x="307.934" y="-56.9106" width="49.1438" height="56.1492"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="308.096" y="-57.559" width="49.1438" height="57.2839"/>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="332.182" y="-24.0245">
|
||||||
|
<tspan x="332.182" y="-24.0245">BIOS</tspan>
|
||||||
|
</text>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #ffffff" x="308" y="-121.59" width="49.1438" height="30.4667"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ffffff" x="308" y="-121.59" width="49.1438" height="30.4667"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ffffff" x="308" y="-121.59" width="49.1438" height="30.4667"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="308" y="-121.59" width="49.1438" height="30.4667"/>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="332.572" y="-104.29">
|
||||||
|
<tspan x="332.572" y="-104.29">GBE</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<text font-size="7.15705" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="268.961" y="-148.674">
|
||||||
|
<tspan x="268.961" y="-148.674">0x000000</tspan>
|
||||||
|
</text>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="269.152" y="-120.399">
|
||||||
|
<tspan x="269.152" y="-120.399">0x001000</tspan>
|
||||||
|
</text>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="269.155" y="-90.6472">
|
||||||
|
<tspan x="269.155" y="-90.6472">0x003000</tspan>
|
||||||
|
</text>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="269.461" y="-56.4289">
|
||||||
|
<tspan x="269.461" y="-56.4289">0x020000</tspan>
|
||||||
|
</text>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="270.008" y="0.198407">
|
||||||
|
<tspan x="270.008" y="0.198407">0x800000</tspan>
|
||||||
|
</text>
|
||||||
|
<path style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" d="M 380.877 -151.013 C 401.876,-151.013 379.377,-73.513 400.627,-72.513"/>
|
||||||
|
<path style="fill: none; fill-opacity:0; stroke-width: 1; stroke: #000000" d="M 381.377 -0.763268 C 395.238,-0.763268 387.016,-72.763 400.877,-72.763"/>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:start;font-family:sans-serif;font-style:normal;font-weight:normal" x="406.127" y="-68.513">
|
||||||
|
<tspan x="406.127" y="-68.513">Flash #0</tspan>
|
||||||
|
</text>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<rect style="fill: #ffffff" x="308.189" y="-90.5898" width="49.1438" height="33.4161"/>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ffffff" x="308.189" y="-90.5898" width="49.1438" height="33.4161"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #ffffff" x="308.189" y="-90.5898" width="49.1438" height="33.4161"/>
|
||||||
|
</g>
|
||||||
|
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="308.189" y="-90.5898" width="49.1438" height="32.8215"/>
|
||||||
|
<text font-size="6.77323" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="331.572" y="-70.23">
|
||||||
|
<tspan x="331.572" y="-70.23">ME</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.9 KiB |
BIN
Documentation/mainboard/lenovo/ivb_bios_flashing1.jpg
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
Documentation/mainboard/lenovo/ivb_bios_flashing2.jpg
Normal file
After Width: | Height: | Size: 58 KiB |
BIN
Documentation/mainboard/lenovo/ivb_bios_legacy_only.jpg
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
Documentation/mainboard/lenovo/ivb_bios_uefi_only.jpg
Normal file
After Width: | Height: | Size: 62 KiB |
361
Documentation/mainboard/lenovo/ivb_internal_flashing.md
Normal file
@ -0,0 +1,361 @@
|
|||||||
|
# Ivy Bridge Lenovo ThinkPad Internal Flashing
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
Old versions of stock BIOS for these models have several security issues.
|
||||||
|
In order to flash coreboot internally, two of them are of interest.
|
||||||
|
|
||||||
|
**First** is the fact the `SMM_BWP` and `BLE` are not enabled in BIOS
|
||||||
|
versions released before 2014. We have tested many versions on T430 and
|
||||||
|
X230 and found out that `SMM_BWP=1` only since the update, the changelog
|
||||||
|
of which contains following line:
|
||||||
|
|
||||||
|
> (New) Improved the UEFI BIOS security feature.
|
||||||
|
|
||||||
|
**Second** is [S3 Boot Script vulnerability](https://support.lenovo.com/eg/ru/product_security/s3_boot_protect),
|
||||||
|
that was discovered and fixed later.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- USB drive (in case you need to downgrade BIOS)
|
||||||
|
- Linux install that (can be) loaded in UEFI mode
|
||||||
|
- [CHIPSEC](https://github.com/chipsec/chipsec)
|
||||||
|
|
||||||
|
## BIOS versions
|
||||||
|
|
||||||
|
Below is a table of BIOS versions that are vulnerable enough for our
|
||||||
|
goals, per model. The version number means that you need to downgrade to
|
||||||
|
that or earlier version.
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------+--------------+
|
||||||
|
| Model | BIOS version |
|
||||||
|
+============+==============+
|
||||||
|
| X230 | 2.60 |
|
||||||
|
+------------+--------------+
|
||||||
|
| X230T | 2.58 |
|
||||||
|
+------------+--------------+
|
||||||
|
| T430 | 2.64 |
|
||||||
|
+------------+--------------+
|
||||||
|
| T430s | 2.59 |
|
||||||
|
+------------+--------------+
|
||||||
|
| T530 | 2.60 |
|
||||||
|
+------------+--------------+
|
||||||
|
| W530 | 2.58 |
|
||||||
|
+------------+--------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
If your BIOS version is equal or lower, skip to the
|
||||||
|
**[Examining protections](#examining-protections-theory)** section. If not,
|
||||||
|
go through the downgrade process, described next.
|
||||||
|
|
||||||
|
## Downgrading BIOS
|
||||||
|
|
||||||
|
Go to the Lenovo web site and download BIOS Update Bootable CD for your
|
||||||
|
machine of needed version (see above).
|
||||||
|
|
||||||
|
Lenovo states that BIOS has "security rollback prevention", meaning once
|
||||||
|
you update it to some version X, you will not be able to downgrade it to
|
||||||
|
pre-X version. That's not true. It seems that this is completely
|
||||||
|
client-side restriction in flashing utilities (both Windows utility and
|
||||||
|
Bootable CD). You just need to call `winflash.exe` or `dosflash.exe`
|
||||||
|
directly. Therefore you need to modify the bootable CD image you just
|
||||||
|
downloaded.
|
||||||
|
|
||||||
|
Extract an El Torito image:
|
||||||
|
|
||||||
|
geteltorito -o ./bios.img g1uj41us.iso
|
||||||
|
|
||||||
|
Mount the partition in that image:
|
||||||
|
|
||||||
|
sudo mount -t vfat ./bios.img /mnt -o loop,offset=16384
|
||||||
|
|
||||||
|
List files, find the `AUTOEXEC.BAT` file and the `FLASH` directory:
|
||||||
|
|
||||||
|
ls /mnt
|
||||||
|
ls /mnt/FLASH
|
||||||
|
|
||||||
|
Inside the `FLASH` directory, there should be a directory called
|
||||||
|
`G1ET93WW` or similar (exact name depends on your ThinkPad model and
|
||||||
|
BIOS version). See what's inside:
|
||||||
|
|
||||||
|
ls /mnt/FLASH/G1ET93WW
|
||||||
|
|
||||||
|
There must be a file with `.FL1` extension called `$01D2000.FL1` or
|
||||||
|
something similar.
|
||||||
|
|
||||||
|
Now open the `AUTOEXEC.BAT` file:
|
||||||
|
|
||||||
|
sudo vim /mnt/AUTOEXEC.BAT
|
||||||
|
|
||||||
|
You will see a list of commands:
|
||||||
|
|
||||||
|
@ECHO OFF
|
||||||
|
PROMPT $p$g
|
||||||
|
cd c:\flash
|
||||||
|
command.com
|
||||||
|
|
||||||
|
Replace the last line (`command.com`) with this (change path to the
|
||||||
|
`.FL1` file according to yours):
|
||||||
|
|
||||||
|
dosflash.exe /sd /file G1ET93WW\$01D2000.FL1
|
||||||
|
|
||||||
|
Save the file, then unmount the partition:
|
||||||
|
|
||||||
|
sudo umount /mnt
|
||||||
|
|
||||||
|
Write this image to a USB drive (replace `/dev/sdX` with your USB drive
|
||||||
|
device name):
|
||||||
|
|
||||||
|
sudo dd if=./bios.img of=/dev/sdX bs=1M
|
||||||
|
|
||||||
|
Now reboot and press F1 to enter BIOS settings. Open the **Startup** tab
|
||||||
|
and set the startup mode to **Legacy** (or **Both**/**Legacy First**):
|
||||||
|
|
||||||
|

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

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

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

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

|

|
||||||
|
|
||||||
```eval_rst
|
The general [flashing tutorial] has more details.
|
||||||
:doc:`../../flash_tutorial/ext_power`
|
|
||||||
```
|
|
||||||
|
|
||||||
Currently, detecting the model of soldered RAM at runtime and loading
|
Currently, detecting the model of soldered RAM at runtime and loading
|
||||||
the corresponding SPD datum from CBFS is not implemented yet. You may
|
the corresponding SPD datum from CBFS is not implemented yet. You may
|
||||||
@ -39,4 +37,4 @@ inteltool, and replace the content of the SPD hex with what is dumped.
|
|||||||
I do not know how to find gpio ports for that, and SPD data stored in
|
I do not know how to find gpio ports for that, and SPD data stored in
|
||||||
vendor firmware.)
|
vendor firmware.)
|
||||||
|
|
||||||
[T420 / T520 / X220 / T420s / W520 common]: xx20_series.md
|
[T420 / T520 / X220 / T420s / W520 common]: Sandy_Bridge_series.md
|
||||||
|
@ -31,15 +31,10 @@ the laptop able to power on.
|
|||||||
## Known Issues
|
## Known Issues
|
||||||
|
|
||||||
- No audio output when using a headphone
|
- No audio output when using a headphone
|
||||||
- The touchpad is misconfigured, the 3 keys on top are all identified
|
|
||||||
as left button
|
|
||||||
- Cannot get the mainboard serial number from the mainboard: the OEM
|
- Cannot get the mainboard serial number from the mainboard: the OEM
|
||||||
UEFI firmware gets the serial number from an "emulated EEPROM" via
|
UEFI firmware gets the serial number from an "emulated EEPROM" via
|
||||||
I/O port 0x1630/0x1634, but it's still unknown how to make it work
|
I/O port 0x1630/0x1634, but it's still unknown how to make it work
|
||||||
|
- The dGPU does not currently work in Windows.
|
||||||
## Untested
|
|
||||||
|
|
||||||
- the dGPU model
|
|
||||||
|
|
||||||
## Working
|
## Working
|
||||||
|
|
||||||
@ -61,6 +56,7 @@ the laptop able to power on.
|
|||||||
- CMOS options: wlan, trackpoint, fn_ctrl_swap
|
- CMOS options: wlan, trackpoint, fn_ctrl_swap
|
||||||
- internal flashing when IFD is unlocked
|
- internal flashing when IFD is unlocked
|
||||||
- using `me_cleaner`
|
- using `me_cleaner`
|
||||||
|
- dGPU (must be enabled in CMOS options)
|
||||||
|
|
||||||
[Lenovo ThinkPad T440p]: https://pcsupport.lenovo.com/us/zh/products/laptops-and-netbooks/thinkpad-t-series-laptops/thinkpad-t440p
|
[Lenovo ThinkPad T440p]: https://pcsupport.lenovo.com/us/zh/products/laptops-and-netbooks/thinkpad-t-series-laptops/thinkpad-t440p
|
||||||
[Hardware Maintenance Manual]: https://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles_pdf/t440p_hmm_en_sp40a25467_04.pdf
|
[Hardware Maintenance Manual]: https://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles_pdf/t440p_hmm_en_sp40a25467_04.pdf
|
||||||
|
38
Documentation/mainboard/lenovo/vboot.md
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# Using coreboot's verified boot on Lenovo devices
|
||||||
|
|
||||||
|
By default a single instance of coreboot is present in the firmware flash,
|
||||||
|
no verification is done and the flash is not write-protected, so as to allow
|
||||||
|
firmware updates from the OS.
|
||||||
|
The verified boot mechanism also called [vboot] allows secure firmware
|
||||||
|
updates using an A/B partitioning scheme once enabled.
|
||||||
|
|
||||||
|
## Enabling vboot
|
||||||
|
You can enable [vboot] in Kconfig's *Security* section. Besides a verified
|
||||||
|
boot you can also enable a measured boot by setting
|
||||||
|
`CONFIG_VBOOT_MEASURED_BOOT`. Both options need a working TPM, which is
|
||||||
|
present on all recent Lenovo devices.
|
||||||
|
|
||||||
|
## Updating and recovery
|
||||||
|
As the A/B partition is writeable you can still update them from the OS.
|
||||||
|
By using the [vboot] mechanism you store a copy of coreboot in the `RO`
|
||||||
|
partition that acts as failsafe in case the regular firmware update, that
|
||||||
|
goes to the `A` or `B` partition fails.
|
||||||
|
|
||||||
|
**Note:** The `RO` partition isn't write-protected by default, therefore you
|
||||||
|
have to enable the protection in the security Kconfig menu by yourself.
|
||||||
|
|
||||||
|
On *Lenovo* devices you can enable the *Fn* key as recovery mode switch, by
|
||||||
|
enabling `CONFIG_H8_FN_KEY_AS_VBOOT_RECOVERY_SW`.
|
||||||
|
Holding the *Fn* at boot will then switch to the recovery image, allowing
|
||||||
|
to boot and flash a working image to the A/B partition.
|
||||||
|
|
||||||
|
## 8 MiB ROM limitation
|
||||||
|
*Lenovo* devices with 8 MiB ROM only have a `RO`+`A` partition enabled in the
|
||||||
|
default FMAP. They are missing the `B` partition, due to size constaints.
|
||||||
|
You can still provide your own FMAP if you need `RO`+`A`+`B` partitions.
|
||||||
|
|
||||||
|
## CMOS
|
||||||
|
[vboot] on *Lenovo* devices uses the CMOS to store configuration data, like
|
||||||
|
boot failures and the last successfully booted partition.
|
||||||
|
|
||||||
|
[vboot]: ../../security/vboot/index.md
|
@ -10,9 +10,7 @@ As all lines except /CS are shared between the flash ICs you can access
|
|||||||
both with an external programmer.
|
both with an external programmer.
|
||||||
|
|
||||||
For more details have a look at [T430 / T530 / X230 / T430s / W530 common] and
|
For more details have a look at [T430 / T530 / X230 / T430s / W530 common] and
|
||||||
```eval_rst
|
the general [flashing tutorial].
|
||||||
:doc:`../../flash_tutorial/ext_power`
|
|
||||||
```
|
|
||||||
|
|
||||||
### After removing the keyboard and palm rest
|
### After removing the keyboard and palm rest
|
||||||
![][w530-1]
|
![][w530-1]
|
||||||
@ -24,4 +22,5 @@ For more details have a look at [T430 / T530 / X230 / T430s / W530 common] and
|
|||||||
|
|
||||||
[w530-2]: w530-2.jpg
|
[w530-2]: w530-2.jpg
|
||||||
|
|
||||||
[T430 / T530 / X230 / T430s / W530 common]: xx30_series.md
|
[flashing tutorial]: ../../flash_tutorial/ext_power.md
|
||||||
|
[T430 / T530 / X230 / T430s / W530 common]: Ivy_Bridge_series.md
|
||||||
|
@ -13,12 +13,10 @@ The flash IC can be a SOIC-8 one or a WSON-8 one, and may be covered with
|
|||||||
a piece of insulation tape.
|
a piece of insulation tape.
|
||||||
|
|
||||||
For more details have a look at [T420 / T520 / X220 / T420s / W520 common] and
|
For more details have a look at [T420 / T520 / X220 / T420s / W520 common] and
|
||||||
|
the general [flashing tutorial].
|
||||||
```eval_rst
|
|
||||||
:doc:`../../flash_tutorial/ext_power`
|
|
||||||
```
|
|
||||||
|
|
||||||
Steps to access the flash IC are described here [X2xx series].
|
Steps to access the flash IC are described here [X2xx series].
|
||||||
|
|
||||||
[X2xx series]: x2xx_series.md
|
[X2xx series]: x2xx_series.md
|
||||||
[T420 / T520 / X220 / T420s / W520 common]: xx20_series.md
|
[flashing tutorial]: ../../flash_tutorial/ext_power.md
|
||||||
|
[T420 / T520 / X220 / T420s / W520 common]: Sandy_Bridge_series.md
|
||||||
|
19
Documentation/mainboard/lenovo/x230s.md
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# ThinkPad Lenovo X230s
|
||||||
|
|
||||||
|
## Disassembly Instructions
|
||||||
|
|
||||||
|
You must remove the following parts to access the SPI flash chip:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
* Base cover
|
||||||
|
|
||||||
|
The [Hardware Maintenance Manual](https://download.lenovo.com/ibmdl/pub/pc/pccbbs/
|
||||||
|
mobiles_pdf/x230s_hmm_en_0c10860_01.pdf) could be used as a guidance of disassembly.
|
||||||
|
|
||||||
|
The SPI flash chip (W25Q128.V in the form of SOIC-8 for the author's X230s, but varying is possible)
|
||||||
|
is located at the circled place.
|
||||||
|
|
||||||
|
Unlike [most Ivy Bridge ThinkPads](Ivy_Bridge_series.md), X230s has a single 16MiB SPI flash chip.
|
||||||
|
|
||||||
|
The general [flashing tutorial](../../flash_tutorial/index.md) has more details.
|
BIN
Documentation/mainboard/lenovo/x230s_bc_removed.jpg
Normal file
After Width: | Height: | Size: 42 KiB |
@ -22,23 +22,26 @@ SOIC-8 one (you might need to add the chip to the IFD VSCC list), as
|
|||||||
what is done in the photo.
|
what is done in the photo.
|
||||||
|
|
||||||
The vendor IFD VSCC list contains:
|
The vendor IFD VSCC list contains:
|
||||||
-MACRONIX_MX25L6405 (0xc2, 0x2017)
|
- MACRONIX_MX25L6405 (0xc2, 0x2017)
|
||||||
-WINBOND_NEX_W25X64 (0xef, 0x3017)
|
- WINBOND_NEX_W25X64 (0xef, 0x3017)
|
||||||
-ATMEL_AT25DF641 (0x1f, 0x4800)
|
- ATMEL_AT25DF641 (0x1f, 0x4800)
|
||||||
|
|
||||||
|
The general [flashing tutorial] has more details.
|
||||||
|
|
||||||
```eval_rst
|
|
||||||
:doc:`../../flash_tutorial/ext_power`
|
|
||||||
```
|
|
||||||
Tested:
|
Tested:
|
||||||
- CPU Core 2 Duo U9400
|
- Core 2 Duo U9400 CPU
|
||||||
- Slotted DIMM 4GiB*2 from samsung
|
- Slotted DIMM 4GiB*2 from Samsung
|
||||||
- Camera
|
- Camera
|
||||||
- pci-e slots
|
- PCI-e slots
|
||||||
- sata and usb2
|
- SATA and USB2
|
||||||
- libgfxinit-based graphic init
|
- libgfxinit-based graphics init
|
||||||
- NVRAM options for North and South bridges
|
- NVRAM options for North and South bridges
|
||||||
- Sound
|
- Sound
|
||||||
- Thinkpad EC
|
- ThinkPad EC
|
||||||
- S3
|
- S3
|
||||||
- Linux 4.19.67-2 within Debian GNU/Linux stable, loaded from
|
- Linux 4.19.67-2 within Debian GNU/Linux stable, loaded from
|
||||||
Linux payload (Heads) and Seabios.
|
Linux payload (Heads) and SeaBIOS.
|
||||||
|
|
||||||
|
|
||||||
|
[flashing tutorial]: ../../flash_tutorial/ext_power.md
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 313 KiB After Width: | Height: | Size: 174 KiB |
@ -1,48 +0,0 @@
|
|||||||
# Lenovo Sandy Bridge series
|
|
||||||
|
|
||||||
## Flashing coreboot
|
|
||||||
```eval_rst
|
|
||||||
+---------------------+--------------------+
|
|
||||||
| Type | Value |
|
|
||||||
+=====================+====================+
|
|
||||||
| Socketed flash | no |
|
|
||||||
+---------------------+--------------------+
|
|
||||||
| Size | 8 MiB |
|
|
||||||
+---------------------+--------------------+
|
|
||||||
| In circuit flashing | Yes |
|
|
||||||
+---------------------+--------------------+
|
|
||||||
| Package | SOIC-8 |
|
|
||||||
+---------------------+--------------------+
|
|
||||||
| Write protection | No |
|
|
||||||
+---------------------+--------------------+
|
|
||||||
| Dual BIOS feature | No |
|
|
||||||
+---------------------+--------------------+
|
|
||||||
| Internal flashing | Yes |
|
|
||||||
+---------------------+--------------------+
|
|
||||||
```
|
|
||||||
|
|
||||||
## Installation instructions
|
|
||||||
* Update the EC firmware, as there's no support for EC updates in coreboot.
|
|
||||||
* Do **NOT** accidently swap pins or power on the board while a SPI flasher
|
|
||||||
is connected. It will destroy your device.
|
|
||||||
* It's recommended to only flash the BIOS region. In that case you don't
|
|
||||||
need to extract blobs from vendor firmware.
|
|
||||||
If you want to flash the whole chip, you need blobs when building
|
|
||||||
coreboot.
|
|
||||||
* The shipped *Flash layout* allocates 3MiB to the BIOS region, which is the space
|
|
||||||
usable by coreboot.
|
|
||||||
* ROM chip size should be set to 8MiB.
|
|
||||||
|
|
||||||
```eval_rst
|
|
||||||
Please also have a look at :doc:`../../flash_tutorial/index`.
|
|
||||||
```
|
|
||||||
|
|
||||||
## Flash layout
|
|
||||||
There's one 8MiB flash which contains IFD, GBE, ME and BIOS regions.
|
|
||||||
On Lenovo's UEFI the EC firmware update is placed at the start of the BIOS
|
|
||||||
region. The update is then written into the EC once.
|
|
||||||
|
|
||||||
![][fl]
|
|
||||||
|
|
||||||
[fl]: flashlayout_xx20.svg
|
|
||||||
|
|
@ -1,76 +0,0 @@
|
|||||||
# Lenovo Ivy Bridge series
|
|
||||||
|
|
||||||
## Flashing coreboot
|
|
||||||
```eval_rst
|
|
||||||
+---------------------+--------------------------------+
|
|
||||||
| Type | Value |
|
|
||||||
+=====================+================================+
|
|
||||||
| Socketed flash | no |
|
|
||||||
+---------------------+--------------------------------+
|
|
||||||
| Size | 8 MiB + 4MiB |
|
|
||||||
+---------------------+--------------------------------+
|
|
||||||
| In circuit flashing | Yes |
|
|
||||||
+---------------------+--------------------------------+
|
|
||||||
| Package | SOIC-8 |
|
|
||||||
+---------------------+--------------------------------+
|
|
||||||
| Write protection | No |
|
|
||||||
+---------------------+--------------------------------+
|
|
||||||
| Dual BIOS feature | No |
|
|
||||||
+---------------------+--------------------------------+
|
|
||||||
| Internal flashing | Yes |
|
|
||||||
+---------------------+--------------------------------+
|
|
||||||
```
|
|
||||||
|
|
||||||
## Installation instructions
|
|
||||||
* Update the EC firmware, as there's no support for EC updates in coreboot.
|
|
||||||
* Do **NOT** accidently swap pins or power on the board while a SPI flasher
|
|
||||||
is connected. It will permanently brick your device.
|
|
||||||
* It's recommended to only flash the BIOS region. In that case you don't
|
|
||||||
need to extract blobs from vendor firmware.
|
|
||||||
If you want to flash the whole chip, you need blobs when building
|
|
||||||
coreboot.
|
|
||||||
* The *Flash layout* shows that by default 7MiB of space are available for
|
|
||||||
the use with coreboot.
|
|
||||||
* In that case you only want to use a part of the BIOS region that must not
|
|
||||||
exceed 4MiB in size, which means CONFIG_CBFS_SIZE must be smaller than 4MiB.
|
|
||||||
* ROM chip size should be set to 12MiB.
|
|
||||||
|
|
||||||
```eval_rst
|
|
||||||
Please also have a look at :doc:`../../flash_tutorial/index`.
|
|
||||||
```
|
|
||||||
|
|
||||||
## Splitting the coreboot.rom
|
|
||||||
|
|
||||||
To split the coreboot.rom into two images (one for the 8MiB and one for the
|
|
||||||
4 MiB flash IC), run the following commands:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
dd of=top.rom bs=1M if=build/coreboot.rom skip=8
|
|
||||||
dd of=bottom.rom bs=1M if=build/coreboot.rom count=8
|
|
||||||
```
|
|
||||||
|
|
||||||
That gives one ROM for each flash IC, where *top.rom* is the upper part of the
|
|
||||||
flash image, that resides on the 4 MiB flash and *bottom.rom* is the lower part
|
|
||||||
of the flash image, that resides on the 8 MiB flash.
|
|
||||||
|
|
||||||
## Dumping a full ROM
|
|
||||||
|
|
||||||
If you flash externally you need to read both flash chips to get two images
|
|
||||||
(one for the 8MiB and one for the 4 MiB flash IC), and then run the following
|
|
||||||
command to concatenate the files:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cat bottom.rom top.rom > firmware.rom
|
|
||||||
```
|
|
||||||
|
|
||||||
## Flash layout
|
|
||||||
There's one 8MiB and one 4 MiB flash which contains IFD, GBE, ME and
|
|
||||||
BIOS region. These two flash ICs appear as a single 12MiB when flashing
|
|
||||||
internally.
|
|
||||||
On Lenovo's UEFI the EC firmware update is placed at the start of the BIOS
|
|
||||||
region. The update is then written into the EC once.
|
|
||||||
|
|
||||||
![][fl]
|
|
||||||
|
|
||||||
[fl]: flashlayout_xx30.svg
|
|
||||||
|
|
BIN
Documentation/mainboard/libretrend/lt1000.jpg
Normal file
After Width: | Height: | Size: 78 KiB |
117
Documentation/mainboard/libretrend/lt1000.md
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
# Libretrend LT1000
|
||||||
|
|
||||||
|
This page describes how to run coreboot on the [Libretrend LT1000] (aka
|
||||||
|
Librebox).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Required proprietary blobs
|
||||||
|
|
||||||
|
To build a minimal working coreboot image some blobs are required (assuming
|
||||||
|
only the BIOS region is being modified).
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+-----------------+---------------------------------+---------------------+
|
||||||
|
| Binary file | Apply | Required / Optional |
|
||||||
|
+=================+=================================+=====================+
|
||||||
|
| FSP-M, FSP-S | Intel Firmware Support Package | Required |
|
||||||
|
+-----------------+---------------------------------+---------------------+
|
||||||
|
| microcode | CPU microcode | Required |
|
||||||
|
+-----------------+---------------------------------+---------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
FSP-M and FSP-S are obtained after splitting the Kaby Lake FSP binary (done
|
||||||
|
automatically by coreboot build system and included into the image) from the
|
||||||
|
*3rdparty/fsp* submodule.
|
||||||
|
|
||||||
|
Microcode updates are automatically included into the coreboot image by build
|
||||||
|
system from the *3rdparty/intel-microcode* submodule.
|
||||||
|
|
||||||
|
The mainboard code also contains a VBT file (version 1.00, BDB version 2.09)
|
||||||
|
which is automatically included into the image by coreboot build system.
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
### Internal programming
|
||||||
|
|
||||||
|
The main SPI flash can be accessed using [flashrom]. It is strongly advised to
|
||||||
|
flash only the BIOS region if not having an external programmer, see known
|
||||||
|
issues.
|
||||||
|
|
||||||
|
### External programming
|
||||||
|
|
||||||
|
The system has an internal flash chip which is a 8 MiB soldered SOIC-8 chip.
|
||||||
|
This chip is located on the top middle side of the board near the CPU fan,
|
||||||
|
between the DIMM slots and the M.2 disk. Use a clip (or solder the wires) to
|
||||||
|
program the chip. Specifically, it's a Winbond W25Q64FV (3.3V) -
|
||||||
|
[datasheet][W25Q64FV].
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
|
||||||
|
- Fastboot (MRC cache) is not working reliably (missing schematics for CPU to
|
||||||
|
DIMM wiring).
|
||||||
|
- Flashing ME region with already cleaned ME firmware may lead to platform not
|
||||||
|
booting, flashing full ME firmware is needed to recover.
|
||||||
|
- In order to have the USB device wake support from S3 state using the front
|
||||||
|
USB 3.0 ports, one has to move the jumper on DUSB1_PWR_SET header (it will
|
||||||
|
switch the power rails for the USB 3.0 ports).
|
||||||
|
- There are 6 unknown GPIO pins on the board.
|
||||||
|
|
||||||
|
## Untested
|
||||||
|
|
||||||
|
Not all mainboard's peripherals and functions were tested because of lack of
|
||||||
|
the cables or not being populated on the board case.
|
||||||
|
|
||||||
|
- LVDS header
|
||||||
|
- Onboard USB 2.0 and USB 3.0 headers
|
||||||
|
- Speakers and mic header
|
||||||
|
- SPDIF header
|
||||||
|
- Audio header
|
||||||
|
- PS/2 header
|
||||||
|
- LPT header
|
||||||
|
- CIR (infrared header)
|
||||||
|
- COM2 port RS485 mode (RS232/RS485 mode is controlled via jumper)
|
||||||
|
- SYS_FAN header
|
||||||
|
|
||||||
|
## Working
|
||||||
|
|
||||||
|
- USB
|
||||||
|
- Ethernet
|
||||||
|
- Integrated graphics (with libgfxinit) on VGA and HDMI ports
|
||||||
|
- flashrom
|
||||||
|
- PCIe
|
||||||
|
- NVMe
|
||||||
|
- WiFi and Bluetooth
|
||||||
|
- SATA
|
||||||
|
- Serial ports 1-6
|
||||||
|
- SMBus
|
||||||
|
- HDA (verbs not implemented yet, but works under GNU/Linux (4.15 tested))
|
||||||
|
- Initialization with KBL FSP 2.0
|
||||||
|
- SeaBIOS payload (version rel-1.13.0)
|
||||||
|
- TPM2 ([custom module] connected to LPC DEBUG header)
|
||||||
|
- Automatic fan control
|
||||||
|
- Platform boots with cleaned ME (MFS partition must be left on SPI flash)
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
The platform contains an LR-i7S65T1 baseboard (LR-i7S65T2 with two NICs not
|
||||||
|
sold yet). More details on [baseboard site]. Unfortunately the board manual is
|
||||||
|
not publicly available.
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| CPU | Intel Core i7-6500U |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| PCH | Skylake-U Premium |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O | ITE IT8786E |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Coprocessor | Intel Management Engine |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
[Libretrend LT1000]: https://libretrend.com/specs/librebox/
|
||||||
|
[W25Q64FV]: https://www.winbond.com/resource-files/w25q64fv%20revs%2007182017.pdf
|
||||||
|
[flashrom]: https://flashrom.org/Flashrom
|
||||||
|
[baseboard site]: http://www.minicase.net/product_LR-i7S65T1.html
|
||||||
|
[custom module]: https://shop.3mdeb.com/product/tpm2-module-for-librebox/
|
@ -75,7 +75,7 @@ Put all back in place and restart the board. It might need 1-2 AC power cycles
|
|||||||
to reinitialize (running at full fan speed - don't panic).
|
to reinitialize (running at full fan speed - don't panic).
|
||||||
* External flashing has been tested with RPi2 without main power connected.
|
* External flashing has been tested with RPi2 without main power connected.
|
||||||
3.3V provided by RPi2. Read more about flashing methods [here](https://doc.coreboot.org/flash_tutorial/index.html).
|
3.3V provided by RPi2. Read more about flashing methods [here](https://doc.coreboot.org/flash_tutorial/index.html).
|
||||||
* In case of going back to proprietary BIOS create/save cmos settings as early
|
* In case of going back to proprietary BIOS create/save CMOS settings as early
|
||||||
as possible (do not leave BIOS on first start without saving settings).
|
as possible (do not leave BIOS on first start without saving settings).
|
||||||
The BIOS might corrupt nvram (not cmos!) and leave the system in a dead state
|
The BIOS might corrupt nvram (not cmos!) and leave the system in a dead state
|
||||||
that needs an external flasher to revive. If stuck, reset the Fintek (see
|
that needs an external flasher to revive. If stuck, reset the Fintek (see
|
||||||
|
128
Documentation/mainboard/ocp/deltalake.md
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
# OCP Delta Lake
|
||||||
|
|
||||||
|
This page describes coreboot support status for the [OCP] (Open Compute Project)
|
||||||
|
Delta Lake server platform.
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
OCP Delta Lake server platform is a component of multi-host server system
|
||||||
|
Yosemite-V3. Both were announced by Facebook and Intel in [OCP virtual summit 2020].
|
||||||
|
|
||||||
|
Delta Lake server is a single socket Cooper Lake Scalable Processor server.
|
||||||
|
|
||||||
|
Yosemite-V3 has multiple configurations. Depending on configurations, it may
|
||||||
|
host up to 4 Delta Lake servers in one sled.
|
||||||
|
|
||||||
|
Yosemite-V3 and Delta Lake are currently in DVT phase. Facebook, Intel and partners
|
||||||
|
jointly develop FSP/coreboot/LinuxBoot stack on Delta Lake as an alternative solution.
|
||||||
|
|
||||||
|
## Required blobs
|
||||||
|
|
||||||
|
This board currently requires:
|
||||||
|
- FSP blob: The blob (Intel Cooper Lake Scalable Processor Firmware Support Package)
|
||||||
|
is not yet available to the public. It will be made public some time after the MP
|
||||||
|
(Mass Production) of CooperLake Scalable Processor when the FSP is mature.
|
||||||
|
- Microcode: Not yet available to the public.
|
||||||
|
- ME binary: Not yet available to the public.
|
||||||
|
|
||||||
|
## Payload
|
||||||
|
- LinuxBoot: This is necessary only if you use LinuxBoot as coreboot payload.
|
||||||
|
U-root as initramfs, is used in the joint development. It can be built
|
||||||
|
following [All about u-root].
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
To do in-band FW image update, use [flashrom]:
|
||||||
|
flashrom -p internal:ich_spi_mode=hwseq -c "Opaque flash chip" --ifd \
|
||||||
|
-i bios --noverify-all -w <path to coreboot image>
|
||||||
|
|
||||||
|
From OpenBMC, to update FW image:
|
||||||
|
fw-util slotx --update bios <path to coreboot image>
|
||||||
|
|
||||||
|
To power off/on the host:
|
||||||
|
power-util slotx off
|
||||||
|
power-util slotx on
|
||||||
|
|
||||||
|
To connect to console through SOL (Serial Over Lan):
|
||||||
|
sol-util slotx
|
||||||
|
|
||||||
|
## Working features
|
||||||
|
The solution is developed using LinuxBoot payload with Linux kernel 5.2.9, and [u-root]
|
||||||
|
as initramfs.
|
||||||
|
- SMBIOS:
|
||||||
|
- Type 0 -- BIOS Information
|
||||||
|
- Type 1 -- System Information
|
||||||
|
- Type 2 -- Baseboard Information
|
||||||
|
- Type 3 -- System Enclosure or Chassis
|
||||||
|
- Type 4 -- Processor Information
|
||||||
|
- Type 8 -- Port Connector Information
|
||||||
|
- Type 9 -- PCI Slot Information
|
||||||
|
- Type 11 -- OEM String
|
||||||
|
- Type 13 -- BIOS Language Information
|
||||||
|
- Type 16 -- Physical Memory Array
|
||||||
|
- Type 19 -- Memory Array Mapped Address
|
||||||
|
- Type 127 -- End-of-Table
|
||||||
|
|
||||||
|
- BMC integration:
|
||||||
|
- BMC readiness check
|
||||||
|
- IPMI commands
|
||||||
|
- watchdog timer
|
||||||
|
- POST complete pin acknowledgement
|
||||||
|
- SEL record generation
|
||||||
|
- Early serial output
|
||||||
|
- port 80h direct to GPIO
|
||||||
|
- ACPI tables: APIC/DSDT/FACP/FACS/HPET/MCFG/SPMI/SRAT/SLIT/SSDT
|
||||||
|
- Skipping memory training upon subsequent reboots by using MRC cache
|
||||||
|
- BMC crash dump
|
||||||
|
- Error injection through ITP
|
||||||
|
|
||||||
|
## Firmware configurations
|
||||||
|
[ChromeOS VPD] is used to store most of the firmware configurations.
|
||||||
|
RO_VPD region holds default values, while RW_VPD region holds customized
|
||||||
|
values.
|
||||||
|
|
||||||
|
VPD variables supported are:
|
||||||
|
- firmware_version: This variable holds overall firmware version. coreboot
|
||||||
|
uses that value to populate smbios type 1 version field.
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
- Even though CPX-SP FSP is based on FSP 2.2 framework, it does not
|
||||||
|
support FSP_USES_CB_STACK. An IPS ticket is filed with Intel.
|
||||||
|
- VT-d is not supported. An IPS ticket is filed with Intel.
|
||||||
|
- PCIe bifuration is not supported. An IPS ticket is filed with Intel.
|
||||||
|
- ME based power capping. This is a bug in ME. An IPS ticket is filed
|
||||||
|
with Intel.
|
||||||
|
- RO_VPD region as well as other RO regions are not write protected.
|
||||||
|
- HECI is not set up correctly, so BMC is not able to get PCH and DIMM
|
||||||
|
temperature sensor readings.
|
||||||
|
|
||||||
|
## Feature gaps
|
||||||
|
- Delta Lake DVT is not supported, as we only have Delta Lake EVT servers
|
||||||
|
at the moment.
|
||||||
|
- SMBIOS:
|
||||||
|
- Type 7 -- Cache Information
|
||||||
|
- Type 17 -- Memory Device
|
||||||
|
- Type 38 -- IPMI Device Information
|
||||||
|
- Type 41 -- Onboard Devices Extended Information
|
||||||
|
- ACPI:
|
||||||
|
- DMAR
|
||||||
|
- PFR/CBnT
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------------+---------------------------------------------+
|
||||||
|
| Processor (1 socket) | Intel Cooper Lake Scalable Processor |
|
||||||
|
+------------------------+---------------------------------------------+
|
||||||
|
| BMC | Aspeed AST 2500 |
|
||||||
|
+------------------------+---------------------------------------------+
|
||||||
|
| PCH | Intel Lewisburg C621 |
|
||||||
|
+------------------------+---------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
[OCP]: https://www.opencompute.org
|
||||||
|
[OCP virtual summit 2020]: https://www.opencompute.org/summit/virtual-summit/schedule
|
||||||
|
[flashrom]: https://flashrom.org/Flashrom
|
||||||
|
[All about u-root]: https://github.com/linuxboot/book/tree/master/u-root
|
||||||
|
[u-root]: https://u-root.org/
|
||||||
|
[ChromeOS VPD]: https://chromium.googlesource.com/chromiumos/platform/vpd/+/master/README.md
|
100
Documentation/mainboard/ocp/tiogapass.md
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
# OCP Tioga Pass
|
||||||
|
|
||||||
|
This page describes coreboot support status for the [OCP] (Open Compute Project)
|
||||||
|
Tioga Pass server platform.
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
OCP Tioga Pass server platform was contributed by Facebook, and was accepted
|
||||||
|
in 2019. The design collateral including datasheet can be found at [OCP Tioga Pass].
|
||||||
|
|
||||||
|
Since complete EE design collateral is open sourced, anyone can build server
|
||||||
|
as-is or a variant based on the original design. It can also be purchased from [OCP Market Place].
|
||||||
|
An off-the-shelf version is available, as well as rack ready version. With the
|
||||||
|
off-the-shelf version, the server can be plugged into wall power outlet.
|
||||||
|
|
||||||
|
With the off-the-shelf version of Tioga Pass, a complete software solution is
|
||||||
|
available. [Off-the-shelf Host Firmware] takes the approach of UEFI/Linuxboot.
|
||||||
|
|
||||||
|
coreboot as of release 4.13 is a proof-of-concept project between Facebook,
|
||||||
|
Intel, Wiwynn and Quanta. The context is described at [OCP Tioga Pass POC Blog].
|
||||||
|
|
||||||
|
## Required blobs
|
||||||
|
|
||||||
|
This board currently requires:
|
||||||
|
- FSP blob: The blob (Intel Skylake Scalable Processor Firmware Support Package)
|
||||||
|
is not yet available to the public. The binary is at POC status, hopefully
|
||||||
|
someday an IBV is able to obtain the privilege to maintain it.
|
||||||
|
- Microcode: `3rdparty/intel-microcode/intel-ucode/06-55-04`
|
||||||
|
- ME binary: The binary can be extracted from [Off-the-shelf Host Firmware].
|
||||||
|
|
||||||
|
## Payload
|
||||||
|
- Linuxboot: This is necessary only if you use Linuxboot as coreboot payload.
|
||||||
|
U-root as initramfs, is used in the POC activity. It can be extracted from
|
||||||
|
[Off-the-shelf Host Firmware], or it can be built following [All about u-root].
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
To do in-band FW image update, use [flashrom]:
|
||||||
|
flashrom -p internal:ich_spi_mode=hwseq -c "Opaque flash chip" --ifd \
|
||||||
|
-i bios --noverify-all -w <path to coreboot image>
|
||||||
|
|
||||||
|
From OpenBMC, to update FW image:
|
||||||
|
fw-util mb --force --update <path to coreboot image>
|
||||||
|
|
||||||
|
To power off/on the host:
|
||||||
|
power-util mb off
|
||||||
|
power-util mb on
|
||||||
|
|
||||||
|
To connect to console through SOL (Serial Over Lan):
|
||||||
|
sol-util mb
|
||||||
|
|
||||||
|
## Known issues / feature gaps
|
||||||
|
- C6 state is not supported. Workaround is to disable C6 support through
|
||||||
|
target OS and Linuxboot kernel paramter, such as "cpuidle.off=1".
|
||||||
|
- SMI handlers are not implemented.
|
||||||
|
- xSDT tables are not fully populated, such as processor/socket devices,
|
||||||
|
PCIe bridge devices.
|
||||||
|
- There is boot stability issue. Occasionally the boot hangs at ramstage
|
||||||
|
with following message "BIOS PCU Misc Config Read timed out."
|
||||||
|
- If [CB 40500 patchset] is not merged, when PCIe riser card is used,
|
||||||
|
boot fails.
|
||||||
|
- PCIe devices connected to socket 1 may not work, because FSP
|
||||||
|
does not support PCIe topology input for socket 1.k
|
||||||
|
- SMBIOS type 7 and type 17 are not populated.
|
||||||
|
|
||||||
|
## Working
|
||||||
|
The solution was developed using Linuxboot payload. The Linuxboot
|
||||||
|
kernel versions tried are 4.16.18 and 5.2.9. The initramfs image is
|
||||||
|
u-root.
|
||||||
|
- Most SMBIOS types
|
||||||
|
- BMC integration:
|
||||||
|
- BMC readiness check
|
||||||
|
- IPMI commands
|
||||||
|
- watchdog timer
|
||||||
|
- POST complete pin acknowledgement
|
||||||
|
- SEL record generation
|
||||||
|
- Early serial output
|
||||||
|
- port 80h direct to GPIO
|
||||||
|
- ACPI tables: APIC/DMAR/DSDT/FACP/FACS/HPET/MCFG/SPMI/SRAT/SLIT/SSDT
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------------+---------------------------------------------+
|
||||||
|
| Processor (2 sockets) | Intel Skylake Scalable Processor LGA3647 |
|
||||||
|
+------------------------+---------------------------------------------+
|
||||||
|
| BMC | Aspeed AST 2500 |
|
||||||
|
+------------------------+---------------------------------------------+
|
||||||
|
| PCH | Intel Lewisburg C621 |
|
||||||
|
+------------------------+---------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
[flashrom]: https://flashrom.org/Flashrom
|
||||||
|
[OCP]: https://www.opencompute.org/
|
||||||
|
[OCP Tioga Pass]: https://www.opencompute.org/contributions?query=Tioga%20Pass%20v1.0
|
||||||
|
[OCP Market Place]: https://www.opencompute.org/products/109/wiwynn-tioga-pass-advanced-2u-ocp-server-up-to-768gb-12-dimm-slots-4-ssds-for-io-performance
|
||||||
|
[Off-the-shelf Host Firmware]: https://github.com/linuxboot/book/blob/master/case_studies/TiogaPass/README.md
|
||||||
|
[OCP Tioga Pass POC Blog]: https://www.opencompute.org/blog/linux-firmware-boots-up-server-powered-by-intelr-xeonr-scalable-processor
|
||||||
|
[All about u-root]: https://github.com/linuxboot/book/tree/master/u-root
|
||||||
|
[CB 40500 patchset]: https://review.coreboot.org/c/coreboot/+/40500
|
@ -67,7 +67,7 @@ serial/video/pcie ports might be available.
|
|||||||
+------------------+--------------------------------------------------+
|
+------------------+--------------------------------------------------+
|
||||||
| CPU | Intel Braswell (N3710) |
|
| CPU | Intel Braswell (N3710) |
|
||||||
+------------------+--------------------------------------------------+
|
+------------------+--------------------------------------------------+
|
||||||
| Super I/O, EC | ITE8256 |
|
| Super I/O, EC | ITE8528 |
|
||||||
+------------------+--------------------------------------------------+
|
+------------------+--------------------------------------------------+
|
||||||
| Coprocessor | Intel Management Engine |
|
| Coprocessor | Intel Management Engine |
|
||||||
+------------------+--------------------------------------------------+
|
+------------------+--------------------------------------------------+
|
||||||
|
54
Documentation/mainboard/prodrive/hermes.md
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
# Hermes
|
||||||
|
|
||||||
|
Hermes is a regular ATX board designed for workstation PCs.
|
||||||
|
|
||||||
|
The board features:
|
||||||
|
* 5 PCIe 16x Gen3 slots
|
||||||
|
* 4 ECC capable DDR4 DIMMs
|
||||||
|
* 5 dedicated Ethernet ports
|
||||||
|
* 1 BMC Ethernet port
|
||||||
|
* VGA
|
||||||
|
* COM port
|
||||||
|
* 2 COM port headers
|
||||||
|
* 4 SATA ports,
|
||||||
|
* NVMe M2 slot
|
||||||
|
* CNVi M2 slot
|
||||||
|
* 3 optional DisplayPort outputs
|
||||||
|
* optional TPM2
|
||||||
|
|
||||||
|
## Required proprietary blobs
|
||||||
|
|
||||||
|
- [Intel FSP2.0]
|
||||||
|
- Intel SPS
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
* The BIOS flash can be updated over the BMC, but the update file has a proprietary format
|
||||||
|
* For development a dediprog compatible pinheader is present which allows to use an EM100
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
|
||||||
|
- MRC caching does not work on cold boot with Intel SPS (see [Intel FSP2.0])
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| CPU | CoffeeLake + CoffeeLake R (Core + Xeon) |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| PCH | Intel C246 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Coprocessor | Intel SPS (server version of the ME) |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O | none |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| BMC | Aspeed AST2500 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Extra links
|
||||||
|
|
||||||
|
[flashrom]: https://flashrom.org/Flashrom
|
||||||
|
[flashing tutorial]: ../../../../flash_tutorial/ext_power.md
|
||||||
|
[Intel FSP2.0]: ../../../../soc/intel/fsp/index.md
|
||||||
|
[AST2500]: https://www.aspeedtech.com/products.php?fPath=20&rId=440
|
BIN
Documentation/mainboard/protectli/fw2b.jpg
Normal file
After Width: | Height: | Size: 51 KiB |
128
Documentation/mainboard/protectli/fw2b_fw4b.md
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
# Protectli Vault FW2B and FW4B
|
||||||
|
|
||||||
|
This page describes how to run coreboot on the [Protectli FW2B] and
|
||||||
|
[Protectli FW4B].
|
||||||
|
|
||||||
|
|
||||||
|
## Required proprietary blobs
|
||||||
|
|
||||||
|
To build a minimal working coreboot image some blobs are required (assuming
|
||||||
|
only the BIOS region is being modified).
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+-----------------+---------------------------------+---------------------+
|
||||||
|
| Binary file | Apply | Required / Optional |
|
||||||
|
+=================+=================================+=====================+
|
||||||
|
| FSP | Intel Firmware Support Package | Required |
|
||||||
|
+-----------------+---------------------------------+---------------------+
|
||||||
|
| microcode | CPU microcode | Required |
|
||||||
|
+-----------------+---------------------------------+---------------------+
|
||||||
|
| vgabios | VGA Option ROM | Optional |
|
||||||
|
+-----------------+---------------------------------+---------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
FSP is automatically added by coreboot build system into the image) from the
|
||||||
|
`3rdparty/fsp` submodule.
|
||||||
|
|
||||||
|
microcode updates are automatically included into the coreboot image by build
|
||||||
|
system from the `3rdparty/intel-microcode` submodule.
|
||||||
|
|
||||||
|
VGA Option ROM is not required to boot, but if one needs graphics in pre-OS
|
||||||
|
stage, it should be included.
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
### Internal programming
|
||||||
|
|
||||||
|
The main SPI flash can be accessed using [flashrom].
|
||||||
|
|
||||||
|
### External programming
|
||||||
|
|
||||||
|
The system has an internal flash chip which is a 8 MiB soldered SOIC-8 chip.
|
||||||
|
This chip is located on the bottom side of the case (the radiator side). One
|
||||||
|
has to remove all screws (in order): 4 top cover screws, 4 side cover screws
|
||||||
|
(one side is enough), 4 mainboard screws, 3 CPU screws (under the DIMM). Lift
|
||||||
|
up the mainboard and turn around it. The flash chip is near the mainboard edge
|
||||||
|
close to the Ethernet Controllers. Use a clip (or solder the wires) to program
|
||||||
|
the chip. **Watch out on the voltage, the SPI operates at 1.8V!** Specifically,
|
||||||
|
it's a Macronix MX25U6435F (1.8V) - [datasheet][MX25U6435F].
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
|
||||||
|
- After flashing with external programmer the board will not boot if flashed
|
||||||
|
the BIOS region only. For some reason it is required to flash whole image
|
||||||
|
along with TXE region.
|
||||||
|
- USB 3.0 ports get detected very late in SeaBIOS, it needs huge timeout
|
||||||
|
values in order to get the devices detected.
|
||||||
|
|
||||||
|
## Untested
|
||||||
|
|
||||||
|
Not all mainboard's peripherals and functions were tested because of lack of
|
||||||
|
the cables or not being populated on the board case.
|
||||||
|
|
||||||
|
- internal USB 2.0 header
|
||||||
|
|
||||||
|
## Working
|
||||||
|
|
||||||
|
- USB 3.0 front ports (SeaBIOS and Linux)
|
||||||
|
- 4 Ethernet ports (2 Ethernet ports on FW2B)
|
||||||
|
- 2 HDMI ports with VGA Option ROM
|
||||||
|
- 2 HDMI ports with libgfxinit
|
||||||
|
- flashrom
|
||||||
|
- PCIe WiFi
|
||||||
|
- SATA and mSATA
|
||||||
|
- Super I/O serial port 0 (RS232 via front RJ45 connector)
|
||||||
|
- SMBus (reading SPD from DIMMs)
|
||||||
|
- initialization with Braswell FSP
|
||||||
|
- SeaBIOS payload (version rel-1.13.0)
|
||||||
|
|
||||||
|
- booting Debian, Ubuntu, FreeBSD
|
||||||
|
|
||||||
|
## Not working
|
||||||
|
|
||||||
|
- mPCIe debug card connected to mSATA (mSATA slot has LPC signals routed,
|
||||||
|
however for some reason the debug card is not powered)
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
The mainboard has two variants: FW2B and FW4B. They have different Braswell
|
||||||
|
SoC. The FW2B replaces 2 out of 4 Ethernet Controllers with 4 USB ports
|
||||||
|
connected via [FE1.1 USB 2.0 hub].
|
||||||
|
|
||||||
|
- FW2B:
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| CPU | Intel Celeron J3060 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| PCH | Braswell |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O | ITE IT8613E |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Coprocessor | Intel Trusted Execution Engine |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- FW4B:
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| CPU | Intel Celeron J3160 |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| PCH | Braswell |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O | ITE IT8613E |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Coprocessor | Intel Trusted Execution Engine |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
[Protectli FW2B]: https://protectli.com/vault-2-port/
|
||||||
|
[Protectli FW4B]: https://protectli.com/product/fw4b/
|
||||||
|
[MX25U6435F]: https://www.macronix.com/Lists/Datasheet/Attachments/7411/MX25U6435F,%201.8V,%2064Mb,%20v1.5.pdf
|
||||||
|
[FE1.1 USB 2.0 hub]: https://cdn-shop.adafruit.com/product-files/2991/FE1.1s+Data+Sheet+(Rev.+1.0).pdf
|
||||||
|
[flashrom]: https://flashrom.org/Flashrom
|
BIN
Documentation/mainboard/protectli/fw4b.jpg
Normal file
After Width: | Height: | Size: 58 KiB |
BIN
Documentation/mainboard/protectli/fw6.jpg
Normal file
After Width: | Height: | Size: 49 KiB |
137
Documentation/mainboard/protectli/fw6.md
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
# Protectli Vault FW6 series
|
||||||
|
|
||||||
|
This page describes how to run coreboot on the [Protectli FW6].
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Required proprietary blobs
|
||||||
|
|
||||||
|
To build a minimal working coreboot image some blobs are required (assuming
|
||||||
|
only the BIOS region is being modified).
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+-----------------+---------------------------------+---------------------+
|
||||||
|
| Binary file | Apply | Required / Optional |
|
||||||
|
+=================+=================================+=====================+
|
||||||
|
| FSP-M, FSP-S | Intel Firmware Support Package | Required |
|
||||||
|
+-----------------+---------------------------------+---------------------+
|
||||||
|
| microcode | CPU microcode | Required |
|
||||||
|
+-----------------+---------------------------------+---------------------+
|
||||||
|
| vgabios | VGA Option ROM | Optional |
|
||||||
|
+-----------------+---------------------------------+---------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
FSP-M and FSP-S are obtained after splitting the Kaby Lake FSP binary (done
|
||||||
|
automatically by the coreboot build system and included into the image) from
|
||||||
|
the `3rdparty/fsp` submodule.
|
||||||
|
|
||||||
|
Microcode updates are automatically included into the coreboot image by build
|
||||||
|
system from the `3rdparty/intel-microcode` submodule.
|
||||||
|
|
||||||
|
VGA Option ROM is not required to boot, but if one needs graphics in pre-OS
|
||||||
|
stage, it should be included (if not using libgfxinit).
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
### Internal programming
|
||||||
|
|
||||||
|
The main SPI flash can be accessed using [flashrom]. The first version
|
||||||
|
supporting the chipset is flashrom v1.1. Firmware an be easily flashed
|
||||||
|
with internal programmer (either BIOS region or full image).
|
||||||
|
|
||||||
|
### External programming
|
||||||
|
|
||||||
|
The system has an internal flash chip which is a 8 MiB soldered SOIC-8 chip.
|
||||||
|
This chip is located on the bottom side of the case (the radiator side). One
|
||||||
|
has to remove all screws (in order): 4 top cover screws, 4 side cover screws
|
||||||
|
(one side is enough), 4 mainboard screws, 4 CPU screws (under DIMMs). Lift up
|
||||||
|
the mainboard and turn around it. The flash chip is near the SoC on the DIMM
|
||||||
|
slots side. Use a clip (or solder the wires) to program the chip. Specifically,
|
||||||
|
it's a Macronix MX25L6406E (3.3V) -[datasheet][MX25L6406E].
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
|
||||||
|
- After flashing with external programmer it is always required to reset RTC
|
||||||
|
with jumper or disconnect coin cell temporarily. Only then the platform will
|
||||||
|
boot after flashing.
|
||||||
|
- FW6A does not always work reliably with all DIMMs. Linux happens to hang or
|
||||||
|
gives many panics. This issue was present also with vendor BIOS.
|
||||||
|
- Sometimes FSPMemoryInit return errors or hangs (especially with 2 DIMMs
|
||||||
|
connected). A workaround is to power cycle the board (even a few times) or
|
||||||
|
temporarily disconnect DIMM when platform is powered off.
|
||||||
|
- When using libgfxinit and SeaBIOS bootsplash, the red color is dim
|
||||||
|
|
||||||
|
## Untested
|
||||||
|
|
||||||
|
Not all mainboard's peripherals and functions were tested because of lack of
|
||||||
|
the cables or not being populated on the board case.
|
||||||
|
|
||||||
|
- Internal USB 2.0 headers
|
||||||
|
- Boot with cleaned ME
|
||||||
|
|
||||||
|
## Working
|
||||||
|
|
||||||
|
- USB 3.0 front ports (SeaBIOS and Linux)
|
||||||
|
- 6 Ethernet ports
|
||||||
|
- HDMI port with libgfxinit and VGA Option ROM
|
||||||
|
- flashrom
|
||||||
|
- PCIe WiFi
|
||||||
|
- SATA and mSATA
|
||||||
|
- Super I/O serial port 0 (RS232 via front RJ45 connector)
|
||||||
|
- SMBus (reading SPD from DIMMs)
|
||||||
|
- Initialization with KBL FSP 2.0 (with MemoryInit issues)
|
||||||
|
- SeaBIOS payload (version rel-1.12.1)
|
||||||
|
- Mini PCIe debug card connected to mSATA (mSATA slot has LPC signals routed)
|
||||||
|
- Reset switch
|
||||||
|
- Booting Debian, Ubuntu, FreeBSD
|
||||||
|
|
||||||
|
## Technology
|
||||||
|
|
||||||
|
There are 3 variants of FW6 boards: FW6A, FW6B and FW6C. They differ only in
|
||||||
|
used SoC.
|
||||||
|
|
||||||
|
- FW6A:
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| CPU | Intel Celeron 3865U |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| PCH | Kaby Lake U w/ iHDCP2.2 Base |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O, EC | ITE IT8772E |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Coprocessor | Intel Management Engine |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
- FW6B:
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| CPU | Intel Core i3-7100U |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| PCH | Kaby Lake U w/ iHDCP2.2 Premium |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O, EC | ITE IT8772E |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Coprocessor | Intel Management Engine |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
- FW6C:
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| CPU | Intel Core i5-7200U |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| PCH | Kaby Lake U w/ iHDCP2.2 Premium |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Super I/O, EC | ITE IT8772E |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
| Coprocessor | Intel Management Engine |
|
||||||
|
+------------------+--------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
[Protectli FW6]: https://protectli.com/vault-6-port/
|
||||||
|
[MX25L6406E]: https://www.macronix.com/Lists/Datasheet/Attachments/7370/MX25L6406E,%203V,%2064Mb,%20v1.9.pdf
|
||||||
|
[flashrom]: https://flashrom.org/Flashrom
|
32
Documentation/mainboard/supermicro/flashing_on_vendorbmc.md
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# Flashing coreboot using SMC IPMI (BMC) firmware
|
||||||
|
|
||||||
|
## Metadata
|
||||||
|
In order to flash anything to the "BIOS" IC, it needs to contain a valid
|
||||||
|
BIOSINFO struct.
|
||||||
|
|
||||||
|
The BIOSINFO struct contains a `$FID` marker at the beginning and is
|
||||||
|
128 bytes in total. Besides the *BoardID* it contains the *firmware version*
|
||||||
|
and *build date*. The BMC verifies that the BoardID is correct and refuses to
|
||||||
|
flash if it's not.
|
||||||
|
|
||||||
|
The struct has no checksum or cryptographic protection.
|
||||||
|
|
||||||
|
## The smcinfobios tool
|
||||||
|
|
||||||
|
The smcbiosinfo tool can be found in `util/supermicro/smcbiosinfo`.
|
||||||
|
|
||||||
|
It parses the `build/build.h` header to get the current coreboot version and
|
||||||
|
build timestamp.
|
||||||
|
The *board ID* is passed as command line argument.
|
||||||
|
|
||||||
|
It will place a file in CBFS called `smcbiosinfo.bin`, which is then found
|
||||||
|
by the vendor tools. The file contains the struct described above.
|
||||||
|
|
||||||
|
## Flashing using SMCIPMItool
|
||||||
|
|
||||||
|
You can use the *SMCIPMITool* to remotely flash the BIOS:
|
||||||
|
|
||||||
|
`SMCIPMITool <remote BMC IP> <user> <password> bios update build/coreboot.rom`
|
||||||
|
|
||||||
|
Make sure that the ME isn't in recovery mode, otherwise you get an error
|
||||||
|
message on updating the BIOS.
|
73
Documentation/mainboard/system76/lemp9.md
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
# System76 Lemur Pro (lemp9)
|
||||||
|
|
||||||
|
## Specs
|
||||||
|
|
||||||
|
- CPU
|
||||||
|
- Intel i7-10510U
|
||||||
|
- Intel i5-10210U
|
||||||
|
- EC
|
||||||
|
- ITE IT5570E running https://github.com/system76/ec
|
||||||
|
- Backlit Keyboard, with standard PS/2 keycodes and SCI hotkeys
|
||||||
|
- Battery
|
||||||
|
- Charger, using AC adapter or USB-C PD
|
||||||
|
- Suspend/resume
|
||||||
|
- Touchpad
|
||||||
|
- GPU
|
||||||
|
- Intel UHD Graphics 620
|
||||||
|
- GOP driver is recommended, VBT is provided
|
||||||
|
- eDP 14-inch 1920x1080 LCD
|
||||||
|
- HDMI video
|
||||||
|
- USB-C DisplayPort video
|
||||||
|
- Memory
|
||||||
|
- Channel 0: 8-GB on-board DDR4 Samsung K4AAG165WA-BCTD
|
||||||
|
- Channel 1: 8-GB/16-GB/32-GB DDR4 SO-DIMM
|
||||||
|
- Networking
|
||||||
|
- M.2 PCIe/CNVi WiFi/Bluetooth
|
||||||
|
- Sound
|
||||||
|
- Realtek ALC293D
|
||||||
|
- Internal speaker
|
||||||
|
- Internal microphone
|
||||||
|
- Combined headphone/microphone 3.5-mm jack
|
||||||
|
- HDMI audio
|
||||||
|
- USB-C DisplayPort audio
|
||||||
|
- Storage
|
||||||
|
- M.2 PCIe/SATA SSD-1
|
||||||
|
- M.2 PCIe/SATA SSD-2
|
||||||
|
- RTS5227S MicroSD card reader
|
||||||
|
- USB
|
||||||
|
- 1280x720 CCD camera
|
||||||
|
- USB 3.1 Gen 2 Type-C (left)
|
||||||
|
- USB 3.1 Gen 2 Type-A (left)
|
||||||
|
- USB 3.1 Gen 1 Type-A (right)
|
||||||
|
|
||||||
|
## Building coreboot
|
||||||
|
|
||||||
|
The following commands will build a working image:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make distclean
|
||||||
|
make defconfig KBUILD_DEFCONFIG=configs/config.system76_lemp9
|
||||||
|
make
|
||||||
|
```
|
||||||
|
|
||||||
|
## Flashing coreboot
|
||||||
|
|
||||||
|
```eval_rst
|
||||||
|
+---------------------+------------+
|
||||||
|
| Type | Value |
|
||||||
|
+=====================+============+
|
||||||
|
| Socketed flash | no |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Vendor | GigaDevice |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Model | GD25Q128C |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Size | 16 MiB |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Package | SOIC-8 |
|
||||||
|
+---------------------+------------+
|
||||||
|
| Internal flashing | yes |
|
||||||
|
+---------------------+------------+
|
||||||
|
| External flashing | yes |
|
||||||
|
+---------------------+------------+
|
||||||
|
```
|
@ -1,18 +1,4 @@
|
|||||||
/*
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
* This file is part of the coreboot project.
|
|
||||||
*
|
|
||||||
* Copyright (C) 2008-2009 coresystems GmbH
|
|
||||||
* Copyright 2013 Google Inc.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; version 2 of the License.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <arch/io.h>
|
#include <arch/io.h>
|
||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
@ -34,7 +20,7 @@ int mainboard_io_trap_handler(int smif)
|
|||||||
switch (smif) {
|
switch (smif) {
|
||||||
case 0x99:
|
case 0x99:
|
||||||
printk(BIOS_DEBUG, "Sample\n");
|
printk(BIOS_DEBUG, "Sample\n");
|
||||||
smm_get_gnvs()->smif = 0;
|
gnvs->smif = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
@ -46,6 +32,6 @@ int mainboard_io_trap_handler(int smif)
|
|||||||
* For now, we force the return value to 0 and log all traps to
|
* For now, we force the return value to 0 and log all traps to
|
||||||
* see what's going on.
|
* see what's going on.
|
||||||
*/
|
*/
|
||||||
//smm_get_gnvs()->smif = 0;
|
//gnvs->smif = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ from the ME firmware partition. In this state the ME errors out and doesn't
|
|||||||
operate any more.
|
operate any more.
|
||||||
|
|
||||||
**Using a 'cleaned' ME partition may lead to issues and its use should be
|
**Using a 'cleaned' ME partition may lead to issues and its use should be
|
||||||
carefully evaulated.**
|
carefully evaluated.**
|
||||||
|
|
||||||
## Observations with 'cleaned' ME
|
## Observations with 'cleaned' ME
|
||||||
|
|
||||||
@ -18,3 +18,67 @@ carefully evaulated.**
|
|||||||
|
|
||||||
Always test with unmodified IFD and ME section before reporting bugs to the
|
Always test with unmodified IFD and ME section before reporting bugs to the
|
||||||
coreboot project.
|
coreboot project.
|
||||||
|
|
||||||
|
## Tutorial reducing the Intel ME firmware size
|
||||||
|
|
||||||
|
By default the cleaned ME firmware will still occupy the same space in
|
||||||
|
the firmware image. It's possible to change the firmware partition layout
|
||||||
|
and reclaim the space for the use by coreboot.
|
||||||
|
With the reduced Intel ME firmware the `ifd`, `gbe` and `me` regions require
|
||||||
|
less than 128 KiB of space in the ROM, which leaves the remaining for the
|
||||||
|
`bios` region.
|
||||||
|
|
||||||
|
This tutorial will guide you through the steps necessary.
|
||||||
|
|
||||||
|
### 1. Obtain a full ROM
|
||||||
|
|
||||||
|
You need a full and working ROM with a full Intel ME firmware.
|
||||||
|
|
||||||
|
### 2. Running me_cleaner
|
||||||
|
|
||||||
|
You need to run the *me_cleaner* on a full ROM, here called `fulldump.rom`:
|
||||||
|
The full ROM contains:
|
||||||
|
* IFD
|
||||||
|
* fully working Intel ME
|
||||||
|
* GbE (optional)
|
||||||
|
* BIOS (any firmware)
|
||||||
|
|
||||||
|
Running the command will generate two new files:
|
||||||
|
```console
|
||||||
|
./util/me_cleaner/me_cleaner.py -D patched_desciptor.bin -M stripped_me.bin fulldump.rom -t -r -S
|
||||||
|
```
|
||||||
|
|
||||||
|
The generated files are:
|
||||||
|
* a patched IFD called `patched_desciptor.bin`
|
||||||
|
* stripped Intel ME called `stripped_me.bin`
|
||||||
|
|
||||||
|
The patched IFD has the *AltMeDisable* bit set and a modified flash layout.
|
||||||
|
|
||||||
|
|
||||||
|
*Note:* coreboot allows to select `CONFIG_ME_CLEANER` as part of the
|
||||||
|
build-process, but that doesn't rework the flash layout, it only removes
|
||||||
|
files from ME and sets the *AltMeDisable*-bit.
|
||||||
|
|
||||||
|
### 3. Build coreboot
|
||||||
|
|
||||||
|
1. Now include the two new files from the previous step into coreboot's
|
||||||
|
build system.
|
||||||
|
2. Make sure to also increase the CBFS size
|
||||||
|
* 0x7E0000 for a 8MiB ROM
|
||||||
|
* 0xBE0000 for a 12MiB ROM
|
||||||
|
* 0xFE0000 for a 16MiB ROM
|
||||||
|
3. Make sure to **not** enable me_cleaner in Kconfig again as
|
||||||
|
you have already run it
|
||||||
|
|
||||||
|
### 4. Flashing the ROM
|
||||||
|
|
||||||
|
As you have modified the layout you need to write the **full ROM** to flash
|
||||||
|
using an [external programmer].
|
||||||
|
Make sure to include all partitions into the ROM:
|
||||||
|
* IFD
|
||||||
|
* EC (might be unused)
|
||||||
|
* GbE (might be unused)
|
||||||
|
* ME
|
||||||
|
* BIOS
|
||||||
|
|
||||||
|
[external programmer]: ../../../flash_tutorial/index.md
|
||||||
|
@ -40,3 +40,15 @@ availability of well-tested, battle-hardened drivers (as compared to
|
|||||||
firmware project drivers that often reinvent the wheel) and the ability to
|
firmware project drivers that often reinvent the wheel) and the ability to
|
||||||
define boot policy with familiar tools, no matter if those are shell scripts
|
define boot policy with familiar tools, no matter if those are shell scripts
|
||||||
or compiled userland programs written in C, Go or other programming languages.
|
or compiled userland programs written in C, Go or other programming languages.
|
||||||
|
|
||||||
|
## Heads
|
||||||
|
|
||||||
|
[Heads] is a distribution that bundles coreboot, Linux, busybox and custom
|
||||||
|
tools to provide reproducible ROMs. [Heads] aims to provide a secure and
|
||||||
|
flexible boot environment for laptops and servers.
|
||||||
|
It supports features like measured boot, kexec, GPG, OTP, TLS, firmware
|
||||||
|
updates, but only works on a limited amount of mainboards.
|
||||||
|
For more details have a look at [heads-wiki].
|
||||||
|
|
||||||
|
[Heads]: https://github.com/osresearch/heads
|
||||||
|
[heads-wiki]: http://osresearch.net/
|
@ -49,29 +49,38 @@ be more frequent than was needed, so we scaled it back to twice a year.
|
|||||||
## Checklist
|
## Checklist
|
||||||
### ~2 weeks prior to release
|
### ~2 weeks prior to release
|
||||||
- [ ] Announce upcoming release to mailing list, ask people to test and
|
- [ ] Announce upcoming release to mailing list, ask people to test and
|
||||||
to update release notes
|
to update release notes.
|
||||||
|
|
||||||
### ~1 week prior to release
|
### ~1 week prior to release
|
||||||
- [ ] Send reminder email to mailing list, ask for people to test,
|
- [ ] Send reminder email to mailing list, ask for people to test,
|
||||||
and to update the release notes
|
and to update the release notes.
|
||||||
- [ ] Update the topic in the irc channel with the date of the upcoming
|
- [ ] Update the topic in the IRC channel with the date of the upcoming
|
||||||
release
|
release.
|
||||||
|
- [ ] If there are any deprecations announced for the following release,
|
||||||
|
make sure that a list of currently affected boards and chipsets is
|
||||||
|
part of the release notes.
|
||||||
|
- [ ] Finalize release notes (as much as possible), without specifying
|
||||||
|
release commit ids.
|
||||||
|
|
||||||
### Day of release
|
### Day of release
|
||||||
- [ ] Update release notes, without specifying release commit ids
|
|
||||||
- [ ] Select a commit ID to base the release upon, announce to IRC,
|
- [ ] Select a commit ID to base the release upon, announce to IRC,
|
||||||
ask for testing.
|
ask for testing.
|
||||||
- [ ] Test the commit selected for release
|
- [ ] Test the commit selected for release.
|
||||||
- [ ] Run release script
|
- [ ] Update release notes with actual commit id, push to repo.
|
||||||
- [ ] Test the release from the actual release tarballs
|
- [ ] Create new release notes doc template for the next version.
|
||||||
- [ ] Push signed Tag to repo
|
- [ ] Fill in the release date, remove "Upcoming release" and other filler
|
||||||
- [ ] Announce that the release tag is done on IRC
|
from the current release notes.
|
||||||
- [ ] Update release notes with actual commit id, push to repo
|
- [ ] Run release script.
|
||||||
|
- [ ] Run vboot_list script.
|
||||||
|
- [ ] Test the release from the actual release tarballs.
|
||||||
|
- [ ] Push signed Tag to repo.
|
||||||
|
- [ ] Announce that the release tag is done on IRC.
|
||||||
- [ ] Upload release files to web server
|
- [ ] Upload release files to web server
|
||||||
- [ ] Upload crossgcc sources to web server
|
- [ ] Upload crossgcc sources to web server.
|
||||||
- [ ] Update download page to point to files, push to repo
|
- [ ] Update download page to point to files, push to repo.
|
||||||
- [ ] Write and publish blog post with release notes.
|
- [ ] Write and publish blog post with release notes.
|
||||||
- [ ] Update the topic in the irc channel that the release is done.
|
- [ ] Update the topic in the IRC channel that the release is done.
|
||||||
|
- [ ] Announce the release to the mailing list.
|
||||||
|
|
||||||
## Pre-Release tasks
|
## Pre-Release tasks
|
||||||
Announce the upcoming release to the mailing list release 2 weeks ahead
|
Announce the upcoming release to the mailing list release 2 weeks ahead
|
||||||
@ -82,9 +91,7 @@ release notes that are in the making and ask people to test the hardware
|
|||||||
they have to make sure it's working with the current master branch,
|
they have to make sure it's working with the current master branch,
|
||||||
from which the release will ultimately be derived from.
|
from which the release will ultimately be derived from.
|
||||||
|
|
||||||
People should also be encouraged to provide additions to the
|
People should be encouraged to provide additions to the release notes.
|
||||||
release notes, for example by putting them on some [collaborative
|
|
||||||
editor](https://www.piratenpad.de).
|
|
||||||
|
|
||||||
The final release notes will reside in coreboot's Documentation/releases
|
The final release notes will reside in coreboot's Documentation/releases
|
||||||
directory, so asking for additions to that through the regular Gerrit
|
directory, so asking for additions to that through the regular Gerrit
|
||||||
@ -99,7 +106,7 @@ to have in the release. The release was based on the final of those
|
|||||||
patches to be pulled in.
|
patches to be pulled in.
|
||||||
|
|
||||||
When a release candidate has been selected, announce the commit ID to
|
When a release candidate has been selected, announce the commit ID to
|
||||||
the #coreboot irc channel, and request that it get some testing, just
|
the #coreboot IRC channel, and request that it get some testing, just
|
||||||
to make sure that everything is sane.
|
to make sure that everything is sane.
|
||||||
|
|
||||||
## Generate the release
|
## Generate the release
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Upcoming release - coreboot 4.11
|
coreboot 4.11
|
||||||
================================
|
=============
|
||||||
|
|
||||||
coreboot 4.11 was released on November 19th.
|
coreboot 4.11 was released on November 19th.
|
||||||
|
|
||||||
@ -175,7 +175,7 @@ of becoming more generally useful.
|
|||||||
Payload integration has been updated, coreinfo learned to cope with
|
Payload integration has been updated, coreinfo learned to cope with
|
||||||
UPPER CASE commands and libpayload knows how to deal with USB3 hubs.
|
UPPER CASE commands and libpayload knows how to deal with USB3 hubs.
|
||||||
|
|
||||||
### Added VBOOT support to the following platforms:
|
### Added vboot support to the following platforms:
|
||||||
|
|
||||||
* intel/gm45
|
* intel/gm45
|
||||||
* intel/nehalem
|
* intel/nehalem
|
||||||
|
@ -1,16 +1,158 @@
|
|||||||
Upcoming release - coreboot 4.12
|
coreboot 4.12
|
||||||
================================
|
=============
|
||||||
|
|
||||||
The 4.12 release is planned for April 2020
|
coreboot 4.12 was released on May 12th, 2020.
|
||||||
|
|
||||||
Update this document with changes that should be in the release
|
Since 4.11 there were 2692 new commits by over 190 developers and of
|
||||||
notes.
|
these, 59 contributed for the first time, which is quite an amazing
|
||||||
* Please use Markdown.
|
increase.
|
||||||
* See the past few release notes for the general format.
|
|
||||||
* The chip and board additions and removals will be updated right
|
Thank you to all developers who again helped made coreboot better
|
||||||
before the release, so those do not need to be added.
|
than ever, and a big welcome to our new contributors!
|
||||||
|
|
||||||
|
Maintainers
|
||||||
|
-----------
|
||||||
|
|
||||||
|
This release saw some activity on the MAINTAINERS file, showing more
|
||||||
|
persons, teams and companies declare publicly that they intend to
|
||||||
|
take care of mainboards and subsystems.
|
||||||
|
|
||||||
|
To all new maintainers, thanks a lot!
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Our documentation efforts in the code tree are picking up steam, with
|
||||||
|
some 70 commits in that general area. Everything from typo fixes to
|
||||||
|
documenting mainboard support or coreboot APIs.
|
||||||
|
|
||||||
|
There's still room to improve, but the contributions are getting more
|
||||||
|
and better.
|
||||||
|
|
||||||
|
Hardware support
|
||||||
|
----------------
|
||||||
|
|
||||||
|
The removals due to the announced deprecations as well as the
|
||||||
|
deduplication of boards into variants skew the stats a bit, so at
|
||||||
|
a top level view this is a rare coreboot release in that it removes
|
||||||
|
more boards (51) than it adds (49).
|
||||||
|
|
||||||
|
After accounting for the variant moves the numbers in favor of more
|
||||||
|
hardware supported than the previous version. Besides a whole lot
|
||||||
|
of Chrome OS devices (again), this release features a whole bunch
|
||||||
|
of retrofits for devices originally shipping with non-coreboot OEM
|
||||||
|
firmware, but also support for devices that come with coreboot right
|
||||||
|
out of the box.
|
||||||
|
|
||||||
|
For that, a shout out to System76, Protectli, Libretrend and the
|
||||||
|
Open Compute Project!
|
||||||
|
|
||||||
|
Cleanup
|
||||||
|
--------
|
||||||
|
|
||||||
|
We simplified the header that comes at the top of every file:
|
||||||
|
Instead of a lengthy reference to the license any given file
|
||||||
|
is under, or even the license text itself, we opted for simple
|
||||||
|
[SPDX](https://www.spdx.org) identifiers.
|
||||||
|
|
||||||
|
Since people also handled copyright lines differently, we now opt for
|
||||||
|
collecting authors in AUTHORS and let git history tell the whole story.
|
||||||
|
|
||||||
|
While at it, the content-free "This file is part of this-and-that
|
||||||
|
project" header was also dropped.
|
||||||
|
|
||||||
|
Besides that, there has also been more work to sort out the headers
|
||||||
|
we include across the tree to minimize the code impacting every
|
||||||
|
compilation unit.
|
||||||
|
|
||||||
|
Now that our board-variant mechanism matured, many boards that were
|
||||||
|
individual models so far were converted into variants, making it
|
||||||
|
easier to maintain families of devices.
|
||||||
|
|
||||||
|
Deprecations
|
||||||
|
------------
|
||||||
|
|
||||||
|
For the 4.12 release a few features on x86 became mandatory. These are
|
||||||
|
relocatable ramstage, postcar stage and C\_ENVIRONMENT\_BOOTBLOCK.
|
||||||
|
|
||||||
|
### Relocatable ramstage
|
||||||
|
|
||||||
|
Relocatable stages are a feature implemented only on x86, where stages
|
||||||
|
can be relocated at runtime. This is used to place ramstage in a better
|
||||||
|
location that does not collide with memory the OS or the payload tends
|
||||||
|
to use. The rationale behind making this mandatory is that you always
|
||||||
|
want cbmem to be cached so it's a good location to run ramstage from.
|
||||||
|
It avoids using lower memory altogether so the OS can make use of it
|
||||||
|
and no backing up needs to happen on S3 resume.
|
||||||
|
|
||||||
|
### Postcar stage
|
||||||
|
|
||||||
|
With Postcar stage tearing down Cache-as-Ram is done in a separate
|
||||||
|
stage. This means that romstage has a clean program boundary and
|
||||||
|
that all variables in romstage can be accessed via their linked
|
||||||
|
addresses without runtime resolution. There is no need to link
|
||||||
|
global and static variables via the CAR\_GLOBAL macro and no need
|
||||||
|
to access them with car\_set/get\_var/ptr functions.
|
||||||
|
|
||||||
|
### C\_ENVIRONMENT\_BOOTBLOCK
|
||||||
|
|
||||||
|
Historically the bootblock on x86 platforms has been compiled with
|
||||||
|
romcc. This means that the generated code only uses CPU registers
|
||||||
|
and therefore no stack. This 20K+ LOC compiler is limited and hard
|
||||||
|
to maintain and so is the code that one has to write in that
|
||||||
|
environment. A different solution is to set up Cache-as-Ram in the
|
||||||
|
bootblock and run GCC compiled code in the bootblock. The advantages
|
||||||
|
are increased flexibility and consistency with other architectures as
|
||||||
|
well as other stages: e.g. printing to console is possible and
|
||||||
|
VBOOT can run before romstage, making romstage updatable via RW FMAP
|
||||||
|
regions.
|
||||||
|
|
||||||
|
### Platforms dropped from master
|
||||||
|
|
||||||
|
The following platforms did not implement those feature are dropped
|
||||||
|
from master to allow the master branch to move on:
|
||||||
|
- AMDFAM10
|
||||||
|
- all FSP1.0 platforms: BROADWELL\_DE, FSP\_BAYTRAIL, RANGELEY
|
||||||
|
- VIA VX900
|
||||||
|
|
||||||
|
In particular on FSP1.0 it is impossible to implement POSTCAR stage.
|
||||||
|
The reason is that FSP1.0 relocates the CAR region to the HOB before
|
||||||
|
returning to coreboot. This means that after FSP returns to coreboot
|
||||||
|
accessing variables via their original address is not possible. One
|
||||||
|
way of obtaining that behavior would be to set up Cache-as-Ram again
|
||||||
|
(but with open source code) and copy the relocated data from the HOB
|
||||||
|
there. This solution is deemed too hacky. Maybe a lesson can be
|
||||||
|
learned from this: blobs should not interfere with the execution
|
||||||
|
environment, as this makes proper integration much harder.
|
||||||
|
|
||||||
|
### 4.11\_branch
|
||||||
|
|
||||||
|
Given that some platforms supported by FSP1.0 are being produced and
|
||||||
|
popular, the 4.11 release was made into a branch in which further
|
||||||
|
development can happen.
|
||||||
|
|
||||||
Significant changes
|
Significant changes
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
### Add significant changes here
|
### SMMSTORE is now production ready
|
||||||
|
|
||||||
|
See [smmstore](../drivers/smmstore.md) for the documentation on
|
||||||
|
the API, but note that there will be an update to it featuring a
|
||||||
|
much-improved but incompatible API.
|
||||||
|
|
||||||
|
### Unit testing infrastructure
|
||||||
|
|
||||||
|
Unit testing of coreboot is now possible in a more structured way, with new
|
||||||
|
build subsystem and adoption of [Cmocka](https://cmocka.org/) framework. Tree
|
||||||
|
has new directory `tests/`, which comprises infrastructure and examples of unit
|
||||||
|
tests. See
|
||||||
|
[Unit testing coreboot](../technotes/2020-03-unit-testing-coreboot.md) for the
|
||||||
|
design document.
|
||||||
|
|
||||||
|
Final Notes
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Your favorite new feature or supported board didn't make it to the
|
||||||
|
release notes? They're maintained collaboratively in the coreboot
|
||||||
|
tree, so when you land something noteworthy don't be shy, contribute
|
||||||
|
to the upcoming release's document in Documentation/releases!
|
||||||
|
42
Documentation/releases/coreboot-4.13-relnotes.md
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
Upcoming release - coreboot 4.13
|
||||||
|
================================
|
||||||
|
|
||||||
|
The 4.13 release is planned for November 2020.
|
||||||
|
|
||||||
|
Update this document with changes that should be in the release notes.
|
||||||
|
|
||||||
|
* Please use Markdown.
|
||||||
|
* See the past few release notes for the general format.
|
||||||
|
* The chip and board additions and removals will be updated right
|
||||||
|
before the release, so those do not need to be added.
|
||||||
|
|
||||||
|
Significant changes
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
### Hidden PCI devices
|
||||||
|
|
||||||
|
This new functionality takes advantage of the existing 'hidden' keyword in the
|
||||||
|
devicetree. Since no existing boards were using the keyword, its usage was
|
||||||
|
repurposed to make dealing with some unique PCI devices easier. The particular
|
||||||
|
case here is Intel's PMC (Power Management Controller). During the FSP-S run,
|
||||||
|
the PMC device is made hidden, meaning that its config space looks as if there
|
||||||
|
is no device there (Vendor ID reads as 0xFFFF_FFFF). However, the device does
|
||||||
|
have fixed resources, both MMIO and I/O. These were previously recorded in
|
||||||
|
different places (MMIO was typically an SA fixed resource, and I/O was treated
|
||||||
|
as an LPC resource). With this change, when a device in the tree is marked as
|
||||||
|
'hidden', it is not probed (`pci_probe_dev()`) but rather assumed to exist so
|
||||||
|
that its resources can be placed in a more natural location. This also adds the
|
||||||
|
ability for the device to participate in SSDT generation.
|
||||||
|
|
||||||
|
### Tools for generating SPDs for LP4x memory on TGL and JSL
|
||||||
|
|
||||||
|
A set of new tools `gen_spd.go` and `gen_part_id.go` are added to automate the
|
||||||
|
process of generating SPDs for LP4x memory and assigning hardware strap IDs for
|
||||||
|
memory parts used on TGL and JSL based boards. The SPD data obtained from memory
|
||||||
|
part vendors has to be massaged to format it correctly as per JEDEC and Intel MRC
|
||||||
|
expectations. These tools take a list of memory parts describing their physical
|
||||||
|
attributes as per their datasheet and convert those attributes into SPD files for
|
||||||
|
the platforms. More details about the tools are added in
|
||||||
|
[README.md](https://review.coreboot.org/plugins/gitiles/coreboot/+/refs/heads/master/util/spd_tools/intel/lp4x/README.md).
|
||||||
|
|
||||||
|
### Add significant changes here
|