mirror of
https://github.com/home-assistant/operating-system.git
synced 2025-08-20 10:29:20 +00:00
Compare commits
691 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
6d5c41c682 | ||
![]() |
9e78409db8 | ||
![]() |
f649995a08 | ||
![]() |
6bbf0b382c | ||
![]() |
abfe9da03e | ||
![]() |
81275e7189 | ||
![]() |
9b81e50e19 | ||
![]() |
17d0cdf823 | ||
![]() |
8aceb287de | ||
![]() |
e42835f163 | ||
![]() |
1a8f9ca2e3 | ||
![]() |
162084082e | ||
![]() |
c2098e1cf4 | ||
![]() |
22c668b500 | ||
![]() |
6672046b6f | ||
![]() |
78b456d05c | ||
![]() |
2cc78abe56 | ||
![]() |
46bb12844f | ||
![]() |
1537d02408 | ||
![]() |
a66591166f | ||
![]() |
7443c45001 | ||
![]() |
a4f5670cd8 | ||
![]() |
c9c5f1b3e9 | ||
![]() |
b4c9f2fce2 | ||
![]() |
c48184cf91 | ||
![]() |
681fe1421a | ||
![]() |
acc293b662 | ||
![]() |
3a67e2e8c4 | ||
![]() |
8682d8af78 | ||
![]() |
22a7f43875 | ||
![]() |
b82707ff9a | ||
![]() |
525dcfedfb | ||
![]() |
fa88a04722 | ||
![]() |
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 | ||
![]() |
a48888a2df | ||
![]() |
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 | ||
![]() |
c152fdeba0 | ||
![]() |
dcfb296dcf | ||
![]() |
fdcb94f0d8 | ||
![]() |
5f0a8fe627 | ||
![]() |
0495ba25ad | ||
![]() |
fa242e32d7 | ||
![]() |
fc3b098170 | ||
![]() |
2b0fff31a3 | ||
![]() |
dade3adf80 | ||
![]() |
b4fad03613 | ||
![]() |
59b8636bc8 | ||
![]() |
3337cd0f79 | ||
![]() |
0c7cd8023e | ||
![]() |
5583a16219 | ||
![]() |
502ef82b80 | ||
![]() |
1708ed11b4 | ||
![]() |
59b9d82a55 | ||
![]() |
39babd5368 | ||
![]() |
2595dd815b | ||
![]() |
d1577a6a65 | ||
![]() |
f219f239d8 | ||
![]() |
ebc93692f5 | ||
![]() |
3af31c2265 | ||
![]() |
639cd41ccf | ||
![]() |
f4f6908c80 | ||
![]() |
31fc13cf03 | ||
![]() |
ec1561661b | ||
![]() |
9b3e5357c5 | ||
![]() |
272430a58c | ||
![]() |
1537e14dfc | ||
![]() |
d204cbda7f | ||
![]() |
22f7777099 | ||
![]() |
813030bb4c | ||
![]() |
31bb38ffd4 | ||
![]() |
b6cfe04422 | ||
![]() |
0ae67991d1 | ||
![]() |
f892334077 | ||
![]() |
2e2f6e893b | ||
![]() |
a2a4cf8668 | ||
![]() |
b8cf3face0 | ||
![]() |
1c991c229d | ||
![]() |
a3c5e670ef | ||
![]() |
ffc75a5053 | ||
![]() |
4d6246be4d | ||
![]() |
c6a1e668f4 | ||
![]() |
b19f83d74d | ||
![]() |
7b14ed775b | ||
![]() |
a877e0c3dd | ||
![]() |
265cb08e79 | ||
![]() |
1be8e44cde | ||
![]() |
c473aca701 | ||
![]() |
f93f8e34b3 | ||
![]() |
fa53c7bc99 | ||
![]() |
1f4bd67f7e | ||
![]() |
0c427d0dee | ||
![]() |
701e4f78aa | ||
![]() |
cd5cb880ea | ||
![]() |
cf033ec49d | ||
![]() |
0ec506470a | ||
![]() |
606da02461 | ||
![]() |
e49f8fe630 | ||
![]() |
02836524ce | ||
![]() |
50176a0e3b | ||
![]() |
06e7ee7efb | ||
![]() |
e08bbd7047 | ||
![]() |
653bcbe3ae | ||
![]() |
3700516097 | ||
![]() |
3fe09a4e6a | ||
![]() |
3329912511 | ||
![]() |
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 | ||
![]() |
3c469e6f27 | ||
![]() |
96c622b36f | ||
![]() |
698f2bb7d4 | ||
![]() |
be39da4855 | ||
![]() |
b14d0223c2 | ||
![]() |
fcfd951f2b | ||
![]() |
fcefb1e515 | ||
![]() |
3070b52a3e | ||
![]() |
37639fc3ff | ||
![]() |
770bcb62a0 | ||
![]() |
b3530d1ce1 | ||
![]() |
ba9d1bac1e | ||
![]() |
db184bf5d3 | ||
![]() |
15a80bb405 | ||
![]() |
f0b5be41fe | ||
![]() |
517abe0ea9 | ||
![]() |
ca90fa515d | ||
![]() |
bbbaff117a | ||
![]() |
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 | ||
![]() |
6c58a94a4d | ||
![]() |
5336e17a06 | ||
![]() |
a017fae49d | ||
![]() |
96d59c2a40 | ||
![]() |
1f23c3ac72 | ||
![]() |
3f26a61d9a | ||
![]() |
6a728d916f | ||
![]() |
7f0ab07752 | ||
![]() |
2b89de39e3 | ||
![]() |
7d7a52732d | ||
![]() |
2d6f692a4c | ||
![]() |
279a4c4db1 | ||
![]() |
a65db13c9e | ||
![]() |
a592fc9866 | ||
![]() |
66c1b016c9 | ||
![]() |
1ca4275698 | ||
![]() |
f9a3bccf7b | ||
![]() |
1c95022184 | ||
![]() |
d4deca66b2 | ||
![]() |
1c2ef541ea | ||
![]() |
55d84758a2 | ||
![]() |
82010866b1 | ||
![]() |
647a461a74 | ||
![]() |
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 | ||
![]() |
c37a6d4c8c | ||
![]() |
d677e2d5b2 | ||
![]() |
2d44748080 | ||
![]() |
b959d9c805 | ||
![]() |
5e9ba3bb7a | ||
![]() |
3d91ac2374 | ||
![]() |
b0f95fcaec | ||
![]() |
fffa24ed1e | ||
![]() |
07bec45d8a | ||
![]() |
5835b6a683 | ||
![]() |
2d870984e2 | ||
![]() |
e858c774d2 | ||
![]() |
4aa07960d8 | ||
![]() |
5fc32d2eb7 | ||
![]() |
2be8aecfbd | ||
![]() |
e0e87141c6 | ||
![]() |
76553bf984 | ||
![]() |
96e7e57fc4 | ||
![]() |
26d427ef1d | ||
![]() |
f7eb215016 | ||
![]() |
8810b0409c | ||
![]() |
5adc9d0080 | ||
![]() |
59dba51f38 | ||
![]() |
f711123582 | ||
![]() |
3cbe6c9816 | ||
![]() |
a5aaf01042 | ||
![]() |
934b276a3c | ||
![]() |
615daddbf6 | ||
![]() |
9bc61e6318 | ||
![]() |
a860374d64 | ||
![]() |
42c2f88588 | ||
![]() |
2107a6b64d | ||
![]() |
75e721e77e | ||
![]() |
fd707ba270 | ||
![]() |
76fad70ebe | ||
![]() |
d6ad746fda | ||
![]() |
60c9013535 | ||
![]() |
ae0a2fe264 | ||
![]() |
bc3cc20629 | ||
![]() |
d94095a565 | ||
![]() |
8ed63a9aab | ||
![]() |
27a94565ea | ||
![]() |
d46e2a808f | ||
![]() |
50bc0451d0 | ||
![]() |
5ff51846e2 | ||
![]() |
4411307353 | ||
![]() |
a9bbc7babe | ||
![]() |
80f5fe0722 | ||
![]() |
519acca46d | ||
![]() |
566641bf8a | ||
![]() |
4d99243c91 | ||
![]() |
18640da277 | ||
![]() |
5351b542ff | ||
![]() |
033e153d49 | ||
![]() |
ad898040ac | ||
![]() |
9e29a12f95 | ||
![]() |
0ab78a97c7 | ||
![]() |
43c423243a | ||
![]() |
19488834e4 | ||
![]() |
dc35208efe | ||
![]() |
2435ca9065 | ||
![]() |
404efdee52 | ||
![]() |
cbd9b45adc | ||
![]() |
56992c6a77 | ||
![]() |
47bb76acec | ||
![]() |
caf708e14a | ||
![]() |
809abbfde2 | ||
![]() |
a2363d9a27 | ||
![]() |
5cdf66c2c8 | ||
![]() |
a7fa7efbf9 | ||
![]() |
976e9b0bce | ||
![]() |
960e11dc4f | ||
![]() |
2291e8599e | ||
![]() |
bcb9c3fa1f | ||
![]() |
b827a90a35 | ||
![]() |
921dd693dd | ||
![]() |
005cbc0b89 | ||
![]() |
482e6f7a7b | ||
![]() |
b83bfc5910 | ||
![]() |
c475daf889 | ||
![]() |
dac76b1632 | ||
![]() |
faa371191f | ||
![]() |
8cde7f9192 | ||
![]() |
1112a10509 | ||
![]() |
ad9f21fdfb | ||
![]() |
55cc60fc8e | ||
![]() |
075799aaa8 | ||
![]() |
3733a07bac | ||
![]() |
eb553bec07 | ||
![]() |
803bfc8391 | ||
![]() |
e7e2dc2aad | ||
![]() |
352072cc5a | ||
![]() |
5d90fa9e20 | ||
![]() |
54389be443 | ||
![]() |
ae8dec9f72 | ||
![]() |
064ee9ef84 | ||
![]() |
21e3a30012 | ||
![]() |
8d86fa9ec9 | ||
![]() |
1ead97f64a | ||
![]() |
703f0168bf | ||
![]() |
7cea5a829f | ||
![]() |
0bc81f78ec | ||
![]() |
331336a2d4 | ||
![]() |
8086b55acd | ||
![]() |
2a0d551667 | ||
![]() |
61b0b333f0 | ||
![]() |
dc0f6367cb | ||
![]() |
486161f2d8 | ||
![]() |
9441f6b16e | ||
![]() |
514c59796f | ||
![]() |
ebf84216e9 | ||
![]() |
74ff13e25e | ||
![]() |
9b170812d6 | ||
![]() |
3b45011982 | ||
![]() |
8e1af1313b | ||
![]() |
0f8010bc90 | ||
![]() |
7006a5fd64 | ||
![]() |
170ed2db00 | ||
![]() |
ef40d38b12 | ||
![]() |
d144f72868 | ||
![]() |
11088580c5 | ||
![]() |
5c8f8bea48 | ||
![]() |
8bb3732934 | ||
![]() |
86f88aae0a | ||
![]() |
10e310d8b5 | ||
![]() |
6467f343cd | ||
![]() |
e20249676a | ||
![]() |
67e722b032 | ||
![]() |
518df77e05 | ||
![]() |
202b267d09 | ||
![]() |
5ad184f943 | ||
![]() |
6ab6cd7ff4 | ||
![]() |
a2c6107685 | ||
![]() |
5f24bd5574 | ||
![]() |
ef61756566 | ||
![]() |
7a3d3ae502 | ||
![]() |
4346220e27 | ||
![]() |
12b5731e20 | ||
![]() |
72a3aec55b | ||
![]() |
9ef96373a9 | ||
![]() |
bbe4c47574 | ||
![]() |
1dc2392f15 | ||
![]() |
c5e85a625f | ||
![]() |
fbb45e1544 | ||
![]() |
48500a6c6e | ||
![]() |
ae58be25ad | ||
![]() |
42087b40c5 | ||
![]() |
e4b99ea7c0 | ||
![]() |
233e097cc4 | ||
![]() |
e093875e66 | ||
![]() |
312766e962 | ||
![]() |
e3ceea2058 | ||
![]() |
49edc087b0 | ||
![]() |
75cd510283 | ||
![]() |
3847d13b1a | ||
![]() |
eaab4a7a86 | ||
![]() |
d5953e13be | ||
![]() |
ac2a1883a2 | ||
![]() |
85c9aa4191 | ||
![]() |
a7b16cd051 | ||
![]() |
d7129fb57c | ||
![]() |
1254c6162c | ||
![]() |
95a2844265 | ||
![]() |
5ce7331001 | ||
![]() |
7cffb1f45b | ||
![]() |
a0551d8010 | ||
![]() |
38c1df36c0 | ||
![]() |
5526dbb2f7 | ||
![]() |
fd56d6544c | ||
![]() |
d2ba03164b | ||
![]() |
c6d0fef0b4 | ||
![]() |
0671e3f71c | ||
![]() |
14833a110f | ||
![]() |
988d4ebecf | ||
![]() |
bf59b7744d | ||
![]() |
4a80c7fcd0 | ||
![]() |
6c58eb1615 | ||
![]() |
46d6dba859 | ||
![]() |
12393e083d | ||
![]() |
3700d744b4 | ||
![]() |
7e665a7b42 | ||
![]() |
c860229130 | ||
![]() |
32ab05bd2e | ||
![]() |
8792d37402 | ||
![]() |
414b59ac4a | ||
![]() |
f8fa170e2a | ||
![]() |
11b1946cd7 | ||
![]() |
7d4b424d2f | ||
![]() |
6aa8e61d88 | ||
![]() |
d536e3d7a7 | ||
![]() |
2614ffce40 | ||
![]() |
dde6d8f806 | ||
![]() |
8dd8816e4e | ||
![]() |
f739aed8de | ||
![]() |
f6a916001d | ||
![]() |
23a58b23b5 | ||
![]() |
d3e3e36a6e | ||
![]() |
af23b6199e | ||
![]() |
80079930c5 | ||
![]() |
ca50a86768 | ||
![]() |
6e9326d11b |
@@ -1,3 +1,7 @@
|
|||||||
buildroot
|
# We don't need this folder because we map the hole folder
|
||||||
buildroot-external
|
buildroot/
|
||||||
buildroot-patches
|
buildroot-external/
|
||||||
|
buildroot-patches/
|
||||||
|
|
||||||
|
# Ignore too
|
||||||
|
release/
|
||||||
|
54
.github/ISSUE_TEMPLATE.md
vendored
Normal file
54
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
<!-- READ THIS FIRST:
|
||||||
|
- If you need additional help with this template please refer to https://www.home-assistant.io/help/reporting_issues/
|
||||||
|
- Make sure you are running the latest version before reporting an issue: https://github.com/home-assistant/operating-system/releases
|
||||||
|
- Do not report issues for integrations here, please refer to https://github.com/home-assistant/core/issues
|
||||||
|
- Do not report issues for Add-Ons here, please refer to
|
||||||
|
Official Add-ons: https://github.com/home-assistant/addons/issues
|
||||||
|
Home Assistant Community Add-ons: https://github.com/hassio-addons/repository
|
||||||
|
- This is for bugs only. Feature and enhancement requests should go in our community forum: https://community.home-assistant.io/c/feature-requests
|
||||||
|
- Provide as many details as possible. Paste logs, configuration sample and code using blocks with three backticks. Do not delete text from this template!
|
||||||
|
- Please add modifications to boot files, e.g. if you are using Raspberry Pi and did modifications in config.txt.
|
||||||
|
-->
|
||||||
|
|
||||||
|
**Hardware Environment**
|
||||||
|
<!--
|
||||||
|
Describe the Homme Assistant image you are using and the hardare environemnt
|
||||||
|
-->
|
||||||
|
- [ ] Raspberry Pi [1/2/3/4]
|
||||||
|
- [ ] ODROID [C2/C4/N2(+)/XU4]
|
||||||
|
- [ ] ASUS Tinker [S]
|
||||||
|
- [ ] Intel NUC (or compatible)
|
||||||
|
- [ ] OVA (Open Virtualization Applicance, on Intel NUC or any other hardware, please add the Hypervisor you are using)
|
||||||
|
|
||||||
|
**Home Assistant OS release:**
|
||||||
|
- [ ] Fresh installation of release x.y
|
||||||
|
- [ ] Updated from version x.y
|
||||||
|
- Additional information (if accessible):
|
||||||
|
<!--
|
||||||
|
- Home Assistant Frontend -> Configuration -> Info (use the copy button in the System Health block)
|
||||||
|
- Or use this command: `ha info`
|
||||||
|
-->
|
||||||
|
|
||||||
|
**Supervisor logs:**
|
||||||
|
<!--
|
||||||
|
- Home Assistant Frontend -> Supervisor -> System (Log Provider Supervisor)
|
||||||
|
- Or use this command: ha su logs
|
||||||
|
-->
|
||||||
|
|
||||||
|
**Journal logs:**
|
||||||
|
<!--
|
||||||
|
- Enable SSH on OS level and login, then use `journalctl`
|
||||||
|
-->
|
||||||
|
|
||||||
|
**Kernel logs:**
|
||||||
|
<!--
|
||||||
|
- use this command: dmesg
|
||||||
|
- Enable SSH on OS level and login, then use `dmesg`.
|
||||||
|
-->
|
||||||
|
|
||||||
|
**Description of problem:**
|
||||||
|
<!--
|
||||||
|
- Is the problem reproducible?
|
||||||
|
- Has this been working before (is this a regression?)
|
||||||
|
- Has there been attempt to rule out harware issues? (different SD card etc.)
|
||||||
|
-->
|
13
.github/move.yml
vendored
13
.github/move.yml
vendored
@@ -1,13 +0,0 @@
|
|||||||
# Configuration for move-issues - https://github.com/dessant/move-issues
|
|
||||||
|
|
||||||
# Delete the command comment. Ignored when the comment also contains other content
|
|
||||||
deleteCommand: true
|
|
||||||
# Close the source issue after moving
|
|
||||||
closeSourceIssue: true
|
|
||||||
# Lock the source issue after moving
|
|
||||||
lockSourceIssue: false
|
|
||||||
# Set custom aliases for targets
|
|
||||||
# aliases:
|
|
||||||
# r: repo
|
|
||||||
# or: owner/repo
|
|
||||||
|
|
19
.github/release-drafter.yml
vendored
Normal file
19
.github/release-drafter.yml
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
categories:
|
||||||
|
- title: 'Home Assistant Operating System'
|
||||||
|
label: 'os'
|
||||||
|
- title: 'Build System'
|
||||||
|
label: 'build'
|
||||||
|
- title: 'Raspberry Pi'
|
||||||
|
label: 'board/raspberrypi'
|
||||||
|
- title: 'Open Virtual Appliance'
|
||||||
|
label: 'board/ova'
|
||||||
|
- title: 'Intel NUC'
|
||||||
|
label: 'board/intel-nuc'
|
||||||
|
- title: 'Hardkernel ODROID'
|
||||||
|
label: 'board/hardkernel'
|
||||||
|
- title: 'ASUS Tinker'
|
||||||
|
label: 'board/tinker'
|
||||||
|
template: |
|
||||||
|
## Changes
|
||||||
|
|
||||||
|
$CHANGES
|
17
.github/stale.yml
vendored
Normal file
17
.github/stale.yml
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Number of days of inactivity before an issue becomes stale
|
||||||
|
daysUntilStale: 60
|
||||||
|
# Number of days of inactivity before a stale issue is closed
|
||||||
|
daysUntilClose: 7
|
||||||
|
# Issues with these labels will never be considered stale
|
||||||
|
exemptLabels:
|
||||||
|
- pinned
|
||||||
|
- security
|
||||||
|
# Label to use when marking an issue as stale
|
||||||
|
staleLabel: wontfix
|
||||||
|
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||||
|
markComment: >
|
||||||
|
This issue has been automatically marked as stale because it has not had
|
||||||
|
recent activity. It will be closed if no further activity occurs. Thank you
|
||||||
|
for your contributions.
|
||||||
|
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||||
|
closeComment: false
|
89
.github/workflows/dev.yml
vendored
Normal file
89
.github/workflows/dev.yml
vendored
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
# Home Assistant Operating System build workflow
|
||||||
|
|
||||||
|
name: Development build
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
version:
|
||||||
|
|
||||||
|
name: Generate version
|
||||||
|
runs-on: [ "ubuntu-20.04" ]
|
||||||
|
outputs:
|
||||||
|
version_main: ${{ steps.version_main.outputs.version_main }}
|
||||||
|
version_dev: ${{ steps.version_dev.outputs.version_dev }}
|
||||||
|
steps:
|
||||||
|
- name: Generate Development build version
|
||||||
|
shell: bash
|
||||||
|
id: version_dev
|
||||||
|
run: |
|
||||||
|
version_dev="dev$(date --utc +'%Y%m%d')"
|
||||||
|
echo "Development version \"${version_dev}\""
|
||||||
|
echo "::set-output name=version_dev::${version_dev}"
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Get Major/Minor version
|
||||||
|
id: version_main
|
||||||
|
run: |
|
||||||
|
major=$(cat ${GITHUB_WORKSPACE}/buildroot-external/meta | grep VERSION_MAJOR | cut -d'=' -f2)
|
||||||
|
build=$(cat ${GITHUB_WORKSPACE}/buildroot-external/meta | grep VERSION_BUILD | cut -d'=' -f2)
|
||||||
|
echo "::set-output name=version_main::${major}.${build}"
|
||||||
|
|
||||||
|
build:
|
||||||
|
name: Release build for ${{ matrix.board.name }}
|
||||||
|
needs: version
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
board:
|
||||||
|
- {"name": "ova", "output": "ova", "runner": "x86-64-runner"}
|
||||||
|
- {"name": "intel_nuc", "output": "intel-nuc", "runner": "x86-64-runner"}
|
||||||
|
- {"name": "odroid_c2", "output": "odroid-c2", "runner": "aarch64-runner"}
|
||||||
|
- {"name": "odroid_c4", "output": "odroid-c4", "runner": "aarch64-runner"}
|
||||||
|
- {"name": "odroid_n2", "output": "odroid-n2", "runner": "aarch64-runner"}
|
||||||
|
- {"name": "odroid_xu4", "output": "odroid-xu4" , "runner": "aarch64-runner"}
|
||||||
|
- {"name": "rpi", "output": "rpi", "runner": "arm-runner"}
|
||||||
|
- {"name": "rpi0_w", "output": "rpi0-w", "runner": "arm-runner"}
|
||||||
|
- {"name": "rpi2", "output": "rpi2", "runner": "arm-runner"}
|
||||||
|
- {"name": "rpi3", "output": "rpi3", "runner": "arm-runner"}
|
||||||
|
- {"name": "rpi3_64", "output": "rpi3-64", "runner": "aarch64-runner"}
|
||||||
|
- {"name": "rpi4", "output": "rpi4", "runner": "arm-runner"}
|
||||||
|
- {"name": "rpi4_64", "output": "rpi4-64", "runner": "aarch64-runner"}
|
||||||
|
- {"name": "tinker", "output": "tinker", "runner": "arm-runner"}
|
||||||
|
runs-on: ${{ matrix.board.runner }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Build container
|
||||||
|
run: docker build -t haos-builder .
|
||||||
|
|
||||||
|
- name: 'Add release PKI certs'
|
||||||
|
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: Build
|
||||||
|
run: |
|
||||||
|
BUILDER_UID="$(id -u)"
|
||||||
|
BUILDER_GID="$(id -g)"
|
||||||
|
docker run --rm --privileged -v "${GITHUB_WORKSPACE}:/build" \
|
||||||
|
-e BUILDER_UID="${BUILDER_UID}" -e BUILDER_GID="${BUILDER_GID}" \
|
||||||
|
-v "${{ matrix.board.runner }}-build-cache:/cache" \
|
||||||
|
haos-builder make VERSION_DEV=${{ needs.version.outputs.version_dev }} ${{ matrix.board.name }}
|
||||||
|
|
||||||
|
- name: Upload images
|
||||||
|
uses: appleboy/scp-action@master
|
||||||
|
with:
|
||||||
|
host: ${{ secrets.DEV_HOST }}
|
||||||
|
username: ${{ secrets.DEV_USERNAME }}
|
||||||
|
port: ${{ secrets.DEV_PORT }}
|
||||||
|
key: ${{ secrets.DEV_SCP_KEY }}
|
||||||
|
source: "release/*"
|
||||||
|
target: ${{ secrets.DEV_TARGET_PATH }}/${{ needs.version.outputs.version_main }}.${{ needs.version.outputs.version_dev }}/
|
||||||
|
strip_components: 1
|
||||||
|
|
20
.github/workflows/pr-checks.yml
vendored
Normal file
20
.github/workflows/pr-checks.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# Home Assistant Operating System pull-request checks
|
||||||
|
|
||||||
|
name: PR checks
|
||||||
|
|
||||||
|
on: [pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linters:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- name: Check out code
|
||||||
|
uses: actions/checkout@v1
|
||||||
|
- name: Check Dockerfile
|
||||||
|
uses: brpaz/hadolint-action@v1.1.0
|
||||||
|
with:
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
- name: Check shell scripts
|
||||||
|
uses: ludeeus/action-shellcheck@1.0.0
|
||||||
|
with:
|
||||||
|
ignore: "buildroot"
|
15
.github/workflows/release-drafter.yml
vendored
Normal file
15
.github/workflows/release-drafter.yml
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
name: Release Drafter
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- dev
|
||||||
|
- rel-4
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update_release_draft:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: release-drafter/release-drafter@v5
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
169
.github/workflows/release.yml
vendored
Normal file
169
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
# Home Assistant Operating System release build workflow
|
||||||
|
|
||||||
|
name: Release build
|
||||||
|
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [published]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
validate_release:
|
||||||
|
name: Validate release
|
||||||
|
runs-on: [ "ubuntu-20.04" ]
|
||||||
|
outputs:
|
||||||
|
version: ${{ steps.version_check.outputs.version }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Validate version
|
||||||
|
id: version_check
|
||||||
|
run: |
|
||||||
|
major=$(cat ${GITHUB_WORKSPACE}/buildroot-external/meta | grep VERSION_MAJOR | cut -d'=' -f2)
|
||||||
|
build=$(cat ${GITHUB_WORKSPACE}/buildroot-external/meta | grep VERSION_BUILD | cut -d'=' -f2)
|
||||||
|
if [ "${major}.${build}" != "${{ github.event.release.tag_name }}" ]; then
|
||||||
|
echo "Version number in Buildroot metadata is does not match tag (${major}.${build} vs ${{ github.event.release.tag_name }})."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "::set-output name=version::${major}.${build}"
|
||||||
|
|
||||||
|
build:
|
||||||
|
name: Release build for ${{ matrix.board.name }}
|
||||||
|
needs: validate_release
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
board:
|
||||||
|
- {"name": "ova", "output": "ova", "runner": "x86-64-runner"}
|
||||||
|
- {"name": "intel_nuc", "output": "intel-nuc", "runner": "x86-64-runner"}
|
||||||
|
- {"name": "odroid_c2", "output": "odroid-c2", "runner": "aarch64-runner"}
|
||||||
|
- {"name": "odroid_c4", "output": "odroid-c4", "runner": "aarch64-runner"}
|
||||||
|
- {"name": "odroid_n2", "output": "odroid-n2", "runner": "aarch64-runner"}
|
||||||
|
- {"name": "odroid_xu4", "output": "odroid-xu4" , "runner": "aarch64-runner"}
|
||||||
|
- {"name": "rpi", "output": "rpi", "runner": "arm-runner"}
|
||||||
|
- {"name": "rpi0_w", "output": "rpi0-w", "runner": "arm-runner"}
|
||||||
|
- {"name": "rpi2", "output": "rpi2", "runner": "arm-runner"}
|
||||||
|
- {"name": "rpi3", "output": "rpi3", "runner": "arm-runner"}
|
||||||
|
- {"name": "rpi3_64", "output": "rpi3-64", "runner": "aarch64-runner"}
|
||||||
|
- {"name": "rpi4", "output": "rpi4", "runner": "arm-runner"}
|
||||||
|
- {"name": "rpi4_64", "output": "rpi4-64", "runner": "aarch64-runner"}
|
||||||
|
- {"name": "tinker", "output": "tinker", "runner": "arm-runner"}
|
||||||
|
runs-on: ${{ matrix.board.runner }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Build container
|
||||||
|
run: docker build -t haos-builder .
|
||||||
|
|
||||||
|
- name: 'Add release PKI certs'
|
||||||
|
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: Build
|
||||||
|
run: |
|
||||||
|
BUILDER_UID="$(id -u)"
|
||||||
|
BUILDER_GID="$(id -g)"
|
||||||
|
docker run --rm --privileged -v "${GITHUB_WORKSPACE}:/build" \
|
||||||
|
-e BUILDER_UID="${BUILDER_UID}" -e BUILDER_GID="${BUILDER_GID}" \
|
||||||
|
-v "${{ matrix.board.runner }}-build-cache:/cache" \
|
||||||
|
haos-builder make VERSION_DEV="" ${{ matrix.board.name }}
|
||||||
|
|
||||||
|
- name: Upload disk image
|
||||||
|
if: ${{ matrix.board.name != 'ova' }}
|
||||||
|
uses: actions/upload-release-asset@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ github.event.release.upload_url }}
|
||||||
|
asset_path: ${{ github.workspace }}/release/hassos_${{ matrix.board.output }}-${{ needs.validate_release.outputs.version }}.img.xz
|
||||||
|
asset_name: hassos_${{ matrix.board.output }}-${{ needs.validate_release.outputs.version }}.img.xz
|
||||||
|
asset_content_type: application/x-xz
|
||||||
|
|
||||||
|
- name: Upload rauc update
|
||||||
|
uses: actions/upload-release-asset@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ github.event.release.upload_url }}
|
||||||
|
asset_path: ${{ github.workspace }}/release/hassos_${{ matrix.board.output }}-${{ needs.validate_release.outputs.version }}.raucb
|
||||||
|
asset_name: hassos_${{ matrix.board.output }}-${{ needs.validate_release.outputs.version }}.raucb
|
||||||
|
asset_content_type: application/octet-stream
|
||||||
|
|
||||||
|
- name: Upload ova image
|
||||||
|
if: ${{ matrix.board.name == 'ova' }}
|
||||||
|
uses: actions/upload-release-asset@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ github.event.release.upload_url }}
|
||||||
|
asset_path: ${{ github.workspace }}/release/hassos_${{ matrix.board.output }}-${{ needs.validate_release.outputs.version }}.ova
|
||||||
|
asset_name: hassos_${{ matrix.board.output }}-${{ needs.validate_release.outputs.version }}.ova
|
||||||
|
asset_content_type: application/x-tar
|
||||||
|
|
||||||
|
- name: Upload qcow2 image
|
||||||
|
if: ${{ matrix.board.name == 'ova' }}
|
||||||
|
uses: actions/upload-release-asset@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ github.event.release.upload_url }}
|
||||||
|
asset_path: ${{ github.workspace }}/release/hassos_${{ matrix.board.output }}-${{ needs.validate_release.outputs.version }}.qcow2.xz
|
||||||
|
asset_name: hassos_${{ matrix.board.output }}-${{ needs.validate_release.outputs.version }}.qcow2.xz
|
||||||
|
asset_content_type: application/x-xz
|
||||||
|
|
||||||
|
- name: Upload vdi image
|
||||||
|
if: ${{ matrix.board.name == 'ova' }}
|
||||||
|
uses: actions/upload-release-asset@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ github.event.release.upload_url }}
|
||||||
|
asset_path: ${{ github.workspace }}/release/hassos_${{ matrix.board.output }}-${{ needs.validate_release.outputs.version }}.vdi.xz
|
||||||
|
asset_name: hassos_${{ matrix.board.output }}-${{ needs.validate_release.outputs.version }}.vdi.xz
|
||||||
|
asset_content_type: application/x-xz
|
||||||
|
|
||||||
|
- name: Upload vhdx image
|
||||||
|
if: ${{ matrix.board.name == 'ova' }}
|
||||||
|
uses: actions/upload-release-asset@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ github.event.release.upload_url }}
|
||||||
|
asset_path: ${{ github.workspace }}/release/hassos_${{ matrix.board.output }}-${{ needs.validate_release.outputs.version }}.vhdx.xz
|
||||||
|
asset_name: hassos_${{ matrix.board.output }}-${{ needs.validate_release.outputs.version }}.vhdx.xz
|
||||||
|
asset_content_type: application/x-xz
|
||||||
|
|
||||||
|
- name: Upload vmdk image
|
||||||
|
if: ${{ matrix.board.name == 'ova' }}
|
||||||
|
uses: actions/upload-release-asset@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ github.event.release.upload_url }}
|
||||||
|
asset_path: ${{ github.workspace }}/release/hassos_${{ matrix.board.output }}-${{ needs.validate_release.outputs.version }}.vmdk.xz
|
||||||
|
asset_name: hassos_${{ matrix.board.output }}-${{ needs.validate_release.outputs.version }}.vmdk.xz
|
||||||
|
asset_content_type: application/x-xz
|
||||||
|
|
||||||
|
bump_version:
|
||||||
|
name: Bump dev version to ${{ needs.validate_release.outputs.version }}
|
||||||
|
needs: [ build, validate_release ]
|
||||||
|
runs-on: [ "ubuntu-20.04" ]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- 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 dev version
|
||||||
|
uses: home-assistant/actions/helpers/version-push@master
|
||||||
|
with:
|
||||||
|
key: "hassos[]"
|
||||||
|
key-description: "Home Assistant OS"
|
||||||
|
version: ${{ needs.validate_release.outputs.version }}
|
||||||
|
channel: "dev"
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
|||||||
|
.DS_Store
|
||||||
/release
|
/release
|
||||||
*.pem
|
*.pem
|
||||||
|
2
.hadolint.yaml
Normal file
2
.hadolint.yaml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
ignored:
|
||||||
|
- DL3008
|
44
Dockerfile
44
Dockerfile
@@ -1,21 +1,45 @@
|
|||||||
FROM ubuntu:16.04
|
FROM debian:buster
|
||||||
|
|
||||||
|
# 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 | apt-key add - \
|
||||||
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - \
|
&& add-apt-repository "deb https://download.docker.com/linux/debian $(lsb_release -cs) stable" \
|
||||||
&& add-apt-repository "deb https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
|
&& apt-get update && apt-get install -y --no-install-recommends \
|
||||||
&& apt-get update && apt-get install -y docker-ce \
|
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 \
|
bash \
|
||||||
git make g++ file perl bash binutils locales qemu-utils \
|
bc \
|
||||||
|
binutils \
|
||||||
|
build-essential \
|
||||||
|
bzip2 \
|
||||||
|
cpio \
|
||||||
|
file \
|
||||||
|
git \
|
||||||
|
make \
|
||||||
|
ncurses-dev \
|
||||||
|
patch \
|
||||||
|
perl \
|
||||||
|
python \
|
||||||
|
rsync \
|
||||||
|
sudo \
|
||||||
|
unzip \
|
||||||
|
wget \
|
||||||
|
qemu-utils \
|
||||||
|
openssh-client \
|
||||||
|
vim \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Init entry
|
# Init entry
|
||||||
|
13
Documentation/README.md
Normal file
13
Documentation/README.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Developer Documentation
|
||||||
|
|
||||||
|
## Contents
|
||||||
|
|
||||||
|
- [Getting started](./getting_started_development.md) - the place for developers to begin
|
||||||
|
- [Development](./development.md) - more details for developers
|
||||||
|
- [Deployment](./deployment.md) - approach to git branching and releases
|
||||||
|
- [Configuration](./configuration.md) - how users can configure HassOS
|
||||||
|
- [Partition](./partition.md) - partition layout
|
||||||
|
- [Network](./network.md) - approach to networking
|
||||||
|
- [Bluetooth](./bluetooth.md) - approach to bluetooth
|
||||||
|
- [Kernel](./kernel.md) - kernel versions
|
||||||
|
- [Boards](./boards/README.md) - board specific documentation
|
12
Documentation/bluetooth.md
Normal file
12
Documentation/bluetooth.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# Bluetooth
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
If you want to setup Bluetooth on the host, use the `bluetoothctl` utility.
|
||||||
|
|
||||||
|
## Scan devices
|
||||||
|
|
||||||
|
```
|
||||||
|
[bluetooth]# scan on
|
||||||
|
```
|
55
Documentation/boards/README.md
Normal file
55
Documentation/boards/README.md
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
# Boards
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
The following boards/devices are supported:
|
||||||
|
|
||||||
|
- Raspberry Pi
|
||||||
|
- Pi 4 Model B (1 GB, 2 GB and 4 GB model) 32-bit (recommended)
|
||||||
|
- Pi 4 Model B (1 GB, 2 GB and 4 GB model) 64-bit
|
||||||
|
- Pi 3 Model B and B+ 32-bit (recommended)
|
||||||
|
- Pi 3 Model B and B+ 64-bit
|
||||||
|
- Pi 2 (not recommended)
|
||||||
|
- Pi Zero-W (not recommended)
|
||||||
|
- Pi (not recommended)
|
||||||
|
- Hardkernel
|
||||||
|
- Odroid-C2
|
||||||
|
- Odroid-C4 (_experimental_)
|
||||||
|
- Odroid-N2
|
||||||
|
- Odroid-XU4
|
||||||
|
- Intel NUC
|
||||||
|
- Intel NUC5CPYH
|
||||||
|
- Intel NUC6CAYH
|
||||||
|
- Intel NUC10I3FNK2
|
||||||
|
- Gigabyte GB-BPCE-3455
|
||||||
|
- Others recent Intel NUC computers are likely to work too, only those listed above have been tested.
|
||||||
|
- Asus
|
||||||
|
- Tinker Board
|
||||||
|
- 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|
|
||||||
|
|-----|----|------|----|
|
||||||
|
|Pi4B 32-bit |`make rpi4` |[rpi4](../../buildroot-external/configs/rpi4_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||||
|
|Pi4B 64-bit |`make rpi4_64` |[rpi4_64](../../buildroot-external/configs/rpi4_64_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||||
|
|Pi3B 32-bit |`make rpi3` |[rpi3](../../buildroot-external/configs/rpi3_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||||
|
|Pi3B 64-bit |`make rpi3_64` |[rpi3_64](../../buildroot-external/configs/rpi3_64_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||||
|
|Pi2 |`make rpi2` |[rpi2](../../buildroot-external/configs/rpi2_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||||
|
|Pi Zero |`make rpi0_w` |[rpi0_w](../../buildroot-external/configs/rpi0_w_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||||
|
|Pi |`make rpi` |[rpi](../../buildroot-external/configs/rpi_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-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/)|
|
||||||
|
|NUC |`make intel_nuc` |[intel_nuc](../../buildroot-external/configs/intel_nuc_defconfig)|[intel](./intel/)|
|
||||||
|
|Tinker Board|`make tinker` |[tinker](../../buildroot-external/configs/tinker_defconfig)|[asus](./asus/)|
|
||||||
|
|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.
|
12
Documentation/boards/hardkernel/README.md
Normal file
12
Documentation/boards/hardkernel/README.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# ODROID
|
||||||
|
|
||||||
|
## Supported Hardware
|
||||||
|
|
||||||
|
| Device | Release Date | Support | Config |
|
||||||
|
|----------------|---------------|--------------|-----------|
|
||||||
|
| ODROID-XU4 | 2015 | yes | [odroid_xu4](../../../buildroot-external/configs/odroid_xu4_defconfig)|
|
||||||
|
| ODROID-C2 | 2016 | yes | [odroid_c2](../../../buildroot-external/configs/odroid_c2_defconfig) |
|
||||||
|
| ODROID-C4 | 2020 | experimental | [odroid_c4](../../../buildroot-external/configs/odroid_c4_defconfig) |
|
||||||
|
| ODROID-N2 | 2019 | yes | [odroid_n2](../../../buildroot-external/configs/odroid_n2_defconfig) |
|
||||||
|
|
||||||
|
See separate documentation for each board.
|
22
Documentation/boards/hardkernel/odroid-c2.md
Normal file
22
Documentation/boards/hardkernel/odroid-c2.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Odroid-C2
|
||||||
|
|
||||||
|
## 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`
|
||||||
|
|
||||||
|
## USB
|
||||||
|
|
||||||
|
A long-standing kernel bug currently results in some odd behavior. To use the USB, a device must be plugged into one of the USB ports at hard boot. If all devices are removed from the USB ports, the USB will cease to function until a reboot.
|
||||||
|
|
||||||
|
### OTG
|
||||||
|
|
||||||
|
The OTG USB is untested.
|
||||||
|
|
||||||
|
## GPIO
|
||||||
|
|
||||||
|
Refer to [the odroid wiki](https://wiki.odroid.com/odroid-c2/hardware/expansion_connectors).
|
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).
|
14
Documentation/boards/hardkernel/odroid-n2.md
Normal file
14
Documentation/boards/hardkernel/odroid-n2.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# 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).
|
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).
|
56
Documentation/boards/intel/README.md
Normal file
56
Documentation/boards/intel/README.md
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
# Intel NUC
|
||||||
|
|
||||||
|
## Supported Hardware
|
||||||
|
|
||||||
|
This board configuration supports the Intel NUC mini PCs and compatibles. It should work for most recent NUC computers and, because this is a UEFI based image, it should in fact work with for any x86-64 based computer with UEFI. Hardware it has been tested with is listed below.
|
||||||
|
|
||||||
|
## Tested Hardware
|
||||||
|
|
||||||
|
| Device | Release Date | Support | Config |
|
||||||
|
|-----------------------|--------------|---------|-------------|
|
||||||
|
| Intel NUC5CPYH | Q3 2015 | yes | [intel_nuc](../../../buildroot-external/configs/intel_nuc_defconfig) |
|
||||||
|
| Intel NUC6CAYH | Q4 2016 | yes | [intel_nuc](../../../buildroot-external/configs/intel_nuc_defconfig) |
|
||||||
|
| Intel NUC10i3FNK2 | Q4 2019 | yes | [intel_nuc](../../../buildroot-external/configs/intel_nuc_defconfig) |
|
||||||
|
| Gigabyte GB-BPCE-3455 | 2017 | yes* | [intel_nuc](../../../buildroot-external/configs/intel_nuc_defconfig) |
|
||||||
|
|
||||||
|
\* needs 'nomodeset' in cmdline.txt if you want a console
|
||||||
|
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- x86-64 support
|
||||||
|
- UEFI boot
|
||||||
|
- SATA/AHCI 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 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
|
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,5 +0,0 @@
|
|||||||
# Raspberry PI
|
|
||||||
|
|
||||||
## Serial console
|
|
||||||
|
|
||||||
For access to terminal over serial console, add `console=ttyAMA0,115200` to `cmdline.txt` and `enable_uart=1` into `config.txt`.
|
|
56
Documentation/boards/raspberrypi/README.md
Normal file
56
Documentation/boards/raspberrypi/README.md
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
# Raspberry PI
|
||||||
|
|
||||||
|
## Supported Hardware
|
||||||
|
|
||||||
|
| Device | Release Date | Support | Config |
|
||||||
|
|---------------------|---------------|-----------------|--------------------|
|
||||||
|
| Raspberry Pi B/B+/A+|2012/2014/2014 | not recommended | [rpi](../../../buildroot-external/configs/rpi_defconfig) |
|
||||||
|
| Raspberry Pi 2 B |2015 | not recommended | [rpi2](../../../buildroot-external/configs/rpi2_defconfig) |
|
||||||
|
| Raspberry Pi Zero |2015 | not recommended | [rpi](../../../buildroot-external/configs/rpi_defconfig) |
|
||||||
|
| Raspberry Pi Zero W |2017 | not recommended | [rpi0_w](../../../buildroot-external/configs/rpi0_w_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) |
|
||||||
|
|
||||||
|
\*1,2 and 4 GiB versions of the Raspberry Pi 4 B are supported. Support for the 8 GiB version is coming soon is part of #740.
|
||||||
|
|
||||||
|
## 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
|
||||||
|
```
|
||||||
|
|
||||||
|
## 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.
|
||||||
|
|
||||||
|
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,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`
|
|
@@ -2,28 +2,61 @@
|
|||||||
|
|
||||||
## Automatic
|
## Automatic
|
||||||
|
|
||||||
You can format a USB stick with FAT32 and name it with `hassos-config`. The layout could be look like:
|
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` (in all capitals). Alternative you can create a `CONFIG` folder inside the `boot` partition. Use the following directory structure within the USB drive:
|
||||||
|
|
||||||
|
```text
|
||||||
network/
|
network/
|
||||||
modules/
|
modules/
|
||||||
known_hosts
|
modprobe/
|
||||||
|
udev/
|
||||||
|
authorized_keys
|
||||||
|
timesyncd.conf
|
||||||
hassos-xy.raucb
|
hassos-xy.raucb
|
||||||
```
|
```
|
||||||
|
|
||||||
- On `network` folder can hold any kind of NetworkManager connections files.
|
- The `network` folder can contain any kind of NetworkManager connection files. For more information see [Network][network.md].
|
||||||
- The folder `modules` is for modules-load configuration files.
|
- The `modules` folder is for modules-load configuration files.
|
||||||
- `known_hosts` file activate debug SSH access of port `22222`.
|
- The `modprobe` folder is for modules configuration files (/etc/modprobe.d)
|
||||||
- For firmware updates you can but the `hassos-*.raucb` OTA update they should be install.
|
- The `udev` folder is for udev rules files.
|
||||||
|
- 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 `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 and files written to the correct places. You can also trigger this process later over the
|
||||||
|
API/UI or by calling `systemctl restart hassos-config` on the host. *The USB Stick just needs to be inserted to the device during this setup process and can be disconnected afterwards.*
|
||||||
|
|
||||||
## Local
|
## Local
|
||||||
|
|
||||||
### Bootargs
|
### Bootargs
|
||||||
|
|
||||||
You can edit or create a `cmdline.txt` into your boot partition. That will be read from our bootloader.
|
You can edit or create a `cmdline.txt` in your boot partition. That will be read from the bootloader.
|
||||||
|
|
||||||
### Kernel-Module
|
### Kernel-Module
|
||||||
|
|
||||||
The kernel module folder `/etc/modules-load.d` is persistent and you can add your config 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
|
||||||
|
|
||||||
|
The udev rules folder `/etc/udev/rules.d` is persistent and you can add your configuration files there.
|
||||||
|
|
||||||
|
### Network
|
||||||
|
|
||||||
|
You can manual add, edit or remove connections configurations from `/etc/NetworkManager/system-connections`.
|
||||||
|
|
||||||
|
### NTP
|
||||||
|
|
||||||
|
You can manual edit the systemd timesync file on `/etc/systemd/timesyncd.conf`.
|
||||||
|
|
||||||
|
Our default NTP configuration look like:
|
||||||
|
|
||||||
|
```
|
||||||
|
[Time]
|
||||||
|
NTP=time1.google.com time2.google.com time3.google.com
|
||||||
|
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
|
||||||
|
[hassos-release]: https://github.com/home-assistant/hassos/releases/
|
||||||
|
[debug-homeassistant]: https://developers.home-assistant.io/docs/operating-system/debugging
|
||||||
|
@@ -1,23 +1,22 @@
|
|||||||
# Deployment
|
# Deployment
|
||||||
|
|
||||||
We know 3 types of release builds:
|
We provide 3 different types of release builds:
|
||||||
- development (beta/dev)
|
|
||||||
- staging (rc)
|
- development (dev)
|
||||||
|
- staging (beta)
|
||||||
- production (stable)
|
- production (stable)
|
||||||
|
|
||||||
## Versioning
|
## Versioning
|
||||||
|
|
||||||
The format of version is *MAJOR.BUILD*. Everytime we create a new release with same userland, we bump the build number.
|
The format of version is *MAJOR.BUILD*. Everytime we create a new release with same userland, we bump the build number.
|
||||||
The development use here own major number they will be bump for the stable version and the development version go to next major 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
|
||||||
0.x = development
|
|
||||||
1.x = stable
|
|
||||||
2.x = development
|
|
||||||
3.x = stable
|
|
||||||
```
|
|
||||||
|
|
||||||
## 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.
|
||||||
The branch `dev` ist the actual development branch and from there we never make a release. The `master` branch hould the development
|
|
||||||
version from they 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 hole cycle of this release.
|
If we create a new productive/staging 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`.
|
||||||
|
60
Documentation/development.md
Normal file
60
Documentation/development.md
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
# Development
|
||||||
|
|
||||||
|
## Boot system
|
||||||
|
|
||||||
|
`BOOT_SYS`:
|
||||||
|
|
||||||
|
- efi
|
||||||
|
- hybrid
|
||||||
|
- mbr
|
||||||
|
|
||||||
|
HassOS is using GPT. But to use GPT we need own the first 1024 of boot drive. Is that's not possible, you can use MBR for your device. This also work with SPLs.
|
||||||
|
|
||||||
|
Hybrid and SPL use both a hybrid MBR/GPT table but SPL move the GPT header 8 MB for give space to write SPL and boot images before.
|
||||||
|
|
||||||
|
`BOOT_SPL`:
|
||||||
|
|
||||||
|
- true
|
||||||
|
- false
|
||||||
|
|
||||||
|
Enable SPL update handling.
|
||||||
|
|
||||||
|
`BOOTLOADER`:
|
||||||
|
|
||||||
|
- U-Boot
|
||||||
|
- barebox
|
||||||
|
|
||||||
|
We support mainly U-Boot but for UEFI systems we can also use [barebox](https://barebox.org/). In the future, we hope to remove barebox with U-Boot also on UEFI.
|
||||||
|
|
||||||
|
`DISK_SIZE`:
|
||||||
|
|
||||||
|
Default 2. That is the size of end image in GB.
|
||||||
|
|
||||||
|
## Supervisor
|
||||||
|
|
||||||
|
`SUPERVISOR_MACHINE`:
|
||||||
|
|
||||||
|
- intel-nuc
|
||||||
|
- odroid-c2
|
||||||
|
- odroid-c4
|
||||||
|
- odroid-n2
|
||||||
|
- odroid-xu
|
||||||
|
- qemuarm
|
||||||
|
- qemuarm-64
|
||||||
|
- qemux86
|
||||||
|
- qemux86-64
|
||||||
|
- raspberrypi
|
||||||
|
- raspberrypi2
|
||||||
|
- raspberrypi3
|
||||||
|
- raspberrypi4
|
||||||
|
- raspberrypi3-64
|
||||||
|
- raspberrypi4-64
|
||||||
|
- tinker
|
||||||
|
|
||||||
|
`SUPERVISOR_ARCH`:
|
||||||
|
|
||||||
|
- amd64
|
||||||
|
- i386
|
||||||
|
- armhf
|
||||||
|
- armv7
|
||||||
|
- aarch64
|
101
Documentation/getting_started_development.md
Normal file
101
Documentation/getting_started_development.md
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
# Getting started with HassOS development using Docker on GNU/Linux
|
||||||
|
|
||||||
|
First, install `docker-ce` 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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ 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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ 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 home-assistant/operating-system repository checkout (please adapt path names as needed), make sure your intended changes to the source tree are applied (and committed, ideally :)), and execute the `enter.sh` helper script:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ 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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@somehashinhex:/build#
|
||||||
|
root@somehashinhex:/build# make help
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
The HassOS developers provide a `Makefile` that will build HassOS images for a list of targets. For example run the command below to start building the _ova_ variant, and go make a cup of tea. Or fifteen.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[...]
|
||||||
|
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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@fd292c061896:/build# gunzip release/hassos_ova-2.2.qcow2.gz
|
||||||
|
root@fd292c061896:/build# ls -lh release/
|
||||||
|
total 673M
|
||||||
|
-rw-r--r-- 1 root root 337M Oct 10 20:25 hassos_ova-2.2.qcow2
|
||||||
|
```
|
||||||
|
|
||||||
|
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 provides the "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 path names as necessary, for example if you have installed the ovmf firmware image at another location.)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ /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 additional 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 *ha>* shell prompt will yield a root shell in the host OS.
|
19
Documentation/kernel.md
Normal file
19
Documentation/kernel.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
# Kernel Version
|
||||||
|
|
||||||
|
Default Kernel tree: 5.4
|
||||||
|
|
||||||
|
| Board | Version |
|
||||||
|
|-------|---------|
|
||||||
|
| Open Virtual Appliance | 5.4.83 |
|
||||||
|
| Raspberry Pi | 5.4.79 |
|
||||||
|
| Raspberry Pi 0-W | 5.4.79 |
|
||||||
|
| Raspberry Pi 2 | 5.4.79 |
|
||||||
|
| Raspberry Pi 3 | 5.4.79 |
|
||||||
|
| Raspberry Pi 4 | 5.4.79 |
|
||||||
|
| Tinker Board | 5.4.83 |
|
||||||
|
| Odroid-C2 | 5.9.14 |
|
||||||
|
| Odroid-C4 | 5.9.14 |
|
||||||
|
| Odroid-N2 | 5.9.14 |
|
||||||
|
| Odroid-XU4 | 5.9.14 |
|
||||||
|
| Intel NUC | 5.4.83 |
|
155
Documentation/network.md
Normal file
155
Documentation/network.md
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
# Network
|
||||||
|
|
||||||
|
Home Assistant Operating System uses NetworkManager to control the host network.
|
||||||
|
|
||||||
|
## Configure network
|
||||||
|
|
||||||
|
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].
|
||||||
|
|
||||||
|
## Configuration examples
|
||||||
|
|
||||||
|
You can read the [NetworkManager manual][nm-manual] or find many configuration examples across the internet. 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
|
||||||
|
|
||||||
|
A preinstalled connection profile is provided by default:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[connection]
|
||||||
|
id=my-network
|
||||||
|
uuid=f62bf7c2-e565-49ff-bbfc-a4cf791e6add
|
||||||
|
type=802-3-ethernet
|
||||||
|
|
||||||
|
[ipv4]
|
||||||
|
method=auto
|
||||||
|
|
||||||
|
[ipv6]
|
||||||
|
addr-gen-mode=stable-privacy
|
||||||
|
method=auto
|
||||||
|
```
|
||||||
|
|
||||||
|
### Wired connection to the LAN
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[connection]
|
||||||
|
id=my-network
|
||||||
|
uuid=d55162b4-6152-4310-9312-8f4c54d86afa
|
||||||
|
type=802-3-ethernet
|
||||||
|
|
||||||
|
[ipv4]
|
||||||
|
method=auto
|
||||||
|
|
||||||
|
[ipv6]
|
||||||
|
addr-gen-mode=stable-privacy
|
||||||
|
method=auto
|
||||||
|
```
|
||||||
|
|
||||||
|
### Wireless LAN WPA/PSK
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[connection]
|
||||||
|
id=my-network
|
||||||
|
uuid=72111c67-4a5d-4d5c-925e-f8ee26efb3c3
|
||||||
|
type=802-11-wireless
|
||||||
|
|
||||||
|
[802-11-wireless]
|
||||||
|
mode=infrastructure
|
||||||
|
ssid=MY_SSID
|
||||||
|
# Uncomment below if your SSID is not broadcasted
|
||||||
|
#hidden=true
|
||||||
|
|
||||||
|
[802-11-wireless-security]
|
||||||
|
auth-alg=open
|
||||||
|
key-mgmt=wpa-psk
|
||||||
|
psk=MY_WLAN_SECRET_KEY
|
||||||
|
|
||||||
|
[ipv4]
|
||||||
|
method=auto
|
||||||
|
|
||||||
|
[ipv6]
|
||||||
|
addr-gen-mode=stable-privacy
|
||||||
|
method=auto
|
||||||
|
```
|
||||||
|
|
||||||
|
### Static IP
|
||||||
|
|
||||||
|
Replace the following configuration:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[ipv4]
|
||||||
|
method=manual
|
||||||
|
address=192.168.1.111/24;192.168.1.1
|
||||||
|
dns=8.8.8.8;8.8.4.4;
|
||||||
|
```
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
### Reset network
|
||||||
|
|
||||||
|
If you want to reset the network configuration back to the default DHCP settings, use the following commands on the host:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# rm /etc/NetworkManager/system-connections/*
|
||||||
|
# cp /usr/share/system-connections/* /etc/NetworkManager/system-connections/
|
||||||
|
# nmcli con reload
|
||||||
|
```
|
||||||
|
|
||||||
|
### Powersave
|
||||||
|
|
||||||
|
If you have trouble with powersave then apply the following changes:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[wifi]
|
||||||
|
# Values are 0 (use default), 1 (ignore/don't touch), 2 (disable) or 3 (enable).
|
||||||
|
powersave=0
|
||||||
|
```
|
||||||
|
|
||||||
|
## Using `nmcli` to set a static IPv4 address
|
||||||
|
|
||||||
|
Log into the the HassOS base system via a console:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Welcome to Home Assistant
|
||||||
|
homeassistant 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 "HassOS default" connection in use.
|
||||||
|
- `# nmcli con show "HassOS default"` will list all the properties of the connection.
|
||||||
|
|
||||||
|
To start editing the configuration setting for "HassOS default":
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# nmcli con edit "HassOS default"
|
||||||
|
```
|
||||||
|
|
||||||
|
To add your static IP address (select 'yes' for manual method);
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nmcli> set ipv4.addresses 192.168.100.10/24
|
||||||
|
Do you also want to set 'ipv4.method' to 'manual'? [yes]:
|
||||||
|
```
|
||||||
|
|
||||||
|
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.gateway 192.168.100.1
|
||||||
|
```
|
||||||
|
|
||||||
|
`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.
|
||||||
|
|
||||||
|
Doing a `nmcli con reload` does not always work, so restart the virtual machine or the physical system.
|
||||||
|
|
||||||
|
[nm-manual]: https://developer.gnome.org/NetworkManager/stable/NetworkManager.conf.html
|
||||||
|
[configuration-usb]: configuration.md
|
||||||
|
[uuid]: https://www.uuidgenerator.net/
|
63
Documentation/partition.md
Normal file
63
Documentation/partition.md
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
# Partition
|
||||||
|
|
||||||
|
The partition layout is a bit different than the typical setup. We prefer GPT, if possible. With SoCs which don't support GPT, we use a hybrid GPT. For more details about this topic, please refer to the [development](development.md) documentation.
|
||||||
|
|
||||||
|
The system is designed to have as few write operations to the storage media as possible. This means that we only write during the OTA updates and 5-6 times per week on the overlay partition. The data partition receives the main I/O operations and for this reason is ideal for placing on a different drive.
|
||||||
|
|
||||||
|
A visual representation looks like this:
|
||||||
|
|
||||||
|
```text
|
||||||
|
-------------------------
|
||||||
|
| Bootloader |
|
||||||
|
-------------------------
|
||||||
|
| Kernel A |
|
||||||
|
-------------------------
|
||||||
|
| System A |
|
||||||
|
| |
|
||||||
|
-------------------------
|
||||||
|
| Kernel B |
|
||||||
|
-------------------------
|
||||||
|
| System B |
|
||||||
|
| |
|
||||||
|
-------------------------
|
||||||
|
| Bootstate |
|
||||||
|
-------------------------
|
||||||
|
| Overlay |
|
||||||
|
| |
|
||||||
|
...
|
||||||
|
|
||||||
|
-------------------------
|
||||||
|
| Data |
|
||||||
|
| |
|
||||||
|
-------------------------
|
||||||
|
```
|
||||||
|
|
||||||
|
Sometime the bootloader part can look different because there can be firmware or SPLs for boot the CPU on the SoC.
|
||||||
|
|
||||||
|
## Data
|
||||||
|
|
||||||
|
The data partition is the only partition with real I/O. It will be expanded automatically at boot to the full size of the disk.
|
||||||
|
|
||||||
|
|
||||||
|
## Using datactl to move the data partition.
|
||||||
|
|
||||||
|
In a Home Assistant OS installation, the data is stored on the `/mnt/data` partition of the SD card. This is the only read+write partition on the SD drive. Using the `datactl` move command, this partition can be moved off of the SD card onto an externally connected drive, leaving the rest of the read-only system on the SD.
|
||||||
|
|
||||||
|
The storage capacity of the external drive must be larger than the storage capacity of the existing SD card.
|
||||||
|
|
||||||
|
The command needs to be run from the host console by either connecting a keyboard and monitor or making use of the [debug ssh access](https://developers.home-assistant.io/docs/operating-system/debugging/) over port 22222. The command will not work from within an SSH add-on container.
|
||||||
|
|
||||||
|
Log in as `root` to get to the Home Assistant CLI and then enter `login` to continue to the host.
|
||||||
|
|
||||||
|
Confirm your USB SSD/HD is connected and recognized using `fdisk -l`.
|
||||||
|
|
||||||
|
With the drive connected, use the following command (replacing sdx with your drive, without a partition number):
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ datactl move /dev/sdx
|
||||||
|
```
|
||||||
|
|
||||||
|
Enter "yes" to confirm the operation. This will prepare the disk, however, the
|
||||||
|
actual move will be running on next reboot. Once complete, the external drive
|
||||||
|
will contain the data and will need to be plugged in to successfully boot Home
|
||||||
|
Assistant OS.
|
52
Makefile
Normal file
52
Makefile
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
RELEASE_DIR = /build/release
|
||||||
|
|
||||||
|
BUILDROOT=/build/buildroot
|
||||||
|
BUILDROOT_EXTERNAL=/build/buildroot-external
|
||||||
|
DEFCONFIG_DIR = $(BUILDROOT_EXTERNAL)/configs
|
||||||
|
VERSION_DATE := $(shell date --utc +'%Y%m%d')
|
||||||
|
VERSION_DEV := "dev$(VERSION_DATE)"
|
||||||
|
|
||||||
|
TARGETS := $(notdir $(patsubst %_defconfig,%,$(wildcard $(DEFCONFIG_DIR)/*_defconfig)))
|
||||||
|
TARGETS_CONFIG := $(notdir $(patsubst %_defconfig,%-config,$(wildcard $(DEFCONFIG_DIR)/*_defconfig)))
|
||||||
|
|
||||||
|
# Set O variable if not already done on the command line
|
||||||
|
ifneq ("$(origin O)", "command line")
|
||||||
|
O := $(BUILDROOT)/output
|
||||||
|
else
|
||||||
|
override O := $(BUILDROOT)/$(O)
|
||||||
|
endif
|
||||||
|
|
||||||
|
.NOTPARALLEL: $(TARGETS) $(TARGETS_CONFIG) all
|
||||||
|
|
||||||
|
.PHONY: $(TARGETS) $(TARGETS_CONFIG) all clean help
|
||||||
|
|
||||||
|
all: $(TARGETS)
|
||||||
|
|
||||||
|
$(RELEASE_DIR):
|
||||||
|
mkdir -p $(RELEASE_DIR)
|
||||||
|
|
||||||
|
$(TARGETS_CONFIG): %-config:
|
||||||
|
@echo "config $*"
|
||||||
|
$(MAKE) -C $(BUILDROOT) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL) "$*_defconfig"
|
||||||
|
|
||||||
|
$(TARGETS): %: $(RELEASE_DIR) %-config
|
||||||
|
@echo "build $@"
|
||||||
|
$(MAKE) -C $(BUILDROOT) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL) VERSION_DEV=$(VERSION_DEV)
|
||||||
|
cp -f $(O)/images/hassos_* $(RELEASE_DIR)/
|
||||||
|
|
||||||
|
# Do not clean when building for one target
|
||||||
|
ifneq ($(words $(filter $(TARGETS),$(MAKECMDGOALS))), 1)
|
||||||
|
@echo "clean $@"
|
||||||
|
$(MAKE) -C $(BUILDROOT) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL) clean
|
||||||
|
endif
|
||||||
|
@echo "finished $@"
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(MAKE) -C $(BUILDROOT) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL) clean
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo "Supported targets: $(TARGETS)"
|
||||||
|
@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."
|
68
README.md
68
README.md
@@ -1,14 +1,58 @@
|
|||||||
# 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 an operating system optimized for hosting [Home Assistant](https://www.home-assistant.io) and its [Add-ons](https://www.home-assistant.io/addons/).
|
||||||
|
|
||||||
- Linux kernel 4.14 (LT)
|
Home Assistant Operating System uses Docker as Container engine. It by default 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 for running Home Assistant, especially on single board compute (SBC) devices like the Pi, ODROID, NUC and Tinker Board (see supported hardware below).
|
||||||
- Barebox as bootloader on EFI
|
|
||||||
- U-Boot as bootloader on IoT
|
## Features
|
||||||
- RAUC for OTA updates
|
|
||||||
- SquashFS LZ4 as filesystem
|
- Lightweight and memory-efficient
|
||||||
- Docker 18.03.1
|
- Minimized I/O
|
||||||
- AppArmor protected
|
- Over The Air (OTA) updates
|
||||||
- ZRAM LZ4 for /tmp, /var, swap
|
- Offline updates
|
||||||
- Run every supervisor
|
- Modular using Docker
|
||||||
|
|
||||||
|
## Supported hardware
|
||||||
|
|
||||||
|
- Raspberry Pi
|
||||||
|
- Hardkernel ODROID
|
||||||
|
- Intel NUC
|
||||||
|
- Asus Tinker Board
|
||||||
|
- 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...
|
||||||
|
|
||||||
|
## HassOS components
|
||||||
|
|
||||||
|
- **Bootloader:**
|
||||||
|
- [Barebox](https://barebox.org/) for devices that support EFI
|
||||||
|
- [U-Boot](https://www.denx.de/wiki/U-Boot) for devices that don't support EFI
|
||||||
|
- **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
|
||||||
|
|
||||||
|
If you don't have experience with these, embedded systems, buildroot or the build process for Linux distributions, then please read up on these topics. The rest of the documentation in this project is for developers and assumes you have experience with embedded systems or a strong understanding of the internal workings of operating systems.
|
||||||
|
|
||||||
|
## Developer Documentation
|
||||||
|
|
||||||
|
All developer documentation is in the [Documentation](./Documentation) directory.
|
||||||
|
|
||||||
|
### 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 [os-builds.home-assistant.io](https://os-builds.home-assistant.io/).
|
||||||
|
@@ -1,3 +1,7 @@
|
|||||||
source "$BR2_EXTERNAL_HASSOS_PATH/package/hassos/Config.in"
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/hassio/Config.in"
|
||||||
source "$BR2_EXTERNAL_HASSOS_PATH/package/libapparmor/Config.in"
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/bluetooth-bcm43xx/Config.in"
|
||||||
source "$BR2_EXTERNAL_HASSOS_PATH/package/apparmor/Config.in"
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/bluetooth-rtl8723/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/hardkernel-boot/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/qemu-guest-agent/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/intel-e1000e/Config.in"
|
||||||
|
source "$BR2_EXTERNAL_HASSOS_PATH/package/rpi-eeprom/Config.in"
|
||||||
|
25
buildroot-external/board/asus/hassos-hook.sh
Executable file
25
buildroot-external/board/asus/hassos-hook.sh
Executable file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# shellcheck disable=SC2155
|
||||||
|
|
||||||
|
function hassos_pre_image() {
|
||||||
|
local BOOT_DATA="$(path_boot_dir)"
|
||||||
|
local SPL_IMG="$(path_spl_img)"
|
||||||
|
|
||||||
|
cp -t "${BOOT_DATA}" \
|
||||||
|
"${BINARIES_DIR}/boot.scr" \
|
||||||
|
"${BINARIES_DIR}/rk3288-tinker.dtb" \
|
||||||
|
"${BINARIES_DIR}/rk3288-tinker-s.dtb"
|
||||||
|
|
||||||
|
echo "console=tty1" > "${BOOT_DATA}/cmdline.txt"
|
||||||
|
|
||||||
|
# SPL
|
||||||
|
create_spl_image
|
||||||
|
|
||||||
|
dd if="${BINARIES_DIR}/idbloader.img" of="${SPL_IMG}" conv=notrunc bs=512 seek=64
|
||||||
|
dd if="${BINARIES_DIR}/u-boot-dtb.img" of="${SPL_IMG}" conv=notrunc bs=512 seek=8192
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function hassos_post_image() {
|
||||||
|
convert_disk_image_xz
|
||||||
|
}
|
6405
buildroot-external/board/asus/tinker/kernel.config
Normal file
6405
buildroot-external/board/asus/tinker/kernel.config
Normal file
File diff suppressed because it is too large
Load Diff
10
buildroot-external/board/asus/tinker/meta
Normal file
10
buildroot-external/board/asus/tinker/meta
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
BOARD_ID=tinker
|
||||||
|
BOARD_NAME="Asus TinkerBoard"
|
||||||
|
CHASSIS=embedded
|
||||||
|
BOOTLOADER=uboot
|
||||||
|
KERNEL_FILE=zImage
|
||||||
|
BOOT_SYS=hyprid
|
||||||
|
BOOT_SPL=true
|
||||||
|
BOOT_ENV_SIZE=0x8000
|
||||||
|
SUPERVISOR_MACHINE=tinker
|
||||||
|
SUPERVISOR_ARCH=armv7
|
5
buildroot-external/board/asus/tinker/patches/README.md
Normal file
5
buildroot-external/board/asus/tinker/patches/README.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
## Kernel
|
||||||
|
https://github.com/armbian/build/tree/master/patch/kernel/rockchip-next
|
||||||
|
|
||||||
|
## u-boot
|
||||||
|
https://github.com/armbian/build/tree/master/patch/u-boot/u-boot-rockchip/board_tinkerboard
|
@@ -0,0 +1,64 @@
|
|||||||
|
From 2ae3821fd824560ef2db3c87cfbec985177911f6 Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <2ae3821fd824560ef2db3c87cfbec985177911f6.1599249626.git.stefan@agner.ch>
|
||||||
|
From: "Miouyouyou (Myy)" <myy@miouyouyou.fr>
|
||||||
|
Date: Mon, 5 Nov 2018 22:03:26 +0100
|
||||||
|
Subject: [PATCH 1/2] ARM: DTS: rk3288-tinker: Setup the Bluetooth UART pins
|
||||||
|
|
||||||
|
The most essential being the RTS pin, which is clearly needed to
|
||||||
|
upload the initial configuration into the Realtek Bluetooth
|
||||||
|
chip, and make the Bluetooth chip work.
|
||||||
|
|
||||||
|
Now, the Bluetooth chip also needs 3 other GPIOS to be enabled.
|
||||||
|
I'll see how I do that through the DTS file in a near future.
|
||||||
|
|
||||||
|
The 3 GPIOS being :
|
||||||
|
Bluetooth Reset : <&gpio4 29 GPIO_ACTIVE_HIGH>
|
||||||
|
Bluetooth Wake : <&gpio4 26 GPIO_ACTIVE_HIGH>
|
||||||
|
Bluetooth Wake_Host_IRQ : <&gpio4 31 GPIO_ACTIVE_HIGH>
|
||||||
|
|
||||||
|
These are currently setup manually, through scripts. But it seems that
|
||||||
|
GPIO handling through /sys entries might not be possible in the long
|
||||||
|
term, the replacement being libgpio.
|
||||||
|
Anyway, if you're interesting in enabling the Bluetooth GPIO by hand,
|
||||||
|
here are the commands :
|
||||||
|
|
||||||
|
cd /sys/class/gpio &&
|
||||||
|
echo 146 > export &&
|
||||||
|
echo 149 > export &&
|
||||||
|
echo 151 > export &&
|
||||||
|
echo high > gpio146/direction &&
|
||||||
|
echo high > gpio149/direction &&
|
||||||
|
echo high > gpio151/direction
|
||||||
|
|
||||||
|
Resetting the chip is done like this :
|
||||||
|
|
||||||
|
echo "Resetting the Bluetooth chip"
|
||||||
|
cd /sys/class/gpio/gpio149 &&
|
||||||
|
echo 0 > value &&
|
||||||
|
sleep 1 &&
|
||||||
|
echo 1 > value &&
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
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/rk3288-tinker.dtsi | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/rk3288-tinker.dtsi b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
index acfaa12ec239..284e7982925d 100644
|
||||||
|
--- a/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
@@ -492,6 +492,8 @@ &tsadc {
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart0 {
|
||||||
|
+ pinctrl-names = "default";
|
||||||
|
+ pinctrl-0 = <&uart0_xfer>, <&uart0_cts>, <&uart0_rts>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
--
|
||||||
|
2.28.0
|
||||||
|
|
@@ -0,0 +1,55 @@
|
|||||||
|
From fc25c993bf2feb6e66d55bf03eb725ec688e47eb Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <fc25c993bf2feb6e66d55bf03eb725ec688e47eb.1599250914.git.stefan@agner.ch>
|
||||||
|
In-Reply-To: <2ae3821fd824560ef2db3c87cfbec985177911f6.1599250914.git.stefan@agner.ch>
|
||||||
|
References: <2ae3821fd824560ef2db3c87cfbec985177911f6.1599250914.git.stefan@agner.ch>
|
||||||
|
From: "Miouyouyou (Myy)" <myy@miouyouyou.fr>
|
||||||
|
Date: Mon, 5 Nov 2018 22:15:14 +0100
|
||||||
|
Subject: [PATCH 2/3] 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/rk3288-tinker.dtsi | 19 +++++++++++++++++++
|
||||||
|
1 file changed, 19 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/rk3288-tinker.dtsi b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
index 284e7982925d..d6cc66ab5bb1 100644
|
||||||
|
--- a/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
@@ -485,6 +485,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 */
|
||||||
|
--
|
||||||
|
2.28.0
|
||||||
|
|
@@ -0,0 +1,41 @@
|
|||||||
|
From 3a9d71847ae869ffdb2b0818aa86a36d57d96331 Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <3a9d71847ae869ffdb2b0818aa86a36d57d96331.1599250914.git.stefan@agner.ch>
|
||||||
|
In-Reply-To: <2ae3821fd824560ef2db3c87cfbec985177911f6.1599250914.git.stefan@agner.ch>
|
||||||
|
References: <2ae3821fd824560ef2db3c87cfbec985177911f6.1599250914.git.stefan@agner.ch>
|
||||||
|
From: Stefan Agner <stefan@agner.ch>
|
||||||
|
Date: Fri, 4 Sep 2020 21:57:55 +0200
|
||||||
|
Subject: [PATCH 3/3] 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/rk3288-tinker.dtsi | 8 ++++++++
|
||||||
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/rk3288-tinker.dtsi b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
index d6cc66ab5bb1..7af5818ac77c 100644
|
||||||
|
--- a/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
@@ -344,10 +344,18 @@ regulator-state-mem {
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
+&i2c1 {
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
&i2c2 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
+&i2c4 {
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
&i2c5 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
--
|
||||||
|
2.28.0
|
||||||
|
|
@@ -0,0 +1,31 @@
|
|||||||
|
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
|
||||||
|
|
@@ -0,0 +1,27 @@
|
|||||||
|
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
|
||||||
|
|
@@ -0,0 +1,28 @@
|
|||||||
|
From c5af6798c9a411b3f550f463182a4b4904a21ec2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Myy Miouyouyou <myy@miouyouyou.fr>
|
||||||
|
Date: Thu, 19 Oct 2017 21:51:14 +0200
|
||||||
|
Subject: [PATCH 16/28] ARM: DTSI: rk3288.dtsi: Adding missing VOPB registers
|
||||||
|
|
||||||
|
Imported from @wzyy2 patches... I think...
|
||||||
|
|
||||||
|
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 455446f6..125f8835 100644
|
||||||
|
--- a/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
@@ -987,7 +987,7 @@
|
||||||
|
|
||||||
|
vopb: vop@ff930000 {
|
||||||
|
compatible = "rockchip,rk3288-vop";
|
||||||
|
- reg = <0x0 0xff930000 0x0 0x19c>;
|
||||||
|
+ reg = <0x0 0xff930000 0x0 0x19c>, <0x0 0xff931000 0x0 0x1000>;
|
||||||
|
interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
clocks = <&cru ACLK_VOP0>, <&cru DCLK_VOP0>, <&cru HCLK_VOP0>;
|
||||||
|
clock-names = "aclk_vop", "dclk_vop", "hclk_vop";
|
||||||
|
--
|
||||||
|
2.11.0
|
||||||
|
|
@@ -0,0 +1,31 @@
|
|||||||
|
From a0602b2724893de7ac9b4190a7a6bb66458da2d5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Myy Miouyouyou <myy@miouyouyou.fr>
|
||||||
|
Date: Thu, 19 Oct 2017 21:54:37 +0200
|
||||||
|
Subject: [PATCH 17/28] ARM: DTSI: rk3288.dtsi: Fixed the SPDIF node address
|
||||||
|
|
||||||
|
Now, the typo is only in the name of the node itself, not in the
|
||||||
|
actual registers addresses definition.
|
||||||
|
|
||||||
|
Still, this ought to be fixed one day !
|
||||||
|
|
||||||
|
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 125f8835..e5d3d3c9 100644
|
||||||
|
--- a/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
@@ -922,7 +922,7 @@
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
- spdif: sound@ff88b0000 {
|
||||||
|
+ spdif: sound@ff8b0000 {
|
||||||
|
compatible = "rockchip,rk3288-spdif", "rockchip,rk3066-spdif";
|
||||||
|
reg = <0x0 0xff8b0000 0x0 0x10000>;
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
--
|
||||||
|
2.11.0
|
||||||
|
|
@@ -0,0 +1,28 @@
|
|||||||
|
From ebc29962ac27264772a4227f5abd6900cb72fa79 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/rk3288-tinker.dtsi | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/rk3288-tinker.dtsi b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
index aa107ee41..3da1c830f 100644
|
||||||
|
--- a/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
@@ -164,7 +164,7 @@
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <750000>;
|
||||||
|
- regulator-max-microvolt = <1350000>;
|
||||||
|
+ regulator-max-microvolt = <1450000>;
|
||||||
|
regulator-name = "vdd_arm";
|
||||||
|
regulator-ramp-delay = <6000>;
|
||||||
|
regulator-state-mem {
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@@ -0,0 +1,31 @@
|
|||||||
|
From 3dacea70a8e434008f5b1f119a7f7da9aebc772c Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Miouyouyou (Myy)" <myy@miouyouyou.fr>
|
||||||
|
Date: Mon, 5 Nov 2018 20:18:58 +0100
|
||||||
|
Subject: [PATCH] ARM: DTSI: rk3288-tinker: Setting up the SD regulators
|
||||||
|
|
||||||
|
Some are needed and some are not. Playing with these parameters is
|
||||||
|
required to get reboot working on these boards.
|
||||||
|
|
||||||
|
I still can't believe that these boards can't soft reset correctly.
|
||||||
|
|
||||||
|
Signed-off-by: Miouyouyou (Myy) <myy@miouyouyou.fr>
|
||||||
|
---
|
||||||
|
arch/arm/boot/dts/rk3288-tinker.dtsi | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/rk3288-tinker.dtsi b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
index 3da1c830f..dd1090728 100644
|
||||||
|
--- a/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
@@ -254,7 +254,8 @@
|
||||||
|
};
|
||||||
|
|
||||||
|
vccio_sd: LDO_REG5 {
|
||||||
|
+ regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
regulator-name = "vccio_sd";
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@@ -0,0 +1,33 @@
|
|||||||
|
From 487db7cefc9861fdaf30579c378a98f0360690ae Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Miouyouyou (Myy)" <myy@miouyouyou.fr>
|
||||||
|
Date: Mon, 5 Nov 2018 20:27:14 +0100
|
||||||
|
Subject: [PATCH] ARM: DTSI: rk3288-tinker: Defining SDMMC properties
|
||||||
|
|
||||||
|
I never knew if these properties were required to fix the dreaded
|
||||||
|
reboot issue...
|
||||||
|
|
||||||
|
Signed-off-by: Miouyouyou (Myy) <myy@miouyouyou.fr>
|
||||||
|
---
|
||||||
|
arch/arm/boot/dts/rk3288-tinker.dtsi | 5 +++++
|
||||||
|
1 file changed, 5 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/rk3288-tinker.dtsi b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
index dd1090728..8edd6f681 100644
|
||||||
|
--- a/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
@@ -436,7 +436,12 @@
|
||||||
|
disable-wp; /* wp not hooked up */
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
|
||||||
|
+ sd-uhs-sdr12;
|
||||||
|
+ sd-uhs-sdr25;
|
||||||
|
+ sd-uhs-sdr50;
|
||||||
|
+ sd-uhs-sdr104;
|
||||||
|
status = "okay";
|
||||||
|
+ supports-sd;
|
||||||
|
vmmc-supply = <&vcc33_sd>;
|
||||||
|
vqmmc-supply = <&vccio_sd>;
|
||||||
|
};
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@@ -0,0 +1,48 @@
|
|||||||
|
From d3d3fe433d9038dcd1a98f4d6711c0777ed06703 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Miouyouyou (Myy)" <myy@miouyouyou.fr>
|
||||||
|
Date: Mon, 25 Jun 2018 17:08:32 +0200
|
||||||
|
Subject: [PATCH 26/26] ARM: DTSI: rk3288: Set the VPU MMU power domains
|
||||||
|
|
||||||
|
Without that, the auto-activation of the VPU hardware IOMMU fails
|
||||||
|
when enabling the hardware, before the "probe" phase of its device
|
||||||
|
driver.
|
||||||
|
|
||||||
|
Basically, when loading a "of_platform" device driver targeting
|
||||||
|
the VPU devices, you'll get these errors without this patch :
|
||||||
|
|
||||||
|
[12753.996950] rk_iommu ff9c0440.iommu: Error during raw reset. MMU_DTE_ADDR is not functioning
|
||||||
|
[12754.007483] rk_iommu ff9c0440.iommu: Disable stall request timed out, status: 0xffffffff
|
||||||
|
[12754.026652] rk_iommu ff9c0440.iommu: Disable paging request timed out, status: 0xffffffff
|
||||||
|
[12754.045975] rk_iommu ff9c0440.iommu: Disable stall request timed out, status: 0xffffffff
|
||||||
|
|
||||||
|
When using this patch, the errors disappear.
|
||||||
|
|
||||||
|
This seems to be due to the IOMMU device sharing the same power domain
|
||||||
|
than the device.
|
||||||
|
When loading an "of_platform" driver, the kernel logic seems to try
|
||||||
|
enabling the associated IOMMU device before letting the driver handles
|
||||||
|
anything with the actual VPU hardware.
|
||||||
|
It appears that setting the power domain of the VPU IOMMU nodes let the
|
||||||
|
IOMMU driver enable the IOMMU shared power domain, and make the IOMMU
|
||||||
|
device useable.
|
||||||
|
|
||||||
|
Signed-off-by: Miouyouyou (Myy) <myy@miouyouyou.fr>
|
||||||
|
---
|
||||||
|
arch/arm/boot/dts/rk3288.dtsi | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
index 45ec4e89..46e1b8e2 100644
|
||||||
|
--- a/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
@@ -1262,6 +1263,7 @@
|
||||||
|
interrupt-names = "hevc_mmu";
|
||||||
|
clocks = <&cru ACLK_HEVC>, <&cru HCLK_HEVC>;
|
||||||
|
clock-names = "aclk", "iface";
|
||||||
|
+ power-domains = <&power RK3288_PD_HEVC>;
|
||||||
|
#iommu-cells = <0>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@@ -0,0 +1,46 @@
|
|||||||
|
From 4ab4f88649468dada5d609e1a6f8a71a7d5610c9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Miouyouyou (Myy)" <myy@miouyouyou.fr>
|
||||||
|
Date: Sat, 29 Sep 2018 02:48:59 +0200
|
||||||
|
Subject: [PATCH 4/6] dts: rk3288: support for dedicating npll to a vop
|
||||||
|
|
||||||
|
This patch is taken from Urja Rannikko ( @urjaman ) patchset here :
|
||||||
|
https://github.com/urjaman/arch-c201/blob/master/linux-c201/0020-RK3288-HDMI-clock-hacks-combined.patch
|
||||||
|
https://www.spinics.net/lists/arm-kernel/msg673156.html
|
||||||
|
|
||||||
|
The original description was :
|
||||||
|
|
||||||
|
Add the VOP DCLKs to the assigned clocks list so their
|
||||||
|
parents can be set in the dts include files for
|
||||||
|
devices that do dedicate npll to a vop.
|
||||||
|
|
||||||
|
https://www.spinics.net/lists/arm-kernel/msg673162.html
|
||||||
|
|
||||||
|
Signed-off-by: Miouyouyou (Myy) <myy@miouyouyou.fr>
|
||||||
|
---
|
||||||
|
arch/arm/boot/dts/rk3288.dtsi | 6 ++++--
|
||||||
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
index d23c7fa55..ff04aab5e 100644
|
||||||
|
--- a/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
@@ -867,12 +867,14 @@
|
||||||
|
rockchip,grf = <&grf>;
|
||||||
|
#clock-cells = <1>;
|
||||||
|
#reset-cells = <1>;
|
||||||
|
- assigned-clocks = <&cru PLL_GPLL>, <&cru PLL_CPLL>,
|
||||||
|
+ assigned-clocks = <&cru DCLK_VOP0>, <&cru DCLK_VOP1>,
|
||||||
|
+ <&cru PLL_GPLL>, <&cru PLL_CPLL>,
|
||||||
|
<&cru PLL_NPLL>, <&cru ACLK_CPU>,
|
||||||
|
<&cru HCLK_CPU>, <&cru PCLK_CPU>,
|
||||||
|
<&cru ACLK_PERI>, <&cru HCLK_PERI>,
|
||||||
|
<&cru PCLK_PERI>;
|
||||||
|
- assigned-clock-rates = <594000000>, <400000000>,
|
||||||
|
+ assigned-clock-rates = <0>, <0>,
|
||||||
|
+ <594000000>, <400000000>,
|
||||||
|
<500000000>, <300000000>,
|
||||||
|
<150000000>, <75000000>,
|
||||||
|
<300000000>, <150000000>,
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@@ -0,0 +1,50 @@
|
|||||||
|
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
|
||||||
|
|
@@ -0,0 +1,116 @@
|
|||||||
|
From 302cd9b8a9f1f8a7735fabea3b9a7645dc40f9cc 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 a3f1c2b30..7eac1f221 100644
|
||||||
|
--- a/drivers/mmc/host/dw_mmc-rockchip.c
|
||||||
|
+++ b/drivers/mmc/host/dw_mmc-rockchip.c
|
||||||
|
@@ -16,6 +16,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"
|
||||||
|
|
||||||
|
@@ -334,6 +339,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;
|
||||||
|
@@ -361,6 +426,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;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.14.1
|
||||||
|
|
@@ -0,0 +1,74 @@
|
|||||||
|
From e7b60b10cf3fd2f4374ab26c314383121c27fe82 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Miouyouyou (Myy)" <myy@miouyouyou.fr>
|
||||||
|
Date: Tue, 22 Jan 2019 21:24:37 +0100
|
||||||
|
Subject: [PATCH] soc: rockchip: power-domain: export idle request for RKMPP
|
||||||
|
|
||||||
|
This function, and the added header, are required by the RKMPP driver,
|
||||||
|
provided by Randy Li. However, I can't attest that the provided code
|
||||||
|
is correct.
|
||||||
|
|
||||||
|
Signed-off-by: Miouyouyou (Myy) <myy@miouyouyou.fr>
|
||||||
|
---
|
||||||
|
drivers/soc/rockchip/pm_domains.c | 23 +++++++++++++++++++++++
|
||||||
|
include/soc/rockchip/pm_domains.h | 15 +++++++++++++++
|
||||||
|
2 files changed, 38 insertions(+)
|
||||||
|
create mode 100644 include/soc/rockchip/pm_domains.h
|
||||||
|
|
||||||
|
diff --git a/drivers/soc/rockchip/pm_domains.c b/drivers/soc/rockchip/pm_domains.c
|
||||||
|
index 847c7c482..3e2e252cb 100644
|
||||||
|
--- a/drivers/soc/rockchip/pm_domains.c
|
||||||
|
+++ b/drivers/soc/rockchip/pm_domains.c
|
||||||
|
@@ -199,6 +199,29 @@ static int rockchip_pmu_set_idle_request(struct rockchip_pm_domain *pd,
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+int rockchip_pmu_idle_request(struct device *dev, bool idle)
|
||||||
|
+{
|
||||||
|
+ struct generic_pm_domain *genpd;
|
||||||
|
+ struct rockchip_pm_domain *pd;
|
||||||
|
+ int ret;
|
||||||
|
+
|
||||||
|
+ if (IS_ERR_OR_NULL(dev))
|
||||||
|
+ return -EINVAL;
|
||||||
|
+
|
||||||
|
+ if (IS_ERR_OR_NULL(dev->pm_domain))
|
||||||
|
+ return -EINVAL;
|
||||||
|
+
|
||||||
|
+ genpd = pd_to_genpd(dev->pm_domain);
|
||||||
|
+ pd = to_rockchip_pd(genpd);
|
||||||
|
+
|
||||||
|
+ mutex_lock(&pd->pmu->mutex);
|
||||||
|
+ ret = rockchip_pmu_set_idle_request(pd, idle);
|
||||||
|
+ mutex_unlock(&pd->pmu->mutex);
|
||||||
|
+
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+EXPORT_SYMBOL(rockchip_pmu_idle_request);
|
||||||
|
+
|
||||||
|
static int rockchip_pmu_save_qos(struct rockchip_pm_domain *pd)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
diff --git a/include/soc/rockchip/pm_domains.h b/include/soc/rockchip/pm_domains.h
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000..720b3314e
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/include/soc/rockchip/pm_domains.h
|
||||||
|
@@ -0,0 +1,15 @@
|
||||||
|
+/*
|
||||||
|
+ * pm_domain.h - Definitions and headers related to device power domains.
|
||||||
|
+ *
|
||||||
|
+ * Copyright (C) 2017 Randy Li <ayaka@soulik.info>.
|
||||||
|
+ *
|
||||||
|
+ * This file is released under the GPLv2.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#ifndef _LINUX_ROCKCHIP_PM_H
|
||||||
|
+#define _LINUX_ROCKCHIP_PM_H
|
||||||
|
+#include <linux/device.h>
|
||||||
|
+
|
||||||
|
+int rockchip_pmu_idle_request(struct device *dev, bool idle);
|
||||||
|
+
|
||||||
|
+#endif /* _LINUX_ROCKCHIP_PM_H */
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@@ -0,0 +1,101 @@
|
|||||||
|
FROM: Solidhal <hal@halemmerich.com>
|
||||||
|
|
||||||
|
This patch reverses commit 2b721118b7821107757eb1d37af4b60e877b27e7, as can bee seen here:
|
||||||
|
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2b721118b7821107757eb1d37af4b60e877b27e7
|
||||||
|
|
||||||
|
This commit caused issues on veyron speedy with ath9k and dwc2 drivers. Any ath9k device (ar9271)
|
||||||
|
would intermittently work, most of the time ending in errors as can bee seen here:
|
||||||
|
https://github.com/SolidHal/PrawnOS/issues/38
|
||||||
|
This commit fixes that issue.
|
||||||
|
This is only a temporary work around while a permenant fix is found, as this commit seems to only cause issues
|
||||||
|
with dwc2
|
||||||
|
|
||||||
|
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
|
||||||
|
--- b/drivers/net/wireless/ath/ath9k/hif_usb.c
|
||||||
|
+++ a/drivers/net/wireless/ath/ath9k/hif_usb.c
|
||||||
|
@@ -115,10 +115,10 @@
|
||||||
|
cmd->skb = skb;
|
||||||
|
cmd->hif_dev = hif_dev;
|
||||||
|
|
||||||
|
+ usb_fill_bulk_urb(urb, hif_dev->udev,
|
||||||
|
+ usb_sndbulkpipe(hif_dev->udev, USB_REG_OUT_PIPE),
|
||||||
|
- usb_fill_int_urb(urb, hif_dev->udev,
|
||||||
|
- usb_sndintpipe(hif_dev->udev, USB_REG_OUT_PIPE),
|
||||||
|
skb->data, skb->len,
|
||||||
|
+ hif_usb_regout_cb, cmd);
|
||||||
|
- hif_usb_regout_cb, cmd, 1);
|
||||||
|
|
||||||
|
usb_anchor_urb(urb, &hif_dev->regout_submitted);
|
||||||
|
ret = usb_submit_urb(urb, GFP_KERNEL);
|
||||||
|
@@ -735,11 +735,11 @@
|
||||||
|
|
||||||
|
rx_buf->skb = nskb;
|
||||||
|
|
||||||
|
+ usb_fill_bulk_urb(urb, hif_dev->udev,
|
||||||
|
+ usb_rcvbulkpipe(hif_dev->udev,
|
||||||
|
- usb_fill_int_urb(urb, hif_dev->udev,
|
||||||
|
- usb_rcvintpipe(hif_dev->udev,
|
||||||
|
USB_REG_IN_PIPE),
|
||||||
|
nskb->data, MAX_REG_IN_BUF_SIZE,
|
||||||
|
+ ath9k_hif_usb_reg_in_cb, nskb);
|
||||||
|
- ath9k_hif_usb_reg_in_cb, rx_buf, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
resubmit:
|
||||||
|
@@ -909,11 +909,11 @@
|
||||||
|
rx_buf->hif_dev = hif_dev;
|
||||||
|
rx_buf->skb = skb;
|
||||||
|
|
||||||
|
+ usb_fill_bulk_urb(urb, hif_dev->udev,
|
||||||
|
+ usb_rcvbulkpipe(hif_dev->udev,
|
||||||
|
- usb_fill_int_urb(urb, hif_dev->udev,
|
||||||
|
- usb_rcvintpipe(hif_dev->udev,
|
||||||
|
USB_REG_IN_PIPE),
|
||||||
|
skb->data, MAX_REG_IN_BUF_SIZE,
|
||||||
|
+ ath9k_hif_usb_reg_in_cb, skb);
|
||||||
|
- ath9k_hif_usb_reg_in_cb, rx_buf, 1);
|
||||||
|
|
||||||
|
/* Anchor URB */
|
||||||
|
usb_anchor_urb(urb, &hif_dev->reg_in_submitted);
|
||||||
|
@@ -1031,7 +1031,9 @@
|
||||||
|
|
||||||
|
static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev)
|
||||||
|
{
|
||||||
|
+ struct usb_host_interface *alt = &hif_dev->interface->altsetting[0];
|
||||||
|
+ struct usb_endpoint_descriptor *endp;
|
||||||
|
+ int ret, idx;
|
||||||
|
- int ret;
|
||||||
|
|
||||||
|
ret = ath9k_hif_usb_download_fw(hif_dev);
|
||||||
|
if (ret) {
|
||||||
|
@@ -1041,6 +1043,20 @@
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* On downloading the firmware to the target, the USB descriptor of EP4
|
||||||
|
+ * is 'patched' to change the type of the endpoint to Bulk. This will
|
||||||
|
+ * bring down CPU usage during the scan period.
|
||||||
|
+ */
|
||||||
|
+ for (idx = 0; idx < alt->desc.bNumEndpoints; idx++) {
|
||||||
|
+ endp = &alt->endpoint[idx].desc;
|
||||||
|
+ if ((endp->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
|
||||||
|
+ == USB_ENDPOINT_XFER_INT) {
|
||||||
|
+ endp->bmAttributes &= ~USB_ENDPOINT_XFERTYPE_MASK;
|
||||||
|
+ endp->bmAttributes |= USB_ENDPOINT_XFER_BULK;
|
||||||
|
+ endp->bInterval = 0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* Alloc URBs */
|
||||||
|
ret = ath9k_hif_usb_alloc_urbs(hif_dev);
|
||||||
|
if (ret) {
|
||||||
|
@@ -1252,7 +1268,7 @@
|
||||||
|
if (!buf)
|
||||||
|
return;
|
||||||
|
|
||||||
|
+ ret = usb_bulk_msg(udev, usb_sndbulkpipe(udev, USB_REG_OUT_PIPE),
|
||||||
|
- ret = usb_interrupt_msg(udev, usb_sndintpipe(udev, USB_REG_OUT_PIPE),
|
||||||
|
buf, 4, NULL, USB_MSG_TIMEOUT);
|
||||||
|
if (ret)
|
||||||
|
dev_err(&udev->dev, "ath9k_htc: USB reboot failed\n");
|
||||||
|
|
@@ -0,0 +1,178 @@
|
|||||||
|
From e03d074b8ec00718337e7373e991912f6b6f9a52 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Miouyouyou (Myy)" <myy@miouyouyou.fr>
|
||||||
|
Date: Mon, 5 Nov 2018 19:53:43 +0100
|
||||||
|
Subject: [PATCH] clk: rockchip: rk3288: Support for dedicating NPLL to a VOP
|
||||||
|
|
||||||
|
This patch is taken from Urja Rannikko ( @urjaman ) patchset here :
|
||||||
|
https://github.com/urjaman/arch-c201/blob/master/linux-c201/0020-RK3288-HDMI-clock-hacks-combined.patch
|
||||||
|
https://www.spinics.net/lists/arm-kernel/msg673156.html
|
||||||
|
|
||||||
|
I'm not really sure what this does exactly. It basically sets the
|
||||||
|
parent clock of the newly added clocks, if the newly added property
|
||||||
|
"rockchip,npll-for-vop" is detected and set.
|
||||||
|
|
||||||
|
I have no clear idea how HDMI Neuronal PLL (and PLL in general) work,
|
||||||
|
so I cannot comment on what it's doing and if it's a good idea in
|
||||||
|
general.
|
||||||
|
|
||||||
|
Now, I still have to test if that patch does anything useful on
|
||||||
|
RK3288 boards. If it doesn't, I might just throw it away on next
|
||||||
|
versions.
|
||||||
|
|
||||||
|
Signed-off-by: Miouyouyou (Myy) <myy@miouyouyou.fr>
|
||||||
|
---
|
||||||
|
drivers/clk/rockchip/clk-rk3288.c | 68 ++++++++++++++++++++++++++++++++-------
|
||||||
|
drivers/clk/rockchip/clk.h | 3 ++
|
||||||
|
2 files changed, 59 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
|
||||||
|
index 13b38cb89..0d8b99b6b 100644
|
||||||
|
--- a/drivers/clk/rockchip/clk-rk3288.c
|
||||||
|
+++ b/drivers/clk/rockchip/clk-rk3288.c
|
||||||
|
@@ -215,10 +215,13 @@ PNAME(mux_ddrphy_p) = { "dpll_ddr", "gpll_ddr" };
|
||||||
|
PNAME(mux_aclk_cpu_src_p) = { "cpll_aclk_cpu", "gpll_aclk_cpu" };
|
||||||
|
|
||||||
|
PNAME(mux_pll_src_cpll_gpll_p) = { "cpll", "gpll" };
|
||||||
|
-PNAME(mux_pll_src_npll_cpll_gpll_p) = { "npll", "cpll", "gpll" };
|
||||||
|
-PNAME(mux_pll_src_cpll_gpll_npll_p) = { "cpll", "gpll", "npll" };
|
||||||
|
+PNAME_ED(mux_pll_src_npll_cpll_gpll_p) = { "npll", "cpll", "gpll" };
|
||||||
|
+
|
||||||
|
+PNAME_ED(mux_pll_src_cgn_pll_nonvop_p) = { "cpll", "gpll", "npll" };
|
||||||
|
+PNAME_ED(mux_pll_src_cgn_pll_vop0_p) = { "cpll", "gpll", "npll" };
|
||||||
|
+PNAME_ED(mux_pll_src_cgn_pll_vop1_p) = { "cpll", "gpll", "npll" };
|
||||||
|
PNAME(mux_pll_src_cpll_gpll_usb480m_p) = { "cpll", "gpll", "unstable:usbphy480m_src" };
|
||||||
|
-PNAME(mux_pll_src_cpll_gll_usb_npll_p) = { "cpll", "gpll", "unstable:usbphy480m_src", "npll" };
|
||||||
|
+PNAME_ED(mux_pll_src_cpll_gll_usb_npll_p) = { "cpll", "gpll", "usbphy480m_src", "npll" };
|
||||||
|
|
||||||
|
PNAME(mux_mmc_src_p) = { "cpll", "gpll", "xin24m", "xin24m" };
|
||||||
|
PNAME(mux_i2s_pre_p) = { "i2s_src", "i2s_frac", "ext_i2s", "xin12m" };
|
||||||
|
@@ -464,24 +467,24 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {
|
||||||
|
RK3288_CLKSEL_CON(30), 14, 2, MFLAGS, 8, 5, DFLAGS,
|
||||||
|
RK3288_CLKGATE_CON(3), 4, GFLAGS),
|
||||||
|
|
||||||
|
- COMPOSITE(DCLK_VOP0, "dclk_vop0", mux_pll_src_cpll_gpll_npll_p, 0,
|
||||||
|
+ COMPOSITE(DCLK_VOP0, "dclk_vop0", mux_pll_src_cgn_pll_vop0_p, 0,
|
||||||
|
RK3288_CLKSEL_CON(27), 0, 2, MFLAGS, 8, 8, DFLAGS,
|
||||||
|
RK3288_CLKGATE_CON(3), 1, GFLAGS),
|
||||||
|
- COMPOSITE(DCLK_VOP1, "dclk_vop1", mux_pll_src_cpll_gpll_npll_p, 0,
|
||||||
|
+ COMPOSITE(DCLK_VOP1, "dclk_vop1", mux_pll_src_cgn_pll_vop1_p, 0,
|
||||||
|
RK3288_CLKSEL_CON(29), 6, 2, MFLAGS, 8, 8, DFLAGS,
|
||||||
|
RK3288_CLKGATE_CON(3), 3, GFLAGS),
|
||||||
|
|
||||||
|
COMPOSITE_NODIV(SCLK_EDP_24M, "sclk_edp_24m", mux_edp_24m_p, 0,
|
||||||
|
RK3288_CLKSEL_CON(28), 15, 1, MFLAGS,
|
||||||
|
RK3288_CLKGATE_CON(3), 12, GFLAGS),
|
||||||
|
- COMPOSITE(SCLK_EDP, "sclk_edp", mux_pll_src_cpll_gpll_npll_p, 0,
|
||||||
|
+ COMPOSITE(SCLK_EDP, "sclk_edp", mux_pll_src_cgn_pll_nonvop_p, 0,
|
||||||
|
RK3288_CLKSEL_CON(28), 6, 2, MFLAGS, 0, 6, DFLAGS,
|
||||||
|
RK3288_CLKGATE_CON(3), 13, GFLAGS),
|
||||||
|
|
||||||
|
- COMPOSITE(SCLK_ISP, "sclk_isp", mux_pll_src_cpll_gpll_npll_p, 0,
|
||||||
|
+ COMPOSITE(SCLK_ISP, "sclk_isp", mux_pll_src_cgn_pll_nonvop_p, 0,
|
||||||
|
RK3288_CLKSEL_CON(6), 6, 2, MFLAGS, 0, 6, DFLAGS,
|
||||||
|
RK3288_CLKGATE_CON(3), 14, GFLAGS),
|
||||||
|
- COMPOSITE(SCLK_ISP_JPE, "sclk_isp_jpe", mux_pll_src_cpll_gpll_npll_p, 0,
|
||||||
|
+ COMPOSITE(SCLK_ISP_JPE, "sclk_isp_jpe", mux_pll_src_cgn_pll_nonvop_p, 0,
|
||||||
|
RK3288_CLKSEL_CON(6), 14, 2, MFLAGS, 8, 6, DFLAGS,
|
||||||
|
RK3288_CLKGATE_CON(3), 15, GFLAGS),
|
||||||
|
|
||||||
|
@@ -490,16 +493,16 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {
|
||||||
|
GATE(SCLK_HDMI_CEC, "sclk_hdmi_cec", "xin32k", 0,
|
||||||
|
RK3288_CLKGATE_CON(5), 11, GFLAGS),
|
||||||
|
|
||||||
|
- COMPOSITE(ACLK_HEVC, "aclk_hevc", mux_pll_src_cpll_gpll_npll_p, 0,
|
||||||
|
+ COMPOSITE(ACLK_HEVC, "aclk_hevc", mux_pll_src_cgn_pll_nonvop_p, 0,
|
||||||
|
RK3288_CLKSEL_CON(39), 14, 2, MFLAGS, 8, 5, DFLAGS,
|
||||||
|
RK3288_CLKGATE_CON(13), 13, GFLAGS),
|
||||||
|
DIV(HCLK_HEVC, "hclk_hevc", "aclk_hevc", 0,
|
||||||
|
RK3288_CLKSEL_CON(40), 12, 2, DFLAGS),
|
||||||
|
|
||||||
|
- COMPOSITE(SCLK_HEVC_CABAC, "sclk_hevc_cabac", mux_pll_src_cpll_gpll_npll_p, 0,
|
||||||
|
+ COMPOSITE(SCLK_HEVC_CABAC, "sclk_hevc_cabac", mux_pll_src_cgn_pll_nonvop_p, 0,
|
||||||
|
RK3288_CLKSEL_CON(42), 6, 2, MFLAGS, 0, 5, DFLAGS,
|
||||||
|
RK3288_CLKGATE_CON(13), 14, GFLAGS),
|
||||||
|
- COMPOSITE(SCLK_HEVC_CORE, "sclk_hevc_core", mux_pll_src_cpll_gpll_npll_p, 0,
|
||||||
|
+ COMPOSITE(SCLK_HEVC_CORE, "sclk_hevc_core", mux_pll_src_cgn_pll_nonvop_p, 0,
|
||||||
|
RK3288_CLKSEL_CON(42), 14, 2, MFLAGS, 8, 5, DFLAGS,
|
||||||
|
RK3288_CLKGATE_CON(13), 15, GFLAGS),
|
||||||
|
|
||||||
|
@@ -573,7 +576,7 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {
|
||||||
|
COMPOSITE(0, "sclk_tspout", mux_tspout_p, 0,
|
||||||
|
RK3288_CLKSEL_CON(35), 14, 2, MFLAGS, 8, 5, DFLAGS,
|
||||||
|
RK3288_CLKGATE_CON(4), 11, GFLAGS),
|
||||||
|
- COMPOSITE(0, "sclk_tsp", mux_pll_src_cpll_gpll_npll_p, 0,
|
||||||
|
+ COMPOSITE(0, "sclk_tsp", mux_pll_src_cgn_pll_nonvop_p, 0,
|
||||||
|
RK3288_CLKSEL_CON(35), 6, 2, MFLAGS, 0, 5, DFLAGS,
|
||||||
|
RK3288_CLKGATE_CON(4), 10, GFLAGS),
|
||||||
|
|
||||||
|
@@ -933,5 +936,6 @@ static void __init rk3288_clk_init(struct device_node *np)
|
||||||
|
{
|
||||||
|
struct rockchip_clk_provider *ctx;
|
||||||
|
+ s32 npll_vop = -1;
|
||||||
|
|
||||||
|
rk3288_cru_base = of_iomap(np, 0);
|
||||||
|
if (!rk3288_cru_base) {
|
||||||
|
@@ -940,6 +944,46 @@ static void __init rk3288_clk_init(struct device_node *np)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (!of_property_read_s32(np, "rockchip,npll-for-vop", &npll_vop)) {
|
||||||
|
+ if ((npll_vop < -1) || (npll_vop > 1)) {
|
||||||
|
+ pr_warn("%s: invalid VOP to dedicate NPLL to: %d\n",
|
||||||
|
+ __func__, npll_vop);
|
||||||
|
+ } else if (npll_vop >= 0) {
|
||||||
|
+ unsigned int vop_clk_id;
|
||||||
|
+ const char ** npll_names;
|
||||||
|
+ const char ** non_npll_names;
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ /* Firstly, not-VOP needs to not use npll */
|
||||||
|
+ mux_pll_src_npll_cpll_gpll_p[0] = "dummy_npll";
|
||||||
|
+ mux_pll_src_cgn_pll_nonvop_p[2] = "dummy_npll";
|
||||||
|
+ mux_pll_src_cpll_gll_usb_npll_p[3] = "dummy_npll";
|
||||||
|
+
|
||||||
|
+ /* Then the npll VOP needs to only use npll, and the other one not use npll. */
|
||||||
|
+ if (npll_vop) {
|
||||||
|
+ vop_clk_id = DCLK_VOP1;
|
||||||
|
+ npll_names = mux_pll_src_cgn_pll_vop1_p;
|
||||||
|
+ non_npll_names = mux_pll_src_cgn_pll_vop0_p;
|
||||||
|
+ } else {
|
||||||
|
+ vop_clk_id = DCLK_VOP0;
|
||||||
|
+ npll_names = mux_pll_src_cgn_pll_vop0_p;
|
||||||
|
+ non_npll_names = mux_pll_src_cgn_pll_vop1_p;
|
||||||
|
+ }
|
||||||
|
+ npll_names[0] = "dummy_cpll";
|
||||||
|
+ npll_names[1] = "dummy_gpll";
|
||||||
|
+ non_npll_names[2] = "dummy_npll";
|
||||||
|
+
|
||||||
|
+ /* Lastly the npll-dedicated-VOP needs to be able to control npll. */
|
||||||
|
+ for (i = 0; i < ARRAY_SIZE(rk3288_clk_branches); i++) {
|
||||||
|
+ if (rk3288_clk_branches[i].id == vop_clk_id) {
|
||||||
|
+ rk3288_clk_branches[i].flags |= CLK_SET_RATE_PARENT;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ pr_debug("%s: npll dedicated for VOP %d\n", __func__, npll_vop);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
ctx = rockchip_clk_init(np, rk3288_cru_base, CLK_NR_CLKS);
|
||||||
|
if (IS_ERR(ctx)) {
|
||||||
|
pr_err("%s: rockchip clk init failed\n", __func__);
|
||||||
|
diff --git a/drivers/clk/rockchip/clk.h b/drivers/clk/rockchip/clk.h
|
||||||
|
index 6b53fff4c..dbda9d281 100644
|
||||||
|
--- a/drivers/clk/rockchip/clk.h
|
||||||
|
+++ b/drivers/clk/rockchip/clk.h
|
||||||
|
@@ -382,6 +382,9 @@ struct clk *rockchip_clk_register_muxgrf(const char *name,
|
||||||
|
|
||||||
|
#define PNAME(x) static const char *const x[] __initconst
|
||||||
|
|
||||||
|
+/* For when you want to be able to modify the pointers. */
|
||||||
|
+#define PNAME_ED(x) static const char * x[] __initdata
|
||||||
|
+
|
||||||
|
enum rockchip_clk_branch_type {
|
||||||
|
branch_composite,
|
||||||
|
branch_mux,
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@@ -0,0 +1,434 @@
|
|||||||
|
From 6c86916e81fa18394d9b57b4af44f9948e100e96 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Miouyouyou (Myy)" <myy@miouyouyou.fr>
|
||||||
|
Date: Sat, 29 Sep 2018 03:02:10 +0200
|
||||||
|
Subject: [PATCH 6/6] drm: dw_hdmi-rockchip: better clock selection logic and
|
||||||
|
dts-based rate list
|
||||||
|
|
||||||
|
This patch is taken from Urja Rannikko ( @urjaman ) patchset here :
|
||||||
|
https://github.com/urjaman/arch-c201/blob/master/linux-c201/0020-RK3288-HDMI-clock-hacks-combined.patch
|
||||||
|
https://www.spinics.net/lists/arm-kernel/msg673156.html
|
||||||
|
|
||||||
|
The original description was :
|
||||||
|
This contains traces of the following commits from the ChromeOS 3.14
|
||||||
|
tree, which improve RF/EMI performance and detach the clock selection
|
||||||
|
logic from the HDMI PHY configurations, plus support for configuring
|
||||||
|
the allowed clock rates via device tree as they are dependent on
|
||||||
|
PLL configuration and maybe even the PCB layout and other hardware things,
|
||||||
|
eg. interference to wifi or such (EMI).
|
||||||
|
|
||||||
|
Rates that were allowed previous to this patch are added as the fallback
|
||||||
|
list if no dts configuration exists.
|
||||||
|
|
||||||
|
CHROMIUM: drm: rockchip/dw_hdmi-rockchip: Adjust rockchip_mpll_cfg for 146.25
|
||||||
|
CHROMIUM: drm: rockchip/dw_hdmi-rockchip: expand the informal mpll config
|
||||||
|
CHROMIUM: drm: rockchip/dw_hdmi-rockchip: add slop to more tables
|
||||||
|
CHROMIUM: drm: rockchip/dw_hdmi-rockchip: redo rockchip hdmi to allow slop
|
||||||
|
CHROMIUM: drm: rockchip/dw_hdmi-rockchip: Use auto-generated tables
|
||||||
|
CHROMIUM: drm: rockchip/dw_hdmi-rockchip: Fixup the clock to be what we expect
|
||||||
|
CHROMIUM: drm/rockchip: hdmi: adjust cklvl & txlvl for RF/EMI
|
||||||
|
CHROMIUM: drm: rockchip/dw_hdmi-rockchip: Set cur_ctr to 0 always
|
||||||
|
CHROMIUM: drm: rockchip/dw_hdmi-rockchip: Decrease slop
|
||||||
|
|
||||||
|
https://www.spinics.net/lists/arm-kernel/msg673163.html
|
||||||
|
|
||||||
|
This is the patch that takes into account the new property
|
||||||
|
"rockchip,hdmi-rates-hz" that allows the definition of the HDMI
|
||||||
|
frequencies in the DTS file.
|
||||||
|
This also change a lot of HDMI frequencies definition, so that
|
||||||
|
*will* require some extensive testing.
|
||||||
|
|
||||||
|
Still, if it works fine, this should make tinkering the HDMI
|
||||||
|
frequencies easier, in case you have a very special HDMI screen.
|
||||||
|
|
||||||
|
Signed-off-by: Miouyouyou (Myy) <myy@miouyouyou.fr>
|
||||||
|
---
|
||||||
|
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
|
index cdc304d4c..91c7dc07b 100644
|
||||||
|
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
|
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
|
||||||
|
@@ -73,122 +73,141 @@ struct rockchip_hdmi {
|
||||||
|
struct clk *grf_clk;
|
||||||
|
struct dw_hdmi *hdmi;
|
||||||
|
struct phy *phy;
|
||||||
|
+ u32* rates;
|
||||||
|
+ u32 rates_cnt;
|
||||||
|
};
|
||||||
|
|
||||||
|
+#define CLK_SLOP(clk) ((clk) / 1000)
|
||||||
|
+#define CLK_PLUS_SLOP(clk) ((clk) + CLK_SLOP(clk))
|
||||||
|
+
|
||||||
|
#define to_rockchip_hdmi(x) container_of(x, struct rockchip_hdmi, x)
|
||||||
|
|
||||||
|
+/* These were the rates allowed by the driver before rates list in device tree,
|
||||||
|
+ * so keep them around as a fallback */
|
||||||
|
+static const u32 dw_hdmi_fallback_rates[] = {
|
||||||
|
+ 27000000,
|
||||||
|
+ 36000000,
|
||||||
|
+ 40000000,
|
||||||
|
+ 54000000,
|
||||||
|
+ 65000000,
|
||||||
|
+ 66000000,
|
||||||
|
+ 74250000,
|
||||||
|
+ 83500000,
|
||||||
|
+ 106500000,
|
||||||
|
+ 108000000,
|
||||||
|
+ 146250000,
|
||||||
|
+ 148500000
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
static const struct dw_hdmi_mpll_config rockchip_mpll_cfg[] = {
|
||||||
|
{
|
||||||
|
- 27000000, {
|
||||||
|
- { 0x00b3, 0x0000},
|
||||||
|
- { 0x2153, 0x0000},
|
||||||
|
- { 0x40f3, 0x0000}
|
||||||
|
+ 30666000, {
|
||||||
|
+ { 0x00b3, 0x0000 },
|
||||||
|
+ { 0x2153, 0x0000 },
|
||||||
|
+ { 0x40f3, 0x0000 },
|
||||||
|
+ },
|
||||||
|
+ }, {
|
||||||
|
+ 36800000, {
|
||||||
|
+ { 0x00b3, 0x0000 },
|
||||||
|
+ { 0x2153, 0x0000 },
|
||||||
|
+ { 0x40a2, 0x0001 },
|
||||||
|
},
|
||||||
|
- }, {
|
||||||
|
- 36000000, {
|
||||||
|
- { 0x00b3, 0x0000},
|
||||||
|
- { 0x2153, 0x0000},
|
||||||
|
- { 0x40f3, 0x0000}
|
||||||
|
+ }, {
|
||||||
|
+ 46000000, {
|
||||||
|
+ { 0x00b3, 0x0000 },
|
||||||
|
+ { 0x2142, 0x0001 },
|
||||||
|
+ { 0x40a2, 0x0001 },
|
||||||
|
},
|
||||||
|
- }, {
|
||||||
|
- 40000000, {
|
||||||
|
- { 0x00b3, 0x0000},
|
||||||
|
- { 0x2153, 0x0000},
|
||||||
|
- { 0x40f3, 0x0000}
|
||||||
|
+ }, {
|
||||||
|
+ 61333000, {
|
||||||
|
+ { 0x0072, 0x0001 },
|
||||||
|
+ { 0x2142, 0x0001 },
|
||||||
|
+ { 0x40a2, 0x0001 },
|
||||||
|
},
|
||||||
|
- }, {
|
||||||
|
- 54000000, {
|
||||||
|
- { 0x0072, 0x0001},
|
||||||
|
- { 0x2142, 0x0001},
|
||||||
|
- { 0x40a2, 0x0001},
|
||||||
|
+ }, {
|
||||||
|
+ 73600000, {
|
||||||
|
+ { 0x0072, 0x0001 },
|
||||||
|
+ { 0x2142, 0x0001 },
|
||||||
|
+ { 0x4061, 0x0002 },
|
||||||
|
},
|
||||||
|
- }, {
|
||||||
|
- 65000000, {
|
||||||
|
- { 0x0072, 0x0001},
|
||||||
|
- { 0x2142, 0x0001},
|
||||||
|
- { 0x40a2, 0x0001},
|
||||||
|
+ }, {
|
||||||
|
+ 92000000, {
|
||||||
|
+ { 0x0072, 0x0001 },
|
||||||
|
+ { 0x2145, 0x0002 },
|
||||||
|
+ { 0x4061, 0x0002 },
|
||||||
|
},
|
||||||
|
- }, {
|
||||||
|
- 66000000, {
|
||||||
|
- { 0x013e, 0x0003},
|
||||||
|
- { 0x217e, 0x0002},
|
||||||
|
- { 0x4061, 0x0002}
|
||||||
|
+ }, {
|
||||||
|
+ 122666000, {
|
||||||
|
+ { 0x0051, 0x0002 },
|
||||||
|
+ { 0x2145, 0x0002 },
|
||||||
|
+ { 0x4061, 0x0002 },
|
||||||
|
},
|
||||||
|
- }, {
|
||||||
|
- 74250000, {
|
||||||
|
- { 0x0072, 0x0001},
|
||||||
|
- { 0x2145, 0x0002},
|
||||||
|
- { 0x4061, 0x0002}
|
||||||
|
+ }, {
|
||||||
|
+ 147200000, {
|
||||||
|
+ { 0x0051, 0x0002 },
|
||||||
|
+ { 0x2145, 0x0002 },
|
||||||
|
+ { 0x4064, 0x0003 },
|
||||||
|
},
|
||||||
|
- }, {
|
||||||
|
- 83500000, {
|
||||||
|
- { 0x0072, 0x0001},
|
||||||
|
+ }, {
|
||||||
|
+ 184000000, {
|
||||||
|
+ { 0x0051, 0x0002 },
|
||||||
|
+ { 0x214c, 0x0003 },
|
||||||
|
+ { 0x4064, 0x0003 },
|
||||||
|
},
|
||||||
|
- }, {
|
||||||
|
- 108000000, {
|
||||||
|
- { 0x0051, 0x0002},
|
||||||
|
- { 0x2145, 0x0002},
|
||||||
|
- { 0x4061, 0x0002}
|
||||||
|
+ }, {
|
||||||
|
+ 226666000, {
|
||||||
|
+ { 0x0040, 0x0003 },
|
||||||
|
+ { 0x214c, 0x0003 },
|
||||||
|
+ { 0x4064, 0x0003 },
|
||||||
|
},
|
||||||
|
- }, {
|
||||||
|
- 106500000, {
|
||||||
|
- { 0x0051, 0x0002},
|
||||||
|
- { 0x2145, 0x0002},
|
||||||
|
- { 0x4061, 0x0002}
|
||||||
|
+ }, {
|
||||||
|
+ 272000000, {
|
||||||
|
+ { 0x0040, 0x0003 },
|
||||||
|
+ { 0x214c, 0x0003 },
|
||||||
|
+ { 0x5a64, 0x0003 },
|
||||||
|
},
|
||||||
|
- }, {
|
||||||
|
- 146250000, {
|
||||||
|
- { 0x0051, 0x0002},
|
||||||
|
- { 0x2145, 0x0002},
|
||||||
|
- { 0x4061, 0x0002}
|
||||||
|
+ }, {
|
||||||
|
+ 340000000, {
|
||||||
|
+ { 0x0040, 0x0003 },
|
||||||
|
+ { 0x3b4c, 0x0003 },
|
||||||
|
+ { 0x5a64, 0x0003 },
|
||||||
|
},
|
||||||
|
- }, {
|
||||||
|
- 148500000, {
|
||||||
|
- { 0x0051, 0x0003},
|
||||||
|
- { 0x214c, 0x0003},
|
||||||
|
- { 0x4064, 0x0003}
|
||||||
|
+ }, {
|
||||||
|
+ 600000000, {
|
||||||
|
+ { 0x1a40, 0x0003 },
|
||||||
|
+ { 0x3b4c, 0x0003 },
|
||||||
|
+ { 0x5a64, 0x0003 },
|
||||||
|
},
|
||||||
|
- }, {
|
||||||
|
+ }, {
|
||||||
|
~0UL, {
|
||||||
|
- { 0x00a0, 0x000a },
|
||||||
|
- { 0x2001, 0x000f },
|
||||||
|
- { 0x4002, 0x000f },
|
||||||
|
+ { 0x0000, 0x0000 },
|
||||||
|
+ { 0x0000, 0x0000 },
|
||||||
|
+ { 0x0000, 0x0000 },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct dw_hdmi_curr_ctrl rockchip_cur_ctr[] = {
|
||||||
|
- /* pixelclk bpp8 bpp10 bpp12 */
|
||||||
|
+ /* pixelclk bpp8 bpp10 bpp12 */
|
||||||
|
{
|
||||||
|
- 40000000, { 0x0018, 0x0018, 0x0018 },
|
||||||
|
- }, {
|
||||||
|
- 65000000, { 0x0028, 0x0028, 0x0028 },
|
||||||
|
- }, {
|
||||||
|
- 66000000, { 0x0038, 0x0038, 0x0038 },
|
||||||
|
- }, {
|
||||||
|
- 74250000, { 0x0028, 0x0038, 0x0038 },
|
||||||
|
- }, {
|
||||||
|
- 83500000, { 0x0028, 0x0038, 0x0038 },
|
||||||
|
- }, {
|
||||||
|
- 146250000, { 0x0038, 0x0038, 0x0038 },
|
||||||
|
- }, {
|
||||||
|
- 148500000, { 0x0000, 0x0038, 0x0038 },
|
||||||
|
- }, {
|
||||||
|
- ~0UL, { 0x0000, 0x0000, 0x0000},
|
||||||
|
- }
|
||||||
|
+ 600000000, { 0x0000, 0x0000, 0x0000 },
|
||||||
|
+ }, {
|
||||||
|
+ ~0UL, { 0x0000, 0x0000, 0x0000 },
|
||||||
|
+ },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct dw_hdmi_phy_config rockchip_phy_config[] = {
|
||||||
|
/*pixelclk symbol term vlev*/
|
||||||
|
- { 74250000, 0x8009, 0x0004, 0x0272},
|
||||||
|
- { 148500000, 0x802b, 0x0004, 0x028d},
|
||||||
|
- { 297000000, 0x8039, 0x0005, 0x028d},
|
||||||
|
- { ~0UL, 0x0000, 0x0000, 0x0000}
|
||||||
|
+ { CLK_PLUS_SLOP(74250000), 0x8009, 0x0004, 0x0272},
|
||||||
|
+ { CLK_PLUS_SLOP(165000000), 0x802b, 0x0004, 0x0209},
|
||||||
|
+ { CLK_PLUS_SLOP(297000000), 0x8039, 0x0005, 0x028d},
|
||||||
|
+ { ~0UL, 0x0000, 0x0000, 0x0000}
|
||||||
|
};
|
||||||
|
|
||||||
|
static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
|
||||||
|
{
|
||||||
|
struct device_node *np = hdmi->dev->of_node;
|
||||||
|
+ int rates_cnt;
|
||||||
|
|
||||||
|
hdmi->regmap = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
|
||||||
|
if (IS_ERR(hdmi->regmap)) {
|
||||||
|
@@ -216,26 +235,55 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
|
||||||
|
return PTR_ERR(hdmi->grf_clk);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if ((rates_cnt = of_property_count_u32_elems(np, "rockchip,hdmi-rates-hz")) > 0) {
|
||||||
|
+ int rv;
|
||||||
|
+ u32 *rates = devm_kmalloc_array(hdmi->dev, rates_cnt, sizeof(u32), GFP_KERNEL);
|
||||||
|
+ if (!rates)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+ rv = of_property_read_u32_array(np, "rockchip,hdmi-rates-hz", rates, rates_cnt);
|
||||||
|
+ if (rv)
|
||||||
|
+ return rv;
|
||||||
|
+ hdmi->rates = rates;
|
||||||
|
+ hdmi->rates_cnt = rates_cnt;
|
||||||
|
+ } else {
|
||||||
|
+ rates_cnt = ARRAY_SIZE(dw_hdmi_fallback_rates);
|
||||||
|
+ hdmi->rates = devm_kmalloc_array(hdmi->dev, rates_cnt, sizeof(u32), GFP_KERNEL);
|
||||||
|
+ if (!hdmi->rates)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+ memcpy(hdmi->rates, dw_hdmi_fallback_rates, rates_cnt * sizeof(u32));
|
||||||
|
+ hdmi->rates_cnt = rates_cnt;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static enum drm_mode_status
|
||||||
|
-dw_hdmi_rockchip_mode_valid(struct drm_connector *connector,
|
||||||
|
+dw_hdmi_rockchip_encoder_mode_valid(struct drm_encoder *encoder,
|
||||||
|
const struct drm_display_mode *mode)
|
||||||
|
{
|
||||||
|
- const struct dw_hdmi_mpll_config *mpll_cfg = rockchip_mpll_cfg;
|
||||||
|
+ struct rockchip_hdmi *hdmi = to_rockchip_hdmi(encoder);
|
||||||
|
int pclk = mode->clock * 1000;
|
||||||
|
- bool valid = false;
|
||||||
|
+ int num_rates = hdmi->rates_cnt;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
- for (i = 0; mpll_cfg[i].mpixelclock != (~0UL); i++) {
|
||||||
|
- if (pclk == mpll_cfg[i].mpixelclock) {
|
||||||
|
- valid = true;
|
||||||
|
- break;
|
||||||
|
- }
|
||||||
|
+ /*
|
||||||
|
+ * Pixel clocks we support are always < 2GHz and so fit in an
|
||||||
|
+ * int. We should make sure source rate does too so we don't get
|
||||||
|
+ * overflow when we multiply by 1000.
|
||||||
|
+ */
|
||||||
|
+ if (mode->clock > INT_MAX / 1000)
|
||||||
|
+ return MODE_BAD;
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < num_rates; i++) {
|
||||||
|
+ int slop = CLK_SLOP(pclk);
|
||||||
|
+
|
||||||
|
+ if ((pclk >= hdmi->rates[i] - slop) &&
|
||||||
|
+ (pclk <= hdmi->rates[i] + slop))
|
||||||
|
+ return MODE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
- return (valid) ? MODE_OK : MODE_BAD;
|
||||||
|
+ return MODE_BAD;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct drm_encoder_funcs dw_hdmi_rockchip_encoder_funcs = {
|
||||||
|
@@ -251,7 +299,39 @@ dw_hdmi_rockchip_encoder_mode_fixup(struct drm_encoder *encoder,
|
||||||
|
const struct drm_display_mode *mode,
|
||||||
|
struct drm_display_mode *adj_mode)
|
||||||
|
{
|
||||||
|
- return true;
|
||||||
|
+ struct rockchip_hdmi *hdmi = to_rockchip_hdmi(encoder);
|
||||||
|
+ int pclk = adj_mode->clock * 1000;
|
||||||
|
+ int best_diff = INT_MAX;
|
||||||
|
+ int best_clock = 0;
|
||||||
|
+ int slop;
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ /* Pick the best clock */
|
||||||
|
+ for (i = 0; i < hdmi->rates_cnt; i++) {
|
||||||
|
+ int diff = hdmi->rates[i] - pclk;
|
||||||
|
+
|
||||||
|
+ if (diff < 0)
|
||||||
|
+ diff = -diff;
|
||||||
|
+ if (diff < best_diff) {
|
||||||
|
+ best_diff = diff;
|
||||||
|
+ best_clock = hdmi->rates[i];
|
||||||
|
+
|
||||||
|
+ /* Bail early if we're exact */
|
||||||
|
+ if (best_diff == 0)
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Double check that it's OK */
|
||||||
|
+ slop = CLK_SLOP(pclk);
|
||||||
|
+ if ((pclk >= best_clock - slop) && (pclk <= best_clock + slop)) {
|
||||||
|
+ adj_mode->clock = DIV_ROUND_UP(best_clock, 1000);
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Shoudn't be here; we should have said rate wasn't valid */
|
||||||
|
+ dev_warn(hdmi->dev, "tried to set invalid rate %d\n", adj_mode->clock);
|
||||||
|
+ return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dw_hdmi_rockchip_encoder_mode_set(struct drm_encoder *encoder,
|
||||||
|
@@ -307,6 +387,7 @@ dw_hdmi_rockchip_encoder_atomic_check(struct drm_encoder *encoder,
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct drm_encoder_helper_funcs dw_hdmi_rockchip_encoder_helper_funcs = {
|
||||||
|
+ .mode_valid = dw_hdmi_rockchip_encoder_mode_valid,
|
||||||
|
.mode_fixup = dw_hdmi_rockchip_encoder_mode_fixup,
|
||||||
|
.mode_set = dw_hdmi_rockchip_encoder_mode_set,
|
||||||
|
.enable = dw_hdmi_rockchip_encoder_enable,
|
||||||
|
@@ -406,7 +487,6 @@ static struct rockchip_hdmi_chip_data rk3228_chip_data = {
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct dw_hdmi_plat_data rk3228_hdmi_drv_data = {
|
||||||
|
- .mode_valid = dw_hdmi_rockchip_mode_valid,
|
||||||
|
.mpll_cfg = rockchip_mpll_cfg,
|
||||||
|
.cur_ctr = rockchip_cur_ctr,
|
||||||
|
.phy_config = rockchip_phy_config,
|
||||||
|
@@ -423,7 +503,6 @@ static struct rockchip_hdmi_chip_data rk3288_chip_data = {
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct dw_hdmi_plat_data rk3288_hdmi_drv_data = {
|
||||||
|
- .mode_valid = dw_hdmi_rockchip_mode_valid,
|
||||||
|
.mpll_cfg = rockchip_mpll_cfg,
|
||||||
|
.cur_ctr = rockchip_cur_ctr,
|
||||||
|
.phy_config = rockchip_phy_config,
|
||||||
|
@@ -443,7 +522,6 @@ static struct rockchip_hdmi_chip_data rk3328_chip_data = {
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct dw_hdmi_plat_data rk3328_hdmi_drv_data = {
|
||||||
|
- .mode_valid = dw_hdmi_rockchip_mode_valid,
|
||||||
|
.mpll_cfg = rockchip_mpll_cfg,
|
||||||
|
.cur_ctr = rockchip_cur_ctr,
|
||||||
|
.phy_config = rockchip_phy_config,
|
||||||
|
@@ -460,7 +538,6 @@ static struct rockchip_hdmi_chip_data rk3399_chip_data = {
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct dw_hdmi_plat_data rk3399_hdmi_drv_data = {
|
||||||
|
- .mode_valid = dw_hdmi_rockchip_mode_valid,
|
||||||
|
.mpll_cfg = rockchip_mpll_cfg,
|
||||||
|
.cur_ctr = rockchip_cur_ctr,
|
||||||
|
.phy_config = rockchip_phy_config,
|
||||||
|
@@ -558,6 +635,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
|
||||||
|
*/
|
||||||
|
if (IS_ERR(hdmi->hdmi)) {
|
||||||
|
ret = PTR_ERR(hdmi->hdmi);
|
||||||
|
+ devm_kfree(hdmi->dev, hdmi->rates);
|
||||||
|
drm_encoder_cleanup(encoder);
|
||||||
|
clk_disable_unprepare(hdmi->vpll_clk);
|
||||||
|
}
|
||||||
|
@@ -570,6 +648,7 @@ static void dw_hdmi_rockchip_unbind(struct device *dev, struct device *master,
|
||||||
|
{
|
||||||
|
struct rockchip_hdmi *hdmi = dev_get_drvdata(dev);
|
||||||
|
|
||||||
|
+ devm_kfree(hdmi->dev, hdmi->rates);
|
||||||
|
dw_hdmi_unbind(hdmi->hdmi);
|
||||||
|
clk_disable_unprepare(hdmi->vpll_clk);
|
||||||
|
}
|
@@ -0,0 +1,22 @@
|
|||||||
|
From d4d128324b8f8a9f5c441203d94703e41fa07df3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Miouyouyou (Myy)" <myy@miouyouyou.fr>
|
||||||
|
Date: Mon, 5 Nov 2018 19:57:56 +0100
|
||||||
|
Subject: [PATCH] spi: Added support for Tinkerboard's SPI interface
|
||||||
|
|
||||||
|
Imported from ARMbian
|
||||||
|
|
||||||
|
Signed-off-by: Miouyouyou (Myy) <myy@miouyouyou.fr>
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c
|
||||||
|
index 255786f2e..3a3f2e6fd 100644
|
||||||
|
--- a/drivers/spi/spidev.c
|
||||||
|
+++ b/drivers/spi/spidev.c
|
||||||
|
@@ -665,6 +665,7 @@ static const struct of_device_id spidev_dt_ids[] = {
|
||||||
|
{ .compatible = "lwn,bk4" },
|
||||||
|
{ .compatible = "dh,dhcom-board" },
|
||||||
|
{ .compatible = "menlo,m53cpld" },
|
||||||
|
+ { .compatible = "rockchip,spi_tinker" },
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
MODULE_DEVICE_TABLE(of, spidev_dt_ids);
|
@@ -0,0 +1,395 @@
|
|||||||
|
diff --git a/arch/arm/boot/dts/rk3288-tinker.dtsi b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
index e5b7ef1a5..f88c913ff 100644
|
||||||
|
--- a/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
@@ -544,3 +544,6 @@
|
||||||
|
&wdt {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
+&gpiomem {
|
||||||
|
+ status = "okay";
|
||||||
|
+};
|
||||||
|
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
index f3ca55496..14bbcb192 100644
|
||||||
|
--- a/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
@@ -1418,6 +1418,12 @@
|
||||||
|
interrupts = <GIC_PPI 9 0xf04>;
|
||||||
|
};
|
||||||
|
|
||||||
|
+ gpiomem: rk3288-gpiomem@ff750000 {
|
||||||
|
+ compatible = "rockchip,rk3288-gpiomem";
|
||||||
|
+ reg = <0x0 0xff750000 0x0 0x1000>;
|
||||||
|
+ status = "disabled";
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
pinctrl: pinctrl {
|
||||||
|
compatible = "rockchip,rk3288-pinctrl";
|
||||||
|
rockchip,grf = <&grf>;
|
||||||
|
|
||||||
|
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
|
||||||
|
index 3143db5..9c18b74 100644
|
||||||
|
--- a/drivers/char/Kconfig
|
||||||
|
+++ b/drivers/char/Kconfig
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
menu "Character devices"
|
||||||
|
|
||||||
|
source "drivers/tty/Kconfig"
|
||||||
|
+source "drivers/char/rockchip/Kconfig"
|
||||||
|
|
||||||
|
config DEVMEM
|
||||||
|
bool "/dev/mem virtual device support"
|
||||||
|
diff --git a/drivers/char/Makefile b/drivers/char/Makefile
|
||||||
|
index d8a7579..290cb32 100644
|
||||||
|
--- a/drivers/char/Makefile
|
||||||
|
+++ b/drivers/char/Makefile
|
||||||
|
@@ -51,6 +51,8 @@ obj-$(CONFIG_PS3_FLASH) += ps3flash.o
|
||||||
|
obj-$(CONFIG_JS_RTC) += js-rtc.o
|
||||||
|
js-rtc-y = rtc.o
|
||||||
|
|
||||||
|
+obj-$(CONFIG_ARCH_ROCKCHIP) += rockchip/
|
||||||
|
+
|
||||||
|
obj-$(CONFIG_XILLYBUS) += xillybus/
|
||||||
|
obj-$(CONFIG_POWERNV_OP_PANEL) += powernv-op-panel.o
|
||||||
|
obj-$(CONFIG_ADI) += adi.o
|
||||||
|
diff --git a/drivers/char/rockchip/Kconfig b/drivers/char/rockchip/Kconfig
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..6e97486
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/drivers/char/rockchip/Kconfig
|
||||||
|
@@ -0,0 +1,16 @@
|
||||||
|
+#
|
||||||
|
+# Broadcom char driver config
|
||||||
|
+#
|
||||||
|
+
|
||||||
|
+menuconfig RK_CHAR_DRIVERS
|
||||||
|
+ bool "Rockchip Char Drivers"
|
||||||
|
+ help
|
||||||
|
+ Rockchip's char drivers
|
||||||
|
+
|
||||||
|
+config RK3288_DEVGPIOMEM
|
||||||
|
+ tristate "/dev/gpiomem rootless GPIO access via mmap() on the RK3288"
|
||||||
|
+ default y
|
||||||
|
+ help
|
||||||
|
+ Provides users with root-free access to the GPIO registers
|
||||||
|
+ on the 3288. Calling mmap(/dev/gpiomem) will map the GPIO
|
||||||
|
+ register page to the user's pointer.
|
||||||
|
\ No newline at end of file
|
||||||
|
diff --git a/drivers/char/rockchip/Makefile b/drivers/char/rockchip/Makefile
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..2287ec2
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/drivers/char/rockchip/Makefile
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+obj-$(CONFIG_RK3288_DEVGPIOMEM)+= rk3288-gpiomem.o
|
||||||
|
\ No newline at end of file
|
||||||
|
diff --git a/drivers/char/rockchip/rk3288-gpiomem.c b/drivers/char/rockchip/rk3288-gpiomem.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..984471c
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/drivers/char/rockchip/rk3288-gpiomem.c
|
||||||
|
@@ -0,0 +1,303 @@
|
||||||
|
+/**
|
||||||
|
+ * GPIO memory device driver
|
||||||
|
+ *
|
||||||
|
+ * Creates a chardev /dev/gpiomem which will provide user access to
|
||||||
|
+ * the rk3288's GPIO registers when it is mmap()'d.
|
||||||
|
+ * No longer need root for user GPIO access, but without relaxing permissions
|
||||||
|
+ * on /dev/mem.
|
||||||
|
+ *
|
||||||
|
+ * Written by Luke Wren <luke@raspberrypi.org>
|
||||||
|
+ * Copyright (c) 2015, Raspberry Pi (Trading) Ltd.
|
||||||
|
+ *
|
||||||
|
+ * Redistribution and use in source and binary forms, with or without
|
||||||
|
+ * modification, are permitted provided that the following conditions
|
||||||
|
+ * are met:
|
||||||
|
+ * 1. Redistributions of source code must retain the above copyright
|
||||||
|
+ * notice, this list of conditions, and the following disclaimer,
|
||||||
|
+ * without modification.
|
||||||
|
+ * 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
+ * notice, this list of conditions and the following disclaimer in the
|
||||||
|
+ * documentation and/or other materials provided with the distribution.
|
||||||
|
+ * 3. The names of the above-listed copyright holders may not be used
|
||||||
|
+ * to endorse or promote products derived from this software without
|
||||||
|
+ * specific prior written permission.
|
||||||
|
+ *
|
||||||
|
+ * ALTERNATIVELY, this software may be distributed under the terms of the
|
||||||
|
+ * GNU General Public License ("GPL") version 2, as published by the Free
|
||||||
|
+ * Software Foundation.
|
||||||
|
+ *
|
||||||
|
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include <linux/kernel.h>
|
||||||
|
+#include <linux/module.h>
|
||||||
|
+#include <linux/of.h>
|
||||||
|
+#include <linux/platform_device.h>
|
||||||
|
+#include <linux/mm.h>
|
||||||
|
+#include <linux/slab.h>
|
||||||
|
+#include <linux/cdev.h>
|
||||||
|
+#include <linux/pagemap.h>
|
||||||
|
+#include <linux/io.h>
|
||||||
|
+
|
||||||
|
+#define DEVICE_NAME "rk3288-gpiomem"
|
||||||
|
+#define DRIVER_NAME "gpiomem-rk3288"
|
||||||
|
+#define DEVICE_MINOR 0
|
||||||
|
+
|
||||||
|
+struct rk3288_gpiomem_instance {
|
||||||
|
+ unsigned long gpio_regs_phys;
|
||||||
|
+ struct device *dev;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static struct cdev rk3288_gpiomem_cdev;
|
||||||
|
+static dev_t rk3288_gpiomem_devid;
|
||||||
|
+static struct class *rk3288_gpiomem_class;
|
||||||
|
+static struct device *rk3288_gpiomem_dev;
|
||||||
|
+static struct rk3288_gpiomem_instance *inst;
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+/****************************************************************************
|
||||||
|
+*
|
||||||
|
+* GPIO mem chardev file ops
|
||||||
|
+*
|
||||||
|
+***************************************************************************/
|
||||||
|
+
|
||||||
|
+static int rk3288_gpiomem_open(struct inode *inode, struct file *file)
|
||||||
|
+{
|
||||||
|
+ int dev = iminor(inode);
|
||||||
|
+ int ret = 0;
|
||||||
|
+
|
||||||
|
+ if (dev != DEVICE_MINOR) {
|
||||||
|
+ dev_err(inst->dev, "Unknown minor device: %d", dev);
|
||||||
|
+ ret = -ENXIO;
|
||||||
|
+ }
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int rk3288_gpiomem_release(struct inode *inode, struct file *file)
|
||||||
|
+{
|
||||||
|
+ int dev = iminor(inode);
|
||||||
|
+ int ret = 0;
|
||||||
|
+
|
||||||
|
+ if (dev != DEVICE_MINOR) {
|
||||||
|
+ dev_err(inst->dev, "Unknown minor device %d", dev);
|
||||||
|
+ ret = -ENXIO;
|
||||||
|
+ }
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static const struct vm_operations_struct rk3288_gpiomem_vm_ops = {
|
||||||
|
+#ifdef CONFIG_HAVE_IOREMAP_PROT
|
||||||
|
+ .access = generic_access_phys
|
||||||
|
+#endif
|
||||||
|
+};
|
||||||
|
+static int address_is_allowed(unsigned long pfn, unsigned long size)
|
||||||
|
+{
|
||||||
|
+ unsigned long address = pfn << PAGE_SHIFT;
|
||||||
|
+
|
||||||
|
+ dev_info(inst->dev, "address_is_allowed.pfn: 0x%08lx", address);
|
||||||
|
+
|
||||||
|
+ switch(address) {
|
||||||
|
+
|
||||||
|
+ case 0xff750000:
|
||||||
|
+ case 0xff760000:
|
||||||
|
+ case 0xff780000:
|
||||||
|
+ case 0xff790000:
|
||||||
|
+ case 0xff7a0000:
|
||||||
|
+ case 0xff7b0000:
|
||||||
|
+ case 0xff7c0000:
|
||||||
|
+ case 0xff7d0000:
|
||||||
|
+ case 0xff7e0000:
|
||||||
|
+ case 0xff7f0000:
|
||||||
|
+ case 0xff7f2000:
|
||||||
|
+ case 0xff770000:
|
||||||
|
+ case 0xff730000:
|
||||||
|
+ case 0xff680000:
|
||||||
|
+ dev_info(inst->dev, "address_is_allowed.return 1");
|
||||||
|
+ return 1;
|
||||||
|
+ break;
|
||||||
|
+ default :
|
||||||
|
+ dev_info(inst->dev, "address_is_allowed.return 0");
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int rk3288_gpiomem_mmap(struct file *file, struct vm_area_struct *vma)
|
||||||
|
+{
|
||||||
|
+
|
||||||
|
+ size_t size;
|
||||||
|
+
|
||||||
|
+ size = vma->vm_end - vma->vm_start;
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+ if (!address_is_allowed(vma->vm_pgoff, size))
|
||||||
|
+ return -EPERM;
|
||||||
|
+
|
||||||
|
+ vma->vm_page_prot = phys_mem_access_prot(file, vma->vm_pgoff,
|
||||||
|
+ size,
|
||||||
|
+ vma->vm_page_prot);
|
||||||
|
+
|
||||||
|
+ vma->vm_ops = &rk3288_gpiomem_vm_ops;
|
||||||
|
+
|
||||||
|
+ /* Remap-pfn-range will mark the range VM_IO */
|
||||||
|
+ if (remap_pfn_range(vma,
|
||||||
|
+ vma->vm_start,
|
||||||
|
+ vma->vm_pgoff,
|
||||||
|
+ size,
|
||||||
|
+ vma->vm_page_prot)) {
|
||||||
|
+ return -EAGAIN;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static const struct file_operations
|
||||||
|
+rk3288_gpiomem_fops = {
|
||||||
|
+ .owner = THIS_MODULE,
|
||||||
|
+ .open = rk3288_gpiomem_open,
|
||||||
|
+ .release = rk3288_gpiomem_release,
|
||||||
|
+ .mmap = rk3288_gpiomem_mmap,
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static int rk3288_gpiomem_dev_uevent(struct device *dev, struct kobj_uevent_env *env)
|
||||||
|
+{
|
||||||
|
+ add_uevent_var(env, "DEVMODE=%#o", 0666);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+ /****************************************************************************
|
||||||
|
+*
|
||||||
|
+* Probe and remove functions
|
||||||
|
+*
|
||||||
|
+***************************************************************************/
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static int rk3288_gpiomem_probe(struct platform_device *pdev)
|
||||||
|
+{
|
||||||
|
+ int err;
|
||||||
|
+ void *ptr_err;
|
||||||
|
+ struct device *dev = &pdev->dev;
|
||||||
|
+ struct resource *ioresource;
|
||||||
|
+
|
||||||
|
+ /* Allocate buffers and instance data */
|
||||||
|
+
|
||||||
|
+ inst = kzalloc(sizeof(struct rk3288_gpiomem_instance), GFP_KERNEL);
|
||||||
|
+
|
||||||
|
+ if (!inst) {
|
||||||
|
+ err = -ENOMEM;
|
||||||
|
+ goto failed_inst_alloc;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ inst->dev = dev;
|
||||||
|
+
|
||||||
|
+ ioresource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
|
+ if (ioresource) {
|
||||||
|
+ inst->gpio_regs_phys = ioresource->start;
|
||||||
|
+ } else {
|
||||||
|
+ dev_err(inst->dev, "failed to get IO resource");
|
||||||
|
+ err = -ENOENT;
|
||||||
|
+ goto failed_get_resource;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Create character device entries */
|
||||||
|
+
|
||||||
|
+ err = alloc_chrdev_region(&rk3288_gpiomem_devid,
|
||||||
|
+ DEVICE_MINOR, 1, DEVICE_NAME);
|
||||||
|
+ if (err != 0) {
|
||||||
|
+ dev_err(inst->dev, "unable to allocate device number");
|
||||||
|
+ goto failed_alloc_chrdev;
|
||||||
|
+ }
|
||||||
|
+ cdev_init(&rk3288_gpiomem_cdev, &rk3288_gpiomem_fops);
|
||||||
|
+ rk3288_gpiomem_cdev.owner = THIS_MODULE;
|
||||||
|
+ err = cdev_add(&rk3288_gpiomem_cdev, rk3288_gpiomem_devid, 1);
|
||||||
|
+ if (err != 0) {
|
||||||
|
+ dev_err(inst->dev, "unable to register device");
|
||||||
|
+ goto failed_cdev_add;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Create sysfs entries */
|
||||||
|
+
|
||||||
|
+ rk3288_gpiomem_class = class_create(THIS_MODULE, DEVICE_NAME);
|
||||||
|
+ ptr_err = rk3288_gpiomem_class;
|
||||||
|
+ if (IS_ERR(ptr_err))
|
||||||
|
+ goto failed_class_create;
|
||||||
|
+ rk3288_gpiomem_class->dev_uevent = rk3288_gpiomem_dev_uevent;
|
||||||
|
+ rk3288_gpiomem_dev = device_create(rk3288_gpiomem_class, NULL,
|
||||||
|
+ rk3288_gpiomem_devid, NULL,
|
||||||
|
+ "gpiomem");
|
||||||
|
+ ptr_err = rk3288_gpiomem_dev;
|
||||||
|
+ if (IS_ERR(ptr_err))
|
||||||
|
+ goto failed_device_create;
|
||||||
|
+
|
||||||
|
+ dev_info(inst->dev, "Initialised: Registers at 0x%08lx",
|
||||||
|
+ inst->gpio_regs_phys);
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+failed_device_create:
|
||||||
|
+ class_destroy(rk3288_gpiomem_class);
|
||||||
|
+failed_class_create:
|
||||||
|
+ cdev_del(&rk3288_gpiomem_cdev);
|
||||||
|
+ err = PTR_ERR(ptr_err);
|
||||||
|
+failed_cdev_add:
|
||||||
|
+ unregister_chrdev_region(rk3288_gpiomem_devid, 1);
|
||||||
|
+failed_alloc_chrdev:
|
||||||
|
+failed_get_resource:
|
||||||
|
+ kfree(inst);
|
||||||
|
+failed_inst_alloc:
|
||||||
|
+ dev_err(inst->dev, "could not load rk3288_gpiomem");
|
||||||
|
+ return err;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int rk3288_gpiomem_remove(struct platform_device *pdev)
|
||||||
|
+{
|
||||||
|
+ struct device *dev = inst->dev;
|
||||||
|
+
|
||||||
|
+ kfree(inst);
|
||||||
|
+ device_destroy(rk3288_gpiomem_class, rk3288_gpiomem_devid);
|
||||||
|
+ class_destroy(rk3288_gpiomem_class);
|
||||||
|
+ cdev_del(&rk3288_gpiomem_cdev);
|
||||||
|
+ unregister_chrdev_region(rk3288_gpiomem_devid, 1);
|
||||||
|
+
|
||||||
|
+ dev_info(dev, "GPIO mem driver removed - OK");
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+ /****************************************************************************
|
||||||
|
+*
|
||||||
|
+* Register the driver with device tree
|
||||||
|
+*
|
||||||
|
+***************************************************************************/
|
||||||
|
+
|
||||||
|
+static const struct of_device_id rk3288_gpiomem_of_match[] = {
|
||||||
|
+ {.compatible = "rockchip,rk3288-gpiomem",},
|
||||||
|
+ { /* sentinel */ },
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+MODULE_DEVICE_TABLE(of, rk3288_gpiomem_of_match);
|
||||||
|
+
|
||||||
|
+static struct platform_driver rk3288_gpiomem_driver = {
|
||||||
|
+ .probe = rk3288_gpiomem_probe,
|
||||||
|
+ .remove = rk3288_gpiomem_remove,
|
||||||
|
+ .driver = {
|
||||||
|
+ .name = DRIVER_NAME,
|
||||||
|
+ .owner = THIS_MODULE,
|
||||||
|
+ .of_match_table = rk3288_gpiomem_of_match,
|
||||||
|
+ },
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+module_platform_driver(rk3288_gpiomem_driver);
|
||||||
|
+
|
||||||
|
+MODULE_ALIAS("platform:gpiomem-rk3288");
|
||||||
|
+MODULE_LICENSE("GPL");
|
||||||
|
+MODULE_DESCRIPTION("gpiomem driver for accessing GPIO from userspace");
|
||||||
|
+MODULE_AUTHOR("Luke Wren <luke@raspberrypi.org>");
|
||||||
|
\ No newline at end of file
|
@@ -0,0 +1,32 @@
|
|||||||
|
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
index bc3601a..37ae378 100644
|
||||||
|
--- a/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
@@ -467,13 +467,6 @@
|
||||||
|
};
|
||||||
|
|
||||||
|
thermal-zones {
|
||||||
|
- reserve_thermal: reserve_thermal {
|
||||||
|
- polling-delay-passive = <1000>; /* milliseconds */
|
||||||
|
- polling-delay = <5000>; /* milliseconds */
|
||||||
|
-
|
||||||
|
- thermal-sensors = <&tsadc 0>;
|
||||||
|
- };
|
||||||
|
-
|
||||||
|
cpu_thermal: cpu_thermal {
|
||||||
|
polling-delay-passive = <100>; /* milliseconds */
|
||||||
|
polling-delay = <5000>; /* milliseconds */
|
||||||
|
@@ -539,6 +532,13 @@
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
+
|
||||||
|
+ reserve_thermal: reserve_thermal {
|
||||||
|
+ polling-delay-passive = <1000>; /* milliseconds */
|
||||||
|
+ polling-delay = <5000>; /* milliseconds */
|
||||||
|
+
|
||||||
|
+ thermal-sensors = <&tsadc 0>;
|
||||||
|
+ };
|
||||||
|
};
|
||||||
|
|
||||||
|
tsadc: tsadc@ff280000 {
|
@@ -0,0 +1,19 @@
|
|||||||
|
diff --git a/sound/usb/card.c b/sound/usb/card.c
|
||||||
|
index 2bfe4e80a..cea93aaf5 100644
|
||||||
|
--- a/sound/usb/card.c
|
||||||
|
+++ b/sound/usb/card.c
|
||||||
|
@@ -382,6 +382,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,
|
@@ -0,0 +1,80 @@
|
|||||||
|
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
index 58bd91539..9c0dac199 100644
|
||||||
|
--- a/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rk3288.dtsi
|
||||||
|
@@ -153,6 +153,75 @@
|
||||||
|
opp-hz = /bits/ 64 <1608000000>;
|
||||||
|
opp-microvolt = <1350000>;
|
||||||
|
};
|
||||||
|
+ 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;
|
||||||
|
+ };
|
||||||
|
};
|
||||||
|
|
||||||
|
amba {
|
@@ -0,0 +1,23 @@
|
|||||||
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
index a907d7b06..ec71996c7 100644
|
||||||
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||||
|
@@ -619,13 +619,17 @@ BRCMF_FW_DEF(4354, "brcmfmac4354-sdio");
|
||||||
|
BRCMF_FW_DEF(4356, "brcmfmac4356-sdio");
|
||||||
|
BRCMF_FW_DEF(4373, "brcmfmac4373-sdio");
|
||||||
|
|
||||||
|
+/* AMPAK */
|
||||||
|
+BRCMF_FW_DEF(AP6330, "brcmfmac-ap6330-sdio");
|
||||||
|
+
|
||||||
|
static const struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
|
||||||
|
BRCMF_FW_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
|
||||||
|
BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0x0000001F, 43241B0),
|
||||||
|
BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0x00000020, 43241B4),
|
||||||
|
BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0xFFFFFFC0, 43241B5),
|
||||||
|
BRCMF_FW_ENTRY(BRCM_CC_4329_CHIP_ID, 0xFFFFFFFF, 4329),
|
||||||
|
- BRCMF_FW_ENTRY(BRCM_CC_4330_CHIP_ID, 0xFFFFFFFF, 4330),
|
||||||
|
+ BRCMF_FW_ENTRY(BRCM_CC_4330_CHIP_ID, 0xFFFFFFEF, 4330),
|
||||||
|
+ BRCMF_FW_ENTRY(BRCM_CC_4330_CHIP_ID, 0x10, AP6330),
|
||||||
|
BRCMF_FW_ENTRY(BRCM_CC_4334_CHIP_ID, 0xFFFFFFFF, 4334),
|
||||||
|
BRCMF_FW_ENTRY(BRCM_CC_43340_CHIP_ID, 0xFFFFFFFF, 43340),
|
||||||
|
BRCMF_FW_ENTRY(BRCM_CC_43341_CHIP_ID, 0xFFFFFFFF, 43340),
|
@@ -0,0 +1,13 @@
|
|||||||
|
diff --git a/arch/arm/boot/dts/rk3288-tinker.dtsi b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
index 01be2bca9..5439e29e0 100644
|
||||||
|
--- a/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
+++ b/arch/arm/boot/dts/rk3288-tinker.dtsi
|
||||||
|
@@ -64,7 +64,7 @@
|
||||||
|
sound {
|
||||||
|
compatible = "simple-audio-card";
|
||||||
|
simple-audio-card,format = "i2s";
|
||||||
|
- simple-audio-card,name = "rockchip,tinker-codec";
|
||||||
|
+ simple-audio-card,name = "DW-I2S-HDMI";
|
||||||
|
simple-audio-card,mclk-fs = <512>;
|
||||||
|
|
||||||
|
simple-audio-card,codec {
|
@@ -0,0 +1,19 @@
|
|||||||
|
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
|
||||||
|
index 5bd58b95d..48ebe081f 100644
|
||||||
|
--- a/drivers/mmc/core/core.c
|
||||||
|
+++ b/drivers/mmc/core/core.c
|
||||||
|
@@ -1684,6 +1684,14 @@ void mmc_power_off(struct mmc_host *host)
|
||||||
|
if (host->ios.power_mode == MMC_POWER_OFF)
|
||||||
|
return;
|
||||||
|
|
||||||
|
+ mmc_set_initial_signal_voltage(host);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * This delay should be sufficient to allow the power supply
|
||||||
|
+ * to reach the minimum voltage.
|
||||||
|
+ */
|
||||||
|
+ mmc_delay(host->ios.power_delay_ms);
|
||||||
|
+
|
||||||
|
mmc_pwrseq_power_off(host);
|
||||||
|
|
||||||
|
host->ios.clock = 0;
|
@@ -0,0 +1,22 @@
|
|||||||
|
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
|
||||||
|
index a98dee2ae..d3cef7033 100644
|
||||||
|
--- a/arch/arm/boot/dts/Makefile
|
||||||
|
+++ b/arch/arm/boot/dts/Makefile
|
||||||
|
@@ -916,17 +916,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += \
|
||||||
|
rk3288-rock2-square.dtb \
|
||||||
|
rk3288-tinker.dtb \
|
||||||
|
rk3288-tinker-s.dtb \
|
||||||
|
- rk3288-veyron-brain.dtb \
|
||||||
|
- rk3288-veyron-fievel.dtb \
|
||||||
|
- rk3288-veyron-jaq.dtb \
|
||||||
|
- rk3288-veyron-jerry.dtb \
|
||||||
|
- rk3288-veyron-mickey.dtb \
|
||||||
|
- rk3288-veyron-mighty.dtb \
|
||||||
|
- rk3288-veyron-minnie.dtb \
|
||||||
|
- rk3288-veyron-pinky.dtb \
|
||||||
|
- rk3288-veyron-speedy.dtb \
|
||||||
|
- rk3288-veyron-tiger.dtb \
|
||||||
|
rk3288-vyasa.dtb
|
||||||
|
dtb-$(CONFIG_ARCH_S3C24XX) += \
|
||||||
|
s3c2416-smdk2416.dtb
|
||||||
|
dtb-$(CONFIG_ARCH_S3C64XX) += \
|
@@ -0,0 +1,37 @@
|
|||||||
|
From cd1aac268ff58eea28153bbabfb33abc2df52b1f Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <cd1aac268ff58eea28153bbabfb33abc2df52b1f.1602103621.git.stefan@agner.ch>
|
||||||
|
From: Pascal Vizeli <pvizeli@syshack.ch>
|
||||||
|
Date: Fri, 24 Apr 2020 12:41:50 +0000
|
||||||
|
Subject: [PATCH 1/4] SPL: modify load address of U-Boot
|
||||||
|
|
||||||
|
Default load address of U-Boot is at sector 16384, which is where HAOS
|
||||||
|
has its first partition. Use 0x2000 (8192) instead.
|
||||||
|
|
||||||
|
Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch>
|
||||||
|
Signed-off-by: Stefan Agner <stefan@agner.ch>
|
||||||
|
---
|
||||||
|
configs/tinker-rk3288_defconfig | 1 +
|
||||||
|
configs/tinker-s-rk3288_defconfig | 1 +
|
||||||
|
2 files changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/configs/tinker-rk3288_defconfig b/configs/tinker-rk3288_defconfig
|
||||||
|
index d459c7f50d..e0682ed479 100644
|
||||||
|
--- a/configs/tinker-rk3288_defconfig
|
||||||
|
+++ b/configs/tinker-rk3288_defconfig
|
||||||
|
@@ -88,3 +88,4 @@ CONFIG_VIDEO_ROCKCHIP=y
|
||||||
|
CONFIG_DISPLAY_ROCKCHIP_HDMI=y
|
||||||
|
CONFIG_CMD_DHRYSTONE=y
|
||||||
|
CONFIG_ERRNO_STR=y
|
||||||
|
+CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x2000
|
||||||
|
diff --git a/configs/tinker-s-rk3288_defconfig b/configs/tinker-s-rk3288_defconfig
|
||||||
|
index 68411d863b..1a285baf73 100644
|
||||||
|
--- a/configs/tinker-s-rk3288_defconfig
|
||||||
|
+++ b/configs/tinker-s-rk3288_defconfig
|
||||||
|
@@ -90,3 +90,4 @@ CONFIG_DISPLAY_ROCKCHIP_HDMI=y
|
||||||
|
CONFIG_CONSOLE_SCROLL_LINES=10
|
||||||
|
CONFIG_CMD_DHRYSTONE=y
|
||||||
|
CONFIG_ERRNO_STR=y
|
||||||
|
+CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x2000
|
||||||
|
--
|
||||||
|
2.28.0
|
||||||
|
|
@@ -0,0 +1,55 @@
|
|||||||
|
From d49ad12ee89d0d64f1f594bcad7de0e4f9631add Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <d49ad12ee89d0d64f1f594bcad7de0e4f9631add.1602103621.git.stefan@agner.ch>
|
||||||
|
In-Reply-To: <cd1aac268ff58eea28153bbabfb33abc2df52b1f.1602103621.git.stefan@agner.ch>
|
||||||
|
References: <cd1aac268ff58eea28153bbabfb33abc2df52b1f.1602103621.git.stefan@agner.ch>
|
||||||
|
From: Stefan Agner <stefan@agner.ch>
|
||||||
|
Date: Fri, 4 Sep 2020 15:40:55 +0200
|
||||||
|
Subject: [PATCH 2/4] rockchip: dts: tinker: move i2c node to shared device
|
||||||
|
tree
|
||||||
|
|
||||||
|
The I2C EEPROM is present on Tinker Board S as well. Move the i2c node
|
||||||
|
to the shared, U-Boot specific rk3288-tinker-u-boot.dtsi device tree.
|
||||||
|
|
||||||
|
Cc: Jonas Karlman <jonas@kwiboo.se>
|
||||||
|
Signed-off-by: Stefan Agner <stefan@agner.ch>
|
||||||
|
---
|
||||||
|
arch/arm/dts/rk3288-tinker-u-boot.dtsi | 7 +++++++
|
||||||
|
arch/arm/dts/rk3288-tinker.dts | 7 -------
|
||||||
|
2 files changed, 7 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/dts/rk3288-tinker-u-boot.dtsi b/arch/arm/dts/rk3288-tinker-u-boot.dtsi
|
||||||
|
index 732aa4f91f..3d169906fd 100644
|
||||||
|
--- a/arch/arm/dts/rk3288-tinker-u-boot.dtsi
|
||||||
|
+++ b/arch/arm/dts/rk3288-tinker-u-boot.dtsi
|
||||||
|
@@ -17,6 +17,13 @@
|
||||||
|
rockchip,sdram-params = <0x20d266a4 0x5b6 2 533000000 6 9 0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
+&i2c2 {
|
||||||
|
+ m24c08@50 {
|
||||||
|
+ compatible = "at,24c08", "i2c-eeprom";
|
||||||
|
+ reg = <0x50>;
|
||||||
|
+ };
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
&pinctrl {
|
||||||
|
u-boot,dm-pre-reloc;
|
||||||
|
};
|
||||||
|
diff --git a/arch/arm/dts/rk3288-tinker.dts b/arch/arm/dts/rk3288-tinker.dts
|
||||||
|
index 4b8405fd82..338670123b 100644
|
||||||
|
--- a/arch/arm/dts/rk3288-tinker.dts
|
||||||
|
+++ b/arch/arm/dts/rk3288-tinker.dts
|
||||||
|
@@ -35,10 +35,3 @@
|
||||||
|
vbus-supply = <&vcc5v0_host>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
-
|
||||||
|
-&i2c2 {
|
||||||
|
- m24c08@50 {
|
||||||
|
- compatible = "at,24c08", "i2c-eeprom";
|
||||||
|
- reg = <0x50>;
|
||||||
|
- };
|
||||||
|
-};
|
||||||
|
--
|
||||||
|
2.28.0
|
||||||
|
|
@@ -0,0 +1,34 @@
|
|||||||
|
From 07a02625ba95f68ba670b4c1cc98567acb390195 Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <07a02625ba95f68ba670b4c1cc98567acb390195.1602103621.git.stefan@agner.ch>
|
||||||
|
In-Reply-To: <cd1aac268ff58eea28153bbabfb33abc2df52b1f.1602103621.git.stefan@agner.ch>
|
||||||
|
References: <cd1aac268ff58eea28153bbabfb33abc2df52b1f.1602103621.git.stefan@agner.ch>
|
||||||
|
From: Stefan Agner <stefan@agner.ch>
|
||||||
|
Date: Fri, 4 Sep 2020 15:44:38 +0200
|
||||||
|
Subject: [PATCH 3/4] rockchip: dts: tinker: remove unnecessary node
|
||||||
|
|
||||||
|
The property reg-shift with the same value is present in the base
|
||||||
|
device tree already. Remove unnecessary node from rk3288-tinker.dts.
|
||||||
|
|
||||||
|
Signed-off-by: Stefan Agner <stefan@agner.ch>
|
||||||
|
---
|
||||||
|
arch/arm/dts/rk3288-tinker.dts | 4 ----
|
||||||
|
1 file changed, 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/dts/rk3288-tinker.dts b/arch/arm/dts/rk3288-tinker.dts
|
||||||
|
index 338670123b..8b1848c310 100644
|
||||||
|
--- a/arch/arm/dts/rk3288-tinker.dts
|
||||||
|
+++ b/arch/arm/dts/rk3288-tinker.dts
|
||||||
|
@@ -27,10 +27,6 @@
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
-&uart2 {
|
||||||
|
- reg-shift = <2>;
|
||||||
|
-};
|
||||||
|
-
|
||||||
|
&usb_host1 {
|
||||||
|
vbus-supply = <&vcc5v0_host>;
|
||||||
|
status = "okay";
|
||||||
|
--
|
||||||
|
2.28.0
|
||||||
|
|
@@ -0,0 +1,68 @@
|
|||||||
|
From 549d98c233b2a8b7cd4b0d4eb9652ad60a8a0f75 Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <549d98c233b2a8b7cd4b0d4eb9652ad60a8a0f75.1602103621.git.stefan@agner.ch>
|
||||||
|
In-Reply-To: <cd1aac268ff58eea28153bbabfb33abc2df52b1f.1602103621.git.stefan@agner.ch>
|
||||||
|
References: <cd1aac268ff58eea28153bbabfb33abc2df52b1f.1602103621.git.stefan@agner.ch>
|
||||||
|
From: Pascal Vizeli <pvizeli@syshack.ch>
|
||||||
|
Date: Fri, 24 Apr 2020 11:37:55 +0000
|
||||||
|
Subject: [PATCH 4/4] pmic: enable LDO2 vcc33_mipi at bootup
|
||||||
|
|
||||||
|
Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch>
|
||||||
|
---
|
||||||
|
board/rockchip/tinker_rk3288/tinker-rk3288.c | 37 ++++++++++++++++++++
|
||||||
|
1 file changed, 37 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/board/rockchip/tinker_rk3288/tinker-rk3288.c b/board/rockchip/tinker_rk3288/tinker-rk3288.c
|
||||||
|
index f85209c649..6fa1bb0c66 100644
|
||||||
|
--- a/board/rockchip/tinker_rk3288/tinker-rk3288.c
|
||||||
|
+++ b/board/rockchip/tinker_rk3288/tinker-rk3288.c
|
||||||
|
@@ -13,6 +13,7 @@
|
||||||
|
#include <netdev.h>
|
||||||
|
#include <asm/arch-rockchip/bootrom.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
+#include <power/regulator.h>
|
||||||
|
|
||||||
|
static int get_ethaddr_from_eeprom(u8 *addr)
|
||||||
|
{
|
||||||
|
@@ -48,3 +49,39 @@ int mmc_get_env_dev(void)
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+#ifdef CONFIG_DM_PMIC
|
||||||
|
+static int rockchip_set_regulator_on(const char *name, uint uv)
|
||||||
|
+{
|
||||||
|
+ struct udevice *dev;
|
||||||
|
+ int ret;
|
||||||
|
+
|
||||||
|
+ ret = regulator_get_by_platname(name, &dev);
|
||||||
|
+ if (ret) {
|
||||||
|
+ debug("%s: Cannot find regulator %s\n", __func__, name);
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
+ ret = regulator_set_value(dev, uv);
|
||||||
|
+ if (ret) {
|
||||||
|
+ debug("%s: Cannot set regulator %s\n", __func__, name);
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
+ ret = regulator_set_enable(dev, 1);
|
||||||
|
+ if (ret) {
|
||||||
|
+ debug("%s: Cannot enable regulator %s\n", __func__, name);
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int power_init_board(void)
|
||||||
|
+{
|
||||||
|
+ int ret = rockchip_set_regulator_on("vcc33_mipi", 3300000);
|
||||||
|
+ if (ret)
|
||||||
|
+ return ret;
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+#endif
|
||||||
|
--
|
||||||
|
2.28.0
|
||||||
|
|
73
buildroot-external/board/asus/tinker/uboot-boot.ush
Normal file
73
buildroot-external/board/asus/tinker/uboot-boot.ush
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
|
||||||
|
part start mmc ${devnum} 6 mmc_env
|
||||||
|
mmc dev ${devnum}
|
||||||
|
setenv loadbootstate " \
|
||||||
|
echo 'loading env...'; \
|
||||||
|
mmc read ${ramdisk_addr_r} ${mmc_env} 0x40; \
|
||||||
|
env import -c ${ramdisk_addr_r} 0x8000;"
|
||||||
|
|
||||||
|
setenv storebootstate " \
|
||||||
|
echo 'storing env...'; \
|
||||||
|
env export -c -s 0x8000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT MACHINE_ID; \
|
||||||
|
mmc write ${ramdisk_addr_r} ${mmc_env} 0x40;"
|
||||||
|
|
||||||
|
run loadbootstate
|
||||||
|
test -n "${BOOT_ORDER}" || setenv BOOT_ORDER "A B"
|
||||||
|
test -n "${BOOT_A_LEFT}" || setenv BOOT_A_LEFT 3
|
||||||
|
test -n "${BOOT_B_LEFT}" || setenv BOOT_B_LEFT 3
|
||||||
|
|
||||||
|
# HassOS bootargs
|
||||||
|
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor systemd.machine_id=${MACHINE_ID} cgroup_enable=memory fsck.repair=yes"
|
||||||
|
|
||||||
|
# HassOS system A/B
|
||||||
|
setenv bootargs_a "root=PARTUUID=8d3d53e3-6d49-4c38-8349-aff6859e82fd rootfstype=squashfs ro rootwait"
|
||||||
|
setenv bootargs_b "root=PARTUUID=a3ec664e-32ce-4665-95ea-7ae90ce9aa20 rootfstype=squashfs ro rootwait"
|
||||||
|
|
||||||
|
# Load extraargs
|
||||||
|
fileenv mmc ${devnum}:1 ${ramdisk_addr_r} cmdline.txt cmdline
|
||||||
|
|
||||||
|
# Load device tree
|
||||||
|
if test "$devnum" = "0"; then
|
||||||
|
fatload mmc ${devnum}:1 ${fdt_addr_r} rk3288-tinker-s.dtb
|
||||||
|
else
|
||||||
|
fatload mmc ${devnum}:1 ${fdt_addr_r} rk3288-tinker.dtb
|
||||||
|
fi
|
||||||
|
|
||||||
|
setenv bootargs
|
||||||
|
for BOOT_SLOT in "${BOOT_ORDER}"; do
|
||||||
|
if test "x${bootargs}" != "x"; then
|
||||||
|
# skip remaining slots
|
||||||
|
elif test "x${BOOT_SLOT}" = "xA"; then
|
||||||
|
if test ${BOOT_A_LEFT} -gt 0; then
|
||||||
|
setexpr BOOT_A_LEFT ${BOOT_A_LEFT} - 1
|
||||||
|
echo "Trying to boot slot A, ${BOOT_A_LEFT} attempts remaining. Loading kernel ..."
|
||||||
|
if ext4load mmc ${devnum}:2 ${kernel_addr_r} zImage; then
|
||||||
|
setenv bootargs "${bootargs_hassos} ${bootargs_a} rauc.slot=A ${cmdline}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
elif test "x${BOOT_SLOT}" = "xB"; then
|
||||||
|
if test ${BOOT_B_LEFT} -gt 0; then
|
||||||
|
setexpr BOOT_B_LEFT ${BOOT_B_LEFT} - 1
|
||||||
|
echo "Trying to boot slot B, ${BOOT_B_LEFT} attempts remaining. Loading kernel ..."
|
||||||
|
if ext4load mmc ${devnum}:4 ${kernel_addr_r} zImage; then
|
||||||
|
setenv bootargs "${bootargs_hassos} ${bootargs_b} rauc.slot=B ${cmdline}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if test -n "${bootargs}"; then
|
||||||
|
run storebootstate
|
||||||
|
else
|
||||||
|
echo "No valid slot found, resetting tries to 3"
|
||||||
|
setenv BOOT_A_LEFT 3
|
||||||
|
setenv BOOT_B_LEFT 3
|
||||||
|
run storebootstate
|
||||||
|
reset
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Starting kernel"
|
||||||
|
bootz ${kernel_addr_r} - ${fdt_addr_r}
|
||||||
|
|
||||||
|
echo "Boot failed, resetting..."
|
||||||
|
reset
|
2
buildroot-external/board/asus/tinker/uboot.config
Normal file
2
buildroot-external/board/asus/tinker/uboot.config
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# CONFIG_USB_STORAGE is not set
|
||||||
|
# CONFIG_DOS_PARTITION is not set
|
6737
buildroot-external/board/hardkernel/kernel-amlogic.config
Normal file
6737
buildroot-external/board/hardkernel/kernel-amlogic.config
Normal file
File diff suppressed because it is too large
Load Diff
27
buildroot-external/board/hardkernel/odroid-c2/hassos-hook.sh
Executable file
27
buildroot-external/board/hardkernel/odroid-c2/hassos-hook.sh
Executable file
@@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# shellcheck disable=SC2155
|
||||||
|
|
||||||
|
function hassos_pre_image() {
|
||||||
|
local BOOT_DATA="$(path_boot_dir)"
|
||||||
|
local BL1="${BINARIES_DIR}/bl1.bin.hardkernel"
|
||||||
|
local UBOOT_GXBB="${BINARIES_DIR}/u-boot.gxbb"
|
||||||
|
local SPL_IMG="$(path_spl_img)"
|
||||||
|
|
||||||
|
cp "${BINARIES_DIR}/boot.scr" "${BOOT_DATA}/boot.scr"
|
||||||
|
cp "${BINARIES_DIR}/meson-gxbb-odroidc2.dtb" "${BOOT_DATA}/meson-gxbb-odroidc2.dtb"
|
||||||
|
|
||||||
|
echo "console=tty0 console=ttyAML0,115200n8" > "${BOOT_DATA}/cmdline.txt"
|
||||||
|
|
||||||
|
# SPL
|
||||||
|
create_spl_image
|
||||||
|
|
||||||
|
dd if="${BL1}" of="${SPL_IMG}" conv=notrunc bs=1 count=440
|
||||||
|
dd if="${BL1}" of="${SPL_IMG}" conv=notrunc bs=512 skip=1 seek=1
|
||||||
|
dd if="${UBOOT_GXBB}" of="${SPL_IMG}" conv=notrunc bs=512 seek=97
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function hassos_post_image() {
|
||||||
|
convert_disk_image_xz
|
||||||
|
}
|
||||||
|
|
10
buildroot-external/board/hardkernel/odroid-c2/meta
Normal file
10
buildroot-external/board/hardkernel/odroid-c2/meta
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
BOARD_ID=odroid-c2
|
||||||
|
BOARD_NAME="Hardkernel Odroid-C2"
|
||||||
|
CHASSIS=embedded
|
||||||
|
BOOTLOADER=uboot
|
||||||
|
KERNEL_FILE=Image
|
||||||
|
BOOT_SYS=mbr
|
||||||
|
BOOT_SPL=true
|
||||||
|
BOOT_ENV_SIZE=0x2000
|
||||||
|
SUPERVISOR_MACHINE=odroid-c2
|
||||||
|
SUPERVISOR_ARCH=aarch64
|
80
buildroot-external/board/hardkernel/odroid-c2/uboot-boot.ush
Normal file
80
buildroot-external/board/hardkernel/odroid-c2/uboot-boot.ush
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
|
||||||
|
###########################################
|
||||||
|
|
||||||
|
part start mmc ${devnum} 9 mmc_env
|
||||||
|
mmc dev ${devnum}
|
||||||
|
setenv loadbootstate " \
|
||||||
|
echo 'loading env...'; \
|
||||||
|
mmc read ${ramdisk_addr_r} ${mmc_env} 0x10; \
|
||||||
|
env import -c ${ramdisk_addr_r} 0x2000;"
|
||||||
|
|
||||||
|
setenv storebootstate " \
|
||||||
|
echo 'storing env...'; \
|
||||||
|
env export -c -s 0x2000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT MACHINE_ID; \
|
||||||
|
mmc write ${ramdisk_addr_r} ${mmc_env} 0x10;"
|
||||||
|
|
||||||
|
run loadbootstate
|
||||||
|
test -n "${BOOT_ORDER}" || setenv BOOT_ORDER "A B"
|
||||||
|
test -n "${BOOT_A_LEFT}" || setenv BOOT_A_LEFT 3
|
||||||
|
test -n "${BOOT_B_LEFT}" || setenv BOOT_B_LEFT 3
|
||||||
|
|
||||||
|
# HassOS bootargs
|
||||||
|
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor systemd.machine_id=${MACHINE_ID} cgroup_enable=memory fsck.repair=yes"
|
||||||
|
|
||||||
|
# HassOS system A/B
|
||||||
|
setenv bootargs_a "root=PARTUUID=48617373-06 rootfstype=squashfs ro rootwait"
|
||||||
|
setenv bootargs_b "root=PARTUUID=48617373-08 rootfstype=squashfs ro rootwait"
|
||||||
|
|
||||||
|
# Load extraargs
|
||||||
|
fileenv mmc ${devnum}:1 ${ramdisk_addr_r} cmdline.txt cmdline
|
||||||
|
fatload mmc ${devnum}:1 ${fdt_addr_r} meson-gxbb-odroidc2.dtb
|
||||||
|
|
||||||
|
# logical volumes get numbered after physical ones.
|
||||||
|
# 1. boot
|
||||||
|
# 2. Extended partition
|
||||||
|
# 3. Overlay
|
||||||
|
# 4. Data
|
||||||
|
# 5. KernelA
|
||||||
|
# 6. SystemA
|
||||||
|
# 7. KernelB
|
||||||
|
# 8. SystemB
|
||||||
|
# 9. BootInfo
|
||||||
|
setenv bootargs
|
||||||
|
for BOOT_SLOT in "${BOOT_ORDER}"; do
|
||||||
|
if test "x${bootargs}" != "x"; then
|
||||||
|
# skip remaining slots
|
||||||
|
elif test "x${BOOT_SLOT}" = "xA"; then
|
||||||
|
if test ${BOOT_A_LEFT} -gt 0; then
|
||||||
|
setexpr BOOT_A_LEFT ${BOOT_A_LEFT} - 1
|
||||||
|
echo "Trying to boot slot A, ${BOOT_A_LEFT} attempts remaining. Loading kernel ..."
|
||||||
|
if ext4load mmc ${devnum}:5 ${kernel_addr_r} Image; then
|
||||||
|
setenv bootargs "${bootargs_hassos} ${bootargs_a} rauc.slot=A ${cmdline}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
elif test "x${BOOT_SLOT}" = "xB"; then
|
||||||
|
if test ${BOOT_B_LEFT} -gt 0; then
|
||||||
|
setexpr BOOT_B_LEFT ${BOOT_B_LEFT} - 1
|
||||||
|
echo "Trying to boot slot B, ${BOOT_B_LEFT} attempts remaining. Loading kernel ..."
|
||||||
|
if ext4load mmc ${devnum}:7 ${kernel_addr_r} Image; then
|
||||||
|
setenv bootargs "${bootargs_hassos} ${bootargs_b} rauc.slot=B ${cmdline}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if test -n "${bootargs}"; then
|
||||||
|
run storebootstate
|
||||||
|
else
|
||||||
|
echo "No valid slot found, resetting tries to 3"
|
||||||
|
setenv BOOT_A_LEFT 3
|
||||||
|
setenv BOOT_B_LEFT 3
|
||||||
|
run storebootstate
|
||||||
|
reset
|
||||||
|
fi
|
||||||
|
|
||||||
|
printenv bootargs
|
||||||
|
echo "Starting kernel"
|
||||||
|
booti ${kernel_addr_r} - ${fdt_addr_r}
|
||||||
|
|
||||||
|
echo "Boot failed, resetting..."
|
||||||
|
reset
|
@@ -0,0 +1,4 @@
|
|||||||
|
CONFIG_DOS_PARTITION=y
|
||||||
|
# CONFIG_EFI_PARTITION is not set
|
||||||
|
# CONFIG_USB_STORAGE is not set
|
||||||
|
CONFIG_DISPLAY_BOARDINFO=y
|
23
buildroot-external/board/hardkernel/odroid-c4/hassos-hook.sh
Executable file
23
buildroot-external/board/hardkernel/odroid-c4/hassos-hook.sh
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# shellcheck disable=SC2155
|
||||||
|
|
||||||
|
function hassos_pre_image() {
|
||||||
|
local BOOT_DATA="$(path_boot_dir)"
|
||||||
|
local UBOOT_SM1="${BINARIES_DIR}/u-boot.sm1"
|
||||||
|
local SPL_IMG="$(path_spl_img)"
|
||||||
|
|
||||||
|
cp "${BINARIES_DIR}/boot.scr" "${BOOT_DATA}/boot.scr"
|
||||||
|
cp "${BINARIES_DIR}/meson-sm1-odroid-c4.dtb" "${BOOT_DATA}/meson-sm1-odroid-c4.dtb"
|
||||||
|
|
||||||
|
echo "console=tty0 console=ttyAML0,115200n8" > "${BOOT_DATA}/cmdline.txt"
|
||||||
|
|
||||||
|
# SPL
|
||||||
|
create_spl_image
|
||||||
|
|
||||||
|
dd if="${UBOOT_SM1}" of="${SPL_IMG}" conv=notrunc bs=512 seek=1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function hassos_post_image() {
|
||||||
|
convert_disk_image_xz
|
||||||
|
}
|
10
buildroot-external/board/hardkernel/odroid-c4/meta
Normal file
10
buildroot-external/board/hardkernel/odroid-c4/meta
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
BOARD_ID=odroid-c4
|
||||||
|
BOARD_NAME="Hardkernel Odroid-C4"
|
||||||
|
CHASSIS=embedded
|
||||||
|
BOOTLOADER=uboot
|
||||||
|
KERNEL_FILE=Image
|
||||||
|
BOOT_SYS=mbr
|
||||||
|
BOOT_SPL=true
|
||||||
|
BOOT_ENV_SIZE=0x2000
|
||||||
|
SUPERVISOR_MACHINE=odroid-c4
|
||||||
|
SUPERVISOR_ARCH=aarch64
|
80
buildroot-external/board/hardkernel/odroid-c4/uboot-boot.ush
Normal file
80
buildroot-external/board/hardkernel/odroid-c4/uboot-boot.ush
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
|
||||||
|
###########################################
|
||||||
|
|
||||||
|
part start mmc ${devnum} 9 mmc_env
|
||||||
|
mmc dev ${devnum}
|
||||||
|
setenv loadbootstate " \
|
||||||
|
echo 'loading env...'; \
|
||||||
|
mmc read ${ramdisk_addr_r} ${mmc_env} 0x10; \
|
||||||
|
env import -c ${ramdisk_addr_r} 0x2000;"
|
||||||
|
|
||||||
|
setenv storebootstate " \
|
||||||
|
echo 'storing env...'; \
|
||||||
|
env export -c -s 0x2000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT MACHINE_ID; \
|
||||||
|
mmc write ${ramdisk_addr_r} ${mmc_env} 0x10;"
|
||||||
|
|
||||||
|
run loadbootstate
|
||||||
|
test -n "${BOOT_ORDER}" || setenv BOOT_ORDER "A B"
|
||||||
|
test -n "${BOOT_A_LEFT}" || setenv BOOT_A_LEFT 3
|
||||||
|
test -n "${BOOT_B_LEFT}" || setenv BOOT_B_LEFT 3
|
||||||
|
|
||||||
|
# HassOS bootargs
|
||||||
|
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor systemd.machine_id=${MACHINE_ID} cgroup_enable=memory clk_ignore_unused usb-storage.quirks=0x2537:0x1066:u,0x2537:0x1068:u"
|
||||||
|
|
||||||
|
# HassOS system A/B
|
||||||
|
setenv bootargs_a "root=PARTUUID=48617373-06 rootfstype=squashfs ro rootwait"
|
||||||
|
setenv bootargs_b "root=PARTUUID=48617373-08 rootfstype=squashfs ro rootwait"
|
||||||
|
|
||||||
|
# Load extraargs
|
||||||
|
fileenv mmc ${devnum}:1 ${ramdisk_addr_r} cmdline.txt cmdline
|
||||||
|
fatload mmc ${devnum}:1 ${fdt_addr_r} meson-sm1-odroid-c4.dtb
|
||||||
|
|
||||||
|
# logical volumes get numbered after physical ones.
|
||||||
|
# 1. boot
|
||||||
|
# 2. Extended partition
|
||||||
|
# 3. Overlay
|
||||||
|
# 4. Data
|
||||||
|
# 5. KernelA
|
||||||
|
# 6. SystemA
|
||||||
|
# 7. KernelB
|
||||||
|
# 8. SystemB
|
||||||
|
# 9. BootInfo
|
||||||
|
setenv bootargs
|
||||||
|
for BOOT_SLOT in "${BOOT_ORDER}"; do
|
||||||
|
if test "x${bootargs}" != "x"; then
|
||||||
|
# skip remaining slots
|
||||||
|
elif test "x${BOOT_SLOT}" = "xA"; then
|
||||||
|
if test ${BOOT_A_LEFT} -gt 0; then
|
||||||
|
setexpr BOOT_A_LEFT ${BOOT_A_LEFT} - 1
|
||||||
|
echo "Trying to boot slot A, ${BOOT_A_LEFT} attempts remaining. Loading kernel ..."
|
||||||
|
if ext4load mmc ${devnum}:5 ${kernel_addr_r} Image; then
|
||||||
|
setenv bootargs "${bootargs_hassos} ${bootargs_a} rauc.slot=A ${cmdline}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
elif test "x${BOOT_SLOT}" = "xB"; then
|
||||||
|
if test ${BOOT_B_LEFT} -gt 0; then
|
||||||
|
setexpr BOOT_B_LEFT ${BOOT_B_LEFT} - 1
|
||||||
|
echo "Trying to boot slot B, ${BOOT_B_LEFT} attempts remaining. Loading kernel ..."
|
||||||
|
if ext4load mmc ${devnum}:7 ${kernel_addr_r} Image; then
|
||||||
|
setenv bootargs "${bootargs_hassos} ${bootargs_b} rauc.slot=B ${cmdline}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if test -n "${bootargs}"; then
|
||||||
|
run storebootstate
|
||||||
|
else
|
||||||
|
echo "No valid slot found, resetting tries to 3"
|
||||||
|
setenv BOOT_A_LEFT 3
|
||||||
|
setenv BOOT_B_LEFT 3
|
||||||
|
run storebootstate
|
||||||
|
reset
|
||||||
|
fi
|
||||||
|
|
||||||
|
printenv bootargs
|
||||||
|
echo "Starting kernel"
|
||||||
|
booti ${kernel_addr_r} - ${fdt_addr_r}
|
||||||
|
|
||||||
|
echo "Boot failed, resetting..."
|
||||||
|
reset
|
@@ -0,0 +1,4 @@
|
|||||||
|
CONFIG_DOS_PARTITION=y
|
||||||
|
# CONFIG_EFI_PARTITION is not set
|
||||||
|
# CONFIG_USB_STORAGE is not set
|
||||||
|
CONFIG_DISPLAY_BOARDINFO=y
|
24
buildroot-external/board/hardkernel/odroid-n2/hassos-hook.sh
Executable file
24
buildroot-external/board/hardkernel/odroid-n2/hassos-hook.sh
Executable file
@@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# shellcheck disable=SC2155
|
||||||
|
|
||||||
|
function hassos_pre_image() {
|
||||||
|
local BOOT_DATA="$(path_boot_dir)"
|
||||||
|
local UBOOT_G12B="${BINARIES_DIR}/u-boot.g12b"
|
||||||
|
local SPL_IMG="$(path_spl_img)"
|
||||||
|
|
||||||
|
cp "${BINARIES_DIR}/boot.scr" "${BOOT_DATA}/boot.scr"
|
||||||
|
cp "${BINARIES_DIR}"/*.dtb "${BOOT_DATA}/"
|
||||||
|
|
||||||
|
echo "console=tty0 console=ttyAML0,115200n8" > "${BOOT_DATA}/cmdline.txt"
|
||||||
|
|
||||||
|
# SPL
|
||||||
|
create_spl_image
|
||||||
|
|
||||||
|
dd if="${UBOOT_G12B}" of="${SPL_IMG}" conv=notrunc bs=512 seek=1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function hassos_post_image() {
|
||||||
|
convert_disk_image_xz
|
||||||
|
}
|
||||||
|
|
@@ -0,0 +1 @@
|
|||||||
|
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
|
10
buildroot-external/board/hardkernel/odroid-n2/meta
Normal file
10
buildroot-external/board/hardkernel/odroid-n2/meta
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
BOARD_ID=odroid-n2
|
||||||
|
BOARD_NAME="Hardkernel Odroid-N2"
|
||||||
|
CHASSIS=embedded
|
||||||
|
BOOTLOADER=uboot
|
||||||
|
KERNEL_FILE=Image
|
||||||
|
BOOT_SYS=mbr
|
||||||
|
BOOT_SPL=true
|
||||||
|
BOOT_ENV_SIZE=0x2000
|
||||||
|
SUPERVISOR_MACHINE=odroid-n2
|
||||||
|
SUPERVISOR_ARCH=aarch64
|
84
buildroot-external/board/hardkernel/odroid-n2/uboot-boot.ush
Normal file
84
buildroot-external/board/hardkernel/odroid-n2/uboot-boot.ush
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
|
||||||
|
###########################################
|
||||||
|
|
||||||
|
part start mmc ${devnum} 9 mmc_env
|
||||||
|
mmc dev ${devnum}
|
||||||
|
setenv loadbootstate " \
|
||||||
|
echo 'loading env...'; \
|
||||||
|
mmc read ${ramdisk_addr_r} ${mmc_env} 0x10; \
|
||||||
|
env import -c ${ramdisk_addr_r} 0x2000;"
|
||||||
|
|
||||||
|
setenv storebootstate " \
|
||||||
|
echo 'storing env...'; \
|
||||||
|
env export -c -s 0x2000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT MACHINE_ID; \
|
||||||
|
mmc write ${ramdisk_addr_r} ${mmc_env} 0x10;"
|
||||||
|
|
||||||
|
run loadbootstate
|
||||||
|
test -n "${BOOT_ORDER}" || setenv BOOT_ORDER "A B"
|
||||||
|
test -n "${BOOT_A_LEFT}" || setenv BOOT_A_LEFT 3
|
||||||
|
test -n "${BOOT_B_LEFT}" || setenv BOOT_B_LEFT 3
|
||||||
|
|
||||||
|
# HassOS bootargs
|
||||||
|
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor systemd.machine_id=${MACHINE_ID} cgroup_enable=memory fsck.repair=yes"
|
||||||
|
|
||||||
|
# HassOS system A/B
|
||||||
|
setenv bootargs_a "root=PARTUUID=48617373-06 rootfstype=squashfs ro rootwait"
|
||||||
|
setenv bootargs_b "root=PARTUUID=48617373-08 rootfstype=squashfs ro rootwait"
|
||||||
|
|
||||||
|
# Load extraargs
|
||||||
|
fileenv mmc ${devnum}:1 ${ramdisk_addr_r} cmdline.txt cmdline
|
||||||
|
if test "${board_rev}" = "c"; then
|
||||||
|
fatload mmc ${devnum}:1 ${fdt_addr_r} meson-g12b-odroid-n2-plus.dtb
|
||||||
|
else
|
||||||
|
fatload mmc ${devnum}:1 ${fdt_addr_r} meson-g12b-odroid-n2.dtb
|
||||||
|
fi
|
||||||
|
|
||||||
|
# logical volumes get numbered after physical ones.
|
||||||
|
# 1. boot
|
||||||
|
# 2. Extended partition
|
||||||
|
# 3. Overlay
|
||||||
|
# 4. Data
|
||||||
|
# 5. KernelA
|
||||||
|
# 6. SystemA
|
||||||
|
# 7. KernelB
|
||||||
|
# 8. SystemB
|
||||||
|
# 9. BootInfo
|
||||||
|
setenv bootargs
|
||||||
|
for BOOT_SLOT in "${BOOT_ORDER}"; do
|
||||||
|
if test "x${bootargs}" != "x"; then
|
||||||
|
# skip remaining slots
|
||||||
|
elif test "x${BOOT_SLOT}" = "xA"; then
|
||||||
|
if test ${BOOT_A_LEFT} -gt 0; then
|
||||||
|
setexpr BOOT_A_LEFT ${BOOT_A_LEFT} - 1
|
||||||
|
echo "Trying to boot slot A, ${BOOT_A_LEFT} attempts remaining. Loading kernel ..."
|
||||||
|
if ext4load mmc ${devnum}:5 ${kernel_addr_r} Image; then
|
||||||
|
setenv bootargs "${bootargs_hassos} ${bootargs_a} rauc.slot=A ${cmdline}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
elif test "x${BOOT_SLOT}" = "xB"; then
|
||||||
|
if test ${BOOT_B_LEFT} -gt 0; then
|
||||||
|
setexpr BOOT_B_LEFT ${BOOT_B_LEFT} - 1
|
||||||
|
echo "Trying to boot slot B, ${BOOT_B_LEFT} attempts remaining. Loading kernel ..."
|
||||||
|
if ext4load mmc ${devnum}:7 ${kernel_addr_r} Image; then
|
||||||
|
setenv bootargs "${bootargs_hassos} ${bootargs_b} rauc.slot=B ${cmdline}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if test -n "${bootargs}"; then
|
||||||
|
run storebootstate
|
||||||
|
else
|
||||||
|
echo "No valid slot found, resetting tries to 3"
|
||||||
|
setenv BOOT_A_LEFT 3
|
||||||
|
setenv BOOT_B_LEFT 3
|
||||||
|
run storebootstate
|
||||||
|
reset
|
||||||
|
fi
|
||||||
|
|
||||||
|
printenv bootargs
|
||||||
|
echo "Starting kernel"
|
||||||
|
booti ${kernel_addr_r} - ${fdt_addr_r}
|
||||||
|
|
||||||
|
echo "Boot failed, resetting..."
|
||||||
|
reset
|
@@ -0,0 +1,4 @@
|
|||||||
|
CONFIG_DOS_PARTITION=y
|
||||||
|
# CONFIG_EFI_PARTITION is not set
|
||||||
|
# CONFIG_USB_STORAGE is not set
|
||||||
|
CONFIG_DISPLAY_BOARDINFO=y
|
@@ -0,0 +1,30 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# shellcheck disable=SC2155
|
||||||
|
|
||||||
|
function hassos_pre_image() {
|
||||||
|
local BOOT_DATA="$(path_boot_dir)"
|
||||||
|
local BL1="${BINARIES_DIR}/bl1.bin.hardkernel"
|
||||||
|
local BL2="${BINARIES_DIR}/bl2.bin.hardkernel.720k_uboot"
|
||||||
|
local BLTZ="${BINARIES_DIR}/tzsw.bin.hardkernel"
|
||||||
|
local UBOOT="${BINARIES_DIR}/u-boot.bin"
|
||||||
|
local spl_img="$(path_spl_img)"
|
||||||
|
|
||||||
|
cp "${BINARIES_DIR}/boot.scr" "${BOOT_DATA}/boot.scr"
|
||||||
|
cp "${BINARIES_DIR}/exynos5422-odroidxu4.dtb" "${BOOT_DATA}/exynos5422-odroidxu4.dtb"
|
||||||
|
|
||||||
|
echo "console=tty1 console=ttySAC2,115200" > "${BOOT_DATA}/cmdline.txt"
|
||||||
|
|
||||||
|
# SPL
|
||||||
|
create_spl_image
|
||||||
|
|
||||||
|
dd if="${BL1}" of="${spl_img}" conv=notrunc bs=512 seek=1
|
||||||
|
dd if="${BL2}" of="${spl_img}" conv=notrunc bs=512 seek=31
|
||||||
|
dd if="${UBOOT}" of="${spl_img}" conv=notrunc bs=512 seek=63
|
||||||
|
dd if="${BLTZ}" of="${spl_img}" conv=notrunc bs=512 seek=1503
|
||||||
|
dd if=/dev/zero of="${spl_img}" conv=notrunc bs=512 count=32 seek=2015
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function hassos_post_image() {
|
||||||
|
convert_disk_image_xz
|
||||||
|
}
|
10
buildroot-external/board/hardkernel/odroid-xu4/meta
Normal file
10
buildroot-external/board/hardkernel/odroid-xu4/meta
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
BOARD_ID=odroid-xu4
|
||||||
|
BOARD_NAME="Hardkernel Odroid-XU4"
|
||||||
|
CHASSIS=embedded
|
||||||
|
BOOTLOADER=uboot
|
||||||
|
KERNEL_FILE=zImage
|
||||||
|
BOOT_SYS=mbr
|
||||||
|
BOOT_SPL=true
|
||||||
|
BOOT_ENV_SIZE=0x4000
|
||||||
|
SUPERVISOR_MACHINE=odroid-xu
|
||||||
|
SUPERVISOR_ARCH=armv7
|
@@ -0,0 +1,84 @@
|
|||||||
|
|
||||||
|
###########################################
|
||||||
|
|
||||||
|
part start mmc ${devnum} 9 mmc_env
|
||||||
|
mmc dev ${devnum}
|
||||||
|
|
||||||
|
# Note that import is performed twice for backwards compatability.
|
||||||
|
setenv loadbootstate " \
|
||||||
|
echo 'loading env...'; \
|
||||||
|
mmc read ${ramdisk_addr_r} ${mmc_env} 0x20; \
|
||||||
|
env import -c ${ramdisk_addr_r} 0x4000;"
|
||||||
|
|
||||||
|
setenv storebootstate " \
|
||||||
|
echo 'storing env...'; \
|
||||||
|
env export -c -s 0x4000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT MACHINE_ID; \
|
||||||
|
mmc write ${ramdisk_addr_r} ${mmc_env} 0x20;"
|
||||||
|
|
||||||
|
run loadbootstate
|
||||||
|
test -n "${BOOT_ORDER}" || setenv BOOT_ORDER "A B"
|
||||||
|
test -n "${BOOT_A_LEFT}" || setenv BOOT_A_LEFT 3
|
||||||
|
test -n "${BOOT_B_LEFT}" || setenv BOOT_B_LEFT 3
|
||||||
|
|
||||||
|
# HassOS bootargs
|
||||||
|
setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor systemd.machine_id=${MACHINE_ID} cgroup_enable=memory fsck.repair=yes"
|
||||||
|
|
||||||
|
# HassOS system A/B
|
||||||
|
setenv bootargs_a "root=PARTUUID=48617373-06 rootfstype=squashfs ro rootwait"
|
||||||
|
setenv bootargs_b "root=PARTUUID=48617373-08 rootfstype=squashfs ro rootwait"
|
||||||
|
|
||||||
|
# Load extraargs
|
||||||
|
fileenv mmc ${devnum}:1 ${ramdisk_addr_r} cmdline.txt cmdline
|
||||||
|
fatload mmc ${devnum}:1 ${fdt_addr_r} exynos5422-odroidxu4.dtb
|
||||||
|
fdt addr ${fdt_addr_r}
|
||||||
|
|
||||||
|
|
||||||
|
# logical volumes get numbered after physical ones.
|
||||||
|
# 1. boot
|
||||||
|
# 2. Extended partition
|
||||||
|
# 3. Overlay
|
||||||
|
# 4. Data
|
||||||
|
# 5. KernelA
|
||||||
|
# 6. SystemA
|
||||||
|
# 7. KernelB
|
||||||
|
# 8. SystemB
|
||||||
|
# 9. BootInfo
|
||||||
|
setenv bootargs
|
||||||
|
for BOOT_SLOT in "${BOOT_ORDER}"; do
|
||||||
|
if test "x${bootargs}" != "x"; then
|
||||||
|
# skip remaining slots
|
||||||
|
elif test "x${BOOT_SLOT}" = "xA"; then
|
||||||
|
if test ${BOOT_A_LEFT} -gt 0; then
|
||||||
|
setexpr BOOT_A_LEFT ${BOOT_A_LEFT} - 1
|
||||||
|
echo "Trying to boot slot A, ${BOOT_A_LEFT} attempts remaining. Loading kernel ..."
|
||||||
|
if ext4load mmc ${devnum}:5 ${kernel_addr_r} zImage; then
|
||||||
|
setenv bootargs "${bootargs_hassos} ${bootargs_a} rauc.slot=A ${cmdline}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
elif test "x${BOOT_SLOT}" = "xB"; then
|
||||||
|
if test ${BOOT_B_LEFT} -gt 0; then
|
||||||
|
setexpr BOOT_B_LEFT ${BOOT_B_LEFT} - 1
|
||||||
|
echo "Trying to boot slot B, ${BOOT_B_LEFT} attempts remaining. Loading kernel ..."
|
||||||
|
if ext4load mmc ${devnum}:7 ${kernel_addr_r} zImage; then
|
||||||
|
setenv bootargs "${bootargs_hassos} ${bootargs_b} rauc.slot=B ${cmdline}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if test -n "${bootargs}"; then
|
||||||
|
run storebootstate
|
||||||
|
else
|
||||||
|
echo "No valid slot found, resetting tries to 3"
|
||||||
|
setenv BOOT_A_LEFT 3
|
||||||
|
setenv BOOT_B_LEFT 3
|
||||||
|
run storebootstate
|
||||||
|
reset
|
||||||
|
fi
|
||||||
|
|
||||||
|
printenv bootargs
|
||||||
|
echo "Starting kernel"
|
||||||
|
bootz ${kernel_addr_r} - ${fdt_addr_r}
|
||||||
|
|
||||||
|
echo "Boot failed, resetting..."
|
||||||
|
reset
|
@@ -0,0 +1,3 @@
|
|||||||
|
CONFIG_DOS_PARTITION=y
|
||||||
|
# CONFIG_EFI_PARTITION is not set
|
||||||
|
# CONFIG_USB_STORAGE is not set
|
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,36 @@
|
|||||||
|
From 258f03fa4fd897a61b5861df1f809e234711dd49 Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <258f03fa4fd897a61b5861df1f809e234711dd49.1606829302.git.stefan@agner.ch>
|
||||||
|
In-Reply-To: <9d2a2b44e67b0ef49e534c097e8b5e3e1173b033.1606829302.git.stefan@agner.ch>
|
||||||
|
References: <9d2a2b44e67b0ef49e534c097e8b5e3e1173b033.1606829302.git.stefan@agner.ch>
|
||||||
|
From: Christian Hewitt <christianshewitt@gmail.com>
|
||||||
|
Date: Tue, 15 Sep 2020 17:24:31 +0200
|
||||||
|
Subject: [PATCH 2/7] dt-bindings: arm: amlogic: add support for the ODROID-N2+
|
||||||
|
|
||||||
|
HardKernel ODROID-N2+ uses a revised Amlogic S922X v2 chip that supports
|
||||||
|
higher cpu clock speeds than the original ODROID-N2.
|
||||||
|
|
||||||
|
Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
|
||||||
|
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
|
||||||
|
Signed-off-by: Kevin Hilman <khilman@baylibre.com>
|
||||||
|
Acked-by: Rob Herring <robh@kernel.org>
|
||||||
|
Acked-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||||||
|
Link: https://lore.kernel.org/r/20200915152432.30616-3-narmstrong@baylibre.com
|
||||||
|
---
|
||||||
|
Documentation/devicetree/bindings/arm/amlogic.yaml | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/Documentation/devicetree/bindings/arm/amlogic.yaml b/Documentation/devicetree/bindings/arm/amlogic.yaml
|
||||||
|
index 5eba9f48823e..12ba8d074370 100644
|
||||||
|
--- a/Documentation/devicetree/bindings/arm/amlogic.yaml
|
||||||
|
+++ b/Documentation/devicetree/bindings/arm/amlogic.yaml
|
||||||
|
@@ -153,6 +153,7 @@ properties:
|
||||||
|
- azw,gtking
|
||||||
|
- azw,gtking-pro
|
||||||
|
- hardkernel,odroid-n2
|
||||||
|
+ - hardkernel,odroid-n2-plus
|
||||||
|
- khadas,vim3
|
||||||
|
- ugoos,am6
|
||||||
|
- const: amlogic,s922x
|
||||||
|
--
|
||||||
|
2.29.2
|
||||||
|
|
@@ -0,0 +1,78 @@
|
|||||||
|
From 6cfaddae585e5a87c5253c932b8d58e153159f6b Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <6cfaddae585e5a87c5253c932b8d58e153159f6b.1606829302.git.stefan@agner.ch>
|
||||||
|
In-Reply-To: <9d2a2b44e67b0ef49e534c097e8b5e3e1173b033.1606829302.git.stefan@agner.ch>
|
||||||
|
References: <9d2a2b44e67b0ef49e534c097e8b5e3e1173b033.1606829302.git.stefan@agner.ch>
|
||||||
|
From: Christian Hewitt <christianshewitt@gmail.com>
|
||||||
|
Date: Tue, 15 Sep 2020 17:24:32 +0200
|
||||||
|
Subject: [PATCH 3/7] arm64: dts: meson: add support for the ODROID-N2+
|
||||||
|
|
||||||
|
HardKernel ODROID-N2+ uses an Amlogic S922X rev. C chip capable of higher
|
||||||
|
clock speeds than the original ODROID-N2.
|
||||||
|
|
||||||
|
The rev. C support a slighly higher VDDCPU_A & VDDCPU_B voltages and supports
|
||||||
|
the same OPPs as the Amlogic A311D SoC from the same G12B family.
|
||||||
|
|
||||||
|
Suggested-by: Dongjin Kim <tobetter@hardkernel.com>
|
||||||
|
Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
|
||||||
|
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
|
||||||
|
Signed-off-by: Kevin Hilman <khilman@baylibre.com>
|
||||||
|
Acked-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
|
||||||
|
Link: https://lore.kernel.org/r/20200915152432.30616-4-narmstrong@baylibre.com
|
||||||
|
---
|
||||||
|
arch/arm64/boot/dts/amlogic/Makefile | 1 +
|
||||||
|
.../dts/amlogic/meson-g12b-odroid-n2-plus.dts | 31 +++++++++++++++++++
|
||||||
|
2 files changed, 32 insertions(+)
|
||||||
|
create mode 100644 arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus.dts
|
||||||
|
|
||||||
|
diff --git a/arch/arm64/boot/dts/amlogic/Makefile b/arch/arm64/boot/dts/amlogic/Makefile
|
||||||
|
index 4e2239ffcaa5..b0b3d6791499 100644
|
||||||
|
--- a/arch/arm64/boot/dts/amlogic/Makefile
|
||||||
|
+++ b/arch/arm64/boot/dts/amlogic/Makefile
|
||||||
|
@@ -8,6 +8,7 @@ dtb-$(CONFIG_ARCH_MESON) += meson-g12b-gtking-pro.dtb
|
||||||
|
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-a311d-khadas-vim3.dtb
|
||||||
|
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-s922x-khadas-vim3.dtb
|
||||||
|
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-odroid-n2.dtb
|
||||||
|
+dtb-$(CONFIG_ARCH_MESON) += meson-g12b-odroid-n2-plus.dtb
|
||||||
|
dtb-$(CONFIG_ARCH_MESON) += meson-g12b-ugoos-am6.dtb
|
||||||
|
dtb-$(CONFIG_ARCH_MESON) += meson-gxbb-kii-pro.dtb
|
||||||
|
dtb-$(CONFIG_ARCH_MESON) += meson-gxbb-nanopi-k2.dtb
|
||||||
|
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus.dts
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000000..5de2815ba99d
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus.dts
|
||||||
|
@@ -0,0 +1,31 @@
|
||||||
|
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||||
|
+/*
|
||||||
|
+ * Copyright (c) 2019 BayLibre, SAS
|
||||||
|
+ * Author: Neil Armstrong <narmstrong@baylibre.com>
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+/dts-v1/;
|
||||||
|
+
|
||||||
|
+/* The Amlogic S922X Rev. C supports the same OPPs as the A311D variant */
|
||||||
|
+#include "meson-g12b-a311d.dtsi"
|
||||||
|
+#include "meson-g12b-odroid-n2.dtsi"
|
||||||
|
+
|
||||||
|
+/ {
|
||||||
|
+ compatible = "hardkernel,odroid-n2-plus", "amlogic,s922x", "amlogic,g12b";
|
||||||
|
+ model = "Hardkernel ODROID-N2Plus";
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&vddcpu_a {
|
||||||
|
+ regulator-min-microvolt = <680000>;
|
||||||
|
+ regulator-max-microvolt = <1040000>;
|
||||||
|
+
|
||||||
|
+ pwms = <&pwm_AO_cd 1 1500 0>;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+&vddcpu_b {
|
||||||
|
+ regulator-min-microvolt = <680000>;
|
||||||
|
+ regulator-max-microvolt = <1040000>;
|
||||||
|
+
|
||||||
|
+ pwms = <&pwm_AO_cd 1 1500 0>;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
--
|
||||||
|
2.29.2
|
||||||
|
|
@@ -0,0 +1,42 @@
|
|||||||
|
From 47f804dc970e2b1f71f1f032a0da2ef3b8315be0 Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <47f804dc970e2b1f71f1f032a0da2ef3b8315be0.1606829302.git.stefan@agner.ch>
|
||||||
|
In-Reply-To: <9d2a2b44e67b0ef49e534c097e8b5e3e1173b033.1606829302.git.stefan@agner.ch>
|
||||||
|
References: <9d2a2b44e67b0ef49e534c097e8b5e3e1173b033.1606829302.git.stefan@agner.ch>
|
||||||
|
From: Jerome Brunet <jbrunet@baylibre.com>
|
||||||
|
Date: Fri, 23 Oct 2020 11:41:39 +0200
|
||||||
|
Subject: [PATCH 4/7] arm64: dts: meson: odroid-n2 plus: fix vddcpu_a pwm
|
||||||
|
|
||||||
|
On the odroid N2 plus, cpufreq is not available due to an error on the cpu
|
||||||
|
regulators. vddcpu a and b get the same PWM. The one provided to vddcpu A
|
||||||
|
is incorrect. Because vddcpu B PWM is busy the regulator cannot register:
|
||||||
|
|
||||||
|
> pwm-regulator regulator-vddcpu-b: Failed to get PWM: -16
|
||||||
|
|
||||||
|
Like on the odroid n2, use PWM A out of GPIOE_2 for vddcpu A to fix the
|
||||||
|
problem
|
||||||
|
|
||||||
|
Fixes: 98d24896ee11 ("arm64: dts: meson: add support for the ODROID-N2+")
|
||||||
|
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
|
||||||
|
Acked-by: Neil Armstrong <narmstrong@baylibre.com>
|
||||||
|
Signed-off-by: Kevin Hilman <khilman@baylibre.com>
|
||||||
|
Link: https://lore.kernel.org/r/20201023094139.809379-1-jbrunet@baylibre.com
|
||||||
|
---
|
||||||
|
arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus.dts | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus.dts
|
||||||
|
index 5de2815ba99d..ce1198ad34e4 100644
|
||||||
|
--- a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus.dts
|
||||||
|
+++ b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2-plus.dts
|
||||||
|
@@ -19,7 +19,7 @@ &vddcpu_a {
|
||||||
|
regulator-min-microvolt = <680000>;
|
||||||
|
regulator-max-microvolt = <1040000>;
|
||||||
|
|
||||||
|
- pwms = <&pwm_AO_cd 1 1500 0>;
|
||||||
|
+ pwms = <&pwm_ab 0 1500 0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&vddcpu_b {
|
||||||
|
--
|
||||||
|
2.29.2
|
||||||
|
|
@@ -0,0 +1,52 @@
|
|||||||
|
From 2c15ad491233a80d61c811a944b86067e2e74686 Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <2c15ad491233a80d61c811a944b86067e2e74686.1606829302.git.stefan@agner.ch>
|
||||||
|
In-Reply-To: <9d2a2b44e67b0ef49e534c097e8b5e3e1173b033.1606829302.git.stefan@agner.ch>
|
||||||
|
References: <9d2a2b44e67b0ef49e534c097e8b5e3e1173b033.1606829302.git.stefan@agner.ch>
|
||||||
|
From: Stefan Agner <stefan@agner.ch>
|
||||||
|
Date: Mon, 16 Nov 2020 23:11:02 +0100
|
||||||
|
Subject: [PATCH 5/7] arm64: dts: meson: add RTC to ODROID-N2 boards
|
||||||
|
|
||||||
|
All ODROID-N2 boards come with a NXP PCF8563TS RTC connected to I2C bus
|
||||||
|
3. This is the RTC which is connected to the on-board RTC backup battery.
|
||||||
|
Use it as primary RTC.
|
||||||
|
|
||||||
|
Signed-off-by: Stefan Agner <stefan@agner.ch>
|
||||||
|
---
|
||||||
|
.../boot/dts/amlogic/meson-g12b-odroid-n2.dtsi | 14 ++++++++++++++
|
||||||
|
1 file changed, 14 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi
|
||||||
|
index 6982632ae646..40390feba053 100644
|
||||||
|
--- a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi
|
||||||
|
+++ b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi
|
||||||
|
@@ -13,6 +13,8 @@ / {
|
||||||
|
aliases {
|
||||||
|
serial0 = &uart_AO;
|
||||||
|
ethernet0 = ðmac;
|
||||||
|
+ rtc0 = &board_rtc;
|
||||||
|
+ rtc1 = &vrtc;
|
||||||
|
};
|
||||||
|
|
||||||
|
dioo2133: audio-amplifier-0 {
|
||||||
|
@@ -471,6 +473,18 @@ hdmi_tx_tmds_out: endpoint {
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
+&i2c3 {
|
||||||
|
+ status = "okay";
|
||||||
|
+ pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>;
|
||||||
|
+ pinctrl-names = "default";
|
||||||
|
+ clock-frequency = <400000>;
|
||||||
|
+
|
||||||
|
+ board_rtc: rtc@51 {
|
||||||
|
+ compatible = "nxp,pcf8563";
|
||||||
|
+ reg = <0x51>;
|
||||||
|
+ };
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
&ir {
|
||||||
|
status = "okay";
|
||||||
|
pinctrl-0 = <&remote_input_ao_pins>;
|
||||||
|
--
|
||||||
|
2.29.2
|
||||||
|
|
@@ -0,0 +1,41 @@
|
|||||||
|
From 35d2de7b27bc3f4bc2d977fb6b7671d9ba889496 Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <35d2de7b27bc3f4bc2d977fb6b7671d9ba889496.1606829302.git.stefan@agner.ch>
|
||||||
|
In-Reply-To: <9d2a2b44e67b0ef49e534c097e8b5e3e1173b033.1606829302.git.stefan@agner.ch>
|
||||||
|
References: <9d2a2b44e67b0ef49e534c097e8b5e3e1173b033.1606829302.git.stefan@agner.ch>
|
||||||
|
From: Stefan Agner <stefan@agner.ch>
|
||||||
|
Date: Tue, 1 Dec 2020 00:32:23 +0100
|
||||||
|
Subject: [PATCH 6/7] arm64: dts: meson: g12b: odroid-n2: fix PHY deassert
|
||||||
|
timing requirements
|
||||||
|
|
||||||
|
According to the datasheet (Rev. 1.9) the RTL8211F requires at least
|
||||||
|
72ms "for internal circuits settling time" before accessing the PHY
|
||||||
|
egisters. This fixes an issue where the Ethernet link doesn't come up
|
||||||
|
when using ip link set down/up:
|
||||||
|
[ 29.360965] meson8b-dwmac ff3f0000.ethernet eth0: Link is Down
|
||||||
|
[ 34.569012] meson8b-dwmac ff3f0000.ethernet eth0: PHY [0.0:00] driver [RTL8211F Gigabit Ethernet] (irq=31)
|
||||||
|
[ 34.676732] meson8b-dwmac ff3f0000.ethernet: Failed to reset the dma
|
||||||
|
[ 34.678874] meson8b-dwmac ff3f0000.ethernet eth0: stmmac_hw_setup: DMA engine initialization failed
|
||||||
|
[ 34.687850] meson8b-dwmac ff3f0000.ethernet eth0: stmmac_open: Hw setup failed
|
||||||
|
|
||||||
|
Fixes: 658e4129bb81 ("arm64: dts: meson: g12b: odroid-n2: add the Ethernet PHY reset line")
|
||||||
|
Signed-off-by: Stefan Agner <stefan@agner.ch>
|
||||||
|
---
|
||||||
|
arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi
|
||||||
|
index 40390feba053..445d90d25aa3 100644
|
||||||
|
--- a/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi
|
||||||
|
+++ b/arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dtsi
|
||||||
|
@@ -415,7 +415,7 @@ external_phy: ethernet-phy@0 {
|
||||||
|
max-speed = <1000>;
|
||||||
|
|
||||||
|
reset-assert-us = <10000>;
|
||||||
|
- reset-deassert-us = <30000>;
|
||||||
|
+ reset-deassert-us = <80000>;
|
||||||
|
reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>;
|
||||||
|
|
||||||
|
interrupt-parent = <&gpio_intc>;
|
||||||
|
--
|
||||||
|
2.29.2
|
||||||
|
|
@@ -0,0 +1,152 @@
|
|||||||
|
From 40e8e7e28c44993e352195b359c4d4540bfb2105 Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <40e8e7e28c44993e352195b359c4d4540bfb2105.1606829302.git.stefan@agner.ch>
|
||||||
|
In-Reply-To: <9d2a2b44e67b0ef49e534c097e8b5e3e1173b033.1606829302.git.stefan@agner.ch>
|
||||||
|
References: <9d2a2b44e67b0ef49e534c097e8b5e3e1173b033.1606829302.git.stefan@agner.ch>
|
||||||
|
From: Stefan Agner <stefan@agner.ch>
|
||||||
|
Date: Tue, 1 Dec 2020 00:32:23 +0100
|
||||||
|
Subject: [PATCH 7/7] arm64: dts: meson: fix PHY deassert timing requirements
|
||||||
|
|
||||||
|
According to the datasheet (Rev. 1.9) the RTL8211F requires at least
|
||||||
|
72ms "for internal circuits settling time" before accessing the PHY
|
||||||
|
egisters. This fixes an issue seen on ODROID-C2 where the Ethernet
|
||||||
|
link doesn't come up when using ip link set down/up:
|
||||||
|
[ 6630.714855] meson8b-dwmac c9410000.ethernet eth0: Link is Down
|
||||||
|
[ 6630.785775] meson8b-dwmac c9410000.ethernet eth0: PHY [stmmac-0:00] driver [RTL8211F Gigabit Ethernet] (irq=36)
|
||||||
|
[ 6630.893071] meson8b-dwmac c9410000.ethernet: Failed to reset the dma
|
||||||
|
[ 6630.893800] meson8b-dwmac c9410000.ethernet eth0: stmmac_hw_setup: DMA engine initialization failed
|
||||||
|
[ 6630.902835] meson8b-dwmac c9410000.ethernet eth0: stmmac_open: Hw setup failed
|
||||||
|
|
||||||
|
Fixes: f29cabf240ed ("arm64: dts: meson: use the generic Ethernet PHY reset GPIO bindings")
|
||||||
|
Signed-off-by: Stefan Agner <stefan@agner.ch>
|
||||||
|
---
|
||||||
|
arch/arm64/boot/dts/amlogic/meson-gxbb-nanopi-k2.dts | 2 +-
|
||||||
|
arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts | 2 +-
|
||||||
|
arch/arm64/boot/dts/amlogic/meson-gxbb-vega-s95.dtsi | 2 +-
|
||||||
|
arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi | 2 +-
|
||||||
|
arch/arm64/boot/dts/amlogic/meson-gxl-s905d-p230.dts | 2 +-
|
||||||
|
arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dts | 2 +-
|
||||||
|
arch/arm64/boot/dts/amlogic/meson-gxm-nexbox-a1.dts | 2 +-
|
||||||
|
arch/arm64/boot/dts/amlogic/meson-gxm-q200.dts | 2 +-
|
||||||
|
arch/arm64/boot/dts/amlogic/meson-gxm-rbox-pro.dts | 2 +-
|
||||||
|
9 files changed, 9 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb-nanopi-k2.dts b/arch/arm64/boot/dts/amlogic/meson-gxbb-nanopi-k2.dts
|
||||||
|
index 7be3e354093b..de27beafe9db 100644
|
||||||
|
--- a/arch/arm64/boot/dts/amlogic/meson-gxbb-nanopi-k2.dts
|
||||||
|
+++ b/arch/arm64/boot/dts/amlogic/meson-gxbb-nanopi-k2.dts
|
||||||
|
@@ -165,7 +165,7 @@ eth_phy0: ethernet-phy@0 {
|
||||||
|
reg = <0>;
|
||||||
|
|
||||||
|
reset-assert-us = <10000>;
|
||||||
|
- reset-deassert-us = <30000>;
|
||||||
|
+ reset-deassert-us = <80000>;
|
||||||
|
reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
|
interrupt-parent = <&gpio_intc>;
|
||||||
|
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts b/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts
|
||||||
|
index 70fcfb7b0683..50de1d01e565 100644
|
||||||
|
--- a/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts
|
||||||
|
+++ b/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts
|
||||||
|
@@ -200,7 +200,7 @@ eth_phy0: ethernet-phy@0 {
|
||||||
|
reg = <0>;
|
||||||
|
|
||||||
|
reset-assert-us = <10000>;
|
||||||
|
- reset-deassert-us = <30000>;
|
||||||
|
+ reset-deassert-us = <80000>;
|
||||||
|
reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
|
interrupt-parent = <&gpio_intc>;
|
||||||
|
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb-vega-s95.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxbb-vega-s95.dtsi
|
||||||
|
index 222ee8069cfa..9b0b81f191f1 100644
|
||||||
|
--- a/arch/arm64/boot/dts/amlogic/meson-gxbb-vega-s95.dtsi
|
||||||
|
+++ b/arch/arm64/boot/dts/amlogic/meson-gxbb-vega-s95.dtsi
|
||||||
|
@@ -126,7 +126,7 @@ eth_phy0: ethernet-phy@0 {
|
||||||
|
reg = <0>;
|
||||||
|
|
||||||
|
reset-assert-us = <10000>;
|
||||||
|
- reset-deassert-us = <30000>;
|
||||||
|
+ reset-deassert-us = <80000>;
|
||||||
|
reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
|
interrupt-parent = <&gpio_intc>;
|
||||||
|
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
|
||||||
|
index ad812854a107..a350fee1264d 100644
|
||||||
|
--- a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
|
||||||
|
+++ b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
|
||||||
|
@@ -147,7 +147,7 @@ eth_phy0: ethernet-phy@0 {
|
||||||
|
reg = <0>;
|
||||||
|
|
||||||
|
reset-assert-us = <10000>;
|
||||||
|
- reset-deassert-us = <30000>;
|
||||||
|
+ reset-deassert-us = <80000>;
|
||||||
|
reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
|
interrupt-parent = <&gpio_intc>;
|
||||||
|
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxl-s905d-p230.dts b/arch/arm64/boot/dts/amlogic/meson-gxl-s905d-p230.dts
|
||||||
|
index b08c4537f260..b2ab05c22090 100644
|
||||||
|
--- a/arch/arm64/boot/dts/amlogic/meson-gxl-s905d-p230.dts
|
||||||
|
+++ b/arch/arm64/boot/dts/amlogic/meson-gxl-s905d-p230.dts
|
||||||
|
@@ -82,7 +82,7 @@ external_phy: ethernet-phy@0 {
|
||||||
|
|
||||||
|
/* External PHY reset is shared with internal PHY Led signal */
|
||||||
|
reset-assert-us = <10000>;
|
||||||
|
- reset-deassert-us = <30000>;
|
||||||
|
+ reset-deassert-us = <80000>;
|
||||||
|
reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
|
interrupt-parent = <&gpio_intc>;
|
||||||
|
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dts b/arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dts
|
||||||
|
index bff8ec2c1c70..e38d9e50caa7 100644
|
||||||
|
--- a/arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dts
|
||||||
|
+++ b/arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dts
|
||||||
|
@@ -194,7 +194,7 @@ external_phy: ethernet-phy@0 {
|
||||||
|
reg = <0>;
|
||||||
|
|
||||||
|
reset-assert-us = <10000>;
|
||||||
|
- reset-deassert-us = <30000>;
|
||||||
|
+ reset-deassert-us = <80000>;
|
||||||
|
reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
|
interrupt-parent = <&gpio_intc>;
|
||||||
|
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxm-nexbox-a1.dts b/arch/arm64/boot/dts/amlogic/meson-gxm-nexbox-a1.dts
|
||||||
|
index 83eca3af44ce..dfa7a37a1281 100644
|
||||||
|
--- a/arch/arm64/boot/dts/amlogic/meson-gxm-nexbox-a1.dts
|
||||||
|
+++ b/arch/arm64/boot/dts/amlogic/meson-gxm-nexbox-a1.dts
|
||||||
|
@@ -112,7 +112,7 @@ external_phy: ethernet-phy@0 {
|
||||||
|
max-speed = <1000>;
|
||||||
|
|
||||||
|
reset-assert-us = <10000>;
|
||||||
|
- reset-deassert-us = <30000>;
|
||||||
|
+ reset-deassert-us = <80000>;
|
||||||
|
reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxm-q200.dts b/arch/arm64/boot/dts/amlogic/meson-gxm-q200.dts
|
||||||
|
index ea45ae0c71b7..8edbfe040805 100644
|
||||||
|
--- a/arch/arm64/boot/dts/amlogic/meson-gxm-q200.dts
|
||||||
|
+++ b/arch/arm64/boot/dts/amlogic/meson-gxm-q200.dts
|
||||||
|
@@ -64,7 +64,7 @@ external_phy: ethernet-phy@0 {
|
||||||
|
|
||||||
|
/* External PHY reset is shared with internal PHY Led signal */
|
||||||
|
reset-assert-us = <10000>;
|
||||||
|
- reset-deassert-us = <30000>;
|
||||||
|
+ reset-deassert-us = <80000>;
|
||||||
|
reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
|
interrupt-parent = <&gpio_intc>;
|
||||||
|
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxm-rbox-pro.dts b/arch/arm64/boot/dts/amlogic/meson-gxm-rbox-pro.dts
|
||||||
|
index c89c9f846fb1..dde7cfe12cff 100644
|
||||||
|
--- a/arch/arm64/boot/dts/amlogic/meson-gxm-rbox-pro.dts
|
||||||
|
+++ b/arch/arm64/boot/dts/amlogic/meson-gxm-rbox-pro.dts
|
||||||
|
@@ -114,7 +114,7 @@ external_phy: ethernet-phy@0 {
|
||||||
|
max-speed = <1000>;
|
||||||
|
|
||||||
|
reset-assert-us = <10000>;
|
||||||
|
- reset-deassert-us = <30000>;
|
||||||
|
+ reset-deassert-us = <80000>;
|
||||||
|
reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
--
|
||||||
|
2.29.2
|
||||||
|
|
@@ -0,0 +1,51 @@
|
|||||||
|
From 526ccae8321b9b48925c44999611c3c5a374328e Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <526ccae8321b9b48925c44999611c3c5a374328e.1607542946.git.stefan@agner.ch>
|
||||||
|
From: Stefan Agner <stefan@agner.ch>
|
||||||
|
Date: Mon, 31 Aug 2020 13:40:18 +0200
|
||||||
|
Subject: [PATCH 1/3] ARM: meson: isolate loading of socinfo
|
||||||
|
|
||||||
|
Move loading of socinfo into a separate function so the value can be
|
||||||
|
reused later.
|
||||||
|
|
||||||
|
Signed-off-by: Stefan Agner <stefan@agner.ch>
|
||||||
|
---
|
||||||
|
arch/arm/mach-meson/board-info.c | 14 +++++++++++++-
|
||||||
|
1 file changed, 13 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/mach-meson/board-info.c b/arch/arm/mach-meson/board-info.c
|
||||||
|
index 3abb27e03b..c585b12ca5 100644
|
||||||
|
--- a/arch/arm/mach-meson/board-info.c
|
||||||
|
+++ b/arch/arm/mach-meson/board-info.c
|
||||||
|
@@ -126,7 +126,7 @@ static void print_board_model(void)
|
||||||
|
printf("Model: %s\n", model ? model : "Unknown");
|
||||||
|
}
|
||||||
|
|
||||||
|
-int show_board_info(void)
|
||||||
|
+static unsigned int get_socinfo(void)
|
||||||
|
{
|
||||||
|
struct regmap *regmap;
|
||||||
|
int nodeoffset, ret;
|
||||||
|
@@ -158,8 +158,20 @@ int show_board_info(void)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ return socinfo;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int show_board_info(void)
|
||||||
|
+{
|
||||||
|
+ unsigned int socinfo;
|
||||||
|
+
|
||||||
|
/* print board information */
|
||||||
|
print_board_model();
|
||||||
|
+
|
||||||
|
+ socinfo = get_socinfo();
|
||||||
|
+ if (!socinfo)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
printf("SoC: Amlogic Meson %s (%s) Revision %x:%x (%x:%x)\n",
|
||||||
|
socinfo_to_soc_id(socinfo),
|
||||||
|
socinfo_to_package_id(socinfo),
|
||||||
|
--
|
||||||
|
2.29.2
|
||||||
|
|
@@ -0,0 +1,82 @@
|
|||||||
|
From 2b2ad8c105cbb5fb48c3c5f0512c031f6533d522 Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <2b2ad8c105cbb5fb48c3c5f0512c031f6533d522.1607542946.git.stefan@agner.ch>
|
||||||
|
In-Reply-To: <526ccae8321b9b48925c44999611c3c5a374328e.1607542946.git.stefan@agner.ch>
|
||||||
|
References: <526ccae8321b9b48925c44999611c3c5a374328e.1607542946.git.stefan@agner.ch>
|
||||||
|
From: Pascal Vizeli <pvizeli@syshack.ch>
|
||||||
|
Date: Tue, 4 Aug 2020 13:50:57 +0000
|
||||||
|
Subject: [PATCH 2/3] meson: Add board_rev to env
|
||||||
|
|
||||||
|
Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch>
|
||||||
|
Signed-off-by: Stefan Agner <stefan@agner.ch>
|
||||||
|
---
|
||||||
|
arch/arm/include/asm/arch-meson/boot.h | 4 ++++
|
||||||
|
arch/arm/mach-meson/board-info.c | 12 ++++++++++++
|
||||||
|
board/amlogic/odroid-n2/odroid-n2.c | 5 +++++
|
||||||
|
3 files changed, 21 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/arch/arm/include/asm/arch-meson/boot.h b/arch/arm/include/asm/arch-meson/boot.h
|
||||||
|
index a90fe55081..c67d12d06c 100644
|
||||||
|
--- a/arch/arm/include/asm/arch-meson/boot.h
|
||||||
|
+++ b/arch/arm/include/asm/arch-meson/boot.h
|
||||||
|
@@ -7,6 +7,8 @@
|
||||||
|
#ifndef __MESON_BOOT_H__
|
||||||
|
#define __MESON_BOOT_H__
|
||||||
|
|
||||||
|
+#include <linux/types.h>
|
||||||
|
+
|
||||||
|
/* Boot device */
|
||||||
|
#define BOOT_DEVICE_RESERVED 0
|
||||||
|
#define BOOT_DEVICE_EMMC 1
|
||||||
|
@@ -17,4 +19,6 @@
|
||||||
|
|
||||||
|
int meson_get_boot_device(void);
|
||||||
|
|
||||||
|
+int meson_get_soc_rev(char *buff, size_t buff_len);
|
||||||
|
+
|
||||||
|
#endif /* __MESON_BOOT_H__ */
|
||||||
|
diff --git a/arch/arm/mach-meson/board-info.c b/arch/arm/mach-meson/board-info.c
|
||||||
|
index c585b12ca5..9dbb997281 100644
|
||||||
|
--- a/arch/arm/mach-meson/board-info.c
|
||||||
|
+++ b/arch/arm/mach-meson/board-info.c
|
||||||
|
@@ -182,3 +182,15 @@ int show_board_info(void)
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+int meson_get_soc_rev(char *buff, size_t buff_len)
|
||||||
|
+{
|
||||||
|
+ unsigned int socinfo;
|
||||||
|
+
|
||||||
|
+ socinfo = get_socinfo();
|
||||||
|
+ if (!socinfo)
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
+ /* Write SoC info */
|
||||||
|
+ return snprintf(buff, buff_len, "%x", socinfo_to_minor(socinfo));
|
||||||
|
+}
|
||||||
|
diff --git a/board/amlogic/odroid-n2/odroid-n2.c b/board/amlogic/odroid-n2/odroid-n2.c
|
||||||
|
index caf7fd6810..c2a191ba6a 100644
|
||||||
|
--- a/board/amlogic/odroid-n2/odroid-n2.c
|
||||||
|
+++ b/board/amlogic/odroid-n2/odroid-n2.c
|
||||||
|
@@ -12,6 +12,7 @@
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/arch/sm.h>
|
||||||
|
#include <asm/arch/eth.h>
|
||||||
|
+#include <asm/arch/boot.h>
|
||||||
|
|
||||||
|
#define EFUSE_MAC_OFFSET 20
|
||||||
|
#define EFUSE_MAC_SIZE 12
|
||||||
|
@@ -23,6 +24,10 @@ int misc_init_r(void)
|
||||||
|
char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
|
||||||
|
ssize_t len;
|
||||||
|
|
||||||
|
+ if (meson_get_soc_rev(tmp, sizeof(tmp)) > 0) {
|
||||||
|
+ env_set("board_rev", tmp);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
meson_eth_init(PHY_INTERFACE_MODE_RGMII, 0);
|
||||||
|
|
||||||
|
if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
|
||||||
|
--
|
||||||
|
2.29.2
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user