mirror of
https://github.com/home-assistant/operating-system.git
synced 2025-08-03 10:17:40 +00:00
Compare commits
1924 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
8fa0cb1b58 | ||
![]() |
7e1e8b6f5d | ||
![]() |
10e401e2f6 | ||
![]() |
9ccda43197 | ||
![]() |
c84729fae3 | ||
![]() |
57f18192cc | ||
![]() |
6ef83eb25d | ||
![]() |
c9b4e7e880 | ||
![]() |
d21679b3c6 | ||
![]() |
b239b9152f | ||
![]() |
ecce801263 | ||
![]() |
bd140acc92 | ||
![]() |
f6fab12683 | ||
![]() |
d357adfd69 | ||
![]() |
2fb98a4a73 | ||
![]() |
3c1aa91376 | ||
![]() |
6735603d89 | ||
![]() |
19ca37696a | ||
![]() |
9d7f8a234f | ||
![]() |
7c7cbf40be | ||
![]() |
a5906f52e3 | ||
![]() |
c33657e568 | ||
![]() |
aff1f81817 | ||
![]() |
286f5a66ca | ||
![]() |
a338b67144 | ||
![]() |
bc484f6409 | ||
![]() |
dffbe89147 | ||
![]() |
17ae2d4741 | ||
![]() |
9803f5fb4f | ||
![]() |
1e3773c68a | ||
![]() |
da9c5312f3 | ||
![]() |
abd9ad4398 | ||
![]() |
6a61f25668 | ||
![]() |
83e85d96d9 | ||
![]() |
fd842de47a | ||
![]() |
fec70eac09 | ||
![]() |
f9da1a6ef5 | ||
![]() |
1e99a466bc | ||
![]() |
dfa68f76e5 | ||
![]() |
619930e667 | ||
![]() |
18ca296825 | ||
![]() |
05a0387d79 | ||
![]() |
684a6331ac | ||
![]() |
b35a219c02 | ||
![]() |
589ac5edfb | ||
![]() |
5baf08f1fa | ||
![]() |
491a8c5c58 | ||
![]() |
a5f82b2fa7 | ||
![]() |
4a4da64f31 | ||
![]() |
42a5e6becb | ||
![]() |
b863427a52 | ||
![]() |
0aa4a129cb | ||
![]() |
b25fce69b6 | ||
![]() |
98a7a55df6 | ||
![]() |
f5efac66a0 | ||
![]() |
69d5fb0c99 | ||
![]() |
6528e3e959 | ||
![]() |
90d36147f7 | ||
![]() |
98a3386b32 | ||
![]() |
6f854b67b0 | ||
![]() |
19b848cbbd | ||
![]() |
5e36e681ae | ||
![]() |
9431351036 | ||
![]() |
cc265b9e2b | ||
![]() |
8a1f85f53a | ||
![]() |
59a2e43282 | ||
![]() |
5d070c84a4 | ||
![]() |
79e3a016c4 | ||
![]() |
3a7e479111 | ||
![]() |
3e3372b7dc | ||
![]() |
cf970a5b63 | ||
![]() |
febd54d8fd | ||
![]() |
17b8c18c89 | ||
![]() |
5a000cbba3 | ||
![]() |
487ae21e01 | ||
![]() |
0f5934c9da | ||
![]() |
972f575039 | ||
![]() |
f127428e4e | ||
![]() |
834c51ca84 | ||
![]() |
5ebc3a0761 | ||
![]() |
0c758df759 | ||
![]() |
a13700196c | ||
![]() |
65fdef963c | ||
![]() |
9803d41b2f | ||
![]() |
d749bb70b4 | ||
![]() |
614490ef00 | ||
![]() |
e720f5be8f | ||
![]() |
0800deccec | ||
![]() |
604f95539b | ||
![]() |
0421bd0078 | ||
![]() |
055e123449 | ||
![]() |
6ec77b845d | ||
![]() |
257a96b39a | ||
![]() |
ed0fa1a93b | ||
![]() |
d38f47d3f9 | ||
![]() |
ccc4b9b040 | ||
![]() |
9e8e9ce773 | ||
![]() |
dbf7d46d5b | ||
![]() |
c6338f1576 | ||
![]() |
b1a3106907 | ||
![]() |
0724608ff7 | ||
![]() |
eb3f9ef986 | ||
![]() |
233b9c9482 | ||
![]() |
84ba62573e | ||
![]() |
338df41858 | ||
![]() |
57445099f7 | ||
![]() |
f3916bb7f0 | ||
![]() |
7b3ce53ab2 | ||
![]() |
7bc7f66e49 | ||
![]() |
fc984b9435 | ||
![]() |
349b7e48ea | ||
![]() |
cdbbfeaecc | ||
![]() |
212796c98a | ||
![]() |
92a3b5a793 | ||
![]() |
163b1a3fff | ||
![]() |
3e2f891cc0 | ||
![]() |
23d08b9cf7 | ||
![]() |
75f0936c53 | ||
![]() |
2f0ffbe443 | ||
![]() |
3a9a2529c6 | ||
![]() |
8407de34f6 | ||
![]() |
00203b8c5c | ||
![]() |
ed53f0491c | ||
![]() |
5e9c47a318 | ||
![]() |
ab6214ba42 | ||
![]() |
73b6cce99a | ||
![]() |
ff1eadfe21 | ||
![]() |
15e59ead2f | ||
![]() |
05830dae0b | ||
![]() |
0abfee2eaf | ||
![]() |
ce961e0c2c | ||
![]() |
fd2c16d568 | ||
![]() |
6d77c03e98 | ||
![]() |
1e69fb2c25 | ||
![]() |
a3b0232351 | ||
![]() |
d259bf8b6b | ||
![]() |
248af90c9f | ||
![]() |
5741be48bd | ||
![]() |
a4190754fe | ||
![]() |
24640c11ae | ||
![]() |
7e6e4119a7 | ||
![]() |
34a422401d | ||
![]() |
f723d93159 | ||
![]() |
084d0acee4 | ||
![]() |
4ccc875520 | ||
![]() |
25ca83287e | ||
![]() |
6e8c390096 | ||
![]() |
16e6599832 | ||
![]() |
f7bfd161ad | ||
![]() |
33b92f53f9 | ||
![]() |
04debe2f53 | ||
![]() |
173a4388fe | ||
![]() |
3fb9c161c0 | ||
![]() |
4a1d2b75b9 | ||
![]() |
6c4f32a8c0 | ||
![]() |
36d905720a | ||
![]() |
d4e11afd3c | ||
![]() |
610ced0162 | ||
![]() |
a39b8a9418 | ||
![]() |
c72cf09cc3 | ||
![]() |
668c84959a | ||
![]() |
b2aa96c9bd | ||
![]() |
a4cbf82a6f | ||
![]() |
6b904abfcd | ||
![]() |
e801d403e1 | ||
![]() |
15be152345 | ||
![]() |
40ef226872 | ||
![]() |
b3ce7131af | ||
![]() |
f5905569b0 | ||
![]() |
bdcc2b90d5 | ||
![]() |
714ca8a344 | ||
![]() |
f032cd571a | ||
![]() |
ea40984603 | ||
![]() |
56e3a377db | ||
![]() |
8531e7b57d | ||
![]() |
664ae4ebfc | ||
![]() |
e158fbc834 | ||
![]() |
4ab51e780c | ||
![]() |
e455669d62 | ||
![]() |
1b511990e3 | ||
![]() |
d42e34f646 | ||
![]() |
dc7b693691 | ||
![]() |
22ed3864dd | ||
![]() |
3a666bbeea | ||
![]() |
5fcf2932a6 | ||
![]() |
43d26c8c54 | ||
![]() |
072ba9bade | ||
![]() |
970cd4dfeb | ||
![]() |
2dda7a0e75 | ||
![]() |
0ac5f029e6 | ||
![]() |
aafe82f801 | ||
![]() |
1d5e86ad77 | ||
![]() |
47309b4a10 | ||
![]() |
b5b2f5da07 | ||
![]() |
c63f9ec84a | ||
![]() |
9a760a2e28 | ||
![]() |
f56130af19 | ||
![]() |
ffca0b30a9 | ||
![]() |
f9776abb6a | ||
![]() |
fbd5c2c751 | ||
![]() |
4919e4e26c | ||
![]() |
7eccef8a18 | ||
![]() |
c6218aafd8 | ||
![]() |
f51d6b0490 | ||
![]() |
4fb83d5480 | ||
![]() |
da08a45d9f | ||
![]() |
6f51b80db5 | ||
![]() |
478f652e8c | ||
![]() |
8db3b9f848 | ||
![]() |
5a502ca44c | ||
![]() |
a9efc21cb5 | ||
![]() |
ed4463ed97 | ||
![]() |
8233cb94cd | ||
![]() |
48bf9b5056 | ||
![]() |
af7b36e100 | ||
![]() |
235d7e0a4d | ||
![]() |
ca02ed000b | ||
![]() |
64ee53579b | ||
![]() |
a7cdebf032 | ||
![]() |
a9af9c8d35 | ||
![]() |
219d7ec530 | ||
![]() |
267679b192 | ||
![]() |
07e1cedeb8 | ||
![]() |
beafcda863 | ||
![]() |
6ef7a68a1d | ||
![]() |
d9fb660152 | ||
![]() |
b8b1e255b1 | ||
![]() |
4baca32658 | ||
![]() |
f3d83d2650 | ||
![]() |
16eb245f43 | ||
![]() |
cd04812e9e | ||
![]() |
c0bf2751c4 | ||
![]() |
c7e21c0cf2 | ||
![]() |
f778edfac3 | ||
![]() |
a842fffa5b | ||
![]() |
29c8cf8440 | ||
![]() |
b02eee1af5 | ||
![]() |
52774c451c | ||
![]() |
07159c8225 | ||
![]() |
2c2f88b270 | ||
![]() |
baa3f7871b | ||
![]() |
48edf7a114 | ||
![]() |
79a90f81ff | ||
![]() |
bb280e796f | ||
![]() |
765f4daaa2 | ||
![]() |
c7a9a0b906 | ||
![]() |
3b0b0312f6 | ||
![]() |
d06aa63e3f | ||
![]() |
70318701ea | ||
![]() |
434b83722f | ||
![]() |
e30cf80066 | ||
![]() |
2b30e2bf53 | ||
![]() |
017d17291d | ||
![]() |
ce1e261fa4 | ||
![]() |
4229332cc7 | ||
![]() |
0a4114db3e | ||
![]() |
91079a0cc6 | ||
![]() |
2ac3fceaf4 | ||
![]() |
babf11d710 | ||
![]() |
47a648392a | ||
![]() |
0b251bb950 | ||
![]() |
3df7743633 | ||
![]() |
a355da2075 | ||
![]() |
66405f102a | ||
![]() |
9d643edb54 | ||
![]() |
e0ccf398f2 | ||
![]() |
c514d6b482 | ||
![]() |
489de0b2fb | ||
![]() |
22dd060183 | ||
![]() |
91532037bb | ||
![]() |
55bbddad4f | ||
![]() |
444f65ca94 | ||
![]() |
74af855056 | ||
![]() |
1291848041 | ||
![]() |
d57e507764 | ||
![]() |
b288cd212a | ||
![]() |
98ac7f0170 | ||
![]() |
a042dc01d2 | ||
![]() |
af833dbc9f | ||
![]() |
885f0a82ab | ||
![]() |
eec6dfb28d | ||
![]() |
f169f78bb0 | ||
![]() |
71e580175e | ||
![]() |
78cdaab597 | ||
![]() |
b9e66fbfd0 | ||
![]() |
9dfbdd9d12 | ||
![]() |
b28dd8c4c4 | ||
![]() |
23039ceea7 | ||
![]() |
180c9ada3f | ||
![]() |
6047770d7f | ||
![]() |
0dc9c65d3c | ||
![]() |
f612d42fb3 | ||
![]() |
c9e2b50406 | ||
![]() |
7edde96735 | ||
![]() |
59851f7a51 | ||
![]() |
8fd7f26d74 | ||
![]() |
a2ff594a75 | ||
![]() |
f459a1174d | ||
![]() |
a5cdc318d4 | ||
![]() |
9e00205ceb | ||
![]() |
3f161bc7d1 | ||
![]() |
bb0086addf | ||
![]() |
1bd9245219 | ||
![]() |
fb7a9c4196 | ||
![]() |
8f69cd7fd1 | ||
![]() |
67ddfe2563 | ||
![]() |
ce8b777d74 | ||
![]() |
82f36004f5 | ||
![]() |
1b6b40ebe7 | ||
![]() |
998d0e37fe | ||
![]() |
a4a3912b21 | ||
![]() |
5d58a25b62 | ||
![]() |
cf546d6f76 | ||
![]() |
62a30ac509 | ||
![]() |
ba73a8c3d7 | ||
![]() |
0fdf920b89 | ||
![]() |
f27c429be2 | ||
![]() |
e4d00de474 | ||
![]() |
65789af595 | ||
![]() |
39b1c6de4e | ||
![]() |
2916a1c247 | ||
![]() |
2e6b38a0e1 | ||
![]() |
5d164b12d1 | ||
![]() |
e3bbe2003f | ||
![]() |
93ac046349 | ||
![]() |
d615f8c71e | ||
![]() |
3977f1f039 | ||
![]() |
d9e46d6dbb | ||
![]() |
b23b54bed0 | ||
![]() |
5eb7ccb761 | ||
![]() |
c6d4e2788e | ||
![]() |
14ca2ac75e | ||
![]() |
4fb27c2ca8 | ||
![]() |
c7018054b4 | ||
![]() |
7f9116b7f8 | ||
![]() |
e97b1231dc | ||
![]() |
1a7dc0ca1f | ||
![]() |
d3a43a4ca4 | ||
![]() |
3c2f014acb | ||
![]() |
1b6cfbf940 | ||
![]() |
cdee2c5838 | ||
![]() |
7e7612ffeb | ||
![]() |
832b70bab1 | ||
![]() |
0c08acd2c3 | ||
![]() |
1467cc5f64 | ||
![]() |
d44d93e4a1 | ||
![]() |
2fb1663a35 | ||
![]() |
a7617340e9 | ||
![]() |
77e2b92972 | ||
![]() |
fd31ce14ea | ||
![]() |
598e06de5d | ||
![]() |
d83602c6d3 | ||
![]() |
55b3446bd9 | ||
![]() |
f292ba02e2 | ||
![]() |
42baa80900 | ||
![]() |
ba86720163 | ||
![]() |
0452965fb0 | ||
![]() |
d6fa83a0d3 | ||
![]() |
edba18f6c4 | ||
![]() |
50a0062ee6 | ||
![]() |
26c383484e | ||
![]() |
d8baa98ae2 | ||
![]() |
ccca13d3ca | ||
![]() |
7a19b892a5 | ||
![]() |
66fc7d7e2a | ||
![]() |
9cc45f65ea | ||
![]() |
c2527a2ae1 | ||
![]() |
a32974e1a7 | ||
![]() |
d51a0d3cec | ||
![]() |
13c4bb56c0 | ||
![]() |
327e9a07c9 | ||
![]() |
568499072f | ||
![]() |
bc7c109163 | ||
![]() |
b0bc71a835 | ||
![]() |
a80311a285 | ||
![]() |
6de9da2560 | ||
![]() |
5d5bc36892 | ||
![]() |
77a28bd1df | ||
![]() |
038bfd9073 | ||
![]() |
eb2bdf85e9 | ||
![]() |
d148ad2b50 | ||
![]() |
63a05a5a1e | ||
![]() |
150be514e4 | ||
![]() |
45cbd1d9b7 | ||
![]() |
00171ae44c | ||
![]() |
777432913e | ||
![]() |
d57b6be01e | ||
![]() |
1f8ed07c42 | ||
![]() |
3ef8b07676 | ||
![]() |
ea286d9dad | ||
![]() |
4308c45391 | ||
![]() |
33d8b538ad | ||
![]() |
245c0d0b03 | ||
![]() |
c20841ac1e | ||
![]() |
0555e89ad0 | ||
![]() |
203885a7d8 | ||
![]() |
7298ffc13f | ||
![]() |
6c7b6fdebe | ||
![]() |
87a6c84025 | ||
![]() |
94c6930acd | ||
![]() |
a70ed7e81e | ||
![]() |
62d7794a6c | ||
![]() |
8490b3bf70 | ||
![]() |
abe018d4aa | ||
![]() |
0e9e8ca2a6 | ||
![]() |
27bc7306ff | ||
![]() |
6c2d5b5006 | ||
![]() |
d847b9803a | ||
![]() |
89533755bc | ||
![]() |
6d77355c1c | ||
![]() |
26f0b5a9b7 | ||
![]() |
542f69efa4 | ||
![]() |
ae588b762a | ||
![]() |
6135ecdcc7 | ||
![]() |
22b63ae779 | ||
![]() |
bd7474fc97 | ||
![]() |
5ed9057728 | ||
![]() |
682d59434e | ||
![]() |
2c725d90f6 | ||
![]() |
8dbc03cc76 | ||
![]() |
8aa9869e4f | ||
![]() |
dd96b5019a | ||
![]() |
229cc7ebbb | ||
![]() |
ca71774e7d | ||
![]() |
12597f197f | ||
![]() |
2c266c53f1 | ||
![]() |
d7338e7570 | ||
![]() |
301bf4a377 | ||
![]() |
2ea9eccf79 | ||
![]() |
1a5a2c4e28 | ||
![]() |
7a94a2ef71 | ||
![]() |
ddd528b8e7 | ||
![]() |
9fa953745a | ||
![]() |
fce19b7846 | ||
![]() |
65f35c65b2 | ||
![]() |
67315f86d4 | ||
![]() |
4e44b101f3 | ||
![]() |
21fd9e64c8 | ||
![]() |
9dab6908c9 | ||
![]() |
a277854add | ||
![]() |
8854dd4ddb | ||
![]() |
478538eac0 | ||
![]() |
e1b11540a1 | ||
![]() |
82c3e2a859 | ||
![]() |
9272065664 | ||
![]() |
77c28be3cd | ||
![]() |
85d7c23a5f | ||
![]() |
4f53947596 | ||
![]() |
dd76a1dda4 | ||
![]() |
c9efdea83b | ||
![]() |
56ae6e1cb7 | ||
![]() |
2254260dad | ||
![]() |
3252676fde | ||
![]() |
5dc234d14f | ||
![]() |
3e970f1e9a | ||
![]() |
ea217fe5bd | ||
![]() |
bfe9943068 | ||
![]() |
7166a83998 | ||
![]() |
7a69678505 | ||
![]() |
0c9deaeebf | ||
![]() |
de3f2c6420 | ||
![]() |
78d281fce1 | ||
![]() |
7013872665 | ||
![]() |
974812a8af | ||
![]() |
e18c6ef4ce | ||
![]() |
889b561ca1 | ||
![]() |
90b618b096 | ||
![]() |
5ee9cef8c8 | ||
![]() |
040af8fd9b | ||
![]() |
94bf84a807 | ||
![]() |
b564fb3fa7 | ||
![]() |
2d6b731b9a | ||
![]() |
adbd449494 | ||
![]() |
cff5c81cf0 | ||
![]() |
aafa022800 | ||
![]() |
ccf92bc87f | ||
![]() |
a45cab1756 | ||
![]() |
6c11146d9c | ||
![]() |
e144c2bc96 | ||
![]() |
6c7c972c5d | ||
![]() |
1953c2afdb | ||
![]() |
6b062f3c75 | ||
![]() |
c085ff2b10 | ||
![]() |
454d764676 | ||
![]() |
0e3a2d016d | ||
![]() |
fde0c80e54 | ||
![]() |
80dfffc0b0 | ||
![]() |
dd43bfee8e | ||
![]() |
32f1ca8fa8 | ||
![]() |
3dfd3a4c21 | ||
![]() |
8226323a1b | ||
![]() |
122dd1c288 | ||
![]() |
fe1978f98f | ||
![]() |
541afd452b | ||
![]() |
b5795a0277 | ||
![]() |
a909d89e1c | ||
![]() |
e24fbf63ae | ||
![]() |
a6f54f6c4d | ||
![]() |
6ac4f3435b | ||
![]() |
8debb61114 | ||
![]() |
47f8671925 | ||
![]() |
8f577e47db | ||
![]() |
2adfa287d1 | ||
![]() |
e60a2e4b68 | ||
![]() |
ff34a11f37 | ||
![]() |
dfdd3b4438 | ||
![]() |
9614f769f2 | ||
![]() |
8c5377810f | ||
![]() |
426ef2d568 | ||
![]() |
e9e027dd95 | ||
![]() |
cf0bde1f5a | ||
![]() |
1b66f81dfa | ||
![]() |
623ebd8d38 | ||
![]() |
f05294e51d | ||
![]() |
af345d98d7 | ||
![]() |
b599d24658 | ||
![]() |
e7a62ce563 | ||
![]() |
f770a3f4b2 | ||
![]() |
0028e20973 | ||
![]() |
ad4493a781 | ||
![]() |
5fddd20258 | ||
![]() |
c1b936716d | ||
![]() |
977f017cf8 | ||
![]() |
87938f0a4b | ||
![]() |
37c2f951d6 | ||
![]() |
3dee9895ac | ||
![]() |
0f0eacf46e | ||
![]() |
8fef166685 | ||
![]() |
b08f7de9e1 | ||
![]() |
9dcf8ae82f | ||
![]() |
c90c175754 | ||
![]() |
b3e3d833a7 | ||
![]() |
5271dd180d | ||
![]() |
3c50eee20b | ||
![]() |
1e70dc8edf | ||
![]() |
fd3c1066b8 | ||
![]() |
f4f7928f17 | ||
![]() |
8eeb85ed17 | ||
![]() |
e00709d449 | ||
![]() |
9e7b6783d1 | ||
![]() |
1f45aaf359 | ||
![]() |
0ac12d3cd4 | ||
![]() |
f263326ef8 | ||
![]() |
82e1beff2e | ||
![]() |
54e86009c2 | ||
![]() |
bd3cae5300 | ||
![]() |
9102f06fba | ||
![]() |
9df30c9e4e | ||
![]() |
378b90bc82 | ||
![]() |
01c8c1a5fa | ||
![]() |
3d234144a2 | ||
![]() |
ae4ab5aa24 | ||
![]() |
113348ef93 | ||
![]() |
4b2d34368d | ||
![]() |
aadb5a74b6 | ||
![]() |
4619dcbb16 | ||
![]() |
08b3277bdb | ||
![]() |
bf744adc5f | ||
![]() |
f36ab6cf5e | ||
![]() |
7685e04c2b | ||
![]() |
d83fc29969 | ||
![]() |
82e7dc7ccf | ||
![]() |
ab586e285f | ||
![]() |
ff84663caa | ||
![]() |
c210a1a52a | ||
![]() |
3aa2c1e411 | ||
![]() |
c845b387c9 | ||
![]() |
bde080336e | ||
![]() |
e7c15f9aa6 | ||
![]() |
a7f570c4b4 | ||
![]() |
59555e597e | ||
![]() |
c328d30610 | ||
![]() |
b88ba4d208 | ||
![]() |
99e8af2aac | ||
![]() |
66087c4334 | ||
![]() |
baa756e736 | ||
![]() |
1a48d6fdd4 | ||
![]() |
f50f7c2475 | ||
![]() |
e93d92b50e | ||
![]() |
0ec5c22d3a | ||
![]() |
fdd0bd0efb | ||
![]() |
57913a3eee | ||
![]() |
d6873893a4 | ||
![]() |
572d14adcc | ||
![]() |
fe8c4ef6c1 | ||
![]() |
714912a2a9 | ||
![]() |
62b76f7f47 | ||
![]() |
d82458a6a8 | ||
![]() |
6c549c10d8 | ||
![]() |
364ca718fb | ||
![]() |
978e13b180 | ||
![]() |
225d4194bf | ||
![]() |
230a50587f | ||
![]() |
de82d0b412 | ||
![]() |
7ef16072c6 | ||
![]() |
13e0f13f3c | ||
![]() |
5a9be34007 | ||
![]() |
2e7aa1dc6a | ||
![]() |
d116bba470 | ||
![]() |
069614a968 | ||
![]() |
b9efb8edaf | ||
![]() |
722cdf26f4 | ||
![]() |
e4fab0ab93 | ||
![]() |
7fc91c7bd7 | ||
![]() |
779b75f10e | ||
![]() |
f605dd43ec | ||
![]() |
fb13b2bff8 | ||
![]() |
5b3447ae38 | ||
![]() |
8e1016dcaf | ||
![]() |
ac089a2d8e | ||
![]() |
77c7def4e3 | ||
![]() |
c6ca14182b | ||
![]() |
1e6deab48b | ||
![]() |
dff282ff00 | ||
![]() |
1211b24c7f | ||
![]() |
d427248a05 | ||
![]() |
6579b978d0 | ||
![]() |
1ffaec3acb | ||
![]() |
934273e344 | ||
![]() |
da40ca2271 | ||
![]() |
a79e3b270c | ||
![]() |
20295a5f0b | ||
![]() |
26e96caef6 | ||
![]() |
c59c887a53 | ||
![]() |
2c6d0de965 | ||
![]() |
e524a5e03d | ||
![]() |
eab18076ad | ||
![]() |
376e4f9296 | ||
![]() |
9235649bbd | ||
![]() |
93a2d8a19b | ||
![]() |
c3b9912e2e | ||
![]() |
741498c92b | ||
![]() |
d7f49ab9ff | ||
![]() |
b37dc33e5c | ||
![]() |
5891250bd1 | ||
![]() |
1ea0bb7bf4 | ||
![]() |
f986d7f690 | ||
![]() |
9fd789cdb5 | ||
![]() |
1848fd7555 | ||
![]() |
5d11e16150 | ||
![]() |
7c3cee049b | ||
![]() |
c94b29a9cc | ||
![]() |
b06a89b264 | ||
![]() |
5d9244b92a | ||
![]() |
5b534e3b58 | ||
![]() |
0f2b7c49f2 | ||
![]() |
754bec30fd | ||
![]() |
1238527b49 | ||
![]() |
196c48ee5e | ||
![]() |
5e80f74b7a | ||
![]() |
11c2eab58a | ||
![]() |
e0d6cc15d5 | ||
![]() |
1a6b7418f0 | ||
![]() |
fccb11cad1 | ||
![]() |
5314324c61 | ||
![]() |
53d139df97 | ||
![]() |
49f26c3d2e | ||
![]() |
d9b49bbcb8 | ||
![]() |
26bfeb6c40 | ||
![]() |
586f2ea021 | ||
![]() |
6df79b13e9 | ||
![]() |
204bd8bb56 | ||
![]() |
2888ccf28e | ||
![]() |
c33fc03fd6 | ||
![]() |
d7e3a8b985 | ||
![]() |
e4e4c62834 | ||
![]() |
2e8b66d283 | ||
![]() |
54cab43ea3 | ||
![]() |
d39a767bfb | ||
![]() |
5e5462ddde | ||
![]() |
39778e882a | ||
![]() |
e1be4f3efb | ||
![]() |
ae711734bf | ||
![]() |
6d7db27f84 | ||
![]() |
8133cfead8 | ||
![]() |
91e82e40d9 | ||
![]() |
6e8568c666 | ||
![]() |
252887cc0d | ||
![]() |
4769d22b3c | ||
![]() |
28c13d7709 | ||
![]() |
9c021aa766 | ||
![]() |
a1947336a8 | ||
![]() |
9e70ebe989 | ||
![]() |
12b3d62f9e | ||
![]() |
0ec13ca335 | ||
![]() |
ae42fbf235 | ||
![]() |
c5d21da0e8 | ||
![]() |
66c0435c7c | ||
![]() |
b55e6c22c2 | ||
![]() |
aed1bb807c | ||
![]() |
e928fa498f | ||
![]() |
b56f660316 | ||
![]() |
7f2d5c1524 | ||
![]() |
f977067c18 | ||
![]() |
58accf39d7 | ||
![]() |
caf6611f7d | ||
![]() |
d7b32fd100 | ||
![]() |
81d9a90729 | ||
![]() |
d4cb408090 | ||
![]() |
3e36628c09 | ||
![]() |
56ccbf4b9e | ||
![]() |
44dc1781a5 | ||
![]() |
157144eaa5 | ||
![]() |
f946e098d6 | ||
![]() |
2a334e8c1a | ||
![]() |
7845199fa8 | ||
![]() |
01e9b7d4f6 | ||
![]() |
f407c3de66 | ||
![]() |
6206f6a428 | ||
![]() |
a669a352d5 | ||
![]() |
ff7645ddaf | ||
![]() |
30d3678c2d | ||
![]() |
ff0a4b44e0 | ||
![]() |
19ded665bd | ||
![]() |
fc3c313509 | ||
![]() |
5b927389b8 | ||
![]() |
a42ae2f25b | ||
![]() |
3e65e9a839 | ||
![]() |
ba23d68de7 | ||
![]() |
b60fe22de8 | ||
![]() |
f5d4379aed | ||
![]() |
0d3cb42e47 | ||
![]() |
1bec4e858b | ||
![]() |
8be78b1257 | ||
![]() |
29ad504667 | ||
![]() |
2cbaaf9f3b | ||
![]() |
0ebcdcb9dc | ||
![]() |
893a49a3f3 | ||
![]() |
a72c6c0322 | ||
![]() |
56d96acd1b | ||
![]() |
469b109efd | ||
![]() |
65271c797c | ||
![]() |
39e867c352 | ||
![]() |
dd21a73031 | ||
![]() |
f9251252d9 | ||
![]() |
5ea343289c | ||
![]() |
3df2749171 | ||
![]() |
7870a1d78e | ||
![]() |
8d6b4eb11b | ||
![]() |
49a487d4a2 | ||
![]() |
86b172b9c2 | ||
![]() |
53567a86e8 | ||
![]() |
8d8327801f | ||
![]() |
b7e958d498 | ||
![]() |
3e173ca77e | ||
![]() |
f8f2e61967 | ||
![]() |
26dd95cb03 | ||
![]() |
0125e32ca6 | ||
![]() |
3d7a17c59f | ||
![]() |
bf327c968a | ||
![]() |
ff1e4d2c31 | ||
![]() |
25545b609e | ||
![]() |
98da692882 | ||
![]() |
52a455c6ca | ||
![]() |
cdfde693c7 | ||
![]() |
079bf06aa7 | ||
![]() |
de2d443cda | ||
![]() |
0b115133fe | ||
![]() |
41c3b6565d | ||
![]() |
79050fb820 | ||
![]() |
e83f264e8c | ||
![]() |
516cb71df9 | ||
![]() |
76903af864 | ||
![]() |
42648b664d | ||
![]() |
d2006e9b72 | ||
![]() |
2756709f4a | ||
![]() |
a2760f1d67 | ||
![]() |
8297bc0e30 | ||
![]() |
fcf615614e | ||
![]() |
60ea200b88 | ||
![]() |
d7dccf423a | ||
![]() |
111eebfb49 | ||
![]() |
02d85d73ef | ||
![]() |
c41cf9ad17 | ||
![]() |
23237a0676 | ||
![]() |
9253b7361b | ||
![]() |
68c74db9d2 | ||
![]() |
e8da915a46 | ||
![]() |
23f857fcb4 | ||
![]() |
fd4a05d708 | ||
![]() |
eba7099adc | ||
![]() |
61f473432e | ||
![]() |
1836f04a87 | ||
![]() |
6ba07710e8 | ||
![]() |
a160c674d6 | ||
![]() |
4db2aa1a67 | ||
![]() |
ed6ef90fa1 | ||
![]() |
f0015ba645 | ||
![]() |
65a17296f5 | ||
![]() |
f967485c75 | ||
![]() |
1f7185c913 | ||
![]() |
8f3624382b | ||
![]() |
b883b91a8c | ||
![]() |
c4be219a85 | ||
![]() |
51e3d0b875 | ||
![]() |
d662cfde9e | ||
![]() |
7ae59b7023 | ||
![]() |
9f5b9f8afe | ||
![]() |
48c99c31b8 | ||
![]() |
e43594f3cd | ||
![]() |
689faa0260 | ||
![]() |
9cd3e438fa | ||
![]() |
742dea4165 | ||
![]() |
6776b23c32 | ||
![]() |
f33b3f2750 | ||
![]() |
67aa29da48 | ||
![]() |
642b8a132f | ||
![]() |
b10bf134c0 | ||
![]() |
6bcad34dae | ||
![]() |
6eb48fea7c | ||
![]() |
dc02955e31 | ||
![]() |
c9e3c496f5 | ||
![]() |
0d346f9dc5 | ||
![]() |
d9c19a8003 | ||
![]() |
47de77406e | ||
![]() |
22424e591b | ||
![]() |
276f531f35 | ||
![]() |
84659c2bf1 | ||
![]() |
ad29aee1de | ||
![]() |
e7d6d6513b | ||
![]() |
24217838e2 | ||
![]() |
9261843a27 | ||
![]() |
04449d98b5 | ||
![]() |
6b62c1e6b8 | ||
![]() |
1e67fe4b2a | ||
![]() |
0ed1ff27fb | ||
![]() |
875c8edcaf | ||
![]() |
0f955f5141 | ||
![]() |
afa8ca1714 | ||
![]() |
e7d98e9eda | ||
![]() |
cc63f37094 | ||
![]() |
6ea71953be | ||
![]() |
3710f2079e | ||
![]() |
94311130c1 | ||
![]() |
18cc4cb771 | ||
![]() |
0c5cc3d425 | ||
![]() |
6845bf43a5 | ||
![]() |
e01993fffb | ||
![]() |
bf5691d3cd | ||
![]() |
19117e98bd | ||
![]() |
5254cda720 | ||
![]() |
22cccfc781 | ||
![]() |
f179742600 | ||
![]() |
6ad36f2aab | ||
![]() |
9d45acdfba | ||
![]() |
064772d0bb | ||
![]() |
217f3d97f7 | ||
![]() |
566811ae62 | ||
![]() |
b0d113d7bb | ||
![]() |
08d4c39d6c | ||
![]() |
02ac8e90d6 | ||
![]() |
bf76a0b473 | ||
![]() |
27992e2b13 | ||
![]() |
4e1ea18251 | ||
![]() |
9d167da919 | ||
![]() |
a3471cff76 | ||
![]() |
355ec34ad1 | ||
![]() |
a44d573d3d | ||
![]() |
888b4c852d | ||
![]() |
fbcc8e1c45 | ||
![]() |
bdcf4f124a | ||
![]() |
bea888f8db | ||
![]() |
a6894512dd | ||
![]() |
0dd621d444 | ||
![]() |
f9484851a1 | ||
![]() |
03c5efcd0a | ||
![]() |
907ce276c2 | ||
![]() |
afe075ff56 | ||
![]() |
1a01e2c98f | ||
![]() |
99746aeed9 | ||
![]() |
991a2e93d9 | ||
![]() |
01548af27e | ||
![]() |
19e2869261 | ||
![]() |
b88deef758 | ||
![]() |
c7588e9350 | ||
![]() |
bdb3bd3ab1 | ||
![]() |
3686a12d11 | ||
![]() |
94fe385ef4 | ||
![]() |
f5e2919db1 | ||
![]() |
399997e83c | ||
![]() |
1edb5c8c9e | ||
![]() |
c64c5b13ab | ||
![]() |
555c229519 | ||
![]() |
4744a2f123 | ||
![]() |
9cd98003e8 | ||
![]() |
30634cd0af | ||
![]() |
a8f6f7aa43 | ||
![]() |
689089a949 | ||
![]() |
75dcb932f8 | ||
![]() |
5c6330f70f | ||
![]() |
5cf2a0b052 | ||
![]() |
c804b6b68d | ||
![]() |
3de96587b7 | ||
![]() |
787fc22f83 | ||
![]() |
c8438faab5 | ||
![]() |
5200096c4e | ||
![]() |
24f3efdbe3 | ||
![]() |
2b0187604b | ||
![]() |
1d2de24cbe | ||
![]() |
8531abcbeb | ||
![]() |
29a740353a | ||
![]() |
2f9ce078ee | ||
![]() |
6914f92e59 | ||
![]() |
8eef678e48 | ||
![]() |
f48b00cb7f | ||
![]() |
b0d9496595 | ||
![]() |
c03236f937 | ||
![]() |
7b17c2eff0 | ||
![]() |
7c105f553f | ||
![]() |
a93781c360 | ||
![]() |
448c85788c | ||
![]() |
9ce0766353 | ||
![]() |
923c22ff9e | ||
![]() |
eb3e2ab003 | ||
![]() |
ca6bccbfa9 | ||
![]() |
a35ed97167 | ||
![]() |
239337b406 | ||
![]() |
78c5d40bb0 | ||
![]() |
2081d3f7ed | ||
![]() |
a69f94803b | ||
![]() |
7806f973bb | ||
![]() |
b8a00ecbfa | ||
![]() |
fd6bae5dc1 | ||
![]() |
6f44dcf010 | ||
![]() |
c9fcf91a0d | ||
![]() |
acec461b62 | ||
![]() |
9bd101431e | ||
![]() |
74ccbb8953 | ||
![]() |
25c672a27f | ||
![]() |
26757f17e8 | ||
![]() |
dddbf25228 | ||
![]() |
0786ef2641 | ||
![]() |
0a9517f121 | ||
![]() |
f4f1fd2a58 | ||
![]() |
0867e3c70c | ||
![]() |
078c38c20c | ||
![]() |
a14902002a | ||
![]() |
acaba8c3ea | ||
![]() |
ea48034806 | ||
![]() |
e3c92638b3 | ||
![]() |
56b094724b | ||
![]() |
3654a43a90 | ||
![]() |
eeb0cb90ce | ||
![]() |
b726b8691b | ||
![]() |
e4d09097c0 | ||
![]() |
e394cea55c | ||
![]() |
768bdef2bf | ||
![]() |
6d8faa90a7 | ||
![]() |
d4deee3660 | ||
![]() |
ae5cb3e980 | ||
![]() |
b82594a293 | ||
![]() |
bfb665bb85 | ||
![]() |
18dfd059a0 | ||
![]() |
93656904de | ||
![]() |
8f2c197e09 | ||
![]() |
fb4df28671 | ||
![]() |
875add54e4 | ||
![]() |
6c242b8593 | ||
![]() |
1e1fd16977 | ||
![]() |
76c6127851 | ||
![]() |
ab8fb12972 | ||
![]() |
71281e0c69 | ||
![]() |
17bb8b0d71 | ||
![]() |
970bec6ac3 | ||
![]() |
07bd5079fa | ||
![]() |
f1ffc301c8 | ||
![]() |
eaeac710eb | ||
![]() |
a170a8c6c2 | ||
![]() |
0a54abc7c2 | ||
![]() |
ce16ee5d49 | ||
![]() |
5c57d5e26e | ||
![]() |
7e8166b045 | ||
![]() |
c525ee9480 | ||
![]() |
7556985bc4 | ||
![]() |
49c124177b | ||
![]() |
bd0f22de6e | ||
![]() |
284d178103 | ||
![]() |
12bd4ad8dd | ||
![]() |
8d406ee504 | ||
![]() |
6dbf4fd078 | ||
![]() |
bb8445a416 | ||
![]() |
e1559cd1a9 | ||
![]() |
55fb15ae15 | ||
![]() |
c682073da5 | ||
![]() |
97e9a0372c | ||
![]() |
86da5f9913 | ||
![]() |
c68d8bfbe4 | ||
![]() |
72273ed4f6 | ||
![]() |
02f8f0abbd | ||
![]() |
43642e2f46 | ||
![]() |
2e5c7c77f8 | ||
![]() |
3d763f1d77 | ||
![]() |
4c31c47a98 | ||
![]() |
566d6d775e | ||
![]() |
e5e0f99d52 | ||
![]() |
340cbc4c6b | ||
![]() |
2870e04586 | ||
![]() |
a3cc15f11f | ||
![]() |
ce86be7632 | ||
![]() |
c28d913a7e | ||
![]() |
2ac9dc1c75 | ||
![]() |
e53196d176 | ||
![]() |
a0bc73903c | ||
![]() |
a82edf718b | ||
![]() |
d698d0e9d2 | ||
![]() |
6e5dbc0792 | ||
![]() |
9eb95cbbdb | ||
![]() |
b2925966a8 | ||
![]() |
eafbf6159d | ||
![]() |
1a7daf4844 | ||
![]() |
c1a767695d | ||
![]() |
0404657e74 | ||
![]() |
0af0905b2e | ||
![]() |
41b452ff48 | ||
![]() |
bd7a32fd3e | ||
![]() |
c6f51db4ed | ||
![]() |
a6445af712 | ||
![]() |
cb58b14e06 | ||
![]() |
66c15adbbf | ||
![]() |
b7f8e22fbf | ||
![]() |
cf11b5a745 | ||
![]() |
30a0bb6d85 | ||
![]() |
f4defcedfd | ||
![]() |
e51b9bf29e | ||
![]() |
c1e2d655bc | ||
![]() |
79c9e208ca | ||
![]() |
fbbc0075ea | ||
![]() |
3708b2fe72 | ||
![]() |
b1df44421b | ||
![]() |
303f63c222 | ||
![]() |
53818a1325 | ||
![]() |
ed554f2a39 | ||
![]() |
ba5de20ba8 | ||
![]() |
b0674713a7 | ||
![]() |
4edc71b005 | ||
![]() |
4af2c880ed | ||
![]() |
e64e97cedf | ||
![]() |
cd5e42341d | ||
![]() |
ea5acb0950 | ||
![]() |
a16354276f | ||
![]() |
19c5d45734 | ||
![]() |
f8c8198bb9 | ||
![]() |
7a693bed46 | ||
![]() |
c3bfa2e64a | ||
![]() |
fe8332eb90 | ||
![]() |
aeda0d0503 | ||
![]() |
c4233012d0 | ||
![]() |
dcff3d3f14 | ||
![]() |
c2174a4ee4 | ||
![]() |
05778a2d32 | ||
![]() |
7729db1e11 | ||
![]() |
5b0c1754f6 | ||
![]() |
71d5c77508 | ||
![]() |
2d8ec0c8ee | ||
![]() |
5d0a61fafc | ||
![]() |
4d9b604c04 | ||
![]() |
7409be7197 | ||
![]() |
7df21c6839 | ||
![]() |
83dc7117de | ||
![]() |
b8550dec2a | ||
![]() |
e0222ec454 | ||
![]() |
e2931c35ba | ||
![]() |
364196614b | ||
![]() |
084b20e4df | ||
![]() |
263e600b51 | ||
![]() |
0f1ecf85d5 | ||
![]() |
86cee444be | ||
![]() |
fcfe074672 | ||
![]() |
cbb0e5b4b9 | ||
![]() |
57fd9a5b4b | ||
![]() |
4da0ad7da2 | ||
![]() |
54bbae3286 | ||
![]() |
8f07d16176 | ||
![]() |
5932f1212e | ||
![]() |
0139030404 | ||
![]() |
5c70c57a70 | ||
![]() |
d2c0ad8096 | ||
![]() |
92da6b64c7 | ||
![]() |
7d0ad7e662 | ||
![]() |
2801019912 | ||
![]() |
11df4745e7 | ||
![]() |
e6147184c0 | ||
![]() |
26bca2666d | ||
![]() |
7708de0c65 | ||
![]() |
739a783c8d | ||
![]() |
b1dcdea03c | ||
![]() |
d9beee93ed | ||
![]() |
33575b639e | ||
![]() |
720f604f98 | ||
![]() |
f94cb9df39 | ||
![]() |
432cb86235 | ||
![]() |
e10e3c9d7c | ||
![]() |
7552395368 | ||
![]() |
b1a2e6ee17 | ||
![]() |
70dd90adef | ||
![]() |
5d94321807 | ||
![]() |
a39046cb55 | ||
![]() |
768e16210b | ||
![]() |
3110b044eb | ||
![]() |
26748d5c9b | ||
![]() |
0c9cfde907 | ||
![]() |
4a85304427 | ||
![]() |
382e253e5a | ||
![]() |
dc41cd8b86 | ||
![]() |
9e4cf3de68 | ||
![]() |
48a9b6162a | ||
![]() |
e2b9a7fef8 | ||
![]() |
756a9feb00 | ||
![]() |
da74988378 | ||
![]() |
1828ac0bb5 | ||
![]() |
7b0f593a93 | ||
![]() |
e7e7c7a9ba | ||
![]() |
a1261f89a1 | ||
![]() |
02dff04212 | ||
![]() |
e5754a5d29 | ||
![]() |
3c5ba17b58 | ||
![]() |
925984c09f | ||
![]() |
ba8bda73fa | ||
![]() |
4a42d578fe | ||
![]() |
e98edce5d3 | ||
![]() |
42d4b5f2a2 | ||
![]() |
fdf7823887 | ||
![]() |
87319b6e29 | ||
![]() |
d284a1dee7 | ||
![]() |
a9c2eedc71 | ||
![]() |
bd52b7e97b | ||
![]() |
46ff688c20 | ||
![]() |
be584a8a00 | ||
![]() |
fd7d0253f3 | ||
![]() |
2114dd328f | ||
![]() |
e61246f5ba | ||
![]() |
2ac8222f19 | ||
![]() |
5bd466c27d | ||
![]() |
56baadc829 | ||
![]() |
91d2092938 | ||
![]() |
4310cfe916 | ||
![]() |
8994a59dfc | ||
![]() |
734323eb1e | ||
![]() |
cb495af05a | ||
![]() |
2e03490fe6 | ||
![]() |
f2106c6990 | ||
![]() |
2c20e5db3e | ||
![]() |
aaf2bf8317 | ||
![]() |
38b2eefe0d | ||
![]() |
4022d797d9 | ||
![]() |
7fba67cefe | ||
![]() |
feebc0abe9 | ||
![]() |
88aa4c7651 | ||
![]() |
d9ec603164 | ||
![]() |
afff68ca4d | ||
![]() |
dceba8bb43 | ||
![]() |
f0032a39f2 | ||
![]() |
66303c1078 | ||
![]() |
23e58009f2 | ||
![]() |
6b3440f4fd | ||
![]() |
31b9c46a79 | ||
![]() |
e8f487f96e | ||
![]() |
9bdd810e76 | ||
![]() |
99be958c4f | ||
![]() |
59d69209dc | ||
![]() |
1b7f9cd42f | ||
![]() |
a9ea934edc | ||
![]() |
f62fee2ff7 | ||
![]() |
616c406e8e | ||
![]() |
dde7a7b809 | ||
![]() |
829b5941e1 | ||
![]() |
4390fa7acd | ||
![]() |
62de5f53a8 | ||
![]() |
bf0aa61d87 | ||
![]() |
7ca62cb53a | ||
![]() |
cd87324452 | ||
![]() |
de21729578 | ||
![]() |
fc0f1e20d5 | ||
![]() |
22f5a83dcc | ||
![]() |
f509e9ce5d | ||
![]() |
381026758a | ||
![]() |
5a409ec0ec | ||
![]() |
d1cc7394b5 | ||
![]() |
b0bbe70315 | ||
![]() |
0f4016c180 | ||
![]() |
81b3bc8787 | ||
![]() |
061a6e9860 | ||
![]() |
c29f95678f | ||
![]() |
fed57ec5a3 | ||
![]() |
d9f463322b | ||
![]() |
6d75b47865 | ||
![]() |
feb045b32d | ||
![]() |
c1bd178021 | ||
![]() |
260a7c7d05 | ||
![]() |
5291fbf999 | ||
![]() |
a5949bbc0b | ||
![]() |
d17a739f48 | ||
![]() |
3c582190d6 | ||
![]() |
186107e089 | ||
![]() |
4399b28d2f | ||
![]() |
c1acccf30e | ||
![]() |
51b8836af0 | ||
![]() |
76d4485639 | ||
![]() |
abfee18363 | ||
![]() |
5d2154cc97 | ||
![]() |
24615739ea | ||
![]() |
55c9b54b13 | ||
![]() |
580e541f77 | ||
![]() |
7ed97e89a3 | ||
![]() |
1e94f9a79e | ||
![]() |
b7a7805262 | ||
![]() |
19a135edac | ||
![]() |
c99927f3c4 | ||
![]() |
f5be7693de | ||
![]() |
a4be500bf9 | ||
![]() |
cc0d4f8b62 | ||
![]() |
26c36a8caf | ||
![]() |
b5c9c9df22 | ||
![]() |
19616b05d7 | ||
![]() |
3f28023dc4 | ||
![]() |
2b34503524 | ||
![]() |
b1f6c3a87a | ||
![]() |
d065287acd | ||
![]() |
cb8b2e3f5f | ||
![]() |
1638097485 | ||
![]() |
b1c59f4f6e | ||
![]() |
5fd943c936 | ||
![]() |
e63aa1a5f4 | ||
![]() |
06a1c21b82 | ||
![]() |
8c1ff000f0 | ||
![]() |
8058392043 | ||
![]() |
6a8b69f793 | ||
![]() |
fe4468d789 | ||
![]() |
323cba6777 | ||
![]() |
ff07728fa3 | ||
![]() |
e83e6f4712 | ||
![]() |
c7ec9468c0 | ||
![]() |
b72acfa648 | ||
![]() |
74fe7d4cb8 | ||
![]() |
ce566167f2 | ||
![]() |
b211c653c7 | ||
![]() |
53dcfd3134 | ||
![]() |
eed6302ad8 | ||
![]() |
e0e270df1a | ||
![]() |
f012f09d4f | ||
![]() |
e819f05927 | ||
![]() |
e916d9f93c | ||
![]() |
d8dfa88fb8 | ||
![]() |
565c473a75 | ||
![]() |
a19870947a | ||
![]() |
bdc319d3df | ||
![]() |
8d69f395c2 | ||
![]() |
8049dfb30c | ||
![]() |
a4edece719 | ||
![]() |
762f098c14 | ||
![]() |
693507aaca | ||
![]() |
b7bbb63a26 | ||
![]() |
631c0c5d53 | ||
![]() |
55568f597f | ||
![]() |
7592143322 | ||
![]() |
008fb3fb74 | ||
![]() |
a7c237f93d | ||
![]() |
3d42d3690b | ||
![]() |
1e7cd66165 | ||
![]() |
7d187405de | ||
![]() |
66d5957310 | ||
![]() |
7ca4e90885 | ||
![]() |
7d5ebfcd31 | ||
![]() |
5af4942607 | ||
![]() |
97dffedbcd | ||
![]() |
b6b8e3b1dc | ||
![]() |
33280dc4cd | ||
![]() |
0d31ddfa43 | ||
![]() |
6bc5c3e5d0 | ||
![]() |
9582183458 | ||
![]() |
57d7059dae | ||
![]() |
50749052ae | ||
![]() |
222cfff8b8 | ||
![]() |
a504869cbb | ||
![]() |
5bb42ff43c | ||
![]() |
cbce0f2a2e | ||
![]() |
6c3bcb708f | ||
![]() |
ac407a6679 | ||
![]() |
f47b371f23 | ||
![]() |
ecfb744fe7 | ||
![]() |
511169b31b | ||
![]() |
df167910e1 | ||
![]() |
965198e8a1 | ||
![]() |
c8f6c6c2b0 | ||
![]() |
99319542b9 | ||
![]() |
2c9ce139d4 | ||
![]() |
720390862a | ||
![]() |
be3afe8b68 | ||
![]() |
bdc9909117 | ||
![]() |
54fa9899eb | ||
![]() |
c58a568f64 | ||
![]() |
ad8ee5610d | ||
![]() |
1ef4d43d4e | ||
![]() |
d40fa3beea | ||
![]() |
b03482996f | ||
![]() |
0c6888cdd0 | ||
![]() |
269246c412 | ||
![]() |
6c79ce0f98 | ||
![]() |
166537bf00 | ||
![]() |
c2ac8b5763 | ||
![]() |
a538ac2c8a | ||
![]() |
e5933c4ed4 | ||
![]() |
94432dad88 | ||
![]() |
9c8172df40 | ||
![]() |
96a8ab17c1 | ||
![]() |
f6d639f2bf | ||
![]() |
44cca729f0 | ||
![]() |
f39ee8b863 | ||
![]() |
64d3cd88a1 | ||
![]() |
084636b6cf | ||
![]() |
f7c5154bda | ||
![]() |
9bf12a8648 | ||
![]() |
cfb68c5b39 | ||
![]() |
cceb5dcf39 | ||
![]() |
582ec82f83 | ||
![]() |
cb0fa11eeb | ||
![]() |
89c4d57b18 | ||
![]() |
a66f3380e3 | ||
![]() |
288f4a0082 | ||
![]() |
622cbb806d | ||
![]() |
5c8a0307fb | ||
![]() |
51e80cb7bc | ||
![]() |
9e921ed9ad | ||
![]() |
56730adf48 | ||
![]() |
22aa316483 | ||
![]() |
d60272b79a | ||
![]() |
068a57763c | ||
![]() |
6810659f9b | ||
![]() |
8020671ca6 | ||
![]() |
0f57b55b4c | ||
![]() |
c7909de767 | ||
![]() |
c1c6a6ce21 | ||
![]() |
111018b911 | ||
![]() |
40b4d5ca2e | ||
![]() |
25d1f5d7d1 | ||
![]() |
d6a86c29f9 | ||
![]() |
2d3119ef22 | ||
![]() |
9dd269d766 | ||
![]() |
3c6897e2cd | ||
![]() |
7afe867fd5 | ||
![]() |
779dc0bcb8 | ||
![]() |
70d6252eae | ||
![]() |
9ed200a70e | ||
![]() |
be2cfd7622 | ||
![]() |
367fc1561b | ||
![]() |
5ac85a4c45 | ||
![]() |
3d793dc7ef | ||
![]() |
b76d55283d | ||
![]() |
422bf2d1e1 | ||
![]() |
33e0ccb9ce | ||
![]() |
f86fcbd609 | ||
![]() |
99a4d4ea75 | ||
![]() |
0b1c349a8f | ||
![]() |
2a910b0e45 | ||
![]() |
05ba57e006 | ||
![]() |
56e0d941d0 | ||
![]() |
2d9540117f | ||
![]() |
5cae40c396 | ||
![]() |
ae0aeb84f5 | ||
![]() |
c9d091c1b3 | ||
![]() |
a52f7ae02c | ||
![]() |
366bb0e495 | ||
![]() |
aff28ce60e | ||
![]() |
40a705bbd3 | ||
![]() |
1e1d10570c | ||
![]() |
fe1083822d | ||
![]() |
b4710290b6 | ||
![]() |
bb7964ff02 | ||
![]() |
7f934b4470 | ||
![]() |
0eef6473ba | ||
![]() |
9c6cb6e1f0 | ||
![]() |
98ce2bec4a | ||
![]() |
1d6ab42f88 | ||
![]() |
dde7f1d073 | ||
![]() |
ef25289a6d | ||
![]() |
82db02756c | ||
![]() |
905aa21e8c | ||
![]() |
ab19c8c6cf | ||
![]() |
fdd8c246dd | ||
![]() |
23fb6b8dd3 | ||
![]() |
45abe203f5 | ||
![]() |
86cabd3d1a | ||
![]() |
8fe1d2ddbe | ||
![]() |
a15671a530 | ||
![]() |
6f512527aa | ||
![]() |
7e702a2ab2 | ||
![]() |
37d2f13e49 | ||
![]() |
0a2fdf47b3 | ||
![]() |
55f8704523 | ||
![]() |
19c03729f3 | ||
![]() |
66e5ea3b4b | ||
![]() |
28e3b109b7 | ||
![]() |
a5256fb2d0 | ||
![]() |
f358f322da | ||
![]() |
b77d633382 | ||
![]() |
cd022e6d5e | ||
![]() |
27e6aa60fd | ||
![]() |
dc795cfc51 | ||
![]() |
4d2229e50b | ||
![]() |
82a40de894 | ||
![]() |
5c17e0974b | ||
![]() |
9db5dc7ab8 | ||
![]() |
9ba4dd5524 | ||
![]() |
32b037af32 | ||
![]() |
c2c05312a0 | ||
![]() |
b91c432fa8 | ||
![]() |
023d0b27f5 | ||
![]() |
57ffd6444b | ||
![]() |
8bbc330407 | ||
![]() |
76853d1171 | ||
![]() |
0daf748c97 | ||
![]() |
8aabf65bb7 | ||
![]() |
825ef58f85 | ||
![]() |
614ff50394 | ||
![]() |
907857985a | ||
![]() |
846512a283 | ||
![]() |
e646650a7e | ||
![]() |
038f1b4bd6 | ||
![]() |
d7c09e15b9 | ||
![]() |
2c3c066ea0 | ||
![]() |
184eb9e048 | ||
![]() |
ce1f07126f | ||
![]() |
0188f24a0d | ||
![]() |
581de22a06 | ||
![]() |
9764273894 | ||
![]() |
cc53ad4fd6 | ||
![]() |
142e7df6cf | ||
![]() |
4d6991fd45 | ||
![]() |
98ab22c119 | ||
![]() |
381d2aa8f7 | ||
![]() |
594c24eab7 | ||
![]() |
be2a64f4d2 | ||
![]() |
51bd8bd0e5 | ||
![]() |
4fa3329d59 | ||
![]() |
7959113c97 | ||
![]() |
cd385be81f | ||
![]() |
8ed6bc2e31 | ||
![]() |
68e63d15e5 | ||
![]() |
89c31bb967 | ||
![]() |
e3120df5d0 | ||
![]() |
59b687f0db | ||
![]() |
cee0123105 | ||
![]() |
22aede0278 | ||
![]() |
dadc82ae37 | ||
![]() |
26af1dd907 | ||
![]() |
c515dd19f2 | ||
![]() |
a39b8576e8 | ||
![]() |
a4d8e8492f | ||
![]() |
323f415fa8 | ||
![]() |
4255425b93 | ||
![]() |
7c70e3ef84 | ||
![]() |
d42f80c65e | ||
![]() |
c3cc81249b | ||
![]() |
d8273af0ad | ||
![]() |
a6bdf2c1c9 | ||
![]() |
14bb885ce9 | ||
![]() |
e5eefc9978 | ||
![]() |
6001c34091 | ||
![]() |
17d0cdf823 | ||
![]() |
8aceb287de | ||
![]() |
e42835f163 | ||
![]() |
1a8f9ca2e3 | ||
![]() |
162084082e | ||
![]() |
c2098e1cf4 | ||
![]() |
22c668b500 | ||
![]() |
6672046b6f | ||
![]() |
78b456d05c | ||
![]() |
2cc78abe56 | ||
![]() |
46bb12844f | ||
![]() |
1537d02408 | ||
![]() |
a66591166f | ||
![]() |
7443c45001 | ||
![]() |
a4f5670cd8 | ||
![]() |
c9c5f1b3e9 | ||
![]() |
b4c9f2fce2 | ||
![]() |
c48184cf91 | ||
![]() |
681fe1421a | ||
![]() |
acc293b662 | ||
![]() |
3a67e2e8c4 | ||
![]() |
8682d8af78 | ||
![]() |
b82707ff9a | ||
![]() |
525dcfedfb | ||
![]() |
18cc261e35 | ||
![]() |
bda9c3d715 | ||
![]() |
4cbbeeb7dc | ||
![]() |
beaad9ac9b | ||
![]() |
bf1eaf44d5 | ||
![]() |
c94f7933ef | ||
![]() |
01475a8c45 | ||
![]() |
9436661958 | ||
![]() |
e88ae15272 | ||
![]() |
1fa53bc3dc | ||
![]() |
1a6dcbbf5b | ||
![]() |
4be3dee0b4 | ||
![]() |
5756969be9 | ||
![]() |
8442d2ccfa | ||
![]() |
300986f129 | ||
![]() |
08cbbe8988 | ||
![]() |
827c97f0ca | ||
![]() |
3f5b28a0b4 | ||
![]() |
7c25f7c187 | ||
![]() |
52e21c9ccf | ||
![]() |
8d448a130c | ||
![]() |
39debca9fc | ||
![]() |
29e92f4231 | ||
![]() |
0797bccc36 | ||
![]() |
e8c2bacae6 | ||
![]() |
80f02b8ab6 | ||
![]() |
a0871be6c0 | ||
![]() |
25a0dd3082 | ||
![]() |
50d304d7f3 | ||
![]() |
021b2c0357 | ||
![]() |
f922c14f15 | ||
![]() |
92541b7280 | ||
![]() |
f5ff224358 | ||
![]() |
6bc6300149 | ||
![]() |
fe9fc1cbd2 | ||
![]() |
4f28a284be | ||
![]() |
094208492e | ||
![]() |
ce95fdccd3 | ||
![]() |
2c335a4dd9 | ||
![]() |
1a99d07cae | ||
![]() |
58d4b79376 | ||
![]() |
0b52271b3a | ||
![]() |
503117d8bf | ||
![]() |
c92b4b54be | ||
![]() |
5e44dcc681 | ||
![]() |
2d257bd671 | ||
![]() |
8ed04ed73c | ||
![]() |
737a6f18c3 | ||
![]() |
ac942b8ed9 | ||
![]() |
a8bad54efc | ||
![]() |
481a79eb28 | ||
![]() |
8cd7dfe822 | ||
![]() |
2416c6c26c | ||
![]() |
4eb0cd6460 | ||
![]() |
e43747c2e9 | ||
![]() |
5f8aeb1c6d | ||
![]() |
dcfb296dcf | ||
![]() |
fdcb94f0d8 | ||
![]() |
5f0a8fe627 | ||
![]() |
0495ba25ad | ||
![]() |
fa242e32d7 | ||
![]() |
fc3b098170 | ||
![]() |
2b0fff31a3 | ||
![]() |
dade3adf80 | ||
![]() |
b4fad03613 | ||
![]() |
59b8636bc8 | ||
![]() |
3337cd0f79 | ||
![]() |
0c7cd8023e | ||
![]() |
502ef82b80 | ||
![]() |
1708ed11b4 | ||
![]() |
59b9d82a55 | ||
![]() |
39babd5368 | ||
![]() |
2595dd815b | ||
![]() |
d1577a6a65 | ||
![]() |
f219f239d8 | ||
![]() |
ebc93692f5 | ||
![]() |
3af31c2265 | ||
![]() |
f4f6908c80 | ||
![]() |
31fc13cf03 | ||
![]() |
ec1561661b | ||
![]() |
272430a58c | ||
![]() |
1537e14dfc | ||
![]() |
22f7777099 | ||
![]() |
813030bb4c | ||
![]() |
31bb38ffd4 | ||
![]() |
b6cfe04422 | ||
![]() |
0ae67991d1 | ||
![]() |
f892334077 | ||
![]() |
2e2f6e893b | ||
![]() |
a2a4cf8668 | ||
![]() |
b8cf3face0 | ||
![]() |
1c991c229d | ||
![]() |
a3c5e670ef | ||
![]() |
ffc75a5053 | ||
![]() |
4d6246be4d | ||
![]() |
c6a1e668f4 | ||
![]() |
b19f83d74d | ||
![]() |
a877e0c3dd | ||
![]() |
265cb08e79 | ||
![]() |
c473aca701 | ||
![]() |
f93f8e34b3 | ||
![]() |
fa53c7bc99 | ||
![]() |
1f4bd67f7e | ||
![]() |
0c427d0dee | ||
![]() |
701e4f78aa | ||
![]() |
cd5cb880ea | ||
![]() |
cf033ec49d | ||
![]() |
0ec506470a | ||
![]() |
606da02461 | ||
![]() |
e49f8fe630 | ||
![]() |
02836524ce | ||
![]() |
50176a0e3b | ||
![]() |
06e7ee7efb | ||
![]() |
e08bbd7047 | ||
![]() |
653bcbe3ae | ||
![]() |
3700516097 | ||
![]() |
3fe09a4e6a | ||
![]() |
2b8dc1c913 | ||
![]() |
9f7a846d6b | ||
![]() |
466225806e | ||
![]() |
8e42ad5536 | ||
![]() |
39e78a1014 | ||
![]() |
cc4a6ebf96 | ||
![]() |
4a3837374f | ||
![]() |
f70067c570 | ||
![]() |
24b6463fbb | ||
![]() |
78152db78f | ||
![]() |
985f3b8e3d | ||
![]() |
245dc7603f | ||
![]() |
53bbc43ff3 | ||
![]() |
ad6ac0a770 | ||
![]() |
de67752a46 | ||
![]() |
a5eb7ffc8e | ||
![]() |
b09e5b5688 | ||
![]() |
a4c65b3fd1 | ||
![]() |
ec6f7978b5 | ||
![]() |
c9033551f2 | ||
![]() |
375e688938 | ||
![]() |
9d6b3a1d0b | ||
![]() |
43e4bc81d3 | ||
![]() |
4bcba322ff | ||
![]() |
0991cc1c25 | ||
![]() |
83cbc37422 | ||
![]() |
0909462d51 | ||
![]() |
27fc2de146 | ||
![]() |
be7228c7e6 | ||
![]() |
e51b1bd9eb | ||
![]() |
2706b4d866 | ||
![]() |
83af2731a8 | ||
![]() |
f66fbda032 | ||
![]() |
d215e81fb1 | ||
![]() |
afe39c279b | ||
![]() |
ee13d1fb45 | ||
![]() |
917f022614 | ||
![]() |
fc68bce7d9 | ||
![]() |
0363ddab37 | ||
![]() |
f18345a6c4 | ||
![]() |
8b13cfd902 | ||
![]() |
16313059d9 | ||
![]() |
deb072cb76 | ||
![]() |
b206787520 | ||
![]() |
0db61e85b0 | ||
![]() |
c3fba76142 | ||
![]() |
7fc9c7d03b | ||
![]() |
70c41b5690 | ||
![]() |
68522d2062 | ||
![]() |
3bb6442117 | ||
![]() |
2b3e806e56 | ||
![]() |
a034fc9997 | ||
![]() |
4861cc58ce | ||
![]() |
3160b59730 | ||
![]() |
032af2f56d | ||
![]() |
035e3884d8 | ||
![]() |
ce3c80641b | ||
![]() |
4eda8a1ff3 | ||
![]() |
b410b70814 | ||
![]() |
eca72c9898 | ||
![]() |
71974edfd7 | ||
![]() |
613604ea74 | ||
![]() |
6c62029a74 | ||
![]() |
a5209dc400 | ||
![]() |
1118335b1c | ||
![]() |
f96163f04e | ||
![]() |
b0dbbf963c | ||
![]() |
a38bf6e75a | ||
![]() |
0d892dbf23 | ||
![]() |
a403b790f7 | ||
![]() |
43aa64bb86 | ||
![]() |
ba17e542c5 | ||
![]() |
73dedf35de | ||
![]() |
96c622b36f | ||
![]() |
698f2bb7d4 | ||
![]() |
be39da4855 | ||
![]() |
b14d0223c2 | ||
![]() |
fcfd951f2b | ||
![]() |
fcefb1e515 | ||
![]() |
3070b52a3e | ||
![]() |
37639fc3ff | ||
![]() |
770bcb62a0 | ||
![]() |
b3530d1ce1 | ||
![]() |
ba9d1bac1e | ||
![]() |
db184bf5d3 | ||
![]() |
15a80bb405 | ||
![]() |
f0b5be41fe | ||
![]() |
517abe0ea9 | ||
![]() |
ca90fa515d | ||
![]() |
6605b1511f | ||
![]() |
f8b24f4b70 | ||
![]() |
ada03f6736 | ||
![]() |
04e679798a | ||
![]() |
6a49aa1c2b | ||
![]() |
34b7bbd68d | ||
![]() |
c0d8e14c2a | ||
![]() |
c017b43456 | ||
![]() |
98f13d9282 | ||
![]() |
5ef1e83197 | ||
![]() |
4df2ab6013 | ||
![]() |
45c62716cb | ||
![]() |
48f3045854 | ||
![]() |
3281cbd365 | ||
![]() |
5a6678147e | ||
![]() |
0c2b5aff65 | ||
![]() |
9dca4fc837 | ||
![]() |
fff08c6101 | ||
![]() |
1022053aef | ||
![]() |
0629c58d31 | ||
![]() |
bc2afe33b0 | ||
![]() |
2c963fcd05 | ||
![]() |
d4a403b640 | ||
![]() |
89cb68f7b7 | ||
![]() |
c371e45144 | ||
![]() |
2e7e039899 | ||
![]() |
c6e01d3468 | ||
![]() |
5336e17a06 | ||
![]() |
a017fae49d | ||
![]() |
96d59c2a40 | ||
![]() |
1f23c3ac72 | ||
![]() |
3f26a61d9a | ||
![]() |
6a728d916f | ||
![]() |
7f0ab07752 | ||
![]() |
7d7a52732d | ||
![]() |
2d6f692a4c | ||
![]() |
279a4c4db1 | ||
![]() |
a65db13c9e | ||
![]() |
a592fc9866 | ||
![]() |
66c1b016c9 | ||
![]() |
f9a3bccf7b | ||
![]() |
1c95022184 | ||
![]() |
d4deca66b2 | ||
![]() |
1c2ef541ea | ||
![]() |
55d84758a2 | ||
![]() |
82010866b1 | ||
![]() |
294ad6cd58 | ||
![]() |
bfdedbffe6 | ||
![]() |
d409e328be | ||
![]() |
a6ae25da06 | ||
![]() |
bc1266a44b | ||
![]() |
c1eb0ac4cd | ||
![]() |
9939422d10 | ||
![]() |
51cf310472 | ||
![]() |
f38a31eee3 | ||
![]() |
e388662422 | ||
![]() |
0258ef641d | ||
![]() |
bf29dd3971 | ||
![]() |
7314ce1963 | ||
![]() |
70d69d3518 | ||
![]() |
574c883207 | ||
![]() |
5812ed014e | ||
![]() |
13e4578b7a | ||
![]() |
d6a700565e | ||
![]() |
d9d8c96c70 | ||
![]() |
329caf6c1c | ||
![]() |
27ee3ef98f | ||
![]() |
63967cf6c0 | ||
![]() |
a874bb5fb5 | ||
![]() |
dc4ee61809 | ||
![]() |
febc4473d3 | ||
![]() |
7b379e648c | ||
![]() |
e4bff62923 | ||
![]() |
3839e43428 | ||
![]() |
9e8cccdf82 | ||
![]() |
f87032c302 | ||
![]() |
30aa775450 | ||
![]() |
308fccd7b1 | ||
![]() |
6e7bbdbe63 | ||
![]() |
4c9a4aadc8 | ||
![]() |
d340e79bea | ||
![]() |
09cf67cb73 | ||
![]() |
0ef7c459ca | ||
![]() |
bf9795f70b | ||
![]() |
712dcf9f74 | ||
![]() |
c42dba1623 | ||
![]() |
d44d271c28 | ||
![]() |
501b4bd9f4 | ||
![]() |
2fd14442c7 | ||
![]() |
4efd038805 | ||
![]() |
3e1adf8325 | ||
![]() |
60e4d1a3cd | ||
![]() |
a13089516e | ||
![]() |
2e3e518982 | ||
![]() |
c12ae11ed7 | ||
![]() |
956badb2fd | ||
![]() |
e71400cd5c | ||
![]() |
6668d77b93 | ||
![]() |
629f13f3d9 | ||
![]() |
dfe261a715 | ||
![]() |
756a0c9b13 | ||
![]() |
49948b577e | ||
![]() |
61516914ce | ||
![]() |
c424b295b1 | ||
![]() |
c37d0ecd76 | ||
![]() |
37615a135b | ||
![]() |
abf9a3b7c3 | ||
![]() |
c87ac63e9b | ||
![]() |
28d262eecd | ||
![]() |
d1d3593d65 | ||
![]() |
9f06ffbbd5 | ||
![]() |
b963b1a587 | ||
![]() |
998c8365c0 | ||
![]() |
70e43c02fb | ||
![]() |
fed40532c1 | ||
![]() |
08fac89fb0 | ||
![]() |
e7da2e0779 | ||
![]() |
3d999f8936 | ||
![]() |
b26d4bbb40 | ||
![]() |
e5734a9024 | ||
![]() |
8c691e8e56 | ||
![]() |
14d91e094a | ||
![]() |
2f40d76b6f | ||
![]() |
219e9ca1ef | ||
![]() |
f3f9bd9697 | ||
![]() |
2e205cafd3 | ||
![]() |
4d7e0977ac | ||
![]() |
0f93fcc477 | ||
![]() |
fa6f7ac74d | ||
![]() |
081f7124d7 | ||
![]() |
2caaf89186 | ||
![]() |
5a612922f3 | ||
![]() |
9f584f2c6a | ||
![]() |
ee4b3a101e | ||
![]() |
a04fa47883 | ||
![]() |
efc61a57d9 | ||
![]() |
1e627fed34 | ||
![]() |
20afea35d9 | ||
![]() |
db8127c253 | ||
![]() |
e03ea97133 | ||
![]() |
3d858e3bb6 | ||
![]() |
a0cba05830 | ||
![]() |
868935f8a0 | ||
![]() |
6581ec4028 | ||
![]() |
41d3f59002 | ||
![]() |
bb201fb842 | ||
![]() |
a55aaf7f38 | ||
![]() |
edcca58e38 | ||
![]() |
d1c2715402 | ||
![]() |
1febb31647 | ||
![]() |
d5e6cc78d5 | ||
![]() |
e8d14bdc60 | ||
![]() |
5f1fadad29 | ||
![]() |
5c38357ba6 | ||
![]() |
27aa12911d | ||
![]() |
c662ef86d7 | ||
![]() |
450a8295f7 | ||
![]() |
a13e7ad3e1 | ||
![]() |
3077b9423d | ||
![]() |
6204b3d165 | ||
![]() |
1624e26447 | ||
![]() |
cec027a6e6 | ||
![]() |
d347532c96 | ||
![]() |
d9c2347e7c | ||
![]() |
2e7c93428d | ||
![]() |
4455e9a907 | ||
![]() |
5d16ac24c3 | ||
![]() |
f715486c58 | ||
![]() |
7c77a692ce | ||
![]() |
ac5121f067 | ||
![]() |
e34b01755e | ||
![]() |
5971ee1a46 | ||
![]() |
6bda70a451 | ||
![]() |
9a9e2cc5df | ||
![]() |
3dbe3e9ea7 | ||
![]() |
3ad7dc3714 | ||
![]() |
1a3bcf6486 | ||
![]() |
6ddbfabfae | ||
![]() |
c72e61e542 | ||
![]() |
f8081d7829 | ||
![]() |
27c25da90d | ||
![]() |
d47e169bd5 | ||
![]() |
6510cf9619 | ||
![]() |
1419e72dbc | ||
![]() |
30448dbc5a | ||
![]() |
85c82c4479 | ||
![]() |
e21f59111c | ||
![]() |
543075222e | ||
![]() |
661b39565f | ||
![]() |
7439de3d25 | ||
![]() |
c9f4879780 | ||
![]() |
60cf077e48 | ||
![]() |
06e65b5734 | ||
![]() |
ac70f1bfac | ||
![]() |
1fc912eaf9 | ||
![]() |
83a0981113 | ||
![]() |
79dc34c531 | ||
![]() |
6ca35fb1af | ||
![]() |
e273883077 | ||
![]() |
0fb9102e69 | ||
![]() |
9a4027e9d4 | ||
![]() |
5e82060124 | ||
![]() |
d861ecae6f | ||
![]() |
061ab0ed8a | ||
![]() |
722f27d3c8 | ||
![]() |
57ec2bb25c | ||
![]() |
f0c38a20bc | ||
![]() |
267b61405d | ||
![]() |
98b14be0f6 | ||
![]() |
fa20ccdd94 | ||
![]() |
454964877d | ||
![]() |
16fcb84886 | ||
![]() |
1d40ffd4f9 | ||
![]() |
a21871f4af | ||
![]() |
ba01ed951b | ||
![]() |
7308bad953 | ||
![]() |
9415e2c5d0 | ||
![]() |
aa392e78a6 | ||
![]() |
2703ec31b9 | ||
![]() |
8cd0ca2cfe | ||
![]() |
c317941767 | ||
![]() |
d1cf8e0016 | ||
![]() |
188fbc340e | ||
![]() |
5e8f910714 | ||
![]() |
30b599acc6 | ||
![]() |
7b4be3b4f7 | ||
![]() |
662eda3c3b | ||
![]() |
aad41225f4 | ||
![]() |
d697c4bc8e | ||
![]() |
2a2e97ddf9 | ||
![]() |
32fe415515 | ||
![]() |
292e4b3515 | ||
![]() |
1a337ab937 | ||
![]() |
43828c2555 | ||
![]() |
73a875c263 | ||
![]() |
c270ac5c9a |
@ -1,7 +1,3 @@
|
|||||||
# We don't need this folder because we map the hole folder
|
# Ignore everything except what we really need
|
||||||
buildroot/
|
*
|
||||||
buildroot-external/
|
!scripts/
|
||||||
buildroot-patches/
|
|
||||||
|
|
||||||
# Ignore too
|
|
||||||
release/
|
|
||||||
|
126
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
126
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
name: Report an issue with Home Assistant Operating System
|
||||||
|
description: Report an issue related to the Home Assistant Operating System.
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Make sure to test with the last version of the Operating System before reporting a bug.
|
||||||
|
If the bug appears to be a regression, make sure to check if the bug indeed disappears
|
||||||
|
from the previous version. Use `ha os update --version x.y` command to downgrade.
|
||||||
|
- type: textarea
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: Describe the issue you are experiencing
|
||||||
|
description: Provide a clear and concise description of what the bug is.
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
## Environment
|
||||||
|
- type: dropdown
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: What operating system image do you use?
|
||||||
|
default: 0
|
||||||
|
options:
|
||||||
|
- generic-x86-64 (Generic UEFI capable x86-64 systems)
|
||||||
|
- generic-aarch64 (Generic UEFI capable aarch64 systems)
|
||||||
|
- khadas-vim3 (Khadas VIM3)
|
||||||
|
- odroid-c2 (Hardkernel ODROID-C2)
|
||||||
|
- odroid-c4 (Hardkernel ODROID-C4)
|
||||||
|
- odroid-m1 (Hardkernel ODROID-M1)
|
||||||
|
- odroid-m1s (Hardkernel ODROID-M1S)
|
||||||
|
- odroid-n2 (Hardkernel ODROID-N2/N2+)
|
||||||
|
- odroid-xu4 (Hardkernel ODROID-XU4)
|
||||||
|
- ova (for Virtual Machines)
|
||||||
|
- rpi2 (Raspberry Pi 2)
|
||||||
|
- rpi3 (Raspberry Pi 3 32-bit OS)
|
||||||
|
- rpi3-64 (Raspberry Pi 3 64-bit OS)
|
||||||
|
- rpi4 (Raspberry Pi 4/400 32-bit OS)
|
||||||
|
- rpi4-64 (Raspberry Pi 4/400 64-bit OS)
|
||||||
|
- rpi5-64 (Raspberry Pi 5 64-bit OS)
|
||||||
|
- tinker (ASUS Tinker Board/Tinker Board S)
|
||||||
|
- yellow (Home Assistant Yellow)
|
||||||
|
- green (Home Assistant Green)
|
||||||
|
description: >
|
||||||
|
Can be found in [Settings -> System -> Repairs -> System Information](https://my.home-assistant.io/redirect/system_health/). It is listed as the `Board` value.
|
||||||
|
|
||||||
|
[](https://my.home-assistant.io/redirect/system_health/)
|
||||||
|
- type: input
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: What version of Home Assistant Operating System is installed?
|
||||||
|
placeholder: "6.6"
|
||||||
|
description: >
|
||||||
|
Can be found in [Settings -> System -> Repairs -> System Information (top right menu)](https://my.home-assistant.io/redirect/system_health/). It is listed as the `Host Operating System` value.
|
||||||
|
- type: dropdown
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: Did the problem occur after upgrading the Operating System?
|
||||||
|
default: 0
|
||||||
|
options:
|
||||||
|
- "No"
|
||||||
|
- "Yes"
|
||||||
|
- type: textarea
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: Hardware details
|
||||||
|
description: >
|
||||||
|
Provide details about the hardware used for your install.
|
||||||
|
This is especially important for bare-metal x86 installations.
|
||||||
|
If you have any USB devices attached, please list them here.
|
||||||
|
For VMs, include the hypervisor type and version.
|
||||||
|
- type: textarea
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: Steps to reproduce the issue
|
||||||
|
description: |
|
||||||
|
Please tell us exactly how to reproduce your issue.
|
||||||
|
Provide clear and concise step by step instructions and add code snippets if needed.
|
||||||
|
value: |
|
||||||
|
1.
|
||||||
|
2.
|
||||||
|
3.
|
||||||
|
...
|
||||||
|
- type: textarea
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: Anything in the Supervisor logs that might be useful for us?
|
||||||
|
description: >
|
||||||
|
Supervisor Logs can be found in [Settings -> System -> Logs](https://my.home-assistant.io/redirect/logs/?provider=supervisor)
|
||||||
|
then choose `Supervisor` in the top right. Alternatively enter `ha supervisor logs` in the Home Assistant CLI.
|
||||||
|
|
||||||
|
[](https://my.home-assistant.io/redirect/logs/?provider=supervisor)
|
||||||
|
render: txt
|
||||||
|
- type: textarea
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
attributes:
|
||||||
|
label: Anything in the Host logs that might be useful for us?
|
||||||
|
description: >
|
||||||
|
Host Logs can be found in [Settings -> System -> Logs](https://my.home-assistant.io/redirect/logs/?provider=host)
|
||||||
|
then choose `Host` in the top right. Alternatively enter `ha host logs` in the Home Assistant CLI.
|
||||||
|
render: txt
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: System information
|
||||||
|
description: >
|
||||||
|
**Optional** Copy the full System Health in this text area.
|
||||||
|
|
||||||
|
System information can be found in [Settings -> System -> Repairs -> System Information (top right menu)](https://my.home-assistant.io/redirect/system_health/),
|
||||||
|
Click the copy button at the bottom of the pop-up and paste it here.
|
||||||
|
|
||||||
|
[](https://my.home-assistant.io/redirect/system_health/)
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional information
|
||||||
|
description: >
|
||||||
|
**Optional** If you have any additional information for us, use the field below.
|
||||||
|
Please note, you can attach screenshots or screen recordings here, by
|
||||||
|
dragging and dropping files in the field below.
|
21
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
21
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: Report incorrect or missing information on our documentation
|
||||||
|
url: https://github.com/home-assistant/home-assistant.io/issues
|
||||||
|
about: Our documentation has its own issue tracker. Please report issues with the website there.
|
||||||
|
|
||||||
|
- name: Report incorrect or missing information on our developer documentation
|
||||||
|
url: https://github.com/home-assistant/developers.home-assistant/issues
|
||||||
|
about: Our developer documentation has its own issue tracker. Please report issues with the website there.
|
||||||
|
|
||||||
|
- name: Request a feature for the Operating System
|
||||||
|
url: https://github.com/orgs/home-assistant/discussions
|
||||||
|
about: Request an new feature for the Operating System.
|
||||||
|
|
||||||
|
- name: I have a question or need support
|
||||||
|
url: https://www.home-assistant.io/help
|
||||||
|
about: We use GitHub for tracking bugs, check our website for resources on getting help.
|
||||||
|
|
||||||
|
- name: I'm unsure where to go?
|
||||||
|
url: https://www.home-assistant.io/join-chat
|
||||||
|
about: If you are unsure where to go, then joining our chat is recommended; Just ask!
|
97
.github/actions/bump-rpi-imager-version/action.yml
vendored
Normal file
97
.github/actions/bump-rpi-imager-version/action.yml
vendored
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
name: 'Bump RPi Imager OS version'
|
||||||
|
description: 'Bump version of Home Assistant OS in RPi Imager'
|
||||||
|
inputs:
|
||||||
|
version:
|
||||||
|
required: true
|
||||||
|
description: "Version of Home Assistant OS to bump to."
|
||||||
|
release-date:
|
||||||
|
required: true
|
||||||
|
description: "Release date as ISO 8601 date string."
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- shell: bash
|
||||||
|
id: validate-input
|
||||||
|
env:
|
||||||
|
INPUTS_DATE: ${{ inputs.release-date }}
|
||||||
|
run: |
|
||||||
|
if [[ -z "$INPUTS_DATE" ]] || [[ ! "$INPUTS_DATE" =~ ^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})Z$ ]]; then
|
||||||
|
echo "::error::Argument 'release-date' must be an ISO 8601 date string."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "date=$(date --date=${INPUTS_DATE} +'%Y-%m-%d')" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- shell: bash
|
||||||
|
run: git clone --depth 1 https://github.com/home-assistant/version.git /tmp/version
|
||||||
|
|
||||||
|
- shell: bash
|
||||||
|
env:
|
||||||
|
INPUTS_VERSION: ${{ inputs.version }}
|
||||||
|
run: |
|
||||||
|
function bump_entry() {
|
||||||
|
json=$1
|
||||||
|
version=$2
|
||||||
|
release_date=$3
|
||||||
|
image_id=$4
|
||||||
|
image_name=$5
|
||||||
|
url="https://github.com/home-assistant/operating-system/releases/download/${version}/haos_${image_id}-${version}.img.xz"
|
||||||
|
temp_image=$(mktemp --suffix=.img.xz)
|
||||||
|
temp_out=$(mktemp)
|
||||||
|
|
||||||
|
curl -fsL -o "$temp_image" "$url"
|
||||||
|
image_download_size=$(stat --printf="%s" "$temp_image")
|
||||||
|
image_download_sha256=$(sha256sum "$temp_image" | awk '{print $1}')
|
||||||
|
unxz "$temp_image"
|
||||||
|
temp_unpacked="${temp_image%.*}"
|
||||||
|
extract_size=$(stat --printf="%s" "$temp_unpacked")
|
||||||
|
extract_sha256=$(sha256sum "$temp_unpacked" | awk '{print $1}')
|
||||||
|
|
||||||
|
entry_name="Home Assistant OS ${version} (${image_name})"
|
||||||
|
|
||||||
|
jq '
|
||||||
|
. as $data
|
||||||
|
| $data
|
||||||
|
| .os_list = [
|
||||||
|
.os_list[]
|
||||||
|
| if .name | test("Home Assistant OS .* \\(" + $image_name + "\\)") then
|
||||||
|
.name = "Home Assistant OS " + $version + " (" + $image_name + ")"
|
||||||
|
| .url = $url
|
||||||
|
| .extract_size = ($extract_size | tonumber)
|
||||||
|
| .extract_sha256 = $extract_sha256
|
||||||
|
| .release_date = $release_date
|
||||||
|
| .image_download_size = ($image_download_size | tonumber)
|
||||||
|
| .image_download_sha256 = $image_download_sha256
|
||||||
|
else .
|
||||||
|
end
|
||||||
|
]' \
|
||||||
|
--arg version "$version" \
|
||||||
|
--arg image_name "$image_name" \
|
||||||
|
--arg entry_name "$entry_name" \
|
||||||
|
--arg release_date "$release_date" \
|
||||||
|
--arg url "$url" \
|
||||||
|
--arg image_download_size "$image_download_size" \
|
||||||
|
--arg image_download_sha256 "$image_download_sha256" \
|
||||||
|
--arg extract_size "$extract_size" \
|
||||||
|
--arg extract_sha256 "$extract_sha256" \
|
||||||
|
"$json" > "$temp_out"
|
||||||
|
|
||||||
|
mv "$temp_out" "$json"
|
||||||
|
rm -rf "$temp_unpacked" "$temp_out"
|
||||||
|
}
|
||||||
|
|
||||||
|
bump_entry /tmp/version/rpi-imager-haos.json "$INPUTS_VERSION" "${{ steps.validate-input.outputs.date }}" "rpi3-64" "RPi 3"
|
||||||
|
bump_entry /tmp/version/rpi-imager-haos.json "$INPUTS_VERSION" "${{ steps.validate-input.outputs.date }}" "rpi4-64" "RPi 4/400"
|
||||||
|
bump_entry /tmp/version/rpi-imager-haos.json "$INPUTS_VERSION" "${{ steps.validate-input.outputs.date }}" "rpi5-64" "RPi 5"
|
||||||
|
bump_entry /tmp/version/rpi-imager-haos.json "$INPUTS_VERSION" "${{ steps.validate-input.outputs.date }}" "yellow" "Yellow"
|
||||||
|
|
||||||
|
- shell: bash
|
||||||
|
env:
|
||||||
|
INPUTS_VERSION: ${{ inputs.version }}
|
||||||
|
run: |
|
||||||
|
cd /tmp/version
|
||||||
|
git commit -am "Bump Home Assistant OS to ${INPUTS_VERSION} for RPi Imager"
|
||||||
|
git push
|
||||||
|
|
||||||
|
- shell: bash
|
||||||
|
run: rm -rf /tmp/version
|
22
.github/actions/haos-builder-command/action.yml
vendored
Normal file
22
.github/actions/haos-builder-command/action.yml
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
name: "Run command in HAOS build container"
|
||||||
|
inputs:
|
||||||
|
image:
|
||||||
|
description: "HAOS builder image to use"
|
||||||
|
required: true
|
||||||
|
command:
|
||||||
|
description: "Command to run in the container"
|
||||||
|
required: true
|
||||||
|
runs:
|
||||||
|
using: 'composite'
|
||||||
|
steps:
|
||||||
|
- name: "Run command in HAOS build container"
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
docker run --rm --privileged \
|
||||||
|
-e BUILDER_UID="$(id -u)" \
|
||||||
|
-e BUILDER_GID="$(id -g)" \
|
||||||
|
-v "${GITHUB_WORKSPACE}:/build" \
|
||||||
|
-v "/mnt/cache:/cache" \
|
||||||
|
-v "/mnt/output:/build/output" \
|
||||||
|
${{ inputs.image }} \
|
||||||
|
${{ inputs.command }}
|
6
.github/dependabot.yml
vendored
Normal file
6
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
59
.github/label-actions.yml
vendored
Normal file
59
.github/label-actions.yml
vendored
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
assume-fixed:
|
||||||
|
comment: >
|
||||||
|
:wave: @{issue-author}, thanks for reporting an issue!
|
||||||
|
|
||||||
|
|
||||||
|
This issue is assumed to be fixed in the latest stable release. Please
|
||||||
|
reopen in case you can still reproduce the issue with the latest stable
|
||||||
|
release. You can find the latest stable release at
|
||||||
|
https://github.com/home-assistant/operating-system/releases/latest
|
||||||
|
close: true
|
||||||
|
close-reason: not planned
|
||||||
|
|
||||||
|
core-issue:
|
||||||
|
comment: >
|
||||||
|
:wave: @{issue-author}, thanks for reporting an issue!
|
||||||
|
|
||||||
|
|
||||||
|
It looks like this issue is related to Home Assistant Core. Please check
|
||||||
|
the [Home Assistant Core](https://github.com/home-assistant/core/issues)
|
||||||
|
repository, the issue might have been reported already. Open a new issue
|
||||||
|
in that repository if you can't find a matching issue.
|
||||||
|
close: true
|
||||||
|
close-reason: not planned
|
||||||
|
|
||||||
|
frontend-issue:
|
||||||
|
comment: >
|
||||||
|
:wave: @{issue-author}, thanks for reporting an issue!
|
||||||
|
|
||||||
|
|
||||||
|
It looks like this issue is related to Home Assistant Frontend. Please
|
||||||
|
check the [Home Assistant Frontend](https://github.com/home-assistant/frontend/issues)
|
||||||
|
repository, the issue might have been reported already. Open a new issue
|
||||||
|
in that repository if you can't find a matching issue.
|
||||||
|
close: true
|
||||||
|
close-reason: not planned
|
||||||
|
|
||||||
|
supervisor-issue:
|
||||||
|
comment: >
|
||||||
|
:wave: @{issue-author}, thanks for reporting an issue!
|
||||||
|
|
||||||
|
|
||||||
|
It looks like this issue is related to Home Assistant Supervisor. Please
|
||||||
|
check the [Home Assistant Supervisor](https://github.com/home-assistant/supervisor/issues)
|
||||||
|
repository, the issue might have been reported already. Open a new issue
|
||||||
|
in that repository if you can't find a matching issue.
|
||||||
|
close: true
|
||||||
|
close-reason: not planned
|
||||||
|
|
||||||
|
new-feature:
|
||||||
|
comment: >
|
||||||
|
:wave: @{issue-author}, thanks for your input!
|
||||||
|
|
||||||
|
We use this issue tracker to track issues of currently supported features.
|
||||||
|
Your request appears to request a new feature. We track potential new
|
||||||
|
features in the [Feature Request section of our Community Forum](https://community.home-assistant.io/c/feature-requests/13).
|
||||||
|
Please check if someone already requested a similar feature, or create
|
||||||
|
a new feature request with the "haos" tag in that forum. Thank you!
|
||||||
|
close: true
|
||||||
|
close-reason: not planned
|
40
.github/release-drafter.yml
vendored
Normal file
40
.github/release-drafter.yml
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
name-template: Home Assistant OS $RESOLVED_VERSION
|
||||||
|
tag-template: $RESOLVED_VERSION
|
||||||
|
version-template: "$MAJOR.$MINOR"
|
||||||
|
categories:
|
||||||
|
- title: 'Home Assistant Operating System'
|
||||||
|
label: 'os'
|
||||||
|
- title: 'Raspberry Pi'
|
||||||
|
label: 'board/raspberrypi'
|
||||||
|
- title: 'Home Assistant Yellow'
|
||||||
|
label: 'board/yellow'
|
||||||
|
- title: 'Home Assistant Green'
|
||||||
|
label: 'board/green'
|
||||||
|
- title: 'Open Virtual Appliance'
|
||||||
|
label: 'board/ova'
|
||||||
|
- title: 'Generic x86-64'
|
||||||
|
label: 'board/generic-x86-64'
|
||||||
|
- title: 'Hardkernel ODROID'
|
||||||
|
label: 'board/odroid'
|
||||||
|
- title: 'ASUS Tinker'
|
||||||
|
label: 'board/tinker'
|
||||||
|
- title: 'Khadas VIM Series'
|
||||||
|
label: 'board/khadas'
|
||||||
|
- title: 'Generic aarch64'
|
||||||
|
label: 'board/generic-aarch64'
|
||||||
|
- title: 'Documentation'
|
||||||
|
label: 'documentation'
|
||||||
|
- title: 'Build System'
|
||||||
|
label: 'build'
|
||||||
|
- title: 'Dependencies'
|
||||||
|
label: 'dependencies'
|
||||||
|
filter-by-commitish: true
|
||||||
|
template: |
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
$CHANGES
|
||||||
|
version-resolver:
|
||||||
|
major:
|
||||||
|
labels:
|
||||||
|
- 'major'
|
||||||
|
default: minor
|
102
.github/workflows/artifacts-index.yaml
vendored
Normal file
102
.github/workflows/artifacts-index.yaml
vendored
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
name: Update artifacts index
|
||||||
|
|
||||||
|
on:
|
||||||
|
# Manual run for specified version
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
version:
|
||||||
|
description: Version of HAOS to build index for
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
# Called by other workflows (e.g. build.yaml)
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
version:
|
||||||
|
description: Version of HAOS to build index for
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
secrets:
|
||||||
|
R2_OS_ARTIFACTS_ID:
|
||||||
|
required: true
|
||||||
|
R2_OS_ARTIFACTS_KEY:
|
||||||
|
required: true
|
||||||
|
R2_OS_ARTIFACTS_BUCKET:
|
||||||
|
required: true
|
||||||
|
R2_OS_ARTIFACTS_ENDPOINT:
|
||||||
|
required: true
|
||||||
|
CF_ZONE:
|
||||||
|
required: true
|
||||||
|
CF_PURGE_TOKEN:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
env:
|
||||||
|
PYTHON_VERSION: "3.13"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-index:
|
||||||
|
name: Build Home Assistant OS artifacts index
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
steps:
|
||||||
|
- name: Checkout source
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Setup Python version ${{ env.PYTHON_VERSION }}
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: ${{ env.PYTHON_VERSION }}
|
||||||
|
|
||||||
|
- name: Install AWS CLI
|
||||||
|
run: pip install 'awscli<1.37.0'
|
||||||
|
|
||||||
|
- name: Create build index
|
||||||
|
env:
|
||||||
|
AWS_ACCESS_KEY_ID: ${{ secrets.R2_OS_ARTIFACTS_ID }}
|
||||||
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_OS_ARTIFACTS_KEY }}
|
||||||
|
run: |
|
||||||
|
aws s3api list-objects-v2 \
|
||||||
|
--bucket "${{ secrets.R2_OS_ARTIFACTS_BUCKET }}" \
|
||||||
|
--endpoint-url "${{ secrets.R2_OS_ARTIFACTS_ENDPOINT }}" \
|
||||||
|
--prefix "${{ inputs.version }}/" \
|
||||||
|
--query 'Contents[].Key' | jq 'map(split("/")[1]) | sort' > "${{ inputs.version }}.json"
|
||||||
|
aws s3 cp \
|
||||||
|
"${{ inputs.version }}.json" \
|
||||||
|
s3://${{ secrets.R2_OS_ARTIFACTS_BUCKET }}/indexes/ \
|
||||||
|
--endpoint-url "${{ secrets.R2_OS_ARTIFACTS_ENDPOINT }}"
|
||||||
|
|
||||||
|
- name: Regenerate artifacts index
|
||||||
|
env:
|
||||||
|
AWS_ACCESS_KEY_ID: ${{ secrets.R2_OS_ARTIFACTS_ID }}
|
||||||
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_OS_ARTIFACTS_KEY }}
|
||||||
|
run: |
|
||||||
|
aws s3api list-objects-v2 \
|
||||||
|
--bucket "${{ secrets.R2_OS_ARTIFACTS_BUCKET }}" \
|
||||||
|
--endpoint-url "${{ secrets.R2_OS_ARTIFACTS_ENDPOINT }}" \
|
||||||
|
--prefix "indexes/" \
|
||||||
|
--query 'Contents[].Key' | jq 'map(capture("indexes/(?<version>[[:digit:]].+).json").version) | sort' > .os-artifacts/index.json
|
||||||
|
aws s3 sync \
|
||||||
|
.os-artifacts/ \
|
||||||
|
s3://${{ secrets.R2_OS_ARTIFACTS_BUCKET }}/ \
|
||||||
|
--endpoint-url "${{ secrets.R2_OS_ARTIFACTS_ENDPOINT }}" \
|
||||||
|
|
||||||
|
- name: Flush CloudFlare cache
|
||||||
|
run: |
|
||||||
|
# Create purge list of all artifacts
|
||||||
|
jq -r '. | map("https://os-artifacts.home-assistant.io/${{ inputs.version }}/" + .) | join("\n")' < "${{ inputs.version }}.json" > purge_list
|
||||||
|
# Add indexes to purge list too
|
||||||
|
echo "https://os-artifacts.home-assistant.io/indexes/${{ inputs.version }}.json" >> purge_list
|
||||||
|
echo "https://os-artifacts.home-assistant.io/index.html" >> purge_list
|
||||||
|
echo "https://os-artifacts.home-assistant.io/index.json" >> purge_list
|
||||||
|
# Split to chunks of 30 files (limit of CF API)
|
||||||
|
split -d -l30 purge_list purge_list_chunked
|
||||||
|
# Convert chunked lists to JSON arrays and call CF purge API
|
||||||
|
for f in purge_list_chunked*; do
|
||||||
|
files=$(jq -R -s 'split("\n")[:-1]' < "$f")
|
||||||
|
curl --silent --show-error --fail -X POST \
|
||||||
|
"https://api.cloudflare.com/client/v4/zones/${{ secrets.CF_ZONE }}/purge_cache" \
|
||||||
|
-H "Authorization: Bearer ${{ secrets.CF_PURGE_TOKEN }}" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
--data "{\"files\": ${files}}"
|
||||||
|
done
|
475
.github/workflows/build.yaml
vendored
Normal file
475
.github/workflows/build.yaml
vendored
Normal file
@ -0,0 +1,475 @@
|
|||||||
|
# Home Assistant Operating System build workflow
|
||||||
|
|
||||||
|
name: OS build
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
boards:
|
||||||
|
description: 'List of boards to build (comma separated identifiers)'
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
publish:
|
||||||
|
description: 'Publish build artifacts to R2 (not applicable to forks)'
|
||||||
|
required: true
|
||||||
|
type: boolean
|
||||||
|
default: true
|
||||||
|
hassio_channel:
|
||||||
|
description: 'Release channel to use (default: stable for GH releases, dev otherwise)'
|
||||||
|
type: choice
|
||||||
|
required: true
|
||||||
|
default: default
|
||||||
|
options:
|
||||||
|
- default
|
||||||
|
- stable
|
||||||
|
- beta
|
||||||
|
- dev
|
||||||
|
|
||||||
|
env:
|
||||||
|
PYTHON_VERSION: "3.13"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
prepare:
|
||||||
|
name: Prepare build
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: read
|
||||||
|
packages: write
|
||||||
|
outputs:
|
||||||
|
version_dev: ${{ steps.version_dev.outputs.version_dev }}
|
||||||
|
version_main: ${{ steps.version.outputs.version_main }}
|
||||||
|
version_full: ${{ steps.version.outputs.version_full }}
|
||||||
|
channel: ${{ steps.channel.outputs.channel }}
|
||||||
|
hassio_channel_option: ${{ steps.channel.outputs.hassio_channel_option }}
|
||||||
|
matrix: ${{ steps.generate_matrix.outputs.result }}
|
||||||
|
build_container_image: ghcr.io/${{ github.repository_owner }}/haos-builder@${{ steps.build_haos_builder.outputs.digest }}
|
||||||
|
publish_build: ${{ steps.check_publish.outputs.publish_build }}
|
||||||
|
self_signed_cert: ${{ steps.generate_signing_key.outputs.self_signed_cert }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout source
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Check if build should be published
|
||||||
|
id: check_publish
|
||||||
|
env:
|
||||||
|
PUBLISH_FLAG: ${{ inputs.publish }}
|
||||||
|
run: |
|
||||||
|
if [ "${{ github.repository }}" == "home-assistant/operating-system" ]; then
|
||||||
|
if [ "${PUBLISH_FLAG}" != "true" ] && [ "${{ github.event_name }}" != "release" ]; then
|
||||||
|
echo "publish_build=false" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
echo "publish_build=true" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "publish_build=false" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Generate development version
|
||||||
|
shell: bash
|
||||||
|
id: version_dev
|
||||||
|
if: ${{ github.event_name != 'release' }}
|
||||||
|
env:
|
||||||
|
PUBLISH_BUILD: ${{ steps.check_publish.outputs.publish_build }}
|
||||||
|
run: |
|
||||||
|
version_dev="dev$(date --utc +'%Y%m%d')"
|
||||||
|
if [ "${{ env.PUBLISH_BUILD }}" != "true" ]; then
|
||||||
|
version_dev="dev$(date +%s)"
|
||||||
|
fi
|
||||||
|
echo "Development version \"${version_dev}\""
|
||||||
|
echo "version_dev=${version_dev}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Set version suffix
|
||||||
|
if: ${{ github.event_name != 'release' }}
|
||||||
|
env:
|
||||||
|
VERSION_DEV: ${{ steps.version_dev.outputs.version_dev }}
|
||||||
|
run: |
|
||||||
|
sed -i -E "s/(^VERSION_SUFFIX=\").*(\"$)/\1${VERSION_DEV}\2/" buildroot-external/meta
|
||||||
|
|
||||||
|
- name: Get version
|
||||||
|
id: version
|
||||||
|
run: |
|
||||||
|
. ${GITHUB_WORKSPACE}/buildroot-external/meta
|
||||||
|
echo "version_main=${VERSION_MAJOR}.${VERSION_MINOR}" >> $GITHUB_OUTPUT
|
||||||
|
if [ -z "${VERSION_SUFFIX}" ]; then
|
||||||
|
version_full="${VERSION_MAJOR}.${VERSION_MINOR}"
|
||||||
|
else
|
||||||
|
version_full="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_SUFFIX}"
|
||||||
|
fi
|
||||||
|
echo "version_full=${version_full}" >> $GITHUB_OUTPUT
|
||||||
|
echo "Full version number of this release is \"${version_full}\"."
|
||||||
|
|
||||||
|
- name: Validate version
|
||||||
|
id: version_check
|
||||||
|
if: ${{ github.event_name == 'release' }}
|
||||||
|
run: |
|
||||||
|
if [ "${{ steps.version.outputs.version_full }}" != "${{ github.event.release.tag_name }}" ]; then
|
||||||
|
echo "Version number in Buildroot metadata does not match tag (${{ steps.version.outputs.version_full }} vs ${{ github.event.release.tag_name }})."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Get channel
|
||||||
|
id: channel
|
||||||
|
run: |
|
||||||
|
if [[ "${{ github.event_name }}" == "release" ]]; then
|
||||||
|
if [[ "${{ github.event.release.prerelease }}" == "true" ]]; then
|
||||||
|
echo "channel=beta" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
echo "channel=stable" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "channel=dev" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${{ inputs.hassio_channel }}" == "default" ]]; then
|
||||||
|
if [[ "${{ github.event_name }}" == "release" ]]; then
|
||||||
|
echo "hassio_channel_option=BR2_PACKAGE_HASSIO_CHANNEL_STABLE" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
echo "hassio_channel_option=BR2_PACKAGE_HASSIO_CHANNEL_DEV" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [[ "${{ inputs.hassio_channel }}" == "stable" ]]; then
|
||||||
|
echo "hassio_channel_option=BR2_PACKAGE_HASSIO_CHANNEL_STABLE" >> "$GITHUB_OUTPUT"
|
||||||
|
elif [[ "${{ inputs.hassio_channel }}" == "beta" ]]; then
|
||||||
|
echo "hassio_channel_option=BR2_PACKAGE_HASSIO_CHANNEL_BETA" >> "$GITHUB_OUTPUT"
|
||||||
|
elif [[ "${{ inputs.hassio_channel }}" == "dev" ]]; then
|
||||||
|
echo "hassio_channel_option=BR2_PACKAGE_HASSIO_CHANNEL_DEV" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Create build matrix
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
id: generate_matrix
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
const boards = require('./.github/workflows/matrix.json')
|
||||||
|
if ("${{ github.event_name }}" == "release") {
|
||||||
|
return { "board": boards }
|
||||||
|
}
|
||||||
|
|
||||||
|
const boardFilter = "${{ github.event.inputs.boards }}"
|
||||||
|
if (boardFilter == "") {
|
||||||
|
console.log("Run full build for all boards")
|
||||||
|
return { "board": boards }
|
||||||
|
} else {
|
||||||
|
console.log("Run partial build")
|
||||||
|
const boardSet = new Set(boardFilter.split(","))
|
||||||
|
const buildBoards = boards.filter(b => boardSet.has(b.id))
|
||||||
|
return { "board": buildBoards }
|
||||||
|
}
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3.11.1
|
||||||
|
- name: Log in to the GitHub container registry
|
||||||
|
uses: docker/login-action@v3.4.0
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.repository_owner }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- name: Build and Push
|
||||||
|
uses: docker/build-push-action@v6.18.0
|
||||||
|
id: build_haos_builder
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: Dockerfile
|
||||||
|
tags: ghcr.io/${{ github.repository_owner }}/haos-builder
|
||||||
|
cache-from: ghcr.io/${{ github.repository_owner }}/haos-builder:cache-${{ steps.version.outputs.version_main }}
|
||||||
|
cache-to: ghcr.io/${{ github.repository_owner }}/haos-builder:cache-${{ steps.version.outputs.version_main }}
|
||||||
|
push: true
|
||||||
|
|
||||||
|
- name: Generate self-signed certificate
|
||||||
|
id: generate_signing_key
|
||||||
|
env:
|
||||||
|
RAUC_CERTIFICATE: ${{ secrets.RAUC_CERTIFICATE }}
|
||||||
|
RAUC_PRIVATE_KEY: ${{ secrets.RAUC_PRIVATE_KEY }}
|
||||||
|
if: env.RAUC_CERTIFICATE == '' || env.RAUC_PRIVATE_KEY == ''
|
||||||
|
run: |
|
||||||
|
echo "::warning:: RAUC certificate or key is missing in the repository secrets. Building with a public self-signed certificate!"
|
||||||
|
buildroot-external/scripts/generate-signing-key.sh cert.pem key.pem
|
||||||
|
echo "self_signed_cert=true" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Create signing key
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: steps.generate_signing_key.outcome == 'success'
|
||||||
|
with:
|
||||||
|
name: signing-key
|
||||||
|
path: |
|
||||||
|
cert.pem
|
||||||
|
key.pem
|
||||||
|
|
||||||
|
build:
|
||||||
|
name: Build for ${{ matrix.board.id }}
|
||||||
|
permissions:
|
||||||
|
contents: write # for actions/upload-release-asset to upload release asset
|
||||||
|
needs: prepare
|
||||||
|
strategy:
|
||||||
|
fail-fast: ${{ github.event_name == 'release' }}
|
||||||
|
matrix: ${{ fromJson(needs.prepare.outputs.matrix) }}
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout source
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Setup Python version ${{ env.PYTHON_VERSION }}
|
||||||
|
if: ${{ github.event_name != 'release' }}
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: ${{ env.PYTHON_VERSION }}
|
||||||
|
|
||||||
|
- name: Install AWS CLI
|
||||||
|
if: ${{ github.event_name != 'release' && needs.prepare.outputs.publish_build == 'true' }}
|
||||||
|
run: pip install 'awscli<1.37.0'
|
||||||
|
|
||||||
|
- name: Set version suffix
|
||||||
|
if: ${{ github.event_name != 'release' }}
|
||||||
|
env:
|
||||||
|
VERSION_DEV: ${{ needs.prepare.outputs.version_dev }}
|
||||||
|
run: |
|
||||||
|
sed -i -E "s/(^VERSION_SUFFIX=\").*(\"$)/\1${VERSION_DEV}\2/" buildroot-external/meta
|
||||||
|
|
||||||
|
- name: 'Add release PKI certs'
|
||||||
|
if: ${{ needs.prepare.outputs.self_signed_cert != 'true' }}
|
||||||
|
env:
|
||||||
|
RAUC_CERTIFICATE: ${{ secrets.RAUC_CERTIFICATE }}
|
||||||
|
RAUC_PRIVATE_KEY: ${{ secrets.RAUC_PRIVATE_KEY }}
|
||||||
|
run: |
|
||||||
|
echo -e "-----BEGIN CERTIFICATE-----\n${RAUC_CERTIFICATE}\n-----END CERTIFICATE-----" > cert.pem
|
||||||
|
echo -e "-----BEGIN PRIVATE KEY-----\n${RAUC_PRIVATE_KEY}\n-----END PRIVATE KEY-----" > key.pem
|
||||||
|
|
||||||
|
- name: Get self-signed certificate from the prepare job
|
||||||
|
if: ${{ needs.prepare.outputs.self_signed_cert == 'true' }}
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: signing-key
|
||||||
|
|
||||||
|
- name: Free space on build drive
|
||||||
|
run: |
|
||||||
|
# Inspired by https://github.com/easimon/maximize-build-space/blob/v7/action.yml
|
||||||
|
df -h
|
||||||
|
sudo rm -rf /usr/local/lib/android/sdk/ndk
|
||||||
|
sudo rm -rf /opt/hostedtoolcache/CodeQL
|
||||||
|
sudo mkdir /mnt/cache
|
||||||
|
sudo mkdir /mnt/output
|
||||||
|
WORKSPACE_OWNER="$(stat -c '%U:%G' "${GITHUB_WORKSPACE}")"
|
||||||
|
# output directory is symlinked for easier access from workspace
|
||||||
|
# but for build container it must be mounted as a volume
|
||||||
|
sudo ln -sf /mnt/output "${GITHUB_WORKSPACE}/output"
|
||||||
|
sudo chown -R "${WORKSPACE_OWNER}" /mnt/cache
|
||||||
|
sudo chown -R "${WORKSPACE_OWNER}" /mnt/output
|
||||||
|
df -h
|
||||||
|
|
||||||
|
- name: "Restore cache: object files"
|
||||||
|
uses: actions/cache/restore@v4
|
||||||
|
with:
|
||||||
|
path: /mnt/cache/cc
|
||||||
|
key: haos-cc-${{ matrix.board.id }}
|
||||||
|
|
||||||
|
- name: Generate build config
|
||||||
|
uses: "./.github/actions/haos-builder-command"
|
||||||
|
with:
|
||||||
|
image: ${{ needs.prepare.outputs.build_container_image }}
|
||||||
|
command: make ${{ matrix.board.defconfig }}_defconfig
|
||||||
|
|
||||||
|
- name: Override release channel
|
||||||
|
if: ${{ needs.prepare.outputs.hassio_channel_option != 'BR2_PACKAGE_HASSIO_CHANNEL_STABLE' }}
|
||||||
|
uses: "./.github/actions/haos-builder-command"
|
||||||
|
with:
|
||||||
|
image: ${{ needs.prepare.outputs.build_container_image }}
|
||||||
|
command: |
|
||||||
|
bash -c 'echo "${{ needs.prepare.outputs.hassio_channel_option }}=y" >> /build/output/.config && make olddefconfig'
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
uses: "./.github/actions/haos-builder-command"
|
||||||
|
with:
|
||||||
|
image: ${{ needs.prepare.outputs.build_container_image }}
|
||||||
|
command: make
|
||||||
|
|
||||||
|
- name: Check Linux config
|
||||||
|
uses: "./.github/actions/haos-builder-command"
|
||||||
|
with:
|
||||||
|
image: ${{ needs.prepare.outputs.build_container_image }}
|
||||||
|
command: |
|
||||||
|
make BR2_CHECK_DOTCONFIG_OPTS="--github-format --strip-path-prefix=/build/" linux-check-dotconfig
|
||||||
|
|
||||||
|
- name: Upload artifacts
|
||||||
|
if: ${{ github.event_name != 'release' && needs.prepare.outputs.publish_build == 'true' }}
|
||||||
|
working-directory: output/images/
|
||||||
|
env:
|
||||||
|
AWS_ACCESS_KEY_ID: ${{ secrets.R2_OS_ARTIFACTS_ID }}
|
||||||
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_OS_ARTIFACTS_KEY }}
|
||||||
|
run: |
|
||||||
|
aws s3 sync \
|
||||||
|
./ \
|
||||||
|
s3://${{ secrets.R2_OS_ARTIFACTS_BUCKET }}/${{ needs.prepare.outputs.version_full }}/ \
|
||||||
|
--exclude "*" \
|
||||||
|
--include "haos_*" \
|
||||||
|
--endpoint-url ${{ secrets.R2_OS_ARTIFACTS_ENDPOINT }}
|
||||||
|
|
||||||
|
- name: Upload release assets
|
||||||
|
if: ${{ github.event_name == 'release' }}
|
||||||
|
uses: shogo82148/actions-upload-release-asset@v1
|
||||||
|
with:
|
||||||
|
upload_url: ${{ github.event.release.upload_url }}
|
||||||
|
asset_path: output/images/haos_*
|
||||||
|
|
||||||
|
- name: Print cache stats
|
||||||
|
run: |
|
||||||
|
echo "Cache size: $(du -sh /mnt/cache/cc)"
|
||||||
|
echo "Files total: $(find /mnt/cache/cc -mindepth 1 -type f | wc -l)"
|
||||||
|
echo "Old files to remove: $(find /mnt/cache/cc -mindepth 1 -type f -not -anewer output/Makefile | wc -l)"
|
||||||
|
find /mnt/cache/cc -mindepth 1 -type f -not -anewer output/Makefile -delete
|
||||||
|
echo "Cache size after pruning: $(du -sh /mnt/cache/cc)"
|
||||||
|
|
||||||
|
- name: "Save cache: object files"
|
||||||
|
if: github.ref == 'refs/heads/dev'
|
||||||
|
uses: actions/cache/save@v4
|
||||||
|
with:
|
||||||
|
path: /mnt/cache/cc
|
||||||
|
key: haos-cc-${{ matrix.board.id }}-${{ github.run_id }}
|
||||||
|
|
||||||
|
- name: Generate build summary
|
||||||
|
run: |
|
||||||
|
echo "# ${{ matrix.board.id }} build summary" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "## Artifacts" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "| File | Size (bytes) | Size (formatted) |" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "|:-|:-|:-|" >> $GITHUB_STEP_SUMMARY
|
||||||
|
for f in output/images/haos_*; do
|
||||||
|
echo "| $(basename $f) | $(du -b $f | cut -f1) | $(du -bh $f | cut -f1) |" >> $GITHUB_STEP_SUMMARY
|
||||||
|
done
|
||||||
|
echo "## Partitions" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "| File | Size (bytes) | Size (formatted) |" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "|:-|:-|:-|" >> $GITHUB_STEP_SUMMARY
|
||||||
|
for f in boot.vfat kernel.img rootfs.erofs overlay.ext4 data.ext4; do
|
||||||
|
echo "| ${f} | $(du -b output/images/$f | cut -f1) | $(du -bh output/images/$f | cut -f1) |" >> $GITHUB_STEP_SUMMARY
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Upload OS image artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: ${{ github.event_name != 'release' && needs.prepare.outputs.publish_build != 'true' && matrix.board.id != 'ova' }}
|
||||||
|
with:
|
||||||
|
name: haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.img.xz
|
||||||
|
path: |
|
||||||
|
output/images/haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.img.xz
|
||||||
|
|
||||||
|
- name: Upload RAUC bundle artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: ${{ github.event_name != 'release' && needs.prepare.outputs.publish_build != 'true' }}
|
||||||
|
with:
|
||||||
|
name: haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.raucb
|
||||||
|
path: |
|
||||||
|
output/images/haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.raucb
|
||||||
|
|
||||||
|
- name: Upload Open Virtualization Format (OVA) artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: ${{ github.event_name != 'release' && needs.prepare.outputs.publish_build != 'true' && matrix.board.id == 'ova' }}
|
||||||
|
with:
|
||||||
|
name: haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.ova
|
||||||
|
path: |
|
||||||
|
output/images/haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.ova
|
||||||
|
|
||||||
|
- name: Upload QEMU disk image artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
# Create artifact for ova every time - it's used by the called tests workflow
|
||||||
|
if: ${{ matrix.board.id == 'ova' || (github.event_name != 'release' && needs.prepare.outputs.publish_build != 'true' && matrix.board.id == 'generic-aarch64') }}
|
||||||
|
with:
|
||||||
|
name: haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.qcow2.xz
|
||||||
|
path: |
|
||||||
|
output/images/haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.qcow2.xz
|
||||||
|
|
||||||
|
- name: Upload VMware Virtual Machine Disk (VMDK) artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: ${{ github.event_name != 'release' && needs.prepare.outputs.publish_build != 'true' && (matrix.board.id == 'generic-aarch64' || matrix.board.id == 'ova') }}
|
||||||
|
with:
|
||||||
|
name: haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.vmdk.zip
|
||||||
|
path: |
|
||||||
|
output/images/haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.vmdk.zip
|
||||||
|
|
||||||
|
- name: Upload VirtualBox Virtual Disk Image (VDI) artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: ${{ github.event_name != 'release' && needs.prepare.outputs.publish_build != 'true' && matrix.board.id == 'ova' }}
|
||||||
|
with:
|
||||||
|
name: haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.vdi.zip
|
||||||
|
path: |
|
||||||
|
output/images/haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.vdi.zip
|
||||||
|
|
||||||
|
- name: Upload Virtual Hard Disk v2 (VHDX) artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: ${{ github.event_name != 'release' && needs.prepare.outputs.publish_build != 'true' && matrix.board.id == 'ova' }}
|
||||||
|
with:
|
||||||
|
name: haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.vhdx.zip
|
||||||
|
path: |
|
||||||
|
output/images/haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.vhdx.zip
|
||||||
|
|
||||||
|
test:
|
||||||
|
name: Test OS image
|
||||||
|
needs: [ build, prepare ]
|
||||||
|
uses: ./.github/workflows/test.yaml
|
||||||
|
with:
|
||||||
|
version: ${{ needs.prepare.outputs.version_full }}
|
||||||
|
|
||||||
|
update_index:
|
||||||
|
name: Update artifacts index
|
||||||
|
if: ${{ github.event_name != 'release' && needs.prepare.outputs.publish_build == 'true' }}
|
||||||
|
needs: [ build, prepare ]
|
||||||
|
uses: home-assistant/operating-system/.github/workflows/artifacts-index.yaml@dev
|
||||||
|
with:
|
||||||
|
version: ${{ needs.prepare.outputs.version_full }}
|
||||||
|
secrets:
|
||||||
|
R2_OS_ARTIFACTS_ID: ${{ secrets.R2_OS_ARTIFACTS_ID }}
|
||||||
|
R2_OS_ARTIFACTS_KEY: ${{ secrets.R2_OS_ARTIFACTS_KEY }}
|
||||||
|
R2_OS_ARTIFACTS_BUCKET: ${{ secrets.R2_OS_ARTIFACTS_BUCKET }}
|
||||||
|
R2_OS_ARTIFACTS_ENDPOINT: ${{ secrets.R2_OS_ARTIFACTS_ENDPOINT }}
|
||||||
|
CF_ZONE: ${{ secrets.CF_ZONE }}
|
||||||
|
CF_PURGE_TOKEN: ${{ secrets.CF_PURGE_TOKEN }}
|
||||||
|
|
||||||
|
bump_version:
|
||||||
|
name: Bump ${{ needs.prepare.outputs.channel }} channel version
|
||||||
|
if: ${{ github.repository == 'home-assistant/operating-system' && needs.prepare.outputs.publish_build == 'true' }}
|
||||||
|
environment: ${{ needs.prepare.outputs.channel }}
|
||||||
|
needs: [ build, prepare ]
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout source
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Initialize git
|
||||||
|
uses: home-assistant/actions/helpers/git-init@master
|
||||||
|
with:
|
||||||
|
name: ${{ secrets.GIT_NAME }}
|
||||||
|
email: ${{ secrets.GIT_EMAIL }}
|
||||||
|
token: ${{ secrets.GIT_TOKEN }}
|
||||||
|
|
||||||
|
- name: Bump Home Assistant OS ${{ needs.prepare.outputs.channel }} channel version
|
||||||
|
uses: home-assistant/actions/helpers/version-push@master
|
||||||
|
with:
|
||||||
|
key: "hassos[]"
|
||||||
|
key-description: "Home Assistant OS"
|
||||||
|
version: ${{ needs.prepare.outputs.version_full }}
|
||||||
|
channel: ${{ needs.prepare.outputs.channel }}
|
||||||
|
|
||||||
|
- name: Bump Home Assistant OS beta channel version on stable release
|
||||||
|
if: ${{ needs.prepare.outputs.channel == 'stable' }}
|
||||||
|
uses: home-assistant/actions/helpers/version-push@master
|
||||||
|
with:
|
||||||
|
key: "hassos[]"
|
||||||
|
key-description: "Home Assistant OS"
|
||||||
|
version: ${{ needs.prepare.outputs.version_full }}
|
||||||
|
channel: beta
|
||||||
|
|
||||||
|
- name: Bump stable Home Assistant version for RPi Imager
|
||||||
|
if: ${{ github.event_name == 'release' && needs.prepare.outputs.channel == 'stable' }}
|
||||||
|
uses: "./.github/actions/bump-rpi-imager-version"
|
||||||
|
with:
|
||||||
|
version: ${{ needs.prepare.outputs.version_full }}
|
||||||
|
release-date: ${{ github.event.release.published_at }}
|
17
.github/workflows/label-actions.yml
vendored
Normal file
17
.github/workflows/label-actions.yml
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
name: 'Label Actions'
|
||||||
|
|
||||||
|
on:
|
||||||
|
issues:
|
||||||
|
types: [labeled, unlabeled]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
discussions: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
action:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: dessant/label-actions@v4.0.1
|
25
.github/workflows/lock.yml
vendored
Normal file
25
.github/workflows/lock.yml
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
name: Lock
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "45 5 * * *"
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
discussions: write
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lock:
|
||||||
|
if: github.repository_owner == 'home-assistant'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: dessant/lock-threads@v5.0.1
|
||||||
|
with:
|
||||||
|
github-token: ${{ github.token }}
|
||||||
|
issue-inactive-days: "30"
|
||||||
|
exclude-issue-created-before: "2025-01-01T00:00:00Z"
|
||||||
|
issue-lock-reason: ""
|
||||||
|
pr-inactive-days: "7"
|
||||||
|
exclude-pr-created-before: "2025-01-01T00:00:00Z"
|
||||||
|
pr-lock-reason: ""
|
116
.github/workflows/matrix.json
vendored
Normal file
116
.github/workflows/matrix.json
vendored
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "ova",
|
||||||
|
"defconfig": "ova",
|
||||||
|
"architecture": "x86-64",
|
||||||
|
"label": "board/ova"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "generic-x86-64",
|
||||||
|
"defconfig": "generic_x86_64",
|
||||||
|
"architecture": "x86-64",
|
||||||
|
"label": "board/generic-x86-64"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "generic-aarch64",
|
||||||
|
"defconfig": "generic_aarch64",
|
||||||
|
"architecture": "aarch64",
|
||||||
|
"label": "board/generic-aarch64"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "khadas-vim3",
|
||||||
|
"defconfig": "khadas_vim3",
|
||||||
|
"architecture": "aarch64",
|
||||||
|
"label": "board/khadas"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "odroid-c2",
|
||||||
|
"defconfig": "odroid_c2",
|
||||||
|
"architecture": "aarch64",
|
||||||
|
"label": "board/odroid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "odroid-c4",
|
||||||
|
"defconfig": "odroid_c4",
|
||||||
|
"architecture": "aarch64",
|
||||||
|
"label": "board/odroid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "odroid-m1",
|
||||||
|
"defconfig": "odroid_m1",
|
||||||
|
"architecture": "aarch64",
|
||||||
|
"label": "board/odroid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "odroid-m1s",
|
||||||
|
"defconfig": "odroid_m1s",
|
||||||
|
"architecture": "aarch64",
|
||||||
|
"label": "board/odroid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "odroid-n2",
|
||||||
|
"defconfig": "odroid_n2",
|
||||||
|
"architecture": "aarch64",
|
||||||
|
"label": "board/odroid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "odroid-xu4",
|
||||||
|
"defconfig": "odroid_xu4",
|
||||||
|
"architecture": "aarch64",
|
||||||
|
"label": "board/odroid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rpi2",
|
||||||
|
"defconfig": "rpi2",
|
||||||
|
"architecture": "arm",
|
||||||
|
"label": "board/raspberrypi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rpi3",
|
||||||
|
"defconfig": "rpi3",
|
||||||
|
"architecture": "arm",
|
||||||
|
"label": "board/raspberrypi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rpi3-64",
|
||||||
|
"defconfig": "rpi3_64",
|
||||||
|
"architecture": "aarch64",
|
||||||
|
"label": "board/raspberrypi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rpi4",
|
||||||
|
"defconfig": "rpi4",
|
||||||
|
"architecture": "arm",
|
||||||
|
"label": "board/raspberrypi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rpi4-64",
|
||||||
|
"defconfig": "rpi4_64",
|
||||||
|
"architecture": "aarch64",
|
||||||
|
"label": "board/raspberrypi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rpi5-64",
|
||||||
|
"defconfig": "rpi5_64",
|
||||||
|
"architecture": "aarch64",
|
||||||
|
"label": "board/raspberrypi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "yellow",
|
||||||
|
"defconfig": "yellow",
|
||||||
|
"architecture": "aarch64",
|
||||||
|
"label": "board/yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "green",
|
||||||
|
"defconfig": "green",
|
||||||
|
"architecture": "aarch64",
|
||||||
|
"label": "board/green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "tinker",
|
||||||
|
"defconfig": "tinker",
|
||||||
|
"architecture": "arm",
|
||||||
|
"label": "board/tinker"
|
||||||
|
}
|
||||||
|
]
|
34
.github/workflows/pr-checks.yml
vendored
Normal file
34
.github/workflows/pr-checks.yml
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# Home Assistant Operating System pull-request checks
|
||||||
|
|
||||||
|
name: PR checks
|
||||||
|
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linters:
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
steps:
|
||||||
|
- name: Install additional dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get -y install \
|
||||||
|
python3-flake8
|
||||||
|
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
|
||||||
|
- name: Check Dockerfile
|
||||||
|
uses: brpaz/hadolint-action@v1.5.0
|
||||||
|
with:
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
|
||||||
|
- name: Check shell scripts
|
||||||
|
uses: ludeeus/action-shellcheck@2.0.0
|
||||||
|
with:
|
||||||
|
ignore_paths: buildroot
|
||||||
|
|
||||||
|
- name: Check buildroot-external packages
|
||||||
|
run: |
|
||||||
|
buildroot/utils/check-package --exclude PackageHeader --exclude Upstream --br2-external buildroot-external/package/*/*
|
18
.github/workflows/release-drafter.yml
vendored
Normal file
18
.github/workflows/release-drafter.yml
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
name: Release Drafter
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- dev
|
||||||
|
- rel-*
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update_release_draft:
|
||||||
|
permissions:
|
||||||
|
contents: write # for release-drafter/release-drafter to create a github release
|
||||||
|
pull-requests: read # for release-drafter/release-drafter to read PR content and labels
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: release-drafter/release-drafter@v6
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
50
.github/workflows/stale.yml
vendored
Normal file
50
.github/workflows/stale.yml
vendored
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
name: Stale
|
||||||
|
|
||||||
|
# yamllint disable-line rule:truthy
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "40 5 * * *"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
permissions:
|
||||||
|
issues: write # for actions/stale to close stale issues
|
||||||
|
pull-requests: write # for actions/stale to close stale PRs
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
# The 90 day stale policy
|
||||||
|
# Used for:
|
||||||
|
# - Issues & PRs
|
||||||
|
# - No PRs marked as no-stale or pinned
|
||||||
|
# - No issues marked as no-stale, help-wanted or pinned
|
||||||
|
- name: 90 days stale issues & PRs policy
|
||||||
|
uses: actions/stale@v9.1.0
|
||||||
|
with:
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
days-before-stale: 90
|
||||||
|
days-before-close: 7
|
||||||
|
operations-per-run: 150
|
||||||
|
remove-stale-when-updated: true
|
||||||
|
stale-issue-label: "stale"
|
||||||
|
exempt-issue-labels: "no-stale,help-wanted,pinned,enhancement"
|
||||||
|
stale-issue-message: >
|
||||||
|
There hasn't been any activity on this issue recently. To keep our
|
||||||
|
backlog manageable we have to clean old issues, as many of them have
|
||||||
|
already been resolved with the latest updates.
|
||||||
|
|
||||||
|
Please make sure to update to the latest Home Assistant OS version and
|
||||||
|
check if that solves the issue. Let us know if that works for you by
|
||||||
|
adding a comment 👍
|
||||||
|
|
||||||
|
This issue has now been marked as stale and will be closed if no
|
||||||
|
further activity occurs. Thank you for your contributions.
|
||||||
|
|
||||||
|
stale-pr-label: "stale"
|
||||||
|
exempt-pr-labels: "no-stale,pinned"
|
||||||
|
stale-pr-message: >
|
||||||
|
There hasn't been any activity on this pull request recently. This
|
||||||
|
pull request has been automatically marked as stale because of that
|
||||||
|
and will be closed if no further activity occurs within 7 days.
|
||||||
|
|
||||||
|
Thank you for your contributions.
|
101
.github/workflows/test.yaml
vendored
Normal file
101
.github/workflows/test.yaml
vendored
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
name: Test HAOS image
|
||||||
|
run-name: "Test HAOS ${{ inputs.version || format('(OS build #{0})', github.event.workflow_run.run_number) }}"
|
||||||
|
|
||||||
|
on:
|
||||||
|
# Manual test of specified version
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
version:
|
||||||
|
description: Version of HAOS to test
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
# Called by other workflows (e.g. build.yaml)
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
use-artifact:
|
||||||
|
# Workaround for GH weirdness: https://github.com/actions/runner/discussions/1884
|
||||||
|
description: Download OS image using actions/download-artifact
|
||||||
|
required: false
|
||||||
|
type: boolean
|
||||||
|
default: true
|
||||||
|
version:
|
||||||
|
description: Version of HAOS to test (as used in the name of the qcow2 image artifact)
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }}
|
||||||
|
|
||||||
|
name: Test in QEMU
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
steps:
|
||||||
|
- name: Checkout source
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Install system dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y qemu-system-x86 ovmf
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: 3.12
|
||||||
|
|
||||||
|
- name: Install Python requirements
|
||||||
|
run:
|
||||||
|
pip install -r tests/requirements.txt
|
||||||
|
|
||||||
|
- name: Download HAOS image
|
||||||
|
if: ${{ !inputs.use-artifact }}
|
||||||
|
run: |
|
||||||
|
curl -sfL -o haos.qcow2.xz https://os-artifacts.home-assistant.io/${{github.event.inputs.version}}/haos_ova-${{github.event.inputs.version}}.qcow2.xz
|
||||||
|
|
||||||
|
- name: Get OS image artifact
|
||||||
|
if: ${{ inputs.use-artifact }}
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: haos_ova-${{ inputs.version }}.qcow2.xz
|
||||||
|
|
||||||
|
- name: Extract OS image
|
||||||
|
run: |
|
||||||
|
xz -dc haos*.qcow2.xz > tests/haos.qcow2
|
||||||
|
rm haos*.qcow2.xz
|
||||||
|
|
||||||
|
- name: Enable KVM group perms
|
||||||
|
run: |
|
||||||
|
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
|
||||||
|
sudo udevadm control --reload-rules
|
||||||
|
sudo udevadm trigger --name-match=kvm
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: |
|
||||||
|
./tests/run_tests.sh --durations=0 --durations-min=5.0
|
||||||
|
|
||||||
|
- name: Archive logs
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: always()
|
||||||
|
with:
|
||||||
|
name: logs
|
||||||
|
path: |
|
||||||
|
tests/lg_logs/**
|
||||||
|
|
||||||
|
- name: Archive JUnit reports
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: always()
|
||||||
|
with:
|
||||||
|
name: junit_reports
|
||||||
|
path: |
|
||||||
|
tests/junit_reports/*.xml
|
||||||
|
|
||||||
|
- name: Publish test report
|
||||||
|
uses: mikepenz/action-junit-report@v5
|
||||||
|
if: always()
|
||||||
|
with:
|
||||||
|
report_paths: 'tests/junit_reports/*.xml'
|
||||||
|
annotate_only: true
|
||||||
|
detailed_summary: true
|
10
.gitignore
vendored
10
.gitignore
vendored
@ -1,2 +1,12 @@
|
|||||||
|
# OS generated files
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Build output dirs
|
||||||
/release
|
/release
|
||||||
|
output*/
|
||||||
|
|
||||||
|
# Certificates
|
||||||
*.pem
|
*.pem
|
||||||
|
|
||||||
|
# vscode generated files
|
||||||
|
.vscode*
|
||||||
|
4
.gitmodules
vendored
Normal file
4
.gitmodules
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[submodule "buildroot"]
|
||||||
|
path = buildroot
|
||||||
|
url = https://github.com/home-assistant/buildroot.git
|
||||||
|
branch = 2024.02.x-haos
|
2
.hadolint.yaml
Normal file
2
.hadolint.yaml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
ignored:
|
||||||
|
- DL3008
|
82
.os-artifacts/index.html
Normal file
82
.os-artifacts/index.html
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Home Assistant OS - development builds</title>
|
||||||
|
<link rel="shortcut icon" href="https://brands.home-assistant.io/homeassistant/icon.png">
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error {
|
||||||
|
color: maroon;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Home Assistant OS - development builds</h1>
|
||||||
|
<select id="os-builds"></select>
|
||||||
|
<div id="os-builds-list"></div>
|
||||||
|
<script>
|
||||||
|
const buildSelect = document.getElementById('os-builds');
|
||||||
|
const osBuildsList = document.getElementById('os-builds-list');
|
||||||
|
|
||||||
|
const fillVersions = async () => {
|
||||||
|
try {
|
||||||
|
const response = await fetch('/index.json');
|
||||||
|
if (!response.ok) {
|
||||||
|
const p = document.createElement('p');
|
||||||
|
p.className = "error";
|
||||||
|
p.textContent = "Could not load version index file.";
|
||||||
|
osBuildsList.appendChild(p);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const items = await response.json();
|
||||||
|
items.reverse();
|
||||||
|
|
||||||
|
items.forEach(buildVersion => {
|
||||||
|
buildSelect.appendChild(new Option(buildVersion, buildVersion));
|
||||||
|
});
|
||||||
|
|
||||||
|
buildSelect.dispatchEvent(new Event('change'));
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching data:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buildSelect.addEventListener('change', async function() {
|
||||||
|
osBuildsList.innerHTML = '';
|
||||||
|
|
||||||
|
const buildVersion = this.value;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await fetch(`/indexes/${buildVersion}.json`);
|
||||||
|
if (!response.ok) {
|
||||||
|
const p = document.createElement('p');
|
||||||
|
p.className = "error";
|
||||||
|
p.textContent = `Could not load index file for version ${buildVersion}.`;
|
||||||
|
osBuildsList.appendChild(p);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const images = await response.json();
|
||||||
|
|
||||||
|
const ul = document.createElement('ul');
|
||||||
|
images.forEach(image => {
|
||||||
|
const li = document.createElement('li');
|
||||||
|
const a = document.createElement('a');
|
||||||
|
a.href =`/${buildVersion}/${image}`;
|
||||||
|
a.textContent = image;
|
||||||
|
li.appendChild(a);
|
||||||
|
ul.appendChild(li);
|
||||||
|
});
|
||||||
|
|
||||||
|
osBuildsList.appendChild(ul);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching images:', error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
fillVersions();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
25
.travis.yml
25
.travis.yml
@ -1,25 +0,0 @@
|
|||||||
language: bash
|
|
||||||
|
|
||||||
sudo: required
|
|
||||||
service: docker
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- docker-ce
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- shopt -s globstar
|
|
||||||
- docker pull koalaman/shellcheck
|
|
||||||
|
|
||||||
script:
|
|
||||||
- docker run -v $(pwd):/mnt koalaman/shellcheck scripts/*.sh
|
|
||||||
- docker run -v $(pwd):/mnt koalaman/shellcheck buildroot-external/scripts/*.sh
|
|
||||||
- docker run -v $(pwd):/mnt koalaman/shellcheck buildroot-external/scripts/*.sh
|
|
||||||
- docker run -v $(pwd):/mnt koalaman/shellcheck buildroot-external/board/**/*.sh
|
|
||||||
- docker run -v $(pwd):/mnt koalaman/shellcheck buildroot-external/rootfs-overlay/usr/sbin/*
|
|
||||||
- docker run -v $(pwd):/mnt koalaman/shellcheck buildroot-external/rootfs-overlay/usr/libexec/*
|
|
||||||
- docker run -v $(pwd):/mnt koalaman/shellcheck buildroot-external/rootfs-overlay/usr/lib/rauc/*
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
fast_finish: true
|
|
55
Dockerfile
55
Dockerfile
@ -1,21 +1,56 @@
|
|||||||
FROM ubuntu:18.04
|
FROM debian:bullseye
|
||||||
|
|
||||||
|
# Set shell
|
||||||
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
|
||||||
# Docker
|
# Docker
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
apt-transport-https \
|
apt-transport-https \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
curl \
|
curl \
|
||||||
|
gpg-agent \
|
||||||
|
gpg \
|
||||||
|
dirmngr \
|
||||||
software-properties-common \
|
software-properties-common \
|
||||||
&& rm -rf /var/lib/apt/lists/* \
|
&& curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg \
|
||||||
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - \
|
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/trusted.gpg.d/docker.gpg] \
|
||||||
&& add-apt-repository "deb https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
|
https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list \
|
||||||
&& apt-get update && apt-get install -y docker-ce \
|
&& apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
docker-ce \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Build Tools
|
# Build tools
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
wget patch vim cpio python unzip rsync bc bzip2 ncurses-dev \
|
automake \
|
||||||
git make g++ file perl bash binutils locales qemu-utils bison flex \
|
bash \
|
||||||
|
bc \
|
||||||
|
binutils \
|
||||||
|
build-essential \
|
||||||
|
bzip2 \
|
||||||
|
cpio \
|
||||||
|
file \
|
||||||
|
git \
|
||||||
|
graphviz \
|
||||||
|
help2man \
|
||||||
|
jq \
|
||||||
|
make \
|
||||||
|
ncurses-dev \
|
||||||
|
openssh-client \
|
||||||
|
patch \
|
||||||
|
perl \
|
||||||
|
pigz \
|
||||||
|
python3 \
|
||||||
|
python3-matplotlib \
|
||||||
|
python-is-python3 \
|
||||||
|
qemu-utils \
|
||||||
|
rsync \
|
||||||
|
skopeo \
|
||||||
|
sudo \
|
||||||
|
texinfo \
|
||||||
|
unzip \
|
||||||
|
vim \
|
||||||
|
wget \
|
||||||
|
zip \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Init entry
|
# Init entry
|
||||||
|
9
Documentation/README.md
Normal file
9
Documentation/README.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Documentation
|
||||||
|
|
||||||
|
## Contents
|
||||||
|
|
||||||
|
- [Configuration](./configuration.md) - how users can configure HAOS
|
||||||
|
- [Network](./network.md) - approach to networking
|
||||||
|
- [Bluetooth](./bluetooth.md) - approach to bluetooth
|
||||||
|
- [Kernel](./kernel.md) - kernel versions
|
||||||
|
- [Boards](./boards/README.md) - board specific documentation
|
@ -1,9 +1,9 @@
|
|||||||
# Bluetooth
|
# Bluetooth
|
||||||
|
|
||||||
We support `bluetoothctl` on host. Later we want also support Bluetooth trought UI.
|
We support `bluetoothctl` on the host. Later we want to support Bluetooth through the UI.
|
||||||
All pairs and settings are persistent over reboots and updates.
|
All pairs and settings are persistent over reboots and updates.
|
||||||
|
|
||||||
If you want setup Bluetooth on host, use the `bluetoothctl` utility.
|
If you want to setup Bluetooth on the host, use the `bluetoothctl` utility.
|
||||||
|
|
||||||
## Scan devices
|
## Scan devices
|
||||||
|
|
||||||
|
62
Documentation/boards/README.md
Normal file
62
Documentation/boards/README.md
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# Boards
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
The following boards/devices are supported:
|
||||||
|
|
||||||
|
- Nabu Casa
|
||||||
|
- [Home Assistant Green](https://www.home-assistant.io/green/)
|
||||||
|
- [Home Assistant Yellow](https://www.home-assistant.io/yellow/) (based custom carrier board and powered by a Raspberry Pi 4 Compute Module)
|
||||||
|
- [Home Assistant Blue](https://www.home-assistant.io/blue/) (based on ODROID-N2+)
|
||||||
|
- Raspberry Pi
|
||||||
|
- Pi 5 ([4 GB](https://www.raspberrypi.com/products/raspberry-pi-5/?variant=raspberry-pi-5-4gb) and [8 GB](https://www.raspberrypi.com/products/raspberry-pi-5/?variant=raspberry-pi-5-8gb) model) 64-bit
|
||||||
|
- Pi 4 Model B ([1 GB](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/?variant=raspberry-pi-4-model-b-1gb), [2 GB](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/?variant=raspberry-pi-4-model-b-2gb), [4 GB](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/?variant=raspberry-pi-4-model-b-4gb) and [8 GB](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/?variant=raspberry-pi-4-model-b-8gb) model) 32-bit or 64-bit (recommended)
|
||||||
|
- [Pi 3 Model B](https://www.raspberrypi.com/products/raspberry-pi-3-model-b/) and [B+](https://www.raspberrypi.com/products/raspberry-pi-3-model-b-plus/) 32-bit or 64-bit (recommended)
|
||||||
|
- [Pi 2](https://www.raspberrypi.com/products/raspberry-pi-2-model-b/) (not recommended)
|
||||||
|
- Hardkernel
|
||||||
|
- [ODROID-C2](https://www.hardkernel.com/shop/odroid-c2/) (discontinued)
|
||||||
|
- [ODROID-C4](https://www.hardkernel.com/shop/odroid-c4/)
|
||||||
|
- [ODROID-M1](https://www.hardkernel.com/shop/odroid-m1/)
|
||||||
|
- ODROID-M1S [4 GB](https://www.hardkernel.com/shop/odroid-m1s-with-4gbyte-ram/) or [8 GB](https://www.hardkernel.com/shop/odroid-m1s-with-8gbyte-ram/)
|
||||||
|
- [ODROID-N2](https://www.hardkernel.com/shop/odroid-n2/) (discontinued)
|
||||||
|
- ODROID-N2+ [2 GB](https://www.hardkernel.com/shop/odroid-n2-with-2gbyte-ram-2/) or [4 GB](https://www.hardkernel.com/shop/odroid-n2-with-4gbyte-ram-2/)
|
||||||
|
- [ODROID-XU4](https://www.hardkernel.com/shop/odroid-xu4-special-price/)
|
||||||
|
- Asus
|
||||||
|
- [Tinker Board](https://tinker-board.asus.com/product/tinker-board.html)
|
||||||
|
- Generic x86-64 (UEFI, not suited for virtualization)
|
||||||
|
- [Intel NUC5CPYH](https://www.intel.com/content/www/us/en/products/sku/85254/intel-nuc-kit-nuc5cpyh/specifications.html)
|
||||||
|
- [Intel NUC6CAYH](https://www.intel.com/content/www/us/en/products/sku/95062/intel-nuc-kit-nuc6cayh/specifications.html)
|
||||||
|
- [Intel NUC10I3FNK2](https://www.intel.com/content/www/us/en/products/sku/195503/intel-nuc-10-performance-kit-nuc10i3fnk/specifications.html)
|
||||||
|
- [Gigabyte GB-BPCE-3455](https://www.gigabyte.com/Mini-PcBarebone/GB-BPCE-3455-rev-10/sp#sp)
|
||||||
|
- Computers supporting x86-64 architecture and UEFI boot should generally work
|
||||||
|
- Virtual appliance (x86_64/UEFI):
|
||||||
|
- VMDK
|
||||||
|
- OVA ?
|
||||||
|
- VHDX ?
|
||||||
|
- VDI ?
|
||||||
|
- QCOW2 ?
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
- see ? above: are these currently supported? see ova documentation which explains issues with previous OVA distribution)
|
||||||
|
|
||||||
|
## Board specifics
|
||||||
|
|
||||||
|
|Board|Build|Config|Docs|
|
||||||
|
|-----|----|------|----|
|
||||||
|
|Green |`make green` |[green](../../buildroot-external/configs/green_defconfig)|-|
|
||||||
|
|Yellow |`make yellow` |[yellow](../../buildroot-external/configs/yellow_defconfig)|-|
|
||||||
|
|Pi5 64-bit |`make rpi5_64` |[rpi5_64](../../buildroot-external/configs/rpi5_64_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||||
|
|Pi4B 64-bit |`make rpi4_64` |[rpi4_64](../../buildroot-external/configs/rpi4_64_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||||
|
|Pi4B 32-bit |`make rpi4` |[rpi4](../../buildroot-external/configs/rpi4_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||||
|
|Pi3B 64-bit |`make rpi3_64` |[rpi3_64](../../buildroot-external/configs/rpi3_64_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||||
|
|Pi3B 32-bit |`make rpi3` |[rpi3](../../buildroot-external/configs/rpi3_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||||
|
|Pi2 |`make rpi2` |[rpi2](../../buildroot-external/configs/rpi2_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||||
|
|ODROID-C2 |`make odroid_c2` |[odroid_c2](../../buildroot-external/configs/odroid_c2_defconfig)|[hardkernel](./hardkernel/)|
|
||||||
|
|ODROID-C4 |`make odroid_c4` |[odroid_c4](../../buildroot-external/configs/odroid_c4_defconfig)|[hardkernel](./hardkernel/)|
|
||||||
|
|ODROID-M1 |`make odroid_m1` |[odroid_m1](../../buildroot-external/configs/odroid_m1_defconfig)|[hardkernel](./hardkernel/)|
|
||||||
|
|ODROID-M1S |`make odroid_m1s` |[odroid_m1s](../../buildroot-external/configs/odroid_m1s_defconfig)|[hardkernel](./hardkernel/)|
|
||||||
|
|ODROID-N2/N2+ |`make odroid_n2` |[odroid_n2](../../buildroot-external/configs/odroid_n2_defconfig)|[hardkernel](./hardkernel/)|
|
||||||
|
|ODROID-XU4 |`make odroid_xu4` |[odroid_xu4](../../buildroot-external/configs/odroid_xu4_defconfig)|[hardkernel](./hardkernel/)|
|
||||||
|
|Tinker Board |`make tinker` |[tinker](../../buildroot-external/configs/tinker_defconfig)|[asus](./asus/)|
|
||||||
|
|Generic x86-64|`make generic_x86_64`|[generic_x86_64](../../buildroot-external/configs/generic_x86_64_defconfig)|[generic-x86-64](./generic-x86-64/)|
|
||||||
|
|OVA |`make ova` |[ova](../../buildroot-external/configs/ova_defconfig)|[ova](./ova/)|
|
31
Documentation/boards/asus/README.md
Normal file
31
Documentation/boards/asus/README.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# Tinker Board
|
||||||
|
|
||||||
|
## Supported Hardware
|
||||||
|
|
||||||
|
| Device | Release Date | Support | Config |
|
||||||
|
|----------------|---------------|---------|----------|
|
||||||
|
| Tinker RK3288 | April 2017 | yes | [tinker](../../../buildroot-external/configs/tinker_defconfig) |
|
||||||
|
| Tinker S RK3288| January 2018 | yes | [tinker](../../../buildroot-external/configs/tinker_defconfig) |
|
||||||
|
| Tinker Edge T | November 2019 | no? | |
|
||||||
|
| Tinker Edge R | November 2019 | no? | |
|
||||||
|
|
||||||
|
## eMMC
|
||||||
|
|
||||||
|
eMMC support is provided with the same image. Just flash the image to the eMMC by connecting your Tinker Board S to your PC via Micro-USB. Refer to the Tinkerboard documentation how-to flash using Micro-USB and UMS.
|
||||||
|
|
||||||
|
The Home Assistant OS provided U-Boot does support UMS as well,
|
||||||
|
however manual intervention is necessary:
|
||||||
|
|
||||||
|
1. Set the jumper between Micro-USB and HDMI the maskrom mode
|
||||||
|
2. Insert SD card and connect the board via Micro-USB to your PC
|
||||||
|
3. Continusly press Ctrl+C to interrupt boot
|
||||||
|
4. Set the jumper back to the park position
|
||||||
|
5. Start UMS using:
|
||||||
|
```
|
||||||
|
ums 0 mmc 0
|
||||||
|
```
|
||||||
|
6. A mass storage device should appear. Flash Home Assistant OS to it.
|
||||||
|
|
||||||
|
## Serial console
|
||||||
|
|
||||||
|
To access the terminal over serial console, add `console=ttyS2,115200` to `cmdline.txt`. GPIO pins are: 34 = GND / 32 = UART TXD / 33 = UART RXD.
|
36
Documentation/boards/generic-aarch64/README.md
Normal file
36
Documentation/boards/generic-aarch64/README.md
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# Generic aarch64
|
||||||
|
|
||||||
|
## Supported Hardware
|
||||||
|
|
||||||
|
This board configuration aims to support most aarch64 systems with UEFI boot
|
||||||
|
Hardware it has been tested with is listed below.
|
||||||
|
|
||||||
|
## Tested Hardware
|
||||||
|
|
||||||
|
| Device | Release Date | Support | Config |
|
||||||
|
|-----------------------|--------------|---------|-------------|
|
||||||
|
| QEMU | QEMU | yes | [generic_aarch64](../../../buildroot-external/configs/generic_aarch64_defconfig) |
|
||||||
|
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- aarch64 support
|
||||||
|
- UEFI boot
|
||||||
|
|
||||||
|
## Wifi
|
||||||
|
|
||||||
|
WiFi is untested.
|
||||||
|
|
||||||
|
## Bluetooth
|
||||||
|
|
||||||
|
Bluetooth is untested.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Make sure secure boot is disabled in the UEFI BIOS settings.
|
||||||
|
|
||||||
|
Currently there is no shiny installation method. Checklist:
|
||||||
|
- Boot PC to live environment using PXE or USB
|
||||||
|
- Copy or download the Home Assistant OS image into your live environment
|
||||||
|
- unxz the image and dd to the local hard disk
|
||||||
|
- Reboot
|
62
Documentation/boards/generic-x86-64/README.md
Normal file
62
Documentation/boards/generic-x86-64/README.md
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# Generic x86-64
|
||||||
|
|
||||||
|
## Supported Hardware
|
||||||
|
|
||||||
|
This board configuration aims to support most x86-64 systems with UEFI boot. The
|
||||||
|
main aim is to support Intel NUC mini PCs and similar systems. Hardware it has
|
||||||
|
been tested with is listed below.
|
||||||
|
|
||||||
|
## Tested Hardware
|
||||||
|
|
||||||
|
| Device | Release Date | Support | Config |
|
||||||
|
|-----------------------|--------------|---------|-------------|
|
||||||
|
| Intel NUC5CPYH | Q3 2015 | yes | [generic_x86_64](../../../buildroot-external/configs/generic_x86_64_defconfig) |
|
||||||
|
| Intel NUC6CAYH | Q4 2016 | yes | [generic_x86_64](../../../buildroot-external/configs/generic_x86_64_defconfig) |
|
||||||
|
| Intel NUC6CAYS | Q4 2016 | yes | [generic_x86_64](../../../buildroot-external/configs/generic_x86_64_defconfig) |
|
||||||
|
| Intel NUC7i3DNHE | Q3 2017 | yes | [generic_x86_64](../../../buildroot-external/configs/generic_x86_64_defconfig) |
|
||||||
|
| Intel NUC10i3FNK2 | Q4 2019 | yes | [generic_x86_64](../../../buildroot-external/configs/generic_x86_64_defconfig) |
|
||||||
|
| Gigabyte GB-BPCE-3455 | 2017 | yes* | [generic_x86_64](../../../buildroot-external/configs/generic_x86_64_defconfig) |
|
||||||
|
|
||||||
|
\* needs 'nomodeset' in cmdline.txt if you want a console
|
||||||
|
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- x86-64 support
|
||||||
|
- UEFI boot
|
||||||
|
- SATA/AHCI or eMMC storage
|
||||||
|
- Supported NIC:
|
||||||
|
- Intel Gigabit NIC (e1000, igb - via Linux mainline)
|
||||||
|
- Intel PCIe Gigabit NIC (e1000e - via out-of-tree module in *buildroot-external/package/intel-e1000e*)
|
||||||
|
- Realtek Gigabit NIC (r8169)
|
||||||
|
- Intel Wireless Wifi 802.11ac (iwlwifi, see below)
|
||||||
|
|
||||||
|
## Wifi
|
||||||
|
|
||||||
|
The following cards are supported:
|
||||||
|
|
||||||
|
- Intel Wireless 3160
|
||||||
|
- Intel Wireless 7260
|
||||||
|
- Intel Wireless 7265
|
||||||
|
- Intel Wireless-AC 3165
|
||||||
|
- Intel Wireless-AC 3168
|
||||||
|
- Intel Wireless-AC 8260
|
||||||
|
- Intel Wireless-AC 8265
|
||||||
|
- Intel Wireless-AC 9260
|
||||||
|
- Intel Wireless-AC 9461
|
||||||
|
- Intel Wireless-AC 9462
|
||||||
|
- Intel Wireless-AC 9560
|
||||||
|
|
||||||
|
## Bluetooth
|
||||||
|
|
||||||
|
Bluetooth integrated in Intel Wireless cards working OK, other options untested.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Make sure secure boot is disabled in the UEFI BIOS settings.
|
||||||
|
|
||||||
|
Currently there is no shiny installation method. Checklist:
|
||||||
|
- Boot PC to live environment using PXE or USB
|
||||||
|
- Copy or download the Home Assistant OS image into your live environment
|
||||||
|
- unxz the image and dd to the local hard disk
|
||||||
|
- Reboot
|
28
Documentation/boards/hardkernel/README.md
Normal file
28
Documentation/boards/hardkernel/README.md
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# ODROID
|
||||||
|
|
||||||
|
## Supported Hardware
|
||||||
|
|
||||||
|
| Device | Release Date | Support | Config |
|
||||||
|
|----------------|---------------|--------------|-----------|
|
||||||
|
| ODROID-C2 | 2016 | yes | [odroid_c2](../../../buildroot-external/configs/odroid_c2_defconfig) |
|
||||||
|
| ODROID-C4 | 2020 | yes | [odroid_c4](../../../buildroot-external/configs/odroid_c4_defconfig) |
|
||||||
|
| ODROID-M1 | 2022 | yes | [odroid_m1](../../../buildroot-external/configs/odroid_m1_defconfig) |
|
||||||
|
| ODROID-M1S | 2023 | yes | [odroid_m1s](../../../buildroot-external/configs/odroid_m1s_defconfig)|
|
||||||
|
| ODROID-N2 | 2019 | yes | [odroid_n2](../../../buildroot-external/configs/odroid_n2_defconfig) |
|
||||||
|
| ODROID-XU4 | 2015 | yes | [odroid_xu4](../../../buildroot-external/configs/odroid_xu4_defconfig)|
|
||||||
|
|
||||||
|
See separate documentation for each board.
|
||||||
|
|
||||||
|
## Connectivity devices
|
||||||
|
|
||||||
|
### Wi-Fi
|
||||||
|
|
||||||
|
The following devices have been tested on Home Assistant OS 5.8:
|
||||||
|
|
||||||
|
- [Bluetooth Module 2](https://www.hardkernel.com/shop/bluetooth-module-2/)
|
||||||
|
- [WiFi Module 3](https://www.hardkernel.com/shop/wifi-module-3/)
|
||||||
|
|
||||||
|
The [WiFi Module 5A](https://www.hardkernel.com/shop/wifi-module-5a/) is not
|
||||||
|
recommended as there is no upstream driver support available. The driver
|
||||||
|
currently compatible with recent Linux kernel version seems to have issues
|
||||||
|
connecting to 5GHz networks.
|
@ -1,4 +1,4 @@
|
|||||||
# Odroid-C2
|
# ODROID-C2
|
||||||
|
|
||||||
## eMMC
|
## eMMC
|
||||||
|
|
16
Documentation/boards/hardkernel/odroid-c4.md
Normal file
16
Documentation/boards/hardkernel/odroid-c4.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# ODROID-C4
|
||||||
|
|
||||||
|
## Experimental
|
||||||
|
|
||||||
|
ODROID-C4 support is based heavily on the Odroid-C2 and N2 configurations. Given the similarity of the SoCs, as well as the comparable level of support in the Linux kernel, the C4 should hopefully present few surprises. However, Home Assistant support should be regarded as experimental.
|
||||||
|
|
||||||
|
Please also refer to the documentation pages for the [ODROID-C2](./odroid-c2.md) and [Odroid-N2](./odroid-n2.md), as some of that information may apply to the C4 as well.
|
||||||
|
|
||||||
|
Common C4 issues that have been specifically tested and appear to be working:
|
||||||
|
- boot from SD
|
||||||
|
- boot from eMMC
|
||||||
|
- MAC address obtained from eFuse
|
||||||
|
|
||||||
|
## GPIO
|
||||||
|
|
||||||
|
Refer to [the odroid wiki](https://wiki.odroid.com/odroid-c4/hardware/expansion_connectors).
|
50
Documentation/boards/hardkernel/odroid-m1.md
Normal file
50
Documentation/boards/hardkernel/odroid-m1.md
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
# ODROID-M1
|
||||||
|
|
||||||
|
Home Assistant OS 10 and newer support the ODROID-M1 board.
|
||||||
|
|
||||||
|
## SD-card
|
||||||
|
|
||||||
|
SD-card boot is supported via on-board bootloader (SPL) or recovery button.
|
||||||
|
|
||||||
|
## eMMC
|
||||||
|
|
||||||
|
eMMC boot via on-board bootloader requires a newer version of Petitboot
|
||||||
|
(spiboot 20230328 or later). To install the latest version download the SPI boot image
|
||||||
|
from [linuxfactory.or.kr][1] as follows:
|
||||||
|
|
||||||
|
1. Download `spiupdate_odroidm1_20240415.img.xz`
|
||||||
|
2. Use balenaEtcher or another tool to flash the updater onto an SD card
|
||||||
|
3. Download `spiboot-20240109.img`
|
||||||
|
4. Rename the `spiboot-20240109.img` file to`spiboot.img`.
|
||||||
|
5. Paste the `spiboot.img` file onto the FAT partition of that same SD card.
|
||||||
|
6. Plug-in that SD card to your ODROID-M1. Petitboot will update itself, you can verify the progress on the HDMI output.
|
||||||
|
7. If you see the version 20240109 in the top left corner, the installation was successful.\
|
||||||
|
If you see any other version there, the installation failed.
|
||||||
|
|
||||||
|
Once Petitboot is updated you can flash Home Assistant OS directly onto an eMMC.
|
||||||
|
|
||||||
|
## NVMe
|
||||||
|
|
||||||
|
Booting directly from NVMe is not supported. The NVMe card can be used as a data disk.
|
||||||
|
|
||||||
|
## Technical notes on boot flow
|
||||||
|
|
||||||
|
The Home Assistant OS image is bootable by the SoC directly. This means that no help
|
||||||
|
from the Hardkernel provided and pre-installed bootloader Petitboot is necessary.
|
||||||
|
However, the ODROID-M1 automatically boots from internal SPI. To boot
|
||||||
|
directly off the SD-card or eMMC you need to press the recovery button.
|
||||||
|
|
||||||
|
The SPI flashed U-Boot SPL tries searches for an U-Boot binary on the SD-card
|
||||||
|
(and from eMMC with Petitboot 20230328 and later). This mechanism allows you to
|
||||||
|
boot the Home Assistant OS U-Boot without pressing the recovery button.
|
||||||
|
|
||||||
|
## Console
|
||||||
|
|
||||||
|
By default, console access is available on the serial header (CON1) and on HDMI.
|
||||||
|
The serial console's baudrate is 1500000 by default.
|
||||||
|
|
||||||
|
The systemd startup messages will only appear on the serial console by default.
|
||||||
|
To show the messages on the HDMI console instead, add the console manually
|
||||||
|
to the `cmdline.txt` file on the boot partition (e.g. `console=tty0`).
|
||||||
|
|
||||||
|
[1]: http://ppa.linuxfactory.or.kr/images/petitboot/odroidm1/
|
58
Documentation/boards/hardkernel/odroid-m1s.md
Normal file
58
Documentation/boards/hardkernel/odroid-m1s.md
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
# ODROID-M1S
|
||||||
|
|
||||||
|
Home Assistant OS 12 and newer support the ODROID-M1S board.
|
||||||
|
|
||||||
|
## SD-card
|
||||||
|
|
||||||
|
ODROID-M1S can boot HAOS directly from an SD card, as it has higher priority than the system on the eMMC. Simply flash the image to the SD card using your favorite tool and insert it to the micro SD slot on the board. This works even when the eMMC is wiped, or when it contains the factory-default U-Boot SPL loader, which is still able to load U-Boot provided in the HAOS image. In the second case, however, if the SD card fails to probe (e.g. due to a hardware failure), the system on the eMMC may be booted instead of HAOS.
|
||||||
|
|
||||||
|
## eMMC
|
||||||
|
|
||||||
|
HAOS can be installed directly to the eMMC using a special boot image, to do that:
|
||||||
|
|
||||||
|
1. Download the _UMS Utility_ image: [`ODROID-M1S_EMMC2UMS.img`][1]. The _UMS Utility_ is a special image that switches ODROID-M1S to USB Mass Storage device.
|
||||||
|
2. Use balenaEtcher or another tool to flash the _UMS utility_ onto an SD card.
|
||||||
|
3. Plug-in that SD card to your ODROID-M1S and boot it. Connect your PC to the Micro USB OTG port.
|
||||||
|
4. The eMMC will show as a drive on your PC and you can directly flash the HAOS image with balenaEther.
|
||||||
|
|
||||||
|
Installing HAOS replaces the firmware and SPL on the eMMC with the mainline version provided by HAOS. As a result, it is not possible to use the SD card with the EMMC2UMS image anymore, because the mainline SPL is not compatible with U-Boot in the EMMC2UMS image at this time (February 2024). This does not pose any problem for standard use, just makes it more complicated in case you want to return to the Hardkernel-provided OS.
|
||||||
|
|
||||||
|
A reliable way of reflashing the eMMC in this case is to use HAOS booted from an SD card. To do that, insert the SD card with HAOS to the micro SD slot and plug the board in. Once the device boots to the HA CLI, enter `login` to enter the root shell and use `curl` to download an image and `dd` it to the eMMC block device:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl https://dn.odroid.com/RK3566/ODROID-M1S/Installer/ODROID-M1S_EMMC2UMS.img | dd of=/dev/mmcblk0
|
||||||
|
```
|
||||||
|
|
||||||
|
This way the device will start in the UMS mode on the next boot with the SD card removed. Alternatively you can use the [Hardkernel installer image][2] directly instead of the EMMC2UMS image.
|
||||||
|
|
||||||
|
## NVMe
|
||||||
|
|
||||||
|
Booting directly from NVMe is not supported. The NVMe card can be used as a data disk.
|
||||||
|
|
||||||
|
## Technical notes on boot flow
|
||||||
|
|
||||||
|
The Home Assistant OS image is bootable by the SoC directly. Refer to the [boot sequence documentation][3] for the details on what part of the boot is executed from the eMMC and what from the SD card. The steps documented above should however cover all scenarios that a standard user may encounter during usage.
|
||||||
|
|
||||||
|
## Console
|
||||||
|
|
||||||
|
By default, console access is available on the serial header (UART) and on HDMI.
|
||||||
|
The serial console's baudrate is 1500000 by default.
|
||||||
|
|
||||||
|
The systemd startup messages will only appear on the serial console by default.
|
||||||
|
To show the messages on the HDMI console instead, add the console manually
|
||||||
|
to the `cmdline.txt` file on the boot partition (e.g. `console=tty0`).
|
||||||
|
|
||||||
|
## GPIO
|
||||||
|
|
||||||
|
Odroid-M1S introduces a new 14pin expansion header. Refer to [the ODROID wiki][4].
|
||||||
|
At this point not all functionality is supported by the upstream kernel used by Home Assistant OS.
|
||||||
|
Supported modules include:
|
||||||
|
- UPS
|
||||||
|
- Internal USB
|
||||||
|
- Mini IO board (partial support)
|
||||||
|
|
||||||
|
|
||||||
|
[1]: https://dn.odroid.com/RK3566/ODROID-M1S/Installer/ODROID-M1S_EMMC2UMS.img
|
||||||
|
[2]: https://wiki.odroid.com/odroid-m1s/getting_started/os_installation_guide#user_installer
|
||||||
|
[3]: https://wiki.odroid.com/odroid-m1s/board_support/boot_sequence
|
||||||
|
[4]: https://wiki.odroid.com/odroid-m1s/hardware/expansion_connectors
|
18
Documentation/boards/hardkernel/odroid-n2.md
Normal file
18
Documentation/boards/hardkernel/odroid-n2.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# ODROID-N2
|
||||||
|
|
||||||
|
## eMMC
|
||||||
|
|
||||||
|
eMMC support is provided transparently. Just flash the image to the eMMC board as you would an SD card.
|
||||||
|
|
||||||
|
## Console
|
||||||
|
|
||||||
|
By default, console access is granted over the serial header and over HDMI. Certain startup messages will only appear on the serial console by default. To show the messages on the HDMI console instead, swap the order of the two consoles in the `cmdline.txt` file on the boot partition. You can also delete the AML0 console if you don't plan on using the serial adapter.
|
||||||
|
eg. `console=ttyAML0,115200n8 console=tty0`
|
||||||
|
|
||||||
|
## GPIO
|
||||||
|
|
||||||
|
Refer to [the odroid wiki](https://wiki.odroid.com/odroid-n2/hardware/expansion_connectors).
|
||||||
|
At this point not all functionality is supported by the upstream kernel used
|
||||||
|
by Home Assistant OS.
|
||||||
|
|
||||||
|
The GPIO on pin 11 is used as a low active power button input.
|
29
Documentation/boards/hardkernel/odroid-xu4.md
Normal file
29
Documentation/boards/hardkernel/odroid-xu4.md
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# ODROID-XU4
|
||||||
|
|
||||||
|
## eMMC
|
||||||
|
|
||||||
|
The ODROID XU4 uses the eMMC boot partition to boot from. Typically eMMC readers can't write to this eMMC boot partition. There are a couple of possibilities:
|
||||||
|
|
||||||
|
1. **Working** e.g. the eMMC already had a working image before flashing HassOS:
|
||||||
|
- It will be booting to U-Boot (but no further).
|
||||||
|
- If you have the serial adapter, you should be able to enter `distro_bootcmd` at the uboot prompt to continue booting.
|
||||||
|
- If not, flash the HassOS image to an SD card and boot off that temporarily (while the eMMC is also plugged in).
|
||||||
|
- Once booted, login at the prompts and then enter `dd if=/dev/mmcblk0 of=/dev/mmcblk0boot0 bs=512 skip=63 seek=62 count=1440` at the linux prompt.
|
||||||
|
- Reboot with eMMC (don't forget to flip the boot switch to eMMC)
|
||||||
|
2. **Not Working** e.g. a clean/wiped/corruped eMMC boot partition:
|
||||||
|
- You'll need to follow [Hardkernel's instructions](https://forum.odroid.com/viewtopic.php?f=53&t=6173) to get a working boot sector. Then flash HassOS and follow instructions above.
|
||||||
|
- Alternatively, you can try flash HassOS to both an SD and eMMC, then boot off the SD with the eMMC also plugged in, then run `dd if=/dev/mmcblk1 of=/dev/mmcblk0boot0 bs=512 skip=1 seek=0 count=16381` at the Linux prompt. Note that this is untested, but in theory should work..
|
||||||
|
|
||||||
|
If you are getting permissions issues when using the dd command, try disabling RO:
|
||||||
|
`echo 0 > /sys/block/mmcblk0boot0/force_ro`
|
||||||
|
to re-enable after running dd:
|
||||||
|
`echo 1 > /sys/block/mmcblk0boot0/force_ro`
|
||||||
|
|
||||||
|
## Console
|
||||||
|
|
||||||
|
By default, console access is granted over the serial header and over HDMI. Certain startup messages will only appear on the serial console by default. To show the messages on the HDMI console instead, swap the order of the two consoles in the `cmdline.txt` file on the boot partition. You can also delete the SAC2 console if you don't plan on using the serial adapter.
|
||||||
|
eg. `console=tty1 console=ttySAC2,115200`
|
||||||
|
|
||||||
|
## GPIO
|
||||||
|
|
||||||
|
Refer to [the odroid wiki](https://wiki.odroid.com/odroid-xu4/hardware/expansion_connectors).
|
@ -1,50 +0,0 @@
|
|||||||
# Intel NUC
|
|
||||||
|
|
||||||
This board configuration supports the Intel NUC mini PCs and compatibles.
|
|
||||||
Probably most recent computers will work.
|
|
||||||
|
|
||||||
Requirements:
|
|
||||||
- x86-64 support
|
|
||||||
- UEFI boot
|
|
||||||
- SATA/AHCI storage
|
|
||||||
- Supported NIC:
|
|
||||||
- Intel Gigabit NIC (e1000, e1000e, igb)
|
|
||||||
- Realtek Gigabit NIC (r8169)
|
|
||||||
- Intel Wireless Wifi 802.11ac (iwlwifi, see below)
|
|
||||||
|
|
||||||
## Tested Hardware
|
|
||||||
|
|
||||||
| Device | Quirks |
|
|
||||||
|--------|-----------|
|
|
||||||
| Intel NUC5CPYH | |
|
|
||||||
| Gigabyte GB-BPCE-3455 | needs 'nomodeset' in cmdline.txt if you want a console |
|
|
||||||
|
|
||||||
|
|
||||||
## Wifi
|
|
||||||
|
|
||||||
The following cards are supported:
|
|
||||||
|
|
||||||
- Intel Wireless 3160
|
|
||||||
- Intel Wireless 7260
|
|
||||||
- Intel Wireless 7265
|
|
||||||
- Intel Wireless-AC 3165
|
|
||||||
- Intel Wireless-AC 3168
|
|
||||||
- Intel Wireless-AC 8260
|
|
||||||
- Intel Wireless-AC 8265
|
|
||||||
- Intel Wireless-AC 9260
|
|
||||||
- Intel Wireless-AC 9461
|
|
||||||
- Intel Wireless-AC 9462
|
|
||||||
- Intel Wireless-AC 9560
|
|
||||||
|
|
||||||
## Bluetooth
|
|
||||||
|
|
||||||
Bluetooth is untested.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
Currently there is no shiny installation method. Checklist:
|
|
||||||
- Boot PC to live-environment using PXE or USB
|
|
||||||
- Copy or download the hassos image into your live environment
|
|
||||||
- zcat the image to local harddisk
|
|
||||||
- Reboot
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
|||||||
# Raspberry PI
|
|
||||||
|
|
||||||
Supported Hardware:
|
|
||||||
|
|
||||||
| Device | Board |
|
|
||||||
|--------|-----------|
|
|
||||||
| Orange Pi Prime | opi-prime |
|
|
||||||
|
|
||||||
## Serial console
|
|
||||||
|
|
||||||
The serial port on the Orange Pi Prime is a 3 pin header located between the
|
|
||||||
power and reset buttons. The pins are labelled away from the board edge. Flow
|
|
||||||
control must be disabled in order to send data. The serial specs are 3.3V TTL,
|
|
||||||
115200,8,n,1
|
|
||||||
|
|
||||||
## I2C
|
|
||||||
|
|
||||||
Add `dtparam=i2c0=on` to `cmdline.txt`
|
|
||||||
|
|
||||||
[config]: ../configuration.md#automatic
|
|
@ -1,16 +0,0 @@
|
|||||||
# OVA
|
|
||||||
|
|
||||||
OVA stands for Open Virtual Appliance. Currently we had remove the ova files and publish a vmdk virtual disk,
|
|
||||||
until we have better OVF template to generate our OVA. This VMDK work with (maybe you need convert the disk):
|
|
||||||
- HyperV
|
|
||||||
- VirtualBox
|
|
||||||
- VMware
|
|
||||||
|
|
||||||
## Virtual Machine
|
|
||||||
|
|
||||||
You can use this vmdk in a virtual machine with follow requirements:
|
|
||||||
- OS: Linux 64bit
|
|
||||||
- UEFI boot
|
|
||||||
- min. 1GB RAM
|
|
||||||
- 2x vcpu
|
|
||||||
- 1x Network
|
|
22
Documentation/boards/ova/README.md
Normal file
22
Documentation/boards/ova/README.md
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# Virtual Machine
|
||||||
|
|
||||||
|
## Supported Hypervisors
|
||||||
|
|
||||||
|
| Hypervisor | Vendor | Support | Config |
|
||||||
|
|---------------------|-----------|-----------------|--------------------|
|
||||||
|
| HyperV | Microsoft | yes, via VMDK | [ova](../../../buildroot-external/configs/ova_defconfig) |
|
||||||
|
| VirtualBox | Oracle | yes, via VMDK | [ova](../../../buildroot-external/configs/ova_defconfig) |
|
||||||
|
| VMware | VMware | yes, via VMDK | [ova](../../../buildroot-external/configs/ova_defconfig) |
|
||||||
|
|
||||||
|
Currently we only publish a VMDK virtual disk due to issues with our previous OVA distribution. We are investigating our options to bring back the OVA distribution, however, the VMDK works for the hypervisors listed above.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
Using this VMDK in a virtual machine requires the following:
|
||||||
|
|
||||||
|
- Operating system: Other 4.x or later Linux (64-bit)
|
||||||
|
- Enabled support for UEFI boot
|
||||||
|
- SATA disk controller
|
||||||
|
- Minimal of 1GB RAM
|
||||||
|
- At least 2x vCPU
|
||||||
|
- An assigned network
|
@ -1,35 +0,0 @@
|
|||||||
# Raspberry PI
|
|
||||||
|
|
||||||
Supported Hardware:
|
|
||||||
|
|
||||||
| Device | Board |
|
|
||||||
|--------|-----------|
|
|
||||||
| Raspberry Pi A+/B/B+| rpi |
|
|
||||||
| Raspberry Pi Zero | rpi |
|
|
||||||
| Raspberry Pi Zero W | rpi0-w |
|
|
||||||
| Raspberry Pi 2 B | rpi2 |
|
|
||||||
| Raspberry Pi 3 B/B+ | rpi3 / rpi3-64 |
|
|
||||||
|
|
||||||
## Limitation 64bit
|
|
||||||
|
|
||||||
The 64bit version is under development by RPi-Team. It work very nice but it could have some impacts. Actual we see that the SDcard access with ext4 are a bit slower than on 32bit.
|
|
||||||
|
|
||||||
## Serial console
|
|
||||||
|
|
||||||
For access to terminal over serial console, add `console=ttyAMA0,115200` to `cmdline.txt` and `enable_uart=1`, `dtoverlay=pi3-disable-bt` into `config.txt`. GPIO pins are: 6 = GND / 8 = UART TXD / 10 = UART RXD.
|
|
||||||
|
|
||||||
## I2C
|
|
||||||
|
|
||||||
Add `dtparam=i2c1=on` and `dtparam=i2c_arm=on` to `config.txt`. After that we create a module file on host with [config usb stick][config] or direct into `/etc/modules-load.d`.
|
|
||||||
|
|
||||||
rpi-i2c.conf:
|
|
||||||
```
|
|
||||||
i2c-dev
|
|
||||||
i2c-bcm2708
|
|
||||||
```
|
|
||||||
|
|
||||||
## Tweaks
|
|
||||||
|
|
||||||
If you don't need bluetooth, disabled it with add `dtoverlay=pi3-disable-bt` into `config.txt`.
|
|
||||||
|
|
||||||
[config]: ../configuration.md#automatic
|
|
50
Documentation/boards/raspberrypi/README.md
Normal file
50
Documentation/boards/raspberrypi/README.md
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
# Raspberry PI
|
||||||
|
|
||||||
|
## Supported Hardware
|
||||||
|
|
||||||
|
| Device | Release Date | Support | Config |
|
||||||
|
|---------------------|---------------|-----------------|--------------------|
|
||||||
|
| Raspberry Pi 2 B |2015 | not recommended | [rpi2](../../../buildroot-external/configs/rpi2_defconfig) |
|
||||||
|
| Raspberry Pi 3 B/B+ |2016/2018 | yes | [rpi3](../../../buildroot-external/configs/rpi3_defconfig) / [rpi3_64](../../../buildroot-external/configs/rpi3_64_defconfig) |
|
||||||
|
| Raspberry Pi 4 B |2019 | yes | [rpi4](../../../buildroot-external/configs/rpi4_defconfig) / [rpi4_64](../../../buildroot-external/configs/rpi4_64_defconfig) |
|
||||||
|
| Raspberry Pi 5 |2023 | yes (beta) | [rpi5_64](../../../buildroot-external/configs/rpi5_64_defconfig) |
|
||||||
|
|
||||||
|
## Serial console
|
||||||
|
|
||||||
|
For access to terminal over serial console, add `console=ttyAMA0,115200` to `cmdline.txt` and `enable_uart=1`, `dtoverlay=pi3-disable-bt` into `config.txt`. GPIO pins are: 6 = GND / 8 = UART TXD / 10 = UART RXD.
|
||||||
|
|
||||||
|
## I2C
|
||||||
|
|
||||||
|
Add `dtparam=i2c1=on` and `dtparam=i2c_arm=on` to `config.txt`. After that we create a module file on host with [config usb stick][config] or direct into `/etc/modules-load.d`.
|
||||||
|
|
||||||
|
rpi-i2c.conf:
|
||||||
|
```
|
||||||
|
i2c-dev
|
||||||
|
i2c-bcm2708
|
||||||
|
```
|
||||||
|
|
||||||
|
## USB Boot
|
||||||
|
|
||||||
|
USB mass storage boot is available on Raspberry Pi 4 (64-bit only), 3B, 3B+, 3A+, and 2B v1.2.
|
||||||
|
|
||||||
|
For Raspberry 3B, 3A+ and 2B v1.2, to enable USB boot, add `program_usb_boot_mode=1` into `config.txt`. Note that this **permanently** alters the one-time programmable memory of the device.
|
||||||
|
|
||||||
|
For Raspberry 4
|
||||||
|
|
||||||
|
* Make sure to update the bootloader to a stable release supporting USB mass storage boot (see [bcm2711_bootloader_config.md](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md#usbmassstorageboot)).
|
||||||
|
* If no SD card is used add `sd_poll_once=on` to `dtparam` in `config.txt` (comma separated). This gets rid of `mmc0: timeout waiting for hardware interrupt` kernel errors.
|
||||||
|
* If install still fails, then your SSD likely needs quirks enabled to work correctly (see [Finding the VID and PID of your USB SSD](https://www.raspberrypi.org/forums/viewtopic.php?t=245931)). Once you find your adapter's ID, add the quirks parameter in `cmdline.txt`.
|
||||||
|
|
||||||
|
For more information see [RaspberryPi](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md).
|
||||||
|
|
||||||
|
### Caveats
|
||||||
|
|
||||||
|
* All bootable SD cards must be removed.
|
||||||
|
* Boot time can be significantly longer with USB. This is due to the boot process first attempting to boot from SD card, failing, and resorting to USB.
|
||||||
|
* Many USB drives simply do not work for boot. This is likely due to minimal driver support in uboot and will not be fixed. If you can't get it to boot on one drive, try a different brand/model. SanDisk Cruzer drives seem to have a higher rate of issues.
|
||||||
|
|
||||||
|
## Tweaks
|
||||||
|
|
||||||
|
If you don't need bluetooth, disabled it with add `dtoverlay=pi3-disable-bt` into `config.txt`.
|
||||||
|
|
||||||
|
[config]: ../../configuration.md#automatic
|
@ -1,17 +0,0 @@
|
|||||||
# Tinker Board
|
|
||||||
|
|
||||||
Supported Hardware:
|
|
||||||
|
|
||||||
| Device | Board |
|
|
||||||
|--------|-----------|
|
|
||||||
| Tinker RK3288 | tinker |
|
|
||||||
| Tinker S RK3288 | tinker |
|
|
||||||
|
|
||||||
## EMMC
|
|
||||||
|
|
||||||
Actual we support only SD cards. The support for EMMC will follow.
|
|
||||||
|
|
||||||
## Serial console
|
|
||||||
|
|
||||||
For access to terminal over serial console, add `console=ttyS2,115200` to `cmdline.txt`. GPIO pins are: 34 = GND / 32 = UART TXD / 33 = UART RXD.
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
|||||||
# Building
|
|
||||||
|
|
||||||
Running `sudo ./enter.sh` will get you into the build Docker container.
|
|
||||||
`make -C /build/buildroot BR2_EXTERNAL=/build/buildroot-external xy_defconfig`
|
|
||||||
|
|
||||||
## Scripts
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Helpers
|
|
||||||
|
|
||||||
- `make -C /build/buildroot BR2_EXTERNAL=/build/buildroot-external xy_defconfig`
|
|
||||||
- `make -C /build/buildroot BR2_EXTERNAL=/build/buildroot-external menuconfig`
|
|
||||||
- `make -C /build/buildroot BR2_EXTERNAL=/build/buildroot-external linux-menuconfig`
|
|
||||||
- `make -C /build/buildroot BR2_EXTERNAL=/build/buildroot-external barebox-menuconfig`
|
|
||||||
- `make -C /build/buildroot BR2_EXTERNAL=/build/buildroot-external busybox-menuconfig`
|
|
||||||
|
|
||||||
- `make -C /build/buildroot BR2_EXTERNAL=/build/buildroot-external savedefconfig`
|
|
||||||
- `make -C /build/buildroot BR2_EXTERNAL=/build/buildroot-external linux-update-defconfig`
|
|
||||||
- `make -C /build/buildroot BR2_EXTERNAL=/build/buildroot-external barebox-update-defconfig`
|
|
||||||
- `make -C /build/buildroot BR2_EXTERNAL=/build/buildroot-external busybox-update-config`
|
|
@ -3,26 +3,29 @@
|
|||||||
## Automatic
|
## Automatic
|
||||||
|
|
||||||
You can use an USB drive with HassOS to configure network options, SSH access to the host and to install updates.
|
You can use an USB drive with HassOS to configure network options, SSH access to the host and to install updates.
|
||||||
Format a USB stick with FAT32/EXT4/NTFS and name it `CONFIG`. Alternative you can create a `CONFIG` folder inside boot partition. Use the following directory structure within the USB drive:
|
Format a USB stick with FAT32/EXT4/NTFS and name it `CONFIG` (in all capitals). Alternative you can create a `CONFIG` folder inside the `boot` partition. Use the following directory structure within the USB drive:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
network/
|
network/
|
||||||
modules/
|
modules/
|
||||||
|
modprobe/
|
||||||
udev/
|
udev/
|
||||||
authorized_keys
|
authorized_keys
|
||||||
timesyncd.conf
|
timesyncd.conf
|
||||||
hassos-xy.raucb
|
hassos-xy.raucb
|
||||||
```
|
```
|
||||||
|
|
||||||
- The `network` folder can contain any kind of NetworkManager connection files. For more information see [Network][network.md].
|
- The `network` folder can contain any kind of NetworkManager connection files. For more information see [Network][network.md].
|
||||||
- The `modules` folder is for modules-load configuration files.
|
- The `modules` folder is for modules-load configuration files.
|
||||||
|
- The `modprobe` folder is for modules configuration files (/etc/modprobe.d)
|
||||||
- The `udev` folder is for udev rules files.
|
- The `udev` folder is for udev rules files.
|
||||||
- The `authorized_keys` file activates debug SSH access on port `22222`. See [Debugging Hassio][debug-hassio].
|
- The `authorized_keys` file activates debug SSH access on port `22222`. See [Debugging Home Assistant][debug-homeassistant].
|
||||||
- The `timesyncd.conf` file allow you to set different NTP servers. HassOS won't boot without correct working time servers!
|
- The `timesyncd.conf` file allow you to set different NTP servers. HassOS won't boot without correct working time servers!
|
||||||
- The `hassos-*.raucb` file is a firmware OTA update which will be installed. These can be found on on the [release][hassos-release] page.
|
- The `hassos-*.raucb` file is a firmware OTA update which will be installed. These can be found on on the [release][hassos-release] page.
|
||||||
|
|
||||||
You can put this USB stick into the device and it will be read on startup. You can also trigger this process later over the
|
Text files that are on USB stick must have Unix (LF) end of line characters. If you create USB stick on Windows machine, be sure to use Notepad++, Visual Studio Code or any other editor, that supports different line endings. In Notepad++ LF EOL can be enabled with setting `Edit -> EOL Conversion -> Unix (LF)`.
|
||||||
API/UI or by calling `systemctl restart hassos-config` on the host.
|
|
||||||
|
You can put this USB stick into the device and it will be read on startup and files written to the correct places. You can also trigger this process later using `ha os import` from the CLI or by calling `systemctl restart hassos-config` on the OS shell. *The USB Stick just needs to be inserted to the device during this setup process and can be removed afterwards.*
|
||||||
|
|
||||||
## Local
|
## Local
|
||||||
|
|
||||||
@ -32,7 +35,7 @@ You can edit or create a `cmdline.txt` in your boot partition. That will be read
|
|||||||
|
|
||||||
### Kernel-Module
|
### Kernel-Module
|
||||||
|
|
||||||
The kernel module folder `/etc/modules-load.d` is persistent and you can add your configuration files there. See [Systemd modules load][systemd-modules].
|
The kernel module folder `/etc/modules-load.d` is persistent and you can add your configuration files there. See [Systemd modules load][systemd-modules]. You can add the modules configuration files in `/etc/modprobe.d` that is also persistent.
|
||||||
|
|
||||||
### Udev rules
|
### Udev rules
|
||||||
|
|
||||||
@ -45,14 +48,16 @@ You can manual add, edit or remove connections configurations from `/etc/Network
|
|||||||
### NTP
|
### NTP
|
||||||
|
|
||||||
You can manual edit the systemd timesync file on `/etc/systemd/timesyncd.conf`.
|
You can manual edit the systemd timesync file on `/etc/systemd/timesyncd.conf`.
|
||||||
Our default ntp configuration look like:
|
|
||||||
|
Our default NTP configuration look like:
|
||||||
|
|
||||||
```
|
```
|
||||||
[Time]
|
[Time]
|
||||||
NTP=time1.google.com time2.google.com time3.google.com
|
NTP=time.cloudflare.com
|
||||||
FallbackNTP=0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.org
|
FallbackNTP=0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.org
|
||||||
```
|
```
|
||||||
|
|
||||||
[systemd-modules]: https://www.freedesktop.org/software/systemd/man/modules-load.d.html
|
[systemd-modules]: https://www.freedesktop.org/software/systemd/man/modules-load.d.html
|
||||||
[network.md]: network.md
|
[network.md]: network.md
|
||||||
[hassos-release]: https://github.com/home-assistant/hassos/releases/
|
[hassos-release]: https://github.com/home-assistant/hassos/releases/
|
||||||
[debug-hassio]: https://developers.home-assistant.io/docs/en/hassio_debugging.html
|
[debug-homeassistant]: https://developers.home-assistant.io/docs/operating-system/debugging
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
# Deployment
|
|
||||||
|
|
||||||
We provide 3 different types of release builds:
|
|
||||||
|
|
||||||
- development (beta/dev)
|
|
||||||
- staging (rc)
|
|
||||||
- production (stable)
|
|
||||||
|
|
||||||
## Versioning
|
|
||||||
|
|
||||||
The format of version is *MAJOR.BUILD*. Everytime we create a new release with same userland, we bump the build number.
|
|
||||||
The development number they will be bump for the stable release version and the development version go to next major number.
|
|
||||||
|
|
||||||
## Git branch/Tag
|
|
||||||
|
|
||||||
The branch `dev` ist the actual development branch and from there we never make a release. The `master` branch contains the development version and from there we build a beta release.
|
|
||||||
|
|
||||||
If we create a new staging/productive release, we create a new branch `rel-{MAJOR}`. They will be used for the whole cycle of this release.
|
|
||||||
|
|
||||||
## Upload release files
|
|
||||||
|
|
||||||
We use [ghr](https://github.com/tcnksm/ghr) to upload files to our repository. A binary version is available inside `scripts`.
|
|
@ -1,24 +0,0 @@
|
|||||||
# Development
|
|
||||||
|
|
||||||
## Boot system
|
|
||||||
|
|
||||||
`BOOT_SYS`:
|
|
||||||
- efi
|
|
||||||
- hyprid
|
|
||||||
- spl
|
|
||||||
- mbr
|
|
||||||
|
|
||||||
HassOS is basicly used GPT. But for use GPT we need own the first 1024 of
|
|
||||||
boot drive. Is that not possible, you can use MBR for your device, they work also with SPLs.
|
|
||||||
|
|
||||||
Hyprid and SPL use both a hyprid MBR/GPT table but SPL move the GPT header 8MB for give space to write SPL and boot images before.
|
|
||||||
|
|
||||||
`BOOTLOADER`:
|
|
||||||
- uboot
|
|
||||||
- barebox
|
|
||||||
|
|
||||||
We support mainly uboot but for uefi system we can also use barebox. In future we hope to remove barebox with uboot also on uefi.
|
|
||||||
|
|
||||||
`DISK_SIZE`:
|
|
||||||
Default 2. That is the size of end image in GB.
|
|
||||||
|
|
@ -1,106 +0,0 @@
|
|||||||
Getting started with Hassos development using Docker on GNU/Linux
|
|
||||||
=================================================================
|
|
||||||
|
|
||||||
First, install **docker** for your distribution - I'd advise to use your distro's provided packages, since that will make sure permissions et al. are sanely set up for what you are about to run. You're also expected to have your current user properly set up in in your sudoers policy, so that this account may elevate to root and execute arbitrary commands as UID 0 (this is required, since at some point during the build process, a new loopback device-backed filesystem image will be mounted inside a docker container - which requires a "privileged" container to run, which can only be done as root).
|
|
||||||
|
|
||||||
Next, make sure the docker daemon is running:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ sudo systemctl status docker
|
|
||||||
● docker.service - Docker Application Container Engine
|
|
||||||
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
|
|
||||||
Active: inactive (dead)
|
|
||||||
Docs: https://docs.docker.com
|
|
||||||
```
|
|
||||||
|
|
||||||
My desktop distro doesn't start newly installed services by default, which means I'll have to manually fire up the `docker` service:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ sudo systemctl start docker
|
|
||||||
$ sudo systemctl --no-pager status docker -n0
|
|
||||||
● docker.service - Docker Application Container Engine
|
|
||||||
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
|
|
||||||
Active: active (running) since Wed 2018-10-10 21:08:23 CEST; 25s ago
|
|
||||||
Docs: https://docs.docker.com
|
|
||||||
Main PID: 1531 (dockerd)
|
|
||||||
Tasks: 27 (limit: 4915)
|
|
||||||
Memory: 163.4M
|
|
||||||
CGroup: /system.slice/docker.service
|
|
||||||
├─1531 /usr/bin/dockerd -H fd://
|
|
||||||
└─1539 docker-containerd --config /var/run/docker/containerd/containerd.toml
|
|
||||||
```
|
|
||||||
|
|
||||||
Now, change your working directory to your hassos repo checkout (please adapt pathnames as needed), make sure your intended changes to the source tree are applied (and committed, ideally :)), and execute the `enter.sh` helper script:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ cd ~/codebase/hassos/
|
|
||||||
$ sudo scripts/enter.sh
|
|
||||||
Sending build context to Docker daemon 30.48MB
|
|
||||||
Step 1/6 : FROM ubuntu:18.04
|
|
||||||
[...]
|
|
||||||
---> 4dc25a21556b
|
|
||||||
Successfully built 4dc25a21556b
|
|
||||||
Successfully tagged hassbuildroot:latest
|
|
||||||
```
|
|
||||||
|
|
||||||
Note that the current iteration of `enter.sh` will try to load the **overlayfs** kernel module, which is not strictly required for docker's operation, as far as I can tell. It's OK if loading that module fails; the shell script will continue executing. If everything works out, you will find yourself in an interactive login shell inside your docker container/build environment, where you can peek around:
|
|
||||||
|
|
||||||
```
|
|
||||||
root@somehashinhex:/build#
|
|
||||||
root@somehashinhex:/build# make help
|
|
||||||
[...]
|
|
||||||
```
|
|
||||||
|
|
||||||
The _hassos_ developers provide a Makefile that will build hassos images for a (rather long!) list of targets. For example run the command below to start building the _ova_ variant, and go make a cup of tea. Or fifteen.
|
|
||||||
|
|
||||||
```
|
|
||||||
root@0db6f7079872:/build# make ova
|
|
||||||
[...]
|
|
||||||
```
|
|
||||||
|
|
||||||
That will result in a single VMDK image file at the very end of the build process. This image file is a compressed block device dump with a proper GPT partition table, prepared to ship into any OVA-compatible hypervisor's innards. For me, the end of the **ova** build steps looks like this:
|
|
||||||
|
|
||||||
```
|
|
||||||
[...]
|
|
||||||
2097152+0 records out
|
|
||||||
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 12.2145 s, 87.9 MB/s
|
|
||||||
make: Leaving directory '/build/buildroot'
|
|
||||||
make: Entering directory '/build/buildroot'
|
|
||||||
rm -rf /build/buildroot/output/target /build/buildroot/output/images /build/buildroot/output/host \
|
|
||||||
/build/buildroot/output/build /build/buildroot/output/staging \
|
|
||||||
/build/buildroot/output/legal-info /build/buildroot/output/graphs
|
|
||||||
make: Leaving directory '/build/buildroot'
|
|
||||||
```
|
|
||||||
|
|
||||||
The artifacts you just built are placed in the `target/` subdirectory:
|
|
||||||
|
|
||||||
```
|
|
||||||
root@fd292c061896:/build# ls -lh release/
|
|
||||||
total 141M
|
|
||||||
-rw-r--r-- 1 root root 141M Oct 10 20:22 hassos_ova-2.2.vmdk.gz
|
|
||||||
```
|
|
||||||
|
|
||||||
In order to be able to use this image file with the **qemu** hypervisor, you'll need to unpack it, and convert it to an image format that qemu can work with. Conveniently, the _hassos_ buildenv already provides all the tools we need for this conversion:
|
|
||||||
|
|
||||||
```
|
|
||||||
root@fd292c061896:/build# gunzip release/hassos_ova-2.2.vmdk.gz
|
|
||||||
root@fd292c061896:/build# qemu-img convert -O qcow2 release/hassos_ova-2.2.vmdk release/hassos_ova-2.2.qcow2
|
|
||||||
root@fd292c061896:/build# ls -lh release/
|
|
||||||
total 673M
|
|
||||||
-rw-r--r-- 1 root root 337M Oct 10 20:25 hassos_ova-2.2.qcow2
|
|
||||||
-rw-r--r-- 1 root root 337M Oct 10 20:22 hassos_ova-2.2.vmdk
|
|
||||||
```
|
|
||||||
|
|
||||||
Now, exit the docker container's environment, and find the build artifacts in the `releases/` directory beneath your repository checkout dir. (The generated files will be owned by _root_; make sure to `chown` them to your user account, if needed.)
|
|
||||||
|
|
||||||
From there, qemu can try to boot it. Since the generated image assumes UEFI support in the host/hypervisor, this is slightly more tricky than with "classic"(/legacy) MBR-based images. On the *Debian* host I use to run my qemu virtual machine on, you'll need to install the **ovmf** package, which is described as providing "UEFI firmware for 64-bit x86 virtual machines". That package will install a _TianoCore_-derived qemu UEFI image build at `/usr/share/OVMF/OVMF_CODE.fd`, which we'll use with qemu to boot the generated qcow2 image. (Please adapt pathnames as necessary, for example if you have installed the ovmf firmware image at another location.)
|
|
||||||
|
|
||||||
```
|
|
||||||
$ /usr/bin/qemu-system-x86_64 -enable-kvm -name hassos_ova -smp 2 -m 1024 -drive file=release/hassos_ova-2.2.qcow2,index=0,media=disk,if=ide,cache=none,format=qcow2 -drive file=/usr/share/ovmf/x64/OVMF_CODE.fd,if=pflash,format=raw,readonly=on
|
|
||||||
```
|
|
||||||
|
|
||||||
This should pop up qemu's SDL frontend, displaying _hassos_' VT/CLI environment. Specifying addtional options and flags to qemu for network access, keyboard layout et al. are left as an exercise for the reader.
|
|
||||||
|
|
||||||
After the boot process has finished, you can log in to _hassos_ without a password, providing *root* as the username. From there, executing `login` on the *hassio>* shell prompt will yield a root shell in the host OS.
|
|
||||||
|
|
||||||
Happy hacking! :)
|
|
@ -3,10 +3,22 @@
|
|||||||
|
|
||||||
| Board | Version |
|
| Board | Version |
|
||||||
|-------|---------|
|
|-------|---------|
|
||||||
| Open Virtual Applicance | 4.14.82 |
|
| Open Virtual Appliance | 6.12.40 |
|
||||||
| Raspberry Pi | 4.14.81 |
|
| Raspberry Pi | 6.12.25 |
|
||||||
| Tinker Board | 4.14.82 |
|
| Raspberry Pi 0-W | 6.12.25 |
|
||||||
| Odroid-C2 | 4.19.15 |
|
| Raspberry Pi 2 | 6.12.25 |
|
||||||
| Odroid-XU4 | 4.19.15 |
|
| Raspberry Pi 3 | 6.12.25 |
|
||||||
| Orangepi-Prime | 4.19.13 |
|
| Raspberry Pi 4 | 6.12.25 |
|
||||||
| Intel NUC | 4.14.82 |
|
| Raspberry Pi 5 | 6.12.25 |
|
||||||
|
| Home Assistant Yellow | 6.12.25 |
|
||||||
|
| Home Assistant Green | 6.12.40 |
|
||||||
|
| Tinker Board | 6.12.40 |
|
||||||
|
| ODROID-C2 | 6.12.40 |
|
||||||
|
| ODROID-C4 | 6.12.40 |
|
||||||
|
| ODROID-M1 | 6.12.40 |
|
||||||
|
| ODROID-M1S | 6.12.40 |
|
||||||
|
| ODROID-N2 | 6.12.40 |
|
||||||
|
| ODROID-XU4 | 6.12.40 |
|
||||||
|
| Generic aarch64 | 6.12.40 |
|
||||||
|
| Generic x86-64 | 6.12.40 |
|
||||||
|
| Khadas VIM3 | 6.12.40 |
|
||||||
|
@ -1,20 +1,52 @@
|
|||||||
# Network
|
# Network
|
||||||
|
|
||||||
HassOS uses NetworkManager to control the host network. In future releases, you will be able to set up the configuration using the API/UI. Currently only a manual configuration using NetworkManager connection files is supported. Without a configuration file, the device will use DHCP by default. These network connection files can be placed on a USB drive and imported to the host as described in [Configuration][configuration-usb].
|
Home Assistant Operating System uses NetworkManager to control the host network.
|
||||||
|
|
||||||
## Configuration Examples
|
## Configure network
|
||||||
|
|
||||||
You can read the [Official Manual][keyfile] or find many configuration examples across the internet. The system is read-only, if you don't want the IP address to change on every boot, you should set the UUID property with a generic [UUID4][uuid]. Inside `\CONFIG\network\` on the USB or SD, create a file called `my-network` and add the appropriate contents below:
|
By default the device will be in DHCP state.
|
||||||
|
|
||||||
|
Basic network settings can be set through the Supervisor frontend in the System
|
||||||
|
tab. Advanced configurations such as VLAN are also available through the
|
||||||
|
`ha network` CLI command.
|
||||||
|
|
||||||
|
To restore the default configuration the `ha network` CLI command can be used as
|
||||||
|
well:
|
||||||
|
|
||||||
|
```
|
||||||
|
ha network update default --ipv4-method auto
|
||||||
|
```
|
||||||
|
|
||||||
|
If more advanced network settings are required network connection files can be
|
||||||
|
placed on a USB drive and imported to the host as described in
|
||||||
|
[Configuration][configuration-usb].
|
||||||
|
|
||||||
|
## Manual Network Configuration
|
||||||
|
|
||||||
|
If the frontend or `ha network` CLI cannot meet your use case, it is still
|
||||||
|
possible to configure the underlying NetworkManager manually.
|
||||||
|
|
||||||
|
You can read the [NetworkManager manual][nm-manual] or find many configuration
|
||||||
|
examples across the internet. Note that changes to `NetworkManager.conf` are
|
||||||
|
not supported currently, only connection keyfiles are supported. Keep in mind
|
||||||
|
that the system is read-only. If you don't want the IP address to change on
|
||||||
|
every boot, you should modify the UUID property to a generic [UUID4][uuid].
|
||||||
|
Inside the `\CONFIG\network\` directory on the USB drive or SD card, create a
|
||||||
|
file called `my-network` and add the appropriate contents below:
|
||||||
|
|
||||||
|
**NOTE: Please make sure to save this file with UNIX line endings (LF, and not Windows' default CRLF endings). You can do this using Notepad these days!**
|
||||||
|
|
||||||
### Default
|
### Default
|
||||||
|
|
||||||
We have a preinstalled connection profile:
|
A preinstalled connection profile for wired network is active by default:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
[connection]
|
[connection]
|
||||||
id=HassOS default
|
id=Home Assistant OS default
|
||||||
uuid=f62bf7c2-e565-49ff-bbfc-a4cf791e6add
|
uuid=f62bf7c2-e565-49ff-bbfc-a4cf791e6add
|
||||||
type=802-3-ethernet
|
type=802-3-ethernet
|
||||||
|
llmnr=2
|
||||||
|
mdns=2
|
||||||
|
|
||||||
[ipv4]
|
[ipv4]
|
||||||
method=auto
|
method=auto
|
||||||
@ -24,13 +56,15 @@ addr-gen-mode=stable-privacy
|
|||||||
method=auto
|
method=auto
|
||||||
```
|
```
|
||||||
|
|
||||||
### LAN
|
### Wired connection to the LAN
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
[connection]
|
[connection]
|
||||||
id=hassos-network
|
id=my-network
|
||||||
uuid=d55162b4-6152-4310-9312-8f4c54d86afa
|
uuid=d55162b4-6152-4310-9312-8f4c54d86afa
|
||||||
type=802-3-ethernet
|
type=802-3-ethernet
|
||||||
|
llmnr=2
|
||||||
|
mdns=2
|
||||||
|
|
||||||
[ipv4]
|
[ipv4]
|
||||||
method=auto
|
method=auto
|
||||||
@ -40,11 +74,11 @@ addr-gen-mode=stable-privacy
|
|||||||
method=auto
|
method=auto
|
||||||
```
|
```
|
||||||
|
|
||||||
### Wireless WPA/PSK
|
### Wireless LAN WPA/PSK
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
[connection]
|
[connection]
|
||||||
id=hassos-network
|
id=my-network
|
||||||
uuid=72111c67-4a5d-4d5c-925e-f8ee26efb3c3
|
uuid=72111c67-4a5d-4d5c-925e-f8ee26efb3c3
|
||||||
type=802-11-wireless
|
type=802-11-wireless
|
||||||
|
|
||||||
@ -74,71 +108,86 @@ Replace the following configuration:
|
|||||||
```ini
|
```ini
|
||||||
[ipv4]
|
[ipv4]
|
||||||
method=manual
|
method=manual
|
||||||
address=192.168.1.111/24,192.168.1.1
|
address=192.168.1.111/24;192.168.1.1
|
||||||
dns=8.8.8.8;8.8.4.4;
|
dns=8.8.8.8;8.8.4.4;
|
||||||
```
|
```
|
||||||
For address, the value before the comma is the IP address and subnet prefix bitlength; the second value is the IP address of the gateway.
|
|
||||||
|
For `address`, the value before the semicolon is the IP address and subnet prefix bitlength. The second value (after the semicolon) is the IP address of the local gateway.
|
||||||
|
|
||||||
## Tips
|
## Tips
|
||||||
|
|
||||||
### Reset network
|
### Reset network
|
||||||
|
|
||||||
If you want to reset the network configuration back to the default DHCP settings, use the following commands on the host:
|
If you want to reset the network configuration back to the default connection
|
||||||
|
profile using DHCP, use the following commands on the host console:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ rm /etc/NetworkManager/system-connections/*
|
# rm -r /mnt/overlay/etc/NetworkManager/system-connections
|
||||||
$ cp /usr/share/system-connections/* /etc/NetworkManager/system-connections/
|
# reboot
|
||||||
$ nmcli con reload
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Home Assistant OS will recreate the default connection profile during boot.
|
||||||
|
|
||||||
|
### Enabling Wi-Fi
|
||||||
|
|
||||||
|
Wi-Fi is discouraged for reliability reasons. However, if you still prefer to use Wi-Fi, you can us the `ha network` command to set up Wi-Fi (example for a Raspberry Pi 4, check `ha network info` to check if your board supports Wi-Fi and the name of the Wi-Fi device):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ha network update wlan0 --ipv4-method auto --wifi-auth wpa-psk --wifi-mode infrastructure --wifi-ssid "MY-SSID" --wifi-psk MY_PASS
|
||||||
|
````
|
||||||
|
|
||||||
### Powersave
|
### Powersave
|
||||||
|
|
||||||
If you have trouble with powersave you can do following:
|
If you have trouble with powersave then apply the following changes:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
[wifi]
|
[wifi]
|
||||||
# Values are 0 (use default), 1 (ignore/don't touch), 2 (disable) or 3 (enable).
|
# Values are 0 (use default), 1 (ignore/don't touch), 2 (disable) or 3 (enable).
|
||||||
powersave=0
|
powersave=0
|
||||||
```
|
```
|
||||||
## Using nmcli to set a static IPV4 address
|
|
||||||
|
|
||||||
Log into the HASSOS base system via a console:
|
## Using `nmcli` to set a static IPv4 address
|
||||||
|
|
||||||
|
Log into the the Home Assistant OS base system via a console:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Welcome to Home Assistant
|
||||||
|
homeassistant login:
|
||||||
```
|
```
|
||||||
Welcome to HassOS
|
|
||||||
Hassio login:
|
- Login as `root` (no password needed). At the `ha >` prompt, type `login` (as instructed).
|
||||||
|
|
||||||
|
From there you use the `nmcli` configuration tool.
|
||||||
|
|
||||||
|
- `# nmcli con show` will list the "Home Assistant OS default" connection in use.
|
||||||
|
- `# nmcli con show "Home Assistant OS default"` will list all the properties of the connection.
|
||||||
|
|
||||||
|
To start editing the configuration setting for "Home Assistant OS default":
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# nmcli con edit "Home Assistant OS default"
|
||||||
```
|
```
|
||||||
Login as `root` (no password needed)
|
|
||||||
|
|
||||||
At the `hassio >` prompt, type `login` (as instructed).
|
|
||||||
|
|
||||||
From here you will use the `nmcli` configuration tool.
|
|
||||||
|
|
||||||
`# nmcli connection show` will list the “HassOS default” connection in use.
|
|
||||||
|
|
||||||
`# nmcli con show "HassOS default"` will list all the properties of the connection.
|
|
||||||
|
|
||||||
`# nmcli con edit "HassOS default"` will put you in a position to edit the connection.
|
|
||||||
|
|
||||||
`nmcli> print ipv4` will show you the ipv4 properties of this connection.
|
|
||||||
|
|
||||||
To add your static IP address (select 'yes' for manual method);
|
To add your static IP address (select 'yes' for manual method);
|
||||||
```
|
|
||||||
|
```bash
|
||||||
nmcli> set ipv4.addresses 192.168.100.10/24
|
nmcli> set ipv4.addresses 192.168.100.10/24
|
||||||
Do you also want to set 'ipv4.method' to 'manual'? [yes]:
|
Do you also want to set 'ipv4.method' to 'manual'? [yes]:
|
||||||
```
|
```
|
||||||
In addition I have found it is wise to set the dns server and the local gateway. For most home routers these will be the same address. If you are using Pi-Hole you can set the dns to that.
|
|
||||||
```
|
In addition, it's recommended to set the DNS server and the local gateway. For most home routers the DNS server will have the same IP address as the router itself. If you are using Pi-Hole or a third-party DNS system then you can set the DNS server to that.
|
||||||
|
|
||||||
|
```bash
|
||||||
nmcli> set ipv4.dns 192.168.100.1
|
nmcli> set ipv4.dns 192.168.100.1
|
||||||
nmcli> set ipv4.gateway 192.168.100.1
|
nmcli> set ipv4.gateway 192.168.100.1
|
||||||
nmcli> save
|
|
||||||
nmcli> quit
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`nmcli> print ipv4` will show you the IPv4 properties of this connection. With `nmcli> save` you will save the changes afterwards.
|
||||||
|
|
||||||
If you now view the default connection `cat /etc/NetworkManager/system-connections/default` you should see the method is manual and the address is set.
|
If you now view the default connection `cat /etc/NetworkManager/system-connections/default` you should see the method is manual and the address is set.
|
||||||
|
|
||||||
Doing a `nmcli con reload` does not always work so restart the VM.
|
Doing a `nmcli con reload` does not always work, so restart the virtual machine or the physical system.
|
||||||
|
|
||||||
[keyfile]: https://developer.gnome.org/NetworkManager/stable/nm-settings.html
|
[nm-manual]: https://networkmanager.dev/docs/api/1.40/manpages.html
|
||||||
[configuration-usb]: configuration.md
|
[configuration-usb]: configuration.md
|
||||||
[uuid]: https://www.uuidgenerator.net/
|
[uuid]: https://www.uuidgenerator.net/version4
|
||||||
|
BIN
Documentation/usb-disk.png
Normal file
BIN
Documentation/usb-disk.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 67 KiB |
70
Makefile
70
Makefile
@ -1,43 +1,61 @@
|
|||||||
RELEASE_DIR = /build/release
|
BUILDDIR:=$(shell pwd)
|
||||||
|
|
||||||
BUILDROOT=/build/buildroot
|
BUILDROOT=$(BUILDDIR)/buildroot
|
||||||
BUILDROOT_EXTERNAL=/build/buildroot-external
|
BUILDROOT_EXTERNAL=$(BUILDDIR)/buildroot-external
|
||||||
DEFCONFIG_DIR = $(BUILDROOT_EXTERNAL)/configs
|
DEFCONFIG_DIR = $(BUILDROOT_EXTERNAL)/configs
|
||||||
|
|
||||||
TARGETS := $(notdir $(patsubst %_defconfig,%,$(wildcard $(DEFCONFIG_DIR)/*_defconfig)))
|
TARGETS := $(notdir $(patsubst %_defconfig,%,$(wildcard $(DEFCONFIG_DIR)/*_defconfig)))
|
||||||
TARGETS_CONFIG := $(notdir $(patsubst %_defconfig,%-config,$(wildcard $(DEFCONFIG_DIR)/*_defconfig)))
|
TARGETS_CONFIG := $(notdir $(patsubst %_defconfig,%-config,$(wildcard $(DEFCONFIG_DIR)/*_defconfig)))
|
||||||
|
|
||||||
.NOTPARALLEL: $(TARGETS) $(TARGETS_CONFIG) all
|
# Set O variable if not already done on the command line
|
||||||
|
ifneq ("$(origin O)", "command line")
|
||||||
|
O := $(BUILDDIR)/output
|
||||||
|
else
|
||||||
|
override O := $(BUILDDIR)/$(O)
|
||||||
|
endif
|
||||||
|
|
||||||
.PHONY: $(TARGETS) $(TARGETS_CONFIG) all clean help
|
################################################################################
|
||||||
|
|
||||||
all: $(TARGETS)
|
COLOR_STEP := $(shell tput smso 2>/dev/null)
|
||||||
|
COLOR_WARN := $(shell (tput setab 3; tput setaf 0) 2>/dev/null)
|
||||||
|
TERM_RESET := $(shell tput sgr0 2>/dev/null)
|
||||||
|
|
||||||
$(RELEASE_DIR):
|
################################################################################
|
||||||
mkdir -p $(RELEASE_DIR)
|
|
||||||
|
.NOTPARALLEL: $(TARGETS) $(TARGETS_CONFIG) default
|
||||||
|
|
||||||
|
.PHONY: $(TARGETS) $(TARGETS_CONFIG) default buildroot-help help
|
||||||
|
|
||||||
|
# fallback target when target undefined here is given
|
||||||
|
.DEFAULT:
|
||||||
|
@echo "$(COLOR_STEP)=== Falling back to Buildroot target '$@' ===$(TERM_RESET)"
|
||||||
|
$(MAKE) -C $(BUILDROOT) O=$(O) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL) "$@"
|
||||||
|
|
||||||
|
# default target when no target is given - must be first in Makefile
|
||||||
|
default:
|
||||||
|
$(MAKE) -C $(BUILDROOT) O=$(O) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL)
|
||||||
|
|
||||||
$(TARGETS_CONFIG): %-config:
|
$(TARGETS_CONFIG): %-config:
|
||||||
@echo "config $*"
|
@if [ -f $(O)/.config ] && ! grep -q 'BR2_DEFCONFIG="$(DEFCONFIG_DIR)/$*_defconfig"' $(O)/.config; then \
|
||||||
$(MAKE) -C $(BUILDROOT) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL) "$*_defconfig"
|
echo "$(COLOR_WARN)WARNING: Output directory '$(O)' already contains files for another target!$(TERM_RESET)"; \
|
||||||
|
echo " Before running build for a different target, run 'make distclean' first."; \
|
||||||
|
echo ""; \
|
||||||
|
bash -c 'read -t 10 -p "Waiting 10s, press enter to continue or Ctrl-C to abort..."' || true; \
|
||||||
|
fi
|
||||||
|
@echo "$(COLOR_STEP)=== Using $*_defconfig ===$(TERM_RESET)"
|
||||||
|
$(MAKE) -C $(BUILDROOT) O=$(O) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL) "$*_defconfig"
|
||||||
|
|
||||||
$(TARGETS): %: $(RELEASE_DIR) %-config
|
$(TARGETS): %: %-config
|
||||||
@echo "build $@"
|
@echo "$(COLOR_STEP)=== Building $@ ===$(TERM_RESET)"
|
||||||
$(MAKE) -C $(BUILDROOT) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL)
|
$(MAKE) -C $(BUILDROOT) O=$(O) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL)
|
||||||
cp -f $(BUILDROOT)/output/images/hassos_* $(RELEASE_DIR)/
|
|
||||||
|
|
||||||
# Do not clean when building for one target
|
buildroot-help:
|
||||||
ifneq ($(words $(filter $(TARGETS),$(MAKECMDGOALS))), 1)
|
$(MAKE) -C $(BUILDROOT) O=$(O) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL) help
|
||||||
@echo "clean $@"
|
|
||||||
$(MAKE) -C $(BUILDROOT) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL) clean
|
|
||||||
endif
|
|
||||||
@echo "finished $@"
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(MAKE) -C $(BUILDROOT) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL) clean
|
|
||||||
|
|
||||||
help:
|
help:
|
||||||
@echo "Supported targets: $(TARGETS)"
|
|
||||||
@echo "Run 'make <target>' to build a target image."
|
@echo "Run 'make <target>' to build a target image."
|
||||||
@echo "Run 'make all' to build all target images."
|
|
||||||
@echo "Run 'make clean' to clean the build output."
|
|
||||||
@echo "Run 'make <target>-config' to configure buildroot for a target."
|
@echo "Run 'make <target>-config' to configure buildroot for a target."
|
||||||
|
@echo ""
|
||||||
|
@echo "Supported targets: $(TARGETS)"
|
||||||
|
@echo ""
|
||||||
|
@echo "Unknown Makefile targets fall back to Buildroot make - for details run 'make buildroot-help'"
|
||||||
|
70
README.md
70
README.md
@ -1,13 +1,61 @@
|
|||||||
# HassOS
|
# Home Assistant Operating System
|
||||||
Hass.io OS based on [buildroot](https://buildroot.org/). It's a hypervisor for Docker and supports various kind of IoT hardware. It is also available as virtual appliance. The whole system is optimized for embedded system and security. You can update the system simple with OTA updates or offline updates.
|
|
||||||
|
|
||||||
## Focus
|
Home Assistant Operating System (formerly HassOS) is a Linux based operating system optimized to host [Home Assistant](https://www.home-assistant.io) and its [Add-ons](https://www.home-assistant.io/addons/).
|
||||||
|
|
||||||
- Barebox as bootloader on EFI
|
Home Assistant Operating System uses Docker as its container engine. By default it deploys the Home Assistant Supervisor as a container. Home Assistant Supervisor in turn uses the Docker container engine to control Home Assistant Core and Add-Ons in separate containers. Home Assistant Operating System is **not** based on a regular Linux distribution like Ubuntu. It is built using [Buildroot](https://buildroot.org/) and it is optimized to run Home Assistant. It targets single board compute (SBC) devices like the Raspberry Pi or ODROID but also supports x86-64 systems with UEFI.
|
||||||
- U-Boot as bootloader on IoT
|
|
||||||
- RAUC for OTA updates
|
[](https://www.openhomefoundation.org/)
|
||||||
- SquashFS LZ4 as filesystem
|
|
||||||
- Docker 18.09.0
|
## Features
|
||||||
- AppArmor protected
|
|
||||||
- ZRAM LZ4 for /tmp, /var, swap
|
- Lightweight and memory-efficient
|
||||||
- Run every supervisor
|
- Minimized I/O
|
||||||
|
- Over The Air (OTA) updates
|
||||||
|
- Offline updates
|
||||||
|
- Modular using Docker container engine
|
||||||
|
|
||||||
|
## Supported hardware
|
||||||
|
|
||||||
|
- Nabu Casa
|
||||||
|
- Raspberry Pi
|
||||||
|
- Hardkernel ODROID
|
||||||
|
- Asus Tinker Board
|
||||||
|
- Generic x86-64 (e.g. Intel NUC)
|
||||||
|
- Virtual appliances
|
||||||
|
|
||||||
|
See the full list and specific models [here](./Documentation/boards/README.md)
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
If you just want to use Home Assistant the official [getting started guide](https://www.home-assistant.io/getting-started/) and [installation instructions](https://www.home-assistant.io/hassio/installation/) take you through how to download Home Assistant Operating System and get it running on your machine.
|
||||||
|
|
||||||
|
If you're interested in finding out more about Home Assistant Operating System and how it works read on...
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
If you don't have experience with embedded systems, Buildroot or the build process for Linux distributions it is recommended to read up on these topics first (e.g. [Bootlin](https://bootlin.com/docs/) has excellent resources).
|
||||||
|
|
||||||
|
The Home Assistant Operating System documentation can be found on the [Home Assistant Developer Docs website](https://developers.home-assistant.io/docs/operating-system).
|
||||||
|
|
||||||
|
### Components
|
||||||
|
|
||||||
|
- **Bootloader:**
|
||||||
|
- [GRUB](https://www.gnu.org/software/grub/) for devices that support UEFI
|
||||||
|
- [U-Boot](https://www.denx.de/wiki/U-Boot) for devices that don't support UEFI
|
||||||
|
- **Operating System:**
|
||||||
|
- [Buildroot](https://buildroot.org/) LTS Linux
|
||||||
|
- **File Systems:**
|
||||||
|
- [SquashFS](https://www.kernel.org/doc/Documentation/filesystems/squashfs.txt) for read-only file systems (using LZ4 compression)
|
||||||
|
- [ZRAM](https://www.kernel.org/doc/Documentation/blockdev/zram.txt) for `/tmp`, `/var` and swap (using LZ4 compression)
|
||||||
|
- **Container Platform:**
|
||||||
|
- [Docker Engine](https://docs.docker.com/engine/) for running Home Assistant components in containers
|
||||||
|
- **Updates:**
|
||||||
|
- [RAUC](https://rauc.io/) for Over The Air (OTA) and USB updates
|
||||||
|
- **Security:**
|
||||||
|
- [AppArmor](https://apparmor.net/) Linux kernel security module
|
||||||
|
|
||||||
|
### Development builds
|
||||||
|
|
||||||
|
The Development build GitHub Action Workflow is a manually triggered workflow
|
||||||
|
which creates Home Assistant OS development builds. The development builds are
|
||||||
|
available at [https://os-artifacts.home-assistant.io/index.html](https://os-artifacts.home-assistant.io/index.html).
|
||||||
|
1
buildroot
Submodule
1
buildroot
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 01604756d2d0fc42e6ad7061fe1eb5bead732374
|
@ -1,6 +1,21 @@
|
|||||||
source "$BR2_EXTERNAL_HASSOS_PATH/package/hassos/Config.in"
|
|
||||||
source "$BR2_EXTERNAL_HASSOS_PATH/package/libapparmor/Config.in"
|
|
||||||
source "$BR2_EXTERNAL_HASSOS_PATH/package/apparmor/Config.in"
|
|
||||||
source "$BR2_EXTERNAL_HASSOS_PATH/package/bluetooth-bcm43xx/Config.in"
|
|
||||||
source "$BR2_EXTERNAL_HASSOS_PATH/package/bluetooth-rtl8723/Config.in"
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/bluetooth-rtl8723/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/eq3_char_loop/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/gasket/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/generic_raw_uart/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/hailo8-firmware/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/hailo-pci/Config.in"
|
||||||
source "$BR2_EXTERNAL_HASSOS_PATH/package/hardkernel-boot/Config.in"
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/hardkernel-boot/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/hassio/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/khadas-boot/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/os-agent/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/pi-bluetooth/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/qemu-guest-agent/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/lxd-guest-agent/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/rockchip-blobs/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/rpi-eeprom/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/rpi-rf-mod/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/rtl88x2bu/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/tempio/Config.in.host"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/udisks2/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/vcgencmd/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/xe-guest-utilities/Config.in"
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
console=ttyS0 console=tty0
|
85
buildroot-external/board/arm-uefi/generic-aarch64/grub.cfg
Normal file
85
buildroot-external/board/arm-uefi/generic-aarch64/grub.cfg
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
set default=99
|
||||||
|
set timeout=1
|
||||||
|
|
||||||
|
set ORDER="A B"
|
||||||
|
set A_OK=0
|
||||||
|
set B_OK=0
|
||||||
|
set A_TRY=0
|
||||||
|
set B_TRY=0
|
||||||
|
set MACHINE_ID=""
|
||||||
|
load_env
|
||||||
|
|
||||||
|
# select bootable slot
|
||||||
|
for SLOT in $ORDER; do
|
||||||
|
if [ "$SLOT" == "A" ]; then
|
||||||
|
INDEX=0
|
||||||
|
OK=$A_OK
|
||||||
|
TRY=$A_TRY
|
||||||
|
fi
|
||||||
|
if [ "$SLOT" == "B" ]; then
|
||||||
|
INDEX=1
|
||||||
|
OK=$B_OK
|
||||||
|
TRY=$B_TRY
|
||||||
|
fi
|
||||||
|
if [ "$OK" -eq 1 -a "$TRY" -lt 3 ]; then
|
||||||
|
default=$INDEX
|
||||||
|
|
||||||
|
# increment attempts and save back to slot
|
||||||
|
if [ "$TRY" -eq 1 ]; then
|
||||||
|
TRY=2
|
||||||
|
elif [ "$TRY" -eq 2 ]; then
|
||||||
|
TRY=3
|
||||||
|
else
|
||||||
|
TRY=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$SLOT" == "A" ]; then
|
||||||
|
A_TRY=$TRY
|
||||||
|
fi
|
||||||
|
if [ "$SLOT" == "B" ]; then
|
||||||
|
B_TRY=$TRY
|
||||||
|
fi
|
||||||
|
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# No bootable slot found, choose rescue...
|
||||||
|
if [ "$default" -eq 99 ]; then
|
||||||
|
if [ "$A_OK" -eq 1 ]; then
|
||||||
|
default=2
|
||||||
|
fi
|
||||||
|
if [ "$B_OK" -eq 1 ]; then
|
||||||
|
default=3
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$MACHINE_ID" == "" ]; then
|
||||||
|
boot_condition="systemd.condition-first-boot=true"
|
||||||
|
fi
|
||||||
|
|
||||||
|
save_env A_TRY A_OK B_TRY B_OK ORDER MACHINE_ID
|
||||||
|
|
||||||
|
default_cmdline="rootwait zram.enabled=1 zram.num_devices=3 systemd.machine_id=$MACHINE_ID fsck.repair=yes $boot_condition"
|
||||||
|
file_env -f ($root)/cmdline.txt cmdline
|
||||||
|
|
||||||
|
# root is a full HDD/partition definition in GRUB format like hd0,gpt1
|
||||||
|
# We extract the part before the comma to then append our own partition index
|
||||||
|
# at the end. This is hacky but the best way I found
|
||||||
|
regexp --set 1:boothd (.+),.+ ${root}
|
||||||
|
|
||||||
|
menuentry "Slot A (OK=$A_OK TRY=$A_TRY)" {
|
||||||
|
linux (${boothd},gpt2)/Image root=PARTUUID=8d3d53e3-6d49-4c38-8349-aff6859e82fd $default_cmdline $cmdline rauc.slot=A
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Slot B (OK=$B_OK TRY=$B_TRY)" {
|
||||||
|
linux (${boothd},gpt4)/Image root=PARTUUID=a3ec664e-32ce-4665-95ea-7ae90ce9aa20 $default_cmdline $cmdline rauc.slot=B
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Slot A (rescue shell)" {
|
||||||
|
linux (${boothd},gpt2)/Image root=PARTUUID=8d3d53e3-6d49-4c38-8349-aff6859e82fd $default_cmdline $cmdline rauc.slot=A systemd.unit=recovery.target
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Slot B (rescue shell)" {
|
||||||
|
linux (${boothd},gpt4)/Image root=PARTUUID=a3ec664e-32ce-4665-95ea-7ae90ce9aa20 $default_cmdline $cmdline rauc.slot=B systemd.unit=recovery.target
|
||||||
|
}
|
31
buildroot-external/board/arm-uefi/generic-aarch64/hassos-hook.sh
Executable file
31
buildroot-external/board/arm-uefi/generic-aarch64/hassos-hook.sh
Executable file
@ -0,0 +1,31 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# shellcheck disable=SC2155
|
||||||
|
|
||||||
|
function hassos_pre_image() {
|
||||||
|
local BOOT_DATA="$(path_boot_dir)"
|
||||||
|
local EFIPART_DATA="${BINARIES_DIR}/efi-part"
|
||||||
|
|
||||||
|
mkdir -p "${BOOT_DATA}/EFI/BOOT"
|
||||||
|
|
||||||
|
cp "${BOARD_DIR}/grub.cfg" "${EFIPART_DATA}/EFI/BOOT/grub.cfg"
|
||||||
|
cp "${BOARD_DIR}/cmdline.txt" "${EFIPART_DATA}/cmdline.txt"
|
||||||
|
grub-editenv "${EFIPART_DATA}/EFI/BOOT/grubenv" create
|
||||||
|
grub-editenv "${EFIPART_DATA}/EFI/BOOT/grubenv" set ORDER="A B"
|
||||||
|
grub-editenv "${EFIPART_DATA}/EFI/BOOT/grubenv" set A_OK=1
|
||||||
|
grub-editenv "${EFIPART_DATA}/EFI/BOOT/grubenv" set A_TRY=0
|
||||||
|
|
||||||
|
cp -r "${EFIPART_DATA}/"* "${BOOT_DATA}/"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function hassos_post_image() {
|
||||||
|
convert_disk_image_virtual vmdk
|
||||||
|
convert_disk_image_virtual vdi
|
||||||
|
convert_disk_image_virtual qcow2
|
||||||
|
|
||||||
|
convert_disk_image_zip vmdk
|
||||||
|
convert_disk_image_zip vdi
|
||||||
|
convert_disk_image_xz qcow2
|
||||||
|
|
||||||
|
convert_disk_image_xz
|
||||||
|
}
|
@ -0,0 +1,84 @@
|
|||||||
|
CONFIG_EFI_STUB=y
|
||||||
|
|
||||||
|
# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set
|
||||||
|
|
||||||
|
CONFIG_CONNECTOR=y
|
||||||
|
|
||||||
|
CONFIG_VSOCKETS=y
|
||||||
|
|
||||||
|
CONFIG_VIRTIO=y
|
||||||
|
CONFIG_VIRTIO_PCI=y
|
||||||
|
CONFIG_VIRTIO_NET=y
|
||||||
|
CONFIG_VIRTIO_BALLOON=m
|
||||||
|
CONFIG_VIRTIO_MEM=m
|
||||||
|
CONFIG_VIRTIO_INPUT=m
|
||||||
|
CONFIG_VIRTIO_BLK=y
|
||||||
|
CONFIG_VIRTIO_CONSOLE=m
|
||||||
|
CONFIG_VIRTIO_VSOCKETS=m
|
||||||
|
CONFIG_VIRTIO_MMIO=y
|
||||||
|
CONFIG_SCSI_VIRTIO=y
|
||||||
|
CONFIG_HW_RANDOM_VIRTIO=m
|
||||||
|
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
|
||||||
|
CONFIG_VIRTIO_IOMMU=m
|
||||||
|
CONFIG_CRYPTO_ENGINE=m
|
||||||
|
CONFIG_CRYPTO_DEV_VIRTIO=m
|
||||||
|
|
||||||
|
# options for backward compatibility
|
||||||
|
CONFIG_ARMV8_DEPRECATED=y
|
||||||
|
CONFIG_SWP_EMULATION=y
|
||||||
|
CONFIG_CP15_BARRIER_EMULATION=y
|
||||||
|
CONFIG_SETEND_EMULATION=y
|
||||||
|
|
||||||
|
# These options are needed for virtio-fs
|
||||||
|
CONFIG_FUSE_FS=y
|
||||||
|
CONFIG_VIRTIO_FS=y
|
||||||
|
CONFIG_DAX=y
|
||||||
|
CONFIG_FS_DAX=y
|
||||||
|
CONFIG_ZONE_DEVICE=y
|
||||||
|
|
||||||
|
CONFIG_DMI_SYSFS=m
|
||||||
|
CONFIG_FW_CFG_SYSFS=m
|
||||||
|
|
||||||
|
CONFIG_NVME_CORE=y
|
||||||
|
CONFIG_BLK_DEV_NVME=y
|
||||||
|
CONFIG_NVME_HWMON=y
|
||||||
|
|
||||||
|
CONFIG_DRM_VIRTIO_GPU=m
|
||||||
|
|
||||||
|
CONFIG_HYPERV=y
|
||||||
|
CONFIG_HYPERV_UTILS=m
|
||||||
|
CONFIG_HYPERV_BALLOON=m
|
||||||
|
CONFIG_HYPERV_KEYBOARD=m
|
||||||
|
CONFIG_HYPERV_STORAGE=y
|
||||||
|
CONFIG_HYPERV_NET=y
|
||||||
|
CONFIG_HYPERV_VSOCKETS=m
|
||||||
|
CONFIG_PCI_HYPERV=m
|
||||||
|
CONFIG_PCI_HYPERV_INTERFACE=m
|
||||||
|
CONFIG_FB_HYPERV=y
|
||||||
|
|
||||||
|
CONFIG_I6300ESB_WDT=y
|
||||||
|
|
||||||
|
# GPIO support
|
||||||
|
CONFIG_GPIO_ZYNQ=y
|
||||||
|
CONFIG_GPIO_PCA9570=y
|
||||||
|
|
||||||
|
# PHY drivers
|
||||||
|
CONFIG_PHY_XILINX_ZYNQMP=y
|
||||||
|
|
||||||
|
# USB support
|
||||||
|
CONFIG_USB_ONBOARD_DEV=y
|
||||||
|
CONFIG_USB_ONBOARD_DEV_USB5744=y
|
||||||
|
|
||||||
|
# i2c support
|
||||||
|
CONFIG_I2C_CADENCE=y
|
||||||
|
|
||||||
|
# 1-wire
|
||||||
|
CONFIG_W1_MASTER_AMD_AXI=m
|
||||||
|
CONFIG_W1_SLAVE_THERM=m
|
||||||
|
|
||||||
|
# IIO
|
||||||
|
CONFIG_XILINX_AMS=m
|
||||||
|
|
||||||
|
# Audio drivers
|
||||||
|
CONFIG_SND_HDA_INTEL=m
|
||||||
|
CONFIG_SND_HDA_GENERIC=m
|
11
buildroot-external/board/arm-uefi/generic-aarch64/meta
Normal file
11
buildroot-external/board/arm-uefi/generic-aarch64/meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
BOARD_ID=generic-aarch64
|
||||||
|
BOARD_NAME="Generic aarch64"
|
||||||
|
CHASSIS=embedded
|
||||||
|
BOOTLOADER=grub
|
||||||
|
KERNEL_FILE=Image
|
||||||
|
PARTITION_TABLE_TYPE=gpt
|
||||||
|
BOOT_SIZE=32M
|
||||||
|
BOOT_SPL=false
|
||||||
|
DISK_SIZE=6G
|
||||||
|
SUPERVISOR_MACHINE=qemuarm-64
|
||||||
|
SUPERVISOR_ARCH=aarch64
|
@ -3,26 +3,19 @@
|
|||||||
|
|
||||||
function hassos_pre_image() {
|
function hassos_pre_image() {
|
||||||
local BOOT_DATA="$(path_boot_dir)"
|
local BOOT_DATA="$(path_boot_dir)"
|
||||||
local SPL_IMG="$(path_spl_img)"
|
|
||||||
|
|
||||||
cp -t "${BOOT_DATA}" \
|
cp -t "${BOOT_DATA}" \
|
||||||
"${BINARIES_DIR}/boot.scr" \
|
"${BINARIES_DIR}/boot.scr" \
|
||||||
"${BINARIES_DIR}/rk3288-tinker.dtb"
|
"${BINARIES_DIR}/rk3288-tinker.dtb" \
|
||||||
|
"${BINARIES_DIR}/rk3288-tinker-s.dtb"
|
||||||
|
|
||||||
echo "console=tty1" > "${BOOT_DATA}/cmdline.txt"
|
mkdir -p "${BOOT_DATA}/overlays"
|
||||||
|
cp "${BINARIES_DIR}"/*.dtbo "${BOOT_DATA}/overlays/"
|
||||||
# Create boot binary
|
cp "${BOARD_DIR}/boot-env.txt" "${BOOT_DATA}/haos-config.txt"
|
||||||
rm -f "${BINARIES_DIR}/u-boot-spl-dtb.img"
|
cp "${BOARD_DIR}/cmdline.txt" "${BOOT_DATA}/cmdline.txt"
|
||||||
mkimage -n rk3288 -T rksd -d "${BINARIES_DIR}/u-boot-spl-dtb.bin" "${BINARIES_DIR}/u-boot-spl-dtb.img"
|
|
||||||
cat "${BINARIES_DIR}/u-boot-dtb.bin" >> "${BINARIES_DIR}/u-boot-spl-dtb.img"
|
|
||||||
|
|
||||||
# SPL
|
|
||||||
create_spl_image
|
|
||||||
|
|
||||||
dd if="${BINARIES_DIR}/u-boot-spl-dtb.img" of="${SPL_IMG}" conv=notrunc bs=512 seek=64
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function hassos_post_image() {
|
function hassos_post_image() {
|
||||||
convert_disk_image_gz
|
convert_disk_image_xz
|
||||||
}
|
}
|
||||||
|
2
buildroot-external/board/asus/tinker/boot-env.txt
Normal file
2
buildroot-external/board/asus/tinker/boot-env.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Uncomment this to enable GPIO support for RPI-RF-MOD/HM-MOD-RPI-PCB
|
||||||
|
#overlays=rpi-rf-mod
|
1
buildroot-external/board/asus/tinker/cmdline.txt
Normal file
1
buildroot-external/board/asus/tinker/cmdline.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
console=tty0
|
13
buildroot-external/board/asus/tinker/image-spl-spl.cfg
Normal file
13
buildroot-external/board/asus/tinker/image-spl-spl.cfg
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
image spl.img {
|
||||||
|
size = ${BOOT_SPL_SIZE}
|
||||||
|
|
||||||
|
hdimage {
|
||||||
|
partition-table-type = "none"
|
||||||
|
fill = "yes"
|
||||||
|
}
|
||||||
|
|
||||||
|
partition uboot {
|
||||||
|
offset = 32k
|
||||||
|
image = "u-boot-rockchip.bin"
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -3,5 +3,10 @@ BOARD_NAME="Asus TinkerBoard"
|
|||||||
CHASSIS=embedded
|
CHASSIS=embedded
|
||||||
BOOTLOADER=uboot
|
BOOTLOADER=uboot
|
||||||
KERNEL_FILE=zImage
|
KERNEL_FILE=zImage
|
||||||
BOOT_SYS=spl
|
PARTITION_TABLE_TYPE=hybrid
|
||||||
|
BOOT_SIZE=24M
|
||||||
|
BOOT_SPL=true
|
||||||
|
BOOT_SPL_SIZE=8M
|
||||||
BOOT_ENV_SIZE=0x8000
|
BOOT_ENV_SIZE=0x8000
|
||||||
|
SUPERVISOR_MACHINE=tinker
|
||||||
|
SUPERVISOR_ARCH=armv7
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
partition spl {
|
||||||
|
size = ${BOOT_SPL_SIZE}
|
||||||
|
image = "spl.img"
|
||||||
|
in-partition-table = "no"
|
||||||
|
offset = 0
|
||||||
|
holes = {"(0; 17k)"}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -1,122 +0,0 @@
|
|||||||
From 7ba71967a2678e119bcd819ac92d08bd038e1879 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy <myy@miouyouyou.fr>
|
|
||||||
Date: Mon, 17 Jul 2017 18:34:33 +0000
|
|
||||||
Subject: [PATCH 5/5] Mali midgard r19p0 fixes for 4.13 kernels
|
|
||||||
|
|
||||||
Mostly due to DMA structure members renamed, and some signatures
|
|
||||||
modifications done during the development of Linux 4.11.
|
|
||||||
|
|
||||||
* mm, fs: reduce fault, page_mkwrite, and pfn_mkwrite to take only vmf
|
|
||||||
11bac80004499ea59f361ef2a5516c84b6eab675
|
|
||||||
v4.11-rc1
|
|
||||||
|
|
||||||
* sched/headers: Move task->mm handling methods to <linux/sched/mm.h>
|
|
||||||
68e21be2916b359fd8afb536c1911dc014cfd03e
|
|
||||||
v4.11-rc1
|
|
||||||
|
|
||||||
* sched/headers: Move task-stack related APIs from <linux/sched.h> to
|
|
||||||
<linux/sched/task_stack.h>
|
|
||||||
f3ac60671954c8d413532627b1be13a76f394c49
|
|
||||||
v4.11-rc1
|
|
||||||
|
|
||||||
* dma-fence: Introduce drm_fence_set_error() helper
|
|
||||||
a009e975da5c7d42a7f5eaadc54946eb5f76c9af
|
|
||||||
v4.11-rc1
|
|
||||||
|
|
||||||
Signed-off-by: Myy <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
drivers/gpu/arm/midgard/mali_kbase.h | 4 ++++
|
|
||||||
drivers/gpu/arm/midgard/mali_kbase_fence.h | 4 ++++
|
|
||||||
drivers/gpu/arm/midgard/mali_kbase_mem_linux.c | 6 ++++++
|
|
||||||
drivers/gpu/arm/midgard/mali_kbase_sync_file.c | 12 ++++++++++++
|
|
||||||
4 files changed, 26 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/arm/midgard/mali_kbase.h b/drivers/gpu/arm/midgard/mali_kbase.h
|
|
||||||
index d77f186..5ee47c4 100644
|
|
||||||
--- a/drivers/gpu/arm/midgard/mali_kbase.h
|
|
||||||
+++ b/drivers/gpu/arm/midgard/mali_kbase.h
|
|
||||||
@@ -35,6 +35,10 @@
|
|
||||||
#include <linux/mutex.h>
|
|
||||||
#include <linux/rwsem.h>
|
|
||||||
#include <linux/sched.h>
|
|
||||||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
|
|
||||||
+#include <linux/sched/task_stack.h>
|
|
||||||
+#include <linux/sched/mm.h>
|
|
||||||
+#endif
|
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/spinlock.h>
|
|
||||||
#include <linux/vmalloc.h>
|
|
||||||
diff --git a/drivers/gpu/arm/midgard/mali_kbase_fence.h b/drivers/gpu/arm/midgard/mali_kbase_fence.h
|
|
||||||
index 8d39299..3c2e3a9 100644
|
|
||||||
--- a/drivers/gpu/arm/midgard/mali_kbase_fence.h
|
|
||||||
+++ b/drivers/gpu/arm/midgard/mali_kbase_fence.h
|
|
||||||
@@ -134,7 +134,11 @@ static inline bool kbase_fence_out_is_ours(struct kbase_jd_atom *katom)
|
|
||||||
static inline int kbase_fence_out_signal(struct kbase_jd_atom *katom,
|
|
||||||
int status)
|
|
||||||
{
|
|
||||||
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0))
|
|
||||||
katom->dma_fence.fence->status = status;
|
|
||||||
+#else
|
|
||||||
+ katom->dma_fence.fence->error = status;
|
|
||||||
+#endif
|
|
||||||
return dma_fence_signal(katom->dma_fence.fence);
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/arm/midgard/mali_kbase_mem_linux.c b/drivers/gpu/arm/midgard/mali_kbase_mem_linux.c
|
|
||||||
index b1f2c46..896aa35 100644
|
|
||||||
--- a/drivers/gpu/arm/midgard/mali_kbase_mem_linux.c
|
|
||||||
+++ b/drivers/gpu/arm/midgard/mali_kbase_mem_linux.c
|
|
||||||
@@ -1788,8 +1788,14 @@ static void kbase_cpu_vm_close(struct vm_area_struct *vma)
|
|
||||||
KBASE_EXPORT_TEST_API(kbase_cpu_vm_close);
|
|
||||||
|
|
||||||
|
|
||||||
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0))
|
|
||||||
static int kbase_cpu_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
|
|
||||||
{
|
|
||||||
+#else
|
|
||||||
+static int kbase_cpu_vm_fault(struct vm_fault *vmf)
|
|
||||||
+{
|
|
||||||
+ struct vm_area_struct *vma = vmf->vma;
|
|
||||||
+#endif
|
|
||||||
struct kbase_cpu_mapping *map = vma->vm_private_data;
|
|
||||||
pgoff_t rel_pgoff;
|
|
||||||
size_t i;
|
|
||||||
diff --git a/drivers/gpu/arm/midgard/mali_kbase_sync_file.c b/drivers/gpu/arm/midgard/mali_kbase_sync_file.c
|
|
||||||
index 4e1621c..d84a54e 100644
|
|
||||||
--- a/drivers/gpu/arm/midgard/mali_kbase_sync_file.c
|
|
||||||
+++ b/drivers/gpu/arm/midgard/mali_kbase_sync_file.c
|
|
||||||
@@ -161,8 +161,13 @@ static void kbase_fence_wait_callback(struct dma_fence *fence,
|
|
||||||
struct kbase_context *kctx = katom->kctx;
|
|
||||||
|
|
||||||
/* Cancel atom if fence is erroneous */
|
|
||||||
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0))
|
|
||||||
if (dma_fence_is_signaled(kcb->fence) && kcb->fence->status < 0)
|
|
||||||
katom->event_code = BASE_JD_EVENT_JOB_CANCELLED;
|
|
||||||
+#else
|
|
||||||
+ if (dma_fence_is_signaled(kcb->fence) && kcb->fence->error < 0)
|
|
||||||
+ katom->event_code = BASE_JD_EVENT_JOB_CANCELLED;
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
if (kbase_fence_dep_count_dec_and_test(katom)) {
|
|
||||||
/* We take responsibility of handling this */
|
|
||||||
@@ -273,10 +278,17 @@ static void kbase_sync_fence_info_get(struct dma_fence *fence,
|
|
||||||
* 1 : signaled
|
|
||||||
*/
|
|
||||||
if (dma_fence_is_signaled(fence)) {
|
|
||||||
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0))
|
|
||||||
if (fence->status < 0)
|
|
||||||
info->status = fence->status; /* signaled with error */
|
|
||||||
else
|
|
||||||
info->status = 1; /* signaled with success */
|
|
||||||
+#else
|
|
||||||
+ if (fence->error < 0)
|
|
||||||
+ info->status = fence->error; /* signaled with error */
|
|
||||||
+ else
|
|
||||||
+ info->status = 1; /* signaled with success */
|
|
||||||
+#endif
|
|
||||||
} else {
|
|
||||||
info->status = 0; /* still active (unsignaled) */
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.10.2
|
|
||||||
|
|
@ -0,0 +1,51 @@
|
|||||||
|
From 675fbbc309e4f7c805cf4fbd7c463cfc8308b54e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Stefan Agner <stefan@agner.ch>
|
||||||
|
Date: Wed, 17 Feb 2021 19:55:41 +0100
|
||||||
|
Subject: [PATCH] Revert "ARM: dts: rockchip: use DMA channels for UARTs for
|
||||||
|
RK3288"
|
||||||
|
|
||||||
|
This reverts commit 3425fe335c29310f6628faf9a7947d07f32d8962.
|
||||||
|
---
|
||||||
|
arch/arm/boot/dts/rockchip/rk3288.dtsi | 8 --------
|
||||||
|
1 file changed, 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/rockchip/rk3288.dtsi b/arch/arm/boot/dts/rockchip/rk3288.dtsi
|
||||||
|
index 3f1d640afafae..becf3abd8367f 100644
|
||||||
|
--- a/arch/arm/boot/dts/rockchip/rk3288.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rockchip/rk3288.dtsi
|
||||||
|
@@ -387,8 +387,6 @@ uart0: serial@ff180000 {
|
||||||
|
reg-io-width = <4>;
|
||||||
|
clocks = <&cru SCLK_UART0>, <&cru PCLK_UART0>;
|
||||||
|
clock-names = "baudclk", "apb_pclk";
|
||||||
|
- dmas = <&dmac_peri 1>, <&dmac_peri 2>;
|
||||||
|
- dma-names = "tx", "rx";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&uart0_xfer>;
|
||||||
|
status = "disabled";
|
||||||
|
@@ -402,8 +400,6 @@ uart1: serial@ff190000 {
|
||||||
|
reg-io-width = <4>;
|
||||||
|
clocks = <&cru SCLK_UART1>, <&cru PCLK_UART1>;
|
||||||
|
clock-names = "baudclk", "apb_pclk";
|
||||||
|
- dmas = <&dmac_peri 3>, <&dmac_peri 4>;
|
||||||
|
- dma-names = "tx", "rx";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&uart1_xfer>;
|
||||||
|
status = "disabled";
|
||||||
|
@@ -430,8 +426,6 @@ uart3: serial@ff1b0000 {
|
||||||
|
reg-io-width = <4>;
|
||||||
|
clocks = <&cru SCLK_UART3>, <&cru PCLK_UART3>;
|
||||||
|
clock-names = "baudclk", "apb_pclk";
|
||||||
|
- dmas = <&dmac_peri 7>, <&dmac_peri 8>;
|
||||||
|
- dma-names = "tx", "rx";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&uart3_xfer>;
|
||||||
|
status = "disabled";
|
||||||
|
@@ -445,8 +439,6 @@ uart4: serial@ff1c0000 {
|
||||||
|
reg-io-width = <4>;
|
||||||
|
clocks = <&cru SCLK_UART4>, <&cru PCLK_UART4>;
|
||||||
|
clock-names = "baudclk", "apb_pclk";
|
||||||
|
- dmas = <&dmac_peri 9>, <&dmac_peri 10>;
|
||||||
|
- dma-names = "tx", "rx";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&uart4_xfer>;
|
||||||
|
status = "disabled";
|
@ -0,0 +1,49 @@
|
|||||||
|
From 37b4467356113f17f55066aef54db55b64daa030 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Miouyouyou (Myy)" <myy@miouyouyou.fr>
|
||||||
|
Date: Mon, 5 Nov 2018 22:15:14 +0100
|
||||||
|
Subject: [PATCH] ARM: DTS: rk3288-tinker: Defining the SPI interface
|
||||||
|
|
||||||
|
Taken from, and tested by @TonyMac32 .
|
||||||
|
|
||||||
|
Well, the original one was tested by him but I had to adapt the
|
||||||
|
registers definitions to the new 64-bits LPAE-compliant syntax.
|
||||||
|
|
||||||
|
Therefore that *might* break, along with a few other patches.
|
||||||
|
|
||||||
|
Signed-off-by: Miouyouyou (Myy) <myy@miouyouyou.fr>
|
||||||
|
[move change to rk3288-tinker.dtsi]
|
||||||
|
Signed-off-by: Stefan Agner <stefan@agner.ch>
|
||||||
|
---
|
||||||
|
arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi | 19 +++++++++++++++++++
|
||||||
|
1 file changed, 19 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi b/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi
|
||||||
|
index 09618bb7d872c..30430d2e64b93 100644
|
||||||
|
--- a/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi
|
||||||
|
@@ -483,6 +483,25 @@ &sdio0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
+&spi2 {
|
||||||
|
+ max-freq = <50000000>;
|
||||||
|
+ status = "okay";
|
||||||
|
+
|
||||||
|
+ spidev@0 {
|
||||||
|
+ compatible = "rockchip,spi_tinker";
|
||||||
|
+ reg = <0x0 0>;
|
||||||
|
+ spi-max-frequency = <50000000>;
|
||||||
|
+ spi-cpha = <1>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ spidev@1 {
|
||||||
|
+ compatible = "rockchip,spi_tinker";
|
||||||
|
+ reg = <0x1>;
|
||||||
|
+ spi-max-frequency = <50000000>;
|
||||||
|
+ spi-cpha = <1>;
|
||||||
|
+ };
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
&tsadc {
|
||||||
|
rockchip,hw-tshut-mode = <1>; /* tshut mode 0:CRU 1:GPIO */
|
||||||
|
rockchip,hw-tshut-polarity = <1>; /* tshut polarity 0:LOW 1:HIGH */
|
@ -1,36 +0,0 @@
|
|||||||
From f76c9c58669a3bba0456191431be558ab8054f50 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy <myy@miouyouyou.fr>
|
|
||||||
Date: Mon, 17 Jul 2017 11:43:00 +0000
|
|
||||||
Subject: [PATCH 3/5] Using the new header on 4.12 kernels for copy_*_user
|
|
||||||
|
|
||||||
These changes are due to :
|
|
||||||
* generic ...copy_..._user primitives
|
|
||||||
d597580d373774b1bdab84b3d26ff0b55162b916
|
|
||||||
Version : 4.12-rc1
|
|
||||||
|
|
||||||
Signed-off-by: Myy <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
drivers/base/ump/src/linux/ump_kernel_linux.c | 7 ++++++-
|
|
||||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/base/ump/src/linux/ump_kernel_linux.c b/drivers/base/ump/src/linux/ump_kernel_linux.c
|
|
||||||
index d6c3c53..bb3a7f0 100644
|
|
||||||
--- a/drivers/base/ump/src/linux/ump_kernel_linux.c
|
|
||||||
+++ b/drivers/base/ump/src/linux/ump_kernel_linux.c
|
|
||||||
@@ -20,7 +20,12 @@
|
|
||||||
#include <linux/ump-ioctl.h>
|
|
||||||
#include <linux/ump.h>
|
|
||||||
|
|
||||||
-#include <asm/uaccess.h> /* copy_*_user */
|
|
||||||
+#include <linux/version.h>
|
|
||||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,12,0)
|
|
||||||
+#include <asm/uaccess.h> /* copy_*_user */
|
|
||||||
+#else
|
|
||||||
+#include <linux/uaccess.h> /* copy_*_user */
|
|
||||||
+#endif
|
|
||||||
#include <linux/compat.h>
|
|
||||||
#include <linux/module.h> /* kernel module definitions */
|
|
||||||
#include <linux/fs.h> /* file system operations */
|
|
||||||
--
|
|
||||||
2.10.2
|
|
||||||
|
|
@ -0,0 +1,35 @@
|
|||||||
|
From 1a15fc7f6a241895a31b00c1f324d358d408a610 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Stefan Agner <stefan@agner.ch>
|
||||||
|
Date: Fri, 4 Sep 2020 21:57:55 +0200
|
||||||
|
Subject: [PATCH] ARM: dts: rockchip: enable I2C1/4 on rk3288-tinker
|
||||||
|
|
||||||
|
Enable I2C devices which are accessible via 40-pin header.
|
||||||
|
|
||||||
|
Signed-off-by: Stefan Agner <stefan@agner.ch>
|
||||||
|
---
|
||||||
|
arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi | 8 ++++++++
|
||||||
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi b/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi
|
||||||
|
index 30430d2e64b93..395afc2b2283c 100644
|
||||||
|
--- a/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi
|
||||||
|
@@ -342,10 +342,18 @@ regulator-state-mem {
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
+&i2c1 {
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
&i2c2 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
+&i2c4 {
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
&i2c5 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
@ -1,46 +0,0 @@
|
|||||||
From 63c110cdebc2c692964e1250c6f74f9e8c47c85d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy <myy@miouyouyou.fr>
|
|
||||||
Date: Tue, 10 Jan 2017 04:28:48 +0000
|
|
||||||
Subject: [PATCH 4/5] Adapt get_user_pages calls to use the new calling
|
|
||||||
procedure
|
|
||||||
|
|
||||||
These changes are due to this commit:
|
|
||||||
mm: replace get_user_pages_remote() write/force parameters with gup_flags
|
|
||||||
9beae1ea89305a9667ceaab6d0bf46a045ad71e7
|
|
||||||
Kernel: 4.9.0-rc
|
|
||||||
|
|
||||||
Signed-off-by: Myy <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
drivers/base/ump/src/linux/ump_kernel_linux_mem.c | 8 ++++++++
|
|
||||||
1 file changed, 8 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/drivers/base/ump/src/linux/ump_kernel_linux_mem.c b/drivers/base/ump/src/linux/ump_kernel_linux_mem.c
|
|
||||||
index 9186dd0..def4c0e 100644
|
|
||||||
--- a/drivers/base/ump/src/linux/ump_kernel_linux_mem.c
|
|
||||||
+++ b/drivers/base/ump/src/linux/ump_kernel_linux_mem.c
|
|
||||||
@@ -35,6 +35,10 @@
|
|
||||||
#include <ump_arch.h>
|
|
||||||
#include <common/ump_kernel_priv.h>
|
|
||||||
|
|
||||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0))
|
|
||||||
+#include <linux/pfn_t.h>
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
static void umpp_vm_close(struct vm_area_struct *vma)
|
|
||||||
{
|
|
||||||
umpp_cpu_mapping * mapping;
|
|
||||||
@@ -222,7 +226,11 @@ int umpp_linux_mmap(struct file * filp, struct vm_area_struct * vma)
|
|
||||||
paddr = alloc->block_array[block_idx].addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(4,4,0))
|
|
||||||
err = vm_insert_mixed(vma, vma->vm_start + (i << PAGE_SHIFT), paddr >> PAGE_SHIFT);
|
|
||||||
+#else
|
|
||||||
+ err = vm_insert_mixed(vma, vma->vm_start + (i << PAGE_SHIFT), __pfn_to_pfn_t(paddr >> PAGE_SHIFT, PFN_DEV));
|
|
||||||
+#endif
|
|
||||||
paddr += PAGE_SIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.10.2
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
|||||||
From 7c27055687c595e9f9eca484314f4fe3866a4260 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy <myy@miouyouyou.fr>
|
|
||||||
Date: Tue, 18 Jul 2017 17:35:16 +0000
|
|
||||||
Subject: [PATCH 2/2] Don't be TOO severe when looking for the IRQ names
|
|
||||||
|
|
||||||
Using strncmp with an all caps result in the driver being unable to
|
|
||||||
initialize itself when using the mainlined RK3288 DTS files, since they
|
|
||||||
define the IRQ names as "job", "mmu" and "gpu" instead of "JOB", "MMU"
|
|
||||||
and "GPU".
|
|
||||||
|
|
||||||
strncmp calls have been replaced by strncasecmp calls in order to
|
|
||||||
avoid such issue.
|
|
||||||
|
|
||||||
Signed-off-by: Myy <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
drivers/gpu/arm/midgard/mali_kbase_core_linux.c | 6 +++---
|
|
||||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/arm/midgard/mali_kbase_core_linux.c b/drivers/gpu/arm/midgard/mali_kbase_core_linux.c
|
|
||||||
index 0cccb0b..9cc65d2 100644
|
|
||||||
--- a/drivers/gpu/arm/midgard/mali_kbase_core_linux.c
|
|
||||||
+++ b/drivers/gpu/arm/midgard/mali_kbase_core_linux.c
|
|
||||||
@@ -938,11 +938,11 @@ static int assign_irqs(struct platform_device *pdev)
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_OF
|
|
||||||
- if (!strncmp(irq_res->name, "JOB", 4)) {
|
|
||||||
+ if (!strncasecmp(irq_res->name, "JOB", 4)) {
|
|
||||||
irqtag = JOB_IRQ_TAG;
|
|
||||||
- } else if (!strncmp(irq_res->name, "MMU", 4)) {
|
|
||||||
+ } else if (!strncasecmp(irq_res->name, "MMU", 4)) {
|
|
||||||
irqtag = MMU_IRQ_TAG;
|
|
||||||
- } else if (!strncmp(irq_res->name, "GPU", 4)) {
|
|
||||||
+ } else if (!strncasecmp(irq_res->name, "GPU", 4)) {
|
|
||||||
irqtag = GPU_IRQ_TAG;
|
|
||||||
} else {
|
|
||||||
dev_err(&pdev->dev, "Invalid irq res name: '%s'\n",
|
|
||||||
--
|
|
||||||
2.10.2
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
|||||||
|
From d6c44c231fc4518ad69bb7870a193bb10c563f2a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Myy Miouyouyou <myy@miouyouyou.fr>
|
||||||
|
Date: Thu, 19 Oct 2017 21:24:47 +0200
|
||||||
|
Subject: [PATCH] RK3288: DTSI: rk3288.dtsi: Add missing SPI2 pinctrl
|
||||||
|
|
||||||
|
The spi2_cs1 pin reference is missing in the spi2 first pin control
|
||||||
|
definition.
|
||||||
|
|
||||||
|
This patch is taken from the patches provided by the ARMbian team.
|
||||||
|
|
||||||
|
Signed-off-by: Myy Miouyouyou <myy@miouyouyou.fr>
|
||||||
|
---
|
||||||
|
arch/arm/boot/dts/rockchip/rk3288.dtsi | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/rockchip/rk3288.dtsi b/arch/arm/boot/dts/rockchip/rk3288.dtsi
|
||||||
|
index becf3abd8367f..e78fa883b9841 100644
|
||||||
|
--- a/arch/arm/boot/dts/rockchip/rk3288.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rockchip/rk3288.dtsi
|
||||||
|
@@ -320,7 +320,7 @@ spi2: spi@ff130000 {
|
||||||
|
dma-names = "tx", "rx";
|
||||||
|
interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
- pinctrl-0 = <&spi2_clk &spi2_tx &spi2_rx &spi2_cs0>;
|
||||||
|
+ pinctrl-0 = <&spi2_clk &spi2_tx &spi2_rx &spi2_cs0 &spi2_cs1>;
|
||||||
|
reg = <0x0 0xff130000 0x0 0x1000>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
@ -0,0 +1,25 @@
|
|||||||
|
From dfb0232e9fae1267d04247aaf171739038c1659e Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Miouyouyou (Myy)" <myy@miouyouyou.fr>
|
||||||
|
Date: Mon, 5 Nov 2018 20:16:05 +0100
|
||||||
|
Subject: [PATCH] ARM: DTSI: rk3288-tinker: Improving the CPU max voltage
|
||||||
|
|
||||||
|
Taken from the various patches provided by @TonyMac32 .
|
||||||
|
|
||||||
|
Signed-off-by: Miouyouyou (Myy) <myy@miouyouyou.fr>
|
||||||
|
---
|
||||||
|
arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi b/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi
|
||||||
|
index 395afc2b2283c..c7e79e5947206 100644
|
||||||
|
--- a/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi
|
||||||
|
@@ -184,7 +184,7 @@ vdd_cpu: DCDC_REG1 {
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <750000>;
|
||||||
|
- regulator-max-microvolt = <1400000>;
|
||||||
|
+ regulator-max-microvolt = <1450000>;
|
||||||
|
regulator-name = "vdd_arm";
|
||||||
|
regulator-ramp-delay = <6000>;
|
||||||
|
regulator-state-mem {
|
@ -1,42 +0,0 @@
|
|||||||
From ef7689887c31d2b1336e14f2c089185e8f60a9f1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy <myy@miouyouyou.fr>
|
|
||||||
Date: Mon, 7 Aug 2017 19:22:39 +0000
|
|
||||||
Subject: [PATCH] Added the new "compatible" list, mainly used by Rockchip
|
|
||||||
|
|
||||||
Because, you know, all the Mali Midgard GPU used to define the GPU
|
|
||||||
using the 'compatible = "arm,mali-midgard"' property, which worked fine.
|
|
||||||
|
|
||||||
But it was removed.
|
|
||||||
|
|
||||||
They replaced the "arm,mali-midgard" node by "arm,mali-tXXX" where XXX
|
|
||||||
is the GPU series, and added "arm,rk3288-mali" which is used by nothing.
|
|
||||||
|
|
||||||
Which broke the Mali Midgard GPL kernel driver.
|
|
||||||
|
|
||||||
This patch fixes this issue.
|
|
||||||
|
|
||||||
Signed-off-by: Myy <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
drivers/gpu/arm/midgard/mali_kbase_core_linux.c | 6 ++++++
|
|
||||||
1 file changed, 6 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/arm/midgard/mali_kbase_core_linux.c b/drivers/gpu/arm/midgard/mali_kbase_core_linux.c
|
|
||||||
index 27dcd9c1..cc4932a4 100644
|
|
||||||
--- a/drivers/gpu/arm/midgard/mali_kbase_core_linux.c
|
|
||||||
+++ b/drivers/gpu/arm/midgard/mali_kbase_core_linux.c
|
|
||||||
@@ -4742,6 +4742,12 @@ static const struct dev_pm_ops kbase_pm_ops = {
|
|
||||||
static const struct of_device_id kbase_dt_ids[] = {
|
|
||||||
{ .compatible = "arm,malit6xx" },
|
|
||||||
{ .compatible = "arm,mali-midgard" },
|
|
||||||
+ { .compatible = "arm,mali-t720" },
|
|
||||||
+ { .compatible = "arm,mali-t760" },
|
|
||||||
+ { .compatible = "arm,mali-t820" },
|
|
||||||
+ { .compatible = "arm,mali-t830" },
|
|
||||||
+ { .compatible = "arm,mali-t860" },
|
|
||||||
+ { .compatible = "arm,mali-t880" },
|
|
||||||
{ /* sentinel */ }
|
|
||||||
};
|
|
||||||
MODULE_DEVICE_TABLE(of, kbase_dt_ids);
|
|
||||||
--
|
|
||||||
2.13.0
|
|
||||||
|
|
@ -0,0 +1,113 @@
|
|||||||
|
From 4955695e410289df07258b00290d4028c3ac8fb1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Myy Miouyouyou <myy@miouyouyou.fr>
|
||||||
|
Date: Sun, 7 Jan 2018 01:52:44 +0100
|
||||||
|
Subject: [PATCH] drivers: mmc: dw-mci-rockchip: Handle ASUS Tinkerboard reboot
|
||||||
|
|
||||||
|
On ASUS Tinkerboard systems, if the SDMMC hardware is shutdown before
|
||||||
|
rebooting, the system will be dead, as the SDMMC is the only way to
|
||||||
|
boot anything, and the hardware doesn't power up the SDMMC hardware
|
||||||
|
automatically when rebooting.
|
||||||
|
|
||||||
|
So, when using an ASUS Tinkerboard system, a new reboot handler is
|
||||||
|
installed. This reboot handler takes care of powering the SDMMC
|
||||||
|
hardware again before restarting the system, resolving the issue.
|
||||||
|
|
||||||
|
The code was inspired by the pwrseq_emmc.c, which seems to overcome
|
||||||
|
similar effects with eMMC hardware.
|
||||||
|
|
||||||
|
Signed-off-by: Myy Miouyouyou <myy@miouyouyou.fr>
|
||||||
|
---
|
||||||
|
drivers/mmc/host/dw_mmc-rockchip.c | 66 ++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 66 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/drivers/mmc/host/dw_mmc-rockchip.c b/drivers/mmc/host/dw_mmc-rockchip.c
|
||||||
|
index f96260fd143b4..fa779ce8fb661 100644
|
||||||
|
--- a/drivers/mmc/host/dw_mmc-rockchip.c
|
||||||
|
+++ b/drivers/mmc/host/dw_mmc-rockchip.c
|
||||||
|
@@ -12,6 +12,11 @@
|
||||||
|
#include <linux/pm_runtime.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
|
||||||
|
+#include <linux/regulator/consumer.h>
|
||||||
|
+#include <linux/reboot.h>
|
||||||
|
+#include <linux/delay.h>
|
||||||
|
+#include "../core/core.h"
|
||||||
|
+
|
||||||
|
#include "dw_mmc.h"
|
||||||
|
#include "dw_mmc-pltfm.h"
|
||||||
|
|
||||||
|
@@ -527,6 +532,66 @@ static const struct of_device_id dw_mci_rockchip_match[] = {
|
||||||
|
};
|
||||||
|
MODULE_DEVICE_TABLE(of, dw_mci_rockchip_match);
|
||||||
|
|
||||||
|
+struct dw_mci_rockchip_broken_boards_data {
|
||||||
|
+ struct notifier_block reset_nb;
|
||||||
|
+ struct platform_device *pdev;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+/* This reboot handler handles cases where disabling the SDMMC on
|
||||||
|
+ * reboot will cause the hardware to be unable to start correctly
|
||||||
|
+ * after rebooting.
|
||||||
|
+ *
|
||||||
|
+ * This happens with Tinkerboard systems...
|
||||||
|
+ */
|
||||||
|
+static int dw_mci_rockchip_broken_boards_reset_nb(
|
||||||
|
+ struct notifier_block *this,
|
||||||
|
+ unsigned long mode, void *cmd)
|
||||||
|
+{
|
||||||
|
+ struct dw_mci_rockchip_broken_boards_data const *data =
|
||||||
|
+ container_of(this,
|
||||||
|
+ struct dw_mci_rockchip_broken_boards_data,
|
||||||
|
+ reset_nb);
|
||||||
|
+ struct dw_mci *host = platform_get_drvdata(data->pdev);
|
||||||
|
+ struct mmc_host *mmc = host->slot->mmc;
|
||||||
|
+
|
||||||
|
+ printk(KERN_ERR "Meow.\n");
|
||||||
|
+
|
||||||
|
+ mmc_power_off(mmc);
|
||||||
|
+
|
||||||
|
+ mdelay(20);
|
||||||
|
+
|
||||||
|
+ if (!IS_ERR(mmc->supply.vmmc))
|
||||||
|
+ regulator_enable(mmc->supply.vmmc);
|
||||||
|
+
|
||||||
|
+ if (!IS_ERR(mmc->supply.vqmmc))
|
||||||
|
+ regulator_set_voltage(mmc->supply.vqmmc, 3000000, 3300000);
|
||||||
|
+
|
||||||
|
+ printk(KERN_ERR "woeM.\n");
|
||||||
|
+
|
||||||
|
+ return NOTIFY_DONE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void dw_mci_rockchip_register_broken_boards_reboot_handler(
|
||||||
|
+ struct platform_device *pdev)
|
||||||
|
+{
|
||||||
|
+ struct dw_mci_rockchip_broken_boards_data *data;
|
||||||
|
+
|
||||||
|
+ if (!of_machine_is_compatible("asus,rk3288-tinker"))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
|
||||||
|
+
|
||||||
|
+ if (!data)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ data->reset_nb.notifier_call =
|
||||||
|
+ dw_mci_rockchip_broken_boards_reset_nb;
|
||||||
|
+ data->reset_nb.priority = 255;
|
||||||
|
+ register_restart_handler(&data->reset_nb);
|
||||||
|
+
|
||||||
|
+ data->pdev = pdev;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static int dw_mci_rockchip_probe(struct platform_device *pdev)
|
||||||
|
{
|
||||||
|
const struct dw_mci_drv_data *drv_data;
|
||||||
|
@@ -554,6 +619,7 @@ static int dw_mci_rockchip_probe(struct platform_device *pdev)
|
||||||
|
}
|
||||||
|
|
||||||
|
pm_runtime_put_autosuspend(&pdev->dev);
|
||||||
|
+ dw_mci_rockchip_register_broken_boards_reboot_handler(pdev);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
From 74227462bbe9236dca234dd24cce4191fa71bdf9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Stefan Agner <stefan@agner.ch>
|
||||||
|
Date: Tue, 10 May 2022 22:57:26 +0200
|
||||||
|
Subject: [PATCH] ARM: dts: rockchip: Add Bluetooth to rk3288-tinker
|
||||||
|
|
||||||
|
Enable Bluetooth support via UART0. Use the existing bindings
|
||||||
|
for Realtek rtl8723bs Bluetooth device.
|
||||||
|
|
||||||
|
Signed-off-by: Stefan Agner <stefan@agner.ch>
|
||||||
|
---
|
||||||
|
arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi | 26 +++++++++++++++++++
|
||||||
|
1 file changed, 26 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi b/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi
|
||||||
|
index c7e79e5947206..5d261fae6e72a 100644
|
||||||
|
--- a/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi
|
||||||
|
@@ -386,6 +386,20 @@ bl_en: bl-en {
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
+ bluetooth {
|
||||||
|
+ bt_enable_pin: bt-enable-pin {
|
||||||
|
+ rockchip,pins = <4 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ bt_device_wake_pin: bt-device-wake-pin {
|
||||||
|
+ rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ bt_host_wake_pin: bt-host-wake-pin {
|
||||||
|
+ rockchip,pins = <4 RK_PD7 RK_FUNC_GPIO &pcfg_pull_none>;
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
buttons {
|
||||||
|
pwrbtn: pwrbtn {
|
||||||
|
rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>;
|
||||||
|
@@ -518,6 +532,18 @@ &tsadc {
|
||||||
|
|
||||||
|
&uart0 {
|
||||||
|
status = "okay";
|
||||||
|
+ pinctrl-names = "default";
|
||||||
|
+ pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
|
||||||
|
+ uart-has-rtscts;
|
||||||
|
+
|
||||||
|
+ bluetooth {
|
||||||
|
+ compatible = "realtek,rtl8723bs-bt";
|
||||||
|
+ pinctrl-names = "default";
|
||||||
|
+ pinctrl-0 = <&bt_device_wake_pin &bt_host_wake_pin &bt_enable_pin>;
|
||||||
|
+ enable-gpios = <&gpio4 RK_PD5 GPIO_ACTIVE_HIGH>;
|
||||||
|
+ device-wake-gpios = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>;
|
||||||
|
+ host-wake-gpios = <&gpio4 RK_PD7 GPIO_ACTIVE_HIGH>;
|
||||||
|
+ };
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart1 {
|
@ -0,0 +1,32 @@
|
|||||||
|
From eb29ab60a69353f355b3af58b06fff1a89d17992 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jan=20=C4=8Cerm=C3=A1k?= <sairon@sairon.cz>
|
||||||
|
Date: Wed, 10 Jan 2024 16:29:59 +0100
|
||||||
|
Subject: [PATCH] usb-audio: add ASUS TinkerBoard's ALC4040
|
||||||
|
|
||||||
|
Converted to git-series patch from the original plain git diff file
|
||||||
|
buildroot-external/board/asus/tinker/patches/linux/3001_Tinkerboard-4.19-audio.patch
|
||||||
|
|
||||||
|
Co-authored-by: Pascal Vizeli <pascal.vizeli@syshack.ch>
|
||||||
|
---
|
||||||
|
sound/usb/card.c | 8 ++++++++
|
||||||
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/sound/usb/card.c b/sound/usb/card.c
|
||||||
|
index 9c411b82a218d..672136e25c81d 100644
|
||||||
|
--- a/sound/usb/card.c
|
||||||
|
+++ b/sound/usb/card.c
|
||||||
|
@@ -533,6 +533,14 @@ static void usb_audio_make_shortname(struct usb_device *dev,
|
||||||
|
}
|
||||||
|
|
||||||
|
strim(card->shortname);
|
||||||
|
+
|
||||||
|
+ /* Tinker Board ALC4040 CODEC */
|
||||||
|
+
|
||||||
|
+ if(USB_ID_VENDOR(chip->usb_id) == 0x0bda &&
|
||||||
|
+ USB_ID_PRODUCT(chip->usb_id) == 0x481a) {
|
||||||
|
+ strlcat(card->shortname, " OnBoard", sizeof(card->shortname));
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
}
|
||||||
|
|
||||||
|
static void usb_audio_make_longname(struct usb_device *dev,
|
@ -1,34 +0,0 @@
|
|||||||
From 9812105eb6220863af05fc72591118f0a48e1c4e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy Miouyouyou <myy@miouyouyou.fr>
|
|
||||||
Date: Mon, 21 May 2018 22:32:59 +0200
|
|
||||||
Subject: [PATCH] GPU: ARM: Midgard: Adapt to the new mmap call checks.
|
|
||||||
|
|
||||||
Now, I don't know if this driver is just one of these "buggy" drivers
|
|
||||||
Linus is talking about, or if this is just standard GPU procedure.
|
|
||||||
|
|
||||||
Anyway, this patch is due to this change by Linus Torvalds :
|
|
||||||
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=be83bbf806822b1b89e0a0f23cd87cddc409e429
|
|
||||||
|
|
||||||
And the fix is inspired by :
|
|
||||||
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=76ef6b28ea4f81c3d511866a9b31392caa833126
|
|
||||||
|
|
||||||
Signed-off-by: Myy Miouyouyou <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
drivers/gpu/arm/midgard/mali_kbase_core_linux.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/arm/midgard/mali_kbase_core_linux.c b/drivers/gpu/arm/midgard/mali_kbase_core_linux.c
|
|
||||||
index cc4932a4ead7..89b4cca27cf1 100644
|
|
||||||
--- a/drivers/gpu/arm/midgard/mali_kbase_core_linux.c
|
|
||||||
+++ b/drivers/gpu/arm/midgard/mali_kbase_core_linux.c
|
|
||||||
@@ -1087,6 +1087,7 @@ static int kbase_open(struct inode *inode, struct file *filp)
|
|
||||||
|
|
||||||
init_waitqueue_head(&kctx->event_queue);
|
|
||||||
filp->private_data = kctx;
|
|
||||||
+ filp->f_mode |= FMODE_UNSIGNED_OFFSET;
|
|
||||||
kctx->filp = filp;
|
|
||||||
|
|
||||||
if (kbdev->infinite_cache_active_default)
|
|
||||||
--
|
|
||||||
2.17.0
|
|
||||||
|
|
@ -1,65 +0,0 @@
|
|||||||
From 7de25b73e152830587740d8f2ffaad94c72d90ac Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy <myy@miouyouyou.fr>
|
|
||||||
Date: Mon, 17 Jul 2017 11:24:47 +0000
|
|
||||||
Subject: [PATCH 1/5] Integrating the Mali drivers
|
|
||||||
|
|
||||||
Changses required in order to select and compile the previously copied
|
|
||||||
Mali Midgard drivers.
|
|
||||||
|
|
||||||
Signed-off-by: Myy <myy@miouyouyou.fr>
|
|
||||||
|
|
||||||
---
|
|
||||||
drivers/base/Kconfig | 2 ++
|
|
||||||
drivers/base/Makefile | 1 +
|
|
||||||
drivers/gpu/Makefile | 2 +-
|
|
||||||
drivers/video/Kconfig | 1 +
|
|
||||||
4 files changed, 5 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
|
|
||||||
index f046d21..b0982fc 100644
|
|
||||||
--- a/drivers/base/Kconfig
|
|
||||||
+++ b/drivers/base/Kconfig
|
|
||||||
@@ -348,3 +348,5 @@ config GENERIC_ARCH_TOPOLOGY
|
|
||||||
runtime.
|
|
||||||
|
|
||||||
endmenu
|
|
||||||
+
|
|
||||||
+source "drivers/base/ump/Kconfig"
|
|
||||||
diff --git a/drivers/base/Makefile b/drivers/base/Makefile
|
|
||||||
index 397e5c3..251e0cf 100644
|
|
||||||
--- a/drivers/base/Makefile
|
|
||||||
+++ b/drivers/base/Makefile
|
|
||||||
@@ -24,6 +24,7 @@ obj-$(CONFIG_PINCTRL) += pinctrl.o
|
|
||||||
obj-$(CONFIG_DEV_COREDUMP) += devcoredump.o
|
|
||||||
obj-$(CONFIG_GENERIC_MSI_IRQ_DOMAIN) += platform-msi.o
|
|
||||||
obj-$(CONFIG_GENERIC_ARCH_TOPOLOGY) += arch_topology.o
|
|
||||||
+obj-$(CONFIG_UMP) += ump/
|
|
||||||
|
|
||||||
obj-y += test/
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/Makefile b/drivers/gpu/Makefile
|
|
||||||
index e9ed439..66386b4 100644
|
|
||||||
--- a/drivers/gpu/Makefile
|
|
||||||
+++ b/drivers/gpu/Makefile
|
|
||||||
@@ -2,5 +2,5 @@
|
|
||||||
# taken to initialize them in the correct order. Link order is the only way
|
|
||||||
# to ensure this currently.
|
|
||||||
obj-$(CONFIG_TEGRA_HOST1X) += host1x/
|
|
||||||
-obj-y += drm/ vga/
|
|
||||||
+obj-y += drm/ vga/ arm/
|
|
||||||
obj-$(CONFIG_IMX_IPUV3_CORE) += ipu-v3/
|
|
||||||
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
|
|
||||||
index 3c20af9..041e15f 100644
|
|
||||||
--- a/drivers/video/Kconfig
|
|
||||||
+++ b/drivers/video/Kconfig
|
|
||||||
@@ -17,6 +17,7 @@ source "drivers/gpu/vga/Kconfig"
|
|
||||||
|
|
||||||
source "drivers/gpu/host1x/Kconfig"
|
|
||||||
source "drivers/gpu/ipu-v3/Kconfig"
|
|
||||||
+source "drivers/gpu/arm/midgard/Kconfig"
|
|
||||||
|
|
||||||
source "drivers/gpu/drm/Kconfig"
|
|
||||||
|
|
||||||
--
|
|
||||||
2.10.2
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
|||||||
From e0c5a419cf5464cd02996431afa98e3b22dc6801 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy <myy@miouyouyou.fr>
|
|
||||||
Date: Mon, 17 Jul 2017 23:14:48 +0000
|
|
||||||
Subject: [PATCH] clk: rockchip: add all known operating points to the allowed
|
|
||||||
CPU freqs
|
|
||||||
|
|
||||||
Patch from Willy Tarreau
|
|
||||||
|
|
||||||
Original commit message :
|
|
||||||
At least 1920 MHz runs stable on the MiQi even on openssl speed -multi 4,
|
|
||||||
which is by far the most intensive workload, and 1992/2016 work fine on
|
|
||||||
the CS-008 until it starts to heat too much. So add all of them so that
|
|
||||||
the device tree can simply manipulate them.
|
|
||||||
|
|
||||||
Signed-off-by: Myy <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
drivers/clk/rockchip/clk-rk3288.c | 17 +++++++++++++++++
|
|
||||||
1 file changed, 17 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
|
|
||||||
index 753c649..fd2058f 100644
|
|
||||||
--- a/drivers/clk/rockchip/clk-rk3288.c
|
|
||||||
+++ b/drivers/clk/rockchip/clk-rk3288.c
|
|
||||||
@@ -145,6 +145,23 @@ static struct rockchip_pll_rate_table rk3288_pll_rates[] = {
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct rockchip_cpuclk_rate_table rk3288_cpuclk_rates[] __initdata = {
|
|
||||||
+ RK3288_CPUCLK_RATE(2208000000U, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(2184000000U, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(2160000000U, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(2136000000, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(2112000000, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(2088000000, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(2064000000, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(2040000000, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(2016000000, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(1992000000, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(1968000000, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(1944000000, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(1920000000, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(1896000000, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(1872000000, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(1848000000, 1, 3, 1, 3, 3),
|
|
||||||
+ RK3288_CPUCLK_RATE(1824000000, 1, 3, 1, 3, 3),
|
|
||||||
RK3288_CPUCLK_RATE(1800000000, 1, 3, 1, 3, 3),
|
|
||||||
RK3288_CPUCLK_RATE(1704000000, 1, 3, 1, 3, 3),
|
|
||||||
RK3288_CPUCLK_RATE(1608000000, 1, 3, 1, 3, 3),
|
|
||||||
--
|
|
||||||
2.10.2
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
From b82f540967f6a732a22bbd236457b864951aeda7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy <myy@miouyouyou.fr>
|
|
||||||
Date: Sun, 14 May 2017 10:13:26 +0000
|
|
||||||
Subject: [PATCH] clk: rockchip: rk3288: prefer vdpu for vcodec clock source
|
|
||||||
|
|
||||||
Patch provided by Randy Li. The original commit message reads :
|
|
||||||
|
|
||||||
_______________
|
|
||||||
The RK3288 CRU system clock solution would suggest use
|
|
||||||
the vdpu clock source for the VPU(aclk_vpu and hclk_vpu).
|
|
||||||
|
|
||||||
Reading the registers of VPU(both VEPU and VDPU) would become all high
|
|
||||||
when the vepu is used as the clock source. It may be a bug in the SoC,
|
|
||||||
not sure whether it is fixed at RK3288W.
|
|
||||||
|
|
||||||
Signed-off-by: Randy Li <ayaka@soulik.info>
|
|
||||||
_______________
|
|
||||||
|
|
||||||
This also resolves a freeze when loading the OOT Video Codec driver
|
|
||||||
|
|
||||||
Signed-off-by: Myy <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
drivers/clk/rockchip/clk-rk3288.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
|
|
||||||
index 1227f74..f218256 100644
|
|
||||||
--- a/drivers/clk/rockchip/clk-rk3288.c
|
|
||||||
+++ b/drivers/clk/rockchip/clk-rk3288.c
|
|
||||||
@@ -215,7 +215,7 @@ PNAME(mux_hsadcout_p) = { "hsadc_src", "ext_hsadc" };
|
|
||||||
PNAME(mux_edp_24m_p) = { "ext_edp_24m", "xin24m" };
|
|
||||||
PNAME(mux_tspout_p) = { "cpll", "gpll", "npll", "xin27m" };
|
|
||||||
|
|
||||||
-PNAME(mux_aclk_vcodec_pre_p) = { "aclk_vepu", "aclk_vdpu" };
|
|
||||||
+PNAME(mux_aclk_vcodec_pre_p) = { "aclk_vdpu", "aclk_vepu" };
|
|
||||||
PNAME(mux_usbphy480m_p) = { "sclk_otgphy1_480m", "sclk_otgphy2_480m",
|
|
||||||
"sclk_otgphy0_480m" };
|
|
||||||
PNAME(mux_hsicphy480m_p) = { "cpll", "gpll", "usbphy480m_src" };
|
|
||||||
--
|
|
||||||
2.10.2
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
|||||||
From 239a5e3016b7f676bc3f56ea509ed172bf954001 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy <myy@miouyouyou.fr>
|
|
||||||
Date: Sat, 22 Jul 2017 04:07:36 +0000
|
|
||||||
Subject: [PATCH] Remove the dependency to the clk_mali symbol.
|
|
||||||
|
|
||||||
Inspired by @wzzy2 patch
|
|
||||||
|
|
||||||
https://github.com/rockchip-linux/rockchip_forwardports/commit/359865c617129fe5fcc5530f4a88abcfaa6a5cb4
|
|
||||||
|
|
||||||
Signed-off-by: Myy <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
drivers/gpu/arm/midgard/mali_kbase_core_linux.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/drivers/gpu/arm/midgard/mali_kbase_core_linux.c b/drivers/gpu/arm/midgard/mali_kbase_core_linux.c
|
|
||||||
index 9cc65d2..27dcd9c 100644
|
|
||||||
--- a/drivers/gpu/arm/midgard/mali_kbase_core_linux.c
|
|
||||||
+++ b/drivers/gpu/arm/midgard/mali_kbase_core_linux.c
|
|
||||||
@@ -3793,7 +3793,7 @@ static int power_control_init(struct platform_device *pdev)
|
|
||||||
}
|
|
||||||
#endif /* LINUX_VERSION_CODE >= 3, 12, 0 */
|
|
||||||
|
|
||||||
- kbdev->clock = clk_get(kbdev->dev, "clk_mali");
|
|
||||||
+ kbdev->clock = of_clk_get(kbdev->dev->of_node, 0);
|
|
||||||
if (IS_ERR_OR_NULL(kbdev->clock)) {
|
|
||||||
err = PTR_ERR(kbdev->clock);
|
|
||||||
kbdev->clock = NULL;
|
|
||||||
--
|
|
||||||
2.10.2
|
|
||||||
|
|
@ -1,156 +0,0 @@
|
|||||||
From 1aeeeeaf10ad5888c1a5b3ab9b780be91c7dada9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy <myy@miouyouyou.fr>
|
|
||||||
Date: Mon, 24 Jul 2017 23:09:31 +0000
|
|
||||||
Subject: [PATCH] Last try for the reboot hack
|
|
||||||
|
|
||||||
If this one does not work, get a refund for your CantRebootBoard.
|
|
||||||
|
|
||||||
Signed-off-by: Myy <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
drivers/mmc/host/dw_mmc-rockchip.c | 24 ++++++++++++++++++++++++
|
|
||||||
drivers/mmc/host/dw_mmc.c | 26 ++++++++++++++++++++++++++
|
|
||||||
include/linux/reboot.h | 3 +++
|
|
||||||
kernel/reboot.c | 1 +
|
|
||||||
4 files changed, 54 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/drivers/mmc/host/dw_mmc-rockchip.c b/drivers/mmc/host/dw_mmc-rockchip.c
|
|
||||||
index aaed6f9b..71131020 100644
|
|
||||||
--- a/drivers/mmc/host/dw_mmc-rockchip.c
|
|
||||||
+++ b/drivers/mmc/host/dw_mmc-rockchip.c
|
|
||||||
@@ -14,10 +14,12 @@
|
|
||||||
#include <linux/of_address.h>
|
|
||||||
#include <linux/mmc/slot-gpio.h>
|
|
||||||
#include <linux/pm_runtime.h>
|
|
||||||
+#include <linux/regulator/consumer.h> // Hack
|
|
||||||
#include <linux/slab.h>
|
|
||||||
|
|
||||||
#include "dw_mmc.h"
|
|
||||||
#include "dw_mmc-pltfm.h"
|
|
||||||
+#include "../core/core.h" // Hack
|
|
||||||
|
|
||||||
#define RK3288_CLKGEN_DIV 2
|
|
||||||
|
|
||||||
@@ -365,6 +367,27 @@ static int dw_mci_rockchip_probe(struct platform_device *pdev)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void dw_mci_rockchip_platfm_shutdown(struct platform_device *pdev)
|
|
||||||
+{
|
|
||||||
+ struct dw_mci *host = platform_get_drvdata(pdev);
|
|
||||||
+ struct mmc_host *mmc = host->slot->mmc;
|
|
||||||
+ int ret;
|
|
||||||
+
|
|
||||||
+ if(of_machine_is_compatible("asus,rk3288-tinker")){
|
|
||||||
+
|
|
||||||
+ mmc_power_off(mmc);
|
|
||||||
+
|
|
||||||
+ mdelay(20);
|
|
||||||
+
|
|
||||||
+ if (!IS_ERR(mmc->supply.vmmc))
|
|
||||||
+ ret = regulator_enable(mmc->supply.vmmc);
|
|
||||||
+
|
|
||||||
+ if (!IS_ERR(mmc->supply.vqmmc))
|
|
||||||
+ regulator_set_voltage(mmc->supply.vqmmc, 3000000, 3300000);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
static int dw_mci_rockchip_remove(struct platform_device *pdev)
|
|
||||||
{
|
|
||||||
pm_runtime_get_sync(&pdev->dev);
|
|
||||||
@@ -385,6 +408,7 @@ static const struct dev_pm_ops dw_mci_rockchip_dev_pm_ops = {
|
|
||||||
static struct platform_driver dw_mci_rockchip_pltfm_driver = {
|
|
||||||
.probe = dw_mci_rockchip_probe,
|
|
||||||
.remove = dw_mci_rockchip_remove,
|
|
||||||
+ .shutdown = dw_mci_rockchip_platfm_shutdown,
|
|
||||||
.driver = {
|
|
||||||
.name = "dwmmc_rockchip",
|
|
||||||
.of_match_table = dw_mci_rockchip_match,
|
|
||||||
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
|
|
||||||
index a9dfb269..ee956a57 100644
|
|
||||||
--- a/drivers/mmc/host/dw_mmc.c
|
|
||||||
+++ b/drivers/mmc/host/dw_mmc.c
|
|
||||||
@@ -39,8 +39,10 @@
|
|
||||||
#include <linux/of.h>
|
|
||||||
#include <linux/of_gpio.h>
|
|
||||||
#include <linux/mmc/slot-gpio.h>
|
|
||||||
+#include <linux/reboot.h> // Hack
|
|
||||||
|
|
||||||
#include "dw_mmc.h"
|
|
||||||
+#include "../core/core.h" // Hack
|
|
||||||
|
|
||||||
/* Common flag combinations */
|
|
||||||
#define DW_MCI_DATA_ERROR_FLAGS (SDMMC_INT_DRTO | SDMMC_INT_DCRC | \
|
|
||||||
@@ -2687,6 +2689,28 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
|
|
||||||
return IRQ_HANDLED;
|
|
||||||
}
|
|
||||||
|
|
||||||
+struct dw_mci *mSdhost;
|
|
||||||
+void setmmcEmergency() {
|
|
||||||
+ struct mmc_host *mmc;
|
|
||||||
+ int ret;
|
|
||||||
+
|
|
||||||
+ printk(KERN_ERR "Emergency route taken.\n");
|
|
||||||
+ if (of_machine_is_compatible("asus,rk3288-tinker")) {
|
|
||||||
+ mmc = mSdhost->slot->mmc;
|
|
||||||
+
|
|
||||||
+ mmc_power_off(mmc);
|
|
||||||
+
|
|
||||||
+ mdelay(20);
|
|
||||||
+
|
|
||||||
+ if (!IS_ERR(mmc->supply.vmmc))
|
|
||||||
+ ret = regulator_enable(mmc->supply.vmmc);
|
|
||||||
+
|
|
||||||
+ if (!IS_ERR(mmc->supply.vqmmc))
|
|
||||||
+ regulator_set_voltage(mmc->supply.vqmmc, 3000000, 3300000);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+EXPORT_SYMBOL(setmmcEmergency);
|
|
||||||
+
|
|
||||||
static int dw_mci_init_slot(struct dw_mci *host)
|
|
||||||
{
|
|
||||||
struct mmc_host *mmc;
|
|
||||||
@@ -2718,6 +2742,8 @@ static int dw_mci_init_slot(struct dw_mci *host)
|
|
||||||
mmc->f_max = freq[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (of_find_property(host->dev->of_node, "supports-sd", NULL))
|
|
||||||
+ mSdhost = host;
|
|
||||||
/*if there are external regulators, get them*/
|
|
||||||
ret = mmc_regulator_get_supply(mmc);
|
|
||||||
if (ret == -EPROBE_DEFER)
|
|
||||||
diff --git a/include/linux/reboot.h b/include/linux/reboot.h
|
|
||||||
index a7ff409f..586e4504 100644
|
|
||||||
--- a/include/linux/reboot.h
|
|
||||||
+++ b/include/linux/reboot.h
|
|
||||||
@@ -72,12 +72,15 @@ extern char poweroff_cmd[POWEROFF_CMD_PATH_LEN];
|
|
||||||
|
|
||||||
extern void orderly_poweroff(bool force);
|
|
||||||
extern void orderly_reboot(void);
|
|
||||||
+// Wonderful ASUS hack
|
|
||||||
+extern void setmmcEmergency(void);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Emergency restart, callable from an interrupt handler.
|
|
||||||
*/
|
|
||||||
|
|
||||||
extern void emergency_restart(void);
|
|
||||||
+
|
|
||||||
#include <asm/emergency-restart.h>
|
|
||||||
|
|
||||||
#endif /* _LINUX_REBOOT_H */
|
|
||||||
diff --git a/kernel/reboot.c b/kernel/reboot.c
|
|
||||||
index bd30a973..9f99488f 100644
|
|
||||||
--- a/kernel/reboot.c
|
|
||||||
+++ b/kernel/reboot.c
|
|
||||||
@@ -61,6 +61,7 @@ void (*pm_power_off_prepare)(void);
|
|
||||||
void emergency_restart(void)
|
|
||||||
{
|
|
||||||
kmsg_dump(KMSG_DUMP_EMERG);
|
|
||||||
+ setmmcEmergency();
|
|
||||||
machine_emergency_restart();
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(emergency_restart);
|
|
||||||
--
|
|
||||||
2.13.0
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,59 +0,0 @@
|
|||||||
From c9f505dba7e4a3adc62054b852349e8bbae10326 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jacob Chen <jacob-chen@iotwrt.com>
|
|
||||||
Date: Mon, 26 Jun 2017 22:53:22 +0800
|
|
||||||
Subject: [PATCH 5/9] dt-bindings: Document the Rockchip RGA bindings
|
|
||||||
|
|
||||||
Add DT bindings documentation for Rockchip RGA
|
|
||||||
|
|
||||||
Signed-off-by: Yakir Yang <ykk@rock-chips.com>
|
|
||||||
Signed-off-by: Jacob Chen <jacob-chen@iotwrt.com>
|
|
||||||
---
|
|
||||||
.../devicetree/bindings/media/rockchip-rga.txt | 36 ++++++++++++++++++++++
|
|
||||||
1 file changed, 36 insertions(+)
|
|
||||||
create mode 100644 Documentation/devicetree/bindings/media/rockchip-rga.txt
|
|
||||||
|
|
||||||
diff --git a/Documentation/devicetree/bindings/media/rockchip-rga.txt b/Documentation/devicetree/bindings/media/rockchip-rga.txt
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000..48a260e5
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/Documentation/devicetree/bindings/media/rockchip-rga.txt
|
|
||||||
@@ -0,0 +1,36 @@
|
|
||||||
+device-tree bindings for rockchip 2D raster graphic acceleration controller (RGA)
|
|
||||||
+
|
|
||||||
+RGA is a separate 2D raster graphic acceleration unit. It accelerates 2D
|
|
||||||
+graphics operations, such as point/line drawing, image scaling, rotation,
|
|
||||||
+BitBLT, alpha blending and image blur/sharpness.
|
|
||||||
+
|
|
||||||
+Required properties:
|
|
||||||
+- compatible: value should be one of the following
|
|
||||||
+ "rockchip,rk3228-rga";
|
|
||||||
+ "rockchip,rk3288-rga";
|
|
||||||
+ "rockchip,rk3399-rga";
|
|
||||||
+
|
|
||||||
+- interrupts: RGA interrupt number.
|
|
||||||
+
|
|
||||||
+- clocks: phandle to RGA sclk/hclk/aclk clocks
|
|
||||||
+
|
|
||||||
+- clock-names: should be "aclk" "hclk" and "sclk"
|
|
||||||
+
|
|
||||||
+- resets: Must contain an entry for each entry in reset-names.
|
|
||||||
+ See ../reset/reset.txt for details.
|
|
||||||
+- reset-names: should be "core" "axi" and "ahb"
|
|
||||||
+
|
|
||||||
+Example:
|
|
||||||
+SoC specific DT entry:
|
|
||||||
+ rga: rga@ff680000 {
|
|
||||||
+ compatible = "rockchip,rk3399-rga";
|
|
||||||
+ reg = <0xff680000 0x10000>;
|
|
||||||
+ interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
+ interrupt-names = "rga";
|
|
||||||
+ clocks = <&cru ACLK_RGA>, <&cru HCLK_RGA>, <&cru SCLK_RGA_CORE>;
|
|
||||||
+ clock-names = "aclk", "hclk", "sclk";
|
|
||||||
+
|
|
||||||
+ resets = <&cru SRST_RGA_CORE>, <&cru SRST_A_RGA>, <&cru SRST_H_RGA>;
|
|
||||||
+ reset-names = "core, "axi", "ahb";
|
|
||||||
+ status = "disabled";
|
|
||||||
+ };
|
|
||||||
--
|
|
||||||
2.13.0
|
|
||||||
|
|
@ -1,83 +0,0 @@
|
|||||||
diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
|
|
||||||
index 7b6eb0ad513b..96b6935dc0d7 100644
|
|
||||||
--- a/drivers/usb/dwc2/hcd.c
|
|
||||||
+++ b/drivers/usb/dwc2/hcd.c
|
|
||||||
@@ -2748,6 +2748,8 @@ static int dwc2_assign_and_init_hc(struct dwc2_hsotg *hsotg, struct dwc2_qh *qh)
|
|
||||||
chan->xfer_len = urb->length - urb->actual_length;
|
|
||||||
chan->xfer_count = 0;
|
|
||||||
|
|
||||||
+ chan->csplit_nak = 0;
|
|
||||||
+
|
|
||||||
/* Set the split attributes if required */
|
|
||||||
if (qh->do_split)
|
|
||||||
dwc2_hc_init_split(hsotg, chan, qtd, urb);
|
|
||||||
diff --git a/drivers/usb/dwc2/hcd.h b/drivers/usb/dwc2/hcd.h
|
|
||||||
index 78e9e01051b5..e54f1351225b 100644
|
|
||||||
--- a/drivers/usb/dwc2/hcd.h
|
|
||||||
+++ b/drivers/usb/dwc2/hcd.h
|
|
||||||
@@ -143,6 +143,7 @@ struct dwc2_host_chan {
|
|
||||||
u8 halt_pending;
|
|
||||||
u8 do_split;
|
|
||||||
u8 complete_split;
|
|
||||||
+ u8 csplit_nak;
|
|
||||||
u8 hub_addr;
|
|
||||||
u8 hub_port;
|
|
||||||
u8 xact_pos;
|
|
||||||
diff --git a/drivers/usb/dwc2/hcd_intr.c b/drivers/usb/dwc2/hcd_intr.c
|
|
||||||
index 916d991b96b8..551cfacd2252 100644
|
|
||||||
--- a/drivers/usb/dwc2/hcd_intr.c
|
|
||||||
+++ b/drivers/usb/dwc2/hcd_intr.c
|
|
||||||
@@ -691,6 +691,7 @@ static void dwc2_release_channel(struct dwc2_hsotg *hsotg,
|
|
||||||
enum dwc2_transaction_type tr_type;
|
|
||||||
u32 haintmsk;
|
|
||||||
int free_qtd = 0;
|
|
||||||
+ int continue_trans = 1;
|
|
||||||
|
|
||||||
if (dbg_hc(chan))
|
|
||||||
dev_vdbg(hsotg->dev, " %s: channel %d, halt_status %d\n",
|
|
||||||
@@ -719,6 +720,7 @@ static void dwc2_release_channel(struct dwc2_hsotg *hsotg,
|
|
||||||
* deactivated. Don't want to do anything except release the
|
|
||||||
* host channel and try to queue more transfers.
|
|
||||||
*/
|
|
||||||
+ continue_trans = 0;
|
|
||||||
goto cleanup;
|
|
||||||
case DWC2_HC_XFER_PERIODIC_INCOMPLETE:
|
|
||||||
dev_vdbg(hsotg->dev, " Complete URB with I/O error\n");
|
|
||||||
@@ -730,6 +732,11 @@ static void dwc2_release_channel(struct dwc2_hsotg *hsotg,
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (chan->csplit_nak) {
|
|
||||||
+ continue_trans = 0;
|
|
||||||
+ chan->csplit_nak = 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
dwc2_deactivate_qh(hsotg, chan->qh, free_qtd);
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
@@ -767,9 +774,11 @@ static void dwc2_release_channel(struct dwc2_hsotg *hsotg,
|
|
||||||
dwc2_writel(haintmsk, hsotg->regs + HAINTMSK);
|
|
||||||
|
|
||||||
/* Try to queue more transfers now that there's a free channel */
|
|
||||||
- tr_type = dwc2_hcd_select_transactions(hsotg);
|
|
||||||
- if (tr_type != DWC2_TRANSACTION_NONE)
|
|
||||||
- dwc2_hcd_queue_transactions(hsotg, tr_type);
|
|
||||||
+ if (continue_trans) {
|
|
||||||
+ tr_type = dwc2_hcd_select_transactions(hsotg);
|
|
||||||
+ if (tr_type != DWC2_TRANSACTION_NONE)
|
|
||||||
+ dwc2_hcd_queue_transactions(hsotg, tr_type);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -1205,6 +1214,7 @@ static void dwc2_hc_nak_intr(struct dwc2_hsotg *hsotg,
|
|
||||||
if (chan->do_split) {
|
|
||||||
if (chan->complete_split)
|
|
||||||
qtd->error_count = 0;
|
|
||||||
+ chan->csplit_nak = 1;
|
|
||||||
qtd->complete_split = 0;
|
|
||||||
dwc2_halt_channel(hsotg, chan, qtd, DWC2_HC_XFER_NAK);
|
|
||||||
goto handle_nak_done;
|
|
||||||
--
|
|
||||||
2.11.0
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
|||||||
From 604ea7fc311af2b3a41e7fe3b4fbde0ee03dfb9c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy Miouyouyou <myy@miouyouyou.fr>
|
|
||||||
Date: Thu, 19 Oct 2017 21:09:50 +0200
|
|
||||||
Subject: [PATCH 04/28] dts: rk3288: miqi: Enabling the Mali GPU node
|
|
||||||
|
|
||||||
Why is the MiQi the only one left without a working mali GPU node ?
|
|
||||||
|
|
||||||
Seriously, is there a rk3288 chipset WITHOUT a mali GPU ? Couldn't
|
|
||||||
they enable it once in the DTSI, instead of defining it as "disabled"
|
|
||||||
and enabling it in every DTS file ?
|
|
||||||
|
|
||||||
Signed-off-by: Myy Miouyouyou <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
arch/arm/boot/dts/rk3288-miqi.dts | 5 +++++
|
|
||||||
1 file changed, 5 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/arch/arm/boot/dts/rk3288-miqi.dts b/arch/arm/boot/dts/rk3288-miqi.dts
|
|
||||||
index 4d923aa6..3cd60674 100644
|
|
||||||
--- a/arch/arm/boot/dts/rk3288-miqi.dts
|
|
||||||
+++ b/arch/arm/boot/dts/rk3288-miqi.dts
|
|
||||||
@@ -149,6 +149,11 @@
|
|
||||||
status = "ok";
|
|
||||||
};
|
|
||||||
|
|
||||||
+&gpu {
|
|
||||||
+ mali-supply = <&vdd_gpu>;
|
|
||||||
+ status = "okay";
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
&hdmi {
|
|
||||||
ddc-i2c-bus = <&i2c5>;
|
|
||||||
status = "okay";
|
|
||||||
--
|
|
||||||
2.11.0
|
|
||||||
|
|
@ -1,45 +0,0 @@
|
|||||||
From 89e5763110ca77d68a4be00cd97a638adc2401d5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Willy Tarreau <w@1wt.eu>
|
|
||||||
Date: Tue, 2 Aug 2016 08:31:00 +0200
|
|
||||||
Subject: [PATCH 05/28] ARM: dts: rockchip: fix the regulator's voltage range
|
|
||||||
on MiQi board
|
|
||||||
|
|
||||||
The board declared too narrow a voltage range for the CPU and GPU
|
|
||||||
regulators, preventing it from using the full CPU frequency range.
|
|
||||||
The regulators support 712500 to 1500000 microvolts.
|
|
||||||
|
|
||||||
Signed-off-by: Willy Tarreau <w@1wt.eu>
|
|
||||||
(cherry picked from commit 95330e63a9295a2632cee8cce5db80677f01857a)
|
|
||||||
---
|
|
||||||
arch/arm/boot/dts/rk3288-miqi.dts | 8 ++++----
|
|
||||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/arch/arm/boot/dts/rk3288-miqi.dts b/arch/arm/boot/dts/rk3288-miqi.dts
|
|
||||||
index 3cd60674..a1c3cdaa 100644
|
|
||||||
--- a/arch/arm/boot/dts/rk3288-miqi.dts
|
|
||||||
+++ b/arch/arm/boot/dts/rk3288-miqi.dts
|
|
||||||
@@ -168,8 +168,8 @@
|
|
||||||
fcs,suspend-voltage-selector = <1>;
|
|
||||||
reg = <0x40>;
|
|
||||||
regulator-name = "vdd_cpu";
|
|
||||||
- regulator-min-microvolt = <850000>;
|
|
||||||
- regulator-max-microvolt = <1350000>;
|
|
||||||
+ regulator-min-microvolt = <712500>;
|
|
||||||
+ regulator-max-microvolt = <1500000>;
|
|
||||||
regulator-always-on;
|
|
||||||
regulator-boot-on;
|
|
||||||
regulator-enable-ramp-delay = <300>;
|
|
||||||
@@ -182,8 +182,8 @@
|
|
||||||
fcs,suspend-voltage-selector = <1>;
|
|
||||||
reg = <0x41>;
|
|
||||||
regulator-name = "vdd_gpu";
|
|
||||||
- regulator-min-microvolt = <850000>;
|
|
||||||
- regulator-max-microvolt = <1350000>;
|
|
||||||
+ regulator-min-microvolt = <712500>;
|
|
||||||
+ regulator-max-microvolt = <1500000>;
|
|
||||||
regulator-always-on;
|
|
||||||
vin-supply = <&vcc_sys>;
|
|
||||||
};
|
|
||||||
--
|
|
||||||
2.11.0
|
|
||||||
|
|
@ -1,46 +0,0 @@
|
|||||||
From c27e445527e949f3ef46d5326066196969c17d23 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy <myy@miouyouyou.fr>
|
|
||||||
Date: Sun, 12 Mar 2017 19:43:15 +0000
|
|
||||||
Subject: [PATCH 06/28] ARM: dts: rockchip: add the MiQi board's fan definition
|
|
||||||
|
|
||||||
The MiQi board is sold with an enclosure in which a fan is connected
|
|
||||||
to the second LED output, and configured by default in "heartbeat"
|
|
||||||
mode so that it rotates slowly and increases when the CPU load
|
|
||||||
increases, ensuring appropriate cooling by default. This LED output
|
|
||||||
is called "Fan" in the original kernel and connected to GPIO18
|
|
||||||
(gpiochip 0, pin 18). Here we called it "miqi:green:fan" to stay
|
|
||||||
consistent with the kernel's naming conventions.
|
|
||||||
|
|
||||||
It's worth noting that without this patch the fan doesn't work at
|
|
||||||
all, risking to make the board overheat.
|
|
||||||
|
|
||||||
Fixes: 162718c (v4.7)
|
|
||||||
Cc: Heiko Stuebner <heiko@sntech.de>
|
|
||||||
Signed-off-by: Willy Tarreau <w@1wt.eu>
|
|
||||||
|
|
||||||
Signed-off-by: Myy <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
arch/arm/boot/dts/rk3288-miqi.dts | 7 +++++++
|
|
||||||
1 file changed, 7 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/arch/arm/boot/dts/rk3288-miqi.dts b/arch/arm/boot/dts/rk3288-miqi.dts
|
|
||||||
index a1c3cdaa..0e383595 100644
|
|
||||||
--- a/arch/arm/boot/dts/rk3288-miqi.dts
|
|
||||||
+++ b/arch/arm/boot/dts/rk3288-miqi.dts
|
|
||||||
@@ -67,6 +67,13 @@
|
|
||||||
leds {
|
|
||||||
compatible = "gpio-leds";
|
|
||||||
|
|
||||||
+ fan {
|
|
||||||
+ gpios = <&gpio0 RK_PC2 GPIO_ACTIVE_HIGH>;
|
|
||||||
+ label = "miqi:green:fan";
|
|
||||||
+ linux,default-trigger = "heartbeat";
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+
|
|
||||||
work {
|
|
||||||
gpios = <&gpio7 RK_PA2 GPIO_ACTIVE_HIGH>;
|
|
||||||
label = "miqi:green:user";
|
|
||||||
--
|
|
||||||
2.11.0
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
From e7e092be197c51b4d222a3b4e6638318067b7e6a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Willy Tarreau <w@1wt.eu>
|
|
||||||
Date: Tue, 2 Aug 2016 08:20:53 +0200
|
|
||||||
Subject: [PATCH 07/28] ARM: dts: rockchip: add support for 1800 MHz operation
|
|
||||||
on MiQi board
|
|
||||||
|
|
||||||
This board happily supports 1800 MHz operations (and even more), so
|
|
||||||
let's enable it.
|
|
||||||
|
|
||||||
Signed-off-by: Willy Tarreau <w@1wt.eu>
|
|
||||||
(cherry picked from commit a0b82a29e7873a81f49ac5f50be3df1c7d312a14)
|
|
||||||
---
|
|
||||||
arch/arm/boot/dts/rk3288-miqi.dts | 12 ++++++++++++
|
|
||||||
1 file changed, 12 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/arch/arm/boot/dts/rk3288-miqi.dts b/arch/arm/boot/dts/rk3288-miqi.dts
|
|
||||||
index 0e383595..80603a3d 100644
|
|
||||||
--- a/arch/arm/boot/dts/rk3288-miqi.dts
|
|
||||||
+++ b/arch/arm/boot/dts/rk3288-miqi.dts
|
|
||||||
@@ -126,6 +126,18 @@
|
|
||||||
|
|
||||||
&cpu0 {
|
|
||||||
cpu0-supply = <&vdd_cpu>;
|
|
||||||
+ operating-points = <
|
|
||||||
+ /* KHz uV */
|
|
||||||
+ 1800000 1400000
|
|
||||||
+ 1704000 1350000
|
|
||||||
+ 1608000 1300000
|
|
||||||
+ 1512000 1250000
|
|
||||||
+ 1416000 1200000
|
|
||||||
+ 1200000 1100000
|
|
||||||
+ 1008000 1050000
|
|
||||||
+ 816000 1000000
|
|
||||||
+ 600000 900000
|
|
||||||
+ >;
|
|
||||||
};
|
|
||||||
|
|
||||||
&emmc {
|
|
||||||
--
|
|
||||||
2.11.0
|
|
||||||
|
|
@ -1,170 +0,0 @@
|
|||||||
From de9dcd5ecab0686022eee243464f35d2c7a34c97 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy <myy@miouyouyou.fr>
|
|
||||||
Date: Mon, 16 Jan 2017 12:44:56 +0000
|
|
||||||
Subject: [PATCH 08/28] Readapt: ARM: dts: rockchip: miqi: add turbo-mode
|
|
||||||
operating points
|
|
||||||
|
|
||||||
Readaptation of Willy Tarreau patch.
|
|
||||||
|
|
||||||
Here's the original commit message:
|
|
||||||
|
|
||||||
By switching to opp-v2 we can declare "turbo-mode" operating points
|
|
||||||
which are only enabled when /sys/devices/system/cpu/cpufreq/boost is
|
|
||||||
set. It is convenient because it allows to boot, set a safe powersave
|
|
||||||
governor, enable boost, limit scaling_max_freq to a safe value, then
|
|
||||||
change the governor to performance or ondemand, and the frequency can
|
|
||||||
then be manually adjusted by only touching scaling_max_freq.
|
|
||||||
|
|
||||||
New values are 1896, 1920, 1992, 2016, 2040 MHz, 2064, 2088, 2112,
|
|
||||||
2136, 2160, 2184, 2208. MiQi boards work fine up to 2112 with a very
|
|
||||||
good power supply (5.2V/3A real) and a strong heatsink. Higher
|
|
||||||
frequencies may randomly work. At least 1992 is rock solid for hours
|
|
||||||
using "openssl speed -multi 4". The other ones have only been tested
|
|
||||||
for a few minutes. Frequencies of 1896 and 1920 MHz use 1.425V.
|
|
||||||
1992 MHz uses 1.45V. 2016, 2040 and 2064 use 1.475V. 2088 and above
|
|
||||||
use 1.500V. 2160, 2184 and 2208 cause the lowest frequency to be
|
|
||||||
picked. It's obvious that it's a sign issue somewhere in the kernel
|
|
||||||
but this one was not found yet.
|
|
||||||
|
|
||||||
Signed-off-by: Myy <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
arch/arm/boot/dts/rk3288-miqi.dts | 120 +++++++++++++++++++++++++++++++++-----
|
|
||||||
1 file changed, 107 insertions(+), 13 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/arch/arm/boot/dts/rk3288-miqi.dts b/arch/arm/boot/dts/rk3288-miqi.dts
|
|
||||||
index 80603a3d..d7fde483 100644
|
|
||||||
--- a/arch/arm/boot/dts/rk3288-miqi.dts
|
|
||||||
+++ b/arch/arm/boot/dts/rk3288-miqi.dts
|
|
||||||
@@ -122,22 +122,116 @@
|
|
||||||
regulator-always-on;
|
|
||||||
regulator-boot-on;
|
|
||||||
};
|
|
||||||
-};
|
|
||||||
|
|
||||||
+
|
|
||||||
+ cpu0_opp_table: opp_table0 {
|
|
||||||
+ compatible = "operating-points-v2";
|
|
||||||
+ opp-shared;
|
|
||||||
+
|
|
||||||
+ opp@600000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <600000000>;
|
|
||||||
+ opp-microvolt = <900000>;
|
|
||||||
+ };
|
|
||||||
+ opp@816000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <816000000>;
|
|
||||||
+ opp-microvolt = <1000000>;
|
|
||||||
+ };
|
|
||||||
+ opp@1008000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <1008000000>;
|
|
||||||
+ opp-microvolt = <1050000>;
|
|
||||||
+ };
|
|
||||||
+ opp@1200000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <1200000000>;
|
|
||||||
+ opp-microvolt = <1100000>;
|
|
||||||
+ };
|
|
||||||
+ opp@1416000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <1416000000>;
|
|
||||||
+ opp-microvolt = <1200000>;
|
|
||||||
+ };
|
|
||||||
+ opp@1512000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <1512000000>;
|
|
||||||
+ opp-microvolt = <1250000>;
|
|
||||||
+ };
|
|
||||||
+ opp@1608000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <1608000000>;
|
|
||||||
+ opp-microvolt = <1300000>;
|
|
||||||
+ };
|
|
||||||
+ opp@1704000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <1704000000>;
|
|
||||||
+ opp-microvolt = <1350000>;
|
|
||||||
+ };
|
|
||||||
+ opp@1800000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <1800000000>;
|
|
||||||
+ opp-microvolt = <1400000>;
|
|
||||||
+ };
|
|
||||||
+ /* boot-only frequencies below */
|
|
||||||
+ opp@1896000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <1896000000>;
|
|
||||||
+ opp-microvolt = <1425000>;
|
|
||||||
+ turbo-mode;
|
|
||||||
+ };
|
|
||||||
+ opp@1920000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <1920000000>;
|
|
||||||
+ opp-microvolt = <1425000>;
|
|
||||||
+ turbo-mode;
|
|
||||||
+ };
|
|
||||||
+ opp@1992000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <1992000000>;
|
|
||||||
+ opp-microvolt = <1450000>;
|
|
||||||
+ turbo-mode;
|
|
||||||
+ };
|
|
||||||
+ opp@2016000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <2016000000>;
|
|
||||||
+ opp-microvolt = <1475000>;
|
|
||||||
+ turbo-mode;
|
|
||||||
+ };
|
|
||||||
+ opp@2040000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <2040000000>;
|
|
||||||
+ opp-microvolt = <1475000>;
|
|
||||||
+ turbo-mode;
|
|
||||||
+ };
|
|
||||||
+ opp@2064000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <2064000000>;
|
|
||||||
+ opp-microvolt = <1475000>;
|
|
||||||
+ turbo-mode;
|
|
||||||
+ };
|
|
||||||
+ opp@2088000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <2088000000>;
|
|
||||||
+ opp-microvolt = <1500000>;
|
|
||||||
+ turbo-mode;
|
|
||||||
+ };
|
|
||||||
+ opp@2112000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <2112000000>;
|
|
||||||
+ opp-microvolt = <1500000>;
|
|
||||||
+ turbo-mode;
|
|
||||||
+ };
|
|
||||||
+ opp@2136000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <2136000000>;
|
|
||||||
+ opp-microvolt = <1500000>;
|
|
||||||
+ turbo-mode;
|
|
||||||
+ };
|
|
||||||
+ opp@2160000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <2160000000>;
|
|
||||||
+ opp-microvolt = <1500000>;
|
|
||||||
+ turbo-mode;
|
|
||||||
+ };
|
|
||||||
+ opp@2184000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <2184000000>;
|
|
||||||
+ opp-microvolt = <1500000>;
|
|
||||||
+ turbo-mode;
|
|
||||||
+ };
|
|
||||||
+ opp@2208000000 {
|
|
||||||
+ opp-hz = /bits/ 64 <2208000000>;
|
|
||||||
+ opp-microvolt = <1500000>;
|
|
||||||
+ turbo-mode;
|
|
||||||
+ };
|
|
||||||
+ };
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
&cpu0 {
|
|
||||||
cpu0-supply = <&vdd_cpu>;
|
|
||||||
- operating-points = <
|
|
||||||
- /* KHz uV */
|
|
||||||
- 1800000 1400000
|
|
||||||
- 1704000 1350000
|
|
||||||
- 1608000 1300000
|
|
||||||
- 1512000 1250000
|
|
||||||
- 1416000 1200000
|
|
||||||
- 1200000 1100000
|
|
||||||
- 1008000 1050000
|
|
||||||
- 816000 1000000
|
|
||||||
- 600000 900000
|
|
||||||
- >;
|
|
||||||
+
|
|
||||||
+ operating-points-v2 = <&cpu0_opp_table>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&emmc {
|
|
||||||
--
|
|
||||||
2.11.0
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
|||||||
From 771bcfe1735e42650b763e52a042a9fd98b2fa5b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy Miouyouyou <myy@miouyouyou.fr>
|
|
||||||
Date: Thu, 19 Oct 2017 21:20:43 +0200
|
|
||||||
Subject: [PATCH 09/28] ARM: DTSI: rk3288.dtsi: Missing GRF handles
|
|
||||||
|
|
||||||
Add missing GRF handles.
|
|
||||||
|
|
||||||
This patch is taken from the patches provided by the ARMbian team.
|
|
||||||
|
|
||||||
Signed-off-by: Myy Miouyouyou <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
arch/arm/boot/dts/rk3288.dtsi | 5 +++++
|
|
||||||
1 file changed, 5 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
|
||||||
index 356ed1e6..5b789528 100644
|
|
||||||
--- a/arch/arm/boot/dts/rk3288.dtsi
|
|
||||||
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
|
||||||
@@ -547,6 +547,7 @@
|
|
||||||
pinctrl-2 = <&otp_gpio>;
|
|
||||||
#thermal-sensor-cells = <1>;
|
|
||||||
rockchip,hw-tshut-temp = <95000>;
|
|
||||||
+ rockchip,grf = <&grf>;
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -655,6 +656,7 @@
|
|
||||||
pinctrl-0 = <&pwm0_pin>;
|
|
||||||
clocks = <&cru PCLK_PWM>;
|
|
||||||
clock-names = "pwm";
|
|
||||||
+ rockchip,grf = <&grf>;
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -666,6 +668,7 @@
|
|
||||||
pinctrl-0 = <&pwm1_pin>;
|
|
||||||
clocks = <&cru PCLK_PWM>;
|
|
||||||
clock-names = "pwm";
|
|
||||||
+ rockchip,grf = <&grf>;
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -677,6 +680,7 @@
|
|
||||||
pinctrl-0 = <&pwm2_pin>;
|
|
||||||
clocks = <&cru PCLK_PWM>;
|
|
||||||
clock-names = "pwm";
|
|
||||||
+ rockchip,grf = <&grf>;
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -688,6 +692,7 @@
|
|
||||||
pinctrl-0 = <&pwm3_pin>;
|
|
||||||
clocks = <&cru PCLK_PWM>;
|
|
||||||
clock-names = "pwm";
|
|
||||||
+ rockchip,grf = <&grf>;
|
|
||||||
status = "disabled";
|
|
||||||
};
|
|
||||||
|
|
||||||
--
|
|
||||||
2.11.0
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
From 062488e4b8fd552c01e1104b3bc91a6f7ffe6c41 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy Miouyouyou <myy@miouyouyou.fr>
|
|
||||||
Date: Thu, 19 Oct 2017 21:24:47 +0200
|
|
||||||
Subject: [PATCH 10/28] RK3288: DTSI: rk3288.dtsi: Add missing SPI2 pinctrl
|
|
||||||
|
|
||||||
The spi2_cs1 pin reference is missing in the spi2 first pin control
|
|
||||||
definition.
|
|
||||||
|
|
||||||
This patch is taken from the patches provided by the ARMbian team.
|
|
||||||
|
|
||||||
Signed-off-by: Myy Miouyouyou <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
arch/arm/boot/dts/rk3288.dtsi | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
|
||||||
index 5b789528..9ed532cc 100644
|
|
||||||
--- a/arch/arm/boot/dts/rk3288.dtsi
|
|
||||||
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
|
||||||
@@ -334,7 +334,7 @@
|
|
||||||
dma-names = "tx", "rx";
|
|
||||||
interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
pinctrl-names = "default";
|
|
||||||
- pinctrl-0 = <&spi2_clk &spi2_tx &spi2_rx &spi2_cs0>;
|
|
||||||
+ pinctrl-0 = <&spi2_clk &spi2_tx &spi2_rx &spi2_cs0 &spi2_cs1>;
|
|
||||||
reg = <0x0 0xff130000 0x0 0x1000>;
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
--
|
|
||||||
2.11.0
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
|||||||
From af8d73ec0df1dde1e2fe1674c5708d4c30385ba9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy <myy@miouyouyou.fr>
|
|
||||||
Date: Mon, 5 Jun 2017 12:37:17 +0000
|
|
||||||
Subject: [PATCH 11/28] Added support for Tinkerboard's SPI interface
|
|
||||||
|
|
||||||
Imported from ARMbian
|
|
||||||
|
|
||||||
Signed-off-by: Myy <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
drivers/spi/spidev.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c
|
|
||||||
index cda10719..a6287475 100644
|
|
||||||
--- a/drivers/spi/spidev.c
|
|
||||||
+++ b/drivers/spi/spidev.c
|
|
||||||
@@ -669,6 +669,7 @@ static const struct of_device_id spidev_dt_ids[] = {
|
|
||||||
{ .compatible = "lineartechnology,ltc2488" },
|
|
||||||
{ .compatible = "ge,achc" },
|
|
||||||
{ .compatible = "semtech,sx1301" },
|
|
||||||
+ { .compatible = "rockchip,spi_tinker" },
|
|
||||||
{},
|
|
||||||
};
|
|
||||||
MODULE_DEVICE_TABLE(of, spidev_dt_ids);
|
|
||||||
--
|
|
||||||
2.11.0
|
|
||||||
|
|
@ -1,56 +0,0 @@
|
|||||||
From 7af8d2bf732cb3baab7d926ed8a7e061e7a09ad9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy Miouyouyou <myy@miouyouyou.fr>
|
|
||||||
Date: Thu, 19 Oct 2017 21:39:00 +0200
|
|
||||||
Subject: [PATCH 13/28] ARM: DTSI: rk3288.dtsi: Adding cells addresses and
|
|
||||||
sizes of MMC nodes
|
|
||||||
|
|
||||||
Imported from the Rockchip 4.4 patches.
|
|
||||||
|
|
||||||
Signed-off-by: Myy Miouyouyou <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
arch/arm/boot/dts/rk3288.dtsi | 8 ++++++++
|
|
||||||
1 file changed, 8 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
|
||||||
index be985f02..14ef8202 100644
|
|
||||||
--- a/arch/arm/boot/dts/rk3288.dtsi
|
|
||||||
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
|
||||||
@@ -236,6 +236,8 @@
|
|
||||||
clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
|
|
||||||
fifo-depth = <0x100>;
|
|
||||||
interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
+ #address-cells = <1>;
|
|
||||||
+ #size-cells = <0>;
|
|
||||||
reg = <0x0 0xff0c0000 0x0 0x4000>;
|
|
||||||
resets = <&cru SRST_MMC0>;
|
|
||||||
reset-names = "reset";
|
|
||||||
@@ -250,6 +252,8 @@
|
|
||||||
clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
|
|
||||||
fifo-depth = <0x100>;
|
|
||||||
interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
+ #address-cells = <1>;
|
|
||||||
+ #size-cells = <0>;
|
|
||||||
reg = <0x0 0xff0d0000 0x0 0x4000>;
|
|
||||||
resets = <&cru SRST_SDIO0>;
|
|
||||||
reset-names = "reset";
|
|
||||||
@@ -264,6 +268,8 @@
|
|
||||||
clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
|
|
||||||
fifo-depth = <0x100>;
|
|
||||||
interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
+ #address-cells = <1>;
|
|
||||||
+ #size-cells = <0>;
|
|
||||||
reg = <0x0 0xff0e0000 0x0 0x4000>;
|
|
||||||
resets = <&cru SRST_SDIO1>;
|
|
||||||
reset-names = "reset";
|
|
||||||
@@ -278,6 +284,8 @@
|
|
||||||
clock-names = "biu", "ciu", "ciu-drive", "ciu-sample";
|
|
||||||
fifo-depth = <0x100>;
|
|
||||||
interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
+ #address-cells = <1>;
|
|
||||||
+ #size-cells = <0>;
|
|
||||||
reg = <0x0 0xff0f0000 0x0 0x4000>;
|
|
||||||
resets = <&cru SRST_EMMC>;
|
|
||||||
reset-names = "reset";
|
|
||||||
--
|
|
||||||
2.11.0
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
|||||||
From ac220d592aa38b9b717d36f7bb93f7be5a08f6b3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Myy Miouyouyou <myy@miouyouyou.fr>
|
|
||||||
Date: Thu, 19 Oct 2017 21:43:51 +0200
|
|
||||||
Subject: [PATCH 14/28] ARM: DTSI: rk3288.dtsi: Adding missing EDP power domain
|
|
||||||
|
|
||||||
Imported from Rockchip 4.4 kernel patches.
|
|
||||||
|
|
||||||
Signed-off-by: Myy Miouyouyou <myy@miouyouyou.fr>
|
|
||||||
---
|
|
||||||
arch/arm/boot/dts/rk3288.dtsi | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
|
||||||
index 14ef8202..10ecebb4 100644
|
|
||||||
--- a/arch/arm/boot/dts/rk3288.dtsi
|
|
||||||
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
|
||||||
@@ -1105,6 +1105,7 @@
|
|
||||||
interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
|
|
||||||
clocks = <&cru SCLK_EDP>, <&cru PCLK_EDP_CTRL>;
|
|
||||||
clock-names = "dp", "pclk";
|
|
||||||
+ power-domains = <&power RK3288_PD_VIO>;
|
|
||||||
phys = <&edp_phy>;
|
|
||||||
phy-names = "dp";
|
|
||||||
resets = <&cru SRST_EDP>;
|
|
||||||
--
|
|
||||||
2.11.0
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user