Compare commits
1548 Commits
v0.12.0-rc
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b80f554fd9 | ||
|
|
3d83e9546e | ||
|
|
232cd0b0f1 | ||
|
|
a22e4331e7 | ||
|
|
faab1de8b1 | ||
|
|
944fb35b70 | ||
|
|
ea07cc74ce | ||
|
|
607a16f20c | ||
|
|
4894527eec | ||
|
|
4c072f0d0a | ||
|
|
0f6616ac00 | ||
|
|
48f57a72ce | ||
|
|
b8cfd06368 | ||
|
|
231aa88ee5 | ||
|
|
49e75c74d5 | ||
|
|
bd17a59fd1 | ||
|
|
0e41ac862d | ||
|
|
b215fe8621 | ||
|
|
92dc88978a | ||
|
|
4e23bf155f | ||
|
|
e4c49d8605 | ||
|
|
22e1e1b33e | ||
|
|
092282c7d2 | ||
|
|
c3b4bcc6e6 | ||
|
|
a5a9121ad6 | ||
|
|
687dd5c5df | ||
|
|
0c6fe74351 | ||
|
|
5b3db97c42 | ||
|
|
84f8814003 | ||
|
|
7052573187 | ||
|
|
129e9d3005 | ||
|
|
aaceff81f0 | ||
|
|
9e1db0e8c7 | ||
|
|
22bad00b9b | ||
|
|
0e4d6d202a | ||
|
|
c11a325ed8 | ||
|
|
a02550bafa | ||
|
|
b164b65b3b | ||
|
|
e135ffe205 | ||
|
|
86bdd88282 | ||
|
|
0163d9ddba | ||
|
|
e85f9b2954 | ||
|
|
a7d31c87e1 | ||
|
|
2374db956b | ||
|
|
9b21a31eb7 | ||
|
|
2b986178cf | ||
|
|
8ee7cb12cf | ||
|
|
3c1bd50217 | ||
|
|
5151c98455 | ||
|
|
078a6b1f9f | ||
|
|
6eaf951b20 | ||
|
|
1967f85548 | ||
|
|
0f67341e15 | ||
|
|
eaa04836dc | ||
|
|
718eb22bfc | ||
|
|
b4518ab78b | ||
|
|
db34f6f0a7 | ||
|
|
92b482af50 | ||
|
|
95bd9093b1 | ||
|
|
294538f0d4 | ||
|
|
62f49b7fe2 | ||
|
|
8bc12d98e7 | ||
|
|
91799d0579 | ||
|
|
7d6f3ede0e | ||
|
|
c348b9f2d7 | ||
|
|
3ba83c76a2 | ||
|
|
bcfa2bc6b5 | ||
|
|
5e7182368e | ||
|
|
00e4fb653d | ||
|
|
b10372f0d2 | ||
|
|
70d4ac0395 | ||
|
|
f275432b27 | ||
|
|
b9e4016161 | ||
|
|
b36de4f539 | ||
|
|
eea1bb4d30 | ||
|
|
c60bb56bb6 | ||
|
|
f36ab02a80 | ||
|
|
22a7bda336 | ||
|
|
f9ec0ed51f | ||
|
|
ab718d66ce | ||
|
|
46f7b185a1 | ||
|
|
8f22bf7712 | ||
|
|
60d11a881f | ||
|
|
ea9afa9e3e | ||
|
|
50fdce21a0 | ||
|
|
7d688bc500 | ||
|
|
df14f58662 | ||
|
|
b074fea079 | ||
|
|
dab933b3ae | ||
|
|
c36f59d9b4 | ||
|
|
89ded3d2f0 | ||
|
|
2389c28ea8 | ||
|
|
28eb4c37b9 | ||
|
|
587c783103 | ||
|
|
74d0cff2fe | ||
|
|
8bd25e0329 | ||
|
|
daaf48b96f | ||
|
|
58eb7e31a6 | ||
|
|
cb6b803947 | ||
|
|
1dedd6918b | ||
|
|
6420e83aff | ||
|
|
e39ae004b0 | ||
|
|
0eecf4d21d | ||
|
|
c2fdc38d32 | ||
|
|
1ca34e23c0 | ||
|
|
5dad8a59d8 | ||
|
|
7f8eec108b | ||
|
|
ba12fb9b95 | ||
|
|
7025e3fe3d | ||
|
|
ad0ed194f5 | ||
|
|
67153cf3d5 | ||
|
|
4593222e85 | ||
|
|
df2eb07086 | ||
|
|
3e86eaaf7d | ||
|
|
41d5fcc0b1 | ||
|
|
21e345a2f7 | ||
|
|
2a0b9bbc28 | ||
|
|
57a0e31389 | ||
|
|
e440b0648f | ||
|
|
0e2f990c87 | ||
|
|
26507adfad | ||
|
|
8e11797618 | ||
|
|
41e165eee2 | ||
|
|
517fd8e4b5 | ||
|
|
4e3ec2474a | ||
|
|
5b4557c6f2 | ||
|
|
f8501461c1 | ||
|
|
6a5e4dc2a3 | ||
|
|
13a082fc7e | ||
|
|
19f5e20715 | ||
|
|
2f8ddc0835 | ||
|
|
5479c58d23 | ||
|
|
8115c28663 | ||
|
|
aa9ff8dc5e | ||
|
|
ac6972ba16 | ||
|
|
171454fffa | ||
|
|
fc8f939d95 | ||
|
|
181547327f | ||
|
|
eef37df3aa | ||
|
|
37dcf4359b | ||
|
|
a1c7cd4fef | ||
|
|
1ea763d23c | ||
|
|
7b6496db7e | ||
|
|
7487fade75 | ||
|
|
461af9b3ab | ||
|
|
aa6a071086 | ||
|
|
cd41947feb | ||
|
|
a247ff1223 | ||
|
|
5ff384be08 | ||
|
|
55e9160509 | ||
|
|
dc187298ea | ||
|
|
23fc7e9c96 | ||
|
|
709e635b39 | ||
|
|
d2aeb5fcc9 | ||
|
|
fcce5d52d9 | ||
|
|
586c8981b1 | ||
|
|
3e7a7092d4 | ||
|
|
5d8a142703 | ||
|
|
d044affba5 | ||
|
|
83052c86e9 | ||
|
|
3903c80480 | ||
|
|
0021ee2f5d | ||
|
|
4e78563a00 | ||
|
|
d7fb95d800 | ||
|
|
12ab80ab45 | ||
|
|
68b0f7bdff | ||
|
|
52ac91a73e | ||
|
|
8c41070415 | ||
|
|
be083909b7 | ||
|
|
ed9cf6d81d | ||
|
|
18734bcf95 | ||
|
|
ffdbdf6b03 | ||
|
|
f5ce311103 | ||
|
|
3483756cba | ||
|
|
4447fa4c98 | ||
|
|
31b2660152 | ||
|
|
2913dff98a | ||
|
|
ab8fb1d981 | ||
|
|
b4fb5a7baa | ||
|
|
a0eac82708 | ||
|
|
f354d259ff | ||
|
|
6d764f5b09 | ||
|
|
6127077613 | ||
|
|
da96d3d41b | ||
|
|
768b4084eb | ||
|
|
bd303d6a3d | ||
|
|
56141bb349 | ||
|
|
5754aebc49 | ||
|
|
ab22b0bf8f | ||
|
|
2bb3e52436 | ||
|
|
04c6a6ee0e | ||
|
|
52ea420dd2 | ||
|
|
1afb3e75f0 | ||
|
|
03b79387cc | ||
|
|
b8dc15f43b | ||
|
|
fe3c626b3f | ||
|
|
e4e0faeba6 | ||
|
|
22afaae7fa | ||
|
|
1ee0499cd8 | ||
|
|
a482b78941 | ||
|
|
c168761983 | ||
|
|
f5478eb112 | ||
|
|
c1cca2155b | ||
|
|
914b855780 | ||
|
|
165e578d2b | ||
|
|
88b9bd396d | ||
|
|
85542c1c5c | ||
|
|
557a2082b1 | ||
|
|
3fd9759415 | ||
|
|
1f5da25ed1 | ||
|
|
7c16c38eda | ||
|
|
910e6ba2f0 | ||
|
|
39ed0b0bba | ||
|
|
6d51e6b900 | ||
|
|
4805ecad76 | ||
|
|
382f067b6e | ||
|
|
34d76b805e | ||
|
|
5fa74d4ee8 | ||
|
|
8b43a967e5 | ||
|
|
04da6e2c62 | ||
|
|
2abf8daa80 | ||
|
|
e5888bda38 | ||
|
|
896738264e | ||
|
|
5bf6333313 | ||
|
|
32afb0ab04 | ||
|
|
9e2a11c2f2 | ||
|
|
c92cc6b570 | ||
|
|
f64421d07e | ||
|
|
4b311d3b8f | ||
|
|
78ea8c7fb4 | ||
|
|
981ae530fc | ||
|
|
fcbdab78c9 | ||
|
|
82d0aac95b | ||
|
|
601d478015 | ||
|
|
27ab12dd82 | ||
|
|
3b03e439de | ||
|
|
4ae92ee3b9 | ||
|
|
0732a9bb7b | ||
|
|
db2cd0f5a5 | ||
|
|
e10fb1e2a4 | ||
|
|
874be7dc03 | ||
|
|
a6752a1671 | ||
|
|
c2cfeee471 | ||
|
|
9279a489d4 | ||
|
|
ddef9cf73b | ||
|
|
0cd8b6a9d9 | ||
|
|
867611d3e1 | ||
|
|
8b751e0d45 | ||
|
|
8a504640d2 | ||
|
|
9bc4873a71 | ||
|
|
e9561c4af5 | ||
|
|
6b7cc918f0 | ||
|
|
cb526f0659 | ||
|
|
ce3fa4ac08 | ||
|
|
83b92bc634 | ||
|
|
302ce2b2ef | ||
|
|
08ede91a1f | ||
|
|
3e11574c8f | ||
|
|
880f234915 | ||
|
|
c22e1eb3ce | ||
|
|
1c668a0a6b | ||
|
|
ad8d96230d | ||
|
|
15fb738850 | ||
|
|
d34ff22429 | ||
|
|
c5806c0ae1 | ||
|
|
44b8d0f186 | ||
|
|
36a2b6c6f8 | ||
|
|
ac527e7372 | ||
|
|
f711ccfd7a | ||
|
|
1042a8d179 | ||
|
|
d123cfdc58 | ||
|
|
d10c839596 | ||
|
|
db79156fd5 | ||
|
|
a68856102f | ||
|
|
20ca4f4bee | ||
|
|
9a5212560b | ||
|
|
7bc74de62d | ||
|
|
3bec165e25 | ||
|
|
d02389bbfa | ||
|
|
fcff4b712c | ||
|
|
64ed1c74d5 | ||
|
|
61d1d13a02 | ||
|
|
fcbe243c0b | ||
|
|
0819c3939f | ||
|
|
5d333337b6 | ||
|
|
e971d677c0 | ||
|
|
96c219a408 | ||
|
|
56d67dac2e | ||
|
|
f381945567 | ||
|
|
65b886812b | ||
|
|
23ab2062e7 | ||
|
|
4e493229c6 | ||
|
|
160e2343bd | ||
|
|
7e403d9d3b | ||
|
|
93f16eed4d | ||
|
|
7effc6f825 | ||
|
|
fe0080478b | ||
|
|
443139db00 | ||
|
|
1879145bff | ||
|
|
b4a1976886 | ||
|
|
fe50eceaff | ||
|
|
0c575ced95 | ||
|
|
87f7828679 | ||
|
|
c7aaaac809 | ||
|
|
99cb670bec | ||
|
|
7d0e125896 | ||
|
|
68b6d3ad47 | ||
|
|
c132aed2a6 | ||
|
|
18d5ea95e5 | ||
|
|
9a150e326a | ||
|
|
ceaa47a2aa | ||
|
|
2f1a0ab35f | ||
|
|
663d97b385 | ||
|
|
fb7e394ddd | ||
|
|
9bad45995a | ||
|
|
27d14c27a5 | ||
|
|
d9980d08be | ||
|
|
f43ad6d108 | ||
|
|
727c0d46e3 | ||
|
|
1950befd76 | ||
|
|
8b4eb936db | ||
|
|
93c565e7b4 | ||
|
|
269fdd233c | ||
|
|
a2d0566a93 | ||
|
|
a0ee225618 | ||
|
|
ff550ed0b0 | ||
|
|
3061149545 | ||
|
|
003cb92cd5 | ||
|
|
9fe3780432 | ||
|
|
37f638bb4c | ||
|
|
ef188a30ac | ||
|
|
d3c25a45f6 | ||
|
|
66ea461846 | ||
|
|
6bc2c58596 | ||
|
|
374a1f9983 | ||
|
|
eea3c568f9 | ||
|
|
2248f1ef12 | ||
|
|
4d14ac5741 | ||
|
|
c8e6746e9f | ||
|
|
0d42f6a1b4 | ||
|
|
bf8590ea65 | ||
|
|
7cbb3c3854 | ||
|
|
1272796cc5 | ||
|
|
b4d05b6e72 | ||
|
|
c2b8f994bf | ||
|
|
bd32290864 | ||
|
|
218ea2658a | ||
|
|
d20878b776 | ||
|
|
325e6d38b5 | ||
|
|
a66e6fb43f | ||
|
|
caf7ffc7eb | ||
|
|
6872f7e406 | ||
|
|
7e83049c93 | ||
|
|
f11b677dec | ||
|
|
5d3f53363b | ||
|
|
9bb6fa67ca | ||
|
|
1f56ea647d | ||
|
|
6e87864dfc | ||
|
|
d06ecba2e6 | ||
|
|
a192949095 | ||
|
|
8cdf8cb995 | ||
|
|
cbc32c3831 | ||
|
|
09a54c3a89 | ||
|
|
f71b0bbd7b | ||
|
|
537d907555 | ||
|
|
04d51723d0 | ||
|
|
7f1f18399c | ||
|
|
ff274122dc | ||
|
|
e8dca11245 | ||
|
|
f9077f3026 | ||
|
|
c4fb64e76c | ||
|
|
f547e55076 | ||
|
|
ce3bf664c8 | ||
|
|
13b74c3fc7 | ||
|
|
6631419beb | ||
|
|
8194fc48bd | ||
|
|
c6f1863352 | ||
|
|
56c24b9eb2 | ||
|
|
7fa8a5c257 | ||
|
|
d008a02a74 | ||
|
|
4d56d580ce | ||
|
|
46aa9c0e52 | ||
|
|
9b660bbd19 | ||
|
|
df525290cb | ||
|
|
cd749419ca | ||
|
|
c92cf66c67 | ||
|
|
5d192a9f70 | ||
|
|
6ab6d3475f | ||
|
|
fa0fa25764 | ||
|
|
a64ae963be | ||
|
|
a9015ba79d | ||
|
|
1040bdec79 | ||
|
|
99d642ca5b | ||
|
|
06a0b8451f | ||
|
|
1afa12005c | ||
|
|
82dc399e5e | ||
|
|
9e4b6b90c9 | ||
|
|
33ebae9abd | ||
|
|
1ebff3ab33 | ||
|
|
9a7c85b163 | ||
|
|
8046f2a38f | ||
|
|
207ecaab33 | ||
|
|
88aec4b499 | ||
|
|
c77ba0cf57 | ||
|
|
fa83ca0bea | ||
|
|
e171959ede | ||
|
|
2da332fa83 | ||
|
|
37a0f013f8 | ||
|
|
0644a88a1b | ||
|
|
990ee1be73 | ||
|
|
4732e40637 | ||
|
|
1347b693a5 | ||
|
|
d9b614a56d | ||
|
|
e23a6bbc63 | ||
|
|
7abc0f9e65 | ||
|
|
6a40fe64d6 | ||
|
|
2065bac380 | ||
|
|
db8db90333 | ||
|
|
125d4f106d | ||
|
|
40e6c98dfc | ||
|
|
3fbca95ae1 | ||
|
|
20d7e83576 | ||
|
|
895dfb5d87 | ||
|
|
84f6c561f3 | ||
|
|
1ee7c09d95 | ||
|
|
fbdb86adbd | ||
|
|
83c1546e77 | ||
|
|
152becc460 | ||
|
|
b06212b5a2 | ||
|
|
b1c1dd1ec4 | ||
|
|
25b99ae456 | ||
|
|
c545b9c4ab | ||
|
|
330b06b440 | ||
|
|
6975baa88b | ||
|
|
7f57e72afe | ||
|
|
98ed83e278 | ||
|
|
92287c1a2a | ||
|
|
4fe57a0c19 | ||
|
|
bde7e86e8e | ||
|
|
9b30e05137 | ||
|
|
8b47a0736b | ||
|
|
4c1e2105c4 | ||
|
|
3c7725ea70 | ||
|
|
6cec67251d | ||
|
|
e9c78512b3 | ||
|
|
114385280a | ||
|
|
c8979f6441 | ||
|
|
1aef2ae18d | ||
|
|
532db01df2 | ||
|
|
6a3abda0b4 | ||
|
|
e30828a276 | ||
|
|
744955e5b4 | ||
|
|
1b2a2b8185 | ||
|
|
f42540cc90 | ||
|
|
8c09cc2c17 | ||
|
|
d6c54b9494 | ||
|
|
618e447278 | ||
|
|
00f5b7ece6 | ||
|
|
06c827757b | ||
|
|
d71ed4f3bc | ||
|
|
3954896d6e | ||
|
|
3a879c7dcb | ||
|
|
b3b790e4e0 | ||
|
|
afbd01b0a4 | ||
|
|
d567824f2a | ||
|
|
efafdd3c55 | ||
|
|
98c95df228 | ||
|
|
639b7432b8 | ||
|
|
fdd76c899f | ||
|
|
d8a2f6dbcf | ||
|
|
420f637cab | ||
|
|
ad53fe659b | ||
|
|
c1c4d489df | ||
|
|
98c09dc257 | ||
|
|
9643379d30 | ||
|
|
8485eb1415 | ||
|
|
a500b2ce67 | ||
|
|
236208a5ff | ||
|
|
9a5de74423 | ||
|
|
da50873d5e | ||
|
|
c3fae34969 | ||
|
|
cbd7987c7c | ||
|
|
4d4c45cfd2 | ||
|
|
bf66d95be2 | ||
|
|
5bb7dbc231 | ||
|
|
376d11c2e3 | ||
|
|
f039fe7f9d | ||
|
|
a960887169 | ||
|
|
d29c1c6d6d | ||
|
|
9fce121366 | ||
|
|
63f94bbab8 | ||
|
|
c914cfceab | ||
|
|
26729aa8b0 | ||
|
|
20d1d4405d | ||
|
|
2e1a76368e | ||
|
|
22dfd0efad | ||
|
|
69ee445786 | ||
|
|
2e49c99b1f | ||
|
|
15d92076b0 | ||
|
|
ba03d13c29 | ||
|
|
8f92e520bb | ||
|
|
ca966d3d7f | ||
|
|
2e8e1a3da3 | ||
|
|
eb4a634248 | ||
|
|
1ed49addc5 | ||
|
|
ea775d49fc | ||
|
|
2aa0592e0f | ||
|
|
498e559029 | ||
|
|
797dc7aba7 | ||
|
|
9a09d38478 | ||
|
|
61890e3dc3 | ||
|
|
1d9b34baa3 | ||
|
|
29e4a36622 | ||
|
|
4a616ca4d8 | ||
|
|
a1ecf0a03d | ||
|
|
cfed1f78db | ||
|
|
16c5c1b353 | ||
|
|
339763ed2d | ||
|
|
6834f022b9 | ||
|
|
e45d66fd9a | ||
|
|
9eb2426411 | ||
|
|
160f7b3e5d | ||
|
|
c023534e7b | ||
|
|
04124c77f4 | ||
|
|
169d463a3d | ||
|
|
fe3aa0a4bc | ||
|
|
f885a8d76c | ||
|
|
a9fa339267 | ||
|
|
a86fdfc735 | ||
|
|
5773ff9d82 | ||
|
|
98e34fd1f1 | ||
|
|
50c1a156ae | ||
|
|
f55ec6d449 | ||
|
|
864e1341ad | ||
|
|
6d139422cb | ||
|
|
72ff2e2d9f | ||
|
|
bb4c7e3233 | ||
|
|
4275280698 | ||
|
|
6beb6280af | ||
|
|
e4a51b3235 | ||
|
|
e12ceddd5e | ||
|
|
a2d4b9b718 | ||
|
|
fdd0c2b1d3 | ||
|
|
16c6497a89 | ||
|
|
d892a4d763 | ||
|
|
80b1c9aff8 | ||
|
|
da7e369266 | ||
|
|
c00228468c | ||
|
|
9e5ffed7d6 | ||
|
|
a2c3c791ad | ||
|
|
a8555b0b6d | ||
|
|
5300242a3e | ||
|
|
f5dd564a7b | ||
|
|
b2016dc443 | ||
|
|
b7ad702bc8 | ||
|
|
c81cb4aa2d | ||
|
|
8a6f89ca17 | ||
|
|
b6b5edf13b | ||
|
|
7ec11e5238 | ||
|
|
953ad9e116 | ||
|
|
7837f508a5 | ||
|
|
a168c63412 | ||
|
|
d126cdb923 | ||
|
|
accbeaed99 | ||
|
|
c986b4dbf2 | ||
|
|
e1425845ea | ||
|
|
91c11ea469 | ||
|
|
9470853d47 | ||
|
|
297844cf46 | ||
|
|
f63b41bbe4 | ||
|
|
0d7d178ed4 | ||
|
|
583506730d | ||
|
|
1f3f635693 | ||
|
|
ed4e584104 | ||
|
|
71f92c9446 | ||
|
|
dcf02f46ff | ||
|
|
5e4ad24ba6 | ||
|
|
4deb76fc9d | ||
|
|
a71f2b7089 | ||
|
|
44e782d55b | ||
|
|
9bb0a4558b | ||
|
|
9ccd6265dd | ||
|
|
4895a556fa | ||
|
|
0d1932520b | ||
|
|
54d07de86e | ||
|
|
8a5c331831 | ||
|
|
894a39eda3 | ||
|
|
c50b541471 | ||
|
|
ff5fb8f610 | ||
|
|
b023c4c6c5 | ||
|
|
e325b482b1 | ||
|
|
4140fa2a81 | ||
|
|
3e4512d62d | ||
|
|
6e39af3b0e | ||
|
|
73e9b7898f | ||
|
|
d09f53a930 | ||
|
|
82277462b9 | ||
|
|
7dd875900e | ||
|
|
7f2db80ebc | ||
|
|
eb6f2745b7 | ||
|
|
ce38758e3d | ||
|
|
a510d51a78 | ||
|
|
77c904fd13 | ||
|
|
fceccde0b3 | ||
|
|
8038e2f754 | ||
|
|
ac18b8cd6a | ||
|
|
345473f3ce | ||
|
|
778d2dc4bb | ||
|
|
0b97973bfb | ||
|
|
77f9da7626 | ||
|
|
3099547069 | ||
|
|
8e89a8af63 | ||
|
|
41f7d18161 | ||
|
|
83e0293f7b | ||
|
|
26f2df80c3 | ||
|
|
0ed03df6e9 | ||
|
|
8b5ea720da | ||
|
|
d4b3b4ea82 | ||
|
|
cf115c1e2b | ||
|
|
23796efa38 | ||
|
|
250ab1008b | ||
|
|
5233312ea5 | ||
|
|
4f2744d0fe | ||
|
|
a75feb0bfd | ||
|
|
78bc6f34d4 | ||
|
|
4193322315 | ||
|
|
e4ad10e0a1 | ||
|
|
5284a5f3ec | ||
|
|
15d90dd21c | ||
|
|
66faa420a4 | ||
|
|
7d5a0b6a27 | ||
|
|
4d1b3cbafc | ||
|
|
1f2db5d59a | ||
|
|
3be1bee753 | ||
|
|
9cd0b37112 | ||
|
|
7f9d25d58a | ||
|
|
bb2fc63357 | ||
|
|
cd9e64a25a | ||
|
|
dca76cd5da | ||
|
|
42f70a3b95 | ||
|
|
1710954977 | ||
|
|
cc02bd752c | ||
|
|
cb3b8afe47 | ||
|
|
d60e1f6693 | ||
|
|
133dd9d669 | ||
|
|
76e228f733 | ||
|
|
c837beaf5d | ||
|
|
6973613175 | ||
|
|
f5036aff3a | ||
|
|
11f24fc2f2 | ||
|
|
2627f8ce6d | ||
|
|
9ff79fd61f | ||
|
|
c582cfbf75 | ||
|
|
8c739a45a0 | ||
|
|
61fbcbeca8 | ||
|
|
b04a58e3fc | ||
|
|
df42faf51d | ||
|
|
c5babec794 | ||
|
|
f3aeb3d676 | ||
|
|
a34d4b8cb4 | ||
|
|
4da8f6d27a | ||
|
|
644742b4b2 | ||
|
|
f4ac0c7022 | ||
|
|
f82664ff82 | ||
|
|
2465f18515 | ||
|
|
989e9e8b54 | ||
|
|
8a37230226 | ||
|
|
6d60ac5c08 | ||
|
|
564b24e7f8 | ||
|
|
d4a64e3f38 | ||
|
|
fd62626dff | ||
|
|
b68d23da3c | ||
|
|
bcebc84882 | ||
|
|
40d58ce529 | ||
|
|
3b261fb155 | ||
|
|
337db329c9 | ||
|
|
f4d81cd4d4 | ||
|
|
99f60d5e59 | ||
|
|
b95633b30c | ||
|
|
114ad468ca | ||
|
|
134e56338d | ||
|
|
34ec5536c0 | ||
|
|
3ce0962f2c | ||
|
|
7214c8be46 | ||
|
|
d09ff47644 | ||
|
|
114ca19f64 | ||
|
|
21a211d547 | ||
|
|
fec3b22421 | ||
|
|
957eb741a0 | ||
|
|
bcf63ac562 | ||
|
|
edf2c82cf6 | ||
|
|
30c3d077f2 | ||
|
|
73390332d2 | ||
|
|
116e9553d1 | ||
|
|
595bb965b7 | ||
|
|
8c23e6c175 | ||
|
|
3ccf68cd0a | ||
|
|
66006d83b9 | ||
|
|
39197cdb4e | ||
|
|
4214fca447 | ||
|
|
537793bb24 | ||
|
|
39f024900e | ||
|
|
436e6f1770 | ||
|
|
a64dc23bf1 | ||
|
|
e72733d590 | ||
|
|
2ad48b78d4 | ||
|
|
50586c9a06 | ||
|
|
bf1cf4afbb | ||
|
|
8750beeb44 | ||
|
|
00ee9b09d9 | ||
|
|
ab31562131 | ||
|
|
bd93b83f1b | ||
|
|
017e61feb4 | ||
|
|
8edfdb02ed | ||
|
|
1173473f66 | ||
|
|
ad21613618 | ||
|
|
e6ade35305 | ||
|
|
1ae6b07b45 | ||
|
|
5159c59915 | ||
|
|
b14f63e004 | ||
|
|
fd7b66c5eb | ||
|
|
63ca967032 | ||
|
|
a9ba96f94a | ||
|
|
84d196673e | ||
|
|
0261cd9958 | ||
|
|
96924dda01 | ||
|
|
ea28f96aa9 | ||
|
|
1dc3d7e8fe | ||
|
|
930ec2f439 | ||
|
|
e5276bb945 | ||
|
|
e5a2001a33 | ||
|
|
760dd1f3a8 | ||
|
|
13f1bcbe90 | ||
|
|
1aa759dbb9 | ||
|
|
d35399b00e | ||
|
|
6f9b1ee521 | ||
|
|
0efedd7bd7 | ||
|
|
f0bad430df | ||
|
|
cbed09ee9b | ||
|
|
75b418faa7 | ||
|
|
f9b2a1a2bd | ||
|
|
324469da57 | ||
|
|
7e271c9151 | ||
|
|
ca72d23c3b | ||
|
|
e01e180f62 | ||
|
|
4680d6ebdf | ||
|
|
e09bb72da5 | ||
|
|
e7a060090e | ||
|
|
5cb184a732 | ||
|
|
ff22f78d46 | ||
|
|
0bf3373e80 | ||
|
|
941fa8538f | ||
|
|
fc1e73b9cf | ||
|
|
7eb9a48f2d | ||
|
|
d3f50ea914 | ||
|
|
16429f6252 | ||
|
|
ceae51ad74 | ||
|
|
bfd3110e59 | ||
|
|
bee5999a44 | ||
|
|
8a3efbf21f | ||
|
|
ea859e1cd0 | ||
|
|
a414ffaf65 | ||
|
|
ac63cd00d7 | ||
|
|
efe9022197 | ||
|
|
b9224c0c0f | ||
|
|
d5adab697f | ||
|
|
5b3d503e2e | ||
|
|
4cab20b599 | ||
|
|
fc0ec6cf0b | ||
|
|
2b6d63a44d | ||
|
|
7d56407ba7 | ||
|
|
9ef59daef0 | ||
|
|
0847a4d7fb | ||
|
|
42450345dd | ||
|
|
4fac13827f | ||
|
|
632df9e5cb | ||
|
|
882749dd2f | ||
|
|
5543bb4a90 | ||
|
|
4c77f942e1 | ||
|
|
13f9f29fa8 | ||
|
|
1b5c137e43 | ||
|
|
a8a0b4c507 | ||
|
|
16c114c058 | ||
|
|
2cbfd141e8 | ||
|
|
4c6646f10a | ||
|
|
5b7b77349c | ||
|
|
052a4a69b5 | ||
|
|
6554d176e9 | ||
|
|
7f2d3e2925 | ||
|
|
812fad02fe | ||
|
|
40a6af6eda | ||
|
|
73b15194ea | ||
|
|
b764fc2a4d | ||
|
|
44cfdef0a4 | ||
|
|
2992ec9095 | ||
|
|
53b94fad58 | ||
|
|
c97a8ff10d | ||
|
|
f09ccc817b | ||
|
|
c322060fbd | ||
|
|
6da4025167 | ||
|
|
fbb16b05da | ||
|
|
df7a31f536 | ||
|
|
ed80a182ce | ||
|
|
4d99e77419 | ||
|
|
7957208cf6 | ||
|
|
990869f7ec | ||
|
|
6ed058933c | ||
|
|
636f003eee | ||
|
|
31e0fc4a7a | ||
|
|
2fe392ef50 | ||
|
|
c9f22c79df | ||
|
|
23c33e1d3a | ||
|
|
ad87fbd1cf | ||
|
|
67be8188bb | ||
|
|
6b984a54c9 | ||
|
|
92e8823ebd | ||
|
|
23ba602ca5 | ||
|
|
dde096e03f | ||
|
|
198fecf5e4 | ||
|
|
b5dfef7577 | ||
|
|
f39f136e01 | ||
|
|
2a63fabd09 | ||
|
|
766a84b798 | ||
|
|
190176a6bc | ||
|
|
405e78771b | ||
|
|
2306809160 | ||
|
|
8c75e47603 | ||
|
|
bcd6a10223 | ||
|
|
91043cecee | ||
|
|
c5358c84ad | ||
|
|
4892e32294 | ||
|
|
bf4be566a7 | ||
|
|
9bc7a381b2 | ||
|
|
7e4c9609ca | ||
|
|
b1600bb342 | ||
|
|
a420f00d10 | ||
|
|
ed30c9a572 | ||
|
|
b49e03f77e | ||
|
|
400cf213c0 | ||
|
|
e4c0904731 | ||
|
|
70b362d4f4 | ||
|
|
17be341d38 | ||
|
|
d94daf776c | ||
|
|
fc7a428fc2 | ||
|
|
37f9485cef | ||
|
|
ed9203f4aa | ||
|
|
1fba55a9b6 | ||
|
|
0a3217b8ff | ||
|
|
84126893ff | ||
|
|
d382c95d57 | ||
|
|
2f8bb252ff | ||
|
|
9623069e80 | ||
|
|
72b39088ee | ||
|
|
b5e7118048 | ||
|
|
7050cade9d | ||
|
|
223e3d8fe7 | ||
|
|
eecba412cd | ||
|
|
c7c4d4d48c | ||
|
|
71013521d7 | ||
|
|
437dde701c | ||
|
|
7c4ddfb546 | ||
|
|
cf48bf6d3d | ||
|
|
1fba7d53bb | ||
|
|
fbea7d5d38 | ||
|
|
ccc5c1642b | ||
|
|
bd89b91c69 | ||
|
|
edb14a02e9 | ||
|
|
1a00c67e10 | ||
|
|
be1aebd818 | ||
|
|
c831758ea4 | ||
|
|
2506ccb509 | ||
|
|
2c8376b79d | ||
|
|
22ddf62d75 | ||
|
|
126d8a0972 | ||
|
|
caabdd4a66 | ||
|
|
dbef02789f | ||
|
|
bc9ca5f4a8 | ||
|
|
a84d1b5f5e | ||
|
|
3eba7b53bf | ||
|
|
c72afedce7 | ||
|
|
42e31d75b4 | ||
|
|
89d881c19a | ||
|
|
8667a72653 | ||
|
|
ac6b00c3ca | ||
|
|
a9e8ca55a6 | ||
|
|
495311d206 | ||
|
|
04154af5d6 | ||
|
|
47d983a77a | ||
|
|
79b51fedab | ||
|
|
e035756b22 | ||
|
|
74e7fcb2dd | ||
|
|
329e983ee9 | ||
|
|
dd17582722 | ||
|
|
a35e254c53 | ||
|
|
c02cf9404d | ||
|
|
a213afad09 | ||
|
|
35e4c4616f | ||
|
|
0c0243228c | ||
|
|
01a797af14 | ||
|
|
a88db9b121 | ||
|
|
7a77355a3e | ||
|
|
1d076d6ce1 | ||
|
|
e9df8a5102 | ||
|
|
4c0a2cf42e | ||
|
|
31af18e9d1 | ||
|
|
f7f4fa84f1 | ||
|
|
b63e065f23 | ||
|
|
263dbc1472 | ||
|
|
348b79aafe | ||
|
|
12ff36bd19 | ||
|
|
561ea48d83 | ||
|
|
fcda9f1561 | ||
|
|
5c395fdef4 | ||
|
|
61e19349b2 | ||
|
|
cdc569ce3a | ||
|
|
2db325f539 | ||
|
|
42e4f26a3d | ||
|
|
85bc328969 | ||
|
|
19ef6634f0 | ||
|
|
1354ff7adf | ||
|
|
46ae39c623 | ||
|
|
07141132a7 | ||
|
|
271c4e5253 | ||
|
|
56a7925a1d | ||
|
|
179169268c | ||
|
|
33573cda4a | ||
|
|
b6ee137206 | ||
|
|
9d5117a23e | ||
|
|
7145b984a9 | ||
|
|
efdd5e09b1 | ||
|
|
847f1209d6 | ||
|
|
c6e7e48b05 | ||
|
|
7295ddc15c | ||
|
|
81a50d3e90 | ||
|
|
d0548940f2 | ||
|
|
50be4bd267 | ||
|
|
3b5ef1726a | ||
|
|
79f519bb63 | ||
|
|
226085065b | ||
|
|
3861699074 | ||
|
|
0d3d4c981a | ||
|
|
4593c75f0b | ||
|
|
9659a9b5e2 | ||
|
|
1b0ffa97ea | ||
|
|
67675323e1 | ||
|
|
3d3f823920 | ||
|
|
151b743714 | ||
|
|
80b970bd29 | ||
|
|
987a274a85 | ||
|
|
d7ee0e422e | ||
|
|
3fb729980c | ||
|
|
d8499687f8 | ||
|
|
43e1d60e77 | ||
|
|
ea2e26f7d5 | ||
|
|
b9f5262d42 | ||
|
|
b50a8dbe41 | ||
|
|
868700e720 | ||
|
|
74807daeb3 | ||
|
|
c7073853eb | ||
|
|
995a7af21d | ||
|
|
fce7aa754f | ||
|
|
c47d77780c | ||
|
|
53811fc584 | ||
|
|
e680841fd2 | ||
|
|
f857db98bd | ||
|
|
f9ea9ce24c | ||
|
|
712c1244e8 | ||
|
|
5e1468da18 | ||
|
|
6e6d486de2 | ||
|
|
305f293201 | ||
|
|
0de852f561 | ||
|
|
2c10e3e257 | ||
|
|
04eda37263 | ||
|
|
22ebb693b6 | ||
|
|
d2b2ac28d9 | ||
|
|
44e02e1f49 | ||
|
|
15f74c2595 | ||
|
|
adcc8ef87b | ||
|
|
ffdcec938f | ||
|
|
5039848424 | ||
|
|
a77d280bd0 | ||
|
|
0886730f5a | ||
|
|
b123128737 | ||
|
|
019bf5f83c | ||
|
|
b2172ed7d7 | ||
|
|
7de4b1202d | ||
|
|
b717373247 | ||
|
|
5c53034d85 | ||
|
|
b0f99dfed0 | ||
|
|
7f3aba1319 | ||
|
|
d46a3d635e | ||
|
|
a90b1642ec | ||
|
|
5394e5b762 | ||
|
|
8df529fa66 | ||
|
|
65fc586d6e | ||
|
|
8d3728f931 | ||
|
|
fc268f8326 | ||
|
|
357996d996 | ||
|
|
bfc1252239 | ||
|
|
ee3fb5a0ea | ||
|
|
492dc7c537 | ||
|
|
49489747d2 | ||
|
|
b8422b076d | ||
|
|
33749a7fbe | ||
|
|
2e920a212f | ||
|
|
e8e09b1b55 | ||
|
|
16e9b9c44f | ||
|
|
d2b34b4740 | ||
|
|
f018cd7d90 | ||
|
|
d3d287bf67 | ||
|
|
49348f1ce1 | ||
|
|
3413ae67ae | ||
|
|
c1ae95f6f5 | ||
|
|
5f6b25aa91 | ||
|
|
2bd40b0bf9 | ||
|
|
0ce08ec858 | ||
|
|
4003762177 | ||
|
|
d06d8ea3e4 | ||
|
|
d3ffcc784d | ||
|
|
ba16fdc1c6 | ||
|
|
66391d2837 | ||
|
|
fd75e9e542 | ||
|
|
0f70c6c325 | ||
|
|
119a533862 | ||
|
|
73d62f3f0c | ||
|
|
15038ab51a | ||
|
|
7ac389cf47 | ||
|
|
1b0b07baab | ||
|
|
be5cfdc86b | ||
|
|
53e67c37ab | ||
|
|
acde409ba0 | ||
|
|
8ccd7827be | ||
|
|
4e5b009a72 | ||
|
|
ea07b3c53a | ||
|
|
b310b3ba9d | ||
|
|
738f1e1f72 | ||
|
|
1df35d92fe | ||
|
|
dc0f79d45d | ||
|
|
acc1717970 | ||
|
|
a23c69de3d | ||
|
|
62b526dbbd | ||
|
|
f55b122b42 | ||
|
|
1c9f4ac181 | ||
|
|
ba79d503bb | ||
|
|
b25e5322ee | ||
|
|
bb27677219 | ||
|
|
a69a4e23f4 | ||
|
|
8bf7f603ae | ||
|
|
393da819b1 | ||
|
|
ee96a95d44 | ||
|
|
851d1ad87a | ||
|
|
7c60f6593e | ||
|
|
f8096ce687 | ||
|
|
9ebc2a6519 | ||
|
|
3862e07688 | ||
|
|
d4575b647a | ||
|
|
b39072f2ef | ||
|
|
5587710c1a | ||
|
|
9fcf33da8e | ||
|
|
edf8e916a2 | ||
|
|
d378c3a1d6 | ||
|
|
5b878b6e8b | ||
|
|
cb60f75a56 | ||
|
|
17f34355e5 | ||
|
|
e4e94a355d | ||
|
|
ba39343e3d | ||
|
|
a646057c7e | ||
|
|
7919b0965b | ||
|
|
9a79dfb709 | ||
|
|
5ea20d7ed9 | ||
|
|
4b879bb017 | ||
|
|
00b0739082 | ||
|
|
42441fd96c | ||
|
|
a9080087d8 | ||
|
|
0f261188f1 | ||
|
|
d209598ce9 | ||
|
|
7d1f132cea | ||
|
|
cca530c09d | ||
|
|
f58b5ddaf2 | ||
|
|
59c4d35fa4 | ||
|
|
b388f4805c | ||
|
|
e5d26f1546 | ||
|
|
a080d9795a | ||
|
|
1d555d21d9 | ||
|
|
e887cfb9e8 | ||
|
|
18c64af135 | ||
|
|
c7d1f0ddab | ||
|
|
14b1b35e42 | ||
|
|
7822260ed4 | ||
|
|
eba5d21193 | ||
|
|
2c8c2cb6b1 | ||
|
|
bcaac692d0 | ||
|
|
d27a3a00b8 | ||
|
|
1bc4182ceb | ||
|
|
9c7c5ca4eb | ||
|
|
d14fef8495 | ||
|
|
7abb93aad4 | ||
|
|
871276cfea | ||
|
|
2f17449dff | ||
|
|
d20304b3fb | ||
|
|
bdf73617e7 | ||
|
|
f76c8de910 | ||
|
|
c6ab3abeee | ||
|
|
21f17260d4 | ||
|
|
4b1ea8511a | ||
|
|
eeee3f41da | ||
|
|
5fd4f2954d | ||
|
|
f49bf1adb4 | ||
|
|
eb22a37b42 | ||
|
|
198a914cf9 | ||
|
|
b86726b5a5 | ||
|
|
2d4fd58fca | ||
|
|
b2a22943e1 | ||
|
|
302027094b | ||
|
|
536f2a9f2a | ||
|
|
2b99846ab6 | ||
|
|
fe5ed48f40 | ||
|
|
30375c6439 | ||
|
|
a7b77ac84f | ||
|
|
d8575ab8ab | ||
|
|
d2f86dfd05 | ||
|
|
db1bbbf6a4 | ||
|
|
c20cb28faf | ||
|
|
040757b7e6 | ||
|
|
870769b0ba | ||
|
|
fb52ba4fa1 | ||
|
|
8bbbff185f | ||
|
|
300fe1d405 | ||
|
|
3cceec11cd | ||
|
|
c4db196088 | ||
|
|
236c54c94a | ||
|
|
51d4996c5b | ||
|
|
d41a204d82 | ||
|
|
62f76b2169 | ||
|
|
2839a873a3 | ||
|
|
6f986d2cd7 | ||
|
|
022e438292 | ||
|
|
18281b0c49 | ||
|
|
ea0ac6dc77 | ||
|
|
aee495e785 | ||
|
|
aa0056d273 | ||
|
|
3b38226370 | ||
|
|
74325dc73d | ||
|
|
76f3351f4a | ||
|
|
3223b49c40 | ||
|
|
42872d18bf | ||
|
|
29a57545f6 | ||
|
|
02e4d7195c | ||
|
|
627e949fc6 | ||
|
|
154d7f5e18 | ||
|
|
c213ffe85f | ||
|
|
c76e30c8bc | ||
|
|
3182a1398a | ||
|
|
05ee889155 | ||
|
|
a4b4750e38 | ||
|
|
2e60e2eca9 | ||
|
|
3a3400064a | ||
|
|
c2d44c36d6 | ||
|
|
1233de5f90 | ||
|
|
307a3ca109 | ||
|
|
3c558fda4b | ||
|
|
8774fd6017 | ||
|
|
94686eea6e | ||
|
|
9c91ce8d24 | ||
|
|
3b78b5c1db | ||
|
|
51be311f73 | ||
|
|
2cd8ebf44d | ||
|
|
2ca6d25eb5 | ||
|
|
a64928c4e7 | ||
|
|
bab8b8c9eb | ||
|
|
a5108240f9 | ||
|
|
7023deb06a | ||
|
|
218f6c0181 | ||
|
|
d57b2448ee | ||
|
|
2c57d11c78 | ||
|
|
1107af09f1 | ||
|
|
698adc0c62 | ||
|
|
9fd754ca4d | ||
|
|
29b02402ff | ||
|
|
78daf24a5c | ||
|
|
93002a86cd | ||
|
|
d70fd7c5be | ||
|
|
c97b9054d9 | ||
|
|
886d6c3cbc | ||
|
|
965730dda9 | ||
|
|
05da04acda | ||
|
|
ddf5e3f90d | ||
|
|
659f2e062d | ||
|
|
1a3bd45a61 | ||
|
|
4a96776178 | ||
|
|
a27907aed1 | ||
|
|
373d7eaa70 | ||
|
|
e95f8e2b25 | ||
|
|
d654e523ba | ||
|
|
9cb09f8cfe | ||
|
|
5ae0264055 | ||
|
|
7335fbdbda | ||
|
|
56fd04832a | ||
|
|
6ef75352f1 | ||
|
|
eebcf3cff1 | ||
|
|
63f4e7c72a | ||
|
|
d8c9f66d25 | ||
|
|
9f23a1d7c1 | ||
|
|
71180e6753 | ||
|
|
0854c83076 | ||
|
|
370bf43fb1 | ||
|
|
24b656bff5 | ||
|
|
146fec5820 | ||
|
|
81cf948bf4 | ||
|
|
4dc4280555 | ||
|
|
b02cbafcc9 | ||
|
|
00cbf7bd31 | ||
|
|
0e526314a1 | ||
|
|
00603bf156 | ||
|
|
72131e05e9 | ||
|
|
4a57f3ebb2 | ||
|
|
78688fea98 | ||
|
|
2dd34cbe0b | ||
|
|
df12552b5b | ||
|
|
8297836170 | ||
|
|
5dd047fbbe | ||
|
|
da76f8f0b4 | ||
|
|
fe6befbd80 | ||
|
|
22ababc12e | ||
|
|
0f0a4b1452 | ||
|
|
a0fecd6c41 | ||
|
|
144d940a8b | ||
|
|
a5d34202c6 | ||
|
|
3733cf1961 | ||
|
|
5924d9f30c | ||
|
|
4defa3b1e3 | ||
|
|
5c46a5de49 | ||
|
|
b41b368255 | ||
|
|
c164906420 | ||
|
|
30b0e9af8d | ||
|
|
d4225192df | ||
|
|
3c2cc6efb8 | ||
|
|
f20173a01f | ||
|
|
17f86fdedf | ||
|
|
aaa67f733d | ||
|
|
fb34eeb442 | ||
|
|
5308bd991c | ||
|
|
d5c177cd3d | ||
|
|
7fa29dc519 | ||
|
|
04a1181288 | ||
|
|
d2afdefd26 | ||
|
|
d15f58ad4c | ||
|
|
cc29abe9d1 | ||
|
|
247d8df314 | ||
|
|
faf7202f8e | ||
|
|
ea530015b0 | ||
|
|
e17fe4db0f | ||
|
|
177bafd4cc | ||
|
|
20005eb81a | ||
|
|
5d77897526 | ||
|
|
f07efff961 | ||
|
|
ed46188a72 | ||
|
|
3a4f445bd9 | ||
|
|
8d12ae796e | ||
|
|
85b5c51806 | ||
|
|
b931286ab4 | ||
|
|
219412f9d6 | ||
|
|
7319eb3a25 | ||
|
|
4bf994fc9c | ||
|
|
599f1cf763 | ||
|
|
160288137a | ||
|
|
329b10754a | ||
|
|
92c1bee18c | ||
|
|
dd9137dc0e | ||
|
|
57f7ce68a4 | ||
|
|
d771d7f1a7 | ||
|
|
4b7dc55738 | ||
|
|
ea62f8e22a | ||
|
|
314f4c665f | ||
|
|
cd44c6cf83 | ||
|
|
9dc1d90f64 | ||
|
|
aa1214280d | ||
|
|
d4fe63e36b | ||
|
|
6e4000df9e | ||
|
|
07e1ebcc12 | ||
|
|
411dfa2409 | ||
|
|
682f927f8e | ||
|
|
4b56c73ef3 | ||
|
|
db0609aeb4 | ||
|
|
7c6d446440 | ||
|
|
e33eae340d | ||
|
|
cf596a61db | ||
|
|
d35faaa35c | ||
|
|
8670ad4caa | ||
|
|
c1dc7935f7 | ||
|
|
bb073f897c | ||
|
|
babec0fafa | ||
|
|
3dfc0339fc | ||
|
|
2096afc1b0 | ||
|
|
0bb0056abc | ||
|
|
91bd431344 | ||
|
|
95c27731d4 | ||
|
|
1e6df1675c | ||
|
|
1c31f6225f | ||
|
|
8d1dcf293a | ||
|
|
0384fe5d59 | ||
|
|
ffd9638bdb | ||
|
|
e87fa5e3ab | ||
|
|
561f27fde9 | ||
|
|
7e0797d19a | ||
|
|
c8de1b82ec | ||
|
|
90ce9da644 | ||
|
|
55e04e3157 | ||
|
|
18aacc8bf3 | ||
|
|
41037eb265 | ||
|
|
99ec576096 | ||
|
|
4b9b55a832 | ||
|
|
c1b14d678f | ||
|
|
b939224ab6 | ||
|
|
f0e8f7b790 | ||
|
|
e9a7221b68 | ||
|
|
12b405a4ac | ||
|
|
d9d698103e | ||
|
|
26f457896c | ||
|
|
583efa68f7 | ||
|
|
2dda0e37d9 | ||
|
|
cca64798f8 | ||
|
|
113ba58231 | ||
|
|
584986ab1c | ||
|
|
6f8c27dcfc | ||
|
|
90ddac12e3 | ||
|
|
5d39a8852a | ||
|
|
8fa6db6e8e | ||
|
|
f76e67a440 | ||
|
|
fbb7a50cbd | ||
|
|
254598ba25 | ||
|
|
ff0fdcf614 | ||
|
|
2774125257 | ||
|
|
19e2a0d6af | ||
|
|
5da4ef25c8 | ||
|
|
c4f2337d02 | ||
|
|
21e6252965 | ||
|
|
0332da1f15 | ||
|
|
880ae3f077 | ||
|
|
842a12f4ca | ||
|
|
80fc9fabc6 | ||
|
|
d05c686671 | ||
|
|
1ec8b83cbd | ||
|
|
5f6ceebbba | ||
|
|
f8631c3650 | ||
|
|
86827a961a | ||
|
|
415715d91a | ||
|
|
6ecd99ff9b | ||
|
|
faeae51d7f | ||
|
|
ee31f1578a | ||
|
|
9ce6b0898e | ||
|
|
b6b4f9d46a | ||
|
|
b4e28446b8 | ||
|
|
1528845331 | ||
|
|
dccf323c1f | ||
|
|
45eeeab308 | ||
|
|
642735449a | ||
|
|
e8f376e3c1 | ||
|
|
904d58c208 | ||
|
|
047b1a8fc2 | ||
|
|
a7f8a1d7fb | ||
|
|
8d1261c248 | ||
|
|
70d771c7b7 | ||
|
|
a8bc4e75b3 | ||
|
|
c7e0040689 | ||
|
|
c8f56b4f00 | ||
|
|
e1b0d5759a | ||
|
|
fc30feb51a | ||
|
|
0a20e78b75 | ||
|
|
c99c043f3f | ||
|
|
79caea8745 | ||
|
|
85ae73de03 | ||
|
|
1998b1e5a8 | ||
|
|
b6021e856a | ||
|
|
4a79372b6e | ||
|
|
85f3b10a69 | ||
|
|
92ef27494c | ||
|
|
ea6a99208e | ||
|
|
18bafdce61 | ||
|
|
da76ba610b | ||
|
|
996d6f383d | ||
|
|
f0cb5b0272 | ||
|
|
16af56f600 | ||
|
|
551d85b123 | ||
|
|
700cdbfac4 | ||
|
|
9d97cace0e | ||
|
|
0b6f53e94c | ||
|
|
4423e05d9d | ||
|
|
227577ba76 | ||
|
|
bec6c0eb09 | ||
|
|
2dde7e914b | ||
|
|
b4dd8dbc37 | ||
|
|
148bc7e215 | ||
|
|
20285b9100 | ||
|
|
d032e7ec8c | ||
|
|
43c8aa28cb | ||
|
|
cf50bcb841 | ||
|
|
59bc761d56 | ||
|
|
dfbbfac4d7 | ||
|
|
463df95215 | ||
|
|
41231db3f0 | ||
|
|
98d816ff77 | ||
|
|
bc3c07b176 | ||
|
|
6e67f1473a | ||
|
|
92dd917f5a | ||
|
|
cda39f929e | ||
|
|
7a890a8f25 | ||
|
|
69571354f4 | ||
|
|
dbb42ca18d | ||
|
|
a3ed12401b | ||
|
|
5292c7eae9 | ||
|
|
630cb5ea4d | ||
|
|
40bac8e8c4 | ||
|
|
3d3d35c9b8 | ||
|
|
600d0165cc | ||
|
|
a9b48a6f48 | ||
|
|
128736d23f | ||
|
|
9dac3b247b | ||
|
|
6d76a91521 | ||
|
|
e0059dfffa | ||
|
|
2c191ef1da | ||
|
|
9ffda10298 | ||
|
|
63336f4aaf | ||
|
|
21b14028ad | ||
|
|
d1b0cb2b77 | ||
|
|
776e045de0 | ||
|
|
11ee500bff | ||
|
|
66da6f20e4 | ||
|
|
30631224da | ||
|
|
f2fc23e16b | ||
|
|
27edeb7757 | ||
|
|
228fe7300c | ||
|
|
8af4d4462f | ||
|
|
0979cbc5bc | ||
|
|
59763653c6 | ||
|
|
083100fca3 | ||
|
|
d0436b0cda | ||
|
|
d96dc47ef6 | ||
|
|
9a7781ff8c | ||
|
|
0708ccead4 | ||
|
|
0c28006cf2 | ||
|
|
95603fae18 | ||
|
|
da34e36cdb | ||
|
|
8bb926eb01 | ||
|
|
f8a6553e82 | ||
|
|
9ea7f3d647 | ||
|
|
f71b5f5a37 | ||
|
|
d92ebb5ab4 | ||
|
|
7dd5b6a464 | ||
|
|
dfe57baa16 | ||
|
|
fcb40f49b1 | ||
|
|
77c281d2df | ||
|
|
c913e4d5a6 | ||
|
|
77c7abe4e7 | ||
|
|
0a829efda5 | ||
|
|
2b6fe8f1ab | ||
|
|
a51ac964c6 | ||
|
|
a6b0221952 | ||
|
|
c6fe10de75 | ||
|
|
2278878a05 | ||
|
|
9501b263e0 | ||
|
|
04887d3b68 | ||
|
|
4fe3997294 | ||
|
|
a9d7428535 | ||
|
|
3ea1bfce4f | ||
|
|
0f034868f2 | ||
|
|
6ea1ccf3e6 | ||
|
|
5193f61cf5 | ||
|
|
e345cefabd | ||
|
|
9d925776b4 | ||
|
|
2e9f04c11a | ||
|
|
2bad55bf83 | ||
|
|
1762aa04ce | ||
|
|
0d055602c3 | ||
|
|
6939187853 | ||
|
|
1d04ef3e55 | ||
|
|
4e077fddad | ||
|
|
d3e79c1eaf | ||
|
|
fb23c9c10b | ||
|
|
09731b69a6 | ||
|
|
3da0c2504c | ||
|
|
1dea9ab41f | ||
|
|
5fc4882b80 | ||
|
|
0946e80407 | ||
|
|
7a09635735 | ||
|
|
aca3707bd8 | ||
|
|
3ca7bc7354 | ||
|
|
12ce170945 | ||
|
|
62cdf7a1df | ||
|
|
92169e9f55 | ||
|
|
fada2c001f | ||
|
|
c4f88aeb4d | ||
|
|
535de48ca6 | ||
|
|
b8735bbf7e | ||
|
|
1f7d58daee | ||
|
|
28ad1a1454 | ||
|
|
f0a9b66d13 | ||
|
|
ee87f2b4a9 | ||
|
|
a7ea1ef0aa | ||
|
|
1c5c1d1782 | ||
|
|
3b8333bd3f | ||
|
|
2d5d8a5a62 | ||
|
|
45c9e1e8c0 | ||
|
|
48317d86d3 | ||
|
|
46a61ea7ab | ||
|
|
9d5f833fbd | ||
|
|
dc6cad855d | ||
|
|
1f84f34850 | ||
|
|
f65d1da013 | ||
|
|
b991c416b7 | ||
|
|
978c115dac | ||
|
|
a69b382efd | ||
|
|
8bf5482754 | ||
|
|
d6ae732f6e | ||
|
|
d983114855 | ||
|
|
0a7e172420 | ||
|
|
cff2cf373f | ||
|
|
10b08d5ac5 | ||
|
|
af75d70dc5 | ||
|
|
0cedf10f8f | ||
|
|
759d581fde | ||
|
|
1d77fc74e1 | ||
|
|
48507e3b10 | ||
|
|
bced97cce9 | ||
|
|
dce9a03cb2 | ||
|
|
ae937791d3 | ||
|
|
3fdd3249b5 | ||
|
|
931b357466 | ||
|
|
53611d8055 | ||
|
|
84d73d0225 | ||
|
|
47ed1c1eab | ||
|
|
d25f0ae263 | ||
|
|
5f14140953 | ||
|
|
b2f6b23117 | ||
|
|
60abbda8bc | ||
|
|
1293ddd657 | ||
|
|
53d17e7901 | ||
|
|
44ed26a1db | ||
|
|
fd2a44ab55 | ||
|
|
aff48a6a31 | ||
|
|
ea9089944e | ||
|
|
aa57890554 | ||
|
|
8db6dff333 | ||
|
|
8683526af7 | ||
|
|
cde944fd8b | ||
|
|
eb3d5c1a94 | ||
|
|
bb8d37ddf1 | ||
|
|
b89cf71e2b |
@@ -14,16 +14,13 @@
|
||||
--ignore ENOSYS
|
||||
--ignore FILE_PATH_CHANGES
|
||||
--ignore GERRIT_CHANGE_ID
|
||||
--ignore LINE_SPACING
|
||||
--ignore LOGICAL_CONTINUATIONS
|
||||
--ignore MACRO_WITH_FLOW_CONTROL
|
||||
--ignore NEW_TYPEDEFS
|
||||
--ignore PARENTHESIS_ALIGNMENT
|
||||
--ignore PREFER_DEFINED_ATTRIBUTE_MACRO
|
||||
--ignore PREFER_FALLTHROUGH
|
||||
--ignore PREFER_KERNEL_TYPES
|
||||
--ignore SPLIT_STRING
|
||||
--ignore SSCANF_TO_KSTRTO
|
||||
--ignore SWITCH_CASE_INDENT_LEVEL
|
||||
--ignore TRACING_LOGGING
|
||||
--ignore VOLATILE
|
||||
|
||||
17
.editorconfig
Normal file
17
.editorconfig
Normal file
@@ -0,0 +1,17 @@
|
||||
# EditorConfig: https://editorconfig.org/
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
# All (Defaults)
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
indent_style = tab
|
||||
indent_size = 4
|
||||
tab_width = 4
|
||||
|
||||
[*.patch,*.diff]
|
||||
trim_trailing_whitespace = false
|
||||
36
.github/workflows/snapshot.yml
vendored
36
.github/workflows/snapshot.yml
vendored
@@ -8,7 +8,7 @@ name: OpenOCD Snapshot
|
||||
|
||||
jobs:
|
||||
package:
|
||||
runs-on: [ubuntu-18.04]
|
||||
runs-on: [ubuntu-latest]
|
||||
env:
|
||||
DL_DIR: ../downloads
|
||||
BUILD_DIR: ../build
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
sudo apt-get update
|
||||
sudo apt-get install autotools-dev autoconf automake libtool pkg-config cmake texinfo texlive g++-mingw-w64-i686
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v1
|
||||
uses: actions/checkout@v4
|
||||
- run: ./bootstrap
|
||||
- name: Prepare libusb1
|
||||
env:
|
||||
@@ -30,7 +30,7 @@ jobs:
|
||||
echo "LIBUSB1_SRC=$PWD/libusb-${LIBUSB1_VER}" >> $GITHUB_ENV
|
||||
- name: Prepare hidapi
|
||||
env:
|
||||
HIDAPI_VER: 0.11.2
|
||||
HIDAPI_VER: 0.13.1
|
||||
run: |
|
||||
mkdir -p $DL_DIR && cd $DL_DIR
|
||||
wget "https://github.com/libusb/hidapi/archive/hidapi-${HIDAPI_VER}.tar.gz"
|
||||
@@ -56,6 +56,24 @@ jobs:
|
||||
wget "https://github.com/aquynh/capstone/archive/${CAPSTONE_VER}.tar.gz"
|
||||
tar -xzf ${CAPSTONE_VER}.tar.gz
|
||||
echo "CAPSTONE_SRC=$PWD/capstone-${CAPSTONE_VER}" >> $GITHUB_ENV
|
||||
- name: Prepare libjaylink
|
||||
env:
|
||||
LIBJAYLINK_VER: 0.3.1
|
||||
run: |
|
||||
mkdir -p $DL_DIR && cd $DL_DIR
|
||||
wget https://gitlab.zapb.de/libjaylink/libjaylink/-/archive/${LIBJAYLINK_VER}/libjaylink-${LIBJAYLINK_VER}.tar.gz
|
||||
tar -xzf libjaylink-${LIBJAYLINK_VER}.tar.gz
|
||||
cd libjaylink-${LIBJAYLINK_VER}
|
||||
./autogen.sh
|
||||
echo "LIBJAYLINK_SRC=$PWD" >> $GITHUB_ENV
|
||||
- name: Prepare jimtcl
|
||||
env:
|
||||
JIMTCL_VER: 0.83
|
||||
run: |
|
||||
mkdir -p $DL_DIR && cd $DL_DIR
|
||||
wget https://github.com/msteveb/jimtcl/archive/refs/tags/${JIMTCL_VER}.tar.gz
|
||||
tar -xzf ${JIMTCL_VER}.tar.gz
|
||||
echo "JIMTCL_SRC=$PWD/jimtcl-${JIMTCL_VER}" >> $GITHUB_ENV
|
||||
- name: Package OpenOCD for windows
|
||||
env:
|
||||
MAKE_JOBS: 2
|
||||
@@ -64,6 +82,8 @@ jobs:
|
||||
HIDAPI_CONFIG: --enable-shared --disable-static --disable-testgui
|
||||
LIBFTDI_CONFIG: -DSTATICLIBS=OFF -DEXAMPLES=OFF -DFTDI_EEPROM=OFF
|
||||
CAPSTONE_CONFIG: "CAPSTONE_BUILD_CORE_ONLY=yes CAPSTONE_STATIC=yes CAPSTONE_SHARED=no"
|
||||
LIBJAYLINK_CONFIG: --enable-shared --disable-static
|
||||
JIMTCL_CONFIG: --with-ext=json --minimal --disable-ssl
|
||||
run: |
|
||||
# check if there is tag pointing at HEAD, otherwise take the HEAD SHA-1 as OPENOCD_TAG
|
||||
OPENOCD_TAG="`git tag --points-at HEAD`"
|
||||
@@ -82,7 +102,8 @@ jobs:
|
||||
# add missing dlls
|
||||
cd $HOST-root/usr
|
||||
cp `$HOST-gcc --print-file-name=libwinpthread-1.dll` ./bin/
|
||||
cp `$HOST-gcc --print-file-name=libgcc_s_sjlj-1.dll` ./bin/
|
||||
# required by libftdi1.dll
|
||||
cp `$HOST-gcc --print-file-name=libgcc_s_dw2-1.dll` ./bin/
|
||||
# prepare the artifact
|
||||
ARTIFACT="openocd-${OPENOCD_TAG}-${HOST}.tar.gz"
|
||||
tar -czf $ARTIFACT *
|
||||
@@ -90,16 +111,15 @@ jobs:
|
||||
echo "IS_PRE_RELEASE=$IS_PRE_RELEASE" >> $GITHUB_ENV
|
||||
echo "ARTIFACT_PATH=$PWD/$ARTIFACT" >> $GITHUB_ENV
|
||||
- name: Publish OpenOCD packaged for windows
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: ${{ env.ARTIFACT_PATH }}
|
||||
- name: Delete 'latest' Release
|
||||
uses: dev-drprasad/delete-tag-and-release@v0.2.0
|
||||
uses: dev-drprasad/delete-tag-and-release@v1.1
|
||||
with:
|
||||
delete_release: true
|
||||
tag_name: ${{ env.RELEASE_NAME }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Create Release
|
||||
uses: ncipollo/release-action@v1
|
||||
with:
|
||||
|
||||
17
.gitignore
vendored
17
.gitignore
vendored
@@ -11,9 +11,9 @@
|
||||
*.la
|
||||
*.in
|
||||
|
||||
# generated source files
|
||||
src/jtag/minidriver_imp.h
|
||||
src/jtag/jtag_minidriver.h
|
||||
# coverage files (gcov)
|
||||
*.gcda
|
||||
*.gcno
|
||||
|
||||
# OpenULINK driver files generated by SDCC
|
||||
src/jtag/drivers/OpenULINK/*.rel
|
||||
@@ -84,6 +84,9 @@ patches
|
||||
.cproject
|
||||
.settings
|
||||
|
||||
# VSCode stuff
|
||||
.vscode
|
||||
|
||||
# Emacs temp files
|
||||
*~
|
||||
|
||||
@@ -103,3 +106,11 @@ GTAGS
|
||||
|
||||
# checkpatch script files
|
||||
.checkpatch-camelcase.*
|
||||
|
||||
# clangd (e.g. for advanced code completion and linting) generates cache files
|
||||
# into .cache
|
||||
.cache
|
||||
|
||||
# A compile_commands.json can be generated using bear and will help tools such
|
||||
# as clangd to locate header files and use correct $CFLAGS
|
||||
compile_commands.json
|
||||
|
||||
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -1,6 +1,3 @@
|
||||
[submodule "tools/git2cl"]
|
||||
path = tools/git2cl
|
||||
url = https://git.savannah.nongnu.org/git/git2cl.git
|
||||
[submodule "jimtcl"]
|
||||
path = jimtcl
|
||||
url = https://github.com/msteveb/jimtcl.git
|
||||
|
||||
14
AUTHORS
14
AUTHORS
@@ -1,12 +1,2 @@
|
||||
Dominic Rath <Dominic.Rath@gmx.de>
|
||||
Magnus Lundin <lundin@mlu.mine.nu>
|
||||
Michael Fischer <fischermi@t-online.de>
|
||||
Spencer Oliver <spen@spen-soft.co.uk>
|
||||
Carsten Schlote <schlote@vahanus.net>
|
||||
Øyvind Harboe <oyvind.harboe@zylin.com>
|
||||
Duane Ellis <openocd@duaneellis.com>
|
||||
Michael Schwingen <michael@schwingen.org>
|
||||
Rick Altherr <kc8apf@users.berlios.de>
|
||||
David Brownell <dbrownell@users.sourceforge.net>
|
||||
Vincint Palatin <vpalatin@users.berlios.de>
|
||||
Zachary T Welch <zw@superlucidity.net>
|
||||
Please check the source code files and/or Git history for a list of all authors
|
||||
and contributors.
|
||||
|
||||
52
HACKING
52
HACKING
@@ -77,6 +77,37 @@ patch:
|
||||
src/openocd -s ../tcl -f /path/to/openocd.cfg
|
||||
@endcode
|
||||
|
||||
- Sparse Static Analyzer
|
||||
|
||||
Using this tool allows identifying some bug in C code.
|
||||
In the future, OpenOCD would use the sparse attribute 'bitwise' to
|
||||
detect incorrect endianness assignments.
|
||||
|
||||
Example usage:
|
||||
@code
|
||||
mkdir build-sparse; cd build-sparse
|
||||
../configure CC=cgcc CFLAGS="-Wsparse-all -Wno-declaration-after-statement \
|
||||
-Wno-unknown-attribute -Wno-transparent-union -Wno-tautological-compare \
|
||||
-Wno-vla -Wno-flexible-array-array -D__FLT_EVAL_METHOD__=0"
|
||||
make
|
||||
@endcode
|
||||
|
||||
- Code coverage analysis
|
||||
|
||||
By inspecting the code coverage, you can identify potential gaps in your testing
|
||||
and use that information to improve your test scenarios.
|
||||
|
||||
Example usage:
|
||||
@code
|
||||
mkdir build-gcov; cd build-gcov
|
||||
../configure --enable-gcov [...]
|
||||
make
|
||||
# ... Now execute your test scenarios to collect OpenOCD code coverage ...
|
||||
lcov --capture --directory ./src --output-file openocd-coverage.info
|
||||
genhtml openocd-coverage.info --output-directory coverage_report
|
||||
# ... Open coverage_report/index.html in a web browser ...
|
||||
@endcode
|
||||
|
||||
Please consider performing these additional checks where appropriate
|
||||
(especially Clang Static Analyzer for big portions of new code) and
|
||||
mention the results (e.g. "Valgrind-clean, no new Clang analyzer
|
||||
@@ -138,11 +169,9 @@ git remote add review https://USERNAME:PASSWORD@review.openocd.org/p/openocd.git
|
||||
Gerrit server, even if you plan to use several local branches for different
|
||||
topics. It is possible because @c for/master is not a traditional Git
|
||||
branch.
|
||||
-# You will need to install this hook, we will look into a better solution:
|
||||
@code
|
||||
scp -p -P 29418 USERNAME@review.openocd.org:hooks/commit-msg .git/hooks/
|
||||
@endcode
|
||||
Or with http only:
|
||||
-# You will need to install this hook to automatically add the
|
||||
field "Change-Id:" in the commit message, as required by Gerrit.
|
||||
We will look into a better solution:
|
||||
@code
|
||||
wget https://review.openocd.org/tools/hooks/commit-msg
|
||||
mv commit-msg .git/hooks
|
||||
@@ -219,6 +248,12 @@ doc: fix typos
|
||||
@code
|
||||
git pull --rebase origin master
|
||||
@endcode
|
||||
|
||||
-# When you create a new version of an old patch, check that the new patch
|
||||
keeps the same 'Change-Id:' field of the old patch.
|
||||
This allows the Gerrit server to recognize the patch as a new version of
|
||||
the older one and keeps track of the history and the review process.
|
||||
|
||||
-# Send the patches to the Gerrit server for review:
|
||||
@code
|
||||
git push review
|
||||
@@ -276,6 +311,13 @@ Only for <em>exceptional cases</em>, it is allowed to submit patches
|
||||
to Gerrit with the special field 'Checkpatch-ignore:' in the commit
|
||||
message. This field will cause checkpatch to ignore the error types
|
||||
listed in the field, only for the patch itself.
|
||||
For errors in the commit message, the special field has to be put in
|
||||
the commit message before the line that produces the error.
|
||||
The special field must be added <em>before</em> the 'Signed-off-by:'
|
||||
line, otherwise it is ignored.
|
||||
To ignore multiple errors, either add multiple lines with the special
|
||||
field or add multiple error types, separated by space or commas, in a
|
||||
single line.
|
||||
The error type is printed by checkpatch on failure.
|
||||
For example the names of Windows APIs mix lower and upper case chars,
|
||||
in violation of OpenOCD coding style, triggering a 'CAMELCASE' error:
|
||||
|
||||
409
LICENSES/dual/CC-BY-4.0
Normal file
409
LICENSES/dual/CC-BY-4.0
Normal file
@@ -0,0 +1,409 @@
|
||||
Valid-License-Identifier: CC-BY-4.0
|
||||
SPDX-URL: https://spdx.org/licenses/CC-BY-4.0
|
||||
Usage-Guide:
|
||||
Do NOT use on OpenOCD code. This license is not GPL2 compatible. It may only
|
||||
be used for dual-licensed files where the other license is GPL2 compatible.
|
||||
If you end up using this it MUST be used together with a GPL2 compatible
|
||||
license using "OR".
|
||||
To use the Creative Commons Attribution 4.0 International license put
|
||||
the following SPDX tag/value pair into a comment according to the
|
||||
placement guidelines in the licensing rules documentation:
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
License-Text:
|
||||
|
||||
Creative Commons Attribution 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution 4.0 International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution 4.0 International Public License ("Public License"). To the
|
||||
extent this Public License may be interpreted as a contract, You are
|
||||
granted the Licensed Rights in consideration of Your acceptance of
|
||||
these terms and conditions, and the Licensor grants You such rights in
|
||||
consideration of benefits the Licensor receives from making the
|
||||
Licensed Material available under these terms and conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
d. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
e. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
f. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
g. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
h. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
i. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
j. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
k. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
4. If You Share Adapted Material You produce, the Adapter's
|
||||
License You apply must not prevent recipients of the Adapted
|
||||
Material from complying with this Public License.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material; and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the "Licensor." The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
|
||||
@@ -173,7 +173,6 @@ OpenOCD, can be broken down into:
|
||||
|
||||
File format examples::
|
||||
|
||||
Valid-License-Identifier: GPL-2.0
|
||||
Valid-License-Identifier: GPL-2.0-only
|
||||
Valid-License-Identifier: GPL-2.0-or-later
|
||||
SPDX-URL: https://spdx.org/licenses/GPL-2.0.html
|
||||
@@ -182,15 +181,27 @@ OpenOCD, can be broken down into:
|
||||
tag/value pairs into a comment according to the placement
|
||||
guidelines in the licensing rules documentation.
|
||||
For 'GNU General Public License (GPL) version 2 only' use:
|
||||
SPDX-License-Identifier: GPL-2.0
|
||||
or
|
||||
SPDX-License-Identifier: GPL-2.0-only
|
||||
For 'GNU General Public License (GPL) version 2 or any later version' use:
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
License-Text:
|
||||
Full license text
|
||||
|
||||
2. Exceptions:
|
||||
2. Dual Licensing Only:
|
||||
|
||||
These licenses should only be used to dual license code with another
|
||||
license in addition to a preferred license. These licenses are available
|
||||
from the directory::
|
||||
|
||||
LICENSES/dual/
|
||||
|
||||
in the OpenOCD source tree.
|
||||
|
||||
The files in this directory contain the full license text and
|
||||
`Metatags`_. The file names are identical to the SPDX license
|
||||
identifier which shall be used for the license in source files.
|
||||
|
||||
3. Exceptions:
|
||||
|
||||
Some licenses can be amended with exceptions which grant certain rights
|
||||
which the original license does not. These exceptions are available
|
||||
@@ -247,7 +258,7 @@ OpenOCD, can be broken down into:
|
||||
License-Text:
|
||||
Full license text
|
||||
|
||||
3. Stand-alone licenses:
|
||||
4. Stand-alone licenses:
|
||||
|
||||
These licenses should only be used for stand-alone applications that are
|
||||
distributed with OpenOCD but are not included in the OpenOCD binary.
|
||||
|
||||
130
LICENSES/preferred/CC0-1.0
Normal file
130
LICENSES/preferred/CC0-1.0
Normal file
@@ -0,0 +1,130 @@
|
||||
Valid-License-Identifier: CC0-1.0
|
||||
SPDX-URL: https://spdx.org/licenses/CC0-1.0.html
|
||||
Usage-Guide:
|
||||
To use the Creative Commons Zero v1.0 Universal License put the following
|
||||
SPDX tag/value pair into a comment according to the placement guidelines in
|
||||
the licensing rules documentation:
|
||||
SPDX-License-Identifier: CC0-1.0
|
||||
License-Text:
|
||||
|
||||
Creative Commons Legal Code
|
||||
|
||||
CC0 1.0 Universal
|
||||
|
||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||
HEREUNDER.
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically confer
|
||||
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||
authorship and/or a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work for
|
||||
the purpose of contributing to a commons of creative, cultural and
|
||||
scientific works ("Commons") that the public can reliably and without fear
|
||||
of later claims of infringement build upon, modify, incorporate in other
|
||||
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||
and for any purposes, including without limitation commercial purposes.
|
||||
These owners may contribute to the Commons to promote the ideal of a free
|
||||
culture and the further production of creative, cultural and scientific
|
||||
works, or to gain reputation or greater distribution for their Work in
|
||||
part through the use and efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any
|
||||
expectation of additional consideration or compensation, the person
|
||||
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||
protected by copyright and related or neighboring rights ("Copyright and
|
||||
Related Rights"). Copyright and Related Rights include, but are not
|
||||
limited to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display,
|
||||
communicate, and translate a Work;
|
||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||
iii. publicity and privacy rights pertaining to a person's image or
|
||||
likeness depicted in a Work;
|
||||
iv. rights protecting against unfair competition in regards to a Work,
|
||||
subject to the limitations in paragraph 4(a), below;
|
||||
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||
in a Work;
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||
European Parliament and of the Council of 11 March 1996 on the legal
|
||||
protection of databases, and under any national implementation
|
||||
thereof, including any amended or successor version of such
|
||||
directive); and
|
||||
vii. other similar, equivalent or corresponding rights throughout the
|
||||
world based on applicable law or treaty, and any national
|
||||
implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||
of action, whether now known or unknown (including existing as well as
|
||||
future claims and causes of action), in the Work (i) in all territories
|
||||
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||
treaty (including future time extensions), (iii) in any current or future
|
||||
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||
including without limitation commercial, advertising or promotional
|
||||
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||
member of the public at large and to the detriment of Affirmer's heirs and
|
||||
successors, fully intending that such Waiver shall not be subject to
|
||||
revocation, rescission, cancellation, termination, or any other legal or
|
||||
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||
as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||
be judged legally invalid or ineffective under applicable law, then the
|
||||
Waiver shall be preserved to the maximum extent permitted taking into
|
||||
account Affirmer's express Statement of Purpose. In addition, to the
|
||||
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||
maximum duration provided by applicable law or treaty (including future
|
||||
time extensions), (iii) in any current or future medium and for any number
|
||||
of copies, and (iv) for any purpose whatsoever, including without
|
||||
limitation commercial, advertising or promotional purposes (the
|
||||
"License"). The License shall be deemed effective as of the date CC0 was
|
||||
applied by Affirmer to the Work. Should any part of the License for any
|
||||
reason be judged legally invalid or ineffective under applicable law, such
|
||||
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||
of the License, and in such case Affirmer hereby affirms that he or she
|
||||
will not (i) exercise any of his or her remaining Copyright and Related
|
||||
Rights in the Work or (ii) assert any associated claims and causes of
|
||||
action with respect to the Work, in either case contrary to Affirmer's
|
||||
express Statement of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||
surrendered, licensed or otherwise affected by this document.
|
||||
b. Affirmer offers the Work as-is and makes no representations or
|
||||
warranties of any kind concerning the Work, express, implied,
|
||||
statutory or otherwise, including without limitation warranties of
|
||||
title, merchantability, fitness for a particular purpose, non
|
||||
infringement, or the absence of latent or other defects, accuracy, or
|
||||
the present or absence of errors, whether or not discoverable, all to
|
||||
the greatest extent permissible under applicable law.
|
||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||
that may apply to the Work or any use thereof, including without
|
||||
limitation any person's Copyright and Related Rights in the Work.
|
||||
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||
consents, permissions or other rights required for any use of the
|
||||
Work.
|
||||
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||
party to this document and has no duty or obligation with respect to
|
||||
this CC0 or use of the Work.
|
||||
@@ -18,7 +18,7 @@ License-Text:
|
||||
|
||||
|
||||
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
|
||||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
<https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
Valid-License-Identifier: GPL-2.0
|
||||
Valid-License-Identifier: GPL-2.0-only
|
||||
Valid-License-Identifier: GPL-2.0-or-later
|
||||
SPDX-URL: https://spdx.org/licenses/GPL-2.0.html
|
||||
@@ -7,8 +6,6 @@ Usage-Guide:
|
||||
tag/value pairs into a comment according to the placement
|
||||
guidelines in the licensing rules documentation.
|
||||
For 'GNU General Public License (GPL) version 2 only' use:
|
||||
SPDX-License-Identifier: GPL-2.0
|
||||
or
|
||||
SPDX-License-Identifier: GPL-2.0-only
|
||||
For 'GNU General Public License (GPL) version 2 or any later version' use:
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
@@ -18,7 +15,7 @@ License-Text:
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
<https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
@@ -320,8 +317,7 @@ the "copyright" line and a pointer to where the full notice is found.
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
with this program; if not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
|
||||
503
LICENSES/preferred/LGPL-2.1
Normal file
503
LICENSES/preferred/LGPL-2.1
Normal file
@@ -0,0 +1,503 @@
|
||||
Valid-License-Identifier: LGPL-2.1-only
|
||||
Valid-License-Identifier: LGPL-2.1-or-later
|
||||
SPDX-URL: https://spdx.org/licenses/LGPL-2.1.html
|
||||
Usage-Guide:
|
||||
To use this license in source code, put one of the following SPDX
|
||||
tag/value pairs into a comment according to the placement
|
||||
guidelines in the licensing rules documentation.
|
||||
For 'GNU Lesser General Public License (LGPL) version 2.1 only' use:
|
||||
SPDX-License-Identifier: LGPL-2.1-only
|
||||
For 'GNU Lesser General Public License (LGPL) version 2.1 or any later
|
||||
version' use:
|
||||
SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
License-Text:
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
<https://fsf.org/>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this
|
||||
license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts as
|
||||
the successor of the GNU Library Public License, version 2, hence the
|
||||
version number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your freedom to
|
||||
share and change it. By contrast, the GNU General Public Licenses are
|
||||
intended to guarantee your freedom to share and change free software--to
|
||||
make sure the software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some specially
|
||||
designated software packages--typically libraries--of the Free Software
|
||||
Foundation and other authors who decide to use it. You can use it too, but
|
||||
we suggest you first think carefully about whether this license or the
|
||||
ordinary General Public License is the better strategy to use in any
|
||||
particular case, based on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use, not
|
||||
price. Our General Public Licenses are designed to make sure that you have
|
||||
the freedom to distribute copies of free software (and charge for this
|
||||
service if you wish); that you receive source code or can get it if you
|
||||
want it; that you can change the software and use pieces of it in new free
|
||||
programs; and that you are informed that you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
distributors to deny you these rights or to ask you to surrender these
|
||||
rights. These restrictions translate to certain responsibilities for you if
|
||||
you distribute copies of the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis or for
|
||||
a fee, you must give the recipients all the rights that we gave you. You
|
||||
must make sure that they, too, receive or can get the source code. If you
|
||||
link other code with the library, you must provide complete object files to
|
||||
the recipients, so that they can relink them with the library after making
|
||||
changes to the library and recompiling it. And you must show them these
|
||||
terms so they know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the
|
||||
library, and (2) we offer you this license, which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that there is no
|
||||
warranty for the free library. Also, if the library is modified by someone
|
||||
else and passed on, the recipients should know that what they have is not
|
||||
the original version, so that the original author's reputation will not be
|
||||
affected by problems that might be introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of any
|
||||
free program. We wish to make sure that a company cannot effectively
|
||||
restrict the users of a free program by obtaining a restrictive license
|
||||
from a patent holder. Therefore, we insist that any patent license obtained
|
||||
for a version of the library must be consistent with the full freedom of
|
||||
use specified in this license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the ordinary GNU
|
||||
General Public License. This license, the GNU Lesser General Public
|
||||
License, applies to certain designated libraries, and is quite different
|
||||
from the ordinary General Public License. We use this license for certain
|
||||
libraries in order to permit linking those libraries into non-free
|
||||
programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using a
|
||||
shared library, the combination of the two is legally speaking a combined
|
||||
work, a derivative of the original library. The ordinary General Public
|
||||
License therefore permits such linking only if the entire combination fits
|
||||
its criteria of freedom. The Lesser General Public License permits more lax
|
||||
criteria for linking other code with the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it does
|
||||
Less to protect the user's freedom than the ordinary General Public
|
||||
License. It also provides other free software developers Less of an
|
||||
advantage over competing non-free programs. These disadvantages are the
|
||||
reason we use the ordinary General Public License for many
|
||||
libraries. However, the Lesser license provides advantages in certain
|
||||
special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to encourage
|
||||
the widest possible use of a certain library, so that it becomes a de-facto
|
||||
standard. To achieve this, non-free programs must be allowed to use the
|
||||
library. A more frequent case is that a free library does the same job as
|
||||
widely used non-free libraries. In this case, there is little to gain by
|
||||
limiting the free library to free software only, so we use the Lesser
|
||||
General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free programs
|
||||
enables a greater number of people to use a large body of free
|
||||
software. For example, permission to use the GNU C Library in non-free
|
||||
programs enables many more people to use the whole GNU operating system, as
|
||||
well as its variant, the GNU/Linux operating system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the users'
|
||||
freedom, it does ensure that the user of a program that is linked with the
|
||||
Library has the freedom and the wherewithal to run that program using a
|
||||
modified version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification
|
||||
follow. Pay close attention to the difference between a "work based on the
|
||||
library" and a "work that uses the library". The former contains code
|
||||
derived from the library, whereas the latter must be combined with the
|
||||
library in order to run.
|
||||
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other program
|
||||
which contains a notice placed by the copyright holder or other
|
||||
authorized party saying it may be distributed under the terms of this
|
||||
Lesser General Public License (also called "this License"). Each
|
||||
licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work which
|
||||
has been distributed under these terms. A "work based on the Library"
|
||||
means either the Library or any derivative work under copyright law:
|
||||
that is to say, a work containing the Library or a portion of it, either
|
||||
verbatim or with modifications and/or translated straightforwardly into
|
||||
another language. (Hereinafter, translation is included without
|
||||
limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for making
|
||||
modifications to it. For a library, complete source code means all the
|
||||
source code for all modules it contains, plus any associated interface
|
||||
definition files, plus the scripts used to control compilation and
|
||||
installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of running
|
||||
a program using the Library is not restricted, and output from such a
|
||||
program is covered only if its contents constitute a work based on the
|
||||
Library (independent of the use of the Library in a tool for writing
|
||||
it). Whether that is true depends on what the Library does and what the
|
||||
program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's complete
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the notices
|
||||
that refer to this License and to the absence of any warranty; and
|
||||
distribute a copy of this License along with the Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion of it,
|
||||
thus forming a work based on the Library, and copy and distribute such
|
||||
modifications or work under the terms of Section 1 above, provided that
|
||||
you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices stating
|
||||
that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no charge to
|
||||
all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a table
|
||||
of data to be supplied by an application program that uses the
|
||||
facility, other than as an argument passed when the facility is
|
||||
invoked, then you must make a good faith effort to ensure that, in
|
||||
the event an application does not supply such function or table, the
|
||||
facility still operates, and performs whatever part of its purpose
|
||||
remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has a
|
||||
purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must be
|
||||
optional: if the application does not supply it, the square root
|
||||
function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library, and
|
||||
can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based on
|
||||
the Library, the distribution of the whole must be on the terms of this
|
||||
License, whose permissions for other licensees extend to the entire
|
||||
whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of a
|
||||
storage or distribution medium does not bring the other work under the
|
||||
scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so that
|
||||
they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in these
|
||||
notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for that
|
||||
copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of the
|
||||
Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or derivative of
|
||||
it, under Section 2) in object code or executable form under the terms
|
||||
of Sections 1 and 2 above provided that you accompany it with the
|
||||
complete corresponding machine-readable source code, which must be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy from a
|
||||
designated place, then offering equivalent access to copy the source
|
||||
code from the same place satisfies the requirement to distribute the
|
||||
source code, even though third parties are not compelled to copy the
|
||||
source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the Library, but
|
||||
is designed to work with the Library by being compiled or linked with
|
||||
it, is called a "work that uses the Library". Such a work, in isolation,
|
||||
is not a derivative work of the Library, and therefore falls outside the
|
||||
scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library creates
|
||||
an executable that is a derivative of the Library (because it contains
|
||||
portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License. Section 6
|
||||
states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is
|
||||
not. Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data structure
|
||||
layouts and accessors, and small macros and small inline functions (ten
|
||||
lines or less in length), then the use of the object file is
|
||||
unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section
|
||||
6. Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or link a
|
||||
"work that uses the Library" with the Library to produce a work
|
||||
containing portions of the Library, and distribute that work under terms
|
||||
of your choice, provided that the terms permit modification of the work
|
||||
for the customer's own use and reverse engineering for debugging such
|
||||
modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work during
|
||||
execution displays copyright notices, you must include the copyright
|
||||
notice for the Library among them, as well as a reference directing the
|
||||
user to the copy of this License. Also, you must do one of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding machine-readable
|
||||
source code for the Library including whatever changes were used in
|
||||
the work (which must be distributed under Sections 1 and 2 above);
|
||||
and, if the work is an executable linked with the Library, with the
|
||||
complete machine-readable "work that uses the Library", as object
|
||||
code and/or source code, so that the user can modify the Library and
|
||||
then relink to produce a modified executable containing the modified
|
||||
Library. (It is understood that the user who changes the contents of
|
||||
definitions files in the Library will not necessarily be able to
|
||||
recompile the application to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a copy
|
||||
of the library already present on the user's computer system, rather
|
||||
than copying library functions into the executable, and (2) will
|
||||
operate properly with a modified version of the library, if the user
|
||||
installs one, as long as the modified version is interface-compatible
|
||||
with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at least three
|
||||
years, to give the same user the materials specified in Subsection
|
||||
6a, above, for a charge no more than the cost of performing this
|
||||
distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy from a
|
||||
designated place, offer equivalent access to copy the above specified
|
||||
materials from the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these materials
|
||||
or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the Library"
|
||||
must include any data and utility programs needed for reproducing the
|
||||
executable from it. However, as a special exception, the materials to be
|
||||
distributed need not include anything that is normally distributed (in
|
||||
either source or binary form) with the major components (compiler,
|
||||
kernel, and so on) of the operating system on which the executable runs,
|
||||
unless that component itself accompanies the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license restrictions
|
||||
of other proprietary libraries that do not normally accompany the
|
||||
operating system. Such a contradiction means you cannot use both them
|
||||
and the Library together in an executable that you distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the Library
|
||||
side-by-side in a single library together with other library facilities
|
||||
not covered by this License, and distribute such a combined library,
|
||||
provided that the separate distribution of the work based on the Library
|
||||
and of the other library facilities is otherwise permitted, and provided
|
||||
that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based on
|
||||
the Library, uncombined with any other library facilities. This must
|
||||
be distributed under the terms of the Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact that part
|
||||
of it is a work based on the Library, and explaining where to find
|
||||
the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute the
|
||||
Library except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense, link with, or distribute the
|
||||
Library is void, and will automatically terminate your rights under this
|
||||
License. However, parties who have received copies, or rights, from you
|
||||
under this License will not have their licenses terminated so long as
|
||||
such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not signed
|
||||
it. However, nothing else grants you permission to modify or distribute
|
||||
the Library or its derivative works. These actions are prohibited by law
|
||||
if you do not accept this License. Therefore, by modifying or
|
||||
distributing the Library (or any work based on the Library), you
|
||||
indicate your acceptance of this License to do so, and all its terms and
|
||||
conditions for copying, distributing or modifying the Library or works
|
||||
based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted
|
||||
herein. You are not responsible for enforcing compliance by third
|
||||
parties with this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent license
|
||||
would not permit royalty-free redistribution of the Library by all
|
||||
those who receive copies directly or indirectly through you, then the
|
||||
only way you could satisfy both it and this License would be to refrain
|
||||
entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply, and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is implemented
|
||||
by public license practices. Many people have made generous
|
||||
contributions to the wide range of software distributed through that
|
||||
system in reliance on consistent application of that system; it is up
|
||||
to the author/donor to decide if he or she is willing to distribute
|
||||
software through any other system and a licensee cannot impose that
|
||||
choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in certain
|
||||
countries either by patents or by copyrighted interfaces, the original
|
||||
copyright holder who places the Library under this License may add an
|
||||
explicit geographical distribution limitation excluding those
|
||||
countries, so that distribution is permitted only in or among countries
|
||||
not thus excluded. In such case, this License incorporates the
|
||||
limitation as if written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new versions of
|
||||
the Lesser General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in
|
||||
detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a license
|
||||
version number, you may choose any version ever published by the Free
|
||||
Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free Software
|
||||
Foundation; we sometimes make exceptions for this. Our decision will be
|
||||
guided by the two goals of preserving the free status of all
|
||||
derivatives of our free software and of promoting the sharing and reuse
|
||||
of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
||||
ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH
|
||||
YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
|
||||
NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
|
||||
DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
|
||||
DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY
|
||||
(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
|
||||
INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
|
||||
THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR
|
||||
OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms of the
|
||||
ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is
|
||||
safest to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least the
|
||||
"copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
one line to give the library's name and an idea of what it does.
|
||||
Copyright (C) year name of author
|
||||
|
||||
This library is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or (at
|
||||
your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this library; if not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in
|
||||
the library `Frob' (a library for tweaking knobs) written
|
||||
by James Random Hacker.
|
||||
|
||||
signature of Ty Coon, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
That's all there is to it!
|
||||
189
LICENSES/stand-alone/Apache-2.0
Normal file
189
LICENSES/stand-alone/Apache-2.0
Normal file
@@ -0,0 +1,189 @@
|
||||
Valid-License-Identifier: Apache-2.0
|
||||
SPDX-URL: https://spdx.org/licenses/Apache-2.0.html
|
||||
Usage-Guide:
|
||||
Do NOT use on OpenOCD code. The Apache-2.0 is not GPL2 compatible. It may only
|
||||
be used for dual-licensed files where the other license is GPL2 compatible.
|
||||
If you end up using this it MUST be used together with a GPL2 compatible
|
||||
license using "OR".
|
||||
It may also be used for stand-alone code NOT linked within the OpenOCD binary
|
||||
but distributed with OpenOCD.
|
||||
To use the Apache License version 2.0 put the following SPDX tag/value
|
||||
pair into a comment according to the placement guidelines in the
|
||||
licensing rules documentation:
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
License-Text:
|
||||
|
||||
Apache License
|
||||
|
||||
Version 2.0, January 2004
|
||||
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction, and
|
||||
distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by the
|
||||
copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all other
|
||||
entities that control, are controlled by, or are under common control with
|
||||
that entity. For the purposes of this definition, "control" means (i) the
|
||||
power, direct or indirect, to cause the direction or management of such
|
||||
entity, whether by contract or otherwise, or (ii) ownership of fifty
|
||||
percent (50%) or more of the outstanding shares, or (iii) beneficial
|
||||
ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity exercising
|
||||
permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation source,
|
||||
and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical transformation
|
||||
or translation of a Source form, including but not limited to compiled
|
||||
object code, generated documentation, and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or Object form,
|
||||
made available under the License, as indicated by a copyright notice that
|
||||
is included in or attached to the work (an example is provided in the
|
||||
Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object form,
|
||||
that is based on (or derived from) the Work and for which the editorial
|
||||
revisions, annotations, elaborations, or other modifications represent, as
|
||||
a whole, an original work of authorship. For the purposes of this License,
|
||||
Derivative Works shall not include works that remain separable from, or
|
||||
merely link (or bind by name) to the interfaces of, the Work and Derivative
|
||||
Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including the original
|
||||
version of the Work and any modifications or additions to that Work or
|
||||
Derivative Works thereof, that is intentionally submitted to Licensor for
|
||||
inclusion in the Work by the copyright owner or by an individual or Legal
|
||||
Entity authorized to submit on behalf of the copyright owner. For the
|
||||
purposes of this definition, "submitted" means any form of electronic,
|
||||
verbal, or written communication sent to the Licensor or its
|
||||
representatives, including but not limited to communication on electronic
|
||||
mailing lists, source code control systems, and issue tracking systems that
|
||||
are managed by, or on behalf of, the Licensor for the purpose of discussing
|
||||
and improving the Work, but excluding communication that is conspicuously
|
||||
marked or otherwise designated in writing by the copyright owner as "Not a
|
||||
Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity on
|
||||
behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of this
|
||||
License, each Contributor hereby grants to You a perpetual, worldwide,
|
||||
non-exclusive, no-charge, royalty-free, irrevocable copyright license to
|
||||
reproduce, prepare Derivative Works of, publicly display, publicly
|
||||
perform, sublicense, and distribute the Work and such Derivative Works
|
||||
in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of this
|
||||
License, each Contributor hereby grants to You a perpetual, worldwide,
|
||||
non-exclusive, no-charge, royalty-free, irrevocable (except as stated in
|
||||
this section) patent license to make, have made, use, offer to sell,
|
||||
sell, import, and otherwise transfer the Work, where such license
|
||||
applies only to those patent claims licensable by such Contributor that
|
||||
are necessarily infringed by their Contribution(s) alone or by
|
||||
combination of their Contribution(s) with the Work to which such
|
||||
Contribution(s) was submitted. If You institute patent litigation
|
||||
against any entity (including a cross-claim or counterclaim in a
|
||||
lawsuit) alleging that the Work or a Contribution incorporated within
|
||||
the Work constitutes direct or contributory patent infringement, then
|
||||
any patent licenses granted to You under this License for that Work
|
||||
shall terminate as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the Work or
|
||||
Derivative Works thereof in any medium, with or without modifications,
|
||||
and in Source or Object form, provided that You meet the following
|
||||
conditions:
|
||||
|
||||
a. You must give any other recipients of the Work or Derivative Works a
|
||||
copy of this License; and
|
||||
|
||||
b. You must cause any modified files to carry prominent notices stating
|
||||
that You changed the files; and
|
||||
|
||||
c. You must retain, in the Source form of any Derivative Works that You
|
||||
distribute, all copyright, patent, trademark, and attribution notices
|
||||
from the Source form of the Work, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works; and
|
||||
|
||||
d. If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained within
|
||||
such NOTICE file, excluding those notices that do not pertain to any
|
||||
part of the Derivative Works, in at least one of the following
|
||||
places: within a NOTICE text file distributed as part of the
|
||||
Derivative Works; within the Source form or documentation, if
|
||||
provided along with the Derivative Works; or, within a display
|
||||
generated by the Derivative Works, if and wherever such third-party
|
||||
notices normally appear. The contents of the NOTICE file are for
|
||||
informational purposes only and do not modify the License. You may
|
||||
add Your own attribution notices within Derivative Works that You
|
||||
distribute, alongside or as an addendum to the NOTICE text from the
|
||||
Work, provided that such additional attribution notices cannot be
|
||||
construed as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and may
|
||||
provide additional or different license terms and conditions for use,
|
||||
reproduction, or distribution of Your modifications, or for any such
|
||||
Derivative Works as a whole, provided Your use, reproduction, and
|
||||
distribution of the Work otherwise complies with the conditions stated
|
||||
in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise, any
|
||||
Contribution intentionally submitted for inclusion in the Work by You to
|
||||
the Licensor shall be under the terms and conditions of this License,
|
||||
without any additional terms or conditions. Notwithstanding the above,
|
||||
nothing herein shall supersede or modify the terms of any separate
|
||||
license agreement you may have executed with Licensor regarding such
|
||||
Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or agreed to
|
||||
in writing, Licensor provides the Work (and each Contributor provides
|
||||
its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
|
||||
OF ANY KIND, either express or implied, including, without limitation,
|
||||
any warranties or conditions of TITLE, NON-INFRINGEMENT,
|
||||
MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely
|
||||
responsible for determining the appropriateness of using or
|
||||
redistributing the Work and assume any risks associated with Your
|
||||
exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory, whether
|
||||
in tort (including negligence), contract, or otherwise, unless required
|
||||
by applicable law (such as deliberate and grossly negligent acts) or
|
||||
agreed to in writing, shall any Contributor be liable to You for
|
||||
damages, including any direct, indirect, special, incidental, or
|
||||
consequential damages of any character arising as a result of this
|
||||
License or out of the use or inability to use the Work (including but
|
||||
not limited to damages for loss of goodwill, work stoppage, computer
|
||||
failure or malfunction, or any and all other commercial damages or
|
||||
losses), even if such Contributor has been advised of the possibility of
|
||||
such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing the
|
||||
Work or Derivative Works thereof, You may choose to offer, and charge a
|
||||
fee for, acceptance of support, warranty, indemnity, or other liability
|
||||
obligations and/or rights consistent with this License. However, in
|
||||
accepting such obligations, You may act only on Your own behalf and on
|
||||
Your sole responsibility, not on behalf of any other Contributor, and
|
||||
only if You agree to indemnify, defend, and hold each Contributor
|
||||
harmless for any liability incurred by, or claims asserted against, such
|
||||
Contributor by reason of your accepting any such warranty or additional
|
||||
liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
42
Makefile.am
42
Makefile.am
@@ -1,16 +1,14 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
# not a GNU package. You can remove this line, if
|
||||
# have all needed files, that a GNU package needs
|
||||
AUTOMAKE_OPTIONS = gnu 1.6
|
||||
AUTOMAKE_OPTIONS = foreign 1.14
|
||||
|
||||
.DELETE_ON_ERROR:
|
||||
|
||||
# make sure we pass the correct jimtcl flags to distcheck
|
||||
DISTCHECK_CONFIGURE_FLAGS = --disable-install-jim
|
||||
AM_DISTCHECK_CONFIGURE_FLAGS = --disable-install-jim
|
||||
|
||||
# do not run Jim Tcl tests (esp. during distcheck)
|
||||
check-recursive: SUBDIRS :=
|
||||
check-recursive: SUBDIRS := $(SUBDIRS:jimtcl=)
|
||||
|
||||
nobase_dist_pkgdata_DATA = \
|
||||
contrib/libdcc/dcc_stdio.c \
|
||||
@@ -26,14 +24,22 @@ noinst_LTLIBRARIES =
|
||||
info_TEXINFOS =
|
||||
dist_man_MANS =
|
||||
EXTRA_DIST =
|
||||
DISTCLEANFILES =
|
||||
|
||||
if INTERNAL_JIMTCL
|
||||
SUBDIRS += jimtcl
|
||||
DIST_SUBDIRS += jimtcl
|
||||
EXTRA_DIST += jimtcl/configure.gnu
|
||||
# jimtcl from 0.79 to 0.82 miss cleaning jsmn.o
|
||||
DISTCLEANFILES += jimtcl/jsmn/jsmn.o
|
||||
endif
|
||||
|
||||
SUBDIRS += testing
|
||||
DIST_SUBDIRS += testing
|
||||
|
||||
# common flags used in openocd build
|
||||
AM_CFLAGS = $(GCC_WARNINGS)
|
||||
AM_LDFLAGS =
|
||||
|
||||
AM_CPPFLAGS = $(HOST_CPPFLAGS)\
|
||||
-I$(top_srcdir)/src \
|
||||
@@ -44,26 +50,38 @@ AM_CPPFLAGS = $(HOST_CPPFLAGS)\
|
||||
if INTERNAL_JIMTCL
|
||||
AM_CPPFLAGS += -I$(top_srcdir)/jimtcl \
|
||||
-I$(top_builddir)/jimtcl
|
||||
else
|
||||
AM_CPPFLAGS += $(JIMTCL_CFLAGS)
|
||||
endif
|
||||
|
||||
if USE_GCOV
|
||||
AM_CFLAGS += --coverage
|
||||
AM_LDFLAGS += --coverage
|
||||
endif
|
||||
|
||||
EXTRA_DIST += \
|
||||
BUGS \
|
||||
HACKING \
|
||||
NEWTAPS \
|
||||
README.Windows \
|
||||
README.macOS \
|
||||
README.Windows.md \
|
||||
README.macOS.md \
|
||||
$(EXTRA_DIST_NEWS) \
|
||||
Doxyfile.in \
|
||||
LICENSES/license-rules.txt \
|
||||
LICENSES/dual/CC-BY-4.0 \
|
||||
LICENSES/exceptions/eCos-exception-2.0 \
|
||||
LICENSES/preferred/BSD-1-Clause \
|
||||
LICENSES/preferred/BSD-2-Clause \
|
||||
LICENSES/preferred/BSD-2-Clause-Views \
|
||||
LICENSES/preferred/BSD-3-Clause \
|
||||
LICENSES/preferred/BSD-Source-Code \
|
||||
LICENSES/preferred/CC0-1.0 \
|
||||
LICENSES/preferred/GFDL-1.2 \
|
||||
LICENSES/preferred/gfdl-1.2.texi.readme \
|
||||
LICENSES/preferred/GPL-2.0 \
|
||||
LICENSES/preferred/LGPL-2.1 \
|
||||
LICENSES/preferred/MIT \
|
||||
LICENSES/stand-alone/Apache-2.0 \
|
||||
LICENSES/stand-alone/GPL-3.0 \
|
||||
tools/logger.pl \
|
||||
tools/rlink_make_speed_table \
|
||||
@@ -107,9 +125,13 @@ TCL_PATH = tcl
|
||||
TCL_FILES = find $(srcdir)/$(TCL_PATH) -name '*.cfg' -o -name '*.tcl' -o -name '*.txt' | \
|
||||
sed -e 's,^$(srcdir)/$(TCL_PATH),,'
|
||||
|
||||
# The git log command below generates many empty text lines with only some space characters
|
||||
# for indentation purposes, so use sed to trim all trailing whitespace.
|
||||
dist-hook:
|
||||
if test -d $(srcdir)/.git -a \( ! -e $(distdir)/ChangeLog -o -w $(distdir)/ChangeLog \) ; then \
|
||||
git --git-dir $(srcdir)/.git log | $(srcdir)/tools/git2cl/git2cl > $(distdir)/ChangeLog ; \
|
||||
git --git-dir $(srcdir)/.git log --date=short --pretty="format:%ad %aN <%aE>%n%n%w(0,4,6)* %B" \
|
||||
| sed 's/[[:space:]]*$$//' > $(distdir)/ChangeLog.tmp && \
|
||||
mv $(distdir)/ChangeLog.tmp $(distdir)/ChangeLog; \
|
||||
fi
|
||||
for i in $$($(TCL_FILES)); do \
|
||||
j="$(distdir)/$(TCL_PATH)/$$i" && \
|
||||
@@ -129,9 +151,9 @@ uninstall-hook:
|
||||
|
||||
distclean-local:
|
||||
rm -rf Doxyfile doxygen
|
||||
rm -f $(srcdir)/jimtcl/configure.gnu
|
||||
-rm -f $(srcdir)/jimtcl/configure.gnu
|
||||
|
||||
DISTCLEANFILES = doxygen.log
|
||||
DISTCLEANFILES += doxygen.log
|
||||
|
||||
METASOURCES = AUTO
|
||||
|
||||
|
||||
99
NEWS
99
NEWS
@@ -2,126 +2,29 @@ This file includes highlights of the changes made in the OpenOCD
|
||||
source archive release.
|
||||
|
||||
JTAG Layer:
|
||||
* add default to adapter speed when unspecified (100 kHz)
|
||||
* AM335X gpio (BeagleBones) adapter driver
|
||||
* BCM2835 support for SWD
|
||||
* Cadence Virtual Debug (vdebug) adapter driver
|
||||
* CMSIS-DAP support for SWO and SWD multidrop
|
||||
* Espressif USB JTAG Programmer adapter driver
|
||||
* Remote bitbang support for Windows host
|
||||
* ST-LINK add TCP server support to adapter driver
|
||||
* SWD multidrop support
|
||||
|
||||
Boundary Scan:
|
||||
|
||||
Target Layer:
|
||||
* aarch64: support watchpoints
|
||||
* arm: support independent TPIU and SWO for trace
|
||||
* arm adi v5: support Large Physical Address Extension
|
||||
* arm adi v6: support added, for jtag and swd transport
|
||||
* cortex_a: support watchpoints
|
||||
* elf 64bit load support
|
||||
* Espressif: support ESP32, ESP32-S2 and ESP32-S3 cores
|
||||
* semihosting: support user defined operations
|
||||
* Xtensa: support Xtensa LX architecture via JTAG and ADIv5 DAP
|
||||
|
||||
Flash Layer:
|
||||
* Atmel/Microchip SAM E51G18A, E51G19A, R35J18B, LAN9255 support
|
||||
* GigaDevice GD32E23x, GD32F1x0/3x0, GD32VF103 support
|
||||
* Nuvoton NPCX series support
|
||||
* onsemi RSL10 support
|
||||
* Raspberry Pi Pico RP2040 support
|
||||
* ST BlueNRG-LPS support
|
||||
* ST STM32 G05x, G06x, G0Bx, G0Cx, U57x, U58x, WB1x, WL5x support
|
||||
* ST STM32 G0, G4, L4, L4+, L5, WB, WL OTP support
|
||||
|
||||
Board, Target, and Interface Configuration Scripts:
|
||||
* Ampere Computing eMAG8180, Altra ("Quicksilver") and Altra Max ("Mystique") board config
|
||||
* Cadence KC705 FPGA (Xtensa Development Platform) via JTAG and ADIv5 DAP board config
|
||||
* Digilent Nexys Video board config
|
||||
* Espressif ESP32 ETHERNET-KIT and WROVER-KIT board config
|
||||
* Espressif ESP32 via ESP USB Bridge generic board config
|
||||
* Espressif ESP32-S2 Kaluga 1 board config
|
||||
* Espressif ESP32-S2 with ESP USB Bridge board config
|
||||
* Espressif ESP32-S3 example board config
|
||||
* Kontron SMARC-sAL28 board config
|
||||
* LambdaConcept ECPIX-5 board config
|
||||
* Microchip ATSAMA5D27-SOM1-EK1 board config
|
||||
* Microchip EVB-LAN9255 board config
|
||||
* Microchip SAME51 Curiosity Nano board config
|
||||
* NXP FRDM-K64F, LS1046ARDB and LS1088ARDB board config
|
||||
* NXP RT6XX board config
|
||||
* Olimex H405 board config
|
||||
* Radiona ULX3S board config
|
||||
* Raspberry Pi 3 and Raspberry Pi 4 model B board config
|
||||
* Raspberry Pi Pico-Debug board config
|
||||
* Renesas R-Car V3U Falcon board config
|
||||
* ST BlueNRG-LPS steval-idb012v1 board config
|
||||
* ST NUCLEO-8S208RB board config
|
||||
* ST NUCLEO-G031K8, NUCLEO-G070RB, NUCLEO-G071RB board config
|
||||
* ST NUCLEO-G431KB, NUCLEO-G431RB, NUCLEO-G474RE board config
|
||||
* ST STM32MP13x-DK board config
|
||||
* TI AM625 EVM, AM642 EVM and AM654 EVM board config
|
||||
* TI J721E EVM, J721S2 EVM and J7200 EVM board config
|
||||
* Ampere Computing eMAG, Altra ("Quicksilver") and Altra Max ("Mystique") target config
|
||||
* Cadence Xtensa generic and Xtensa VDebug target config
|
||||
* Broadcom BCM2711, BCM2835, BCM2836 and BCM2837 target config
|
||||
* Espressif ESP32, ESP32-S2 and ESP32-S3 target config
|
||||
* Microchip ATSAMA5D2 series target config
|
||||
* NanoXplore NG-Ultra SoC target config
|
||||
* NXP IMX8QM target config
|
||||
* NXP LS1028A, LS1046A and LS1088A target config
|
||||
* NXP RT600 (Xtensa HiFi DSP) target config
|
||||
* onsemi RSL10 target config
|
||||
* Raspberry Pi Pico RP2040 target config
|
||||
* Renesas R8A779A0 V3U target config
|
||||
* Renesas RZ/Five target config
|
||||
* Renesas RZ/G2 MPU family target config
|
||||
* Rockchip RK3399 target config
|
||||
* ST BlueNRG-LPS target config
|
||||
* ST STM32MP13x target config
|
||||
* TI AM625, AM654, J721E and J721S2 target config
|
||||
* Ashling Opella-LD interface config
|
||||
* Aspeed AST2600 linuxgpiod based interface config
|
||||
* Blinkinlabs JTAG_Hat interface config
|
||||
* Cadence Virtual Debug (vdebug) interface config
|
||||
* Espressif ESP32-S2 Kaluga 1 board's interface config
|
||||
* Espressif USB Bridge jtag interface config
|
||||
* Infineon DAP miniWiggler V3 interface config
|
||||
* PLS SPC5 interface config
|
||||
* Tigard interface config
|
||||
* Lattice MachXO3 family FPGA config
|
||||
|
||||
Server Layer:
|
||||
* GDB: add per-target remote protocol extensions
|
||||
* GDB: more 'Z' packets support
|
||||
* IPDBG JtagHost server functionality
|
||||
* semihosting: I/O redirection to TCP server
|
||||
* telnet: support for command's autocomplete
|
||||
|
||||
RTOS:
|
||||
* 'none' rtos support
|
||||
* Zephyr rtos support
|
||||
|
||||
Documentation:
|
||||
|
||||
Build and Release:
|
||||
* Add json extension to jimtcl build
|
||||
* Drop dependency from libusb0
|
||||
* Drop repository repo.or.cz for submodules
|
||||
* Move gerrit to https://review.openocd.org/
|
||||
* Require autoconf 2.69 or newer
|
||||
* Update jep106 to revision JEP106BE
|
||||
* Update jimtcl to version 0.81
|
||||
* Update libjaylink to version 0.3.1
|
||||
* New configure flag '--enable-jimtcl-maintainer' for jimtcl build
|
||||
|
||||
|
||||
This release also contains a number of other important functional and
|
||||
cosmetic bugfixes. For more details about what has changed since the
|
||||
last release, see the git repository history:
|
||||
|
||||
http://sourceforge.net/p/openocd/code/ci/v0.12.0-rc1/log/?path=
|
||||
http://sourceforge.net/p/openocd/code/ci/v0.x.0/log/?path=
|
||||
|
||||
|
||||
For older NEWS, see the NEWS files associated with each release
|
||||
|
||||
132
NEWS-0.12.0
Normal file
132
NEWS-0.12.0
Normal file
@@ -0,0 +1,132 @@
|
||||
This file includes highlights of the changes made in the OpenOCD
|
||||
source archive release.
|
||||
|
||||
JTAG Layer:
|
||||
* add default to adapter speed when unspecified (100 kHz)
|
||||
* AM335X gpio (BeagleBones) adapter driver
|
||||
* BCM2835 support for SWD
|
||||
* Cadence Virtual Debug (vdebug) adapter driver
|
||||
* CMSIS-DAP support for SWO and SWD multidrop
|
||||
* Espressif USB JTAG Programmer adapter driver
|
||||
* Remote bitbang support for Windows host
|
||||
* ST-LINK add TCP server support to adapter driver
|
||||
* SWD multidrop support
|
||||
|
||||
Boundary Scan:
|
||||
|
||||
Target Layer:
|
||||
* aarch64: support watchpoints
|
||||
* arm: support independent TPIU and SWO for trace
|
||||
* arm adi v5: support Large Physical Address Extension
|
||||
* arm adi v6: support added, for jtag and swd transport
|
||||
* cortex_a: support watchpoints
|
||||
* elf 64bit load support
|
||||
* Espressif: support ESP32, ESP32-S2 and ESP32-S3 cores
|
||||
* semihosting: support user defined operations
|
||||
* Xtensa: support Xtensa LX architecture via JTAG and ADIv5 DAP
|
||||
|
||||
Flash Layer:
|
||||
* Atmel/Microchip SAM E51G18A, E51G19A, R35J18B, LAN9255 support
|
||||
* GigaDevice GD32E23x, GD32F1x0/3x0, GD32VF103 support
|
||||
* Nuvoton NPCX series support
|
||||
* onsemi RSL10 support
|
||||
* Raspberry Pi Pico RP2040 support
|
||||
* ST BlueNRG-LPS support
|
||||
* ST STM32 G05x, G06x, G0Bx, G0Cx, U57x, U58x, WB1x, WL5x support
|
||||
* ST STM32 G0, G4, L4, L4+, L5, WB, WL OTP support
|
||||
|
||||
Board, Target, and Interface Configuration Scripts:
|
||||
* Ampere Computing eMAG8180, Altra ("Quicksilver") and Altra Max ("Mystique") board config
|
||||
* Cadence KC705 FPGA (Xtensa Development Platform) via JTAG and ADIv5 DAP board config
|
||||
* Digilent Nexys Video board config
|
||||
* Espressif ESP32 ETHERNET-KIT and WROVER-KIT board config
|
||||
* Espressif ESP32 via ESP USB Bridge generic board config
|
||||
* Espressif ESP32-S2 Kaluga 1 board config
|
||||
* Espressif ESP32-S2 with ESP USB Bridge board config
|
||||
* Espressif ESP32-S3 example board config
|
||||
* Kontron SMARC-sAL28 board config
|
||||
* LambdaConcept ECPIX-5 board config
|
||||
* Microchip ATSAMA5D27-SOM1-EK1 board config
|
||||
* Microchip EVB-LAN9255 board config
|
||||
* Microchip SAME51 Curiosity Nano board config
|
||||
* NXP FRDM-K64F, LS1046ARDB and LS1088ARDB board config
|
||||
* NXP RT6XX board config
|
||||
* Olimex H405 board config
|
||||
* Radiona ULX3S board config
|
||||
* Raspberry Pi 3 and Raspberry Pi 4 model B board config
|
||||
* Raspberry Pi Pico-Debug board config
|
||||
* Renesas R-Car V3U Falcon board config
|
||||
* ST BlueNRG-LPS steval-idb012v1 board config
|
||||
* ST NUCLEO-8S208RB board config
|
||||
* ST NUCLEO-G031K8, NUCLEO-G070RB, NUCLEO-G071RB board config
|
||||
* ST NUCLEO-G431KB, NUCLEO-G431RB, NUCLEO-G474RE board config
|
||||
* ST STM32MP13x-DK board config
|
||||
* TI AM625 EVM, AM642 EVM and AM654 EVM board config
|
||||
* TI J721E EVM, J721S2 EVM and J7200 EVM board config
|
||||
* Ampere Computing eMAG, Altra ("Quicksilver") and Altra Max ("Mystique") target config
|
||||
* Cadence Xtensa generic and Xtensa VDebug target config
|
||||
* Broadcom BCM2711, BCM2835, BCM2836 and BCM2837 target config
|
||||
* Espressif ESP32, ESP32-S2 and ESP32-S3 target config
|
||||
* Microchip ATSAMA5D2 series target config
|
||||
* NanoXplore NG-Ultra SoC target config
|
||||
* NXP IMX8QM target config
|
||||
* NXP LS1028A, LS1046A and LS1088A target config
|
||||
* NXP RT600 (Xtensa HiFi DSP) target config
|
||||
* onsemi RSL10 target config
|
||||
* Raspberry Pi Pico RP2040 target config
|
||||
* Renesas R8A779A0 V3U target config
|
||||
* Renesas RZ/Five target config
|
||||
* Renesas RZ/G2 MPU family target config
|
||||
* Rockchip RK3399 target config
|
||||
* ST BlueNRG-LPS target config
|
||||
* ST STM32MP13x target config
|
||||
* TI AM625, AM654, J721E and J721S2 target config
|
||||
* Ashling Opella-LD interface config
|
||||
* Aspeed AST2600 linuxgpiod based interface config
|
||||
* Blinkinlabs JTAG_Hat interface config
|
||||
* Cadence Virtual Debug (vdebug) interface config
|
||||
* Espressif ESP32-S2 Kaluga 1 board's interface config
|
||||
* Espressif USB Bridge jtag interface config
|
||||
* Infineon DAP miniWiggler V3 interface config
|
||||
* PLS SPC5 interface config
|
||||
* Tigard interface config
|
||||
* Lattice MachXO3 family FPGA config
|
||||
|
||||
Server Layer:
|
||||
* GDB: add per-target remote protocol extensions
|
||||
* GDB: more 'Z' packets support
|
||||
* IPDBG JtagHost server functionality
|
||||
* semihosting: I/O redirection to TCP server
|
||||
* telnet: support for command's autocomplete
|
||||
|
||||
RTOS:
|
||||
* 'none' rtos support
|
||||
* Zephyr rtos support
|
||||
|
||||
Documentation:
|
||||
|
||||
Build and Release:
|
||||
* Add json extension to jimtcl build
|
||||
* Drop dependency from libusb0
|
||||
* Drop repository repo.or.cz for submodules
|
||||
* Move gerrit to https://review.openocd.org/
|
||||
* Require autoconf 2.69 or newer
|
||||
* Update jep106 to revision JEP106BF.01
|
||||
* Update jimtcl to version 0.81
|
||||
* Update libjaylink to version 0.3.1
|
||||
* New configure flag '--enable-jimtcl-maintainer' for jimtcl build
|
||||
|
||||
|
||||
This release also contains a number of other important functional and
|
||||
cosmetic bugfixes. For more details about what has changed since the
|
||||
last release, see the git repository history:
|
||||
|
||||
http://sourceforge.net/p/openocd/code/ci/v0.12.0/log/?path=
|
||||
|
||||
|
||||
For older NEWS, see the NEWS files associated with each release
|
||||
(i.e. NEWS-<version>).
|
||||
|
||||
For more information about contributing test reports, bug fixes, or new
|
||||
features and device support, please read the new Developer Manual (or
|
||||
the BUGS and PATCHES.txt files in the source archive).
|
||||
@@ -1,29 +1,19 @@
|
||||
Building OpenOCD for Windows
|
||||
----------------------------
|
||||
# OpenOCD for Windows
|
||||
|
||||
This README contains instructions that are specific to Windows.
|
||||
|
||||
## Building
|
||||
|
||||
You can build OpenOCD for Windows natively with either MinGW-w64/MSYS
|
||||
or Cygwin (plain MinGW might work with --disable-werror but is not
|
||||
or Cygwin (plain MinGW might work with `--disable-werror` but is not
|
||||
recommended as it doesn't provide enough C99 compatibility).
|
||||
Alternatively, one can cross-compile it using MinGW-w64 on a *nix
|
||||
host. See README for the generic instructions.
|
||||
host. See [README](README.md) for the generic instructions.
|
||||
|
||||
Also, the MSYS2 project provides both ready-made binaries and an easy
|
||||
way to self-compile from their software repository out of the box.
|
||||
|
||||
Native MinGW-w64/MSYS compilation
|
||||
-----------------------------
|
||||
|
||||
As MSYS doesn't come with pkg-config pre-installed, you need to add it
|
||||
manually. The easiest way to do that is to download pkg-config-lite
|
||||
from:
|
||||
|
||||
http://sourceforge.net/projects/pkgconfiglite/
|
||||
|
||||
Then simply unzip the archive to the root directory of your MinGW-w64
|
||||
installation.
|
||||
|
||||
USB adapters
|
||||
------------
|
||||
## USB adapters
|
||||
|
||||
For the adapters that use a HID-based protocol, e.g. CMSIS-DAP, you do
|
||||
not need to perform any additional configuration.
|
||||
@@ -31,9 +21,7 @@ not need to perform any additional configuration.
|
||||
For all the others you usually need to have WinUSB.sys (or
|
||||
libusbK.sys) driver installed. Some vendor software (e.g. for
|
||||
ST-LINKv2) does it on its own. For the other cases the easiest way to
|
||||
assign WinUSB to a device is to use the latest Zadig installer:
|
||||
|
||||
http://zadig.akeo.ie
|
||||
assign WinUSB to a device is to use the latest Zadig installer: <https://zadig.akeo.ie>
|
||||
|
||||
When using a composite USB device, it's often necessary to assign
|
||||
WinUSB.sys to the composite parent instead of the specific
|
||||
@@ -42,7 +30,7 @@ Zadig installer.
|
||||
|
||||
If you need to use the same adapter with other applications that may
|
||||
require another driver, a solution for Windows Vista and above is to
|
||||
activate the IgnoreHWSerNum registry setting for the USB device.
|
||||
activate the `IgnoreHWSerNum` registry setting for the USB device.
|
||||
|
||||
That setting forces Windows to associate the driver per port instead of
|
||||
per serial number, the same behaviour as when the device does not contain
|
||||
@@ -52,5 +40,5 @@ port depending on which application to use.
|
||||
|
||||
For more information, see:
|
||||
|
||||
http://msdn.microsoft.com/en-us/library/windows/hardware/jj649944(v=vs.85).aspx
|
||||
http://www.ftdichip.com/Support/Knowledgebase/index.html?ignorehardwareserialnumber.htm
|
||||
- <https://learn.microsoft.com/en-us/windows-hardware/drivers/usbcon/usb-device-specific-registry-settings>
|
||||
- <https://www.ftdichip.com/Support/Knowledgebase/index.html?ignorehardwareserialnumber.htm>
|
||||
54
README.macOS
54
README.macOS
@@ -1,54 +0,0 @@
|
||||
Building OpenOCD for macOS
|
||||
--------------------------
|
||||
|
||||
There are a few prerequisites you will need first:
|
||||
|
||||
- Xcode (install from the AppStore)
|
||||
- Command Line Tools (install from Xcode -> Preferences -> Downloads)
|
||||
- Gentoo Prefix (http://www.gentoo.org/proj/en/gentoo-alt/prefix/bootstrap.xml)
|
||||
or
|
||||
- Homebrew (http://mxcl.github.io/homebrew/)
|
||||
or
|
||||
- MacPorts (http://www.macports.org/install.php)
|
||||
|
||||
|
||||
If you're building manually you need Texinfo version 5.0 or later. The
|
||||
simplest way to get it is to use Homebrew (brew install texinfo) and
|
||||
then ``export PATH=/usr/local/opt/texinfo/bin:$PATH``.
|
||||
|
||||
|
||||
With Gentoo Prefix you can build the release version or the latest
|
||||
devel version (-9999) the usual way described in the Gentoo
|
||||
documentation. Alternatively, install the prerequisites and build
|
||||
manually from the sources.
|
||||
|
||||
|
||||
With Homebrew you can either run:
|
||||
brew install [--HEAD] openocd (where optional --HEAD asks brew to
|
||||
install the current git version)
|
||||
or
|
||||
brew install libtool automake libusb [hidapi] [libftdi]
|
||||
(to install the needed dependencies and then proceed with the
|
||||
manual building procedure)
|
||||
|
||||
|
||||
For building with MacPorts you need to run:
|
||||
sudo port install libtool automake autoconf pkgconfig \
|
||||
libusb [libftdi1]
|
||||
|
||||
You should also specify LDFLAGS and CPPFLAGS to allow configure to use
|
||||
MacPorts' libraries, so run configure like this:
|
||||
LDFLAGS=-L/opt/local/lib CPPFLAGS=-I/opt/local/include ./configure [options]
|
||||
|
||||
|
||||
See README for the generic building instructions.
|
||||
|
||||
If you're using a USB adapter and have a driver kext matched to it,
|
||||
you will need to unload it prior to running OpenOCD. E.g. with Apple
|
||||
driver (OS X 10.9 or later) for FTDI run:
|
||||
sudo kextunload -b com.apple.driver.AppleUSBFTDI
|
||||
for FTDI vendor driver use:
|
||||
sudo kextunload FTDIUSBSerialDriver.kext
|
||||
|
||||
To learn more on the topic please refer to the official libusb FAQ:
|
||||
https://github.com/libusb/libusb/wiki/FAQ
|
||||
72
README.macOS.md
Normal file
72
README.macOS.md
Normal file
@@ -0,0 +1,72 @@
|
||||
# OpenOCD for macOS
|
||||
|
||||
This README contains instructions that are specific to macOS.
|
||||
|
||||
## Building
|
||||
|
||||
There are a few prerequisites you will need first:
|
||||
|
||||
- Xcode (install from the AppStore)
|
||||
- Command Line Tools (install from Xcode -> Preferences -> Downloads)
|
||||
- One of the following tools:
|
||||
- Gentoo Prefix (<https://wiki.gentoo.org/wiki/Project:Prefix/Bootstrap>)
|
||||
- Homebrew (<https://brew.sh/>)
|
||||
- MacPorts (<https://www.macports.org/install.php>)
|
||||
|
||||
If you're building manually you need Texinfo version 5.0 or later. The
|
||||
simplest way to get it is to use Homebrew (`brew install texinfo`) and
|
||||
then `export PATH=/usr/local/opt/texinfo/bin:$PATH`.
|
||||
|
||||
With Gentoo Prefix you can build the release version or the latest
|
||||
devel version (-9999) the usual way described in the Gentoo
|
||||
documentation. Alternatively, install the prerequisites and build
|
||||
manually from the sources.
|
||||
|
||||
With Homebrew you can either run:
|
||||
|
||||
```sh
|
||||
brew install [--HEAD] open-ocd
|
||||
```
|
||||
|
||||
Where ``--HEAD`` asks ``brew`` to install the current Git version instead of the
|
||||
lastest release.
|
||||
|
||||
You can also run:
|
||||
|
||||
```sh
|
||||
brew install libtool automake libusb [hidapi] [libftdi]
|
||||
```
|
||||
|
||||
to install the needed dependencies and then proceed with the manual building
|
||||
procedure.
|
||||
|
||||
For building with MacPorts you need to run:
|
||||
|
||||
```sh
|
||||
sudo port install libtool automake autoconf pkgconfig libusb [libftdi1]
|
||||
```
|
||||
|
||||
You should also specify LDFLAGS and CPPFLAGS to allow `configure` to use
|
||||
MacPorts' libraries, so run configure like this:
|
||||
|
||||
```sh
|
||||
LDFLAGS=-L/opt/local/lib CPPFLAGS=-I/opt/local/include ./configure [options]
|
||||
```
|
||||
|
||||
See [README](README.md) for the generic building instructions.
|
||||
|
||||
If you're using a USB adapter and have a driver kext matched to it,
|
||||
you will need to unload it prior to running OpenOCD. E.g. with Apple
|
||||
driver (OS X 10.9 or later) for FTDI run:
|
||||
|
||||
```sh
|
||||
sudo kextunload -b com.apple.driver.AppleUSBFTDI
|
||||
```
|
||||
|
||||
for FTDI vendor driver use:
|
||||
|
||||
```sh
|
||||
sudo kextunload FTDIUSBSerialDriver.kext
|
||||
```
|
||||
|
||||
To learn more on the topic please refer to the official libusb FAQ: <https://github.com/libusb/libusb/wiki/FAQ>
|
||||
@@ -1,5 +1,4 @@
|
||||
Welcome to OpenOCD!
|
||||
===================
|
||||
# Welcome to OpenOCD
|
||||
|
||||
OpenOCD provides on-chip programming and debugging support with a
|
||||
layered architecture of JTAG interface and TAP support including:
|
||||
@@ -9,10 +8,10 @@ layered architecture of JTAG interface and TAP support including:
|
||||
- debug target support (e.g. ARM, MIPS): single-stepping,
|
||||
breakpoints/watchpoints, gprof profiling, etc;
|
||||
- flash chip drivers (e.g. CFI, NAND, internal flash);
|
||||
- embedded TCL interpreter for easy scripting.
|
||||
- embedded Tcl interpreter for easy scripting.
|
||||
|
||||
Several network interfaces are available for interacting with OpenOCD:
|
||||
telnet, TCL, and GDB. The GDB server enables OpenOCD to function as a
|
||||
telnet, Tcl, and GDB. The GDB server enables OpenOCD to function as a
|
||||
"remote target" for source-level debugging of embedded systems using
|
||||
the GNU GDB program (and the others who talk GDB protocol, e.g. IDA
|
||||
Pro).
|
||||
@@ -25,147 +24,78 @@ This README file contains an overview of the following topics:
|
||||
- the installation and build process,
|
||||
- packaging tips.
|
||||
|
||||
|
||||
============================
|
||||
Quickstart for the impatient
|
||||
============================
|
||||
## Quickstart for the impatient
|
||||
|
||||
If you have a popular board then just start OpenOCD with its config,
|
||||
e.g.:
|
||||
|
||||
openocd -f board/stm32f4discovery.cfg
|
||||
```sh
|
||||
openocd -f board/stm32f4discovery.cfg
|
||||
```
|
||||
|
||||
If you are connecting a particular adapter with some specific target,
|
||||
you need to source both the jtag interface and the target configs,
|
||||
e.g.:
|
||||
|
||||
openocd -f interface/ftdi/jtagkey2.cfg -c "transport select jtag" \
|
||||
-f target/ti_calypso.cfg
|
||||
```sh
|
||||
openocd -f interface/ftdi/jtagkey2.cfg -c "transport select jtag" \
|
||||
-f target/ti/calypso.cfg
|
||||
```
|
||||
|
||||
openocd -f interface/stlink.cfg -c "transport select hla_swd" \
|
||||
-f target/stm32l0.cfg
|
||||
```sh
|
||||
openocd -f interface/stlink.cfg -c "transport select swd" \
|
||||
-f target/stm32l0.cfg
|
||||
```
|
||||
|
||||
After OpenOCD startup, connect GDB with
|
||||
|
||||
(gdb) target extended-remote localhost:3333
|
||||
```gdb
|
||||
(gdb) target extended-remote localhost:3333
|
||||
```
|
||||
|
||||
## Installing OpenOCD
|
||||
|
||||
=====================
|
||||
OpenOCD Documentation
|
||||
=====================
|
||||
The easiest way to install OpenOCD is through your operating system's package
|
||||
manager.
|
||||
|
||||
In addition to the in-tree documentation, the latest manuals may be
|
||||
viewed online at the following URLs:
|
||||
- Debian / Ubuntu
|
||||
|
||||
OpenOCD User's Guide:
|
||||
http://openocd.org/doc/html/index.html
|
||||
```sh
|
||||
sudo apt install openocd
|
||||
```
|
||||
|
||||
OpenOCD Developer's Manual:
|
||||
http://openocd.org/doc/doxygen/html/index.html
|
||||
- Fedora
|
||||
|
||||
These reflect the latest development versions, so the following section
|
||||
introduces how to build the complete documentation from the package.
|
||||
```sh
|
||||
sudo dnf install openocd
|
||||
```
|
||||
|
||||
For more information, refer to these documents or contact the developers
|
||||
by subscribing to the OpenOCD developer mailing list:
|
||||
- macOS (via Homebrew)
|
||||
|
||||
openocd-devel@lists.sourceforge.net
|
||||
```sh
|
||||
brew install open-ocd
|
||||
```
|
||||
|
||||
Building the OpenOCD Documentation
|
||||
----------------------------------
|
||||
- Windows (via MSYS2)
|
||||
|
||||
By default the OpenOCD build process prepares documentation in the
|
||||
"Info format" and installs it the standard way, so that "info openocd"
|
||||
can access it.
|
||||
```sh
|
||||
pacman -S mingw-w64-x86_64-openocd
|
||||
```
|
||||
|
||||
Additionally, the OpenOCD User's Guide can be produced in the
|
||||
following different formats:
|
||||
These packages are often more stable than the bleeding-edge Git mainline, where
|
||||
active development happens.
|
||||
"Packagers" create binary releases of OpenOCD after the developers publish new
|
||||
source code releases.
|
||||
Older OpenOCD versions are not suitable for diagnosing issues in the current
|
||||
release.
|
||||
Users should stay in touch with their distribution maintainers or interface
|
||||
vendors to ensure that appropriate updates are provided regularly.
|
||||
|
||||
# If PDFVIEWER is set, this creates and views the PDF User Guide.
|
||||
make pdf && ${PDFVIEWER} doc/openocd.pdf
|
||||
If you use one of these binary packages, you must contact the Packager for
|
||||
support or for newer binary versions.
|
||||
The OpenOCD developers do not provide direct support for packaged binaries.
|
||||
|
||||
# If HTMLVIEWER is set, this creates and views the HTML User Guide.
|
||||
make html && ${HTMLVIEWER} doc/openocd.html/index.html
|
||||
|
||||
The OpenOCD Developer Manual contains information about the internal
|
||||
architecture and other details about the code:
|
||||
|
||||
# NB! make sure doxygen is installed, type doxygen --version
|
||||
make doxygen && ${HTMLVIEWER} doxygen/index.html
|
||||
|
||||
|
||||
==================
|
||||
Supported hardware
|
||||
==================
|
||||
|
||||
JTAG adapters
|
||||
-------------
|
||||
|
||||
AICE, AM335x, ARM-JTAG-EW, ARM-USB-OCD, ARM-USB-TINY, AT91RM9200, axm0432, BCM2835,
|
||||
Bus Blaster, Buspirate, Cadence DPI, Cadence vdebug, Chameleon, CMSIS-DAP,
|
||||
Cortino, Cypress KitProg, DENX, Digilent JTAG-SMT2, DLC 5, DLP-USB1232H,
|
||||
embedded projects, Espressif USB JTAG Programmer,
|
||||
eStick, FlashLINK, FlossJTAG, Flyswatter, Flyswatter2,
|
||||
FTDI FT232R, Gateworks, Hoegl, ICDI, ICEBear, J-Link, JTAG VPI, JTAGkey,
|
||||
JTAGkey2, JTAG-lock-pick, KT-Link, Linux GPIOD, Lisa/L, LPC1768-Stick,
|
||||
Mellanox rshim, MiniModule, NGX, Nuvoton Nu-Link, Nu-Link2, NXHX, NXP IMX GPIO,
|
||||
OOCDLink, Opendous, OpenJTAG, Openmoko, OpenRD, OSBDM, Presto, Redbee,
|
||||
Remote Bitbang, RLink, SheevaPlug devkit, Stellaris evkits,
|
||||
ST-LINK (SWO tracing supported), STM32-PerformanceStick, STR9-comStick,
|
||||
sysfsgpio, Tigard, TI XDS110, TUMPA, Turtelizer, ULINK, USB-A9260, USB-Blaster,
|
||||
USB-JTAG, USBprog, VPACLink, VSLLink, Wiggler, XDS100v2, Xilinx XVC/PCIe,
|
||||
Xverve.
|
||||
|
||||
Debug targets
|
||||
-------------
|
||||
|
||||
ARM: AArch64, ARM11, ARM7, ARM9, Cortex-A/R (v7-A/R), Cortex-M (ARMv{6/7/8}-M),
|
||||
FA526, Feroceon/Dragonite, XScale.
|
||||
ARCv2, AVR32, DSP563xx, DSP5680xx, EnSilica eSi-RISC, EJTAG (MIPS32, MIPS64),
|
||||
ESP32, ESP32-S2, ESP32-S3, Intel Quark, LS102x-SAP, NDS32, RISC-V, ST STM8,
|
||||
Xtensa.
|
||||
|
||||
Flash drivers
|
||||
-------------
|
||||
|
||||
ADUC702x, AT91SAM, AT91SAM9 (NAND), ATH79, ATmega128RFA1, Atmel SAM, AVR, CFI,
|
||||
DSP5680xx, EFM32, EM357, eSi-RISC, eSi-TSMC, EZR32HG, FM3, FM4, Freedom E SPI,
|
||||
GD32, i.MX31, Kinetis, LPC8xx/LPC1xxx/LPC2xxx/LPC541xx, LPC2900, LPC3180, LPC32xx,
|
||||
LPCSPIFI, Marvell QSPI, MAX32, Milandr, MXC, NIIET, nRF51, nRF52 , NuMicro,
|
||||
NUC910, Nuvoton NPCX, onsemi RSL10, Orion/Kirkwood, PIC32mx, PSoC4/5LP/6,
|
||||
Raspberry RP2040, Renesas RPC HF and SH QSPI,
|
||||
S3C24xx, S3C6400, SiM3x, SiFive Freedom E, Stellaris, ST BlueNRG, STM32,
|
||||
STM32 QUAD/OCTO-SPI for Flash/FRAM/EEPROM, STMSMI, STR7x, STR9x, SWM050,
|
||||
TI CC13xx, TI CC26xx, TI CC32xx, TI MSP432, Winner Micro w600, Xilinx XCF,
|
||||
XMC1xxx, XMC4xxx.
|
||||
|
||||
|
||||
==================
|
||||
Installing OpenOCD
|
||||
==================
|
||||
|
||||
A Note to OpenOCD Users
|
||||
-----------------------
|
||||
|
||||
If you would rather be working "with" OpenOCD rather than "on" it, your
|
||||
operating system or JTAG interface supplier may provide binaries for
|
||||
you in a convenient-enough package.
|
||||
|
||||
Such packages may be more stable than git mainline, where
|
||||
bleeding-edge development takes place. These "Packagers" produce
|
||||
binary releases of OpenOCD after the developers produces new "release"
|
||||
versions of the source code. Previous versions of OpenOCD cannot be
|
||||
used to diagnose problems with the current release, so users are
|
||||
encouraged to keep in contact with their distribution package
|
||||
maintainers or interface vendors to ensure suitable upgrades appear
|
||||
regularly.
|
||||
|
||||
Users of these binary versions of OpenOCD must contact their Packager to
|
||||
ask for support or newer versions of the binaries; the OpenOCD
|
||||
developers do not support packages directly.
|
||||
|
||||
A Note to OpenOCD Packagers
|
||||
---------------------------
|
||||
## A Note to OpenOCD Packagers
|
||||
|
||||
You are a PACKAGER of OpenOCD if you:
|
||||
|
||||
@@ -191,21 +121,107 @@ suggestions:
|
||||
particular hardware;
|
||||
- Use "ftdi" interface adapter driver for the FTDI-based devices.
|
||||
|
||||
## OpenOCD Documentation
|
||||
|
||||
================
|
||||
Building OpenOCD
|
||||
================
|
||||
In addition to the in-tree documentation, the latest manuals may be
|
||||
viewed online at the following URLs:
|
||||
|
||||
The INSTALL file contains generic instructions for running 'configure'
|
||||
- OpenOCD User's Guide: <http://openocd.org/doc/html/index.html>
|
||||
|
||||
- OpenOCD Developer's Manual: <http://openocd.org/doc/doxygen/html/index.html>
|
||||
|
||||
These reflect the latest development versions, so the following section
|
||||
introduces how to build the complete documentation from the package.
|
||||
|
||||
For more information, refer to these documents or contact the developers
|
||||
by subscribing to the OpenOCD developer mailing list: openocd-devel@lists.sourceforge.net
|
||||
|
||||
### Building the OpenOCD Documentation
|
||||
|
||||
By default the OpenOCD build process prepares documentation in the
|
||||
"Info format" and installs it the standard way, so that `info openocd`
|
||||
can access it.
|
||||
|
||||
Additionally, the OpenOCD User's Guide can be produced in the
|
||||
following different formats:
|
||||
|
||||
If `PDFVIEWER` is set, this creates and views the PDF User Guide.
|
||||
|
||||
```sh
|
||||
make pdf && ${PDFVIEWER} doc/openocd.pdf
|
||||
```
|
||||
|
||||
If `HTMLVIEWER` is set, this creates and views the HTML User Guide.
|
||||
|
||||
```sh
|
||||
make html && ${HTMLVIEWER} doc/openocd.html/index.html
|
||||
```
|
||||
|
||||
The OpenOCD Developer Manual contains information about the internal
|
||||
architecture and other details about the code:
|
||||
|
||||
Note: make sure doxygen is installed, type doxygen --version
|
||||
|
||||
```sh
|
||||
make doxygen && ${HTMLVIEWER} doxygen/index.html
|
||||
```
|
||||
|
||||
## Supported hardware
|
||||
|
||||
### JTAG adapters
|
||||
|
||||
AM335x, ARM-JTAG-EW, ARM-USB-OCD, ARM-USB-TINY, AT91RM9200, axm0432, BCM2835,
|
||||
Bus Blaster, Buspirate, Cadence DPI, Cadence vdebug, Chameleon, CMSIS-DAP,
|
||||
Cortino, Cypress KitProg, DENX, Digilent JTAG-SMT2, DLC 5, DLP-USB1232H,
|
||||
embedded projects, Espressif USB JTAG Programmer,
|
||||
eStick, FlashLINK, FlossJTAG, Flyswatter, Flyswatter2,
|
||||
FTDI FT232R, Gateworks, Hoegl, ICDI, ICEBear, J-Link, JTAG VPI, JTAGkey,
|
||||
JTAGkey2, JTAG-lock-pick, KT-Link, Linux GPIOD, Lisa/L, LPC1768-Stick,
|
||||
Mellanox rshim, MiniModule, NGX, Nuvoton Nu-Link, Nu-Link2, NXHX, NXP IMX GPIO,
|
||||
OOCDLink, Opendous, OpenJTAG, Openmoko, OpenRD, OSBDM, Presto, Redbee,
|
||||
Remote Bitbang, RLink, SheevaPlug devkit, Stellaris evkits,
|
||||
ST-LINK (SWO tracing supported), STM32-PerformanceStick, STR9-comStick,
|
||||
sysfsgpio, Tigard, TI XDS110, TUMPA, Turtelizer, ULINK, USB-A9260, USB-Blaster,
|
||||
USB-JTAG, USBprog, VPACLink, VSLLink, Wiggler, XDS100v2, Xilinx XVC/PCIe,
|
||||
Xverve.
|
||||
|
||||
### Debug targets
|
||||
|
||||
ARM: AArch64, ARM11, ARM7, ARM9, Cortex-A/R (v7-A/R), Cortex-M (ARMv{6/7/8}-M),
|
||||
FA526, Feroceon/Dragonite, XScale.
|
||||
ARCv2, AVR32, DSP563xx, DSP5680xx, EnSilica eSi-RISC, EJTAG (MIPS32, MIPS64),
|
||||
ESP32, ESP32-S2, ESP32-S3, Intel Quark, LS102x-SAP, RISC-V, ST STM8,
|
||||
Xtensa.
|
||||
|
||||
### Flash drivers
|
||||
|
||||
ADUC702x, AT91SAM, AT91SAM9 (NAND), ATH79, ATmega128RFA1, Atmel SAM, AVR, CFI,
|
||||
DSP5680xx, EFM32, EM357, eSi-RISC, eSi-TSMC, EZR32HG, FM3, FM4, Freedom E SPI,
|
||||
GD32, i.MX31, Kinetis, LPC8xx/LPC1xxx/LPC2xxx/LPC541xx, LPC2900, LPC3180, LPC32xx,
|
||||
LPCSPIFI, Marvell QSPI, MAX32, Milandr, MXC, NIIET, nRF51, nRF52 , NuMicro,
|
||||
NUC910, Nuvoton NPCX, onsemi RSL10, Orion/Kirkwood, PIC32mx, PSoC4/5LP/6,
|
||||
Raspberry RP2040, Renesas RPC HF and SH QSPI,
|
||||
S3C24xx, S3C6400, SiM3x, SiFive Freedom E, Stellaris, ST BlueNRG, STM32,
|
||||
STM32 QUAD/OCTO-SPI for Flash/FRAM/EEPROM, STMSMI, STR7x, STR9x, SWM050,
|
||||
TI CC13xx, TI CC26xx, TI CC32xx, TI MSP432, Winner Micro w600, Xilinx XCF,
|
||||
XMC1xxx, XMC4xxx.
|
||||
|
||||
## Building OpenOCD
|
||||
|
||||
The INSTALL file contains generic instructions for running `configure`
|
||||
and compiling the OpenOCD source code. That file is provided by
|
||||
default for all GNU autotools packages. If you are not familiar with
|
||||
the GNU autotools, then you should read those instructions first.
|
||||
|
||||
Note: if the INSTALL file is not present, it means you are using the
|
||||
source code from a development branch, not from an OpenOCD release.
|
||||
In this case, follow the instructions 'Compiling OpenOCD' below and
|
||||
the file will be created by the first command `./bootstrap`.
|
||||
|
||||
The remainder of this document tries to provide some instructions for
|
||||
those looking for a quick-install.
|
||||
|
||||
OpenOCD Dependencies
|
||||
--------------------
|
||||
### OpenOCD Dependencies
|
||||
|
||||
GCC or Clang is currently required to build OpenOCD. The developers
|
||||
have begun to enforce strict code warnings (-Wall, -Werror, -Wextra,
|
||||
@@ -219,25 +235,113 @@ You'll also need:
|
||||
|
||||
- make
|
||||
- libtool
|
||||
- pkg-config >= 0.23 (or compatible)
|
||||
- pkg-config >= 0.23 or pkgconf
|
||||
- libjim >= 0.79
|
||||
|
||||
Additionally, for building from git:
|
||||
Additionally, for building from Git:
|
||||
|
||||
- autoconf >= 2.69
|
||||
- automake >= 1.14
|
||||
- texinfo >= 5.0
|
||||
|
||||
USB-based adapters depend on libusb-1.0. A compatible implementation, such as
|
||||
FreeBSD's, additionally needs the corresponding .pc files.
|
||||
Optional USB-based adapter drivers need libusb-1.0.
|
||||
|
||||
USB-Blaster, ASIX Presto and OpenJTAG interface adapter
|
||||
drivers need:
|
||||
- libftdi: http://www.intra2net.com/en/developer/libftdi/index.php
|
||||
Optional USB-Blaster, ASIX Presto and OpenJTAG interface adapter drivers need
|
||||
[libftdi](http://www.intra2net.com/en/developer/libftdi/index.php) library.
|
||||
|
||||
CMSIS-DAP support needs HIDAPI library.
|
||||
Optional CMSIS-DAP adapter driver needs HIDAPI library.
|
||||
|
||||
Permissions delegation
|
||||
----------------------
|
||||
Optional linuxgpiod adapter driver needs libgpiod library.
|
||||
|
||||
Optional J-Link adapter driver needs libjaylink library.
|
||||
|
||||
Optional ARM disassembly needs capstone library.
|
||||
|
||||
Optional development script checkpatch needs:
|
||||
|
||||
- perl
|
||||
- python
|
||||
- python-ply
|
||||
- pymarkdownlnt
|
||||
|
||||
### Compiling OpenOCD
|
||||
|
||||
To build OpenOCD, use the following sequence of commands:
|
||||
|
||||
```sh
|
||||
./bootstrap
|
||||
./configure [options]
|
||||
make
|
||||
sudo make install
|
||||
```
|
||||
|
||||
The `bootstrap` command is only necessary when building from the Git repository.
|
||||
The `configure` step generates the Makefiles required to build OpenOCD, usually
|
||||
with one or more options provided to it.
|
||||
The first 'make' step will build OpenOCD and place the final executable in './src/'.
|
||||
The final (optional) step, `make install`, places all of the files in the
|
||||
required location.
|
||||
|
||||
To see the list of all the supported options, run `./configure --help`
|
||||
|
||||
### Cross-compiling Options
|
||||
|
||||
Cross-compiling is supported the standard autotools way, you just need
|
||||
to specify the cross-compiling target triplet in the --host option,
|
||||
e.g. for cross-building for Windows 32-bit with MinGW on Debian:
|
||||
|
||||
```sh
|
||||
./configure --host=i686-w64-mingw32 [options]
|
||||
```
|
||||
|
||||
To make pkg-config work nicely for cross-compiling, you might need an additional
|
||||
wrapper script as described at <https://autotools.io/pkgconfig/cross-compiling.html>.
|
||||
|
||||
This is needed to tell pkg-config where to look for the target
|
||||
libraries that OpenOCD depends on. Alternatively, you can specify
|
||||
`*_CFLAGS` and `*_LIBS` environment variables directly, see `./configure
|
||||
--help` for the details.
|
||||
|
||||
For a more or less complete script that does all this for you, see `contrib/cross-build.sh`.
|
||||
|
||||
### Parallel Port Dongles
|
||||
|
||||
If you want to access the parallel port using the PPDEV interface you
|
||||
have to specify both `--enable-parport` and `--enable-parport-ppdev`, since
|
||||
the later option is an option to the parport driver.
|
||||
|
||||
The same is true for the `--enable-parport-giveio` option, you have to
|
||||
use both the `--enable-parport` and the `--enable-parport-giveio` option
|
||||
if you want to use giveio instead of ioperm parallel port access
|
||||
method.
|
||||
|
||||
### Obtaining OpenOCD From Git
|
||||
|
||||
You can download the current Git version with a Git client of your
|
||||
choice from the main repository: `git://git.code.sf.net/p/openocd/code`
|
||||
|
||||
You may prefer to use a mirror:
|
||||
|
||||
- <http://repo.or.cz/r/openocd.git>
|
||||
- git://repo.or.cz/openocd.git
|
||||
|
||||
Using the Git command line client, you might use the following command
|
||||
to set up a local copy of the current repository (make sure there is no
|
||||
directory called "openocd" in the current directory):
|
||||
|
||||
```sh
|
||||
git clone git://git.code.sf.net/p/openocd/code openocd
|
||||
```
|
||||
|
||||
Then you can update that at your convenience using `git pull`.
|
||||
|
||||
There is also a gitweb interface, which you can use either to browse the
|
||||
repository or to download arbitrary snapshots using HTTP: <http://repo.or.cz/w/openocd.git>.
|
||||
|
||||
Snapshots are compressed tarballs of the source tree, about 1.3 MBytes
|
||||
each at this writing.
|
||||
|
||||
## Permissions delegation
|
||||
|
||||
Running OpenOCD with root/administrative permissions is strongly
|
||||
discouraged for security reasons.
|
||||
@@ -253,90 +357,3 @@ For parallel port adapters on GNU/Linux and FreeBSD please change your
|
||||
For parport adapters on Windows you need to run install_giveio.bat
|
||||
(it's also possible to use "ioperm" with Cygwin instead) to give
|
||||
ordinary users permissions for accessing the "LPT" registers directly.
|
||||
|
||||
Compiling OpenOCD
|
||||
-----------------
|
||||
|
||||
To build OpenOCD, use the following sequence of commands:
|
||||
|
||||
./bootstrap (when building from the git repository)
|
||||
./configure [options]
|
||||
make
|
||||
sudo make install
|
||||
|
||||
The 'configure' step generates the Makefiles required to build
|
||||
OpenOCD, usually with one or more options provided to it. The first
|
||||
'make' step will build OpenOCD and place the final executable in
|
||||
'./src/'. The final (optional) step, ``make install'', places all of
|
||||
the files in the required location.
|
||||
|
||||
To see the list of all the supported options, run
|
||||
./configure --help
|
||||
|
||||
Cross-compiling Options
|
||||
-----------------------
|
||||
|
||||
Cross-compiling is supported the standard autotools way, you just need
|
||||
to specify the cross-compiling target triplet in the --host option,
|
||||
e.g. for cross-building for Windows 32-bit with MinGW on Debian:
|
||||
|
||||
./configure --host=i686-w64-mingw32 [options]
|
||||
|
||||
To make pkg-config work nicely for cross-compiling, you might need an
|
||||
additional wrapper script as described at
|
||||
|
||||
https://autotools.io/pkgconfig/cross-compiling.html
|
||||
|
||||
This is needed to tell pkg-config where to look for the target
|
||||
libraries that OpenOCD depends on. Alternatively, you can specify
|
||||
*_CFLAGS and *_LIBS environment variables directly, see "./configure
|
||||
--help" for the details.
|
||||
|
||||
For a more or less complete script that does all this for you, see
|
||||
|
||||
contrib/cross-build.sh
|
||||
|
||||
Parallel Port Dongles
|
||||
---------------------
|
||||
|
||||
If you want to access the parallel port using the PPDEV interface you
|
||||
have to specify both --enable-parport AND --enable-parport-ppdev, since
|
||||
the later option is an option to the parport driver.
|
||||
|
||||
The same is true for the --enable-parport-giveio option, you have to
|
||||
use both the --enable-parport AND the --enable-parport-giveio option
|
||||
if you want to use giveio instead of ioperm parallel port access
|
||||
method.
|
||||
|
||||
|
||||
==========================
|
||||
Obtaining OpenOCD From GIT
|
||||
==========================
|
||||
|
||||
You can download the current GIT version with a GIT client of your
|
||||
choice from the main repository:
|
||||
|
||||
git://git.code.sf.net/p/openocd/code
|
||||
|
||||
You may prefer to use a mirror:
|
||||
|
||||
http://repo.or.cz/r/openocd.git
|
||||
git://repo.or.cz/openocd.git
|
||||
|
||||
Using the GIT command line client, you might use the following command
|
||||
to set up a local copy of the current repository (make sure there is no
|
||||
directory called "openocd" in the current directory):
|
||||
|
||||
git clone git://git.code.sf.net/p/openocd/code openocd
|
||||
|
||||
Then you can update that at your convenience using
|
||||
|
||||
git pull
|
||||
|
||||
There is also a gitweb interface, which you can use either to browse
|
||||
the repository or to download arbitrary snapshots using HTTP:
|
||||
|
||||
http://repo.or.cz/w/openocd.git
|
||||
|
||||
Snapshots are compressed tarballs of the source tree, about 1.3 MBytes
|
||||
each at this writing.
|
||||
22
TODO
22
TODO
@@ -12,14 +12,14 @@ may have evolved an idea since it was added here.
|
||||
|
||||
Feel free to send patches to add or clarify items on this list, too.
|
||||
|
||||
@section thelisttcl TCL
|
||||
@section thelisttcl Tcl
|
||||
|
||||
This section provides possible things to improve with OpenOCD's TCL support.
|
||||
This section provides possible things to improve with OpenOCD's Tcl support.
|
||||
|
||||
- Fix problem with incorrect line numbers reported for a syntax
|
||||
error in a reset init event.
|
||||
|
||||
- organize the TCL configurations:
|
||||
- organize the Tcl configurations:
|
||||
- provide more directory structure for boards/targets?
|
||||
- factor configurations into layers (encapsulation and re-use)
|
||||
|
||||
@@ -27,15 +27,15 @@ This section provides possible things to improve with OpenOCD's TCL support.
|
||||
parameters. Currently variables assigned through one such parameter
|
||||
command/script are unset before the next one is invoked.
|
||||
|
||||
- Isolate all TCL command support:
|
||||
- Isolate all Tcl command support:
|
||||
- Pure C CLI implementations using --disable-builtin-tcl.
|
||||
- Allow developers to build new dongles using OpenOCD's JTAG core.
|
||||
- At first, provide only low-level JTAG support; target layer and
|
||||
above rely heavily on scripting event mechanisms.
|
||||
- Allow full TCL support? add --with-tcl=/path/to/installed/tcl
|
||||
- Move TCL support out of foo.[ch] and into foo_tcl.[ch] (other ideas?)
|
||||
- Allow full Tcl support? add --with-tcl=/path/to/installed/tcl
|
||||
- Move Tcl support out of foo.[ch] and into foo_tcl.[ch] (other ideas?)
|
||||
- See src/jtag/core.c and src/jtag/tcl.c for an example.
|
||||
- allow some of these TCL command modules to be dynamically loadable?
|
||||
- allow some of these Tcl command modules to be dynamically loadable?
|
||||
|
||||
@section thelistadapter Adapter
|
||||
|
||||
@@ -60,8 +60,6 @@ changes pending in gerrit.
|
||||
to replicate it in the drivers, apart in case the driver sets TRST
|
||||
independently
|
||||
- add .hla_ops to "adapter"
|
||||
- HLA is a API level (.hla_ops). Transport should simply be {jtag,swd},
|
||||
not {hla_jtag,hla_swd}.
|
||||
|
||||
@subsection thelistadapterjtagcore JTAG Core
|
||||
|
||||
@@ -77,7 +75,7 @@ directly in minidriver API for better embedded host performance.
|
||||
|
||||
The following tasks have been suggested for adding new core JTAG support:
|
||||
|
||||
- Improve autodetection of TAPs by supporting tcl escape procedures that
|
||||
- Improve autodetection of TAPs by supporting Tcl escape procedures that
|
||||
can configure discovered TAPs based on IDCODE value ... they could:
|
||||
- Remove guessing for irlen
|
||||
- Allow non-default irmask/ircapture values
|
||||
@@ -135,7 +133,7 @@ TCP/IP packets handled by the server.
|
||||
- add BSDL support?
|
||||
|
||||
A few possible options for the above:
|
||||
-# Fake a TCL equivalent?
|
||||
-# Fake a Tcl equivalent?
|
||||
-# Integrate an existing library?
|
||||
-# Write a new C implementation a la Jim?
|
||||
|
||||
@@ -202,8 +200,6 @@ https://lists.berlios.de/pipermail/openocd-development/2009-October/011506.html
|
||||
- MC1322x support (JW/DE?)
|
||||
- integrate and test support from JW (and DE?)
|
||||
- get working with a known good interface (i.e. not today's jlink)
|
||||
- AT91SAM92xx:
|
||||
- improvements for unknown-board-atmel-at91sam9260.cfg (RD)
|
||||
- STR9x: (ZW)
|
||||
- improvements to str912.cfg to be more general purpose
|
||||
- AVR: (SQ)
|
||||
|
||||
38
bootstrap
38
bootstrap
@@ -3,8 +3,8 @@
|
||||
|
||||
# Run the autotools bootstrap sequence to create the configure script
|
||||
|
||||
# Abort execution on error
|
||||
set -e
|
||||
set -e # Abort execution on error.
|
||||
set -u # Abort if you reference an undefined variable.
|
||||
|
||||
if which libtoolize > /dev/null; then
|
||||
libtoolize="libtoolize"
|
||||
@@ -15,13 +15,23 @@ else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$1" = "nosubmodule" ]; then
|
||||
SKIP_SUBMODULE=1
|
||||
elif [ -n "$1" ]; then
|
||||
echo "$0: Illegal argument $1"
|
||||
echo "USAGE: $0 [nosubmodule]"
|
||||
exit 1
|
||||
fi
|
||||
WITH_SUBMODULES=0
|
||||
|
||||
case "$#" in
|
||||
0) ;;
|
||||
1) if [ "$1" = "with-submodules" ]; then
|
||||
WITH_SUBMODULES=1
|
||||
elif [ "$1" = "nosubmodule" ]; then
|
||||
WITH_SUBMODULES=0
|
||||
elif [ -n "$1" ]; then
|
||||
echo "$0: Illegal argument $1" >&2
|
||||
echo "USAGE: $0 [with-submodules]" >&2
|
||||
exit 1
|
||||
fi;;
|
||||
*) echo "$0: Wrong number of command-line arguments." >&2
|
||||
echo "USAGE: $0 [with-submodules]" >&2
|
||||
exit 1;;
|
||||
esac
|
||||
|
||||
# bootstrap the autotools
|
||||
(
|
||||
@@ -34,12 +44,12 @@ autoheader --warnings=all
|
||||
automake --warnings=all --gnu --add-missing --copy
|
||||
)
|
||||
|
||||
if [ -n "$SKIP_SUBMODULE" ]; then
|
||||
echo "Skipping submodule setup"
|
||||
else
|
||||
if [ "$WITH_SUBMODULES" -ne 0 ]; then
|
||||
echo "Setting up submodules"
|
||||
git submodule init
|
||||
git submodule update
|
||||
git submodule sync
|
||||
git submodule update --init
|
||||
else
|
||||
echo "Skipping submodule setup"
|
||||
fi
|
||||
|
||||
if [ -x src/jtag/drivers/libjaylink/autogen.sh ]; then
|
||||
|
||||
@@ -7,6 +7,6 @@ AC_DEFUN([AX_CONFIG_SUBDIR_OPTION],
|
||||
AC_CONFIG_SUBDIRS([$1])
|
||||
|
||||
m4_ifblank([$2], [rm -f $srcdir/$1/configure.gnu],
|
||||
[echo -e '#!/bin/sh\nexec "`dirname "'\$'0"`/configure" '"$2"' "'\$'@"' > "$srcdir/$1/configure.gnu"
|
||||
[printf '#!/bin/sh\nexec "`dirname "'\$'0"`/configure" '"$2"' "'\$'@"\n' > "$srcdir/$1/configure.gnu"
|
||||
])
|
||||
])
|
||||
|
||||
628
configure.ac
628
configure.ac
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
AC_PREREQ([2.69])
|
||||
AC_INIT([openocd], [0.12.0-rc1],
|
||||
AC_INIT([openocd], [0.12.0+dev],
|
||||
[OpenOCD Mailing List <openocd-devel@lists.sourceforge.net>])
|
||||
AC_CONFIG_SRCDIR([src/openocd.c])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
@@ -16,7 +16,7 @@ AS_IF([test "x$MAKEINFO" = "x"], [
|
||||
])
|
||||
AC_SUBST([MAKEINFO])
|
||||
|
||||
AM_INIT_AUTOMAKE([-Wall -Wno-portability dist-bzip2 dist-zip subdir-objects])
|
||||
AM_INIT_AUTOMAKE([foreign -Wall -Wno-portability dist-bzip2 dist-zip subdir-objects])
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
|
||||
@@ -24,7 +24,6 @@ AC_LANG([C])
|
||||
AC_PROG_CC
|
||||
# autoconf 2.70 obsoletes AC_PROG_CC_C99 and includes it in AC_PROG_CC
|
||||
m4_version_prereq([2.70],[],[AC_PROG_CC_C99])
|
||||
AM_PROG_CC_C_O
|
||||
AC_PROG_RANLIB
|
||||
|
||||
# If macro PKG_PROG_PKG_CONFIG is not available, Autoconf generates a misleading error message,
|
||||
@@ -52,15 +51,19 @@ AC_SEARCH_LIBS([openpty], [util])
|
||||
|
||||
AC_CHECK_HEADERS([sys/socket.h])
|
||||
AC_CHECK_HEADERS([elf.h])
|
||||
AC_EGREP_HEADER(Elf64_Ehdr, [elf.h], [
|
||||
AC_DEFINE([HAVE_ELF64], [1], [Define to 1 if the system has the type `Elf64_Ehdr'.])
|
||||
])
|
||||
|
||||
AC_CHECK_TYPE([Elf64_Ehdr],
|
||||
AC_DEFINE([HAVE_ELF64], [1], [Define to 1 if the system has the type 'Elf64_Ehdr'.]),
|
||||
[], [[#include <elf.h>]])
|
||||
|
||||
AC_CHECK_HEADERS([fcntl.h])
|
||||
AC_CHECK_HEADERS([malloc.h])
|
||||
AC_CHECK_HEADERS([linux/pci.h])
|
||||
AC_CHECK_HEADERS([linux/spi/spidev.h])
|
||||
AC_CHECK_HEADERS([netdb.h])
|
||||
AC_CHECK_HEADERS([poll.h])
|
||||
AC_CHECK_HEADERS([strings.h])
|
||||
AC_CHECK_HEADERS([sys/ioctl.h])
|
||||
AC_CHECK_HEADERS([sys/mman.h])
|
||||
AC_CHECK_HEADERS([sys/param.h])
|
||||
AC_CHECK_HEADERS([sys/select.h])
|
||||
AC_CHECK_HEADERS([sys/stat.h])
|
||||
@@ -93,6 +96,8 @@ AC_CHECK_FUNCS([strnlen])
|
||||
AC_CHECK_FUNCS([gettimeofday])
|
||||
AC_CHECK_FUNCS([usleep])
|
||||
AC_CHECK_FUNCS([realpath])
|
||||
AC_CHECK_FUNCS([mallinfo])
|
||||
AC_CHECK_FUNCS([mallinfo2])
|
||||
|
||||
# guess-rev.sh only exists in the repository, not in the released archives
|
||||
AC_MSG_CHECKING([whether to build a release])
|
||||
@@ -104,37 +109,46 @@ AS_IF([test -x "$srcdir/guess-rev.sh"], [
|
||||
AC_MSG_RESULT([$build_release])
|
||||
|
||||
# Adapter drivers
|
||||
# 1st column -- configure option
|
||||
# 2nd column -- description
|
||||
# 3rd column -- symbol used for both config.h and automake
|
||||
# 1st column -- Basename for the configure option generated with AC_ARG_ENABLE.
|
||||
# For example, "buspirate" generates options "--enable-buspirate[=yes/no]"
|
||||
# and "--disable-buspirate".
|
||||
# 2nd column -- Description for the configure option. For example, "Bus Pirate"
|
||||
# generates "Enable building support for the Bus Pirate (default is auto)".
|
||||
# 3rd column -- Basename for the config.h and Automake symbols.
|
||||
# For example, basename "BUS_PIRATE" generates "BUILD_BUS_PIRATE" with AC_DEFINE
|
||||
# for config.h and "BUS_PIRATE" with AM_CONDITIONAL for Automake.
|
||||
m4_define([ADAPTER_ARG], [m4_argn([1], $1)])
|
||||
m4_define([ADAPTER_DESC], [m4_argn([2], $1)])
|
||||
m4_define([ADAPTER_SYM], [m4_argn([3], $1)])
|
||||
# AC_ARG_ENABLE uses prefix "enable_" to name the corresponding option variable.
|
||||
m4_define([ADAPTER_VAR], [enable_[]ADAPTER_ARG($1)])
|
||||
m4_define([ADAPTER_OPT], [m4_translit(ADAPTER_ARG($1), [_], [-])])
|
||||
|
||||
m4_define([USB1_ADAPTERS],
|
||||
[[[ftdi], [MPSSE mode of FTDI based devices], [FTDI]],
|
||||
[[ftdi_cjtag], [cJTAG (OScan1, JScan3) tunneled thru MPSSE], [FTDI_CJTAG]],
|
||||
[[ch347], [CH347 based devices], [CH347]],
|
||||
[[stlink], [ST-Link Programmer], [HLADAPTER_STLINK]],
|
||||
[[ti_icdi], [TI ICDI JTAG Programmer], [HLADAPTER_ICDI]],
|
||||
[[ulink], [Keil ULINK JTAG Programmer], [ULINK]],
|
||||
[[angie], [ANGIE Adapter], [ANGIE]],
|
||||
[[usb_blaster_2], [Altera USB-Blaster II Compatible], [USB_BLASTER_2]],
|
||||
[[ft232r], [Bitbang mode of FT232R based devices], [FT232R]],
|
||||
[[vsllink], [Versaloon-Link JTAG Programmer], [VSLLINK]],
|
||||
[[xds110], [TI XDS110 Debug Probe], [XDS110]],
|
||||
[[cmsis_dap_v2], [CMSIS-DAP v2 Compliant Debugger], [CMSIS_DAP_USB]],
|
||||
[[osbdm], [OSBDM (JTAG only) Programmer], [OSBDM]],
|
||||
[[opendous], [eStick/opendous JTAG Programmer], [OPENDOUS]],
|
||||
[[armjtagew], [Olimex ARM-JTAG-EW Programmer], [ARMJTAGEW]],
|
||||
[[rlink], [Raisonance RLink JTAG Programmer], [RLINK]],
|
||||
[[usbprog], [USBProg JTAG Programmer], [USBPROG]],
|
||||
[[esp_usb_jtag], [Espressif JTAG Programmer], [ESP_USB_JTAG]]])
|
||||
[[esp_usb_jtag], [Espressif JTAG Programmer], [ESP_USB_JTAG]],
|
||||
[[cmsis_dap_v2], [CMSIS-DAP v2 compliant dongle (USB bulk)], [CMSIS_DAP_USB]]])
|
||||
|
||||
m4_define([DEPRECATED_USB1_ADAPTERS],
|
||||
[[[aice], [Andes JTAG Programmer (deprecated)], [AICE]]])
|
||||
# Please keep cmsis_dap_v2 the last in USB1_ADAPTERS
|
||||
# and cmsis_dap the first in HIDAPI_ADAPTERS
|
||||
|
||||
m4_define([HIDAPI_ADAPTERS],
|
||||
[[[cmsis_dap], [CMSIS-DAP Compliant Debugger], [CMSIS_DAP_HID]],
|
||||
[[[cmsis_dap], [CMSIS-DAP v1 compliant dongle (HID)], [CMSIS_DAP_HID]],
|
||||
[[nulink], [Nu-Link Programmer], [HLADAPTER_NULINK]]])
|
||||
|
||||
m4_define([HIDAPI_USB1_ADAPTERS],
|
||||
@@ -150,18 +164,65 @@ m4_define([LIBFTDI_USB1_ADAPTERS],
|
||||
m4_define([LIBGPIOD_ADAPTERS],
|
||||
[[[linuxgpiod], [Linux GPIO bitbang through libgpiod], [LINUXGPIOD]]])
|
||||
|
||||
m4_define([DMEM_ADAPTER],
|
||||
[[[dmem], [CoreSight Direct Memory], [DMEM]]])
|
||||
|
||||
m4_define([SYSFSGPIO_ADAPTER],
|
||||
[[[sysfsgpio], [Linux GPIO bitbang through sysfs], [SYSFSGPIO]]])
|
||||
|
||||
m4_define([REMOTE_BITBANG_ADAPTER],
|
||||
[[[remote_bitbang], [Remote Bitbang driver], [REMOTE_BITBANG]]])
|
||||
|
||||
m4_define([LIBJAYLINK_ADAPTERS],
|
||||
[[[jlink], [SEGGER J-Link Programmer], [JLINK]]])
|
||||
|
||||
m4_define([PCIE_ADAPTERS],
|
||||
[[[xlnx_pcie_xvc], [Xilinx XVC/PCIe], [XLNX_PCIE_XVC]]])
|
||||
m4_define([XVC_ADAPTERS],
|
||||
[[[xlnx_xvc], [Xilinx XVC PCIe and AXI drives], [XLNX_XVC]]])
|
||||
|
||||
m4_define([SERIAL_PORT_ADAPTERS],
|
||||
[[[buspirate], [Bus Pirate], [BUS_PIRATE]]])
|
||||
|
||||
m4_define([PARALLEL_PORT_ADAPTER],
|
||||
[[[parport], [PC Parallel Port], [PARPORT]]])
|
||||
|
||||
m4_define([LINUXSPIDEV_ADAPTER],
|
||||
[[[linuxspidev], [Linux spidev driver], [LINUXSPIDEV]]])
|
||||
m4_define([VDEBUG_ADAPTER],
|
||||
[[[vdebug], [Cadence Virtual Debug Interface], [VDEBUG]]])
|
||||
|
||||
m4_define([JTAG_DPI_ADAPTER],
|
||||
[[[jtag_dpi], [JTAG DPI Adapter], [JTAG_DPI]]])
|
||||
|
||||
m4_define([JTAG_VPI_ADAPTER],
|
||||
[[[jtag_vpi], [JTAG VPI Adapter], [JTAG_VPI]]])
|
||||
|
||||
m4_define([RSHIM_ADAPTER],
|
||||
[[[rshim], [BlueField SoC via rshim], [RSHIM]]])
|
||||
|
||||
m4_define([AMTJTAGACCEL_ADAPTER],
|
||||
[[[amtjtagaccel], [Amontec JTAG-Accelerator driver], [AMTJTAGACCEL]]])
|
||||
|
||||
m4_define([CMSIS_DAP_TCP_ADAPTER],
|
||||
[[[cmsis_dap_tcp], [CMSIS-DAP v2 compliant dongle (TCP)], [CMSIS_DAP_TCP]]])
|
||||
|
||||
m4_define([HOST_ARM_BITBANG_ADAPTERS],
|
||||
[[[ep93xx], [Bitbanging on EP93xx-based SBCs], [EP93XX]],
|
||||
[[at91rm9200], [Bitbanging on AT91RM9200-based SBCs], [AT91RM9200]]])
|
||||
|
||||
m4_define([HOST_ARM_OR_AARCH64_BITBANG_ADAPTERS],
|
||||
[[[bcm2835gpio], [Bitbanging on BCM2835 (as found in Raspberry Pi)], [BCM2835GPIO]],
|
||||
[[imx_gpio], [Bitbanging on NXP IMX processors], [IMX_GPIO]],
|
||||
[[am335xgpio], [Bitbanging on AM335x (as found in Beaglebones)], [AM335XGPIO]]])
|
||||
|
||||
m4_define([DUMMY_ADAPTER],
|
||||
[[[dummy], [Dummy Adapter], [DUMMY]]])
|
||||
|
||||
m4_define([OPTIONAL_LIBRARIES],
|
||||
[[[capstone], [Use Capstone disassembly framework], []]])
|
||||
|
||||
m4_define([COVERAGE],
|
||||
[[[gcov], [Collect coverage using gcov], []]])
|
||||
|
||||
AC_ARG_ENABLE([doxygen-html],
|
||||
AS_HELP_STRING([--disable-doxygen-html],
|
||||
[Disable building Doxygen manual as HTML.]),
|
||||
@@ -190,66 +251,29 @@ AC_ARG_ENABLE([werror],
|
||||
AS_HELP_STRING([--disable-werror], [Do not treat warnings as errors]),
|
||||
[gcc_werror=$enableval], [gcc_werror=$gcc_warnings])
|
||||
|
||||
# set default verbose options, overridden by following options
|
||||
debug_usb_io=no
|
||||
debug_usb_comms=no
|
||||
AC_ARG_ENABLE([gcov],
|
||||
AS_HELP_STRING([--enable-gcov], [Enable runtime coverage collection via gcov]),
|
||||
[enable_gcov=$enableval], [enable_gcov=no])
|
||||
|
||||
AC_ARG_ENABLE([verbose],
|
||||
AS_HELP_STRING([--enable-verbose],
|
||||
[Enable verbose JTAG I/O messages (for debugging).]),
|
||||
[
|
||||
debug_usb_io=$enableval
|
||||
debug_usb_comms=$enableval
|
||||
], [])
|
||||
|
||||
AC_ARG_ENABLE([verbose_usb_io],
|
||||
AS_HELP_STRING([--enable-verbose-usb-io],
|
||||
[Enable verbose USB I/O messages (for debugging)]),
|
||||
[debug_usb_io=$enableval], [])
|
||||
|
||||
AC_ARG_ENABLE([verbose_usb_comms],
|
||||
AS_HELP_STRING([--enable-verbose-usb-comms],
|
||||
[Enable verbose USB communication messages (for debugging)]),
|
||||
[debug_usb_comms=$enableval], [])
|
||||
|
||||
AC_MSG_CHECKING([whether to enable verbose USB I/O messages]);
|
||||
AC_MSG_RESULT([$debug_usb_io])
|
||||
AS_IF([test "x$debug_usb_io" = "xyes"], [
|
||||
AC_DEFINE([_DEBUG_USB_IO_],[1], [Print verbose USB I/O messages])
|
||||
AS_IF([test "x$enable_gcov" = "xyes"], [
|
||||
AC_DEFINE([USE_GCOV], [1], [1 to enable coverage collection using gcov.])
|
||||
dnl When collecting coverage, disable optimizations.
|
||||
dnl This overrides the "-O2" that autoconf uses by default:
|
||||
CFLAGS+=" -O0"
|
||||
], [
|
||||
AC_DEFINE([USE_GCOV], [0], [0 to leave coverage collection disabled.])
|
||||
])
|
||||
|
||||
AC_MSG_CHECKING([whether to enable verbose USB communication messages]);
|
||||
AC_MSG_RESULT([$debug_usb_comms])
|
||||
AS_IF([test "x$debug_usb_comms" = "xyes"], [
|
||||
AC_DEFINE([_DEBUG_USB_COMMS_],[1], [Print verbose USB communication messages])
|
||||
])
|
||||
|
||||
debug_malloc=no
|
||||
AC_ARG_ENABLE([malloc_logging],
|
||||
AS_HELP_STRING([--enable-malloc-logging],
|
||||
[Include free space in logging messages (requires malloc.h).]),
|
||||
[debug_malloc=$enableval], [])
|
||||
|
||||
AC_MSG_CHECKING([whether to enable malloc free space logging]);
|
||||
AC_MSG_RESULT([$debug_malloc])
|
||||
AS_IF([test "x$debug_malloc" = "xyes"], [
|
||||
AC_DEFINE([_DEBUG_FREE_SPACE_],[1], [Include malloc free space in logging])
|
||||
])
|
||||
|
||||
AC_ARG_ENABLE([dummy],
|
||||
AS_HELP_STRING([--enable-dummy], [Enable building the dummy port driver]),
|
||||
[build_dummy=$enableval], [build_dummy=no])
|
||||
|
||||
AC_ARG_ENABLE([rshim],
|
||||
AS_HELP_STRING([--enable-rshim], [Enable building the rshim driver]),
|
||||
[build_rshim=$enableval], [build_rshim=no])
|
||||
|
||||
m4_define([AC_ARG_ADAPTERS], [
|
||||
m4_foreach([adapter], [$1],
|
||||
[AC_ARG_ENABLE(ADAPTER_OPT([adapter]),
|
||||
AS_HELP_STRING([--enable-ADAPTER_OPT([adapter])],
|
||||
[Enable building support for the ]ADAPTER_DESC([adapter])[ (default is $2)]),
|
||||
[], [ADAPTER_VAR([adapter])=$2])
|
||||
m4_foreach([adapter_driver], [$1],
|
||||
[AC_ARG_ENABLE(ADAPTER_OPT([adapter_driver]),
|
||||
AS_HELP_STRING([--enable-ADAPTER_OPT([adapter_driver])[[[=yes/no/auto]]]],
|
||||
[Enable building support for the ]ADAPTER_DESC([adapter_driver])[ (default is $2)]),
|
||||
[case "${enableval}" in
|
||||
yes|no|auto) ;;
|
||||
*) AC_MSG_ERROR([Option --enable-ADAPTER_OPT([adapter_driver]) has invalid value "${enableval}".]) ;;
|
||||
esac],
|
||||
[ADAPTER_VAR([adapter_driver])=$2])
|
||||
])
|
||||
])
|
||||
|
||||
@@ -258,17 +282,37 @@ AC_ARG_ADAPTERS([
|
||||
HIDAPI_ADAPTERS,
|
||||
HIDAPI_USB1_ADAPTERS,
|
||||
LIBFTDI_ADAPTERS,
|
||||
LIBFTDI_USB1_ADAPTERS
|
||||
LIBFTDI_USB1_ADAPTERS,
|
||||
LIBGPIOD_ADAPTERS,
|
||||
DMEM_ADAPTER,
|
||||
SYSFSGPIO_ADAPTER,
|
||||
REMOTE_BITBANG_ADAPTER,
|
||||
LINUXSPIDEV_ADAPTER,
|
||||
SERIAL_PORT_ADAPTERS,
|
||||
LIBJAYLINK_ADAPTERS
|
||||
DUMMY_ADAPTER,
|
||||
VDEBUG_ADAPTER,
|
||||
JTAG_DPI_ADAPTER,
|
||||
JTAG_VPI_ADAPTER,
|
||||
RSHIM_ADAPTER,
|
||||
XVC_ADAPTERS,
|
||||
LIBJAYLINK_ADAPTERS,
|
||||
CMSIS_DAP_TCP_ADAPTER
|
||||
],[auto])
|
||||
|
||||
AC_ARG_ADAPTERS([DEPRECATED_USB1_ADAPTERS],[no])
|
||||
AC_ARG_ADAPTERS([
|
||||
PARALLEL_PORT_ADAPTER,
|
||||
AMTJTAGACCEL_ADAPTER
|
||||
],[no])
|
||||
|
||||
AC_ARG_ENABLE([parport],
|
||||
AS_HELP_STRING([--enable-parport], [Enable building the pc parallel port driver]),
|
||||
[build_parport=$enableval], [build_parport=no])
|
||||
# The following adapters use bitbanging and can actually be built on all architectures,
|
||||
# which is useful to verify that they still build fine.
|
||||
# We could enable them automatically only on the architectures where they actually occur:
|
||||
# HOST_ARM_BITBANG_ADAPTERS: when ${host_cpu} matches arm*
|
||||
# HOST_ARM_OR_AARCH64_BITBANG_ADAPTERS: when ${host_cpu} matches arm*|aarch64
|
||||
# However, conditionally changing the meaning of 'auto' requires
|
||||
# a more flexible logic around.
|
||||
AC_ARG_ADAPTERS([HOST_ARM_BITBANG_ADAPTERS],[no])
|
||||
AC_ARG_ADAPTERS([HOST_ARM_OR_AARCH64_BITBANG_ADAPTERS],[no])
|
||||
|
||||
AC_ARG_ENABLE([parport_ppdev],
|
||||
AS_HELP_STRING([--disable-parport-ppdev],
|
||||
@@ -277,121 +321,60 @@ AC_ARG_ENABLE([parport_ppdev],
|
||||
|
||||
AC_ARG_ENABLE([parport_giveio],
|
||||
AS_HELP_STRING([--enable-parport-giveio],
|
||||
[Enable use of giveio for parport (for CygWin only)]),
|
||||
[Enable use of giveio for parport (deprecated, for CygWin only)]),
|
||||
[parport_use_giveio=$enableval], [parport_use_giveio=])
|
||||
|
||||
AC_ARG_ENABLE([jtag_vpi],
|
||||
AS_HELP_STRING([--enable-jtag_vpi], [Enable building support for JTAG VPI]),
|
||||
[build_jtag_vpi=$enableval], [build_jtag_vpi=no])
|
||||
|
||||
AC_ARG_ENABLE([vdebug],
|
||||
AS_HELP_STRING([--enable-vdebug], [Enable building support for Cadence Virtual Debug Interface]),
|
||||
[build_vdebug=$enableval], [build_vdebug=no])
|
||||
|
||||
AC_ARG_ENABLE([jtag_dpi],
|
||||
AS_HELP_STRING([--enable-jtag_dpi], [Enable building support for JTAG DPI]),
|
||||
[build_jtag_dpi=$enableval], [build_jtag_dpi=no])
|
||||
|
||||
AC_ARG_ENABLE([amtjtagaccel],
|
||||
AS_HELP_STRING([--enable-amtjtagaccel], [Enable building the Amontec JTAG-Accelerator driver]),
|
||||
[build_amtjtagaccel=$enableval], [build_amtjtagaccel=no])
|
||||
|
||||
AS_CASE(["${host_cpu}"],
|
||||
[arm*|aarch64], [
|
||||
AC_ARG_ENABLE([bcm2835gpio],
|
||||
AS_HELP_STRING([--enable-bcm2835gpio], [Enable building support for bitbanging on BCM2835 (as found in Raspberry Pi)]),
|
||||
[build_bcm2835gpio=$enableval], [build_bcm2835gpio=no])
|
||||
AC_ARG_ENABLE([imx_gpio],
|
||||
AS_HELP_STRING([--enable-imx_gpio], [Enable building support for bitbanging on NXP IMX processors]),
|
||||
[build_imx_gpio=$enableval], [build_imx_gpio=no])
|
||||
AC_ARG_ENABLE([am335xgpio],
|
||||
AS_HELP_STRING([--enable-am335xgpio], [Enable building support for bitbanging on AM335x (as found in Beaglebones)]),
|
||||
[build_am335xgpio=$enableval], [build_am335xgpio=no])
|
||||
],
|
||||
[
|
||||
build_bcm2835gpio=no
|
||||
build_imx_gpio=no
|
||||
build_am335xgpio=no
|
||||
])
|
||||
|
||||
AS_CASE(["${host_cpu}"],
|
||||
[arm*], [
|
||||
AC_ARG_ENABLE([ep93xx],
|
||||
AS_HELP_STRING([--enable-ep93xx], [Enable building support for EP93xx based SBCs]),
|
||||
[build_ep93xx=$enableval], [build_ep93xx=no])
|
||||
|
||||
AC_ARG_ENABLE([at91rm9200],
|
||||
AS_HELP_STRING([--enable-at91rm9200], [Enable building support for AT91RM9200 based SBCs]),
|
||||
[build_at91rm9200=$enableval], [build_at91rm9200=no])
|
||||
],
|
||||
[
|
||||
build_ep93xx=no
|
||||
build_at91rm9200=no
|
||||
])
|
||||
|
||||
AC_ARG_ENABLE([gw16012],
|
||||
AS_HELP_STRING([--enable-gw16012], [Enable building support for the Gateworks GW16012 JTAG Programmer]),
|
||||
[build_gw16012=$enableval], [build_gw16012=no])
|
||||
|
||||
AC_ARG_ENABLE([sysfsgpio],
|
||||
AS_HELP_STRING([--enable-sysfsgpio], [Enable building support for programming driven via sysfs gpios.]),
|
||||
[build_sysfsgpio=$enableval], [build_sysfsgpio=no])
|
||||
|
||||
AC_ARG_ENABLE([xlnx_pcie_xvc],
|
||||
AS_HELP_STRING([--enable-xlnx-pcie-xvc], [Enable building support for Xilinx XVC/PCIe.]),
|
||||
[build_xlnx_pcie_xvc=$enableval], [build_xlnx_pcie_xvc=no])
|
||||
can_build_rshim=no
|
||||
|
||||
AS_CASE([$host_os],
|
||||
[linux*], [],
|
||||
[linux*], [
|
||||
is_linux=yes
|
||||
can_build_rshim=yes
|
||||
],
|
||||
[
|
||||
AS_IF([test "x$build_sysfsgpio" = "xyes"], [
|
||||
AC_MSG_ERROR([sysfsgpio is only available on linux])
|
||||
])
|
||||
|
||||
AS_IF([test "x$enable_linuxgpiod" = "xyes"], [
|
||||
AC_MSG_ERROR([linuxgpiod is only available on linux])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_xlnx_pcie_xvc" = "xyes"], [
|
||||
AC_MSG_ERROR([xlnx_pcie_xvc is only available on linux])
|
||||
])
|
||||
|
||||
AS_CASE([$host_os], [freebsd*], [],
|
||||
AS_CASE([$host_os], [freebsd*], [
|
||||
can_build_rshim=yes
|
||||
],
|
||||
[
|
||||
AS_IF([test "x$build_rshim" = "xyes"], [
|
||||
AC_MSG_ERROR([build_rshim is only available on linux or freebsd])
|
||||
AS_IF([test "x$enable_rshim" = "xyes"], [
|
||||
AC_MSG_ERROR([rshim is only available on linux or freebsd])
|
||||
])
|
||||
])
|
||||
|
||||
AS_IF([test "x$enable_dmem" = "xyes"], [
|
||||
AC_MSG_ERROR([dmem is only available on linux])
|
||||
])
|
||||
])
|
||||
|
||||
AC_ARG_ENABLE([internal-jimtcl],
|
||||
AS_HELP_STRING([--disable-internal-jimtcl], [Disable building internal jimtcl]),
|
||||
[use_internal_jimtcl=$enableval], [use_internal_jimtcl=yes])
|
||||
AS_HELP_STRING([--enable-internal-jimtcl], [Enable building internal jimtcl (deprecated)]),
|
||||
[use_internal_jimtcl=$enableval], [use_internal_jimtcl=no])
|
||||
|
||||
AC_ARG_ENABLE([jimtcl-maintainer],
|
||||
AS_HELP_STRING([--enable-jimtcl-maintainer], [Enable maintainer mode when building internal jimtcl]),
|
||||
[use_internal_jimtcl_maintainer=$enableval], [use_internal_jimtcl_maintainer=no])
|
||||
|
||||
AC_ARG_ENABLE([internal-libjaylink],
|
||||
AS_HELP_STRING([--disable-internal-libjaylink],
|
||||
[Disable building internal libjaylink]),
|
||||
[use_internal_libjaylink=$enableval], [use_internal_libjaylink=yes])
|
||||
|
||||
AC_ARG_ENABLE([remote-bitbang],
|
||||
AS_HELP_STRING([--enable-remote-bitbang], [Enable building support for the Remote Bitbang jtag driver]),
|
||||
[build_remote_bitbang=$enableval], [build_remote_bitbang=no])
|
||||
AS_HELP_STRING([--enable-internal-libjaylink],
|
||||
[Enable building internal libjaylink]),
|
||||
[use_internal_libjaylink=$enableval], [use_internal_libjaylink=no])
|
||||
|
||||
AS_CASE(["${host_cpu}"],
|
||||
[i?86|x86*], [],
|
||||
[
|
||||
AS_IF([test "x$parport_use_ppdev" = "xno"], [
|
||||
AC_MSG_WARN([--disable-parport-ppdev is not supported by the host CPU])
|
||||
AC_MSG_ERROR([--disable-parport-ppdev is not supported by the host CPU])
|
||||
])
|
||||
parport_use_ppdev=yes
|
||||
])
|
||||
|
||||
AS_CASE([$host],
|
||||
[*-cygwin*], [
|
||||
can_build_buspirate=yes
|
||||
|
||||
AS_CASE([$host_os],
|
||||
[cygwin*], [
|
||||
is_win32=yes
|
||||
parport_use_ppdev=no
|
||||
|
||||
@@ -406,12 +389,12 @@ AS_CASE([$host],
|
||||
], [
|
||||
is_cygwin=yes
|
||||
# sys/io.h needed under cygwin for parport access
|
||||
AS_IF([test "x$build_parport" = "xyes"], [
|
||||
AS_IF([test "x$enable_parport" != "xno"], [
|
||||
AC_CHECK_HEADERS([sys/io.h],[],AC_MSG_ERROR([Please install the cygwin ioperm package]))
|
||||
])
|
||||
])
|
||||
],
|
||||
[*-mingw* | *-msys*], [
|
||||
[mingw* | msys*], [
|
||||
is_mingw=yes
|
||||
is_win32=yes
|
||||
parport_use_ppdev=no
|
||||
@@ -421,16 +404,16 @@ AS_CASE([$host],
|
||||
])
|
||||
parport_use_giveio=yes
|
||||
|
||||
AS_IF([test "x$enable_buspirate" = "xyes"], [
|
||||
AC_MSG_ERROR([buspirate currently not supported by MinGW32 hosts])
|
||||
AS_IF([test "x$ADAPTER_VAR([buspirate])" = "xyes"], [
|
||||
AC_MSG_ERROR([The Bus Pirate adapter is currently not supported by MinGW32 hosts.])
|
||||
])
|
||||
|
||||
# In case enable_buspirate=auto, make sure it will not be built.
|
||||
enable_buspirate=no
|
||||
can_build_buspirate=no
|
||||
|
||||
AC_SUBST([HOST_CPPFLAGS], [-D__USE_MINGW_ANSI_STDIO])
|
||||
AC_SUBST([HOST_CPPFLAGS], ["-D__USE_MINGW_ANSI_STDIO -DFD_SETSIZE=128"])
|
||||
],
|
||||
[*darwin*], [
|
||||
[darwin*], [
|
||||
is_darwin=yes
|
||||
|
||||
AS_IF([test "x$parport_use_giveio" = "xyes"], [
|
||||
@@ -469,59 +452,8 @@ AS_IF([test "x$is_darwin" = "xyes"], [
|
||||
AC_DEFINE([IS_DARWIN], [0], [0 if not building for Darwin.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_parport" = "xyes"], [
|
||||
AS_IF([test "x$ADAPTER_VAR([dummy])" != "xno"], [
|
||||
build_bitbang=yes
|
||||
AC_DEFINE([BUILD_PARPORT], [1], [1 if you want parport.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_PARPORT], [0], [0 if you don't want parport.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_rshim" = "xyes"], [
|
||||
AC_DEFINE([BUILD_RSHIM], [1], [1 if you want to debug BlueField SoC via rshim.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_RSHIM], [0], [0 if you don't want to debug BlueField SoC via rshim.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_dummy" = "xyes"], [
|
||||
build_bitbang=yes
|
||||
AC_DEFINE([BUILD_DUMMY], [1], [1 if you want dummy driver.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_DUMMY], [0], [0 if you don't want dummy driver.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_ep93xx" = "xyes"], [
|
||||
build_bitbang=yes
|
||||
AC_DEFINE([BUILD_EP93XX], [1], [1 if you want ep93xx.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_EP93XX], [0], [0 if you don't want ep93xx.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_at91rm9200" = "xyes"], [
|
||||
build_bitbang=yes
|
||||
AC_DEFINE([BUILD_AT91RM9200], [1], [1 if you want at91rm9200.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_AT91RM9200], [0], [0 if you don't want at91rm9200.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_bcm2835gpio" = "xyes"], [
|
||||
build_bitbang=yes
|
||||
AC_DEFINE([BUILD_BCM2835GPIO], [1], [1 if you want bcm2835gpio.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_BCM2835GPIO], [0], [0 if you don't want bcm2835gpio.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_imx_gpio" = "xyes"], [
|
||||
build_bitbang=yes
|
||||
AC_DEFINE([BUILD_IMX_GPIO], [1], [1 if you want imx_gpio.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_IMX_GPIO], [0], [0 if you don't want imx_gpio.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_am335xgpio" = "xyes"], [
|
||||
build_bitbang=yes
|
||||
AC_DEFINE([BUILD_AM335XGPIO], [1], [1 if you want am335xgpio.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_AM335XGPIO], [0], [0 if you don't want am335xgpio.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$parport_use_ppdev" = "xyes"], [
|
||||
@@ -536,75 +468,32 @@ AS_IF([test "x$parport_use_giveio" = "xyes"], [
|
||||
AC_DEFINE([PARPORT_USE_GIVEIO], [0], [0 if you don't want parport to use giveio.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_jtag_vpi" = "xyes"], [
|
||||
AC_DEFINE([BUILD_JTAG_VPI], [1], [1 if you want JTAG VPI.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_JTAG_VPI], [0], [0 if you don't want JTAG VPI.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_vdebug" = "xyes"], [
|
||||
AC_DEFINE([BUILD_VDEBUG], [1], [1 if you want Cadence vdebug interface.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_VDEBUG], [0], [0 if you don't want Cadence vdebug interface.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_jtag_dpi" = "xyes"], [
|
||||
AC_DEFINE([BUILD_JTAG_DPI], [1], [1 if you want JTAG DPI.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_JTAG_DPI], [0], [0 if you don't want JTAG DPI.])
|
||||
])
|
||||
|
||||
|
||||
AS_IF([test "x$build_amtjtagaccel" = "xyes"], [
|
||||
AC_DEFINE([BUILD_AMTJTAGACCEL], [1], [1 if you want the Amontec JTAG-Accelerator driver.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_AMTJTAGACCEL], [0], [0 if you don't want the Amontec JTAG-Accelerator driver.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_gw16012" = "xyes"], [
|
||||
AC_DEFINE([BUILD_GW16012], [1], [1 if you want the Gateworks GW16012 driver.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_GW16012], [0], [0 if you don't want the Gateworks GW16012 driver.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$enable_buspirate" != "xno"], [
|
||||
AC_DEFINE([BUILD_BUSPIRATE], [1], [1 if you want the Buspirate JTAG driver.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_BUSPIRATE], [0], [0 if you don't want the Buspirate JTAG driver.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$use_internal_jimtcl" = "xyes"], [
|
||||
AS_IF([test -f "$srcdir/jimtcl/configure.ac"], [
|
||||
AS_IF([test -f "$srcdir/jimtcl/configure"], [
|
||||
AS_IF([test "x$use_internal_jimtcl_maintainer" = "xyes"], [
|
||||
jimtcl_config_options="--disable-install-jim --with-ext=json --maintainer"
|
||||
jimtcl_config_options="--disable-install-jim --with-ext=json --minimal --disable-ssl --maintainer"
|
||||
], [
|
||||
jimtcl_config_options="--disable-install-jim --with-ext=json"
|
||||
jimtcl_config_options="--disable-install-jim --with-ext=json --minimal --disable-ssl"
|
||||
])
|
||||
AX_CONFIG_SUBDIR_OPTION([jimtcl], [$jimtcl_config_options])
|
||||
], [
|
||||
AC_MSG_ERROR([jimtcl not found, run git submodule init and git submodule update.])
|
||||
])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_remote_bitbang" = "xyes"], [
|
||||
build_bitbang=yes
|
||||
AC_DEFINE([BUILD_REMOTE_BITBANG], [1], [1 if you want the Remote Bitbang JTAG driver.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_REMOTE_BITBANG], [0], [0 if you don't want the Remote Bitbang JTAG driver.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_sysfsgpio" = "xyes"], [
|
||||
build_bitbang=yes
|
||||
AC_DEFINE([BUILD_SYSFSGPIO], [1], [1 if you want the SysfsGPIO driver.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_SYSFSGPIO], [0], [0 if you don't want SysfsGPIO driver.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$build_xlnx_pcie_xvc" = "xyes"], [
|
||||
build_xlnx_pcie_xvc=yes
|
||||
AC_DEFINE([BUILD_XLNX_PCIE_XVC], [1], [1 if you want the Xilinx XVC/PCIe driver.])
|
||||
], [
|
||||
AC_DEFINE([BUILD_XLNX_PCIE_XVC], [0], [0 if you don't want Xilinx XVC/PCIe driver.])
|
||||
PKG_CHECK_MODULES([JIMTCL], [jimtcl >= 0.79], [
|
||||
have_jimtcl_pkg_config=yes
|
||||
], [
|
||||
have_jimtcl_pkg_config=no
|
||||
AC_CHECK_HEADER([jim.h], [], [
|
||||
AC_MSG_ERROR([jimtcl is required but not found via pkg-config and system includes])
|
||||
])
|
||||
])
|
||||
])
|
||||
|
||||
PKG_CHECK_MODULES([LIBUSB1], [libusb-1.0], [
|
||||
@@ -631,7 +520,6 @@ AS_IF([test "x$enable_capstone" != xno], [
|
||||
PKG_CHECK_MODULES([CAPSTONE], [capstone], [
|
||||
AC_DEFINE([HAVE_CAPSTONE], [1], [1 if you have Capstone disassembly framework.])
|
||||
], [
|
||||
AC_DEFINE([HAVE_CAPSTONE], [0], [0 if you don't have Capstone disassembly framework.])
|
||||
if test "x$enable_capstone" != xauto; then
|
||||
AC_MSG_ERROR([--with-capstone was given, but test for Capstone failed])
|
||||
fi
|
||||
@@ -656,43 +544,111 @@ PKG_CHECK_MODULES([LIBFTDI], [libftdi1], [
|
||||
PKG_CHECK_MODULES([LIBFTDI], [libftdi], [use_libftdi=yes], [use_libftdi=no])
|
||||
])
|
||||
|
||||
PKG_CHECK_MODULES([LIBGPIOD], [libgpiod], [use_libgpiod=yes], [use_libgpiod=no])
|
||||
PKG_CHECK_MODULES([LIBGPIOD], [libgpiod >= 2.0] , [
|
||||
use_libgpiod=yes
|
||||
], [
|
||||
PKG_CHECK_MODULES([LIBGPIOD], [libgpiod], [
|
||||
use_libgpiod=yes
|
||||
AC_DEFINE([HAVE_LIBGPIOD_V1], [1], [define if libgpiod is version v1.x])
|
||||
|
||||
PKG_CHECK_EXISTS([libgpiod >= 1.5],
|
||||
[AC_DEFINE([HAVE_LIBGPIOD1_FLAGS_BIAS], [1], [define if libgpiod v1 has line request flags bias])])
|
||||
], [
|
||||
use_libgpiod=no
|
||||
])
|
||||
])
|
||||
|
||||
PKG_CHECK_MODULES([LIBJAYLINK], [libjaylink >= 0.2],
|
||||
[use_libjaylink=yes], [use_libjaylink=no])
|
||||
|
||||
# Arg $1: An array of adapter triplets, used to derive option and variable names for each adapter.
|
||||
# Arg $2: Whether the adapters can be enabled, for example, because
|
||||
# their prerequisites are installed in the system.
|
||||
# Arg $3: What prerequisites are missing, to be shown in an error message
|
||||
# if an adapter was requested but cannot be enabled.
|
||||
m4_define([PROCESS_ADAPTERS], [
|
||||
m4_foreach([adapter], [$1], [
|
||||
m4_foreach([adapter_driver], [$1], [
|
||||
AS_IF([test $2], [
|
||||
AS_IF([test "x$ADAPTER_VAR([adapter])" != "xno"], [
|
||||
AC_DEFINE([BUILD_]ADAPTER_SYM([adapter]), [1], [1 if you want the ]ADAPTER_DESC([adapter]).)
|
||||
AS_IF([test "x$ADAPTER_VAR([adapter_driver])" != "xno"], [
|
||||
AC_DEFINE([BUILD_]ADAPTER_SYM([adapter_driver]), [1],
|
||||
[1 if you want the ]ADAPTER_DESC([adapter_driver]).)
|
||||
], [
|
||||
AC_DEFINE([BUILD_]ADAPTER_SYM([adapter]), [0], [0 if you do not want the ]ADAPTER_DESC([adapter]).)
|
||||
AC_DEFINE([BUILD_]ADAPTER_SYM([adapter_driver]), [0],
|
||||
[0 if you do not want the ]ADAPTER_DESC([adapter_driver]).)
|
||||
])
|
||||
], [
|
||||
AS_IF([test "x$ADAPTER_VAR([adapter])" = "xyes"], [
|
||||
AC_MSG_ERROR([$3 is required for the ADAPTER_DESC([adapter])])
|
||||
AS_IF([test "x$ADAPTER_VAR([adapter_driver])" = "xyes"], [
|
||||
AC_MSG_ERROR([$3 is required for [adapter_driver] "ADAPTER_DESC([adapter_driver])".])
|
||||
])
|
||||
ADAPTER_VAR([adapter])=no
|
||||
AC_DEFINE([BUILD_]ADAPTER_SYM([adapter]), [0], [0 if you do not want the ]ADAPTER_DESC([adapter]).)
|
||||
ADAPTER_VAR([adapter_driver])=no
|
||||
AC_DEFINE([BUILD_]ADAPTER_SYM([adapter_driver]), [0],
|
||||
[0 if you do not want the ]ADAPTER_DESC([adapter_driver]).)
|
||||
])
|
||||
AM_CONDITIONAL(ADAPTER_SYM([adapter]), [test "x$ADAPTER_VAR([adapter])" != "xno"])
|
||||
AM_CONDITIONAL(ADAPTER_SYM([adapter_driver]), [test "x$ADAPTER_VAR([adapter_driver])" != "xno"])
|
||||
])
|
||||
])
|
||||
|
||||
PROCESS_ADAPTERS([USB1_ADAPTERS], ["x$use_libusb1" = "xyes"], [libusb-1.x])
|
||||
PROCESS_ADAPTERS([DEPRECATED_USB1_ADAPTERS], ["x$use_libusb1" = "xyes"], [libusb-1.x])
|
||||
PROCESS_ADAPTERS([HIDAPI_ADAPTERS], ["x$use_hidapi" = "xyes"], [hidapi])
|
||||
PROCESS_ADAPTERS([HIDAPI_USB1_ADAPTERS], ["x$use_hidapi" = "xyes" -a "x$use_libusb1" = "xyes"], [hidapi and libusb-1.x])
|
||||
PROCESS_ADAPTERS([LIBFTDI_ADAPTERS], ["x$use_libftdi" = "xyes"], [libftdi])
|
||||
PROCESS_ADAPTERS([LIBFTDI_USB1_ADAPTERS], ["x$use_libftdi" = "xyes" -a "x$use_libusb1" = "xyes"], [libftdi and libusb-1.x])
|
||||
PROCESS_ADAPTERS([LIBGPIOD_ADAPTERS], ["x$use_libgpiod" = "xyes"], [libgpiod])
|
||||
PROCESS_ADAPTERS([LIBGPIOD_ADAPTERS], ["x$use_libgpiod" = "xyes"], [Linux libgpiod])
|
||||
PROCESS_ADAPTERS([DMEM_ADAPTER], ["x$is_linux" = "xyes" -a "x$ac_cv_header_sys_mman_h" = "xyes"], [Linux /dev/mem])
|
||||
PROCESS_ADAPTERS([SYSFSGPIO_ADAPTER], ["x$is_linux" = "xyes"], [Linux sysfs])
|
||||
PROCESS_ADAPTERS([REMOTE_BITBANG_ADAPTER], [true], [unused])
|
||||
PROCESS_ADAPTERS([CMSIS_DAP_TCP_ADAPTER], [true], [unused])
|
||||
PROCESS_ADAPTERS([LIBJAYLINK_ADAPTERS], ["x$use_internal_libjaylink" = "xyes" -o "x$use_libjaylink" = "xyes"], [libjaylink-0.2])
|
||||
PROCESS_ADAPTERS([XVC_ADAPTERS],
|
||||
["x$is_linux" = "xyes" -a "x$ac_cv_header_linux_pci_h" = "xyes" -a "x$ac_cv_header_sys_mman_h" = "xyes"],
|
||||
[Linux build with headers linux/pci.h and sys/mman.h])
|
||||
PROCESS_ADAPTERS([SERIAL_PORT_ADAPTERS], ["x$can_build_buspirate" = "xyes"],
|
||||
[internal error: validation should happen beforehand])
|
||||
PROCESS_ADAPTERS([PARALLEL_PORT_ADAPTER], [true], [unused])
|
||||
PROCESS_ADAPTERS([LINUXSPIDEV_ADAPTER], ["x$is_linux" = "xyes" -a "x$ac_cv_header_linux_spi_spidev_h" = "xyes"],
|
||||
[Linux spidev])
|
||||
PROCESS_ADAPTERS([VDEBUG_ADAPTER], [true], [unused])
|
||||
PROCESS_ADAPTERS([JTAG_DPI_ADAPTER], [true], [unused])
|
||||
PROCESS_ADAPTERS([JTAG_VPI_ADAPTER], [true], [unused])
|
||||
PROCESS_ADAPTERS([RSHIM_ADAPTER], ["x$can_build_rshim" = "xyes"],
|
||||
[internal error: validation should happen beforehand])
|
||||
PROCESS_ADAPTERS([AMTJTAGACCEL_ADAPTER], [true], [unused])
|
||||
PROCESS_ADAPTERS([HOST_ARM_BITBANG_ADAPTERS], ["x$ac_cv_header_sys_mman_h" = "xyes"], [header sys/mman.h])
|
||||
PROCESS_ADAPTERS([HOST_ARM_OR_AARCH64_BITBANG_ADAPTERS], ["x$ac_cv_header_sys_mman_h" = "xyes"], [header sys/mman.h])
|
||||
PROCESS_ADAPTERS([DUMMY_ADAPTER], [true], [unused])
|
||||
|
||||
AS_IF([test "x$enable_linuxgpiod" != "xno"], [
|
||||
build_bitbang=yes
|
||||
])
|
||||
|
||||
AS_IF([test "x$enable_sysfsgpio" != "xno"], [
|
||||
build_bitbang=yes
|
||||
])
|
||||
|
||||
AS_IF([test "x$enable_remote_bitbang" != "xno"], [
|
||||
build_bitbang=yes
|
||||
])
|
||||
|
||||
AS_IF([test "x$enable_bcm2835gpio" != "xno"], [
|
||||
build_bitbang=yes
|
||||
])
|
||||
|
||||
AS_IF([test "x$enable_imx_gpio" != "xno"], [
|
||||
build_bitbang=yes
|
||||
])
|
||||
|
||||
AS_IF([test "x$enable_am335xgpio" != "xno"], [
|
||||
build_bitbang=yes
|
||||
])
|
||||
|
||||
AS_IF([test "x$enable_ep93xx" != "xno"], [
|
||||
build_bitbang=yes
|
||||
])
|
||||
|
||||
AS_IF([test "x$enable_at91rm9200" != "xno"], [
|
||||
build_bitbang=yes
|
||||
])
|
||||
|
||||
AS_IF([test "x$enable_stlink" != "xno" -o "x$enable_ti_icdi" != "xno" -o "x$enable_nulink" != "xno"], [
|
||||
AC_DEFINE([BUILD_HLADAPTER], [1], [1 if you want the High Level JTAG driver.])
|
||||
AM_CONDITIONAL([HLADAPTER], [true])
|
||||
@@ -703,6 +659,8 @@ AS_IF([test "x$enable_stlink" != "xno" -o "x$enable_ti_icdi" != "xno" -o "x$enab
|
||||
AM_CONDITIONAL([HLADAPTER_STLINK], [test "x$enable_stlink" != "xno"])
|
||||
AM_CONDITIONAL([HLADAPTER_ICDI], [test "x$enable_ti_icdi" != "xno"])
|
||||
AM_CONDITIONAL([HLADAPTER_NULINK], [test "x$enable_nulink" != "xno"])
|
||||
AM_CONDITIONAL([CMSIS_DAP_CORE],
|
||||
[test "x$enable_cmsis_dap" != "xno" -o "x$enable_cmsis_dap_v2" != "xno" -o "x$enable_cmsis_dap_tcp" != "xno"])
|
||||
|
||||
AS_IF([test "x$enable_jlink" != "xno"], [
|
||||
AS_IF([test "x$use_internal_libjaylink" = "xyes"], [
|
||||
@@ -710,7 +668,7 @@ AS_IF([test "x$enable_jlink" != "xno"], [
|
||||
AX_CONFIG_SUBDIR_OPTION([src/jtag/drivers/libjaylink],
|
||||
[--enable-subproject-build])
|
||||
], [
|
||||
AC_MSG_ERROR([Internal libjaylink not found, run either 'git submodule init' and 'git submodule update' or disable internal libjaylink with --disable-internal-libjaylink.])
|
||||
AC_MSG_ERROR([Internal libjaylink not found, run 'git submodule init' and 'git submodule update'.])
|
||||
])
|
||||
])
|
||||
])
|
||||
@@ -726,25 +684,10 @@ AS_IF([test "x$enable_esp_usb_jtag" != "xno"], [
|
||||
])
|
||||
|
||||
AM_CONDITIONAL([RELEASE], [test "x$build_release" = "xyes"])
|
||||
AM_CONDITIONAL([PARPORT], [test "x$build_parport" = "xyes"])
|
||||
AM_CONDITIONAL([DUMMY], [test "x$build_dummy" = "xyes"])
|
||||
AM_CONDITIONAL([GIVEIO], [test "x$parport_use_giveio" = "xyes"])
|
||||
AM_CONDITIONAL([EP93XX], [test "x$build_ep93xx" = "xyes"])
|
||||
AM_CONDITIONAL([AT91RM9200], [test "x$build_at91rm9200" = "xyes"])
|
||||
AM_CONDITIONAL([BCM2835GPIO], [test "x$build_bcm2835gpio" = "xyes"])
|
||||
AM_CONDITIONAL([IMX_GPIO], [test "x$build_imx_gpio" = "xyes"])
|
||||
AM_CONDITIONAL([AM335XGPIO], [test "x$build_am335xgpio" = "xyes"])
|
||||
AM_CONDITIONAL([BITBANG], [test "x$build_bitbang" = "xyes"])
|
||||
AM_CONDITIONAL([JTAG_VPI], [test "x$build_jtag_vpi" = "xyes"])
|
||||
AM_CONDITIONAL([VDEBUG], [test "x$build_vdebug" = "xyes"])
|
||||
AM_CONDITIONAL([JTAG_DPI], [test "x$build_jtag_dpi" = "xyes"])
|
||||
AM_CONDITIONAL([USB_BLASTER_DRIVER], [test "x$enable_usb_blaster" != "xno" -o "x$enable_usb_blaster_2" != "xno"])
|
||||
AM_CONDITIONAL([AMTJTAGACCEL], [test "x$build_amtjtagaccel" = "xyes"])
|
||||
AM_CONDITIONAL([GW16012], [test "x$build_gw16012" = "xyes"])
|
||||
AM_CONDITIONAL([REMOTE_BITBANG], [test "x$build_remote_bitbang" = "xyes"])
|
||||
AM_CONDITIONAL([BUSPIRATE], [test "x$enable_buspirate" != "xno"])
|
||||
AM_CONDITIONAL([SYSFSGPIO], [test "x$build_sysfsgpio" = "xyes"])
|
||||
AM_CONDITIONAL([XLNX_PCIE_XVC], [test "x$build_xlnx_pcie_xvc" = "xyes"])
|
||||
AM_CONDITIONAL([USE_LIBUSB1], [test "x$use_libusb1" = "xyes"])
|
||||
AM_CONDITIONAL([IS_CYGWIN], [test "x$is_cygwin" = "xyes"])
|
||||
AM_CONDITIONAL([IS_MINGW], [test "x$is_mingw" = "xyes"])
|
||||
@@ -755,12 +698,15 @@ AM_CONDITIONAL([USE_LIBFTDI], [test "x$use_libftdi" = "xyes"])
|
||||
AM_CONDITIONAL([USE_LIBGPIOD], [test "x$use_libgpiod" = "xyes"])
|
||||
AM_CONDITIONAL([USE_HIDAPI], [test "x$use_hidapi" = "xyes"])
|
||||
AM_CONDITIONAL([USE_LIBJAYLINK], [test "x$use_libjaylink" = "xyes"])
|
||||
AM_CONDITIONAL([RSHIM], [test "x$build_rshim" = "xyes"])
|
||||
AM_CONDITIONAL([HAVE_CAPSTONE], [test "x$enable_capstone" != "xno"])
|
||||
|
||||
AM_CONDITIONAL([INTERNAL_JIMTCL], [test "x$use_internal_jimtcl" = "xyes"])
|
||||
AM_CONDITIONAL([HAVE_JIMTCL_PKG_CONFIG], [test "x$have_jimtcl_pkg_config" = "xyes"])
|
||||
AM_CONDITIONAL([INTERNAL_LIBJAYLINK], [test "x$use_internal_libjaylink" = "xyes"])
|
||||
|
||||
|
||||
AM_CONDITIONAL([USE_GCOV], [test "x$enable_gcov" = "xyes"])
|
||||
|
||||
# Look for environ alternatives. Possibility #1: is environ in unistd.h or stdlib.h?
|
||||
AC_MSG_CHECKING([for environ in unistd.h and stdlib.h])
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
@@ -798,6 +744,7 @@ AC_DEFINE([_GNU_SOURCE],[1],[Use GNU C library extensions (e.g. stdndup).])
|
||||
GCC_WARNINGS="-Wall -Wstrict-prototypes -Wformat-security -Wshadow"
|
||||
AS_IF([test "x${gcc_wextra}" = "xyes"], [
|
||||
GCC_WARNINGS="${GCC_WARNINGS} -Wextra -Wno-unused-parameter"
|
||||
GCC_WARNINGS="${GCC_WARNINGS} -Wno-gnu-folding-constant"
|
||||
GCC_WARNINGS="${GCC_WARNINGS} -Wbad-function-cast"
|
||||
GCC_WARNINGS="${GCC_WARNINGS} -Wcast-align"
|
||||
GCC_WARNINGS="${GCC_WARNINGS} -Wredundant-decls"
|
||||
@@ -816,23 +763,67 @@ AS_IF([test "x$gcc_warnings" = "xyes"], [
|
||||
AC_SUBST(EXTRA_DIST_NEWS, ["$(echo $srcdir/NEWS-*)"])
|
||||
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
Makefile \
|
||||
testing/Makefile \
|
||||
testing/tcl_commands/Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
||||
AS_IF([test "x$enable_jlink" != "xno"], [
|
||||
AS_IF([test "x$use_internal_libjaylink" = "xyes"], [
|
||||
AC_MSG_WARN([Using the internal libjaylink is deprecated and will not be possible in the future.])
|
||||
]])
|
||||
)
|
||||
|
||||
AS_IF([test "x$use_internal_jimtcl" = "xyes"], [
|
||||
AC_MSG_WARN([Using the internal jimtcl is deprecated and will not be possible in the future.])
|
||||
])
|
||||
|
||||
AS_IF([test "x$enable_amtjtagaccel" != "xno"], [
|
||||
echo
|
||||
echo
|
||||
AC_MSG_WARN([Amontec JTAG-Accelerator adapter is deprecated and support will be removed in the next release!])
|
||||
])
|
||||
AS_IF([test "x$build_gw16012" = "xyes"], [
|
||||
echo
|
||||
echo
|
||||
AC_MSG_WARN([Gateworks GW16012 JTAG adapter is deprecated and support will be removed in the next release!])
|
||||
])
|
||||
|
||||
AS_IF([test "x$parport_use_giveio" = "xyes" || test [ "x$enable_parport" != "xno" -a "x$parport_use_ppdev" = "xno"]], [
|
||||
echo
|
||||
echo
|
||||
AC_MSG_WARN([Parallel port access with direct I/O is deprecated and support will be removed in the next release!])
|
||||
])
|
||||
|
||||
echo
|
||||
echo
|
||||
echo OpenOCD configuration summary
|
||||
echo --------------------------------------------------
|
||||
m4_foreach([adapter], [USB1_ADAPTERS,
|
||||
DEPRECATED_USB1_ADAPTERS,
|
||||
echo ---------------------------------------------------
|
||||
m4_foreach([adapter_driver], [USB1_ADAPTERS,
|
||||
HIDAPI_ADAPTERS, HIDAPI_USB1_ADAPTERS, LIBFTDI_ADAPTERS,
|
||||
LIBFTDI_USB1_ADAPTERS,
|
||||
LIBGPIOD_ADAPTERS,
|
||||
LIBJAYLINK_ADAPTERS, PCIE_ADAPTERS, SERIAL_PORT_ADAPTERS,
|
||||
OPTIONAL_LIBRARIES],
|
||||
[s=m4_format(["%-40s"], ADAPTER_DESC([adapter]))
|
||||
AS_CASE([$ADAPTER_VAR([adapter])],
|
||||
DMEM_ADAPTER,
|
||||
SYSFSGPIO_ADAPTER,
|
||||
REMOTE_BITBANG_ADAPTER,
|
||||
LIBJAYLINK_ADAPTERS, XVC_ADAPTERS,
|
||||
SERIAL_PORT_ADAPTERS,
|
||||
PARALLEL_PORT_ADAPTER,
|
||||
LINUXSPIDEV_ADAPTER,
|
||||
VDEBUG_ADAPTER,
|
||||
JTAG_DPI_ADAPTER,
|
||||
JTAG_VPI_ADAPTER,
|
||||
RSHIM_ADAPTER,
|
||||
AMTJTAGACCEL_ADAPTER,
|
||||
HOST_ARM_BITBANG_ADAPTERS,
|
||||
HOST_ARM_OR_AARCH64_BITBANG_ADAPTERS,
|
||||
CMSIS_DAP_TCP_ADAPTER,
|
||||
DUMMY_ADAPTER,
|
||||
OPTIONAL_LIBRARIES,
|
||||
COVERAGE],
|
||||
[s=m4_format(["%-49s"], ADAPTER_DESC([adapter_driver]))
|
||||
AS_CASE([$ADAPTER_VAR([adapter_driver])],
|
||||
[auto], [
|
||||
echo "$s"yes '(auto)'
|
||||
],
|
||||
@@ -841,6 +832,11 @@ m4_foreach([adapter], [USB1_ADAPTERS,
|
||||
],
|
||||
[no], [
|
||||
echo "$s"no
|
||||
],
|
||||
[
|
||||
AC_MSG_ERROR(m4_normalize([
|
||||
Error in [adapter_driver] "ADAPTER_ARG([adapter_driver])": Variable "ADAPTER_VAR([adapter_driver])"
|
||||
has invalid value "$ADAPTER_VAR([adapter_driver])".]))
|
||||
])
|
||||
])
|
||||
echo
|
||||
|
||||
@@ -29,6 +29,27 @@ ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", MODE="660", GROUP="plugdev",
|
||||
# Original FT231XQ VID:PID
|
||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
# Original FT2233HP VID:PID
|
||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6040", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
# Original FT4233HP VID:PID
|
||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6041", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
# Original FT2232HP VID:PID
|
||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6042", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
# Original FT4232HP VID:PID
|
||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6043", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
# Original FT233HP VID:PID
|
||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6044", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
# Original FT232HP VID:PID
|
||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6045", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
# Original FT4232HA VID:PID
|
||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6048", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
# DISTORTEC JTAG-lock-pick Tiny 2
|
||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8220", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
@@ -99,6 +120,8 @@ ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374e", MODE="660", GROUP="plugdev",
|
||||
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374f", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3753", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3754", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3755", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3757", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
# Cypress SuperSpeed Explorer Kit
|
||||
ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="0007", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
@@ -167,6 +190,10 @@ ATTRS{idVendor}=="138e", ATTRS{idProduct}=="9000", MODE="660", GROUP="plugdev",
|
||||
# Debug Board for Neo1973
|
||||
ATTRS{idVendor}=="1457", ATTRS{idProduct}=="5118", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
# Microchip RISC-V Debug
|
||||
ATTRS{idVendor}=="1514", ATTRS{idProduct}=="2008", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
ATTRS{idVendor}=="1514", ATTRS{idProduct}=="200a", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
# OSBDM
|
||||
ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0042", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
ATTRS{idVendor}=="15a2", ATTRS{idProduct}=="0058", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
@@ -193,6 +220,11 @@ ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="06ad", MODE="660", GROUP="plugdev",
|
||||
# USBprog with OpenOCD firmware
|
||||
ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c63", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
# WCH CH347T chip in mode 3
|
||||
ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55dd", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
# WCH CH347F chip
|
||||
ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55de", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
# TI/Luminary Stellaris In-Circuit Debug Interface (ICDI) Board
|
||||
ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="00fd", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
@@ -222,6 +254,11 @@ ATTRS{idVendor}=="2aec", ATTRS{idProduct}=="1106", MODE="660", GROUP="plugdev",
|
||||
ATTRS{idVendor}=="303a", ATTRS{idProduct}=="1001", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
ATTRS{idVendor}=="303a", ATTRS{idProduct}=="1002", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
# ANGIE USB-JTAG Adapter
|
||||
ATTRS{idVendor}=="584e", ATTRS{idProduct}=="414f", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
ATTRS{idVendor}=="584e", ATTRS{idProduct}=="424e", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
ATTRS{idVendor}=="584e", ATTRS{idProduct}=="4a55", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
# Marvell Sheevaplug
|
||||
ATTRS{idVendor}=="9e88", ATTRS{idProduct}=="9e8f", MODE="660", GROUP="plugdev", TAG+="uaccess"
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ BR2_PACKAGE_OPENOCD_UBLASTER2=y
|
||||
BR2_PACKAGE_OPENOCD_JLINK=y
|
||||
BR2_PACKAGE_OPENOCD_OSDBM=y
|
||||
BR2_PACKAGE_OPENOCD_OPENDOUS=y
|
||||
BR2_PACKAGE_OPENOCD_AICE=y
|
||||
BR2_PACKAGE_OPENOCD_VSLLINK=y
|
||||
BR2_PACKAGE_OPENOCD_USBPROG=y
|
||||
BR2_PACKAGE_OPENOCD_RLINK=y
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
+OpenOCD and CoreSight Tracing
|
||||
+
|
||||
Many recent ARM chips (Using e..g. Cortex-M3 and
|
||||
Cortex-M4 cores) support CoreSight debug/trace.
|
||||
This note sketches an approach currently planned for those cores
|
||||
with OpenOCD.
|
||||
|
||||
This tracing data can help debug and tune ARM software, but not
|
||||
all cores support tracing. Some support more extensive tracing
|
||||
other cores with trace support +should be able to use the same
|
||||
approach and maybe some of the same analysis code.
|
||||
|
||||
+the Cortex-M3 is assumed here to be the
|
||||
+core in use, for simplicity and to reflect current OpenOCD users.
|
||||
|
||||
|
||||
This note summarizes a software model to generate, collect, and
|
||||
analyze such trace data . That is not fully implemented as of early
|
||||
January 2011, +and thus is not *yet* usable.
|
||||
+
|
||||
+
|
||||
+Some microcontroller cores support a low pin-count Single-wire trace,
|
||||
with a mode where +trace data is emitted (usually to a UART. To use
|
||||
this mode, +SWD must be in use.
|
||||
+At this writing, OpenOCD SWD support is not yet complete either.
|
||||
|
||||
(There are also multi-wire trace ports requiring more complex debug
|
||||
adapters than OpenOCD currently supports, and offering richer data.
|
||||
+
|
||||
+
|
||||
+* ENABLING involves activating SWD and (single wire) trace.
|
||||
+
|
||||
+current expectations are that OpenOCD itself will handle enabling;
|
||||
activating single wire trace involves a debug adapter interaction, and
|
||||
collecting that trace data requires particular (re)wiring.
|
||||
+
|
||||
+* CONFIGURATION involves setting up ITM and/or ETM modules to emit the
|
||||
+desired data from the Cortex core. (This might include dumping
|
||||
+event counters printf-style messages; code profiling; and more. Not all
|
||||
+cores offer the same trace capabilities.
|
||||
+
|
||||
+current expectations are that Tcl scripts will be used to configure these
|
||||
+modules for the desired tracing, by direct writes to registers. In some
|
||||
+cases (as with RTOS event tracking and similar messaging, this might
|
||||
+be augmented or replaced by user code running on the ARM core.
|
||||
+
|
||||
+COLLECTION involves reading that trace data, probably through UART, and
|
||||
+saving it in a useful format to analyse For now, deferred analysis modes
|
||||
are assumed, not than real-time or interactive ones.
|
||||
+
|
||||
+
|
||||
+current expectations are to to dump data in text using contrib/itmdump.c
|
||||
+or derived tools, and to post-process it into reports. Such reports might
|
||||
+include program messaging (such as application data streams via ITM, maybe
|
||||
+using printf type messaging; code coverage analysis or so forth. Recent
|
||||
+versions of CMSIS software reserve some ITM codespace for RTOS event
|
||||
tracing and include ITM messaging support.
|
||||
Clearly some of that data would be valuable for interactive debugging.
|
||||
+
|
||||
+Should someone get ambitious, GUI reports should be possible. GNU tools
|
||||
+for simpler reports like gprof may be simpler to support at first.
|
||||
+In any case, OpenOCD is not currently GUI-oriented. Accordingly, we now
|
||||
+expect any such graphics to come from postprocessing.
|
||||
|
||||
measurements for RTOS event timings should also be easy to collect.
|
||||
+Examples include context and message switch times, as well as times
|
||||
for application interactions.
|
||||
+
|
||||
@@ -41,12 +41,16 @@ WORK_DIR=$PWD
|
||||
: ${HIDAPI_SRC:=/path/to/hidapi}
|
||||
: ${LIBFTDI_SRC:=/path/to/libftdi}
|
||||
: ${CAPSTONE_SRC:=/path/to/capstone}
|
||||
: ${LIBJAYLINK_SRC:=/path/to/libjaylink}
|
||||
: ${JIMTCL_SRC:=/path/to/jimtcl}
|
||||
|
||||
OPENOCD_SRC=`readlink -m $OPENOCD_SRC`
|
||||
LIBUSB1_SRC=`readlink -m $LIBUSB1_SRC`
|
||||
HIDAPI_SRC=`readlink -m $HIDAPI_SRC`
|
||||
LIBFTDI_SRC=`readlink -m $LIBFTDI_SRC`
|
||||
CAPSTONE_SRC=`readlink -m $CAPSTONE_SRC`
|
||||
LIBJAYLINK_SRC=`readlink -m $LIBJAYLINK_SRC`
|
||||
JIMTCL_SRC=`readlink -m $JIMTCL_SRC`
|
||||
|
||||
HOST_TRIPLET=$1
|
||||
BUILD_DIR=$WORK_DIR/$HOST_TRIPLET-build
|
||||
@@ -54,6 +58,8 @@ LIBUSB1_BUILD_DIR=$BUILD_DIR/libusb1
|
||||
HIDAPI_BUILD_DIR=$BUILD_DIR/hidapi
|
||||
LIBFTDI_BUILD_DIR=$BUILD_DIR/libftdi
|
||||
CAPSTONE_BUILD_DIR=$BUILD_DIR/capstone
|
||||
LIBJAYLINK_BUILD_DIR=$BUILD_DIR/libjaylink
|
||||
JIMTCL_BUILD_DIR=$BUILD_DIR/jimtcl
|
||||
OPENOCD_BUILD_DIR=$BUILD_DIR/openocd
|
||||
|
||||
## Root of host file tree
|
||||
@@ -158,6 +164,28 @@ libdir=${exec_prefix}/lib \
|
||||
includedir=${prefix}/include/capstone\n\n;' $CAPSTONE_PC_FILE
|
||||
fi
|
||||
|
||||
# libjaylink build & install into sysroot
|
||||
if [ -d $LIBJAYLINK_SRC ] ; then
|
||||
mkdir -p $LIBJAYLINK_BUILD_DIR
|
||||
cd $LIBJAYLINK_BUILD_DIR
|
||||
$LIBJAYLINK_SRC/configure --build=`$LIBJAYLINK_SRC/config.guess` --host=$HOST_TRIPLET \
|
||||
--with-sysroot=$SYSROOT --prefix=$PREFIX \
|
||||
$LIBJAYLINK_CONFIG
|
||||
make -j $MAKE_JOBS
|
||||
make install DESTDIR=$SYSROOT
|
||||
fi
|
||||
|
||||
# jimtcl build & install into sysroot
|
||||
if [ -d $JIMTCL_SRC ] ; then
|
||||
mkdir -p $JIMTCL_BUILD_DIR
|
||||
cd $JIMTCL_BUILD_DIR
|
||||
$JIMTCL_SRC/configure --host=$HOST_TRIPLET --prefix=$PREFIX \
|
||||
$JIMTCL_CONFIG
|
||||
make -j $MAKE_JOBS
|
||||
# Running "make" does not create this file for static builds on Windows but "make install" still expects it
|
||||
touch $JIMTCL_BUILD_DIR/build-jim-ext
|
||||
make install DESTDIR=$SYSROOT
|
||||
fi
|
||||
|
||||
# OpenOCD build & install into sysroot
|
||||
mkdir -p $OPENOCD_BUILD_DIR
|
||||
|
||||
77
contrib/firmware/angie/c/Makefile
Normal file
77
contrib/firmware/angie/c/Makefile
Normal file
@@ -0,0 +1,77 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#****************************************************************************
|
||||
# File : Makefile *
|
||||
# Contents : Code for NanoXplore USB-JTAG ANGIE adapter hardware. *
|
||||
# Based on openULINK project by: Martin Schmoelzer. *
|
||||
# Copyright 2023, Ahmed Errached BOUDJELIDA, NanoXplore SAS. *
|
||||
# <aboudjelida@nanoxplore.com> *
|
||||
# <ahmederrachedbjld@gmail.com> *
|
||||
# ***************************************************************************/
|
||||
|
||||
# Define the name of tools.
|
||||
PREFIX =
|
||||
|
||||
# Small Device C Compiler: http://sdcc.sourceforge.net/
|
||||
CC = $(PREFIX)sdcc
|
||||
|
||||
# 8051 assembler, part of the SDCC software package.
|
||||
AS = $(PREFIX)sdas8051
|
||||
|
||||
# SDCC produces quite messy Intel HEX files. This tool is be used to re-format
|
||||
# those files. It is not required for the firmware download functionality in
|
||||
# the OpenOCD driver, but the resulting file is smaller.
|
||||
PACKIHX = $(PREFIX)packihx
|
||||
|
||||
# GNU binutils size. Used to print the size of the IHX file generated by SDCC.
|
||||
SIZE = size
|
||||
|
||||
# Source and header directories.
|
||||
SRC_DIR = src
|
||||
INCLUDE_DIR = include
|
||||
|
||||
CODE_SIZE = 0x3C00
|
||||
XRAM_LOC = 0x3C00
|
||||
XRAM_SIZE = 0x0400
|
||||
|
||||
CFLAGS = --std-sdcc99 --opt-code-size --model-small
|
||||
LDFLAGS = --code-loc 0x0000 --code-size $(CODE_SIZE) --xram-loc $(XRAM_LOC) \
|
||||
--xram-size $(XRAM_SIZE) --iram-size 256 --model-small
|
||||
|
||||
# list of base object files
|
||||
OBJECTS = main.rel usb.rel delay.rel USBJmpTb.rel gpif.rel i2c.rel serial.rel
|
||||
HEADERS = $(INCLUDE_DIR)/usb.h \
|
||||
$(INCLUDE_DIR)/delay.h \
|
||||
$(INCLUDE_DIR)/reg_ezusb.h \
|
||||
$(INCLUDE_DIR)/io.h \
|
||||
$(INCLUDE_DIR)/serial.h \
|
||||
$(INCLUDE_DIR)/fx2macros.h \
|
||||
$(INCLUDE_DIR)/msgtypes.h \
|
||||
$(INCLUDE_DIR)/i2c.h
|
||||
|
||||
# Disable all built-in rules.
|
||||
.SUFFIXES:
|
||||
|
||||
# Targets which are executed even when identically named file is present.
|
||||
.PHONY: all, clean
|
||||
|
||||
all: angie_firmware.ihx
|
||||
$(SIZE) angie_firmware.ihx
|
||||
|
||||
angie_firmware.ihx: $(OBJECTS)
|
||||
$(CC) -mmcs51 $(LDFLAGS) -o $@ $^
|
||||
|
||||
# Rebuild every C module (there are only 8 of them) if any header changes.
|
||||
%.rel: $(SRC_DIR)/%.c $(HEADERS)
|
||||
$(CC) -c $(CFLAGS) -mmcs51 -I$(INCLUDE_DIR) -o $@ $<
|
||||
|
||||
%.rel: $(SRC_DIR)/%.a51
|
||||
$(AS) -lsgo $@ $<
|
||||
|
||||
clean:
|
||||
rm -f *.asm *.lst *.rel *.rst *.sym *.ihx *.lk *.map *.mem
|
||||
|
||||
bin: angie_firmware.ihx
|
||||
makebin -p angie_firmware.ihx angie_firmware.bin
|
||||
|
||||
hex: angie_firmware.ihx
|
||||
$(PACKIHX) angie_firmware.ihx > fx2.hex
|
||||
37
contrib/firmware/angie/c/README
Normal file
37
contrib/firmware/angie/c/README
Normal file
@@ -0,0 +1,37 @@
|
||||
#SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
This is the ANGIE firmware for ANGIE USB-JTAG adapter.
|
||||
|
||||
The main components of ANGIE adapter are:
|
||||
- Cypress EZ-USB FX2 microcontroller
|
||||
- Spartan-6 FPGA
|
||||
- SRAM memory chip
|
||||
- Pin headers for various JTAG pin assignments
|
||||
|
||||
To compile the firmware, the SDCC compiler package is required. Most Linux
|
||||
distributions include SDCC in their official package repositories. The SDCC
|
||||
source code can be found at http://sdcc.sourceforge.net/
|
||||
|
||||
Simply type "make bin" in the ANGIE directory to compile the firmware.
|
||||
"make clean" will remove all generated files except the BIN file
|
||||
required for downloading the firmware to ANGIE.
|
||||
|
||||
Note that the EZ-USB FX2 microcontroller does not have on-chip flash,
|
||||
ANGIE include on-board EEPROM memory to store the firmware program of
|
||||
the FX2, but we are not going to use this method.
|
||||
|
||||
Instead, upon initial connection of the ANGIE adapter to the host PC
|
||||
via USB, the EZ-USB FX2 core has enough intelligence to act as a
|
||||
stand-alone USB device, responding to USB control requests and allowing
|
||||
firmware download via a special VENDOR-type control request. Then, the
|
||||
EZ-USB microcontroller simulates a disconnect and re-connect to the USB bus.
|
||||
It may take up to two seconds for the host to recognize the newly connected
|
||||
device before OpenOCD can proceed to execute JTAG commands. This delay is
|
||||
only visible when OpenOCD first uses a blank (unconfigured) ANGIE device.
|
||||
|
||||
Once the firmware downloaded, the FX2 microcontroller activate its GPIF mode,
|
||||
download the Spartan-6 FPGA's bitstream, program the FPGA rapidly, and switch
|
||||
back to default io mode.
|
||||
|
||||
Once the user disconnects the ANGIE adapter, all its memory contents are lost
|
||||
and the firmware & bitstream download process has to be executed again.
|
||||
50
contrib/firmware/angie/c/include/delay.h
Normal file
50
contrib/firmware/angie/c/include/delay.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/****************************************************************
|
||||
File : delay.h *
|
||||
Contents : Delays handling header file for NanoXplore *
|
||||
USB-JTAG ANGIE adapter hardware. *
|
||||
Based on openULINK project code by: Martin Schmoelzer. *
|
||||
Copyright 2023, Ahmed Errached BOUDJELIDA, NanoXplore SAS. *
|
||||
<aboudjelida@nanoxplore.com> *
|
||||
<ahmederrachedbjld@gmail.com> *
|
||||
*****************************************************************/
|
||||
|
||||
#ifndef __DELAY_H
|
||||
#define __DELAY_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void syncdelay(uint8_t count);
|
||||
void delay_5us(void);
|
||||
void delay_1ms(void);
|
||||
void delay_us(uint16_t delay);
|
||||
void delay_ms(uint16_t delay);
|
||||
|
||||
#ifndef _IFREQ
|
||||
#define _IFREQ 48000 /* IFCLK frequency in kHz */
|
||||
#endif
|
||||
|
||||
/* CFREQ can be any one of: 48000, 24000, or 12000 */
|
||||
#ifndef _CFREQ
|
||||
#define _CFREQ 48000 /* CLKOUT frequency in kHz */
|
||||
#endif
|
||||
|
||||
#if (_IFREQ < 5000)
|
||||
#error "_IFREQ too small! Valid Range: 5000 to 48000..."
|
||||
#endif
|
||||
|
||||
#if (_IFREQ > 48000)
|
||||
#error "_IFREQ too large! Valid Range: 5000 to 48000..."
|
||||
#endif
|
||||
|
||||
#if (_CFREQ != 48000)
|
||||
#if (_CFREQ != 24000)
|
||||
#if (_CFREQ != 12000)
|
||||
#error "_CFREQ invalid! Valid values: 48000, 24000, 12000..."
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Synchronization Delay formula: see TRM section 15-14 */
|
||||
#define _SCYCL (3 * (_CFREQ) + 5 * (_IFREQ) - 1) / (2 * (_IFREQ))
|
||||
#endif
|
||||
31
contrib/firmware/angie/c/include/fx2macros.h
Normal file
31
contrib/firmware/angie/c/include/fx2macros.h
Normal file
@@ -0,0 +1,31 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
/*
|
||||
* This code was taken from the fx2lib project from this link:
|
||||
* https://github.com/djmuhlestein/fx2lib
|
||||
*
|
||||
* Copyright (C) 2009 Ubixum, Inc.
|
||||
*/
|
||||
|
||||
/*! \file
|
||||
* Macros for simple common tasks in fx2 firmware.
|
||||
* */
|
||||
|
||||
#ifndef FX2MACROS_H
|
||||
#define FX2MACROS_H
|
||||
|
||||
#include "reg_ezusb.h"
|
||||
|
||||
typedef enum {FALSE = 0, TRUE} BOOL_VALS;
|
||||
|
||||
/**
|
||||
* \brief Used for getting and setting the CPU clock speed.
|
||||
**/
|
||||
typedef enum {CLK_12M = 0, CLK_24M, CLK_48M} CLK_SPD;
|
||||
|
||||
/**
|
||||
* \brief Evaluates to a CLK_SPD enum.
|
||||
**/
|
||||
#define CPUFREQ (CLK_SPD)((CPUCS & bmclkspd) >> 3)
|
||||
|
||||
#endif
|
||||
30
contrib/firmware/angie/c/include/i2c.h
Normal file
30
contrib/firmware/angie/c/include/i2c.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/****************************************************************************
|
||||
File : i2c.h *
|
||||
Contents : i2c bit-bang library *
|
||||
Copyright 2023, Ahmed Errached BOUDJELIDA, NanoXplore SAS. *
|
||||
<aboudjelida@nanoxplore.com> *
|
||||
<ahmederrachedbjld@gmail.com> *
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __I2C_H
|
||||
#define __I2C_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
bool get_status(void);
|
||||
void start_cd(void);
|
||||
void repeated_start(void);
|
||||
void stop_cd(void);
|
||||
void clock_cd(void);
|
||||
void send_ack(void);
|
||||
void send_nack(void);
|
||||
bool get_ack(void);
|
||||
|
||||
uint8_t get_address(uint8_t adr, uint8_t rdwr);
|
||||
|
||||
void send_byte(uint8_t input);
|
||||
uint8_t receive_byte(void);
|
||||
#endif
|
||||
57
contrib/firmware/angie/c/include/io.h
Normal file
57
contrib/firmware/angie/c/include/io.h
Normal file
@@ -0,0 +1,57 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/****************************************************************************
|
||||
File : io.h *
|
||||
Contents : input/output declaration header file for NanoXplore *
|
||||
USB-JTAG ANGIE adapter hardware. *
|
||||
Based on openULINK project code by: Martin Schmoelzer. *
|
||||
Copyright 2023, Ahmed Errached BOUDJELIDA, NanoXplore SAS. *
|
||||
<aboudjelida@nanoxplore.com> *
|
||||
<ahmederrachedbjld@gmail.com> *
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __IO_H
|
||||
#define __IO_H
|
||||
|
||||
#include "reg_ezusb.h"
|
||||
|
||||
/* PORT A */
|
||||
#define PIN_SDA_DIR IOA0
|
||||
/* PA1 Not Connected */
|
||||
#define PIN_RDWR_B IOA2
|
||||
#define PIN_SDA IOA3
|
||||
#define PIN_SCL IOA4
|
||||
#define PIN_PROGRAM_B IOA5
|
||||
/* PA6 Not Connected */
|
||||
/* PA7 Not Connected */
|
||||
|
||||
/* PORT B */
|
||||
/* PB0 Not Connected */
|
||||
/* PB1 Not Connected */
|
||||
/* PB2 Not Connected */
|
||||
/* PB3 Not Connected */
|
||||
/* PB4 Not Connected */
|
||||
/* PB5 Not Connected */
|
||||
/* PB6 Not Connected */
|
||||
/* PB7 Not Connected */
|
||||
|
||||
/* PORT C */
|
||||
#define PIN_T0 IOC0
|
||||
#define PIN_T1 IOC1
|
||||
#define PIN_T2 IOC2
|
||||
#define PIN_T3 IOC3
|
||||
#define PIN_T4 IOC4
|
||||
/* PC5 Not Connected */
|
||||
/* PC6 Not Connected */
|
||||
/* PC7 Not Connected */
|
||||
|
||||
/* PORT D */
|
||||
/* PD0 Not Connected */
|
||||
/* PD1 Not Connected */
|
||||
/* PD2 Not Connected */
|
||||
/* PD3 Not Connected */
|
||||
/* PD4 Not Connected */
|
||||
/* PD5 Not Connected */
|
||||
/* PD6 Not Connected */
|
||||
/* PD7 Not Connected */
|
||||
|
||||
#endif
|
||||
171
contrib/firmware/angie/c/include/msgtypes.h
Normal file
171
contrib/firmware/angie/c/include/msgtypes.h
Normal file
@@ -0,0 +1,171 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/****************************************************************************
|
||||
File : msgtypes.h *
|
||||
Contents : Definition of the commands supported by NanoXplore *
|
||||
USB-JTAG ANGIE adapter hardware. *
|
||||
Based on openULINK project code by: Martin Schmoelzer. *
|
||||
Copyright 2023, Ahmed Errached BOUDJELIDA, NanoXplore SAS. *
|
||||
<aboudjelida@nanoxplore.com> *
|
||||
<ahmederrachedbjld@gmail.com> *
|
||||
*****************************************************************************/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Definition of the commands supported by the ANGIE firmware.
|
||||
*
|
||||
* Basically, two types of commands can be distinguished:
|
||||
* - Commands with fixed payload size
|
||||
* - Commands with variable payload size
|
||||
*
|
||||
* SCAN commands (in all variations) carry payloads of variable size, all
|
||||
* other commands carry payloads of fixed size.
|
||||
*
|
||||
* In the case of SCAN commands, the payload size (n) is calculated by
|
||||
* dividing the scan_size_bits variable by 8, rounding up the result.
|
||||
*
|
||||
* Offset zero always contains the command ID.
|
||||
*
|
||||
****************************************************************************
|
||||
* CMD_SCAN_IN, CMD_SLOW_SCAN_IN: *
|
||||
* *
|
||||
* OUT: *
|
||||
* offset 1: scan_size_bytes *
|
||||
* offset 2: bits_last_byte *
|
||||
* offset 3: tms_count_start + tms_count_end *
|
||||
* offset 4: tms_sequence_start *
|
||||
* offset 5: tms_sequence_end *
|
||||
* *
|
||||
* IN: *
|
||||
* offset 0..n: TDO data *
|
||||
****************************************************************************
|
||||
* CMD_SCAN_OUT, CMD_SLOW_SCAN_OUT: *
|
||||
* *
|
||||
* OUT: *
|
||||
* offset 1: scan_size_bytes *
|
||||
* offset 2: bits_last_byte *
|
||||
* offset 3: tms_count_start + tms_count_end *
|
||||
* offset 4: tms_sequence_start *
|
||||
* offset 5: tms_sequence_end *
|
||||
* offset 6..x: TDI data *
|
||||
****************************************************************************
|
||||
* CMD_SCAN_IO, CMD_SLOW_SCAN_IO: *
|
||||
* *
|
||||
* OUT: *
|
||||
* offset 1: scan_size_bytes *
|
||||
* offset 2: bits_last_byte *
|
||||
* offset 3: tms_count_start + tms_count_end *
|
||||
* offset 4: tms_sequence_start *
|
||||
* offset 5: tms_sequence_end *
|
||||
* offset 6..x: TDI data *
|
||||
* *
|
||||
* IN: *
|
||||
* offset 0..n: TDO data *
|
||||
****************************************************************************
|
||||
* CMD_CLOCK_TMS, CMD_SLOW_CLOCK_TMS: *
|
||||
* *
|
||||
* OUT: *
|
||||
* offset 1: tms_count *
|
||||
* offset 2: tms_sequence *
|
||||
****************************************************************************
|
||||
* CMD_CLOCK_TCK, CMD_SLOW_CLOCK_TCK: *
|
||||
* *
|
||||
* OUT: *
|
||||
* offset 1: low byte of tck_count *
|
||||
* offset 2: high byte of tck_count *
|
||||
****************************************************************************
|
||||
* CMD_CLOCK_SLEEP_US: *
|
||||
* *
|
||||
* OUT: *
|
||||
* offset 1: low byte of sleep_us *
|
||||
* offset 2: high byte of sleep_us *
|
||||
****************************************************************************
|
||||
* CMD_CLOCK_SLEEP_MS: *
|
||||
* *
|
||||
* OUT: *
|
||||
* offset 1: low byte of sleep_ms *
|
||||
* offset 2: high byte of sleep_ms *
|
||||
****************************************************************************
|
||||
* CMD_GET_SIGNALS: *
|
||||
* *
|
||||
* IN: *
|
||||
* offset 0: current state of input signals *
|
||||
* offset 1: current state of output signals *
|
||||
****************************************************************************
|
||||
* CMD_SET_SIGNALS: *
|
||||
* *
|
||||
* OUT: *
|
||||
* offset 1: signals that should be de-asserted *
|
||||
* offset 2: signals that should be asserted *
|
||||
****************************************************************************
|
||||
* CMD_CONFIGURE_TCK_FREQ: *
|
||||
* *
|
||||
* OUT: *
|
||||
* offset 1: delay value for scan_in function *
|
||||
* offset 2: delay value for scan_out function *
|
||||
* offset 3: delay value for scan_io function *
|
||||
* offset 4: delay value for clock_tck function *
|
||||
* offset 5: delay value for clock_tms function *
|
||||
****************************************************************************
|
||||
* CMD_SET_LEDS: *
|
||||
* *
|
||||
* OUT: *
|
||||
* offset 1: LED states: *
|
||||
* Bit 0: turn COM LED on *
|
||||
* Bit 1: turn RUN LED on *
|
||||
* Bit 2: turn COM LED off *
|
||||
* Bit 3: turn RUN LED off *
|
||||
* Bits 7..4: Reserved *
|
||||
****************************************************************************
|
||||
* CMD_TEST: *
|
||||
* *
|
||||
* OUT: *
|
||||
* offset 1: unused dummy value *
|
||||
****************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef __MSGTYPES_H
|
||||
#define __MSGTYPES_H
|
||||
|
||||
/*
|
||||
* Command IDs:
|
||||
*
|
||||
* Bits 7..6: Reserved, should always be zero
|
||||
* Bits 5..0: Command ID. There are 62 usable IDs. Of this 63 available IDs,
|
||||
* the IDs 0x00..0x1F are commands with variable payload size,
|
||||
* the IDs 0x20..0x3F are commands with fixed payload size.
|
||||
*/
|
||||
|
||||
#define CMD_ID_MASK 0x3F
|
||||
|
||||
/* Commands with variable payload size */
|
||||
#define CMD_SCAN_IN 0x00
|
||||
#define CMD_SLOW_SCAN_IN 0x01
|
||||
#define CMD_SCAN_OUT 0x02
|
||||
#define CMD_SLOW_SCAN_OUT 0x03
|
||||
#define CMD_SCAN_IO 0x04
|
||||
#define CMD_SLOW_SCAN_IO 0x05
|
||||
|
||||
/* Commands with fixed payload size */
|
||||
#define CMD_CLOCK_TMS 0x20
|
||||
#define CMD_SLOW_CLOCK_TMS 0x21
|
||||
#define CMD_CLOCK_TCK 0x22
|
||||
#define CMD_SLOW_CLOCK_TCK 0x23
|
||||
#define CMD_SLEEP_US 0x24
|
||||
#define CMD_SLEEP_MS 0x25
|
||||
#define CMD_GET_SIGNALS 0x26
|
||||
#define CMD_SET_SIGNALS 0x27
|
||||
#define CMD_CONFIGURE_TCK_FREQ 0x28
|
||||
#define CMD_SET_LEDS 0x29
|
||||
#define CMD_TEST 0x2A
|
||||
|
||||
/* JTAG signal definition for jtag_get_signals() -- Input signals! */
|
||||
#define SIGNAL_TDO 1
|
||||
|
||||
/* JTAG signal definition for jtag_get_signals() -- Output signals! */
|
||||
#define SIGNAL_TDI 8
|
||||
#define SIGNAL_TMS 2
|
||||
#define SIGNAL_TCK 4
|
||||
#define SIGNAL_TRST 1
|
||||
#define SIGNAL_SRST 32
|
||||
|
||||
#endif
|
||||
656
contrib/firmware/angie/c/include/reg_ezusb.h
Normal file
656
contrib/firmware/angie/c/include/reg_ezusb.h
Normal file
@@ -0,0 +1,656 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/****************************************************************************
|
||||
File : reg_ezusb.h *
|
||||
Contents : FX2 microcontroller registers file for NanoXplore *
|
||||
USB-JTAG ANGIE adapter hardware. *
|
||||
Based on openULINK project code by: Martin Schmoelzer. *
|
||||
Copyright 2023, Ahmed Errached BOUDJELIDA, NanoXplore SAS. *
|
||||
<aboudjelida@nanoxplore.com> *
|
||||
<ahmederrachedbjld@gmail.com> *
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef REG_EZUSB_H
|
||||
#define REG_EZUSB_H
|
||||
|
||||
/**
|
||||
* @file
|
||||
* All information in this file was taken from the EZ-USB FX2 Technical
|
||||
* Reference Manual, Cypress Semiconductor, 3901 North First Street
|
||||
* San Jose, CA 95134 (www.cypress.com).
|
||||
*
|
||||
* The EZ-USB Technical Reference Manual is called "EZ-USB FX2 TRM" hereafter.
|
||||
*/
|
||||
|
||||
/* Compiler-specific definitions of SBIT, SFR, SFRX, ... macros */
|
||||
#include <mcs51/compiler.h>
|
||||
|
||||
/* Bit vectors */
|
||||
#define bmbit0 0x01
|
||||
#define bmbit1 0x02
|
||||
#define bmbit2 0x04
|
||||
#define bmbit3 0x08
|
||||
#define bmbit4 0x10
|
||||
#define bmbit5 0x20
|
||||
#define bmbit6 0x40
|
||||
#define bmbit7 0x80
|
||||
|
||||
/**************************************************************************
|
||||
************************ Special Function Registers **********************
|
||||
***************************************************************************/
|
||||
SFR(IOA, 0x80);
|
||||
SBIT(IOA0, 0x80, 0);
|
||||
SBIT(IOA1, 0x80, 1);
|
||||
SBIT(IOA2, 0x80, 2);
|
||||
SBIT(IOA3, 0x80, 3);
|
||||
SBIT(IOA4, 0x80, 4);
|
||||
SBIT(IOA5, 0x80, 5);
|
||||
SBIT(IOA6, 0x80, 6);
|
||||
SBIT(IOA7, 0x80, 7);
|
||||
|
||||
SFR(SP, 0x81);
|
||||
SFR(DPL0, 0x82);
|
||||
SFR(DPH0, 0x83);
|
||||
SFR(DPL1, 0x84);
|
||||
SFR(DPL2, 0x85);
|
||||
|
||||
SFR(DPS, 0x86);
|
||||
#define SEL bmbit0
|
||||
/* Bit 1 read-only, always reads '0' */
|
||||
/* Bit 2 read-only, always reads '0' */
|
||||
/* Bit 3 read-only, always reads '0' */
|
||||
/* Bit 4 read-only, always reads '0' */
|
||||
/* Bit 5 read-only, always reads '0' */
|
||||
/* Bit 6 read-only, always reads '0' */
|
||||
/* Bit 7 read-only, always reads '0' */
|
||||
|
||||
SFR(PCON, 0x87);
|
||||
#define IDLE bmbit0
|
||||
#define STOP bmbit1
|
||||
#define GF0 bmbit2
|
||||
#define GF1 bmbit3
|
||||
/* Bit 4 read-only, always reads '1' */
|
||||
/* Bit 5 read-only, always reads '1' */
|
||||
/* Bit 6 unused */
|
||||
#define SMOD0 bmbit7
|
||||
|
||||
SFR(TCON, 0x88);
|
||||
SBIT(IT0, 0x88, 0);
|
||||
SBIT(IE0, 0x88, 1);
|
||||
SBIT(IT1, 0x88, 2);
|
||||
SBIT(IE1, 0x88, 3);
|
||||
SBIT(TR0, 0x88, 4);
|
||||
SBIT(TF0, 0x88, 5);
|
||||
SBIT(TR1, 0x88, 6);
|
||||
SBIT(TF1, 0x88, 7);
|
||||
|
||||
SFR(TMOD, 0x89);
|
||||
SFR(TL0, 0x8A);
|
||||
SFR(TL1, 0x8B);
|
||||
SFR(TH0, 0x8C);
|
||||
SFR(TH1, 0x8D);
|
||||
|
||||
SFR(CKCON, 0x8E);
|
||||
#define MD0 bmbit0
|
||||
#define MD1 bmbit1
|
||||
#define MD2 bmbit2
|
||||
#define T0M bmbit3
|
||||
#define T1M bmbit4
|
||||
#define T2M bmbit5
|
||||
/* Bit 6 unused */
|
||||
/* Bit 7 unused */
|
||||
|
||||
SFR(SPC_FNC, 0x8F);
|
||||
#define BMWRS bmbit0
|
||||
/* Bit 1 read-only, always reads '0' */
|
||||
/* Bit 2 read-only, always reads '0' */
|
||||
/* Bit 3 read-only, always reads '0' */
|
||||
/* Bit 4 read-only, always reads '0' */
|
||||
/* Bit 5 read-only, always reads '0' */
|
||||
/* Bit 6 read-only, always reads '0' */
|
||||
/* Bit 7 read-only, always reads '0' */
|
||||
|
||||
SFR(IOB, 0x90);
|
||||
SBIT(IOB0, 0x90, 0);
|
||||
SBIT(IOB1, 0x90, 1);
|
||||
SBIT(IOB2, 0x90, 2);
|
||||
SBIT(IOB3, 0x90, 3);
|
||||
SBIT(IOB4, 0x90, 4);
|
||||
SBIT(IOB5, 0x90, 5);
|
||||
SBIT(IOB6, 0x90, 6);
|
||||
SBIT(IOB7, 0x90, 7);
|
||||
|
||||
SFR(EXIF, 0x91);
|
||||
SBIT(USBINT, 0x91, 4);
|
||||
SBIT(I2CINT, 0x91, 5);
|
||||
SBIT(IE4, 0x91, 6);
|
||||
SBIT(IE5, 0x91, 7);
|
||||
|
||||
SFR(MPAGE, 0x92);
|
||||
SFR(SCON0, 0x98);
|
||||
SBIT(RI, 0x98, 0);
|
||||
SBIT(TI, 0x98, 1);
|
||||
SBIT(RB8, 0x98, 2);
|
||||
SBIT(TB8, 0x98, 3);
|
||||
SBIT(REN, 0x98, 4);
|
||||
SBIT(SM2, 0x98, 5);
|
||||
SBIT(SM1, 0x98, 6);
|
||||
SBIT(SM0, 0x98, 7);
|
||||
|
||||
SFR(SBUF0, 0x99);
|
||||
SFR(AUTOPTRH1, 0x9A);
|
||||
SFR(AUTOPTRL1, 0x9B);
|
||||
SFR(AUTOPTRH2, 0x9D);
|
||||
SFR(AUTOPTRL2, 0x9E);
|
||||
|
||||
#define AUTOPTR1H AUTOPTRH1 /* for backwards compatibility with examples */
|
||||
#define AUTOPTR1L AUTOPTRL1 /* for backwards compatibility with examples */
|
||||
#define APTR1H AUTOPTRH1 /* for backwards compatibility with examples */
|
||||
#define APTR1L AUTOPTRL1 /* for backwards compatibility with examples */
|
||||
|
||||
SFR(IOC, 0xA0);
|
||||
SBIT(IOC0, 0xA0, 0);
|
||||
SBIT(IOC1, 0xA0, 1);
|
||||
SBIT(IOC2, 0xA0, 2);
|
||||
SBIT(IOC3, 0xA0, 3);
|
||||
SBIT(IOC4, 0xA0, 4);
|
||||
SBIT(IOC5, 0xA0, 5);
|
||||
SBIT(IOC6, 0xA0, 6);
|
||||
SBIT(IOC7, 0xA0, 7);
|
||||
|
||||
SFR(INT2CLR, 0xA1);
|
||||
SFR(INT4CLR, 0xA2);
|
||||
SFR(IE, 0xA8);
|
||||
SBIT(EX0, 0xA8, 0);
|
||||
SBIT(ET0, 0xA8, 1);
|
||||
SBIT(EX1, 0xA8, 2);
|
||||
SBIT(ET1, 0xA8, 3);
|
||||
SBIT(ES0, 0xA8, 4);
|
||||
SBIT(ET2, 0xA8, 5);
|
||||
SBIT(ES1, 0xA8, 6);
|
||||
SBIT(EA, 0xA8, 7);
|
||||
|
||||
SFR(EP2468STAT, 0xAA);
|
||||
#define EP8F bmbit7
|
||||
#define EP8E bmbit6
|
||||
#define EP6F bmbit5
|
||||
#define EP6E bmbit4
|
||||
#define EP4F bmbit3
|
||||
#define EP4E bmbit2
|
||||
#define EP2F bmbit1
|
||||
#define EP2E bmbit0
|
||||
|
||||
SFR(EP24FIFOFLGS, 0xAB);
|
||||
SFR(EP68FIFOFLGS, 0xAC);
|
||||
SFR(AUTOPTRSETUP, 0xAF);
|
||||
SFR(IOD, 0xB0);
|
||||
SBIT(IOD0, 0xB0, 0);
|
||||
SBIT(IOD1, 0xB0, 1);
|
||||
SBIT(IOD2, 0xB0, 2);
|
||||
SBIT(IOD3, 0xB0, 3);
|
||||
SBIT(IOD4, 0xB0, 4);
|
||||
SBIT(IOD5, 0xB0, 5);
|
||||
SBIT(IOD6, 0xB0, 6);
|
||||
SBIT(IOD7, 0xB0, 7);
|
||||
|
||||
SFR(IOE, 0xB1);
|
||||
SFR(OEA, 0xB2);
|
||||
SFR(OEB, 0xB3);
|
||||
SFR(OEC, 0xB4);
|
||||
SFR(OED, 0xB5);
|
||||
SFR(OEE, 0xB6);
|
||||
|
||||
SFR(IP, 0xB8);
|
||||
SBIT(PX0, 0xB8, 0);
|
||||
SBIT(PT0, 0xB8, 1);
|
||||
SBIT(PX1, 0xB8, 2);
|
||||
SBIT(PT1, 0xB8, 3);
|
||||
SBIT(PS0, 0xB8, 4);
|
||||
SBIT(PT2, 0xB8, 5);
|
||||
SBIT(PS1, 0xB8, 6);
|
||||
/* Bit 7 read-only, always reads '1' */
|
||||
|
||||
SFR(EP01STAT, 0xBA);
|
||||
SFR(GPIFTRIG, 0xBB);
|
||||
#define BMGPIFDONE bmbit7
|
||||
#define BMGPIFREAD bmbit2
|
||||
#define GPIF_EP2 0
|
||||
#define GPIF_EP4 1
|
||||
#define GPIF_EP6 2
|
||||
#define GPIF_EP8 3
|
||||
|
||||
SFR(GPIFSGLDATH, 0xBD);
|
||||
SFR(GPIFSGLDATLX, 0xBE);
|
||||
SFR(GPIFSGLDATLNOX, 0xBF);
|
||||
|
||||
SFR(SCON1, 0xC0);
|
||||
SBIT(RI_1, 0xC0, 0);
|
||||
SBIT(TI_1, 0xC0, 1);
|
||||
SBIT(RB8_1, 0xC0, 2);
|
||||
SBIT(TB8_1, 0xC0, 3);
|
||||
SBIT(REN_1, 0xC0, 4);
|
||||
SBIT(SM2_1, 0xC0, 5);
|
||||
SBIT(SM1_1, 0xC0, 6);
|
||||
SBIT(SM0_1, 0xC0, 7);
|
||||
|
||||
SFR(SBUF1, 0xC1);
|
||||
SFR(T2CON, 0xC8);
|
||||
SBIT(CPRL2, 0xC8, 0);
|
||||
SBIT(C_T2, 0xC8, 1);
|
||||
SBIT(TR2, 0xC8, 2);
|
||||
SBIT(EXEN2, 0xC8, 3);
|
||||
SBIT(TCLK, 0xC8, 4);
|
||||
SBIT(RCLK, 0xC8, 5);
|
||||
SBIT(EXF2, 0xC8, 6);
|
||||
SBIT(TF2, 0xC8, 7);
|
||||
|
||||
SFR(RCAP2L, 0xCA);
|
||||
SFR(RCAP2H, 0xCB);
|
||||
SFR(TL2, 0xCC);
|
||||
SFR(TH2, 0xCD);
|
||||
SFR(PSW, 0xD0);
|
||||
SBIT(P, 0xD0, 0);
|
||||
SBIT(F1, 0xD0, 1);
|
||||
SBIT(OV, 0xD0, 2);
|
||||
SBIT(RS0, 0xD0, 3);
|
||||
SBIT(RS1, 0xD0, 4);
|
||||
SBIT(F0, 0xD0, 5);
|
||||
SBIT(AC, 0xD0, 6);
|
||||
SBIT(CY, 0xD0, 7);
|
||||
|
||||
SFR(EICON, 0xD8);
|
||||
/* Bit 0 read-only, always reads '0' */
|
||||
/* Bit 1 read-only, always reads '0' */
|
||||
/* Bit 2 read-only, always reads '0' */
|
||||
SBIT(INT6, 0xD8, 3);
|
||||
SBIT(RESI, 0xD8, 4);
|
||||
SBIT(ERESI, 0xD8, 5);
|
||||
/* Bit 6 read-only, always reads '1' */
|
||||
SBIT(SMOD1, 0xD8, 7);
|
||||
|
||||
SFR(ACC, 0xE0);
|
||||
SFR(EIE, 0xE8);
|
||||
SBIT(EUSB, 0xE8, 0);
|
||||
SBIT(EI2C, 0xE8, 1);
|
||||
SBIT(EX4, 0xE8, 2);
|
||||
SBIT(EX5, 0xE8, 3);
|
||||
SBIT(EWDI, 0xE8, 4);
|
||||
/* Bit 5 read-only, always reads '1' */
|
||||
/* Bit 6 read-only, always reads '1' */
|
||||
/* Bit 7 read-only, always reads '1' */
|
||||
|
||||
SFR(B, 0xF0);
|
||||
SFR(EIP, 0xF8);
|
||||
SBIT(PUSB, 0xF8, 0);
|
||||
SBIT(PI2C, 0xF8, 1);
|
||||
SBIT(PX4, 0xF8, 2);
|
||||
SBIT(PX5, 0xF8, 3);
|
||||
SBIT(PX6, 0xF8, 4);
|
||||
/* Bit 5 read-only, always reads '1' */
|
||||
/* Bit 6 read-only, always reads '1' */
|
||||
/* Bit 7 read-only, always reads '1' */
|
||||
|
||||
/**************************************************************************
|
||||
***************************** XDATA Registers ****************************
|
||||
***************************************************************************/
|
||||
|
||||
SFRX(GPIF_WAVE_DATA, 0xE400);
|
||||
SFRX(RES_WAVEDATA_END, 0xE480);
|
||||
|
||||
/* General Configuration */
|
||||
SFRX(CPUCS, 0xE600);
|
||||
#define RES8051 bmbit0
|
||||
#define CLKOE bmbit1
|
||||
#define BMCLKINV bmbit2
|
||||
#define bmclkspd0 bmbit3
|
||||
#define bmclkspd1 bmbit4
|
||||
#define bmclkspd (bmbit4 | bmbit3)
|
||||
#define BMPRTCSTB bmbit5
|
||||
|
||||
/* PCON register */
|
||||
#define BMSMOD0 bmbit7
|
||||
|
||||
SFRX(IFCONFIG, 0xE601);
|
||||
#define BMIFCLKSRC bmbit7
|
||||
#define BM3048MHZ bmbit6
|
||||
#define BMIFCLKOE bmbit5
|
||||
#define BMIFCLKPOL bmbit4
|
||||
#define BMASYNC bmbit3
|
||||
#define BMGSTATE bmbit2
|
||||
#define BMIFCFG1 bmbit1
|
||||
#define BMIFCFG0 bmbit0
|
||||
#define BMIFCFGMASK (BMIFCFG0 | BMIFCFG1)
|
||||
#define BMIFGPIF BMIFCFG1
|
||||
|
||||
SFRX(PINFLAGSAB, 0xE602);
|
||||
SFRX(PINFLAGSCD, 0xE603);
|
||||
SFRX(FIFORESET, 0xE604);
|
||||
#define BMNAKALL bmbit7
|
||||
|
||||
SFRX(BREAKPT, 0xE605);
|
||||
#define BMBREAK bmbit3
|
||||
#define BMBPPULSE bmbit2
|
||||
#define BMBPEN bmbit1
|
||||
|
||||
SFRX(BPADDRH, 0xE606);
|
||||
SFRX(BPADDRL, 0xE607);
|
||||
SFRX(UART230, 0xE608);
|
||||
SFRX(FIFOPINPOLAR, 0xE609);
|
||||
SFRX(REVID, 0xE60A);
|
||||
SFRX(REVCTL, 0xE60B);
|
||||
#define BMNOAUTOARM bmbit1
|
||||
#define BMSKIPCOMMIT bmbit0
|
||||
|
||||
/* Endpoint Configuration */
|
||||
SFRX(EP1OUTCFG, 0xE610);
|
||||
SFRX(EP1INCFG, 0xE611);
|
||||
SFRX(EP2CFG, 0xE612);
|
||||
SFRX(EP4CFG, 0xE613);
|
||||
SFRX(EP6CFG, 0xE614);
|
||||
SFRX(EP8CFG, 0xE615);
|
||||
SFRX(EP2FIFOCFG, 0xE618);
|
||||
SFRX(EP4FIFOCFG, 0xE619);
|
||||
SFRX(EP6FIFOCFG, 0xE61A);
|
||||
SFRX(EP8FIFOCFG, 0xE61B);
|
||||
#define BMINFM bmbit6
|
||||
#define BMOEP bmbit5
|
||||
#define BMAUTOOUT bmbit4
|
||||
#define BMAUTOIN bmbit3
|
||||
#define BMZEROLENIN bmbit2
|
||||
#define BMWORDWIDE bmbit0
|
||||
|
||||
SFRX(EP2AUTOINLENH, 0xE620);
|
||||
SFRX(EP2AUTOINLENL, 0xE621);
|
||||
SFRX(EP4AUTOINLENH, 0xE622);
|
||||
SFRX(EP4AUTOINLENL, 0xE623);
|
||||
SFRX(EP6AUTOINLENH, 0xE612);
|
||||
SFRX(EP6AUTOINLENL, 0xE613);
|
||||
SFRX(EP8AUTOINLENH, 0xE614);
|
||||
SFRX(EP8AUTOINLENL, 0xE615);
|
||||
SFRX(EP2FIFOPFH, 0xE630);
|
||||
SFRX(EP2FIFOPFL, 0xE631);
|
||||
SFRX(EP4FIFOPFH, 0xE632);
|
||||
SFRX(EP4FIFOPFL, 0xE633);
|
||||
SFRX(EP6FIFOPFH, 0xE634);
|
||||
SFRX(EP6FIFOPFL, 0xE635);
|
||||
SFRX(EP8FIFOPFH, 0xE636);
|
||||
SFRX(EP8FIFOPFL, 0xE637);
|
||||
SFRX(EP2ISOINPKTS, 0xE640);
|
||||
SFRX(EP4ISOINPKTS, 0xE641);
|
||||
SFRX(EP6ISOINPKTS, 0xE642);
|
||||
SFRX(EP8ISOINPKTS, 0xE643);
|
||||
SFRX(INPKTEND, 0xE648);
|
||||
SFRX(OUTPKTEND, 0xE649);
|
||||
|
||||
/* Interrupts */
|
||||
SFRX(EP2FIFOIE, 0xE650);
|
||||
SFRX(EP2FIFOIRQ, 0xE651);
|
||||
SFRX(EP4FIFOIE, 0xE652);
|
||||
SFRX(EP4FIFOIRQ, 0xE653);
|
||||
SFRX(EP6FIFOIE, 0xE654);
|
||||
SFRX(EP6FIFOIRQ, 0xE655);
|
||||
SFRX(EP8FIFOIE, 0xE656);
|
||||
SFRX(EP8FIFOIRQ, 0xE657);
|
||||
SFRX(IBNIE, 0xE658);
|
||||
SFRX(IBNIRQ, 0xE659);
|
||||
#define EP0IBN bmbit0
|
||||
#define EP1IBN bmbit1
|
||||
#define EP2IBN bmbit2
|
||||
#define EP4IBN bmbit3
|
||||
#define EP6IBN bmbit4
|
||||
#define EP8IBN bmbit5
|
||||
|
||||
SFRX(NAKIE, 0xE65A);
|
||||
SFRX(NAKIRQ, 0xE65B);
|
||||
#define EP8PING bmbit7
|
||||
#define EP6PING bmbit6
|
||||
#define EP4PING bmbit5
|
||||
#define EP2PING bmbit4
|
||||
#define EP1PING bmbit3
|
||||
#define EP0PING bmbit2
|
||||
#define IBN bmbit0
|
||||
|
||||
SFRX(USBIEN, 0xE65C);
|
||||
SFRX(USBIRQ, 0xE65D);
|
||||
#define SUDAVI bmbit0
|
||||
#define SOFI bmbit1
|
||||
#define SUTOKI bmbit2
|
||||
#define SUSPI bmbit3
|
||||
#define URESI bmbit4
|
||||
#define HSGRANT bmbit5
|
||||
#define EP0ACK bmbit6
|
||||
|
||||
SFRX(EPIE, 0xE65E);
|
||||
SFRX(EPIRQ, 0xE65F);
|
||||
SFRX(GPIFIE, 0xE660);
|
||||
SFRX(GPIFIRQ, 0xE661);
|
||||
SFRX(USBERRIE, 0xE662);
|
||||
SFRX(USBERRIRQ, 0xE663);
|
||||
SFRX(ERRCNTLIM, 0xE664);
|
||||
SFRX(CLRERRCNT, 0xE665);
|
||||
SFRX(INT2IVEC, 0xE666);
|
||||
#define I2V0 bmbit2
|
||||
#define I2V1 bmbit3
|
||||
#define I2V2 bmbit4
|
||||
#define I2V3 bmbit5
|
||||
#define I2V4 bmbit6
|
||||
|
||||
SFRX(INT4IVEC, 0xE667);
|
||||
SFRX(INTSETUP, 0xE668);
|
||||
#define AV4EN bmbit0
|
||||
#define INT4IN bmbit1
|
||||
#define AV2EN bmbit3
|
||||
|
||||
/* Input/Output */
|
||||
SFRX(PORTACFG, 0xE670);
|
||||
#define BMINT0 bmbit0
|
||||
#define BMINT1 bmbit1
|
||||
#define BMFLAGD bmbit7
|
||||
|
||||
SFRX(PORTCCFG, 0xE671);
|
||||
#define BMGPIFA0 bmbit0
|
||||
#define BMGPIFA1 bmbit1
|
||||
#define BMGPIFA2 bmbit2
|
||||
#define BMGPIFA3 bmbit3
|
||||
#define BMGPIFA4 bmbit4
|
||||
#define BMGPIFA5 bmbit5
|
||||
#define BMGPIFA6 bmbit6
|
||||
#define BMGPIFA7 bmbit7
|
||||
|
||||
SFRX(PORTECFG, 0xE672);
|
||||
#define BMT0OUT bmbit0
|
||||
#define BMT1OUT bmbit1
|
||||
#define BMT2OUT bmbit2
|
||||
#define BMRXD0OUT bmbit3
|
||||
#define BMRXD1OUT bmbit4
|
||||
#define BMINT6 bmbit5
|
||||
#define BMT2EX bmbit6
|
||||
#define BMGPIFA8 bmbit7
|
||||
|
||||
SFRX(I2CS, 0xE678);
|
||||
#define BMDONE bmbit0
|
||||
#define BMACK bmbit1
|
||||
#define BMBERR bmbit2
|
||||
#define BMID (bmbit4 | bmbit3)
|
||||
#define BMLASTRD bmbit5
|
||||
#define BMSTOP bmbit6
|
||||
#define BMSTART bmbit7
|
||||
|
||||
SFRX(I2DAT, 0xE679);
|
||||
SFRX(I2CTL, 0xE67A);
|
||||
#define BMSTOPIE bmbit1
|
||||
#define BM400KHZ bmbit0
|
||||
|
||||
SFRX(XAUTODAT1, 0xE67B);
|
||||
SFRX(XAUTODAT2, 0xE67C);
|
||||
#define EXTAUTODAT1 XAUTODAT1
|
||||
#define EXTAUTODAT2 XAUTODAT2
|
||||
|
||||
/* USB Control */
|
||||
SFRX(USBCS, 0xE680);
|
||||
#define SIGRSUME bmbit0
|
||||
#define RENUM bmbit1
|
||||
#define NOSYNSOF bmbit2
|
||||
#define DISCON bmbit3
|
||||
#define HSM bmbit7
|
||||
|
||||
SFRX(SUSPEND, 0xE681);
|
||||
SFRX(WAKEUPCS, 0xE682);
|
||||
#define BMWU2 bmbit7
|
||||
#define BMWU bmbit6
|
||||
#define BMWU2POL bmbit5
|
||||
#define BMWUPOL bmbit4
|
||||
#define BMDPEN bmbit2
|
||||
#define BMWU2EN bmbit1
|
||||
#define BMWUEN bmbit0
|
||||
|
||||
SFRX(TOGCTL, 0xE683);
|
||||
#define BMTOGCTLEPMASK bmbit3 | bmbit2 | bmbit1 | bmbit0
|
||||
#define BMRESETTOGGLE bmbit5
|
||||
#define BMSETTOGGLE bmbit6
|
||||
#define BMQUERYTOGGLE bmbit7
|
||||
|
||||
SFRX(USBFRAMEH, 0xE684);
|
||||
SFRX(USBFRAMEL, 0xE685);
|
||||
SFRX(MICROFRAME, 0xE686);
|
||||
SFRX(FNADDR, 0xE687);
|
||||
|
||||
/* Endpoints */
|
||||
SFRX(EP0BCH, 0xE68A);
|
||||
SFRX(EP0BCL, 0xE68B);
|
||||
SFRX(EP1OUTBC, 0xE68D);
|
||||
SFRX(EP1INBC, 0xE68F);
|
||||
SFRX(EP2BCH, 0xE690);
|
||||
SFRX(EP2BCL, 0xE691);
|
||||
SFRX(EP4BCH, 0xE694);
|
||||
SFRX(EP4BCL, 0xE695);
|
||||
SFRX(EP6BCH, 0xE698);
|
||||
SFRX(EP6BCL, 0xE699);
|
||||
SFRX(EP8BCH, 0xE69C);
|
||||
SFRX(EP8BCL, 0xE69D);
|
||||
SFRX(EP0CS, 0xE6A0);
|
||||
#define HSNAK bmbit7
|
||||
|
||||
SFRX(EP1INCS, 0xE6A2);
|
||||
SFRX(EP1OUTCS, 0xE6A1);
|
||||
#define EPSTALL bmbit0
|
||||
#define EPBSY bmbit1
|
||||
|
||||
SFRX(EP2CS, 0xE6A3);
|
||||
SFRX(EP4CS, 0xE6A4);
|
||||
SFRX(EP6CS, 0xE6A5);
|
||||
SFRX(EP8CS, 0xE6A6);
|
||||
#define BMEPEMPTY bmbit2
|
||||
#define BMEPFULL bmbit3
|
||||
#define BMNPAK (bmbit6 | bmbit5 | bmbit4)
|
||||
|
||||
SFRX(EP2FIFOFLGS, 0xE6A7);
|
||||
SFRX(EP4FIFOFLGS, 0xE6A8);
|
||||
SFRX(EP6FIFOFLGS, 0xE6A9);
|
||||
SFRX(EP8FIFOFLGS, 0xE6AA);
|
||||
SFRX(EP2FIFOBCH, 0xE6AB);
|
||||
SFRX(EP2FIFOBCL, 0xE6AC);
|
||||
SFRX(EP4FIFOBCH, 0xE6AD);
|
||||
SFRX(EP4FIFOBCL, 0xE6AE);
|
||||
SFRX(EP6FIFOBCH, 0xE6AF);
|
||||
SFRX(EP6FIFOBCL, 0xE6B0);
|
||||
SFRX(EP8FIFOBCH, 0xE6B1);
|
||||
SFRX(EP8FIFOBCL, 0xE6B2);
|
||||
SFRX(SUDPTRH, 0xE6B3);
|
||||
SFRX(SUDPTRL, 0xE6B4);
|
||||
|
||||
SFRX(SUDPTRCTL, 0xE6B5);
|
||||
#define BMSDPAUTO bmbit0
|
||||
|
||||
SFRX(SETUPDAT[8], 0xE6B8);
|
||||
|
||||
/* GPIF */
|
||||
SFRX(GPIFWFSELECT, 0xE6C0);
|
||||
SFRX(GPIFIDLECS, 0xE6C1);
|
||||
SFRX(GPIFIDLECTL, 0xE6C2);
|
||||
SFRX(GPIFCTLCFG, 0xE6C3);
|
||||
SFRX(GPIFADRH, 0xE6C4);
|
||||
SFRX(GPIFADRL, 0xE6C5);
|
||||
SFRX(GPIFTCB3, 0xE6CE);
|
||||
SFRX(GPIFTCB2, 0xE6CF);
|
||||
SFRX(GPIFTCB1, 0xE6D0);
|
||||
SFRX(GPIFTCB0, 0xE6D1);
|
||||
|
||||
#define EP2GPIFTCH GPIFTCB1 /* these are here for backwards compatibility */
|
||||
#define EP2GPIFTCL GPIFTCB0
|
||||
#define EP4GPIFTCH GPIFTCB1 /* these are here for backwards compatibility */
|
||||
#define EP4GPIFTCL GPIFTCB0
|
||||
#define EP6GPIFTCH GPIFTCB1 /* these are here for backwards compatibility */
|
||||
#define EP6GPIFTCL GPIFTCB0
|
||||
#define EP8GPIFTCH GPIFTCB1 /* these are here for backwards compatibility */
|
||||
#define EP8GPIFTCL GPIFTCB0
|
||||
|
||||
SFRX(EP2GPIFFLGSEL, 0xE6D2);
|
||||
SFRX(EP2GPIFPFSTOP, 0xE6D3);
|
||||
SFRX(EP2GPIFTRIG, 0xE6D4);
|
||||
SFRX(EP4GPIFFLGSEL, 0xE6DA);
|
||||
SFRX(EP4GPIFPFSTOP, 0xE6DB);
|
||||
SFRX(EP4GPIFTRIG, 0xE6DC);
|
||||
SFRX(EP6GPIFFLGSEL, 0xE6E2);
|
||||
SFRX(EP6GPIFPFSTOP, 0xE6E3);
|
||||
SFRX(EP6GPIFTRIG, 0xE6E4);
|
||||
SFRX(EP8GPIFFLGSEL, 0xE6EA);
|
||||
SFRX(EP8GPIFPFSTOP, 0xE6EB);
|
||||
SFRX(EP8GPIFTRIG, 0xE6EC);
|
||||
SFRX(XGPIFSGLDATH, 0xE6F0);
|
||||
SFRX(XGPIFSGLDATLX, 0xE6F1);
|
||||
SFRX(XGPIFSGLDATLNOX, 0xE6F2);
|
||||
SFRX(GPIFREADYCFG, 0xE6F3);
|
||||
SFRX(GPIFREADYSTAT, 0xE6F4);
|
||||
SFRX(GPIFABORT, 0xE6F5);
|
||||
|
||||
// UDMA
|
||||
SFRX(FLOWSTATE, 0xE6C6);
|
||||
SFRX(FLOWLOGIC, 0xE6C7);
|
||||
SFRX(FLOWEQ0CTL, 0xE6C8);
|
||||
SFRX(FLOWEQ1CTL, 0xE6C9);
|
||||
SFRX(FLOWHOLDOFF, 0xE6CA);
|
||||
SFRX(FLOWSTB, 0xE6CB);
|
||||
SFRX(FLOWSTBEDGE, 0xE6CC);
|
||||
SFRX(FLOWSTBHPERIOD, 0xE6CD);
|
||||
SFRX(GPIFHOLDAMOUNT, 0xE60C);
|
||||
SFRX(UDMACRCH, 0xE67D);
|
||||
SFRX(UDMACRCL, 0xE67E);
|
||||
SFRX(UDMACRCQUAL, 0xE67F);
|
||||
|
||||
/* Debug/Test
|
||||
* The following registers are for Cypress's internal testing purposes only.
|
||||
* These registers are not documented in the datasheet or the Technical Reference
|
||||
* Manual as they were not designed for end user application usage
|
||||
*/
|
||||
SFRX(DBUG, 0xE6F8);
|
||||
SFRX(TESTCFG, 0xE6F9);
|
||||
SFRX(USBTEST, 0xE6FA);
|
||||
SFRX(CT1, 0xE6FB);
|
||||
SFRX(CT2, 0xE6FC);
|
||||
SFRX(CT3, 0xE6FD);
|
||||
SFRX(CT4, 0xE6FE);
|
||||
|
||||
/* Endpoint Buffers */
|
||||
SFRX(EP0BUF[64], 0xE740);
|
||||
SFRX(EP1INBUF[64], 0xE7C0);
|
||||
SFRX(EP1OUTBUF[64], 0xE780);
|
||||
SFRX(EP2FIFOBUF[1024], 0xF000);
|
||||
SFRX(EP4FIFOBUF[1024], 0xF400);
|
||||
SFRX(EP6FIFOBUF[1024], 0xF800);
|
||||
SFRX(EP8FIFOBUF[1024], 0xFC00);
|
||||
|
||||
/* Error Correction Code (ECC) Registers (FX2LP/FX1 only) */
|
||||
SFRX(ECCCFG, 0xE628);
|
||||
SFRX(ECCRESET, 0xE629);
|
||||
SFRX(ECC1B0, 0xE62A);
|
||||
SFRX(ECC1B1, 0xE62B);
|
||||
SFRX(ECC1B2, 0xE62C);
|
||||
SFRX(ECC2B0, 0xE62D);
|
||||
SFRX(ECC2B1, 0xE62E);
|
||||
SFRX(ECC2B2, 0xE62F);
|
||||
|
||||
/* Feature Registers (FX2LP/FX1 only) */
|
||||
SFRX(GPCR2, 0xE50D);
|
||||
#define BMFULLSPEEDONLY bmbit4
|
||||
|
||||
#endif
|
||||
47
contrib/firmware/angie/c/include/serial.h
Normal file
47
contrib/firmware/angie/c/include/serial.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
/**
|
||||
* This code was taken from the fx2lib project from this link:
|
||||
* https://github.com/djmuhlestein/fx2lib
|
||||
*
|
||||
* Copyright (C) 2009 Ubixum, Inc.
|
||||
**/
|
||||
|
||||
/** \file serial.h
|
||||
* defines functions to print to a serial console with SIO0
|
||||
**/
|
||||
|
||||
#include "fx2macros.h"
|
||||
#include <stdint.h>
|
||||
/**
|
||||
* This function inits sio0 to use T2CON (timer 2)
|
||||
* See TRM 14.3.4.1 (Table 14-16)
|
||||
* Certain baud rates have too high an error rate to work. All baud rates are .16%
|
||||
* except:
|
||||
*
|
||||
* 12MHZ 24MHZ
|
||||
* \li 57600 -6.99%
|
||||
* \li 38400 -2.34% -2.34%
|
||||
* \li 19200 -2.34%
|
||||
*
|
||||
* Possible Baud rates:
|
||||
* \li 2400
|
||||
* \li 4800
|
||||
* \li 9600
|
||||
* \li 19200
|
||||
* \li 28800
|
||||
* \li 38400
|
||||
* \li 57600
|
||||
*
|
||||
* Any of these rates should work except 57600 at 12mhz. -2.34% is pushing
|
||||
* most hardware specs for working. All rates at 48mhz work at .16%
|
||||
**/
|
||||
|
||||
void sio0_init(uint32_t baud_rate) __critical; /* baud_rate max should be 57600 since int=2 bytes */
|
||||
|
||||
/**
|
||||
* putchar('\\n') or putchar('\\r') both transmit \\r\\n
|
||||
* Just use one or the other. (This makes terminal echo easy)
|
||||
**/
|
||||
int putchar(char c);
|
||||
int getchar(void);
|
||||
283
contrib/firmware/angie/c/include/usb.h
Normal file
283
contrib/firmware/angie/c/include/usb.h
Normal file
@@ -0,0 +1,283 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/****************************************************************************
|
||||
File : usb.h *
|
||||
Contents : usb communication handling header file for NanoXplore *
|
||||
USB-JTAG ANGIE adapter hardware. *
|
||||
Based on openULINK project code by: Martin Schmoelzer. *
|
||||
Copyright 2023, Ahmed Errached BOUDJELIDA, NanoXplore SAS. *
|
||||
<aboudjelida@nanoxplore.com> *
|
||||
<ahmederrachedbjld@gmail.com> *
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __USB_H
|
||||
#define __USB_H
|
||||
|
||||
#include "reg_ezusb.h"
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
/* High and Low byte of a word (uint16_t) */
|
||||
#define HI8(word) (uint8_t)(((uint16_t)(word) >> 8) & 0xff)
|
||||
#define LO8(word) (uint8_t)((uint16_t)(word) & 0xff)
|
||||
|
||||
/* Convenience functions */
|
||||
#define STALL_EP0() (EP0CS |= EPSTALL)
|
||||
#define CLEAR_IRQ() (USBINT = 0)
|
||||
|
||||
/*********** USB descriptors. See USB 2.0 Spec **********/
|
||||
|
||||
/* USB Descriptor Types. See USB 2.0 Spec */
|
||||
#define DESCRIPTOR_TYPE_DEVICE 0x01
|
||||
#define DESCRIPTOR_TYPE_CONFIGURATION 0x02
|
||||
#define DESCRIPTOR_TYPE_STRING 0x03
|
||||
#define DESCRIPTOR_TYPE_INTERFACE 0x04
|
||||
#define DESCRIPTOR_TYPE_ENDPOINT 0x05
|
||||
|
||||
#define STR_DESCR(len, ...) { (len) * 2 + 2, DESCRIPTOR_TYPE_STRING, { __VA_ARGS__ } }
|
||||
|
||||
/** USB Device Descriptor. See USB 2.0 Spec */
|
||||
struct usb_device_descriptor {
|
||||
uint8_t blength; /**< Size of this descriptor in bytes. */
|
||||
uint8_t bdescriptortype; /**< DEVICE Descriptor Type. */
|
||||
uint16_t bcdusb; /**< USB specification release number (BCD). */
|
||||
uint8_t bdeviceclass; /**< Class code. */
|
||||
uint8_t bdevicesubclass; /**< Subclass code. */
|
||||
uint8_t bdeviceprotocol; /**< Protocol code. */
|
||||
uint8_t bmaxpacketsize0; /**< Maximum packet size for EP0 (8, 16, 32, 64). */
|
||||
uint16_t idvendor; /**< USB Vendor ID. */
|
||||
uint16_t idproduct; /**< USB Product ID. */
|
||||
uint16_t bcddevice; /**< Device Release Number (BCD). */
|
||||
uint8_t imanufacturer; /**< Index of manufacturer string descriptor. */
|
||||
uint8_t iproduct; /**< Index of product string descriptor. */
|
||||
uint8_t iserialnumber; /**< Index of string descriptor containing serial #. */
|
||||
uint8_t bnumconfigurations; /**< Number of possible configurations. */
|
||||
};
|
||||
|
||||
/** USB Configuration Descriptor. See USB 2.0 Spec */
|
||||
struct usb_config_descriptor {
|
||||
uint8_t blength; /**< Size of this descriptor in bytes. */
|
||||
uint8_t bdescriptortype; /**< CONFIGURATION descriptor type. */
|
||||
uint16_t wtotallength; /**< Combined total length of all descriptors. */
|
||||
uint8_t bnuminterfaces; /**< Number of interfaces in this configuration. */
|
||||
uint8_t bconfigurationvalue; /**< Value used to select this configuration. */
|
||||
uint8_t iconfiguration; /**< Index of configuration string descriptor. */
|
||||
uint8_t bmattributes; /**< Configuration characteristics. */
|
||||
uint8_t maxpower; /**< Maximum power consumption in 2 mA units. */
|
||||
};
|
||||
|
||||
/** USB Interface association Descriptor. See USB 2.0 Spec */
|
||||
struct usb_interface_association_descriptor {
|
||||
uint8_t blength;
|
||||
uint8_t bdescriptortype;
|
||||
uint8_t bfirstinterface;
|
||||
uint8_t binterfacecount;
|
||||
uint8_t bfunctionclass;
|
||||
uint8_t bfunctionsubclass;
|
||||
uint8_t bfunctionprotocol;
|
||||
uint8_t ifunction;
|
||||
};
|
||||
|
||||
/** USB Interface Descriptor. See USB 2.0 Spec */
|
||||
struct usb_interface_descriptor {
|
||||
uint8_t blength; /**< Size of this descriptor in bytes. */
|
||||
uint8_t bdescriptortype; /**< INTERFACE descriptor type. */
|
||||
uint8_t binterfacenumber; /**< Interface number. */
|
||||
uint8_t balternatesetting; /**< Value used to select alternate setting. */
|
||||
uint8_t bnumendpoints; /**< Number of endpoints used by this interface. */
|
||||
uint8_t binterfaceclass; /**< Class code. */
|
||||
uint8_t binterfacesubclass; /**< Subclass code. */
|
||||
uint8_t binterfaceprotocol; /**< Protocol code. */
|
||||
uint8_t iinterface; /**< Index of interface string descriptor. */
|
||||
};
|
||||
|
||||
/** USB Endpoint Descriptor. See USB 2.0 Spec */
|
||||
struct usb_endpoint_descriptor {
|
||||
uint8_t blength; /**< Size of this descriptor in bytes. */
|
||||
uint8_t bdescriptortype; /**< ENDPOINT descriptor type. */
|
||||
uint8_t bendpointaddress; /**< Endpoint Address: IN/OUT + EP number. */
|
||||
uint8_t bmattributes; /**< Endpoint Attributes: BULK/INTR/ISO/CTRL. */
|
||||
uint16_t wmaxpacketsize; /**< Maximum packet size for this endpoint. */
|
||||
uint8_t binterval; /**< Polling interval (in ms) for this endpoint. */
|
||||
};
|
||||
|
||||
/** USB Language Descriptor. See USB 2.0 Spec */
|
||||
struct usb_language_descriptor {
|
||||
uint8_t blength; /**< Size of this descriptor in bytes. */
|
||||
uint8_t bdescriptortype; /**< STRING descriptor type. */
|
||||
uint16_t wlangid; /**< LANGID codes. */
|
||||
};
|
||||
|
||||
/** USB String Descriptor. See USB 2.0 Spec */
|
||||
struct usb_string_descriptor {
|
||||
uint8_t blength; /**< Size of this descriptor in bytes. */
|
||||
uint8_t bdescriptortype; /**< STRING descriptor type. */
|
||||
uint16_t bstring[]; /**< UNICODE encoded string. */
|
||||
};
|
||||
|
||||
/********************** USB Control Endpoint 0 related *********************/
|
||||
|
||||
/** USB Control Setup Data. See USB 2.0 Spec */
|
||||
struct setup_data {
|
||||
uint8_t bmrequesttype; /**< Characteristics of a request. */
|
||||
uint8_t brequest; /**< Specific request. */
|
||||
uint16_t wvalue; /**< Field that varies according to request. */
|
||||
uint16_t windex; /**< Field that varies according to request. */
|
||||
uint16_t wlength; /**< Number of bytes to transfer in data stage. */
|
||||
};
|
||||
|
||||
extern volatile __xdata __at 0xE6B8 struct setup_data setup_data;
|
||||
|
||||
/*
|
||||
* USB Request Types (bmRequestType): See USB 2.0 Spec
|
||||
*
|
||||
* Bit 7: Data transfer direction
|
||||
* 0 = Host-to-device
|
||||
* 1 = Device-to-host
|
||||
* Bit 6...5: Type
|
||||
* 0 = Standard
|
||||
* 1 = Class
|
||||
* 2 = Vendor
|
||||
* 3 = Reserved
|
||||
* Bit 4...0: Recipient
|
||||
* 0 = Device
|
||||
* 1 = Interface
|
||||
* 2 = Endpoint
|
||||
* 3 = Other
|
||||
* 4...31 = Reserved
|
||||
*/
|
||||
|
||||
#define USB_DIR_OUT 0x00
|
||||
#define USB_DIR_IN 0x80
|
||||
|
||||
#define USB_REQ_TYPE_STANDARD (0x00 << 5)
|
||||
#define USB_REQ_TYPE_CLASS (0x01 << 5)
|
||||
#define USB_REQ_TYPE_VENDOR (0x02 << 5)
|
||||
#define USB_REQ_TYPE_RESERVED (0x03 << 5)
|
||||
|
||||
#define USB_RECIP_DEVICE 0x00
|
||||
#define USB_RECIP_INTERFACE 0x01
|
||||
#define USB_RECIP_ENDPOINT 0x02
|
||||
#define USB_RECIP_OTHER 0x03
|
||||
|
||||
/* Clear Interface Request */
|
||||
#define CF_DEVICE (USB_DIR_OUT | USB_REQ_TYPE_STANDARD | USB_RECIP_DEVICE)
|
||||
#define CF_INTERFACE (USB_DIR_OUT | USB_REQ_TYPE_STANDARD | USB_RECIP_INTERFACE)
|
||||
#define CF_ENDPOINT (USB_DIR_OUT | USB_REQ_TYPE_STANDARD | USB_RECIP_ENDPOINT)
|
||||
|
||||
/* Get Configuration Request */
|
||||
#define GC_DEVICE (USB_DIR_IN | USB_REQ_TYPE_STANDARD | USB_RECIP_DEVICE)
|
||||
|
||||
/* Get Descriptor Request */
|
||||
#define GD_DEVICE (USB_DIR_IN | USB_REQ_TYPE_STANDARD | USB_RECIP_DEVICE)
|
||||
|
||||
/* Get Interface Request */
|
||||
#define GI_INTERFACE (USB_DIR_IN | USB_REQ_TYPE_STANDARD | USB_RECIP_INTERFACE)
|
||||
|
||||
/* Get Status Request: See USB 1.1 spec, page 190 */
|
||||
#define GS_DEVICE (USB_DIR_IN | USB_REQ_TYPE_STANDARD | USB_RECIP_DEVICE)
|
||||
#define GS_INTERFACE (USB_DIR_IN | USB_REQ_TYPE_STANDARD | USB_RECIP_INTERFACE)
|
||||
#define GS_ENDPOINT (USB_DIR_IN | USB_REQ_TYPE_STANDARD | USB_RECIP_ENDPOINT)
|
||||
|
||||
/* Set Address Request is handled by EZ-USB core */
|
||||
|
||||
/* Set Configuration Request */
|
||||
#define SC_DEVICE (USB_DIR_OUT | USB_REQ_TYPE_STANDARD | USB_RECIP_DEVICE)
|
||||
|
||||
/* Set Descriptor Request */
|
||||
#define SD_DEVICE (USB_DIR_OUT | USB_REQ_TYPE_STANDARD | USB_RECIP_DEVICE)
|
||||
|
||||
/* Set Feature Request */
|
||||
#define SF_DEVICE (USB_DIR_OUT | USB_REQ_TYPE_STANDARD | USB_RECIP_DEVICE)
|
||||
#define SF_INTERFACE (USB_DIR_OUT | USB_REQ_TYPE_STANDARD | USB_RECIP_INTERFACE)
|
||||
#define SF_ENDPOINT (USB_DIR_OUT | USB_REQ_TYPE_STANDARD | USB_RECIP_ENDPOINT)
|
||||
|
||||
/* Set Interface Request */
|
||||
#define SI_INTERFACE (USB_DIR_OUT | USB_REQ_TYPE_STANDARD | USB_RECIP_INTERFACE)
|
||||
|
||||
/* Synch Frame Request */
|
||||
#define SY_ENDPOINT (USB_DIR_IN | USB_REQ_TYPE_STANDARD | USB_RECIP_ENDPOINT)
|
||||
|
||||
/* USB Requests (bRequest): See USB 2.0 Spec */
|
||||
#define GET_STATUS 0
|
||||
#define CLEAR_FEATURE 1
|
||||
/* Value '2' is reserved for future use */
|
||||
#define SET_FEATURE 3
|
||||
/* Value '4' is reserved for future use */
|
||||
#define SET_ADDRESS 5
|
||||
#define GET_DESCRIPTOR 6
|
||||
#define SET_DESCRIPTOR 7
|
||||
#define GET_CONFIGURATION 8
|
||||
#define SET_CONFIGURATION 9
|
||||
#define GET_INTERFACE 10
|
||||
#define SET_INTERFACE 11
|
||||
#define SYNCH_FRAME 12
|
||||
|
||||
/* Standard Feature Selectors: See USB 2.0 Spec */
|
||||
#define DEVICE_REMOTE_WAKEUP 1
|
||||
#define ENDPOINT_HALT 0
|
||||
|
||||
/************************** EZ-USB specific stuff **************************/
|
||||
/** USB Interrupts. See EZ-USB FX2-TRM, for details */
|
||||
enum usb_isr {
|
||||
SUDAV_ISR = 13,
|
||||
SOF_ISR,
|
||||
SUTOK_ISR,
|
||||
SUSPEND_ISR,
|
||||
USBRESET_ISR,
|
||||
HIGHSPEED_ISR,
|
||||
EP0ACK_ISR,
|
||||
STUB_ISR,
|
||||
EP0IN_ISR,
|
||||
EP0OUT_ISR,
|
||||
EP1IN_ISR,
|
||||
EP1OUT_ISR,
|
||||
EP2_ISR,
|
||||
EP4_ISR,
|
||||
EP6_ISR,
|
||||
EP8_ISR,
|
||||
IBN_ISR,
|
||||
EP0PINGNAK_ISR,
|
||||
EP1PINGNAK_ISR,
|
||||
EP2PINGNAK_ISR,
|
||||
EP4PINGNAK_ISR,
|
||||
EP6PINGNAK_ISR,
|
||||
EP8PINGNAK_ISR,
|
||||
ERRORLIMIT_ISR,
|
||||
EP2PIDERROR_ISR,
|
||||
EP4PIDERROR_ISR,
|
||||
EP6PIDERROR_ISR,
|
||||
EP8PIDERROR_ISR,
|
||||
EP2PFLAG_ISR,
|
||||
EP4PFLAG_ISR,
|
||||
EP6PFLAG_ISR,
|
||||
EP8PFLAG_ISR,
|
||||
EP2EFLAG_ISR,
|
||||
EP4EFLAG_ISR,
|
||||
EP6EFLAG_ISR,
|
||||
EP8EFLAG_ISR,
|
||||
EP2FFLAG_ISR,
|
||||
EP4FFLAG_ISR,
|
||||
EP6FFLAG_ISR,
|
||||
EP8FFLAG_ISR,
|
||||
GPIFCOMPLETE_ISR,
|
||||
GPIFWAVEFORM_ISR
|
||||
};
|
||||
|
||||
/*************************** Function Prototypes ***************************/
|
||||
__xdata uint8_t *usb_get_endpoint_cs_reg(uint8_t ep);
|
||||
void usb_reset_data_toggle(uint8_t ep);
|
||||
bool usb_handle_get_status(void);
|
||||
bool usb_handle_clear_feature(void);
|
||||
bool usb_handle_set_feature(void);
|
||||
bool usb_handle_get_descriptor(void);
|
||||
void usb_handle_set_interface(void);
|
||||
void usb_handle_setup_data(void);
|
||||
bool usb_handle_vcommands(void);
|
||||
void set_gpif_cnt(uint32_t count);
|
||||
|
||||
void i2c_recieve(void);
|
||||
void ep_init(void);
|
||||
void interrupt_init(void);
|
||||
void io_init(void);
|
||||
|
||||
#endif
|
||||
125
contrib/firmware/angie/c/src/USBJmpTb.a51
Normal file
125
contrib/firmware/angie/c/src/USBJmpTb.a51
Normal file
@@ -0,0 +1,125 @@
|
||||
; SPDX-License-Identifier: GPL-2.0-or-later
|
||||
;****************************************************************************
|
||||
; File : USBJmpTb.a51 *
|
||||
; Contents : Interruptions vector configuration. *
|
||||
; Based on openULINK project code by: Martin Schmoelzer. *
|
||||
; Copyright 2023, Ahmed Errached BOUDJELIDA, NanoXplore SAS. *
|
||||
; <aboudjelida@nanoxplore.com> *
|
||||
; <ahmederrachedbjld@gmail.com> *
|
||||
;****************************************************************************
|
||||
.module JUMPTABLE
|
||||
|
||||
.globl USB_AutoVector
|
||||
.globl USB_Jump_Table
|
||||
|
||||
.globl _sudav_isr, _sof_isr, _sutok_isr, _suspend_isr, _usbreset_isr, _highspeed_isr, _ep0ack_isr, _stub_isr, _ep0in_isr, _ep0out_isr, _ep1in_isr, _ep1out_isr, _ep2_isr, _ep4_isr, _ep6_isr, _ep8_isr, _ibn_isr
|
||||
.globl _ep0pingnak_isr, _ep1pingnak_isr, _ep2pingnak_isr, _ep4pingnak_isr, _ep6pingnak_isr, _ep8pingnak_isr, _errorlimit_isr, _stub_isr, _stub_isr, _stub_isr, _ep2piderror_isr, _ep4piderror_isr, _ep6piderror_isr, _ep8piderror_isr
|
||||
.globl _ep2pflag_isr, _ep4pflag_isr, _ep6pflag_isr, _ep8pflag_isr, _ep2eflag_isr, _ep4eflag_isr, _ep6eflag_isr, _ep8eflag_isr, _ep2fflag_isr, _ep4fflag_isr, _ep6fflag_isr, _ep8fflag_isr, _gpifcomplete_isr, _gpifwaveform_isr
|
||||
|
||||
;--------------------------------------------------------------------------;
|
||||
; Interrupt Vectors ;
|
||||
;--------------------------------------------------------------------------;
|
||||
.area USB_JV (ABS,OVR) ; Absolute, Overlay
|
||||
.org 0x43 ; USB interrupt (INT2) jumps here
|
||||
USB_AutoVector = #. + 2
|
||||
ljmp USB_Jump_Table ; Autovector will replace byte 45
|
||||
|
||||
;--------------------------------------------------------------------------;
|
||||
; USB Jump Table ;
|
||||
;--------------------------------------------------------------------------;
|
||||
.area USB_JT (ABS) ; Absolute placement
|
||||
.org 0x0200 ; Place jump table at 0x0200
|
||||
|
||||
USB_Jump_Table: ; autovector jump table
|
||||
ljmp _sudav_isr ; (00) Setup Data Available
|
||||
.db 0
|
||||
ljmp _sof_isr ; (04) Start of Frame
|
||||
.db 0
|
||||
ljmp _sutok_isr ; (08) Setup Data Loading
|
||||
.db 0
|
||||
ljmp _suspend_isr ; (0C) Global Suspend
|
||||
.db 0
|
||||
ljmp _usbreset_isr ; (10) USB Reset
|
||||
.db 0
|
||||
ljmp _highspeed_isr ; (14) Entered High Speed
|
||||
.db 0
|
||||
ljmp _ep0ack_isr ; (18) EP0ACK
|
||||
.db 0
|
||||
ljmp _stub_isr ; (1C) Reserved
|
||||
.db 0
|
||||
ljmp _ep0in_isr ; (20) EP0 In
|
||||
.db 0
|
||||
ljmp _ep0out_isr ; (24) EP0 Out
|
||||
.db 0
|
||||
ljmp _ep1in_isr ; (28) EP1 In
|
||||
.db 0
|
||||
ljmp _ep1out_isr ; (2C) EP1 Out
|
||||
.db 0
|
||||
ljmp _ep2_isr ; (30) EP2 In/Out
|
||||
.db 0
|
||||
ljmp _ep4_isr ; (34) EP4 In/Out
|
||||
.db 0
|
||||
ljmp _ep6_isr ; (38) EP6 In/Out
|
||||
.db 0
|
||||
ljmp _ep8_isr ; (3C) EP8 In/Out
|
||||
.db 0
|
||||
ljmp _ibn_isr ; (40) IBN
|
||||
.db 0
|
||||
ljmp _stub_isr ; (44) Reserved
|
||||
.db 0
|
||||
ljmp _ep0pingnak_isr ; (48) EP0 PING NAK
|
||||
.db 0
|
||||
ljmp _ep1pingnak_isr ; (4C) EP1 PING NAK
|
||||
.db 0
|
||||
ljmp _ep2pingnak_isr ; (50) EP2 PING NAK
|
||||
.db 0
|
||||
ljmp _ep4pingnak_isr ; (54) EP4 PING NAK
|
||||
.db 0
|
||||
ljmp _ep6pingnak_isr ; (58) EP6 PING NAK
|
||||
.db 0
|
||||
ljmp _ep8pingnak_isr ; (5C) EP8 PING NAK
|
||||
.db 0
|
||||
ljmp _errorlimit_isr ; (60) Error Limit
|
||||
.db 0
|
||||
ljmp _stub_isr ; (64) Reserved
|
||||
.db 0
|
||||
ljmp _stub_isr ; (68) Reserved
|
||||
.db 0
|
||||
ljmp _stub_isr ; (6C) Reserved
|
||||
.db 0
|
||||
ljmp _ep2piderror_isr ; (70) EP2 ISO Pid Sequence Error
|
||||
.db 0
|
||||
ljmp _ep4piderror_isr ; (74) EP4 ISO Pid Sequence Error
|
||||
.db 0
|
||||
ljmp _ep6piderror_isr ; (78) EP6 ISO Pid Sequence Error
|
||||
.db 0
|
||||
ljmp _ep8piderror_isr ; (7C) EP8 ISO Pid Sequence Error
|
||||
.db 0
|
||||
ljmp _ep2pflag_isr ; (80) EP2 Programmable Flag
|
||||
.db 0
|
||||
ljmp _ep4pflag_isr ; (84) EP4 Programmable Flag
|
||||
.db 0
|
||||
ljmp _ep6pflag_isr ; (88) EP6 Programmable Flag
|
||||
.db 0
|
||||
ljmp _ep8pflag_isr ; (8C) EP8 Programmable Flag
|
||||
.db 0
|
||||
ljmp _ep2eflag_isr ; (90) EP2 Empty Flag
|
||||
.db 0
|
||||
ljmp _ep4eflag_isr ; (94) EP4 Empty Flag
|
||||
.db 0
|
||||
ljmp _ep6eflag_isr ; (98) EP6 Empty Flag
|
||||
.db 0
|
||||
ljmp _ep8eflag_isr ; (9C) EP8 Empty Flag
|
||||
.db 0
|
||||
ljmp _ep2fflag_isr ; (A0) EP2 Full Flag
|
||||
.db 0
|
||||
ljmp _ep4fflag_isr ; (A4) EP4 Full Flag
|
||||
.db 0
|
||||
ljmp _ep6fflag_isr ; (A8) EP6 Full Flag
|
||||
.db 0
|
||||
ljmp _ep8fflag_isr ; (AC) EP8 Full Flag
|
||||
.db 0
|
||||
ljmp _gpifcomplete_isr ; (B0) GPIF Operation Complete
|
||||
.db 0
|
||||
ljmp _gpifwaveform_isr ; (B4) GPIF Waveform
|
||||
.db 0
|
||||
49
contrib/firmware/angie/c/src/delay.c
Normal file
49
contrib/firmware/angie/c/src/delay.c
Normal file
@@ -0,0 +1,49 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/****************************************************************************
|
||||
File : delay.c *
|
||||
Contents : Delays handling fucntions code for NanoXplore *
|
||||
USB-JTAG ANGIE adapter hardware. *
|
||||
Based on openULINK project code by: Martin Schmoelzer. *
|
||||
Copyright 2023, Ahmed Errached BOUDJELIDA, NanoXplore SAS. *
|
||||
<aboudjelida@nanoxplore.com> *
|
||||
<ahmederrachedbjld@gmail.com> *
|
||||
*****************************************************************************/
|
||||
|
||||
#include "delay.h"
|
||||
#include <mcs51/compiler.h>
|
||||
|
||||
void syncdelay(uint8_t count)
|
||||
{
|
||||
for (uint8_t i = 0; i < count; i++)
|
||||
NOP();
|
||||
}
|
||||
|
||||
void delay_5us(void)
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
|
||||
void delay_1ms(void)
|
||||
{
|
||||
uint16_t i;
|
||||
|
||||
for (i = 0; i < 598; i++)
|
||||
;
|
||||
}
|
||||
|
||||
void delay_us(uint16_t delay)
|
||||
{
|
||||
uint16_t i;
|
||||
uint16_t maxcount = (delay / 5);
|
||||
|
||||
for (i = 0; i < maxcount; i++)
|
||||
delay_5us();
|
||||
}
|
||||
|
||||
void delay_ms(uint16_t delay)
|
||||
{
|
||||
uint16_t i;
|
||||
|
||||
for (i = 0; i < delay; i++)
|
||||
delay_1ms();
|
||||
}
|
||||
98
contrib/firmware/angie/c/src/gpif.c
Normal file
98
contrib/firmware/angie/c/src/gpif.c
Normal file
@@ -0,0 +1,98 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*
|
||||
This program configures the General Programmable Interface (GPIF) for FX2.
|
||||
Please do not modify sections of text which are marked as "DO NOT EDIT ...".
|
||||
*/
|
||||
|
||||
/* GPIF Program Code */
|
||||
|
||||
#include "reg_ezusb.h"
|
||||
#include "delay.h"
|
||||
|
||||
/****************************** GPIF PROGRAM CODE ********************************/
|
||||
/* DO NOT EDIT ... */
|
||||
const char wavedata[128] = {
|
||||
// Wave 0
|
||||
/* LenBr */ 0x01, 0x3F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07,
|
||||
/* Opcode*/ 0x02, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
|
||||
/* Output*/ 0x04, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
||||
/* LFun */ 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
|
||||
// Wave 1
|
||||
/* LenBr */ 0x01, 0x3F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07,
|
||||
/* Opcode*/ 0x02, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00,
|
||||
/* Output*/ 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
|
||||
/* LFun */ 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
|
||||
// Wave 2
|
||||
/* LenBr */ 0x01, 0xBF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07,
|
||||
/* Opcode*/ 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* Output*/ 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
|
||||
/* LFun */ 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
|
||||
// Wave 3
|
||||
/* LenBr */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07,
|
||||
/* Opcode*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* Output*/ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
|
||||
/* LFun */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
|
||||
};
|
||||
/* END DO NOT EDIT */
|
||||
|
||||
/* DO NOT EDIT ... */
|
||||
const char flowstates[36] = {
|
||||
/* Wave 0 flowstates */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* Wave 1 flowstates */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* Wave 2 flowstates */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* Wave 3 flowstates */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
/* END DO NOT EDIT */
|
||||
|
||||
/* DO NOT EDIT ... */
|
||||
const char initdata[7] = {
|
||||
/* Regs */ 0xE0, 0x00, 0x00, 0x03, 0xEE, 0xF1, 0x00
|
||||
};
|
||||
/* END DO NOT EDIT */
|
||||
|
||||
void gpif_init(void)
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
IFCONFIG = 0xEE;
|
||||
|
||||
GPIFABORT = 0xFF; /* abort any waveforms pending */
|
||||
GPIFREADYCFG = initdata[0];
|
||||
GPIFCTLCFG = initdata[1];
|
||||
GPIFIDLECS = initdata[2];
|
||||
GPIFIDLECTL = initdata[3];
|
||||
GPIFWFSELECT = initdata[5];
|
||||
GPIFREADYSTAT = initdata[6];
|
||||
|
||||
/* use dual autopointer feature... */
|
||||
AUTOPTRSETUP = 0x07;
|
||||
|
||||
/* source */
|
||||
AUTOPTRH1 = (uint8_t)(((uint16_t)(&wavedata) >> 8) & 0xff);
|
||||
AUTOPTRL1 = (uint8_t)((uint16_t)(&wavedata) & 0xff);
|
||||
|
||||
/* destination */
|
||||
AUTOPTRH2 = 0xE4;
|
||||
AUTOPTRL2 = 0x00;
|
||||
|
||||
/* transfer */
|
||||
for (i = 0x00; i < 128; i++)
|
||||
EXTAUTODAT2 = EXTAUTODAT1;
|
||||
|
||||
/* GPIF address pins update when GPIFADRH/L written */
|
||||
syncdelay(3);
|
||||
GPIFADRH = 0x00; /* bits[7:1] always 0 */
|
||||
syncdelay(3);
|
||||
GPIFADRL = 0x00; /* point to PERIPHERAL address 0x0000 */
|
||||
|
||||
/* Configure GPIF flowstates registers for Wave 0 of wavedata */
|
||||
FLOWSTATE = flowstates[0];
|
||||
FLOWLOGIC = flowstates[1];
|
||||
FLOWEQ0CTL = flowstates[2];
|
||||
FLOWEQ1CTL = flowstates[3];
|
||||
FLOWHOLDOFF = flowstates[4];
|
||||
FLOWSTB = flowstates[5];
|
||||
FLOWSTBEDGE = flowstates[6];
|
||||
FLOWSTBHPERIOD = flowstates[7];
|
||||
}
|
||||
154
contrib/firmware/angie/c/src/i2c.c
Normal file
154
contrib/firmware/angie/c/src/i2c.c
Normal file
@@ -0,0 +1,154 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/****************************************************************************
|
||||
File : i2c.cpp *
|
||||
Contents : i2c bit-bang library *
|
||||
Copyright 2023, Ahmed Errached BOUDJELIDA, NanoXplore SAS. *
|
||||
<aboudjelida@nanoxplore.com> *
|
||||
<ahmederrachedbjld@gmail.com> *
|
||||
*****************************************************************************/
|
||||
|
||||
#include "i2c.h"
|
||||
#include "io.h"
|
||||
#include "delay.h"
|
||||
#include "reg_ezusb.h"
|
||||
|
||||
bool get_status(void)
|
||||
{
|
||||
PIN_SDA_DIR = 1;
|
||||
OEA = 0xF7;
|
||||
delay_us(1);
|
||||
bool sda_state = PIN_SDA;
|
||||
PIN_T0 = sda_state;
|
||||
delay_us(1);
|
||||
OEA = 0xFF;
|
||||
delay_us(1);
|
||||
return sda_state;
|
||||
}
|
||||
|
||||
void start_cd(void)
|
||||
{
|
||||
PIN_SDA_DIR = 0; // SP6 SDA: OUT
|
||||
delay_us(10);
|
||||
PIN_SDA = 0;
|
||||
delay_us(1);
|
||||
PIN_SCL = 0;
|
||||
delay_us(1);
|
||||
}
|
||||
|
||||
void repeated_start(void)
|
||||
{
|
||||
PIN_SDA = 1;
|
||||
delay_us(1);
|
||||
PIN_SCL = 1;
|
||||
delay_us(1);
|
||||
PIN_SDA = 0;
|
||||
delay_us(1);
|
||||
PIN_SCL = 0;
|
||||
delay_us(1);
|
||||
}
|
||||
|
||||
void stop_cd(void)
|
||||
{
|
||||
PIN_SDA = 0;
|
||||
delay_us(1);
|
||||
PIN_SCL = 1;
|
||||
delay_us(1);
|
||||
PIN_SDA = 1;
|
||||
delay_us(1);
|
||||
PIN_SDA_DIR = 1; // SP6 SDA: IN
|
||||
delay_us(1);
|
||||
}
|
||||
|
||||
void clock_cd(void)
|
||||
{
|
||||
PIN_SCL = 1;
|
||||
delay_us(1);
|
||||
PIN_SCL = 0;
|
||||
delay_us(1);
|
||||
}
|
||||
|
||||
void send_ack(void)
|
||||
{
|
||||
PIN_SDA = 0;
|
||||
delay_us(1);
|
||||
PIN_SCL = 1;
|
||||
delay_us(1);
|
||||
PIN_SCL = 0;
|
||||
delay_us(1);
|
||||
}
|
||||
|
||||
void send_nack(void)
|
||||
{
|
||||
PIN_SDA = 1;
|
||||
delay_us(1);
|
||||
PIN_SCL = 1;
|
||||
delay_us(1);
|
||||
PIN_SCL = 0;
|
||||
delay_us(1);
|
||||
}
|
||||
|
||||
bool get_ack(void)
|
||||
{
|
||||
PIN_SDA_DIR = 1; // SP6 SDA: IN
|
||||
delay_us(1);
|
||||
OEA = 0xF7; // FX2 SDA: IN
|
||||
PIN_SCL = 1;
|
||||
delay_us(1);
|
||||
bool ack = PIN_SDA;
|
||||
PIN_SCL = 0;
|
||||
delay_us(1);
|
||||
OEA = 0xFF; // FX2 SDA: OUT
|
||||
PIN_SDA_DIR = 0; // SP6 SDA: OUT
|
||||
delay_us(1);
|
||||
return ack;
|
||||
}
|
||||
|
||||
/* here address(8 bits) = adr (7 bits) + type (1 bit) */
|
||||
uint8_t get_address(uint8_t adr, uint8_t rdwr)
|
||||
{
|
||||
adr &= 0x7F;
|
||||
adr = adr << 1;
|
||||
adr |= (rdwr & 0x01);
|
||||
return adr;
|
||||
}
|
||||
|
||||
/* here send bit after bit and clocking scl with each bit */
|
||||
void send_byte(uint8_t input)
|
||||
{
|
||||
for (uint8_t i = 0; i < 8; i++) {
|
||||
if ((input & 0x80)) {
|
||||
PIN_SDA = 1;
|
||||
delay_us(1);
|
||||
clock_cd();
|
||||
} else {
|
||||
PIN_SDA = 0;
|
||||
delay_us(1);
|
||||
clock_cd();
|
||||
}
|
||||
input = input << 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* here receive bit after bit and clocking scl with each bit */
|
||||
|
||||
uint8_t receive_byte(void)
|
||||
{
|
||||
PIN_SDA_DIR = 1; // SP6 SDA: IN
|
||||
OEA = 0xF7; // FX2 SDA: IN
|
||||
uint8_t input = 0x00;
|
||||
for (uint8_t i = 0; i < 8; i++) {
|
||||
PIN_SCL = 1;
|
||||
delay_us(1);
|
||||
input = input << 1;
|
||||
if (PIN_SDA == 1)
|
||||
input |= 0x01;
|
||||
else
|
||||
input |= 0X00;
|
||||
|
||||
PIN_SCL = 0;
|
||||
delay_us(1);
|
||||
}
|
||||
OEA = 0xFF; // FX2 SDA: OUT
|
||||
PIN_SDA_DIR = 0; // SP6 SDA: OUT
|
||||
return input;
|
||||
}
|
||||
82
contrib/firmware/angie/c/src/main.c
Normal file
82
contrib/firmware/angie/c/src/main.c
Normal file
@@ -0,0 +1,82 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/****************************************************************************
|
||||
File : main.c *
|
||||
Contents : main code for NanoXplore USB-JTAG ANGIE adapter *
|
||||
hardware. *
|
||||
Based on openULINK project code by: Martin Schmoelzer. *
|
||||
Copyright 2023, Ahmed Errached BOUDJELIDA, NanoXplore SAS. *
|
||||
<aboudjelida@nanoxplore.com> *
|
||||
<ahmederrachedbjld@gmail.com> *
|
||||
*****************************************************************************/
|
||||
|
||||
#include "usb.h"
|
||||
#include "serial.h"
|
||||
#include "delay.h"
|
||||
#include "reg_ezusb.h"
|
||||
#include <stdio.h>
|
||||
|
||||
extern void sudav_isr(void)__interrupt SUDAV_ISR;
|
||||
extern void sof_isr(void)__interrupt;
|
||||
extern void sutok_isr(void)__interrupt;
|
||||
extern void suspend_isr(void)__interrupt;
|
||||
extern void usbreset_isr(void)__interrupt;
|
||||
extern void highspeed_isr(void)__interrupt;
|
||||
extern void ep0ack_isr(void)__interrupt;
|
||||
extern void stub_isr(void)__interrupt;
|
||||
extern void ep0in_isr(void)__interrupt;
|
||||
extern void ep0out_isr(void)__interrupt;
|
||||
extern void ep1in_isr(void)__interrupt;
|
||||
extern void ep1out_isr(void)__interrupt;
|
||||
extern void ep2_isr(void)__interrupt;
|
||||
extern void ep4_isr(void)__interrupt;
|
||||
extern void ep6_isr(void)__interrupt;
|
||||
extern void ep8_isr(void)__interrupt;
|
||||
extern void ibn_isr(void)__interrupt;
|
||||
extern void ep0pingnak_isr(void)__interrupt;
|
||||
extern void ep1pingnak_isr(void)__interrupt;
|
||||
extern void ep2pingnak_isr(void)__interrupt;
|
||||
extern void ep4pingnak_isr(void)__interrupt;
|
||||
extern void ep6pingnak_isr(void)__interrupt;
|
||||
extern void ep8pingnak_isr(void)__interrupt;
|
||||
extern void errorlimit_isr(void)__interrupt;
|
||||
extern void ep2piderror_isr(void)__interrupt;
|
||||
extern void ep4piderror_isr(void)__interrupt;
|
||||
extern void ep6piderror_isr(void)__interrupt;
|
||||
extern void ep8piderror_isr(void)__interrupt;
|
||||
extern void ep2pflag_isr(void)__interrupt;
|
||||
extern void ep4pflag_isr(void)__interrupt;
|
||||
extern void ep6pflag_isr(void)__interrupt;
|
||||
extern void ep8pflag_isr(void)__interrupt;
|
||||
extern void ep2eflag_isr(void)__interrupt;
|
||||
extern void ep4eflag_isr(void)__interrupt;
|
||||
extern void ep6eflag_isr(void)__interrupt;
|
||||
extern void ep8eflag_isr(void)__interrupt;
|
||||
extern void ep2fflag_isr(void)__interrupt;
|
||||
extern void ep4fflag_isr(void)__interrupt;
|
||||
extern void ep6fflag_isr(void)__interrupt;
|
||||
extern void ep8fflag_isr(void)__interrupt;
|
||||
extern void gpifcomplete_isr(void)__interrupt;
|
||||
extern void gpifwaveform_isr(void)__interrupt;
|
||||
|
||||
void gpif_init(void);
|
||||
|
||||
int main(void)
|
||||
{
|
||||
CPUCS = ((CPUCS & ~bmclkspd) | (CLK_48M << 3) | CLKOE); /* required for sio0_init */
|
||||
sio0_init(115200); /* needed for printf */
|
||||
|
||||
ep_init();
|
||||
gpif_init();
|
||||
interrupt_init();
|
||||
io_init();
|
||||
|
||||
/* Perform ReNumeration */
|
||||
USBCS |= (DISCON | RENUM);
|
||||
delay_ms(50);
|
||||
USBCS &= ~DISCON;
|
||||
|
||||
/* stay here */
|
||||
while (1)
|
||||
;
|
||||
}
|
||||
77
contrib/firmware/angie/c/src/serial.c
Normal file
77
contrib/firmware/angie/c/src/serial.c
Normal file
@@ -0,0 +1,77 @@
|
||||
// SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
|
||||
/*
|
||||
* This code was taken from the fx2lib project from this link:
|
||||
* https://github.com/djmuhlestein/fx2lib
|
||||
*
|
||||
* Copyright (C) 2009 Ubixum, Inc.
|
||||
*/
|
||||
|
||||
#include <reg_ezusb.h>
|
||||
#include <fx2macros.h>
|
||||
#include <serial.h>
|
||||
#include <stdint.h>
|
||||
/**
|
||||
* using the comp port implies that timer 2 will be used as
|
||||
* a baud rate generator. (Don't use timer 2)
|
||||
**/
|
||||
void sio0_init(uint32_t baud_rate) __critical
|
||||
{
|
||||
uint16_t hl; /* hl value for reload */
|
||||
uint8_t mult; /* multiplier for clock speed */
|
||||
uint32_t tmp; /* scratch for mult/divide */
|
||||
|
||||
mult = (CPUFREQ == CLK_12M) ? 1 : ((CPUFREQ == CLK_24M) ? 2 : 4);
|
||||
|
||||
/* set the clock rate */
|
||||
/* use clock 2 */
|
||||
RCLK = 1; TCLK = 1;
|
||||
tmp = mult * 375000L * 2;
|
||||
tmp /= baud_rate;
|
||||
tmp += 1;
|
||||
tmp /= 2;
|
||||
hl = 0xFFFF - (uint16_t)tmp;
|
||||
RCAP2H = (uint8_t)(((uint16_t)(hl) >> 8) & 0xff);
|
||||
|
||||
/* seems that the 24/48mhz calculations are always one less than suggested values */
|
||||
/* trm table 14-16 */
|
||||
RCAP2L = ((uint8_t)((uint16_t)(hl) & 0xff)) + (mult > 0 ? 1 : 0);
|
||||
|
||||
/* start the timer */
|
||||
TR2 = 1;
|
||||
|
||||
/* set up the serial port */
|
||||
SM0 = 0; SM1 = 1; /* serial mode 1 (asyncronous) */
|
||||
SM2 = 0 ; /* has to do with receiving */
|
||||
REN = 1 ; /* to enable receiving */
|
||||
PCON |= 0x80; /* SET SMOD0, baud rate doubler */
|
||||
TI = 1; /* we send initial byte */
|
||||
}
|
||||
|
||||
int getchar(void)
|
||||
{
|
||||
char c;
|
||||
while (!RI)
|
||||
;
|
||||
c = SBUF0;
|
||||
RI = 0;
|
||||
return c;
|
||||
}
|
||||
|
||||
void _transchar(char c)
|
||||
{
|
||||
while (!TI)
|
||||
; /* wait for TI=1 */
|
||||
TI = 0;
|
||||
SBUF0 = c;
|
||||
}
|
||||
|
||||
int putchar (char c)
|
||||
{
|
||||
if (c == '\n')
|
||||
_transchar('\r'); /* transmit \r\n */
|
||||
_transchar(c);
|
||||
if (c == '\r')
|
||||
_transchar('\n'); /* transmit \r\n */
|
||||
return c;
|
||||
}
|
||||
857
contrib/firmware/angie/c/src/usb.c
Normal file
857
contrib/firmware/angie/c/src/usb.c
Normal file
@@ -0,0 +1,857 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/****************************************************************************
|
||||
File : usb.c *
|
||||
Contents : usb communication handling code for NanoXplore USB-JTAG *
|
||||
ANGIE adapter hardware. *
|
||||
Based on openULINK project code by: Martin Schmoelzer. *
|
||||
Copyright 2023, Ahmed Errached BOUDJELIDA, NanoXplore SAS. *
|
||||
<aboudjelida@nanoxplore.com> *
|
||||
<ahmederrachedbjld@gmail.com> *
|
||||
*****************************************************************************/
|
||||
|
||||
#include "usb.h"
|
||||
#include "delay.h"
|
||||
#include "io.h"
|
||||
#include "reg_ezusb.h"
|
||||
#include "fx2macros.h"
|
||||
#include "serial.h"
|
||||
#include "i2c.h"
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
// #define PRINTF_DEBUG
|
||||
|
||||
volatile __xdata __at 0xE6B8 struct setup_data setup_data;
|
||||
|
||||
/* Define number of endpoints (except Control Endpoint 0) in a central place.
|
||||
* Be sure to include the necessary endpoint descriptors!
|
||||
*/
|
||||
#define NUM_ENDPOINTS 2
|
||||
|
||||
__code struct usb_device_descriptor device_descriptor = {
|
||||
.blength = sizeof(struct usb_device_descriptor),
|
||||
.bdescriptortype = DESCRIPTOR_TYPE_DEVICE,
|
||||
.bcdusb = 0x0200, /* BCD: 02.00 (Version 2.0 USB spec) */
|
||||
.bdeviceclass = 0xEF,
|
||||
.bdevicesubclass = 0x02,
|
||||
.bdeviceprotocol = 0x01,
|
||||
.bmaxpacketsize0 = 64,
|
||||
.idvendor = 0x584e,
|
||||
.idproduct = 0x414f,
|
||||
.bcddevice = 0x0000,
|
||||
.imanufacturer = 1,
|
||||
.iproduct = 2,
|
||||
.iserialnumber = 3,
|
||||
.bnumconfigurations = 1
|
||||
};
|
||||
|
||||
/* WARNING: ALL config, interface and endpoint descriptors MUST be adjacent! */
|
||||
__code struct usb_config_descriptor config_descriptor = {
|
||||
.blength = sizeof(struct usb_config_descriptor),
|
||||
.bdescriptortype = DESCRIPTOR_TYPE_CONFIGURATION,
|
||||
.wtotallength = sizeof(struct usb_config_descriptor) +
|
||||
2 * sizeof(struct usb_interface_descriptor) +
|
||||
((NUM_ENDPOINTS * 2) * sizeof(struct usb_endpoint_descriptor)),
|
||||
.bnuminterfaces = 2,
|
||||
.bconfigurationvalue = 1,
|
||||
.iconfiguration = 2, /* String describing this configuration */
|
||||
.bmattributes = 0x80, /* Only MSB set according to USB spec */
|
||||
.maxpower = 50 /* 100 mA */
|
||||
};
|
||||
|
||||
__code struct usb_interface_descriptor interface_descriptor00 = {
|
||||
.blength = sizeof(struct usb_interface_descriptor),
|
||||
.bdescriptortype = DESCRIPTOR_TYPE_INTERFACE,
|
||||
.binterfacenumber = 0,
|
||||
.balternatesetting = 0,
|
||||
.bnumendpoints = NUM_ENDPOINTS,
|
||||
.binterfaceclass = 0XFF,
|
||||
.binterfacesubclass = 0x00,
|
||||
.binterfaceprotocol = 0x00,
|
||||
.iinterface = 0
|
||||
};
|
||||
|
||||
__code struct usb_endpoint_descriptor bulk_ep2_endpoint_descriptor = {
|
||||
.blength = sizeof(struct usb_endpoint_descriptor),
|
||||
.bdescriptortype = 0x05,
|
||||
.bendpointaddress = (2 | USB_DIR_OUT),
|
||||
.bmattributes = 0x02,
|
||||
.wmaxpacketsize = 512,
|
||||
.binterval = 0
|
||||
};
|
||||
|
||||
__code struct usb_endpoint_descriptor bulk_ep4_endpoint_descriptor = {
|
||||
.blength = sizeof(struct usb_endpoint_descriptor),
|
||||
.bdescriptortype = 0x05,
|
||||
.bendpointaddress = (4 | USB_DIR_IN),
|
||||
.bmattributes = 0x02,
|
||||
.wmaxpacketsize = 512,
|
||||
.binterval = 0
|
||||
};
|
||||
|
||||
__code struct usb_interface_descriptor interface_descriptor01 = {
|
||||
.blength = sizeof(struct usb_interface_descriptor),
|
||||
.bdescriptortype = DESCRIPTOR_TYPE_INTERFACE,
|
||||
.binterfacenumber = 1,
|
||||
.balternatesetting = 0,
|
||||
.bnumendpoints = NUM_ENDPOINTS,
|
||||
.binterfaceclass = 0x0A,
|
||||
.binterfacesubclass = 0x00,
|
||||
.binterfaceprotocol = 0x00,
|
||||
.iinterface = 0
|
||||
};
|
||||
|
||||
__code struct usb_endpoint_descriptor bulk_ep6_out_endpoint_descriptor = {
|
||||
.blength = sizeof(struct usb_endpoint_descriptor),
|
||||
.bdescriptortype = 0x05,
|
||||
.bendpointaddress = (6 | USB_DIR_OUT),
|
||||
.bmattributes = 0x02,
|
||||
.wmaxpacketsize = 512,
|
||||
.binterval = 0
|
||||
};
|
||||
|
||||
__code struct usb_endpoint_descriptor bulk_ep8_in_endpoint_descriptor = {
|
||||
.blength = sizeof(struct usb_endpoint_descriptor),
|
||||
.bdescriptortype = 0x05,
|
||||
.bendpointaddress = (8 | USB_DIR_IN),
|
||||
.bmattributes = 0x02,
|
||||
.wmaxpacketsize = 512,
|
||||
.binterval = 0
|
||||
};
|
||||
__code struct usb_language_descriptor language_descriptor = {
|
||||
.blength = 4,
|
||||
.bdescriptortype = DESCRIPTOR_TYPE_STRING,
|
||||
.wlangid = 0x0409 /* US English */
|
||||
};
|
||||
|
||||
__code struct usb_string_descriptor strmanufacturer =
|
||||
STR_DESCR(16, 'N', 'a', 'n', 'o', 'X', 'p', 'l', 'o', 'r', 'e', ',', ' ', 'S', 'A', 'S', '.');
|
||||
|
||||
__code struct usb_string_descriptor strproduct =
|
||||
STR_DESCR(13, 'A', 'N', 'G', 'I', 'E', ' ', 'A', 'd', 'a', 'p', 't', 'e', 'r');
|
||||
|
||||
__code struct usb_string_descriptor strserialnumber =
|
||||
STR_DESCR(6, '0', '0', '0', '0', '0', '1');
|
||||
|
||||
/* Table containing pointers to string descriptors */
|
||||
__code struct usb_string_descriptor *__code en_string_descriptors[3] = {
|
||||
&strmanufacturer,
|
||||
&strproduct,
|
||||
&strserialnumber
|
||||
};
|
||||
void sudav_isr(void)__interrupt SUDAV_ISR
|
||||
{
|
||||
EXIF &= ~0x10; /* Clear USBINT: Main global interrupt */
|
||||
USBIRQ = SUDAVI;
|
||||
EP0CS |= HSNAK;
|
||||
usb_handle_setup_data();
|
||||
}
|
||||
void sof_isr(void)__interrupt SOF_ISR
|
||||
{
|
||||
}
|
||||
void sutok_isr(void)__interrupt SUTOK_ISR
|
||||
{
|
||||
}
|
||||
void suspend_isr(void)__interrupt SUSPEND_ISR
|
||||
{
|
||||
}
|
||||
void usbreset_isr(void)__interrupt USBRESET_ISR
|
||||
{
|
||||
}
|
||||
void highspeed_isr(void)__interrupt HIGHSPEED_ISR
|
||||
{
|
||||
}
|
||||
void ep0ack_isr(void)__interrupt EP0ACK_ISR
|
||||
{
|
||||
}
|
||||
void stub_isr(void)__interrupt STUB_ISR
|
||||
{
|
||||
}
|
||||
void ep0in_isr(void)__interrupt EP0IN_ISR
|
||||
{
|
||||
}
|
||||
void ep0out_isr(void)__interrupt EP0OUT_ISR
|
||||
{
|
||||
}
|
||||
void ep1in_isr(void)__interrupt EP1IN_ISR
|
||||
{
|
||||
}
|
||||
void ep1out_isr(void)__interrupt EP1OUT_ISR
|
||||
{
|
||||
}
|
||||
void ep2_isr(void)__interrupt EP2_ISR
|
||||
{
|
||||
}
|
||||
void ep4_isr(void)__interrupt EP4_ISR
|
||||
{
|
||||
}
|
||||
void ep6_isr(void)__interrupt EP6_ISR
|
||||
{
|
||||
REVCTL = 0; /* REVCTL.0 and REVCTL.1 set to 0 */
|
||||
i2c_recieve(); /* Execute I2C communication */
|
||||
EXIF &= ~0x10; /* Clear USBINT: Main global interrupt */
|
||||
EPIRQ = 0x40; /* Clear individual EP6OUT IRQ */
|
||||
}
|
||||
void ep8_isr(void)__interrupt EP8_ISR
|
||||
{
|
||||
EXIF &= ~0x10; /* Clear USBINT: Main global interrupt */
|
||||
EPIRQ = 0x80; /* Clear individual EP8IN IRQ */
|
||||
}
|
||||
void ibn_isr(void)__interrupt IBN_ISR
|
||||
{
|
||||
}
|
||||
void ep0pingnak_isr(void)__interrupt EP0PINGNAK_ISR
|
||||
{
|
||||
}
|
||||
void ep1pingnak_isr(void)__interrupt EP1PINGNAK_ISR
|
||||
{
|
||||
}
|
||||
void ep2pingnak_isr(void)__interrupt EP2PINGNAK_ISR
|
||||
{
|
||||
}
|
||||
void ep4pingnak_isr(void)__interrupt EP4PINGNAK_ISR
|
||||
{
|
||||
}
|
||||
void ep6pingnak_isr(void)__interrupt EP6PINGNAK_ISR
|
||||
{
|
||||
}
|
||||
void ep8pingnak_isr(void)__interrupt EP8PINGNAK_ISR
|
||||
{
|
||||
}
|
||||
void errorlimit_isr(void)__interrupt ERRORLIMIT_ISR
|
||||
{
|
||||
}
|
||||
void ep2piderror_isr(void)__interrupt EP2PIDERROR_ISR
|
||||
{
|
||||
}
|
||||
void ep4piderror_isr(void)__interrupt EP4PIDERROR_ISR
|
||||
{
|
||||
}
|
||||
void ep6piderror_isr(void)__interrupt EP6PIDERROR_ISR
|
||||
{
|
||||
}
|
||||
void ep8piderror_isr(void)__interrupt EP8PIDERROR_ISR
|
||||
{
|
||||
}
|
||||
void ep2pflag_isr(void)__interrupt EP2PFLAG_ISR
|
||||
{
|
||||
}
|
||||
void ep4pflag_isr(void)__interrupt EP4PFLAG_ISR
|
||||
{
|
||||
}
|
||||
void ep6pflag_isr(void)__interrupt EP6PFLAG_ISR
|
||||
{
|
||||
}
|
||||
void ep8pflag_isr(void)__interrupt EP8PFLAG_ISR
|
||||
{
|
||||
}
|
||||
void ep2eflag_isr(void)__interrupt EP2EFLAG_ISR
|
||||
{
|
||||
}
|
||||
void ep4eflag_isr(void)__interrupt EP4EFLAG_ISR
|
||||
{
|
||||
}
|
||||
void ep6eflag_isr(void)__interrupt EP6EFLAG_ISR
|
||||
{
|
||||
}
|
||||
void ep8eflag_isr(void)__interrupt EP8EFLAG_ISR
|
||||
{
|
||||
}
|
||||
void ep2fflag_isr(void)__interrupt EP2FFLAG_ISR
|
||||
{
|
||||
}
|
||||
void ep4fflag_isr(void)__interrupt EP4FFLAG_ISR
|
||||
{
|
||||
}
|
||||
void ep6fflag_isr(void)__interrupt EP6FFLAG_ISR
|
||||
{
|
||||
}
|
||||
void ep8fflag_isr(void)__interrupt EP8FFLAG_ISR
|
||||
{
|
||||
}
|
||||
void gpifcomplete_isr(void)__interrupt GPIFCOMPLETE_ISR
|
||||
{
|
||||
}
|
||||
void gpifwaveform_isr(void)__interrupt GPIFWAVEFORM_ISR
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the control/status register for an endpoint
|
||||
*
|
||||
* @param ep endpoint address
|
||||
* @return on success: pointer to Control & Status register for endpoint
|
||||
* specified in \a ep
|
||||
* @return on failure: NULL
|
||||
*/
|
||||
__xdata uint8_t *usb_get_endpoint_cs_reg(uint8_t ep)
|
||||
{
|
||||
/* Mask direction bit */
|
||||
uint8_t ep_num = ep & ~0x80;
|
||||
|
||||
switch (ep_num) {
|
||||
case 0:
|
||||
return &EP0CS;
|
||||
case 1:
|
||||
return ep & 0x80 ? &EP1INCS : &EP1OUTCS;
|
||||
case 2:
|
||||
return &EP2CS;
|
||||
case 4:
|
||||
return &EP4CS;
|
||||
case 6:
|
||||
return &EP6CS;
|
||||
case 8:
|
||||
return &EP8CS;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void usb_reset_data_toggle(uint8_t ep)
|
||||
{
|
||||
/* TOGCTL register:
|
||||
+----+-----+-----+------+-----+-------+-------+-------+
|
||||
| Q | S | R | IO | EP3 | EP2 | EP1 | EP0 |
|
||||
+----+-----+-----+------+-----+-------+-------+-------+
|
||||
|
||||
To reset data toggle bits, we have to write the endpoint direction (IN/OUT)
|
||||
to the IO bit and the endpoint number to the EP2..EP0 bits. Then, in a
|
||||
separate write cycle, the R bit needs to be set.
|
||||
*/
|
||||
TOGCTL = (((ep & 0x80) >> 3) + (ep & 0x0F));
|
||||
TOGCTL |= BMRESETTOGGLE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle CLEAR_FEATURE request.
|
||||
*
|
||||
* @return on success: true
|
||||
* @return on failure: false
|
||||
*/
|
||||
bool usb_handle_clear_feature(void)
|
||||
{
|
||||
__xdata uint8_t *ep_cs;
|
||||
|
||||
switch (setup_data.bmrequesttype) {
|
||||
case CF_DEVICE:
|
||||
/* Clear remote wakeup not supported: stall EP0 */
|
||||
STALL_EP0();
|
||||
break;
|
||||
case CF_ENDPOINT:
|
||||
if (setup_data.wvalue == 0) {
|
||||
/* Unstall the endpoint specified in wIndex */
|
||||
ep_cs = usb_get_endpoint_cs_reg(setup_data.windex);
|
||||
if (!ep_cs)
|
||||
return false;
|
||||
*ep_cs &= ~EPSTALL;
|
||||
} else {
|
||||
/* Unsupported feature, stall EP0 */
|
||||
STALL_EP0();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* Vendor commands... */
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle SET_FEATURE request.
|
||||
*
|
||||
* @return on success: true
|
||||
* @return on failure: false
|
||||
*/
|
||||
bool usb_handle_set_feature(void)
|
||||
{
|
||||
__xdata uint8_t *ep_cs;
|
||||
|
||||
switch (setup_data.bmrequesttype) {
|
||||
case SF_DEVICE:
|
||||
if (setup_data.wvalue == 2)
|
||||
return true;
|
||||
break;
|
||||
case SF_ENDPOINT:
|
||||
if (setup_data.wvalue == 0) {
|
||||
/* Stall the endpoint specified in wIndex */
|
||||
ep_cs = usb_get_endpoint_cs_reg(setup_data.windex);
|
||||
if (!ep_cs)
|
||||
return false;
|
||||
*ep_cs |= EPSTALL;
|
||||
} else {
|
||||
/* Unsupported endpoint feature */
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* Vendor commands... */
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle GET_DESCRIPTOR request.
|
||||
*
|
||||
* @return on success: true
|
||||
* @return on failure: false
|
||||
*/
|
||||
bool usb_handle_get_descriptor(void)
|
||||
{
|
||||
__xdata uint8_t descriptor_type;
|
||||
__xdata uint8_t descriptor_index;
|
||||
|
||||
descriptor_type = (setup_data.wvalue & 0xff00) >> 8;
|
||||
descriptor_index = setup_data.wvalue & 0x00ff;
|
||||
|
||||
switch (descriptor_type) {
|
||||
case DESCRIPTOR_TYPE_DEVICE:
|
||||
SUDPTRH = HI8(&device_descriptor);
|
||||
SUDPTRL = LO8(&device_descriptor);
|
||||
break;
|
||||
case DESCRIPTOR_TYPE_CONFIGURATION:
|
||||
SUDPTRH = HI8(&config_descriptor);
|
||||
SUDPTRL = LO8(&config_descriptor);
|
||||
break;
|
||||
case DESCRIPTOR_TYPE_STRING:
|
||||
if (setup_data.windex == 0) {
|
||||
/* Supply language descriptor */
|
||||
__xdata struct usb_language_descriptor temp_descriptor;
|
||||
memcpy(&temp_descriptor, &language_descriptor, sizeof(language_descriptor));
|
||||
SUDPTRH = HI8(&temp_descriptor);
|
||||
SUDPTRL = LO8(&temp_descriptor);
|
||||
} else if (setup_data.windex == 0x0409 /* US English */) {
|
||||
/* Supply string descriptor */
|
||||
__xdata uint8_t temp_descriptors[3];
|
||||
memcpy(temp_descriptors, en_string_descriptors[descriptor_index - 1],
|
||||
((struct usb_string_descriptor *)en_string_descriptors[descriptor_index - 1])->blength);
|
||||
SUDPTRH = HI8(temp_descriptors);
|
||||
SUDPTRL = LO8(temp_descriptors);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* Unsupported descriptor type */
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle SET_INTERFACE request.
|
||||
*/
|
||||
void usb_handle_set_interface(void)
|
||||
{
|
||||
/* Reset Data Toggle */
|
||||
usb_reset_data_toggle(USB_DIR_OUT | 2);
|
||||
usb_reset_data_toggle(USB_DIR_IN | 4);
|
||||
usb_reset_data_toggle(USB_DIR_OUT | 6);
|
||||
usb_reset_data_toggle(USB_DIR_IN | 8);
|
||||
|
||||
/* Unstall all valid OUT endpoints, reset bytecounts */
|
||||
EP2CS = 0;
|
||||
EP4CS = 0;
|
||||
EP6CS = 0;
|
||||
EP8CS = 0;
|
||||
syncdelay(3);
|
||||
EP2BCH = 0;
|
||||
EP2BCL = 0x80;
|
||||
syncdelay(3);
|
||||
EP4BCH = 0;
|
||||
EP4BCL = 0x80;
|
||||
syncdelay(3);
|
||||
EP6BCH = 0;
|
||||
EP6BCL = 0x80;
|
||||
syncdelay(3);
|
||||
EP8BCH = 0;
|
||||
EP8BCL = 0x80;
|
||||
syncdelay(3);
|
||||
}
|
||||
|
||||
/* Initialize GPIF interface transfer count */
|
||||
void set_gpif_cnt(uint32_t count)
|
||||
{
|
||||
GPIFTCB3 = (uint8_t)(((uint32_t)(count) >> 24) & 0x000000ff);
|
||||
syncdelay(3);
|
||||
GPIFTCB2 = (uint8_t)(((uint32_t)(count) >> 16) & 0x000000ff);
|
||||
syncdelay(3);
|
||||
GPIFTCB1 = (uint8_t)(((uint32_t)(count) >> 8) & 0x000000ff);
|
||||
syncdelay(3);
|
||||
GPIFTCB0 = (uint8_t)((uint32_t)(count) & 0x000000ff);
|
||||
}
|
||||
|
||||
/*
|
||||
* Vendor commands handling:
|
||||
*/
|
||||
#define VR_CFGOPEN 0xB0
|
||||
#define VR_DATAOUTOPEN 0xB2
|
||||
|
||||
uint8_t ix;
|
||||
uint8_t bcnt;
|
||||
uint8_t __xdata *eptr;
|
||||
uint16_t wcnt;
|
||||
uint32_t __xdata gcnt;
|
||||
bool usb_handle_vcommands(void)
|
||||
{
|
||||
eptr = EP0BUF; /* points to EP0BUF 64-byte register */
|
||||
wcnt = setup_data.wlength; /* total transfer count */
|
||||
|
||||
/* Clear EP0BUF for OUT requests */
|
||||
if (setup_data.bmrequesttype & 0x80) {
|
||||
bcnt = ((wcnt > 64) ? 64 : wcnt);
|
||||
for (ix = 0; ix < bcnt; ix++)
|
||||
eptr[ix] = 0;
|
||||
}
|
||||
|
||||
switch (setup_data.brequest) {
|
||||
case VR_CFGOPEN:
|
||||
/* Clear bytecount / to allow new data in / to stops NAKing */
|
||||
EP0BCH = 0;
|
||||
EP0BCL = 0;
|
||||
while (EP0CS & EPBSY)
|
||||
; /* wait to finish transferring in EP0BUF, until not busy */
|
||||
gcnt = ((uint32_t)(eptr[0]) << 24) | ((uint32_t)(eptr[1]) << 16)
|
||||
| ((uint32_t)(eptr[2]) << 8) | (uint32_t)(eptr[3]);
|
||||
/* Angie board FPGA bitstream download */
|
||||
switch ((setup_data.wvalue) & 0x00C0) {
|
||||
case 0x00:
|
||||
/* Apply RPGM- pulse */
|
||||
PIN_PROGRAM_B = 0;
|
||||
syncdelay(1);
|
||||
/* Negate RPGM- pulse */
|
||||
PIN_PROGRAM_B = 1;
|
||||
/* FPGA init time < 10mS */
|
||||
delay_ms(10);
|
||||
/* Initialize GPIF interface transfer count */
|
||||
set_gpif_cnt(gcnt);
|
||||
PIN_RDWR_B = 0;
|
||||
PIN_SDA = 0;
|
||||
/* Trigger GPIF OUT transfer on EP2 */
|
||||
GPIFTRIG = GPIF_EP2;
|
||||
while (!(GPIFTRIG & BMGPIFDONE)) // poll GPIFTRIG.7 GPIF Done bit
|
||||
;
|
||||
PIN_SDA = 1;
|
||||
PIN_RDWR_B = 1;
|
||||
#ifdef PRINTF_DEBUG
|
||||
printf("Program SP6 Done.\n");
|
||||
#endif
|
||||
/* Choose wich Waveform to use */
|
||||
GPIFWFSELECT = 0xF6;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case VR_DATAOUTOPEN:
|
||||
/* Clear bytecount / to allow new data in / to stops NAKing */
|
||||
EP0BCH = 0;
|
||||
EP0BCL = 0;
|
||||
while (EP0CS & EPBSY)
|
||||
; /* wait to finish transferring in EP0BUF, until not busy */
|
||||
gcnt = ((uint32_t)(eptr[0]) << 24) | ((uint32_t)(eptr[1]) << 16)
|
||||
| ((uint32_t)(eptr[2]) << 8) | (uint32_t)(eptr[3]);
|
||||
/* REVCTL.0 and REVCTL.1 set to 1 */
|
||||
REVCTL = 0x3;
|
||||
/* Angie board FPGA bitstream download */
|
||||
PIN_RDWR_B = 0;
|
||||
/* Initialize GPIF interface transfer count */
|
||||
GPIFTCB3 = (uint8_t)(((uint32_t)(gcnt) >> 24) & 0x000000ff);
|
||||
GPIFTCB2 = (uint8_t)(((uint32_t)(gcnt) >> 16) & 0x000000ff);
|
||||
GPIFTCB1 = (uint8_t)(((uint32_t)(gcnt) >> 8) & 0x000000ff);
|
||||
GPIFTCB0 = (uint8_t)((uint32_t)(gcnt) & 0x000000ff);
|
||||
/* Trigger GPIF OUT transfer on EP2 */
|
||||
GPIFTRIG = GPIF_EP2;
|
||||
while (!(GPIFTRIG & BMGPIFDONE)) // poll GPIFTRIG.7 GPIF Done bit
|
||||
;
|
||||
PIN_RDWR_B = 1;
|
||||
/* Initialize GPIF interface transfer count */
|
||||
GPIFTCB3 = (uint8_t)(((uint32_t)(gcnt) >> 24) & 0x000000ff);
|
||||
GPIFTCB2 = (uint8_t)(((uint32_t)(gcnt) >> 16) & 0x000000ff);
|
||||
GPIFTCB1 = (uint8_t)(((uint32_t)(gcnt) >> 8) & 0x000000ff);
|
||||
GPIFTCB0 = (uint8_t)((uint32_t)(gcnt) & 0x000000ff);
|
||||
/* Initialize AUTOIN transfer count */
|
||||
EP4AUTOINLENH = (uint8_t)(((uint32_t)(gcnt) >> 8) & 0x000000ff);
|
||||
EP4AUTOINLENL = (uint8_t)((uint32_t)(gcnt) & 0x000000ff);
|
||||
/* Trigger GPIF IN transfer on EP4 */
|
||||
GPIFTRIG = BMGPIFREAD | GPIF_EP4;
|
||||
while (!(GPIFTRIG & BMGPIFDONE)) // poll GPIFTRIG.7 GPIF Done bit
|
||||
;
|
||||
/* REVCTL.0 and REVCTL.1 set to 0 */
|
||||
REVCTL = 0;
|
||||
break;
|
||||
default:
|
||||
return true; /* Error: unknown VR command */
|
||||
}
|
||||
return false; /* no error; command handled OK */
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the arrival of a USB Control Setup Packet.
|
||||
*/
|
||||
void usb_handle_setup_data(void)
|
||||
{
|
||||
switch (setup_data.brequest) {
|
||||
case GET_STATUS:
|
||||
EP0BUF[0] = 0;
|
||||
EP0BUF[1] = 0;
|
||||
/* Send response */
|
||||
EP0BCH = 0;
|
||||
EP0BCL = 2;
|
||||
syncdelay(3);
|
||||
break;
|
||||
case CLEAR_FEATURE:
|
||||
if (!usb_handle_clear_feature())
|
||||
STALL_EP0();
|
||||
break;
|
||||
case 2: case 4:
|
||||
/* Reserved values */
|
||||
STALL_EP0();
|
||||
break;
|
||||
case SET_FEATURE:
|
||||
if (!usb_handle_set_feature())
|
||||
STALL_EP0();
|
||||
break;
|
||||
case SET_ADDRESS:
|
||||
/* Handled by USB core */
|
||||
break;
|
||||
case SET_DESCRIPTOR:
|
||||
/* Set Descriptor not supported. */
|
||||
STALL_EP0();
|
||||
break;
|
||||
case GET_DESCRIPTOR:
|
||||
if (!usb_handle_get_descriptor())
|
||||
STALL_EP0();
|
||||
break;
|
||||
case GET_CONFIGURATION:
|
||||
/* ANGIE has only one configuration, return its index */
|
||||
EP0BUF[0] = config_descriptor.bconfigurationvalue;
|
||||
EP0BCH = 0;
|
||||
EP0BCL = 1;
|
||||
syncdelay(3);
|
||||
break;
|
||||
case SET_CONFIGURATION:
|
||||
/* ANGIE has only one configuration -> nothing to do */
|
||||
break;
|
||||
case GET_INTERFACE:
|
||||
/* ANGIE only has one interface, return its number */
|
||||
EP0BUF[0] = interface_descriptor00.binterfacenumber;
|
||||
EP0BUF[1] = interface_descriptor01.binterfacenumber;
|
||||
EP0BCH = 0;
|
||||
EP0BCL = 2;
|
||||
syncdelay(3);
|
||||
break;
|
||||
case SET_INTERFACE:
|
||||
usb_handle_set_interface();
|
||||
break;
|
||||
case SYNCH_FRAME:
|
||||
/* Isochronous endpoints not used -> nothing to do */
|
||||
break;
|
||||
default:
|
||||
/* if not Vendor command, Stall EndPoint 0 */
|
||||
if (usb_handle_vcommands())
|
||||
STALL_EP0();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the initialization of endpoints.
|
||||
*/
|
||||
void ep_init(void)
|
||||
{
|
||||
EP1INCFG = 0x00; /* non VALID */
|
||||
syncdelay(3);
|
||||
EP1OUTCFG = 0x00; /* non VALID */
|
||||
syncdelay(3);
|
||||
|
||||
/* JTAG */
|
||||
EP2CFG = 0xA2; /* VALID | OUT | BULK | 512 Bytes | Double buffer */
|
||||
syncdelay(3);
|
||||
EP4CFG = 0xE2; /* VALID | IN | BULK | 512 Bytes | Double buffer */
|
||||
syncdelay(3);
|
||||
|
||||
/* I2C */
|
||||
EP6CFG = 0xA2; /* VALID | OUT | BULK | 512 Bytes | Double buffer */
|
||||
syncdelay(3);
|
||||
EP8CFG = 0xE2; /* VALID | IN | BULK | 512 Bytes | Double buffer */
|
||||
syncdelay(3);
|
||||
|
||||
/* arm EP6-OUT */
|
||||
EP6BCL = 0x80;
|
||||
syncdelay(3);
|
||||
EP6BCL = 0x80;
|
||||
syncdelay(3);
|
||||
|
||||
/* REVCTL.0 and REVCTL.1 set to 1 */
|
||||
REVCTL = 0x3;
|
||||
/* Arm both EP2 buffers to “prime the pump” */
|
||||
OUTPKTEND = 0x82;
|
||||
syncdelay(3);
|
||||
OUTPKTEND = 0x82;
|
||||
syncdelay(3);
|
||||
|
||||
/* Standard procedure to reset FIFOs */
|
||||
FIFORESET = BMNAKALL; /* NAK all transfers during the reset */
|
||||
syncdelay(3);
|
||||
FIFORESET = BMNAKALL | 0x02; /* reset EP2 FIFO */
|
||||
syncdelay(3);
|
||||
FIFORESET = BMNAKALL | 0x04; /* reset EP4 FIFO */
|
||||
syncdelay(3);
|
||||
FIFORESET = 0x00; /* deactivate the NAK all */
|
||||
syncdelay(3);
|
||||
|
||||
/* configure EP2 in AUTO mode with 8-bit interface */
|
||||
EP2FIFOCFG = 0x00;
|
||||
syncdelay(3);
|
||||
EP2FIFOCFG = BMAUTOOUT; /* 8-bit Auto OUT mode */
|
||||
syncdelay(3);
|
||||
EP4FIFOCFG = BMAUTOIN | BMZEROLENIN; /* 8-bit Auto IN mode */
|
||||
syncdelay(3);
|
||||
}
|
||||
|
||||
void i2c_recieve(void)
|
||||
{
|
||||
if (EP6FIFOBUF[0] == 1) {
|
||||
uint8_t rdwr = EP6FIFOBUF[0]; //read: 1
|
||||
uint8_t reg_byte_check = EP6FIFOBUF[1]; //register given: 1 else: 0
|
||||
uint8_t count = EP6FIFOBUF[2]; //requested data count
|
||||
uint8_t adr = EP6FIFOBUF[3]; //address
|
||||
uint8_t address = get_address(adr, rdwr); //address byte (read command)
|
||||
uint8_t address_2 = get_address(adr, 0); //address byte 2 (write command)
|
||||
|
||||
/* i2c bus state byte */
|
||||
EP8FIFOBUF[0] = get_status();
|
||||
|
||||
/* start: */
|
||||
start_cd();
|
||||
/* address: */
|
||||
send_byte(address_2); //write
|
||||
/* ack: */
|
||||
uint8_t ack = get_ack();
|
||||
|
||||
/* send data */
|
||||
for (int i = 0; i < reg_byte_check; i++) {
|
||||
send_byte(EP6FIFOBUF[i + 4]);
|
||||
/* ack(): */
|
||||
ack = get_ack();
|
||||
}
|
||||
|
||||
/* repeated start: */
|
||||
repeated_start();
|
||||
/* address: */
|
||||
send_byte(address);
|
||||
/* get ack: */
|
||||
ack = get_ack();
|
||||
|
||||
/* receive data */
|
||||
for (int i = 1; i < count; i++) {
|
||||
EP8FIFOBUF[i] = receive_byte();
|
||||
|
||||
/* send ack: */
|
||||
send_ack();
|
||||
}
|
||||
|
||||
EP8FIFOBUF[count] = receive_byte();
|
||||
|
||||
/* send Nack: */
|
||||
send_nack();
|
||||
|
||||
/* stop */
|
||||
stop_cd();
|
||||
|
||||
EP8BCH = (count + 1) >> 8; //EP8
|
||||
syncdelay(3);
|
||||
EP8BCL = count + 1; //EP8
|
||||
|
||||
EP6BCL = 0x80; //EP6
|
||||
syncdelay(3);
|
||||
EP6BCL = 0x80; //EP6
|
||||
} else {
|
||||
uint8_t rdwr = EP6FIFOBUF[0]; //write: 0
|
||||
uint8_t count = EP6FIFOBUF[1]; //data count
|
||||
uint8_t adr = EP6FIFOBUF[2]; //address
|
||||
uint8_t address = get_address(adr, rdwr); //address byte (read command)
|
||||
uint8_t ack_cnt = 0;
|
||||
|
||||
// i2c bus state byte
|
||||
EP8FIFOBUF[0] = get_status();
|
||||
|
||||
/* start(): */
|
||||
start_cd();
|
||||
/* address: */
|
||||
send_byte(address); //write
|
||||
/* ack(): */
|
||||
if (!get_ack())
|
||||
ack_cnt++;
|
||||
/* send data */
|
||||
for (int i = 0; i < count; i++) {
|
||||
send_byte(EP6FIFOBUF[i + 3]);
|
||||
/* get ack: */
|
||||
if (!get_ack())
|
||||
ack_cnt++;
|
||||
}
|
||||
|
||||
/* stop */
|
||||
stop_cd();
|
||||
|
||||
EP8FIFOBUF[1] = ack_cnt;
|
||||
|
||||
EP8BCH = 0; //EP8
|
||||
syncdelay(3);
|
||||
EP8BCL = 2; //EP8
|
||||
|
||||
EP6BCL = 0x80; //EP6
|
||||
syncdelay(3);
|
||||
EP6BCL = 0x80; //EP6
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Interrupt initialization. Configures USB interrupts.
|
||||
**/
|
||||
void interrupt_init(void)
|
||||
{
|
||||
/* Enable USB interrupt (EIE register) */
|
||||
EUSB = 1;
|
||||
EICON |= 0x20;
|
||||
|
||||
/* Enable INT 2 & 4 Autovectoring */
|
||||
INTSETUP |= (AV2EN | AV4EN);
|
||||
|
||||
/* Enable individual EP6&8 interrupts */
|
||||
EPIE |= 0xC0;
|
||||
|
||||
/* Clear individual USB interrupt IRQ */
|
||||
EPIRQ = 0xC0;
|
||||
|
||||
/* Enable SUDAV interrupt */
|
||||
USBIEN |= SUDAVI;
|
||||
|
||||
/* Clear SUDAV interrupt */
|
||||
USBIRQ = SUDAVI;
|
||||
|
||||
/* Enable Interrupts (Do not confuse this with
|
||||
* EA External Access pin, see ANGIE Schematic)
|
||||
*/
|
||||
EA = 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the initialization of io ports.
|
||||
*/
|
||||
void io_init(void)
|
||||
{
|
||||
/* PORT A */
|
||||
PORTACFG = 0x0; /* 0: normal ou 1: alternate function (each bit) */
|
||||
OEA = 0xEF;
|
||||
IOA = 0xFF;
|
||||
|
||||
/* PORT C */
|
||||
PORTCCFG = 0x0; /* 0: normal ou 1: alternate function (each bit) */
|
||||
OEC = 0xFF;
|
||||
IOC = 0xFF;
|
||||
}
|
||||
109
contrib/firmware/angie/hdl/Makefile
Normal file
109
contrib/firmware/angie/hdl/Makefile
Normal file
@@ -0,0 +1,109 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright (C) 2023 by NanoXplore, France - all rights reserved
|
||||
|
||||
# Needed by timing test
|
||||
export PROJECT := angie_bitstream
|
||||
TARGET_PART := xc6slx9-2tqg144
|
||||
export TOPLEVEL := S609
|
||||
|
||||
# Detects the ROOT dir from the .git marker
|
||||
sp :=
|
||||
sp +=
|
||||
_walk = $(if $1,$(wildcard /$(subst $(sp),/,$1)/$2) $(call _walk,$(wordlist 2,$(words $1),x $1),$2))
|
||||
_find = $(firstword $(call _walk,$(strip $(subst /, ,$1)),$2))
|
||||
_ROOT := $(patsubst %/.git,%,$(call _find,$(CURDIR),.git))
|
||||
|
||||
SHELL := /bin/bash
|
||||
TOP_DIR := $(realpath $(_ROOT))
|
||||
HDL_DIR := $(CURDIR)
|
||||
SRC_DIR := $(HDL_DIR)/src
|
||||
TOOLS_DIR := $(TOP_DIR)/tools/build
|
||||
COMMON_DIR := $(TOP_DIR)/common/hdl
|
||||
COMMON_HDL_DIR := $(COMMON_DIR)/src
|
||||
COMMON_LIBS := $(COMMON_DIR)/libs
|
||||
HDL_BUILD_DIR := $(HDL_DIR)/build
|
||||
OUTPUT_DIR ?= $(HDL_BUILD_DIR)/output
|
||||
FINAL_OUTPUT_DIR := $(OUTPUT_DIR)/$(PROJECT)
|
||||
|
||||
# Tools
|
||||
MKDIR := mkdir -p
|
||||
CP := cp -f
|
||||
|
||||
HDL_SRC_PATH := $(addprefix $(COMMON_DIR)/ips/, $(HDL_IPS)) $(HDL_DIR)
|
||||
VHDSOURCE += $(foreach ip,$(HDL_SRC_PATH),$(wildcard $(ip)/src/*.vhd))
|
||||
VSOURCE += $(foreach ip,$(HDL_SRC_PATH),$(wildcard $(ip)/src/*.v))
|
||||
VSOURCE += $(foreach ip,$(HDL_SRC_PATH),$(wildcard $(ip)/src/*.vh))
|
||||
|
||||
CONSTRAINTS ?= $(SRC_DIR)/$(PROJECT).ucf
|
||||
|
||||
COMMON_OPTS := -intstyle xflow
|
||||
XST_OPTS :=
|
||||
NGDBUILD_OPTS :=
|
||||
MAP_OPTS := -mt 2
|
||||
PAR_OPTS := -mt 4
|
||||
BITGEN_OPTS := -g Binary:Yes
|
||||
|
||||
XILINX_PLATFORM := lin64
|
||||
PATH := $(PATH):$(XILINX_HOME)/bin/$(XILINX_PLATFORM)
|
||||
|
||||
RUN = @echo -ne "\n\n\e[1;33m======== $(1) ========\e[m\n\n"; \
|
||||
cd $(HDL_BUILD_DIR) && $(XILINX_HOME)/bin/$(XILINX_PLATFORM)/$(1)
|
||||
|
||||
compile: $(HDL_BUILD_DIR)/$(PROJECT).bin
|
||||
|
||||
install: $(HDL_BUILD_DIR)/$(PROJECT).bin
|
||||
$(MKDIR) $(FINAL_OUTPUT_DIR)
|
||||
$(CP) $(HDL_BUILD_DIR)/$(PROJECT).bin $(FINAL_OUTPUT_DIR)
|
||||
|
||||
clean:
|
||||
rm -rf $(HDL_BUILD_DIR)
|
||||
|
||||
$(HDL_BUILD_DIR)/$(PROJECT).bin: $(HDL_BUILD_DIR)/$(PROJECT).ncd
|
||||
$(call RUN,bitgen) $(COMMON_OPTS) $(BITGEN_OPTS) \
|
||||
-w $(PROJECT).ncd $(PROJECT).bit
|
||||
|
||||
$(HDL_BUILD_DIR)/$(PROJECT).ncd: $(HDL_BUILD_DIR)/$(PROJECT).map.ncd
|
||||
$(call RUN,par) $(COMMON_OPTS) $(PAR_OPTS) \
|
||||
-w $(PROJECT).map.ncd $(PROJECT).ncd $(PROJECT).pcf
|
||||
|
||||
$(HDL_BUILD_DIR)/$(PROJECT).map.ncd: $(HDL_BUILD_DIR)/$(PROJECT).ngd
|
||||
$(call RUN,map) $(COMMON_OPTS) $(MAP_OPTS) \
|
||||
-p $(TARGET_PART) \
|
||||
-w $(PROJECT).ngd -o $(PROJECT).map.ncd $(PROJECT).pcf
|
||||
|
||||
$(HDL_BUILD_DIR)/$(PROJECT).ngd: $(HDL_BUILD_DIR)/$(PROJECT).ngc
|
||||
$(call RUN,ngdbuild) $(COMMON_OPTS) $(NGDBUILD_OPTS) \
|
||||
-p $(TARGET_PART) -uc $(CONSTRAINTS) \
|
||||
$(PROJECT).ngc $(PROJECT).ngd
|
||||
|
||||
$(HDL_BUILD_DIR)/$(PROJECT).ngc: $(HDL_BUILD_DIR)/$(PROJECT).prj $(HDL_BUILD_DIR)/$(PROJECT).scr
|
||||
$(call RUN,xst) $(COMMON_OPTS) -ifn $(PROJECT).scr
|
||||
|
||||
$(HDL_BUILD_DIR)/$(PROJECT).scr: | $(HDL_BUILD_DIR)
|
||||
@echo "Updating $@"
|
||||
@mkdir -p $(HDL_BUILD_DIR)
|
||||
@rm -f $@
|
||||
@echo "run" \
|
||||
"-ifn $(PROJECT).prj" \
|
||||
"-ofn $(PROJECT).ngc" \
|
||||
"-ifmt mixed" \
|
||||
"$(XST_OPTS)" \
|
||||
"-top $(TOPLEVEL)" \
|
||||
"-ofmt NGC" \
|
||||
"-p $(TARGET_PART)" \
|
||||
> $(HDL_BUILD_DIR)/$(PROJECT).scr
|
||||
|
||||
$(HDL_BUILD_DIR)/$(PROJECT).prj: | $(HDL_BUILD_DIR)
|
||||
@echo "Updating $@"
|
||||
@rm -f $@
|
||||
@$(foreach file,$(VSOURCE),echo "verilog work \"$(file)\"" >> $@;)
|
||||
@$(foreach file,$(VHDSOURCE),echo "vhdl work \"$(file)\"" >> $@;)
|
||||
@$(foreach lib,$(HDL_LIBS),$(foreach file,$(wildcard $(COMMON_LIBS)/$(lib)/src/*.vhd),echo "vhdl $(lib) \"$(file)\"" >> $@;))
|
||||
@$(foreach lib,$(HDL_LIBS),$(foreach file,$(wildcard $(COMMON_LIBS)/$(lib)/src/*.v),echo "verilog $(lib) \"$(file)\"" >> $@;))
|
||||
@$(foreach lib,$(HDL_LIBS),$(foreach file,$(wildcard $(COMMON_LIBS)/$(lib)/src/*.vh),echo "verilog $(lib) \"$(file)\"" >> $@;))
|
||||
|
||||
$(HDL_BUILD_DIR):
|
||||
$(MKDIR) $(HDL_BUILD_DIR)
|
||||
|
||||
.PHONY: clean compile install
|
||||
|
||||
18
contrib/firmware/angie/hdl/README
Normal file
18
contrib/firmware/angie/hdl/README
Normal file
@@ -0,0 +1,18 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright (C) 2023 by NanoXplore, France - all rights reserved
|
||||
|
||||
This is the source code of Nanoxplore USB-JTAG Adapter Angie's bitstream.
|
||||
This bitstream is for the "xc6slx9-2tqg144" Spartan-6 Xilinx FPGA.
|
||||
|
||||
To generate this bitstream, you need to install Xilinx ISE Webpack 14.7
|
||||
You will need to give the ISE software path : export XILINX_HOME=path/to/ise/sw
|
||||
Please set the enviromnent first by executing the ". ./set_env.sh"
|
||||
|
||||
All you have to do now is to write your vhd and constrains codes.
|
||||
|
||||
One all is setup, you can use the make commands:
|
||||
make compile : to compile your (.vhd & .ucf) files in the "src" directory
|
||||
A directory named "build" will be created, which contains all the generated
|
||||
files including the bitstream file.
|
||||
|
||||
make clean : to delete the build directory.
|
||||
14
contrib/firmware/angie/hdl/set_env.sh
Normal file
14
contrib/firmware/angie/hdl/set_env.sh
Normal file
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright (C) 2023 by NanoXplore, France - all rights reserved
|
||||
|
||||
[ -z "${XILINX_HOME}" ] && export XILINX_HOME=/home/software/Xilinx/ISE/14.7/ISE_DS/ISE
|
||||
export PATH="$XILINX_HOME:$PATH"
|
||||
echo "SET XILINX_HOME to ${XILINX_HOME}"
|
||||
# This is needed for isim
|
||||
XILINX_HOME_BASE=${XILINX_HOME}/..
|
||||
for part in common EDK PlanAhead ISE
|
||||
do
|
||||
el=${XILINX_HOME_BASE}/${part}
|
||||
. ${el}/.settings64.sh ${el}
|
||||
done
|
||||
74
contrib/firmware/angie/hdl/src/angie_bitstream.ucf
Normal file
74
contrib/firmware/angie/hdl/src/angie_bitstream.ucf
Normal file
@@ -0,0 +1,74 @@
|
||||
## SPDX-License-Identifier: BSD-3-Clause
|
||||
##--------------------------------------------------------------------------
|
||||
## Project Context: nanoXplore USB to JTAG/I2C Adapter Board, Spartan6
|
||||
## Design Name: ANGIE USB to JTAG/I2C Adapter FPGA source code
|
||||
## Module Name: angie_bitstream.ucf
|
||||
## Target Device: XC6SLX9-2 TQ144
|
||||
## Tool versions: ISE Webpack 13.2 -> 14.2
|
||||
## Author: Ahmed BOUDJELIDA nanoXplore SAS
|
||||
##--------------------------------------------------------------------------
|
||||
# WARNING: PullUps on JTAG inputs should be enabled after configuration
|
||||
# (bitgen option) since the pins are not connected.
|
||||
|
||||
CONFIG VCCAUX = "3.3";
|
||||
|
||||
# Timing
|
||||
# net IH24 period = 40; # Constrain at 25MHz
|
||||
# net IH40 period = 25; # Constrain at 40MHz
|
||||
# DCMs placement on Spartan6
|
||||
# INST S6MOD_CKMUL.H48_DCM LOC = DCM0;
|
||||
|
||||
# Clock 48MHz
|
||||
net IFCLK_I LOC = 'P123' ;
|
||||
|
||||
net GD_IO<0> LOC = 'P48' ;
|
||||
net GD_IO<1> LOC = 'P43' ;
|
||||
net GD_IO<2> LOC = 'P44' ;
|
||||
net GD_IO<3> LOC = 'P45' ;
|
||||
net GD_IO<4> LOC = 'P46' ;
|
||||
net GD_IO<5> LOC = 'P61' ;
|
||||
net GD_IO<6> LOC = 'P62' ;
|
||||
net GD_IO<7> LOC = 'P65' ;
|
||||
|
||||
net PA2_I LOC = 'P47' ;
|
||||
#net PA3_I LOC = 'P64' ;
|
||||
net JPW_I LOC = 'P14' ;
|
||||
|
||||
net GCTL0_I LOC = 'P70' ;
|
||||
#net GCTL1_I LOC = 'P55' ;
|
||||
#net GCTL2_I LOC = 'P67' ;
|
||||
net GRDY1_I LOC = 'P118' ;
|
||||
|
||||
#net SDA_IO LOC = 'P50' ;
|
||||
net SDA_IO LOC = 'P64' ; #PA3
|
||||
#net SCL_I LOC = 'P51' ;
|
||||
net SCL_I LOC = 'P39' ; #PA4 switch
|
||||
net SDA_DIR_I LOC = 'P66' ; #PA0 switch
|
||||
#net SCL_DIR_I LOC = 'P57' ;
|
||||
|
||||
net SO_SDA_OUT_O LOC = 'P140' ;
|
||||
net SO_SDA_IN_I LOC = 'P1' ;
|
||||
net SO_SCL_O LOC = 'P137' ;
|
||||
|
||||
net SO_TRST_O LOC = 'P32' ;
|
||||
net SO_TMS_O LOC = 'P27' ;
|
||||
net SO_TCK_O LOC = 'P30' ;
|
||||
net SO_TDI_O LOC = 'P26' ;
|
||||
net SO_SRST_O LOC = 'P12' ;
|
||||
net SI_TDO_I LOC = 'P16' ;
|
||||
|
||||
net ST_0_O LOC = 'P29' ;
|
||||
net ST_1_O LOC = 'P21' ;
|
||||
net ST_2_O LOC = 'P11' ;
|
||||
net ST_3_O LOC = 'P7' ;
|
||||
net ST_4_O LOC = 'P134' ;
|
||||
net ST_5_O LOC = 'P139' ;
|
||||
|
||||
net FTP_O<0> LOC = 'P121' ;
|
||||
net FTP_O<1> LOC = 'P120' ;
|
||||
net FTP_O<2> LOC = 'P119' ;
|
||||
net FTP_O<3> LOC = 'P116' ;
|
||||
net FTP_O<4> LOC = 'P111' ;
|
||||
net FTP_O<5> LOC = 'P112' ;
|
||||
net FTP_O<6> LOC = 'P115' ;
|
||||
net FTP_O<7> LOC = 'P114' ;
|
||||
415
contrib/firmware/angie/hdl/src/angie_bitstream.vhd
Normal file
415
contrib/firmware/angie/hdl/src/angie_bitstream.vhd
Normal file
@@ -0,0 +1,415 @@
|
||||
-- SPDX-License-Identifier: BSD-3-Clause
|
||||
----------------------------------------------------------------------------
|
||||
-- Project Context: nanoXplore USB to JTAG/I2C Adapter Board, Spartan6
|
||||
-- Design Name: ANGIE USB to JTAG/I2C Adapter FPGA source code
|
||||
-- Module Name: angie_bitstream.vhd
|
||||
-- Target Device: XC6SLX9-2 TQ144
|
||||
-- Tool versions: ISE Webpack 13.2 -> 14.2
|
||||
-- Author: Ahmed BOUDJELIDA nanoXplore SAS
|
||||
----------------------------------------------------------------------------
|
||||
library work;
|
||||
use work.all;
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.all;
|
||||
use ieee.std_logic_arith.all;
|
||||
use ieee.std_logic_unsigned.all;
|
||||
|
||||
entity angie_bitstream is port(
|
||||
SDA_IO : inout std_logic;
|
||||
SDA_DIR_I : in std_logic;
|
||||
SCL_I : in std_logic;
|
||||
|
||||
JPW_I : in std_logic; --Devkit power
|
||||
|
||||
SO_SDA_OUT_O : out std_logic;
|
||||
SO_SDA_IN_I : in std_logic;
|
||||
SO_SCL_O : out std_logic;
|
||||
|
||||
ST_0_O : out std_logic;
|
||||
ST_1_O : out std_logic;
|
||||
ST_2_O : out std_logic;
|
||||
ST_3_O : out std_logic;
|
||||
ST_4_O : out std_logic;
|
||||
ST_5_O : out std_logic;
|
||||
|
||||
SO_TRST_O : out std_logic;
|
||||
SO_TMS_O : out std_logic;
|
||||
SO_TCK_O : out std_logic;
|
||||
SO_TDI_O : out std_logic;
|
||||
SO_SRST_O : out std_logic;
|
||||
SI_TDO_I : in std_logic;
|
||||
|
||||
PA2_I : in std_logic; -- GPIF IN
|
||||
|
||||
-- Clock 48MHz
|
||||
IFCLK_I : in std_logic;
|
||||
|
||||
GCTL0_I : in std_logic;
|
||||
GRDY1_I : out std_logic;
|
||||
GD_IO : inout std_logic_vector(7 downto 0);
|
||||
FTP_O : out std_logic_vector(15 downto 0)
|
||||
);
|
||||
end angie_bitstream;
|
||||
|
||||
architecture A_angie_bitstream of angie_bitstream is
|
||||
----------------------------------------Fifo out (PC to devkit)
|
||||
signal rst_o, clk_wr_o, clk_rd_o : std_logic;
|
||||
signal write_en_o, read_en_o : std_logic;
|
||||
signal data_in_o, data_out_o : std_logic_vector(7 downto 0);
|
||||
signal empty_o, full_o : std_logic;
|
||||
|
||||
----------------------------------------Fifo in (devkit to PC)
|
||||
signal rst_i, clk_wr_i, clk_rd_i : std_logic;
|
||||
signal write_en_i, read_en_i : std_logic;
|
||||
signal data_in_i, data_out_i : std_logic_vector(7 downto 0);
|
||||
signal empty_i, full_i : std_logic;
|
||||
|
||||
signal wr_o, rd_i : std_logic;
|
||||
|
||||
----------------------------------------MAE
|
||||
signal transit1, transit2 : std_logic;
|
||||
|
||||
----------------------------------------DFF
|
||||
signal pa2_dff_clk, pa2_dff_rst, pa2_dff_d, pa2_dff_q : std_logic;
|
||||
signal trst_clk, trst_rst, trst_d, trst_q : std_logic;
|
||||
signal tms_clk, tms_rst, tms_d, tms_q : std_logic;
|
||||
signal tdi_clk, tdi_rst, tdi_d, tdi_q : std_logic;
|
||||
signal tdo_clk, tdo_rst, tdo_d, tdo_q : std_logic;
|
||||
|
||||
----------------------------------------clk_div
|
||||
signal clk_div_in, clk_div_out, reset_clk_div : std_logic;
|
||||
signal clk_div2_in, clk_div2_out, reset_clk_div2 : std_logic;
|
||||
|
||||
----------------------------------------MAE
|
||||
type State_Type is (IDLE, WRITE_OUT, WRITE_IN, DELAY, READ_IN);
|
||||
signal state, state2 : State_Type;
|
||||
signal reset_mae, reset_mae2 : std_logic;
|
||||
|
||||
-- Add Component DFF
|
||||
component DFF
|
||||
Port (
|
||||
clk : in std_logic;
|
||||
reset : in std_logic;
|
||||
d : in std_logic;
|
||||
q : out std_logic
|
||||
);
|
||||
end component;
|
||||
|
||||
-- Add Component Clk_div
|
||||
component clk_div
|
||||
Port (
|
||||
clk_in : in std_logic;
|
||||
reset : in std_logic;
|
||||
clk_out : out std_logic
|
||||
);
|
||||
end component;
|
||||
|
||||
-- Add component FIFO 64B
|
||||
component fifo_generator_v9_3
|
||||
PORT (
|
||||
rst : IN STD_LOGIC;
|
||||
wr_clk : IN STD_LOGIC;
|
||||
rd_clk : IN STD_LOGIC;
|
||||
din : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||
wr_en : IN STD_LOGIC;
|
||||
rd_en : IN STD_LOGIC;
|
||||
dout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
|
||||
full : OUT STD_LOGIC;
|
||||
empty : OUT STD_LOGIC
|
||||
);
|
||||
end component;
|
||||
|
||||
signal state1_debug, state2_debug : std_logic;
|
||||
|
||||
begin
|
||||
-------------------------------------------------------------I2C :
|
||||
SDA_IO <= not(SO_SDA_IN_I) when (SDA_DIR_I = '1') else 'Z';
|
||||
SO_SDA_OUT_O <= SDA_IO;
|
||||
ST_5_O <= SDA_DIR_I;
|
||||
|
||||
SO_SCL_O <= SCL_I when (JPW_I = '1') else '0';
|
||||
ST_4_O <= '0';
|
||||
|
||||
------------------------------------------------------------JTAG :
|
||||
-- Instantiate the Clk div by 10
|
||||
clk_div_inst : clk_div
|
||||
port map (
|
||||
clk_in => clk_div_in,
|
||||
reset => reset_clk_div,
|
||||
clk_out => clk_div_out
|
||||
);
|
||||
-- Instantiate the Clk div by 10
|
||||
clk_div2_inst : clk_div
|
||||
port map (
|
||||
clk_in => clk_div2_in,
|
||||
reset => reset_clk_div2,
|
||||
clk_out => clk_div2_out
|
||||
);
|
||||
|
||||
-- Instantiate DFFs
|
||||
DFF_inst_PA2 : DFF
|
||||
port map (
|
||||
clk => pa2_dff_clk,
|
||||
reset => pa2_dff_rst,
|
||||
d => pa2_dff_d,
|
||||
q => pa2_dff_q
|
||||
);
|
||||
|
||||
DFF_inst_TRST : DFF
|
||||
port map (
|
||||
clk => trst_clk,
|
||||
reset => trst_rst,
|
||||
d => trst_d,
|
||||
q => trst_q
|
||||
);
|
||||
|
||||
DFF_inst_TMS : DFF
|
||||
port map (
|
||||
clk => tms_clk,
|
||||
reset => tms_rst,
|
||||
d => tms_d,
|
||||
q => tms_q
|
||||
);
|
||||
|
||||
DFF_inst_TDI : DFF
|
||||
port map (
|
||||
clk => tdi_clk,
|
||||
reset => tdi_rst,
|
||||
d => tdi_d,
|
||||
q => tdi_q
|
||||
);
|
||||
|
||||
DFF_inst_TDO : DFF
|
||||
port map (
|
||||
clk => tdo_clk,
|
||||
reset => tdo_rst,
|
||||
d => tdo_d,
|
||||
q => tdo_q
|
||||
);
|
||||
|
||||
-- Instantiate the FIFO OUT
|
||||
U0 : fifo_generator_v9_3
|
||||
port map (
|
||||
rst => rst_o,
|
||||
wr_clk => clk_wr_o,
|
||||
rd_clk => clk_rd_o,
|
||||
din => data_in_o,
|
||||
wr_en => write_en_o,
|
||||
rd_en => read_en_o,
|
||||
dout => data_out_o,
|
||||
full => full_o,
|
||||
empty => empty_o
|
||||
);
|
||||
-- Instantiate the FIFO IN
|
||||
U1 : fifo_generator_v9_3
|
||||
port map (
|
||||
rst => rst_i,
|
||||
wr_clk => clk_wr_i,
|
||||
rd_clk => clk_rd_i,
|
||||
din => data_in_i,
|
||||
wr_en => write_en_i,
|
||||
rd_en => read_en_i,
|
||||
dout => data_out_i,
|
||||
full => full_i,
|
||||
empty => empty_i
|
||||
);
|
||||
|
||||
--------------- clock dividers
|
||||
clk_div_in <= IFCLK_I; -- 48Mhz
|
||||
clk_div2_in <= clk_div_out; -- 24Mhz
|
||||
|
||||
--------------- DFFs
|
||||
pa2_dff_clk <= IFCLK_I;
|
||||
trst_clk <= IFCLK_I;
|
||||
tms_clk <= IFCLK_I;
|
||||
tdi_clk <= IFCLK_I;
|
||||
tdo_clk <= IFCLK_I;
|
||||
|
||||
--------------- FIFOs
|
||||
clk_wr_o <= IFCLK_I;
|
||||
clk_rd_o <= clk_div2_out;
|
||||
clk_wr_i <= clk_div2_out;
|
||||
clk_rd_i <= IFCLK_I;
|
||||
|
||||
--------------------------- GPIF ready :
|
||||
GRDY1_I <= '1';
|
||||
|
||||
-------------------------------PA2 DFF :
|
||||
pa2_dff_rst <= '0';
|
||||
pa2_dff_d <= PA2_I;
|
||||
|
||||
-------------------- FX2<->Fifo Enable pins :
|
||||
write_en_o <= not(wr_o) and not(GCTL0_I);
|
||||
read_en_i <= not(rd_i) and not(GCTL0_I);
|
||||
|
||||
---------------- FX2->Fifo Data :
|
||||
data_in_o <= GD_IO;
|
||||
|
||||
------------ FIFO_OUT->Devkit :
|
||||
SO_TRST_O <= trst_q;
|
||||
trst_d <= data_out_o(4);
|
||||
SO_TMS_O <= tms_q;
|
||||
tms_d <= data_out_o(3);
|
||||
SO_TDI_O <= tdi_q;
|
||||
tdi_d <= data_out_o(1);
|
||||
------------
|
||||
SO_TCK_O <= data_out_o(0);
|
||||
|
||||
-------------------- FIFO_OUT->FIFO_IN :
|
||||
--data_in_i <= data_out_o;
|
||||
|
||||
-------------------- FIFO_IN<-Devkit :
|
||||
data_in_i(0) <= '0';
|
||||
data_in_i(1) <= '0';
|
||||
data_in_i(2) <= tdo_q;
|
||||
tdo_d <= not SI_TDO_I;
|
||||
data_in_i(3) <= '0';
|
||||
data_in_i(4) <= '0';
|
||||
data_in_i(5) <= '0';
|
||||
data_in_i(6) <= '0';
|
||||
data_in_i(7) <= '0';
|
||||
|
||||
-------------------- FX2<-FIFO_IN :
|
||||
GD_IO <= data_out_i when (state = READ_IN) else "ZZZZZZZZ";
|
||||
|
||||
state1_debug <= '1' when state = READ_IN else '0';
|
||||
state2_debug <= '1' when state2 = WRITE_IN else '0';
|
||||
|
||||
--Points de test:
|
||||
FTP_O(0) <= IFCLK_I;
|
||||
FTP_O(1) <= GCTL0_I;
|
||||
FTP_O(2) <= GD_IO(0);
|
||||
FTP_O(3) <= GD_IO(1);
|
||||
FTP_O(4) <= JPW_I;
|
||||
FTP_O(5) <= PA2_I;
|
||||
FTP_O(6) <= empty_o;
|
||||
FTP_O(7) <= not SI_TDO_I;
|
||||
|
||||
process(pa2_dff_d, pa2_dff_q)
|
||||
begin
|
||||
if pa2_dff_d = '0' and pa2_dff_q = '1' then
|
||||
reset_mae <= '1'; -- Reset State Machine
|
||||
reset_mae2 <= '1'; -- Reset State Machine
|
||||
rst_o <= '1'; -- Reset OUT
|
||||
rst_i <= '1'; -- Reset IN
|
||||
reset_clk_div <= '1';
|
||||
reset_clk_div2 <= '1';
|
||||
trst_rst <= '1';
|
||||
tms_rst <= '1';
|
||||
tdi_rst <= '1';
|
||||
tdo_rst <= '1';
|
||||
else
|
||||
reset_mae <= '0'; -- No Reset State Machine
|
||||
reset_mae2 <= '0'; -- Reset State Machine
|
||||
rst_o <= '0'; -- No Reset OUT
|
||||
rst_i <= '0'; -- No Reset IN
|
||||
reset_clk_div <= '0';
|
||||
reset_clk_div2 <= '0';
|
||||
trst_rst <= '0';
|
||||
tms_rst <= '0';
|
||||
tdi_rst <= '0';
|
||||
tdo_rst <= '0';
|
||||
end if;
|
||||
end process;
|
||||
|
||||
process(clk_div2_out, reset_mae2)
|
||||
begin
|
||||
if reset_mae2 = '1' then
|
||||
state2 <= IDLE;
|
||||
elsif rising_edge(clk_div2_out) then
|
||||
case state2 is
|
||||
when IDLE =>
|
||||
read_en_o <= '0'; -- Disable read OUT
|
||||
write_en_i <= '0'; -- Disable write IN
|
||||
transit2 <= '1';
|
||||
if transit1 = '0' and PA2_I = '0' then
|
||||
state2 <= WRITE_IN;
|
||||
else
|
||||
state2 <= IDLE;
|
||||
end if;
|
||||
|
||||
when WRITE_IN =>
|
||||
read_en_o <= '1'; -- Enable read OUT
|
||||
write_en_i <= '1'; -- Enable write IN
|
||||
if PA2_I = '1' then
|
||||
state2 <= DELAY; -- Change state to DELAY
|
||||
else
|
||||
state2 <= WRITE_IN; -- Stay in WRITE_IN state
|
||||
end if;
|
||||
|
||||
when DELAY =>
|
||||
transit2 <= '0'; -- Enable READ IN
|
||||
if empty_o = '1' then
|
||||
read_en_o <= '0'; -- Disable read OUT
|
||||
write_en_i <= '0'; -- Disable write IN
|
||||
state2 <= IDLE; -- Change state to IDLE
|
||||
else
|
||||
state2 <= DELAY; -- Stay in READ_IN state
|
||||
end if;
|
||||
|
||||
when others =>
|
||||
state2 <= IDLE;
|
||||
end case;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
process(IFCLK_I, reset_mae)
|
||||
begin
|
||||
if reset_mae = '1' then
|
||||
state <= IDLE;
|
||||
elsif rising_edge(IFCLK_I) then
|
||||
case state is
|
||||
when IDLE =>
|
||||
wr_o <= '1'; -- Disable write OUT
|
||||
rd_i <= '1'; -- Disable read IN
|
||||
transit1 <= '1';
|
||||
if PA2_I = '0' then
|
||||
state <= WRITE_OUT; -- Change state to RESET
|
||||
else
|
||||
state <= IDLE; -- Stay in IDLE state
|
||||
end if;
|
||||
|
||||
when WRITE_OUT =>
|
||||
wr_o <= '0'; -- Enable write OUT
|
||||
if empty_o = '0' then
|
||||
transit1 <= '0'; -- Enable Rd OUT & Wr IN
|
||||
state <= DELAY; -- Change state to DELAY
|
||||
else
|
||||
state <= WRITE_OUT; -- Stay in WRITE_OUT state
|
||||
end if;
|
||||
|
||||
when DELAY =>
|
||||
if transit2 = '0' then
|
||||
wr_o <= '1'; -- Disable write OUT
|
||||
state <= READ_IN;
|
||||
else
|
||||
state <= DELAY;
|
||||
end if;
|
||||
|
||||
when READ_IN =>
|
||||
rd_i <= '0'; -- Enable read IN
|
||||
if empty_i = '1' then
|
||||
rd_i <= '1'; -- Enable read IN
|
||||
state <= IDLE; -- Change state to IDLE
|
||||
else
|
||||
state <= READ_IN; -- Stay in READ_IN state
|
||||
end if;
|
||||
|
||||
when others =>
|
||||
state <= IDLE;
|
||||
end case;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
-- OUT signals direction
|
||||
-- TRST, TMS, TCK and TDI : out
|
||||
ST_0_O <= '0';
|
||||
-- TDO : in
|
||||
ST_1_O <= '1';
|
||||
-- SRST : out
|
||||
ST_2_O <= '1';
|
||||
SO_SRST_O <= '0';
|
||||
-- MOD : in
|
||||
ST_3_O <= '1';
|
||||
|
||||
end A_angie_bitstream;
|
||||
33
contrib/firmware/angie/hdl/src/clk_div.vhd
Normal file
33
contrib/firmware/angie/hdl/src/clk_div.vhd
Normal file
@@ -0,0 +1,33 @@
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.ALL;
|
||||
use ieee.numeric_std.ALL;
|
||||
|
||||
entity clk_div is
|
||||
Port (
|
||||
clk_in : in std_logic;
|
||||
reset : in std_logic;
|
||||
clk_out : out std_logic
|
||||
);
|
||||
end clk_div;
|
||||
|
||||
architecture behavioral of clk_div is
|
||||
-- Division factor N = 4, so we need a 2-bit counter (2^2 = 4)
|
||||
-- signal counter : unsigned(1 downto 0) := (others => '0');
|
||||
signal tmp : std_logic;
|
||||
begin
|
||||
process(clk_in, reset)
|
||||
begin
|
||||
if reset = '1' then
|
||||
-- counter <= (others => '0');
|
||||
tmp <= '0';
|
||||
elsif rising_edge(clk_in) then
|
||||
-- if counter = (2**2 - 1) then
|
||||
-- counter <= (others => '0');
|
||||
tmp <= NOT tmp; -- Toggle the output clock
|
||||
-- else
|
||||
-- counter <= counter + 1;
|
||||
-- end if;
|
||||
end if;
|
||||
end process;
|
||||
clk_out <= tmp;
|
||||
end behavioral;
|
||||
23
contrib/firmware/angie/hdl/src/dff.vhd
Normal file
23
contrib/firmware/angie/hdl/src/dff.vhd
Normal file
@@ -0,0 +1,23 @@
|
||||
library ieee;
|
||||
use ieee.std_logic_1164.ALL;
|
||||
use ieee.std_logic_arith.ALL;
|
||||
use ieee.std_logic_unsigned.ALL;
|
||||
|
||||
entity DFF is
|
||||
port ( clk : in std_logic;
|
||||
reset : in std_logic;
|
||||
d : in std_logic;
|
||||
q : out std_logic);
|
||||
end DFF;
|
||||
|
||||
architecture Behavioral of DFF is
|
||||
begin
|
||||
process(clk, reset)
|
||||
begin
|
||||
if reset = '1' then
|
||||
q <= '1'; -- Reset output to 0
|
||||
elsif rising_edge(clk) then
|
||||
q <= d; -- Capture D at the rising edge of the clock
|
||||
end if;
|
||||
end process;
|
||||
end Behavioral;
|
||||
@@ -43,9 +43,9 @@ unsigned int dump_swit;
|
||||
* NOTE that this specific encoding could be space-optimized; and that
|
||||
* trace data streams could also be history-sensitive.
|
||||
*/
|
||||
static void show_task(int port, unsigned data)
|
||||
static void show_task(int port, unsigned int data)
|
||||
{
|
||||
unsigned code = data >> 16;
|
||||
unsigned int code = data >> 16;
|
||||
char buf[16];
|
||||
|
||||
if (dump_swit)
|
||||
@@ -77,7 +77,7 @@ static void show_task(int port, unsigned data)
|
||||
|
||||
static void show_reserved(FILE *f, char *label, int c)
|
||||
{
|
||||
unsigned i;
|
||||
unsigned int i;
|
||||
|
||||
if (dump_swit)
|
||||
return;
|
||||
@@ -96,9 +96,9 @@ static void show_reserved(FILE *f, char *label, int c)
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
static bool read_varlen(FILE *f, int c, unsigned *value)
|
||||
static bool read_varlen(FILE *f, int c, unsigned int *value)
|
||||
{
|
||||
unsigned size;
|
||||
unsigned int size;
|
||||
unsigned char buf[4];
|
||||
|
||||
*value = 0;
|
||||
@@ -135,8 +135,8 @@ err:
|
||||
|
||||
static void show_hard(FILE *f, int c)
|
||||
{
|
||||
unsigned type = c >> 3;
|
||||
unsigned value;
|
||||
unsigned int type = c >> 3;
|
||||
unsigned int value;
|
||||
char *label;
|
||||
|
||||
if (dump_swit)
|
||||
@@ -230,16 +230,16 @@ static void show_hard(FILE *f, int c)
|
||||
*/
|
||||
struct {
|
||||
int port;
|
||||
void (*show)(int port, unsigned data);
|
||||
void (*show)(int port, unsigned int data);
|
||||
} format[] = {
|
||||
{ .port = 31, .show = show_task, },
|
||||
};
|
||||
|
||||
static void show_swit(FILE *f, int c)
|
||||
{
|
||||
unsigned port = c >> 3;
|
||||
unsigned value = 0;
|
||||
unsigned i;
|
||||
unsigned int port = c >> 3;
|
||||
unsigned int value = 0;
|
||||
unsigned int i;
|
||||
|
||||
if (port + 1 == dump_swit) {
|
||||
if (!read_varlen(f, c, &value))
|
||||
@@ -272,7 +272,7 @@ static void show_swit(FILE *f, int c)
|
||||
|
||||
static void show_timestamp(FILE *f, int c)
|
||||
{
|
||||
unsigned counter = 0;
|
||||
unsigned int counter = 0;
|
||||
char *label = "";
|
||||
bool delayed = false;
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
#include <assert.h>
|
||||
#include <helper/list.h>
|
||||
|
||||
static LIST_HEAD(threads);
|
||||
static OOCD_LIST_HEAD(threads);
|
||||
|
||||
struct thread {
|
||||
int id;
|
||||
|
||||
@@ -70,23 +70,23 @@ int main (void)
|
||||
for (;;) {
|
||||
cmd = dcc_rd();
|
||||
switch (cmd&OCL_CMD_MASK) {
|
||||
case OCL_PROBE:
|
||||
dcc_wr(OCL_CMD_DONE | flash_init());
|
||||
dcc_wr(0x100000); /* base */
|
||||
dcc_wr(flash_page_count*flash_page_size); /* size */
|
||||
dcc_wr(1); /* num_sectors */
|
||||
dcc_wr(4096 | ((unsigned long) flash_page_size << 16)); /* buflen and bufalign */
|
||||
break;
|
||||
case OCL_ERASE_ALL:
|
||||
dcc_wr(OCL_CMD_DONE | flash_erase_all());
|
||||
break;
|
||||
case OCL_FLASH_BLOCK:
|
||||
cmd_flash(cmd);
|
||||
break;
|
||||
default:
|
||||
/* unknown command */
|
||||
dcc_wr(OCL_CMD_ERR);
|
||||
break;
|
||||
case OCL_PROBE:
|
||||
dcc_wr(OCL_CMD_DONE | flash_init());
|
||||
dcc_wr(0x100000); /* base */
|
||||
dcc_wr(flash_page_count * flash_page_size); /* size */
|
||||
dcc_wr(1); /* num_sectors */
|
||||
dcc_wr(4096 | ((unsigned long)flash_page_size << 16)); /* buflen and bufalign */
|
||||
break;
|
||||
case OCL_ERASE_ALL:
|
||||
dcc_wr(OCL_CMD_DONE | flash_erase_all());
|
||||
break;
|
||||
case OCL_FLASH_BLOCK:
|
||||
cmd_flash(cmd);
|
||||
break;
|
||||
default:
|
||||
/* unknown command */
|
||||
dcc_wr(OCL_CMD_ERR);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,38 +22,38 @@ int flash_init(void)
|
||||
nvpsiz = (inr(DBGU_CIDR) >> 8)&0xf;
|
||||
|
||||
switch (nvpsiz) {
|
||||
case 3:
|
||||
/* AT91SAM7x32 */
|
||||
flash_page_count = 256;
|
||||
flash_page_size = 128;
|
||||
flash_lock_pages = 256/8;
|
||||
break;
|
||||
case 5:
|
||||
/* AT91SAM7x64 */
|
||||
flash_page_count = 512;
|
||||
flash_page_size = 128;
|
||||
flash_lock_pages = 512/16;
|
||||
break;
|
||||
case 7:
|
||||
/* AT91SAM7x128*/
|
||||
flash_page_count = 512;
|
||||
flash_page_size = 256;
|
||||
flash_lock_pages = 512/8;
|
||||
break;
|
||||
case 9:
|
||||
/* AT91SAM7x256 */
|
||||
flash_page_count = 1024;
|
||||
flash_page_size = 256;
|
||||
flash_lock_pages = 1024/16;
|
||||
break;
|
||||
case 10:
|
||||
/* AT91SAM7x512 */
|
||||
flash_page_count = 2048;
|
||||
flash_page_size = 256;
|
||||
flash_lock_pages = 2048/32;
|
||||
break;
|
||||
default:
|
||||
return FLASH_STAT_INITE;
|
||||
case 3:
|
||||
/* AT91SAM7x32 */
|
||||
flash_page_count = 256;
|
||||
flash_page_size = 128;
|
||||
flash_lock_pages = 256 / 8;
|
||||
break;
|
||||
case 5:
|
||||
/* AT91SAM7x64 */
|
||||
flash_page_count = 512;
|
||||
flash_page_size = 128;
|
||||
flash_lock_pages = 512 / 16;
|
||||
break;
|
||||
case 7:
|
||||
/* AT91SAM7x128*/
|
||||
flash_page_count = 512;
|
||||
flash_page_size = 256;
|
||||
flash_lock_pages = 512 / 8;
|
||||
break;
|
||||
case 9:
|
||||
/* AT91SAM7x256 */
|
||||
flash_page_count = 1024;
|
||||
flash_page_size = 256;
|
||||
flash_lock_pages = 1024 / 16;
|
||||
break;
|
||||
case 10:
|
||||
/* AT91SAM7x512 */
|
||||
flash_page_count = 2048;
|
||||
flash_page_size = 256;
|
||||
flash_lock_pages = 2048 / 32;
|
||||
break;
|
||||
default:
|
||||
return FLASH_STAT_INITE;
|
||||
}
|
||||
return FLASH_STAT_OK;
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ static inline __attribute__((always_inline)) uint32_t flashWrite(uint32_t addres
|
||||
/* Clear the IRQ flags */
|
||||
*((volatile uint32_t *)(flash_regs_base + FLASH_REG_IRQRAW)) = 0x0000003F;
|
||||
/* Load the flash address to write */
|
||||
*((volatile uint32_t *)(flash_regs_base + FLASH_REG_ADDRESS)) = (uint16_t)((address + index - MFB_BOTTOM) >> 2);
|
||||
*((volatile uint32_t *)(flash_regs_base + FLASH_REG_ADDRESS)) = (uint32_t)((address + index - MFB_BOTTOM) >> 2);
|
||||
/* Prepare and load the data to flash */
|
||||
*((volatile uint32_t *)(flash_regs_base + FLASH_REG_DATA0)) = flash_word[0];
|
||||
*((volatile uint32_t *)(flash_regs_base + FLASH_REG_DATA1)) = flash_word[1];
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
/* Autogenerated with ../../../../src/helper/bin2char.sh */
|
||||
0x05,0x93,0x43,0x68,0x14,0x9e,0x09,0x93,0x05,0x9b,0x05,0x00,0x07,0x91,0x06,0x92,
|
||||
0x01,0x24,0xb1,0x46,0x00,0x2b,0x68,0xd0,0x6a,0x68,0x2b,0x68,0x9a,0x42,0xfb,0xd0,
|
||||
0x2b,0x68,0x00,0x2b,0x61,0xd0,0x6a,0x68,0x2b,0x68,0x9a,0x42,0x5e,0xd9,0x6b,0x68,
|
||||
0x07,0x9a,0xd3,0x1a,0x0f,0x2b,0xef,0xdd,0x4a,0x46,0x00,0x21,0x03,0x93,0xd1,0x60,
|
||||
0x00,0x2b,0x42,0xd0,0x40,0x22,0x4a,0x44,0x90,0x46,0x44,0x22,0x4a,0x44,0x00,0x92,
|
||||
0x48,0x22,0x4a,0x44,0x93,0x46,0x4c,0x22,0x27,0x4f,0x4a,0x44,0xbc,0x46,0x4e,0x46,
|
||||
0x92,0x46,0x06,0x99,0x4b,0x46,0x61,0x44,0x08,0x00,0x00,0x99,0x18,0x36,0x6a,0x68,
|
||||
0x08,0x95,0x8c,0x46,0x55,0x46,0xda,0x46,0xb3,0x46,0x10,0x33,0x04,0x92,0x11,0x68,
|
||||
0x5e,0x46,0x00,0x91,0x51,0x68,0x97,0x68,0x01,0x91,0xd1,0x68,0x02,0x91,0x3f,0x21,
|
||||
0x19,0x60,0x81,0x03,0x09,0x0c,0x31,0x60,0x46,0x46,0x00,0x99,0x31,0x60,0x66,0x46,
|
||||
0x01,0x99,0x31,0x60,0x56,0x46,0x02,0x99,0x37,0x60,0x29,0x60,0xcc,0x26,0x49,0x46,
|
||||
0x0e,0x60,0x19,0x68,0x0c,0x42,0xfc,0xd0,0x04,0x99,0x03,0x9e,0x10,0x32,0x10,0x30,
|
||||
0x51,0x1a,0x8e,0x42,0xdb,0xd8,0x08,0x9d,0x6a,0x60,0x03,0x9a,0x06,0x9b,0x94,0x46,
|
||||
0x63,0x44,0x06,0x93,0x07,0x9a,0x6b,0x68,0x9a,0x42,0x01,0xd8,0x09,0x9b,0x6b,0x60,
|
||||
0x05,0x9b,0x03,0x9a,0x9b,0x1a,0x05,0x93,0x96,0xd1,0x00,0xbe,0x2b,0x68,0x6a,0x68,
|
||||
0x9b,0x1a,0x9f,0xd5,0x90,0xe7,0xc0,0x46,0x00,0x00,0xfc,0xef,
|
||||
0x16,0x9e,0x05,0x00,0x01,0x24,0xb1,0x46,0x06,0x93,0x43,0x68,0x08,0x91,0x07,0x92,
|
||||
0x09,0x93,0x06,0x9b,0x00,0x2b,0x6f,0xd0,0x6a,0x68,0x2b,0x68,0x9a,0x42,0xfb,0xd0,
|
||||
0x2b,0x68,0x00,0x2b,0x68,0xd0,0x6a,0x68,0x2b,0x68,0x9a,0x42,0x65,0xd9,0x6b,0x68,
|
||||
0x08,0x9a,0xd3,0x1a,0x0b,0x93,0x0b,0x9b,0x0f,0x2b,0xea,0xdd,0x4a,0x46,0x00,0x21,
|
||||
0x0b,0x9b,0xd1,0x60,0x04,0x93,0x00,0x2b,0x43,0xd0,0x31,0x4a,0x07,0x9b,0x94,0x46,
|
||||
0x40,0x22,0x4a,0x44,0x90,0x46,0x44,0x22,0x4a,0x44,0x63,0x44,0x94,0x46,0x48,0x22,
|
||||
0x4a,0x44,0x93,0x46,0x05,0x93,0x4c,0x22,0x4b,0x46,0x4a,0x44,0x10,0x33,0x4e,0x46,
|
||||
0x92,0x46,0x00,0x93,0x2b,0x00,0x18,0x36,0x6a,0x68,0x55,0x46,0xb2,0x46,0x5e,0x46,
|
||||
0x9b,0x46,0x10,0x68,0x57,0x68,0x01,0x90,0x3f,0x20,0x00,0x9b,0x02,0x97,0x97,0x68,
|
||||
0x03,0x97,0xd7,0x68,0x18,0x60,0x53,0x46,0x05,0x98,0x40,0x18,0x80,0x08,0x18,0x60,
|
||||
0x43,0x46,0x01,0x98,0x18,0x60,0x63,0x46,0x02,0x98,0x18,0x60,0x03,0x98,0x4b,0x46,
|
||||
0x30,0x60,0xcc,0x20,0x2f,0x60,0x18,0x60,0x00,0x9b,0x18,0x68,0x04,0x42,0xfc,0xd0,
|
||||
0x58,0x46,0x10,0x32,0x42,0x60,0x04,0x98,0x10,0x31,0x00,0x93,0x88,0x42,0xd8,0xd8,
|
||||
0x5d,0x46,0x07,0x9a,0x0b,0x9b,0x94,0x46,0x9c,0x44,0x63,0x46,0x08,0x9a,0x07,0x93,
|
||||
0x6b,0x68,0x93,0x42,0x01,0xd3,0x09,0x9b,0x6b,0x60,0x06,0x9a,0x0b,0x9b,0xd3,0x1a,
|
||||
0x06,0x93,0x06,0x9b,0x00,0x2b,0x8f,0xd1,0x00,0xbe,0x2b,0x68,0x6a,0x68,0x9b,0x1a,
|
||||
0x0b,0x93,0x0b,0x9b,0x00,0x2b,0x00,0xdb,0x95,0xe7,0x00,0x23,0x0b,0x93,0x92,0xe7,
|
||||
0x00,0x00,0xfc,0xef,
|
||||
|
||||
@@ -1,249 +1,248 @@
|
||||
/* Autogenerated with ../../../../src/helper/bin2char.sh */
|
||||
0x08,0xb5,0x00,0xbf,0x00,0xbf,0x00,0xbf,0x00,0xbf,0xdf,0xf8,0x1c,0xd0,0x07,0x48,
|
||||
0x07,0x49,0x4f,0xf0,0x00,0x02,0x88,0x42,0xb8,0xbf,0x40,0xf8,0x04,0x2b,0xfa,0xdb,
|
||||
0x00,0xf0,0xa8,0xf9,0xfe,0xe7,0x00,0x00,0xf0,0x0e,0x00,0x20,0x54,0x13,0x00,0x20,
|
||||
0x98,0x13,0x00,0x20,0x08,0xb5,0x07,0x4b,0x07,0x48,0x03,0x33,0x1b,0x1a,0x06,0x2b,
|
||||
0x04,0xd9,0x06,0x4b,0x00,0x2b,0x01,0xd0,0x00,0xf0,0x5c,0xf8,0x08,0xbc,0x01,0xbc,
|
||||
0x00,0x47,0xc0,0x46,0x50,0x13,0x00,0x20,0x50,0x13,0x00,0x20,0x00,0x00,0x00,0x00,
|
||||
0x08,0x48,0x09,0x49,0x09,0x1a,0x89,0x10,0x08,0xb5,0xcb,0x0f,0x59,0x18,0x49,0x10,
|
||||
0x04,0xd0,0x06,0x4b,0x00,0x2b,0x01,0xd0,0x00,0xf0,0x44,0xf8,0x08,0xbc,0x01,0xbc,
|
||||
0x00,0x47,0xc0,0x46,0x50,0x13,0x00,0x20,0x50,0x13,0x00,0x20,0x00,0x00,0x00,0x00,
|
||||
0x10,0xb5,0x08,0x4c,0x23,0x78,0x00,0x2b,0x09,0xd1,0xff,0xf7,0xcb,0xff,0x06,0x4b,
|
||||
0x07,0x49,0x4f,0xf0,0x00,0x02,0x88,0x42,0xb8,0xbf,0x40,0xf8,0x04,0x2b,0xff,0xf6,
|
||||
0xfa,0xaf,0x00,0xf0,0x71,0xf9,0xfe,0xe7,0xe0,0x0e,0x00,0x20,0x44,0x13,0x00,0x20,
|
||||
0x88,0x13,0x00,0x20,0x10,0xb5,0x07,0x4c,0x23,0x78,0x00,0x2b,0x07,0xd1,0x06,0x4b,
|
||||
0x00,0x2b,0x02,0xd0,0x05,0x48,0xaf,0xf3,0x00,0x80,0x01,0x23,0x23,0x70,0x10,0xbc,
|
||||
0x01,0xbc,0x00,0x47,0x54,0x13,0x00,0x20,0x00,0x00,0x00,0x00,0xe0,0x0e,0x00,0x20,
|
||||
0x08,0xb5,0x0b,0x4b,0x00,0x2b,0x03,0xd0,0x0a,0x48,0x0b,0x49,0xaf,0xf3,0x00,0x80,
|
||||
0x0a,0x48,0x03,0x68,0x00,0x2b,0x04,0xd1,0xff,0xf7,0xc2,0xff,0x08,0xbc,0x01,0xbc,
|
||||
0x00,0x47,0x07,0x4b,0x00,0x2b,0xf7,0xd0,0x00,0xf0,0x0c,0xf8,0xf4,0xe7,0xc0,0x46,
|
||||
0x00,0x00,0x00,0x00,0xe0,0x0e,0x00,0x20,0x58,0x13,0x00,0x20,0x4c,0x13,0x00,0x20,
|
||||
0x00,0x00,0x00,0x00,0x18,0x47,0xc0,0x46,0xd4,0x30,0x9f,0xe5,0x00,0x00,0x53,0xe3,
|
||||
0xc8,0x30,0x9f,0x05,0x03,0xd0,0xa0,0xe1,0x00,0x20,0x0f,0xe1,0x0f,0x00,0x12,0xe3,
|
||||
0x15,0x00,0x00,0x0a,0xd1,0xf0,0x21,0xe3,0x03,0xd0,0xa0,0xe1,0x01,0xaa,0x4d,0xe2,
|
||||
0x0a,0x30,0xa0,0xe1,0xd7,0xf0,0x21,0xe3,0x03,0xd0,0xa0,0xe1,0x01,0x3a,0x43,0xe2,
|
||||
0xdb,0xf0,0x21,0xe3,0x03,0xd0,0xa0,0xe1,0x01,0x3a,0x43,0xe2,0xd2,0xf0,0x21,0xe3,
|
||||
0x03,0xd0,0xa0,0xe1,0x02,0x3a,0x43,0xe2,0xd3,0xf0,0x21,0xe3,0x03,0xd0,0xa0,0xe1,
|
||||
0x02,0x39,0x43,0xe2,0xff,0x30,0xc3,0xe3,0xff,0x3c,0xc3,0xe3,0x04,0x30,0x03,0xe5,
|
||||
0x00,0x20,0x53,0xe9,0xc0,0x20,0x82,0xe3,0x02,0xf0,0x21,0xe1,0x01,0xa8,0x43,0xe2,
|
||||
0x00,0x10,0xb0,0xe3,0x01,0xb0,0xa0,0xe1,0x01,0x70,0xa0,0xe1,0x5c,0x00,0x9f,0xe5,
|
||||
0x5c,0x20,0x9f,0xe5,0x00,0x20,0x52,0xe0,0x01,0x30,0x8f,0xe2,0x13,0xff,0x2f,0xe1,
|
||||
0x00,0xf0,0x42,0xfd,0x10,0x4b,0x00,0x2b,0x01,0xd0,0xfe,0x46,0x9f,0x46,0x0f,0x4b,
|
||||
0x00,0x2b,0x01,0xd0,0xfe,0x46,0x9f,0x46,0x00,0x20,0x00,0x21,0x04,0x00,0x0d,0x00,
|
||||
0x0d,0x48,0x00,0xf0,0x89,0xfc,0x00,0xf0,0xc3,0xfc,0x20,0x00,0x29,0x00,0x00,0xf0,
|
||||
0xd1,0xf8,0x00,0xf0,0x8b,0xfc,0x7b,0x46,0x18,0x47,0x00,0x00,0x11,0x00,0x00,0xef,
|
||||
0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x54,0x13,0x00,0x20,0x98,0x13,0x00,0x20,0x15,0x0b,0x00,0x20,0x70,0xb5,0x04,0x46,
|
||||
0x0e,0x46,0x15,0x46,0x00,0x21,0x28,0x22,0x00,0xf0,0x0e,0xfd,0x26,0x61,0x65,0x62,
|
||||
0x00,0x21,0x20,0x22,0x02,0x48,0x00,0xf0,0x07,0xfd,0x00,0x20,0x70,0xbd,0x00,0xbf,
|
||||
0x70,0x13,0x00,0x20,0x10,0xb5,0x01,0x20,0x00,0xf0,0xac,0xf9,0x04,0x46,0x28,0xb9,
|
||||
0x01,0x21,0x20,0x22,0x03,0x48,0x00,0xf0,0xf7,0xfc,0x01,0xe0,0x40,0xf2,0x01,0x14,
|
||||
0x20,0x46,0x10,0xbd,0x70,0x13,0x00,0x20,0x01,0x39,0xf8,0xb5,0x04,0x0b,0x08,0x44,
|
||||
0x05,0x0b,0x26,0x03,0xac,0x42,0x14,0xd8,0x0b,0x4f,0xe3,0x5d,0x6b,0xb9,0x30,0x46,
|
||||
0x00,0xf0,0xfc,0xf8,0x38,0xb1,0x00,0x04,0x00,0xf4,0x7f,0x00,0x40,0xea,0x04,0x60,
|
||||
0x40,0xf4,0x81,0x70,0xf8,0xbd,0x01,0x23,0xe3,0x55,0x01,0x34,0x06,0xf5,0x80,0x56,
|
||||
0xe8,0xe7,0x00,0x20,0xf8,0xbd,0x00,0xbf,0x70,0x13,0x00,0x20,0x2d,0xe9,0xf0,0x4f,
|
||||
0x0d,0x46,0x53,0x1e,0x85,0xb0,0x0b,0x44,0x02,0x90,0x4f,0xea,0x11,0x38,0x1b,0x0b,
|
||||
0x16,0x46,0x23,0x48,0x00,0x21,0x20,0x22,0x01,0x93,0x4f,0xea,0x08,0x37,0x00,0xf0,
|
||||
0xbb,0xfc,0x4f,0xf0,0x00,0x09,0xc5,0xf3,0x0b,0x0c,0x01,0x9b,0x98,0x45,0x33,0xd8,
|
||||
0x74,0x19,0x07,0xf5,0x80,0x5a,0x54,0x45,0x98,0xbf,0x34,0x46,0xdf,0xf8,0x64,0xb0,
|
||||
0x88,0xbf,0xc4,0xf3,0x0b,0x04,0x39,0x46,0x4f,0xf4,0x80,0x52,0x58,0x46,0x88,0xbf,
|
||||
0x34,0x1b,0xcd,0xf8,0x0c,0xc0,0x00,0xf0,0x5f,0xfc,0xdd,0xf8,0x0c,0xc0,0x02,0x9b,
|
||||
0x0b,0xeb,0x0c,0x00,0x03,0xeb,0x09,0x01,0x22,0x46,0x00,0xf0,0x55,0xfc,0x38,0x46,
|
||||
0x4f,0xf4,0x80,0x51,0x08,0xf1,0x01,0x08,0xff,0xf7,0x9e,0xff,0x68,0xb9,0x39,0x46,
|
||||
0x58,0x46,0x4f,0xf4,0x80,0x52,0x25,0x44,0x00,0xf0,0xae,0xf8,0x36,0x1b,0xc5,0xf3,
|
||||
0x0b,0x0c,0xa1,0x44,0x57,0x46,0xc8,0xe7,0x00,0x20,0x05,0xb0,0xbd,0xe8,0xf0,0x8f,
|
||||
0x70,0x13,0x00,0x20,0x00,0x3c,0x00,0x20,0xb2,0xf5,0x80,0x5f,0xf8,0xb5,0x07,0x46,
|
||||
0x0e,0x46,0x15,0x46,0x0b,0xd8,0x08,0x46,0x11,0x46,0xff,0xf7,0x7d,0xff,0x04,0x46,
|
||||
0x40,0xb9,0x38,0x46,0x31,0x46,0x2a,0x46,0x00,0xf0,0x8e,0xf8,0x02,0xe0,0x4f,0xf4,
|
||||
0x82,0x70,0xf8,0xbd,0x20,0x46,0xf8,0xbd,0x08,0xb5,0x00,0xf0,0x85,0xf8,0x00,0x20,
|
||||
0x08,0xbd,0x00,0x00,0xf8,0xb5,0x31,0x48,0x31,0x49,0x32,0x4a,0x32,0x4c,0xff,0xf7,
|
||||
0x3d,0xff,0x00,0x23,0x23,0x60,0x22,0x68,0x2c,0x4f,0x14,0x23,0x03,0xfb,0x02,0x73,
|
||||
0x08,0x33,0x5b,0x68,0x00,0x2b,0xf7,0xd0,0x2c,0x4b,0x1a,0x68,0x11,0x07,0xfb,0xd4,
|
||||
0x2b,0x4d,0x2c,0x4e,0x2a,0x68,0x32,0x60,0x42,0xf0,0x33,0x02,0x2a,0x60,0x1a,0x68,
|
||||
0x12,0x07,0xfc,0xd4,0x21,0x68,0x14,0x22,0x02,0xfb,0x01,0x73,0x98,0x68,0x13,0x46,
|
||||
0x01,0x38,0x04,0x28,0x26,0xd8,0xdf,0xe8,0x00,0xf0,0x03,0x06,0x0e,0x16,0x1e,0x00,
|
||||
0xff,0xf7,0x28,0xff,0x20,0xe0,0x4b,0x43,0xfa,0x18,0x10,0x69,0xf9,0x58,0x52,0x68,
|
||||
0xff,0xf7,0xc2,0xff,0x18,0xe0,0x4b,0x43,0xfa,0x18,0x10,0x69,0xf9,0x58,0x52,0x68,
|
||||
0xff,0xf7,0xa2,0xff,0x10,0xe0,0x4b,0x43,0xfa,0x18,0x10,0x69,0xf9,0x58,0x52,0x68,
|
||||
0xff,0xf7,0x44,0xff,0x08,0xe0,0x4b,0x43,0xfa,0x18,0xf8,0x58,0x51,0x68,0xff,0xf7,
|
||||
0x1b,0xff,0x01,0xe0,0x40,0xf2,0x05,0x10,0x33,0x68,0x2b,0x60,0x0b,0x4b,0x1b,0x68,
|
||||
0x1b,0x07,0xfb,0xd4,0x22,0x68,0x14,0x23,0x03,0xfb,0x02,0x77,0xfb,0x68,0xf8,0x60,
|
||||
0x00,0xb1,0xfe,0xe7,0x82,0xf0,0x01,0x02,0x22,0x60,0xa4,0xe7,0xd8,0x1b,0x00,0x20,
|
||||
0x00,0x1c,0x00,0x20,0x00,0x2c,0x00,0x20,0x90,0x13,0x00,0x20,0x00,0x40,0x03,0x40,
|
||||
0x04,0x40,0x03,0x40,0x94,0x13,0x00,0x20,0xfe,0xe7,0x00,0x00,0x08,0xb5,0x04,0x4b,
|
||||
0x1b,0x68,0x5b,0x69,0x98,0x47,0x03,0x4b,0x00,0x22,0x1a,0x60,0x08,0xbd,0x00,0xbf,
|
||||
0xa8,0x01,0x00,0x10,0x84,0x04,0x60,0x42,0x08,0xb5,0x04,0x4b,0x1b,0x68,0x9b,0x69,
|
||||
0x98,0x47,0x03,0x4b,0x00,0x22,0x1a,0x60,0x08,0xbd,0x00,0xbf,0xa8,0x01,0x00,0x10,
|
||||
0x84,0x04,0x60,0x42,0x10,0xb5,0x33,0x4b,0x33,0x48,0x1b,0x68,0x33,0x4a,0x13,0xf0,
|
||||
0x02,0x0f,0x03,0x68,0x43,0xf0,0x02,0x03,0x03,0x60,0x13,0x68,0x01,0x68,0x19,0xd0,
|
||||
0x21,0xf4,0xe1,0x72,0xc3,0xf3,0xc1,0x04,0x22,0xf0,0x01,0x02,0x22,0x43,0xc3,0xf3,
|
||||
0xc0,0x11,0x42,0xea,0x01,0x22,0xc3,0xf3,0x41,0x11,0x42,0xea,0x81,0x12,0x02,0x60,
|
||||
0x02,0x68,0xd4,0x07,0x03,0xd5,0x26,0x4a,0x12,0x68,0x50,0x07,0xfb,0xd5,0x03,0xf0,
|
||||
0x07,0x03,0x18,0xe0,0x21,0xf4,0xe1,0x72,0xc3,0xf3,0xc1,0x24,0x22,0xf0,0x01,0x02,
|
||||
0xc3,0xf3,0xc0,0x31,0x22,0x43,0x42,0xea,0x01,0x22,0xc3,0xf3,0x41,0x31,0x42,0xea,
|
||||
0x81,0x12,0x02,0x60,0x02,0x68,0xd1,0x07,0x03,0xd5,0x19,0x4a,0x12,0x68,0x52,0x07,
|
||||
0xfb,0xd5,0xc3,0xf3,0x02,0x23,0x4a,0xf6,0xaa,0x22,0x16,0x49,0x16,0x48,0x0a,0x60,
|
||||
0x02,0x68,0x1b,0x03,0xb3,0xf5,0xe0,0x4f,0x22,0xf4,0xe2,0x42,0x18,0xbf,0x43,0xf4,
|
||||
0x80,0x73,0x13,0x43,0x03,0x60,0x45,0xf2,0xaa,0x53,0x0b,0x60,0x0f,0x4b,0x10,0x49,
|
||||
0x01,0x22,0x1a,0x60,0x00,0x22,0x0a,0x60,0x1a,0x60,0x05,0x22,0xc3,0xf8,0x58,0x22,
|
||||
0x4f,0xf0,0xff,0x32,0xc1,0xf8,0x8c,0x22,0xc1,0xf8,0x90,0x22,0x02,0x22,0xc3,0xf8,
|
||||
0x58,0x22,0x10,0xbd,0x00,0x00,0x09,0x40,0x24,0x00,0x03,0x40,0x08,0x13,0x00,0x50,
|
||||
0x1c,0x00,0x03,0x40,0x64,0x20,0x03,0x40,0xa8,0x20,0x03,0x40,0x30,0x20,0x03,0x40,
|
||||
0x34,0x20,0x03,0x40,0x2d,0xe9,0xf8,0x4f,0xd4,0x4d,0x29,0x68,0x11,0xf0,0x01,0x01,
|
||||
0x40,0xf0,0x95,0x81,0xdf,0xf8,0x90,0xe3,0x05,0x27,0xd1,0x4b,0xce,0xf8,0x00,0x70,
|
||||
0x1b,0x68,0x4f,0xf4,0x40,0x72,0xc3,0xf3,0x03,0x23,0x01,0x33,0xb2,0xfb,0xf3,0xf3,
|
||||
0xdf,0xf8,0x78,0xc3,0xdf,0xf8,0x78,0x83,0xdc,0xf8,0x00,0x20,0xd8,0xf8,0x00,0x40,
|
||||
0x92,0xb2,0x5a,0x43,0xc2,0xf3,0x8f,0x16,0x22,0x0c,0x12,0x04,0x32,0x43,0xc8,0xf8,
|
||||
0x00,0x20,0xc4,0x4a,0xc4,0x4c,0x12,0x68,0x26,0x68,0x5a,0x43,0xc3,0x4e,0x92,0x09,
|
||||
0x22,0x60,0x32,0x68,0x54,0xf8,0x24,0x8c,0xc2,0xf3,0x07,0x42,0x5a,0x43,0x28,0xf0,
|
||||
0xff,0x08,0xc2,0xf3,0x87,0x12,0xdf,0xf8,0x3c,0x93,0x42,0xea,0x08,0x02,0xdf,0xf8,
|
||||
0x38,0x83,0x44,0xf8,0x24,0x2c,0xd9,0xf8,0x00,0xa0,0xd8,0xf8,0x00,0x20,0xca,0xf3,
|
||||
0x07,0x4a,0x22,0xf0,0xff,0x02,0x4a,0xea,0x02,0x02,0xc8,0xf8,0x00,0x20,0xd9,0xf8,
|
||||
0x00,0x20,0xdf,0xf8,0x18,0xa3,0x12,0x0e,0x5a,0x43,0xda,0xf8,0x00,0x80,0x92,0x00,
|
||||
0x28,0xf4,0x7f,0x48,0x02,0xf4,0x7f,0x42,0x42,0xea,0x08,0x02,0xdf,0xf8,0x00,0x83,
|
||||
0xca,0xf8,0x00,0x20,0xd8,0xf8,0x00,0x20,0xae,0xf5,0x09,0x7e,0x4f,0xea,0x12,0x6b,
|
||||
0x0b,0xfb,0x03,0xfb,0xda,0xf8,0x04,0x20,0xcb,0xf3,0x8f,0x1b,0x12,0x0c,0x12,0x04,
|
||||
0x4b,0xea,0x02,0x02,0xca,0xf8,0x04,0x20,0xd9,0xf8,0x00,0x20,0xc2,0xf3,0x07,0x22,
|
||||
0x53,0x43,0x9f,0x4a,0x9b,0x00,0xd2,0xf8,0x00,0x90,0x03,0xf4,0x7f,0x43,0x29,0xf4,
|
||||
0x7f,0x49,0x43,0xea,0x09,0x03,0xdf,0xf8,0xbc,0x92,0x13,0x60,0xd9,0xf8,0x00,0xa0,
|
||||
0x52,0xf8,0x24,0x3c,0x4f,0xea,0x1a,0x6a,0x23,0xf4,0x7f,0x43,0x43,0xea,0x0a,0x23,
|
||||
0x42,0xf8,0x24,0x3c,0xd9,0xf8,0x00,0xa0,0x52,0xf8,0x24,0x3c,0xca,0xf3,0x07,0x4a,
|
||||
0x23,0xf0,0xff,0x03,0x4a,0xea,0x03,0x03,0x42,0xf8,0x24,0x3c,0xd9,0xf8,0x00,0xa0,
|
||||
0x52,0xf8,0x1c,0x3c,0x0a,0xf4,0x7f,0x4a,0x23,0xf4,0x7f,0x43,0x4a,0xea,0x03,0x03,
|
||||
0x42,0xf8,0x1c,0x3c,0xd9,0xf8,0x00,0x90,0x52,0xf8,0x1c,0x3c,0x5f,0xfa,0x89,0xf9,
|
||||
0x23,0xf0,0xff,0x03,0x49,0xea,0x03,0x03,0xdf,0xf8,0x5c,0x92,0x42,0xf8,0x1c,0x3c,
|
||||
0x32,0x68,0xd9,0xf8,0x00,0x30,0x02,0xf4,0x70,0x42,0x23,0xf4,0x70,0x43,0x13,0x43,
|
||||
0xc9,0xf8,0x00,0x30,0xd8,0xf8,0x00,0x20,0xdf,0xf8,0x40,0x82,0x02,0xf4,0x70,0x42,
|
||||
0xd8,0xf8,0x00,0x30,0x23,0xf4,0x70,0x43,0x13,0x43,0xc8,0xf8,0x00,0x30,0x32,0x68,
|
||||
0x54,0xf8,0x24,0x3c,0x12,0x0e,0x23,0xf4,0x7f,0x43,0x43,0xea,0x02,0x23,0x44,0xf8,
|
||||
0x24,0x3c,0x70,0x4b,0x1b,0x68,0x62,0x6a,0xc3,0xf3,0x0b,0x06,0x22,0xf4,0x7f,0x63,
|
||||
0x23,0xf0,0x0f,0x03,0x33,0x43,0x6c,0x4e,0x63,0x62,0x32,0x68,0x63,0x6a,0x02,0xf4,
|
||||
0x70,0x22,0x23,0xf4,0x70,0x23,0x13,0x43,0x63,0x62,0x68,0x4c,0x22,0x68,0xd8,0xf8,
|
||||
0x58,0x30,0xc2,0xf3,0x83,0x42,0x23,0xf4,0x70,0x23,0x43,0xea,0x02,0x43,0xc8,0xf8,
|
||||
0x58,0x30,0xdc,0xf8,0x00,0x30,0xd8,0xf8,0x58,0x20,0xc3,0xf3,0x0b,0x4c,0x22,0xf4,
|
||||
0x7f,0x63,0x23,0xf0,0x0f,0x03,0x4c,0xea,0x03,0x03,0xc8,0xf8,0x58,0x30,0x23,0x68,
|
||||
0xd8,0xf8,0x5c,0x20,0x4f,0xea,0xd3,0x5c,0x22,0xf0,0xff,0x73,0x23,0xf4,0x80,0x33,
|
||||
0x43,0xea,0x0c,0x43,0xc8,0xf8,0x5c,0x30,0x33,0x68,0x55,0x4a,0x0f,0x33,0x03,0xf0,
|
||||
0x0f,0x03,0x13,0x60,0x26,0x68,0x53,0x68,0xc6,0xf3,0x80,0x56,0x23,0xf4,0x00,0x03,
|
||||
0x43,0xea,0xc6,0x53,0x53,0x60,0x53,0x68,0x4e,0x4e,0x43,0xf4,0x80,0x43,0x53,0x60,
|
||||
0x02,0x23,0xce,0xf8,0x24,0x32,0x4a,0xf6,0xaa,0x23,0xdf,0xf8,0x74,0xc1,0xce,0xf8,
|
||||
0x00,0x30,0xdc,0xf8,0x00,0x30,0x32,0x68,0x03,0xf0,0x0f,0x08,0x22,0xf4,0x7f,0x02,
|
||||
0x42,0xea,0x08,0x42,0xc3,0xf3,0x03,0x23,0x42,0xea,0x03,0x53,0xdf,0xf8,0x54,0x81,
|
||||
0x33,0x60,0xd8,0xf8,0x00,0x30,0x32,0x68,0xc3,0xf3,0x03,0x49,0x22,0xf0,0xff,0x02,
|
||||
0x49,0xea,0x02,0x02,0xc3,0xf3,0x03,0x63,0x42,0xea,0x03,0x13,0x33,0x60,0xdc,0xf8,
|
||||
0x00,0x60,0xdf,0xf8,0x34,0xc1,0x06,0xf4,0x70,0x22,0xdc,0xf8,0x00,0x30,0x23,0xf4,
|
||||
0x7f,0x03,0x1a,0x43,0xc6,0xf3,0x03,0x63,0x42,0xea,0x03,0x53,0x32,0x4e,0xcc,0xf8,
|
||||
0x00,0x30,0x32,0x68,0x5c,0xf8,0x08,0x3c,0xc2,0xf3,0x03,0x22,0x23,0xf0,0x0f,0x03,
|
||||
0x13,0x43,0x4c,0xf8,0x08,0x3c,0xd8,0xf8,0x00,0x20,0xdc,0xf8,0x08,0x30,0x02,0xf4,
|
||||
0xf8,0x52,0x23,0xf4,0xf8,0x53,0x13,0x43,0xcc,0xf8,0x08,0x30,0x32,0x68,0xdc,0xf8,
|
||||
0x0c,0x30,0x12,0x0b,0x02,0xf4,0x70,0x42,0x23,0xf4,0x70,0x43,0x13,0x43,0xcc,0xf8,
|
||||
0x0c,0x30,0x32,0x68,0x21,0x4e,0xc2,0xf3,0x04,0x42,0x33,0x68,0x23,0xf0,0x1f,0x03,
|
||||
0x13,0x43,0x33,0x60,0x22,0x68,0x1e,0x4c,0xc2,0xf3,0x01,0x42,0x23,0x68,0x23,0xf4,
|
||||
0x40,0x13,0x43,0xea,0x02,0x53,0x23,0x60,0x45,0xf2,0xaa,0x53,0x19,0x4a,0xce,0xf8,
|
||||
0x00,0x30,0x17,0x60,0x2b,0x68,0x43,0xf0,0x01,0x03,0x2b,0x60,0x11,0x60,0x16,0x4b,
|
||||
0x16,0x4c,0x1b,0x68,0x16,0x4a,0x13,0xf0,0x02,0x0f,0x23,0x68,0x15,0x4d,0x43,0xf0,
|
||||
0x02,0x03,0x23,0x60,0x13,0x68,0x21,0x68,0x59,0xd0,0x3f,0xe0,0x40,0x00,0x03,0x40,
|
||||
0x00,0x20,0x03,0x40,0x8c,0x11,0x00,0x50,0x44,0x22,0x03,0x40,0x74,0x11,0x00,0x50,
|
||||
0x34,0x22,0x03,0x40,0x84,0x11,0x00,0x50,0x80,0x11,0x00,0x50,0xb0,0x12,0x00,0x50,
|
||||
0x78,0x22,0x03,0x40,0x84,0x20,0x03,0x40,0x98,0x11,0x00,0x50,0x98,0x20,0x03,0x40,
|
||||
0xa8,0x20,0x03,0x40,0x3c,0x00,0x03,0x40,0x00,0x00,0x09,0x40,0x24,0x00,0x03,0x40,
|
||||
0x08,0x13,0x00,0x50,0x1c,0x00,0x03,0x40,0x88,0x22,0x03,0x40,0x88,0x11,0x00,0x50,
|
||||
0x40,0x22,0x03,0x40,0x78,0x11,0x00,0x50,0x24,0x22,0x03,0x40,0x28,0x22,0x03,0x40,
|
||||
0x7c,0x11,0x00,0x50,0x70,0x11,0x00,0x50,0x1c,0x22,0x03,0x40,0x14,0x22,0x03,0x40,
|
||||
0x90,0x11,0x00,0x50,0x94,0x11,0x00,0x50,0x88,0x20,0x03,0x40,0x21,0xf4,0xe1,0x72,
|
||||
0xc3,0xf3,0xc1,0x46,0x22,0xf0,0x01,0x02,0xc3,0xf3,0xc0,0x51,0x32,0x43,0x42,0xea,
|
||||
0x01,0x22,0xc3,0xf3,0x41,0x51,0x42,0xea,0x81,0x12,0x22,0x60,0x22,0x68,0xd7,0x07,
|
||||
0x02,0xd5,0x2a,0x68,0x56,0x07,0xfc,0xd5,0xc3,0xf3,0x02,0x43,0x16,0xe0,0xc3,0xf3,
|
||||
0xc1,0x62,0xde,0x0f,0x42,0xea,0x06,0x26,0x21,0xf4,0xe1,0x72,0x22,0xf0,0x01,0x02,
|
||||
0x32,0x43,0xc3,0xf3,0x41,0x71,0x42,0xea,0x81,0x12,0x22,0x60,0x22,0x68,0xd4,0x07,
|
||||
0x02,0xd5,0x2a,0x68,0x51,0x07,0xfc,0xd5,0xc3,0xf3,0x02,0x63,0x4a,0xf6,0xaa,0x22,
|
||||
0x3a,0x49,0x3b,0x4c,0x0a,0x60,0x22,0x68,0x1b,0x03,0xb3,0xf5,0xe0,0x4f,0x22,0xf4,
|
||||
0xe2,0x42,0x18,0xbf,0x43,0xf4,0x80,0x73,0x13,0x43,0x23,0x60,0x45,0xf2,0xaa,0x53,
|
||||
0x4f,0xf6,0xff,0x74,0x0b,0x60,0x33,0x4b,0x00,0x21,0x01,0x22,0x19,0x60,0x43,0xf8,
|
||||
0x20,0x2c,0x31,0x4a,0x4f,0xf0,0x05,0x0e,0x14,0x60,0x30,0x4c,0x43,0xf8,0x20,0x1c,
|
||||
0x02,0xf5,0xec,0x72,0x10,0x23,0xc4,0xf8,0x00,0xe0,0x13,0x60,0x2c,0x4b,0x15,0x26,
|
||||
0x1e,0x60,0x02,0x26,0x26,0x60,0x2b,0x4e,0x37,0x68,0xc4,0xf8,0x00,0xe0,0xdf,0xf8,
|
||||
0xb4,0xe0,0xce,0xf8,0x00,0x10,0xce,0xf8,0x04,0x10,0x18,0xb1,0x31,0x68,0x41,0xf4,
|
||||
0x00,0x01,0x31,0x60,0x02,0x21,0x05,0x20,0x21,0x60,0x20,0x60,0x08,0x20,0x10,0x60,
|
||||
0x15,0x22,0x1a,0x60,0x21,0x60,0x2b,0x68,0x9a,0x07,0xfc,0xd4,0x1e,0x4b,0x1b,0x68,
|
||||
0x13,0xf0,0x10,0x0f,0x14,0xbf,0x04,0x25,0x00,0x25,0xff,0xf7,0x1b,0xfd,0x3b,0x02,
|
||||
0x07,0xd4,0x05,0x23,0x23,0x60,0x33,0x68,0x23,0xf4,0x00,0x03,0x33,0x60,0x02,0x23,
|
||||
0x23,0x60,0xbd,0xb9,0x15,0x4b,0x16,0x48,0x19,0x68,0x03,0xf5,0x10,0x53,0x04,0x33,
|
||||
0x1a,0x68,0xc9,0xb2,0x02,0xf0,0x0f,0x02,0x51,0x43,0x1b,0x68,0x14,0x22,0x03,0xf0,
|
||||
0x0f,0x03,0x9b,0x02,0xc3,0xeb,0x81,0x21,0x01,0xf6,0xd8,0x71,0xbd,0xe8,0xf8,0x4f,
|
||||
0xff,0xf7,0xea,0xbc,0x28,0x46,0xbd,0xe8,0xf8,0x8f,0x00,0xbf,0x64,0x20,0x03,0x40,
|
||||
0xa8,0x20,0x03,0x40,0x50,0x20,0x03,0x40,0x34,0x20,0x03,0x40,0x88,0x22,0x03,0x40,
|
||||
0xb4,0x22,0x03,0x40,0x7c,0x22,0x03,0x40,0x54,0x20,0x03,0x40,0x2c,0x00,0x03,0x40,
|
||||
0xf4,0x0e,0x00,0x20,0xc0,0x22,0x03,0x40,0x08,0xb5,0x01,0x1c,0x00,0x22,0x00,0x20,
|
||||
0x00,0x23,0x00,0xf0,0xeb,0xf8,0x08,0xbc,0x02,0xbc,0x08,0x47,0x10,0xb5,0x00,0x21,
|
||||
0x04,0x1c,0x00,0xf0,0x5d,0xf9,0x05,0x4b,0x18,0x68,0xc3,0x6b,0x00,0x2b,0x01,0xd0,
|
||||
0x00,0xf0,0x06,0xf8,0x20,0x1c,0xff,0xf7,0xa7,0xfc,0xc0,0x46,0x0c,0x0f,0x00,0x20,
|
||||
0x18,0x47,0xc0,0x46,0x38,0xb5,0x0a,0x4b,0x0a,0x4c,0xe4,0x1a,0xa4,0x10,0x0a,0xd0,
|
||||
0x09,0x4a,0xa5,0x18,0xad,0x00,0xed,0x18,0x2b,0x68,0x01,0x3c,0x00,0xf0,0x0e,0xf8,
|
||||
0x04,0x3d,0x00,0x2c,0xf8,0xd1,0x00,0xf0,0xcd,0xf9,0x38,0xbc,0x01,0xbc,0x00,0x47,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x3f,0x18,0x47,0xc0,0x46,
|
||||
0x70,0xb5,0x10,0x4e,0x10,0x4d,0xad,0x1b,0xad,0x10,0x00,0x24,0x00,0x2d,0x06,0xd0,
|
||||
0xa3,0x00,0xf3,0x58,0x01,0x34,0x00,0xf0,0x1d,0xf8,0xa5,0x42,0xf8,0xd1,0x00,0xf0,
|
||||
0xab,0xf9,0x0a,0x4e,0x0a,0x4d,0xad,0x1b,0xad,0x10,0x00,0x24,0x00,0x2d,0x06,0xd0,
|
||||
0xa3,0x00,0xf3,0x58,0x01,0x34,0x00,0xf0,0x0d,0xf8,0xa5,0x42,0xf8,0xd1,0x70,0xbc,
|
||||
0x01,0xbc,0x00,0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x18,0x47,0xc0,0x46,0x70,0xb5,0x0f,0x2a,0x34,0xd9,0x04,0x1c,
|
||||
0x0c,0x43,0x0b,0x1c,0xa4,0x07,0x33,0xd1,0x15,0x1c,0x04,0x1c,0x10,0x3d,0x2d,0x09,
|
||||
0x01,0x35,0x2d,0x01,0x49,0x19,0x1e,0x68,0x26,0x60,0x5e,0x68,0x66,0x60,0x9e,0x68,
|
||||
0xa6,0x60,0xde,0x68,0x10,0x33,0xe6,0x60,0x10,0x34,0x99,0x42,0xf3,0xd1,0x0f,0x23,
|
||||
0x45,0x19,0x13,0x40,0x03,0x2b,0x1d,0xd9,0x1c,0x1f,0x00,0x23,0xa4,0x08,0x01,0x34,
|
||||
0xa4,0x00,0xce,0x58,0xee,0x50,0x04,0x33,0xa3,0x42,0xfa,0xd1,0xed,0x18,0xc9,0x18,
|
||||
0x03,0x23,0x1a,0x40,0x05,0xd0,0x00,0x23,0xcc,0x5c,0xec,0x54,0x01,0x33,0x93,0x42,
|
||||
0xfa,0xd1,0x70,0xbc,0x02,0xbc,0x08,0x47,0x05,0x1c,0x00,0x2a,0xf3,0xd1,0xf8,0xe7,
|
||||
0x05,0x1c,0xf0,0xe7,0x1a,0x1c,0xf8,0xe7,0x70,0xb5,0x83,0x07,0x43,0xd0,0x54,0x1e,
|
||||
0x00,0x2a,0x3d,0xd0,0x0d,0x06,0x2d,0x0e,0x03,0x1c,0x03,0x26,0x03,0xe0,0x62,0x1e,
|
||||
0x00,0x2c,0x35,0xd0,0x14,0x1c,0x01,0x33,0x5a,0x1e,0x15,0x70,0x33,0x42,0xf6,0xd1,
|
||||
0x03,0x2c,0x24,0xd9,0xff,0x25,0x0d,0x40,0x2a,0x02,0x15,0x43,0x2a,0x04,0x15,0x43,
|
||||
0x0f,0x2c,0x11,0xd9,0x26,0x1c,0x10,0x3e,0x36,0x09,0x01,0x36,0x36,0x01,0x1a,0x1c,
|
||||
0x9b,0x19,0x15,0x60,0x55,0x60,0x95,0x60,0xd5,0x60,0x10,0x32,0x93,0x42,0xf8,0xd1,
|
||||
0x0f,0x22,0x14,0x40,0x03,0x2c,0x0a,0xd9,0x26,0x1f,0xb6,0x08,0x01,0x36,0xb6,0x00,
|
||||
0x1a,0x1c,0x9b,0x19,0x20,0xc2,0x93,0x42,0xfc,0xd1,0x03,0x22,0x14,0x40,0x00,0x2c,
|
||||
0x06,0xd0,0x09,0x06,0x1c,0x19,0x09,0x0e,0x19,0x70,0x01,0x33,0xa3,0x42,0xfb,0xd1,
|
||||
0x70,0xbc,0x02,0xbc,0x08,0x47,0x14,0x1c,0x03,0x1c,0xc9,0xe7,0xf8,0xb5,0x44,0x46,
|
||||
0x5f,0x46,0x56,0x46,0x4d,0x46,0x9b,0x46,0x30,0x4b,0xf0,0xb4,0x1c,0x68,0xa4,0x23,
|
||||
0x5b,0x00,0x05,0x1c,0xe0,0x58,0x0e,0x1c,0x90,0x46,0x00,0x28,0x4d,0xd0,0x43,0x68,
|
||||
0x1f,0x2b,0x0f,0xdc,0x5c,0x1c,0x00,0x2d,0x23,0xd1,0x02,0x33,0x9b,0x00,0x44,0x60,
|
||||
0x1e,0x50,0x00,0x20,0x3c,0xbc,0x90,0x46,0x99,0x46,0xa2,0x46,0xab,0x46,0xf8,0xbc,
|
||||
0x02,0xbc,0x08,0x47,0x22,0x4b,0x00,0x2b,0x3c,0xd0,0xc8,0x20,0x40,0x00,0xaf,0xf3,
|
||||
0x00,0x80,0x00,0x28,0x36,0xd0,0xa4,0x22,0x00,0x23,0x52,0x00,0xa1,0x58,0x43,0x60,
|
||||
0x01,0x60,0xa0,0x50,0x40,0x32,0x83,0x50,0x04,0x32,0x83,0x50,0x01,0x24,0x00,0x2d,
|
||||
0xdb,0xd0,0x9a,0x00,0x91,0x46,0x81,0x44,0x42,0x46,0x88,0x21,0x4f,0x46,0x7a,0x50,
|
||||
0xc4,0x22,0x52,0x00,0x90,0x46,0x80,0x44,0x42,0x46,0x87,0x39,0x99,0x40,0x12,0x68,
|
||||
0x0a,0x43,0x94,0x46,0x8a,0x46,0x42,0x46,0x61,0x46,0x11,0x60,0x84,0x22,0x49,0x46,
|
||||
0x5f,0x46,0x52,0x00,0x8f,0x50,0x02,0x2d,0xbf,0xd1,0x02,0x1c,0x55,0x46,0x8d,0x32,
|
||||
0xff,0x32,0x11,0x68,0x0d,0x43,0x15,0x60,0xb7,0xe7,0x20,0x1c,0x4d,0x30,0xff,0x30,
|
||||
0xe0,0x50,0xac,0xe7,0x01,0x20,0x40,0x42,0xb4,0xe7,0xc0,0x46,0x0c,0x0f,0x00,0x20,
|
||||
0x00,0x00,0x00,0x00,0x08,0xb5,0x04,0x4b,0x00,0x2b,0x02,0xd0,0x03,0x48,0xff,0xf7,
|
||||
0x9b,0xfe,0x08,0xbc,0x01,0xbc,0x00,0x47,0x00,0x00,0x00,0x00,0x15,0x0b,0x00,0x20,
|
||||
0xf0,0xb5,0x56,0x46,0x5f,0x46,0x4d,0x46,0x44,0x46,0xf0,0xb4,0x0e,0x1c,0x3f,0x4b,
|
||||
0x1b,0x68,0x87,0xb0,0x03,0x93,0x49,0x33,0xff,0x33,0x01,0x90,0x04,0x93,0xa4,0x22,
|
||||
0x03,0x9b,0x52,0x00,0x9f,0x58,0x00,0x2f,0x4d,0xd0,0x04,0x9b,0x98,0x46,0x00,0x23,
|
||||
0x9b,0x46,0xc4,0x23,0x5b,0x00,0x9c,0x46,0xbc,0x44,0x63,0x46,0x02,0x93,0xc6,0x23,
|
||||
0x5b,0x00,0x9a,0x46,0x7c,0x68,0xa5,0x00,0x7d,0x19,0xba,0x44,0x01,0x3c,0x08,0xd5,
|
||||
0x27,0xe0,0x6b,0x1d,0xff,0x33,0x1b,0x68,0xb3,0x42,0x04,0xd0,0x04,0x3d,0x01,0x3c,
|
||||
0x1f,0xd3,0x00,0x2e,0xf5,0xd1,0x7b,0x68,0x01,0x3b,0x6a,0x68,0xa3,0x42,0x3e,0xd0,
|
||||
0x5b,0x46,0x6b,0x60,0x00,0x2a,0xf1,0xd0,0x7b,0x68,0x99,0x46,0x01,0x23,0xa3,0x40,
|
||||
0x02,0x99,0x09,0x68,0x05,0x91,0x19,0x42,0x26,0xd1,0x00,0xf0,0x43,0xf8,0x7b,0x68,
|
||||
0x4b,0x45,0xc4,0xd1,0x43,0x46,0x1b,0x68,0xbb,0x42,0xc0,0xd1,0x04,0x3d,0x01,0x3c,
|
||||
0xdf,0xd2,0x1b,0x4b,0x00,0x2b,0x0e,0xd0,0x7b,0x68,0x00,0x2b,0x27,0xd1,0x3b,0x68,
|
||||
0x00,0x2b,0x28,0xd0,0x42,0x46,0x38,0x1c,0x13,0x60,0xaf,0xf3,0x00,0x80,0x43,0x46,
|
||||
0x1f,0x68,0x00,0x2f,0xb5,0xd1,0x07,0xb0,0x3c,0xbc,0x90,0x46,0x99,0x46,0xa2,0x46,
|
||||
0xab,0x46,0xf0,0xbc,0x01,0xbc,0x00,0x47,0x51,0x46,0x09,0x68,0x19,0x42,0x08,0xd1,
|
||||
0x2b,0x1c,0x84,0x33,0x19,0x68,0x01,0x98,0x00,0xf0,0x14,0xf8,0xcf,0xe7,0x7c,0x60,
|
||||
0xc0,0xe7,0x2b,0x1c,0x84,0x33,0x18,0x68,0x00,0xf0,0x0c,0xf8,0xc7,0xe7,0x3b,0x68,
|
||||
0xb8,0x46,0x1f,0x1c,0xdd,0xe7,0x00,0x23,0xfa,0xe7,0xc0,0x46,0x0c,0x0f,0x00,0x20,
|
||||
0x00,0x00,0x00,0x00,0x10,0x47,0xc0,0x46,0xf8,0xb5,0xc0,0x46,0xf8,0xbc,0x08,0xbc,
|
||||
0x9e,0x46,0x70,0x47,0xf8,0xb5,0xc0,0x46,0xf8,0xbc,0x08,0xbc,0x9e,0x46,0x70,0x47,
|
||||
0x00,0x00,0x00,0x00,0x24,0xf2,0xff,0x7f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x28,0x15,0x00,0x20,0xff,0xff,0xff,0xc5,0xff,0xff,0xff,0xff,0xc5,0xff,0xff,0xff,
|
||||
0xc5,0xc5,0xc5,0xff,0xc5,0xc5,0xc5,0xff,0x43,0x00,0x00,0x00,0x18,0x0f,0x00,0x20,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x12,0x00,0x20,
|
||||
0x6c,0x12,0x00,0x20,0xd4,0x12,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x01,0xbc,0x00,0x47,0x44,0x13,0x00,0x20,0x00,0x00,0x00,0x00,0xd4,0x0e,0x00,0x20,
|
||||
0x08,0xb5,0x09,0x4b,0x00,0x2b,0x03,0xd0,0x08,0x48,0x09,0x49,0xaf,0xf3,0x00,0x80,
|
||||
0x08,0x48,0x03,0x68,0x00,0x2b,0x04,0xd0,0x07,0x4b,0x00,0x2b,0x01,0xd0,0x00,0xf0,
|
||||
0x0d,0xf8,0x08,0xbc,0x01,0xbc,0x00,0x47,0x00,0x00,0x00,0x00,0xd4,0x0e,0x00,0x20,
|
||||
0x48,0x13,0x00,0x20,0x3c,0x13,0x00,0x20,0x00,0x00,0x00,0x00,0x18,0x47,0xc0,0x46,
|
||||
0xd8,0x30,0x9f,0xe5,0x00,0x00,0x53,0xe3,0xcc,0x30,0x9f,0x05,0x03,0xd0,0xa0,0xe1,
|
||||
0x00,0x20,0x0f,0xe1,0x0f,0x00,0x12,0xe3,0x15,0x00,0x00,0x0a,0xd1,0xf0,0x21,0xe3,
|
||||
0x03,0xd0,0xa0,0xe1,0x01,0xaa,0x4d,0xe2,0x0a,0x30,0xa0,0xe1,0xd7,0xf0,0x21,0xe3,
|
||||
0x03,0xd0,0xa0,0xe1,0x01,0x3a,0x43,0xe2,0xdb,0xf0,0x21,0xe3,0x03,0xd0,0xa0,0xe1,
|
||||
0x01,0x3a,0x43,0xe2,0xd2,0xf0,0x21,0xe3,0x03,0xd0,0xa0,0xe1,0x02,0x3a,0x43,0xe2,
|
||||
0xd3,0xf0,0x21,0xe3,0x03,0xd0,0xa0,0xe1,0x02,0x39,0x43,0xe2,0xff,0x30,0xc3,0xe3,
|
||||
0xff,0x3c,0xc3,0xe3,0x04,0x30,0x03,0xe5,0x00,0x20,0x53,0xe9,0xc0,0x20,0x82,0xe3,
|
||||
0x02,0xf0,0x21,0xe1,0x01,0xa8,0x43,0xe2,0x00,0x10,0xb0,0xe3,0x01,0xb0,0xa0,0xe1,
|
||||
0x01,0x70,0xa0,0xe1,0x60,0x00,0x9f,0xe5,0x60,0x20,0x9f,0xe5,0x00,0x20,0x52,0xe0,
|
||||
0x01,0x30,0x8f,0xe2,0x13,0xff,0x2f,0xe1,0x00,0xf0,0x44,0xfd,0x11,0x4b,0x00,0x2b,
|
||||
0x01,0xd0,0xfe,0x46,0x9f,0x46,0x10,0x4b,0x00,0x2b,0x01,0xd0,0xfe,0x46,0x9f,0x46,
|
||||
0x00,0x20,0x00,0x21,0x04,0x00,0x0d,0x00,0x0e,0x48,0x00,0x28,0x02,0xd0,0x0e,0x48,
|
||||
0x00,0xf0,0x24,0xfe,0x00,0xf0,0xbe,0xfc,0x20,0x00,0x29,0x00,0x00,0xf0,0xcc,0xf8,
|
||||
0x00,0xf0,0xa4,0xfc,0x7b,0x46,0x18,0x47,0x11,0x00,0x00,0xef,0x00,0x00,0x08,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x13,0x00,0x20,
|
||||
0x88,0x13,0x00,0x20,0xad,0x0d,0x00,0x20,0xc1,0x0d,0x00,0x20,0x70,0xb5,0x04,0x46,
|
||||
0x0e,0x46,0x15,0x46,0x00,0x21,0x28,0x22,0x00,0xf0,0x0c,0xfd,0x26,0x61,0x65,0x62,
|
||||
0x00,0x21,0x20,0x22,0x02,0x48,0x00,0xf0,0x05,0xfd,0x00,0x20,0x70,0xbd,0x00,0xbf,
|
||||
0x60,0x13,0x00,0x20,0x10,0xb5,0x01,0x20,0x00,0xf0,0xba,0xf9,0x04,0x46,0x28,0xb9,
|
||||
0x01,0x21,0x20,0x22,0x03,0x48,0x00,0xf0,0xf5,0xfc,0x01,0xe0,0x40,0xf2,0x01,0x14,
|
||||
0x20,0x46,0x10,0xbd,0x60,0x13,0x00,0x20,0x01,0x39,0xf8,0xb5,0x04,0x0b,0x08,0x44,
|
||||
0x07,0x0b,0x25,0x03,0xbc,0x42,0x14,0xd8,0x0b,0x4e,0xa3,0x5d,0x6b,0xb9,0x28,0x46,
|
||||
0x00,0xf0,0xf8,0xf8,0x38,0xb1,0x00,0x04,0x00,0xf4,0x7f,0x00,0x40,0xea,0x04,0x60,
|
||||
0x40,0xf4,0x81,0x70,0xf8,0xbd,0x01,0x23,0xa3,0x55,0x01,0x34,0x05,0xf5,0x80,0x55,
|
||||
0xe8,0xe7,0x00,0x20,0xf8,0xbd,0x00,0xbf,0x60,0x13,0x00,0x20,0xb2,0xf5,0x80,0x5f,
|
||||
0xf8,0xb5,0x07,0x46,0x0e,0x46,0x15,0x46,0x0b,0xd8,0x08,0x46,0x11,0x46,0xff,0xf7,
|
||||
0xd3,0xff,0x04,0x46,0x40,0xb9,0x38,0x46,0x31,0x46,0x2a,0x46,0x00,0xf0,0xe0,0xf8,
|
||||
0x02,0xe0,0x4f,0xf4,0x82,0x70,0xf8,0xbd,0x20,0x46,0xf8,0xbd,0x2d,0xe9,0xf0,0x4f,
|
||||
0x53,0x1e,0x0b,0x44,0x1b,0x0b,0x85,0xb0,0x0c,0x46,0x0f,0x0b,0x83,0x46,0x15,0x46,
|
||||
0x20,0x48,0x00,0x21,0x20,0x22,0x03,0x93,0x4f,0xea,0x07,0x38,0x00,0xf0,0xa2,0xfc,
|
||||
0x4f,0xf0,0x00,0x0a,0xc4,0xf3,0x0b,0x03,0x03,0x9a,0x97,0x42,0x2e,0xd8,0x08,0xf5,
|
||||
0x80,0x5c,0x2e,0x19,0xdf,0xf8,0x60,0x90,0x66,0x45,0x88,0xbf,0xc6,0xf3,0x0b,0x06,
|
||||
0x41,0x46,0x4f,0xf4,0x80,0x52,0x48,0x46,0x8c,0xbf,0xc6,0xeb,0x05,0x06,0x2e,0x46,
|
||||
0xcd,0xf8,0x04,0xc0,0x02,0x93,0x00,0xf0,0x41,0xfc,0x02,0x9b,0x0b,0xeb,0x0a,0x01,
|
||||
0x09,0xeb,0x03,0x00,0x32,0x46,0x00,0xf0,0x39,0xfc,0x48,0x46,0x41,0x46,0x4f,0xf4,
|
||||
0x80,0x52,0xff,0xf7,0xab,0xff,0x01,0x37,0xdd,0xf8,0x04,0xc0,0x38,0xb9,0x34,0x44,
|
||||
0xc4,0xf3,0x0b,0x03,0xad,0x1b,0xb2,0x44,0xe0,0x46,0xcd,0xe7,0x00,0x20,0x05,0xb0,
|
||||
0xbd,0xe8,0xf0,0x8f,0x60,0x13,0x00,0x20,0x00,0x3c,0x00,0x20,0x08,0xb5,0x00,0xf0,
|
||||
0x87,0xf8,0x00,0x20,0x08,0xbd,0x00,0x00,0xf8,0xb5,0x32,0x48,0x32,0x49,0x33,0x4a,
|
||||
0x33,0x4d,0xff,0xf7,0x43,0xff,0x00,0x23,0x2b,0x60,0x2a,0x68,0x2d,0x4c,0x14,0x23,
|
||||
0x03,0xfb,0x02,0x43,0x08,0x33,0x5b,0x68,0x00,0x2b,0xf7,0xd0,0x2d,0x4b,0x1a,0x68,
|
||||
0x19,0x46,0x12,0xf0,0x08,0x0f,0xf9,0xd1,0x2b,0x4e,0x2c,0x4f,0x33,0x68,0x3b,0x60,
|
||||
0x43,0xf0,0x33,0x03,0x33,0x60,0x0a,0x68,0x12,0x07,0xfc,0xd4,0x2b,0x68,0x14,0x22,
|
||||
0x02,0xfb,0x03,0x41,0x89,0x68,0x01,0x39,0x04,0x29,0x26,0xd8,0xdf,0xe8,0x01,0xf0,
|
||||
0x03,0x06,0x0e,0x16,0x1e,0x00,0xff,0xf7,0x2d,0xff,0x20,0xe0,0x53,0x43,0xe2,0x18,
|
||||
0x10,0x69,0xe1,0x58,0x52,0x68,0xff,0xf7,0xc1,0xff,0x18,0xe0,0x53,0x43,0xe2,0x18,
|
||||
0x10,0x69,0xe1,0x58,0x52,0x68,0xff,0xf7,0x51,0xff,0x10,0xe0,0x53,0x43,0xe2,0x18,
|
||||
0x10,0x69,0xe1,0x58,0x52,0x68,0xff,0xf7,0x61,0xff,0x08,0xe0,0x53,0x43,0xe2,0x18,
|
||||
0xe0,0x58,0x51,0x68,0xff,0xf7,0x20,0xff,0x01,0xe0,0x40,0xf2,0x05,0x10,0x3b,0x68,
|
||||
0x33,0x60,0x0c,0x4b,0x1b,0x68,0x1b,0x07,0xfb,0xd4,0x2b,0x68,0x14,0x22,0x02,0xfb,
|
||||
0x03,0x44,0x10,0xb1,0xe3,0x68,0xe0,0x60,0xfe,0xe7,0xe2,0x68,0x83,0xf0,0x01,0x03,
|
||||
0xe0,0x60,0xa1,0xe7,0xd8,0x1b,0x00,0x20,0x00,0x1c,0x00,0x20,0x00,0x2c,0x00,0x20,
|
||||
0x80,0x13,0x00,0x20,0x00,0x40,0x03,0x40,0x04,0x40,0x03,0x40,0x84,0x13,0x00,0x20,
|
||||
0xfe,0xe7,0x00,0x00,0x08,0xb5,0x04,0x4b,0x1b,0x68,0x5b,0x69,0x98,0x47,0x03,0x4b,
|
||||
0x00,0x22,0x1a,0x60,0x08,0xbd,0x00,0xbf,0xa8,0x01,0x00,0x10,0x84,0x04,0x60,0x42,
|
||||
0x08,0xb5,0x04,0x4b,0x1b,0x68,0x9b,0x69,0x98,0x47,0x03,0x4b,0x00,0x22,0x1a,0x60,
|
||||
0x08,0xbd,0x00,0xbf,0xa8,0x01,0x00,0x10,0x84,0x04,0x60,0x42,0x10,0xb5,0x3a,0x4b,
|
||||
0x3a,0x4a,0x1b,0x68,0x13,0xf0,0x02,0x0f,0x39,0x4b,0x19,0x68,0x41,0xf0,0x02,0x01,
|
||||
0x19,0x60,0x12,0x68,0x1a,0xd0,0x19,0x68,0xc2,0xf3,0xc1,0x04,0x21,0xf4,0xe1,0x71,
|
||||
0x21,0xf0,0x01,0x01,0xc2,0xf3,0xc0,0x10,0x21,0x43,0x41,0xea,0x00,0x21,0xc2,0xf3,
|
||||
0x41,0x10,0x41,0xea,0x80,0x11,0x19,0x60,0x1b,0x68,0xdc,0x07,0x03,0xd5,0x2d,0x4b,
|
||||
0x1b,0x68,0x58,0x07,0xfb,0xd5,0x02,0xf0,0x07,0x03,0x19,0xe0,0x19,0x68,0xc2,0xf3,
|
||||
0xc1,0x24,0x21,0xf4,0xe1,0x71,0x21,0xf0,0x01,0x01,0xc2,0xf3,0xc0,0x30,0x21,0x43,
|
||||
0x41,0xea,0x00,0x21,0xc2,0xf3,0x41,0x30,0x41,0xea,0x80,0x11,0x19,0x60,0x1b,0x68,
|
||||
0xd9,0x07,0x03,0xd5,0x1f,0x4b,0x1b,0x68,0x5b,0x07,0xfb,0xd5,0xc2,0xf3,0x02,0x23,
|
||||
0x1d,0x4a,0x4a,0xf6,0xaa,0x21,0x11,0x60,0x1c,0x49,0x1b,0x03,0x08,0x68,0xb3,0xf5,
|
||||
0xe0,0x4f,0x18,0xbf,0x43,0xf4,0x80,0x73,0x20,0xf4,0xe2,0x40,0x03,0x43,0x0b,0x60,
|
||||
0x45,0xf2,0xaa,0x53,0x13,0x60,0x00,0x23,0x15,0x4a,0x12,0x68,0x02,0xf0,0x0f,0x02,
|
||||
0x93,0x42,0x14,0x4a,0x15,0xd2,0x13,0x60,0x13,0x4a,0x14,0x48,0x01,0x21,0x11,0x60,
|
||||
0x00,0x21,0x01,0x60,0x11,0x60,0x05,0x21,0xc2,0xf8,0x58,0x12,0x4f,0xf0,0xff,0x31,
|
||||
0xc0,0xf8,0x8c,0x12,0xc0,0xf8,0x90,0x12,0x02,0x21,0xc2,0xf8,0x58,0x12,0x01,0x33,
|
||||
0xe2,0xe7,0x00,0x23,0x13,0x60,0x10,0xbd,0x00,0x00,0x09,0x40,0x08,0x13,0x00,0x50,
|
||||
0x24,0x00,0x03,0x40,0x1c,0x00,0x03,0x40,0x64,0x20,0x03,0x40,0xa8,0x20,0x03,0x40,
|
||||
0x00,0x24,0x03,0x40,0x50,0x20,0x03,0x40,0x30,0x20,0x03,0x40,0x34,0x20,0x03,0x40,
|
||||
0x2d,0xe9,0xf0,0x4f,0xc7,0x4b,0x85,0xb0,0x02,0x90,0x1b,0x68,0x4f,0xf0,0xfc,0x54,
|
||||
0x23,0xf0,0x7f,0x43,0x01,0x93,0x00,0x22,0xc3,0x4b,0x1b,0x68,0x03,0xf0,0x0f,0x03,
|
||||
0x9a,0x42,0x80,0xf0,0x58,0x82,0xc1,0x48,0x03,0x68,0x13,0xf0,0x01,0x03,0x03,0x93,
|
||||
0x40,0xf0,0x75,0x81,0xdf,0xf8,0x6c,0xc3,0x4f,0xf0,0x05,0x0e,0xbc,0x4b,0xcc,0xf8,
|
||||
0x00,0xe0,0x1b,0x68,0xdf,0xf8,0x60,0x83,0xc3,0xf3,0x03,0x23,0xd8,0xf8,0x00,0x60,
|
||||
0x4f,0xf4,0x40,0x71,0x01,0x33,0xb1,0xfb,0xf3,0xf3,0xb6,0x4d,0xb6,0xb2,0x5e,0x43,
|
||||
0x29,0x68,0xc6,0xf3,0x8f,0x16,0x09,0x0c,0x09,0x04,0x31,0x43,0x29,0x60,0xb2,0x49,
|
||||
0x0d,0x68,0xb2,0x49,0x5d,0x43,0xad,0x09,0x0e,0x68,0x0d,0x60,0xb0,0x4d,0x2e,0x68,
|
||||
0x51,0xf8,0x24,0x7c,0xc6,0xf3,0x07,0x46,0x5e,0x43,0x27,0xf0,0xff,0x07,0xc6,0xf3,
|
||||
0x87,0x16,0x3e,0x43,0x41,0xf8,0x24,0x6c,0xaa,0x4f,0xab,0x4e,0xd6,0xf8,0x00,0xa0,
|
||||
0xd7,0xf8,0x00,0x90,0xca,0xf3,0x07,0x4a,0x29,0xf0,0xff,0x09,0x4a,0xea,0x09,0x09,
|
||||
0xc7,0xf8,0x00,0x90,0x37,0x68,0x4f,0xea,0x17,0x6a,0x0a,0xfb,0x03,0xfa,0xa3,0x4f,
|
||||
0x4f,0xea,0x8a,0x0a,0xd7,0xf8,0x00,0x90,0x0a,0xf4,0x7f,0x4a,0x29,0xf4,0x7f,0x49,
|
||||
0x4a,0xea,0x09,0x09,0xc7,0xf8,0x00,0x90,0xdf,0xf8,0xd0,0x92,0xdf,0xf8,0xd0,0xa2,
|
||||
0xd9,0xf8,0x00,0x70,0x4f,0xea,0x17,0x6b,0x0b,0xfb,0x03,0xfb,0xda,0xf8,0x00,0x70,
|
||||
0x3f,0x0c,0x3f,0x04,0x47,0xea,0x9b,0x17,0xca,0xf8,0x00,0x70,0x36,0x68,0xc6,0xf3,
|
||||
0x07,0x26,0x73,0x43,0x92,0x4e,0x9b,0x00,0x37,0x68,0x03,0xf4,0x7f,0x43,0x27,0xf4,
|
||||
0x7f,0x47,0x1f,0x43,0x37,0x60,0x8f,0x4b,0x8f,0x4e,0xd6,0xf8,0x00,0xa0,0x1f,0x68,
|
||||
0x4f,0xea,0x1a,0x6a,0x27,0xf4,0x7f,0x47,0x47,0xea,0x0a,0x27,0x1f,0x60,0xd6,0xf8,
|
||||
0x00,0xa0,0x1f,0x68,0xca,0xf3,0x07,0x4a,0x27,0xf0,0xff,0x07,0x4a,0xea,0x07,0x07,
|
||||
0x1f,0x60,0xd6,0xf8,0x00,0xa0,0x9f,0x68,0x0a,0xf4,0x7f,0x4a,0x27,0xf4,0x7f,0x47,
|
||||
0x4a,0xea,0x07,0x07,0x9f,0x60,0x37,0x68,0x9e,0x68,0xff,0xb2,0x26,0xf0,0xff,0x06,
|
||||
0x3e,0x43,0x9e,0x60,0x2f,0x68,0xde,0x68,0x07,0xf4,0x70,0x47,0x26,0xf4,0x70,0x46,
|
||||
0x3e,0x43,0xde,0x60,0xd9,0xf8,0x00,0x70,0x5e,0x68,0x07,0xf4,0x70,0x47,0x26,0xf4,
|
||||
0x70,0x46,0x3e,0x43,0x5e,0x60,0x2d,0x68,0x51,0xf8,0x24,0x3c,0x2d,0x0e,0x23,0xf4,
|
||||
0x7f,0x43,0x43,0xea,0x05,0x23,0x41,0xf8,0x24,0x3c,0x70,0x4b,0x1d,0x68,0x70,0x4b,
|
||||
0xc5,0xf3,0x0b,0x05,0x19,0x68,0x21,0xf4,0x7f,0x61,0x21,0xf0,0x0f,0x01,0x29,0x43,
|
||||
0x6c,0x4d,0x19,0x60,0x2e,0x68,0x19,0x68,0x06,0xf4,0x70,0x26,0x21,0xf4,0x70,0x21,
|
||||
0x31,0x43,0x19,0x60,0x68,0x4b,0x69,0x49,0x1f,0x68,0x0e,0x68,0xc7,0xf3,0x83,0x47,
|
||||
0x26,0xf4,0x70,0x26,0x46,0xea,0x07,0x46,0x0e,0x60,0xd8,0xf8,0x00,0x70,0x0e,0x68,
|
||||
0xc7,0xf3,0x0b,0x47,0x26,0xf4,0x7f,0x66,0x26,0xf0,0x0f,0x06,0x3e,0x43,0x0e,0x60,
|
||||
0x5f,0x4e,0x1f,0x68,0x31,0x68,0xff,0x0d,0x21,0xf0,0xff,0x71,0x21,0xf4,0x80,0x31,
|
||||
0x41,0xea,0x07,0x41,0x31,0x60,0x2d,0x68,0x5a,0x49,0x0f,0x35,0x05,0xf0,0x0f,0x05,
|
||||
0x0d,0x60,0x1e,0x68,0x4d,0x68,0xc6,0xf3,0x80,0x56,0x25,0xf4,0x00,0x05,0x45,0xea,
|
||||
0xc6,0x55,0x4d,0x60,0x4d,0x68,0x54,0x4f,0x45,0xf4,0x80,0x45,0x4d,0x60,0x02,0x21,
|
||||
0x52,0x4d,0xcc,0xf8,0x00,0x10,0x4a,0xf6,0xaa,0x21,0x29,0x60,0x50,0x49,0x3e,0x68,
|
||||
0xd1,0xf8,0x00,0xc0,0x06,0xf0,0x0f,0x08,0x2c,0xf4,0x7f,0x0c,0x4c,0xea,0x08,0x4c,
|
||||
0xc6,0xf3,0x03,0x26,0x4c,0xea,0x06,0x56,0x0e,0x60,0x4a,0x4e,0xd6,0xf8,0x00,0xc0,
|
||||
0xd1,0xf8,0x00,0x80,0xcc,0xf3,0x03,0x49,0x28,0xf0,0xff,0x08,0x49,0xea,0x08,0x08,
|
||||
0xcc,0xf3,0x03,0x6c,0x48,0xea,0x0c,0x1c,0xc1,0xf8,0x00,0xc0,0x3f,0x68,0xd1,0xf8,
|
||||
0x04,0xc0,0x07,0xf4,0x70,0x28,0x2c,0xf4,0x7f,0x0c,0x4c,0xea,0x08,0x0c,0xc7,0xf3,
|
||||
0x03,0x67,0x4c,0xea,0x07,0x57,0x4f,0x60,0x3b,0x49,0x3c,0x4f,0xd1,0xf8,0x00,0x80,
|
||||
0xd7,0xf8,0x00,0xc0,0xc8,0xf3,0x03,0x28,0x2c,0xf0,0x0f,0x0c,0x48,0xea,0x0c,0x0c,
|
||||
0xc7,0xf8,0x00,0xc0,0xd6,0xf8,0x00,0xc0,0x35,0x4e,0x0c,0xf4,0xf8,0x5c,0x37,0x68,
|
||||
0x27,0xf4,0xf8,0x57,0x4c,0xea,0x07,0x07,0x37,0x60,0x0f,0x68,0xd6,0xf8,0x04,0xc0,
|
||||
0x3f,0x0b,0x07,0xf4,0x70,0x47,0x2c,0xf4,0x70,0x4c,0x47,0xea,0x0c,0x07,0x77,0x60,
|
||||
0x0f,0x68,0x2c,0x49,0xc7,0xf3,0x04,0x47,0x0e,0x68,0x26,0xf0,0x1f,0x06,0x3e,0x43,
|
||||
0x0e,0x60,0x1e,0x68,0x28,0x4b,0xc6,0xf3,0x01,0x46,0x19,0x68,0x21,0xf4,0x40,0x11,
|
||||
0x41,0xea,0x06,0x51,0x19,0x60,0x45,0xf2,0xaa,0x53,0x2b,0x60,0x23,0x4b,0xc3,0xf8,
|
||||
0x00,0xe0,0x01,0x68,0x41,0xf0,0x01,0x01,0x01,0x60,0x03,0x99,0x19,0x60,0x20,0x4b,
|
||||
0x48,0xe0,0x00,0xbf,0x14,0x24,0x03,0x40,0x00,0x24,0x03,0x40,0x40,0x00,0x03,0x40,
|
||||
0x00,0x20,0x03,0x40,0x40,0x22,0x03,0x40,0x8c,0x11,0x00,0x50,0x44,0x22,0x03,0x40,
|
||||
0x74,0x11,0x00,0x50,0x24,0x22,0x03,0x40,0x78,0x11,0x00,0x50,0x28,0x22,0x03,0x40,
|
||||
0x34,0x22,0x03,0x40,0x10,0x22,0x03,0x40,0x70,0x11,0x00,0x50,0x84,0x11,0x00,0x50,
|
||||
0x68,0x22,0x03,0x40,0x80,0x11,0x00,0x50,0xb0,0x12,0x00,0x50,0x6c,0x22,0x03,0x40,
|
||||
0x70,0x22,0x03,0x40,0x78,0x22,0x03,0x40,0x90,0x11,0x00,0x50,0x64,0x20,0x03,0x40,
|
||||
0x84,0x20,0x03,0x40,0x94,0x11,0x00,0x50,0x98,0x11,0x00,0x50,0x80,0x20,0x03,0x40,
|
||||
0x90,0x20,0x03,0x40,0x98,0x20,0x03,0x40,0xa8,0x20,0x03,0x40,0x3c,0x00,0x03,0x40,
|
||||
0x00,0x00,0x09,0x40,0x88,0x22,0x03,0x40,0x88,0x11,0x00,0x50,0x7c,0x11,0x00,0x50,
|
||||
0x2c,0x22,0x03,0x40,0x62,0x49,0x1b,0x68,0x62,0x48,0x13,0xf0,0x02,0x0f,0x62,0x4b,
|
||||
0x1d,0x68,0x45,0xf0,0x02,0x05,0x1d,0x60,0x09,0x68,0x19,0xd0,0x1d,0x68,0xc1,0xf3,
|
||||
0xc1,0x47,0x25,0xf4,0xe1,0x75,0x25,0xf0,0x01,0x05,0xc1,0xf3,0xc0,0x56,0x3d,0x43,
|
||||
0x45,0xea,0x06,0x25,0xc1,0xf3,0x41,0x56,0x45,0xea,0x86,0x15,0x1d,0x60,0x1b,0x68,
|
||||
0xdd,0x07,0x02,0xd5,0x03,0x68,0x5b,0x07,0xfc,0xd5,0xc1,0xf3,0x02,0x43,0x17,0xe0,
|
||||
0x1d,0x68,0xcf,0x0f,0xc1,0xf3,0xc1,0x66,0x25,0xf4,0xe1,0x75,0x46,0xea,0x07,0x26,
|
||||
0x25,0xf0,0x01,0x05,0x35,0x43,0xc1,0xf3,0x41,0x76,0x45,0xea,0x86,0x15,0x1d,0x60,
|
||||
0x1b,0x68,0xdf,0x07,0x02,0xd5,0x03,0x68,0x5e,0x07,0xfc,0xd5,0xc1,0xf3,0x02,0x63,
|
||||
0x46,0x49,0x4a,0xf6,0xaa,0x25,0x0d,0x60,0x45,0x4d,0x1b,0x03,0x2e,0x68,0xb3,0xf5,
|
||||
0xe0,0x4f,0x26,0xf4,0xe2,0x46,0x18,0xbf,0x43,0xf4,0x80,0x73,0x33,0x43,0x2b,0x60,
|
||||
0x45,0xf2,0xaa,0x53,0x0b,0x60,0x3f,0x4b,0x01,0x21,0x1a,0x60,0x43,0xf8,0x20,0x1c,
|
||||
0x3d,0x49,0x4f,0xf6,0xff,0x75,0x0d,0x60,0x3c,0x4f,0x00,0x25,0x43,0xf8,0x20,0x5c,
|
||||
0x4f,0xf0,0x05,0x0e,0x03,0xf5,0x0e,0x73,0x10,0x21,0x39,0x4e,0xc3,0xf8,0x00,0xe0,
|
||||
0x39,0x60,0x15,0x21,0x31,0x60,0x02,0x21,0x19,0x60,0x36,0x49,0xd1,0xf8,0x00,0xc0,
|
||||
0xc3,0xf8,0x00,0xe0,0xdf,0xf8,0xdc,0xe0,0xce,0xf8,0x00,0x50,0xce,0xf8,0x04,0x50,
|
||||
0x02,0x9d,0x1d,0xb1,0x0d,0x68,0x45,0xf4,0x00,0x05,0x0d,0x60,0xdf,0xf8,0xc8,0xe0,
|
||||
0x02,0x25,0x1d,0x60,0xce,0xf8,0x00,0x40,0x4f,0xf0,0x05,0x0e,0xc3,0xf8,0x00,0xe0,
|
||||
0x4f,0xf0,0x08,0x0e,0xc7,0xf8,0x00,0xe0,0x15,0x27,0x37,0x60,0x1d,0x60,0x05,0x68,
|
||||
0xad,0x07,0x18,0xd5,0xfb,0xe7,0x24,0x4b,0x24,0x48,0x1a,0x68,0x03,0xf5,0x10,0x53,
|
||||
0x04,0x33,0x19,0x68,0xd2,0xb2,0x01,0xf0,0x0f,0x01,0x1b,0x68,0x51,0x43,0x03,0xf0,
|
||||
0x0f,0x03,0x9b,0x02,0xc3,0xeb,0x81,0x21,0x01,0xf6,0xd8,0x71,0x14,0x22,0xff,0xf7,
|
||||
0xe7,0xfc,0x05,0x46,0x16,0xe0,0x1a,0x48,0x00,0x68,0x10,0xf0,0x10,0x0f,0x0c,0xbf,
|
||||
0x00,0x25,0x04,0x25,0x1c,0xf4,0x00,0x0f,0x07,0xd1,0x05,0x20,0x18,0x60,0x08,0x68,
|
||||
0x20,0xf4,0x00,0x00,0x08,0x60,0x02,0x21,0x19,0x60,0x01,0x99,0x0c,0x44,0x0d,0xb9,
|
||||
0x01,0x32,0x71,0xe5,0xff,0xf7,0xda,0xfc,0x28,0x46,0x05,0xb0,0xbd,0xe8,0xf0,0x8f,
|
||||
0x08,0x13,0x00,0x50,0x1c,0x00,0x03,0x40,0x24,0x00,0x03,0x40,0x64,0x20,0x03,0x40,
|
||||
0xa8,0x20,0x03,0x40,0x50,0x20,0x03,0x40,0x34,0x20,0x03,0x40,0x0c,0x22,0x03,0x40,
|
||||
0xb4,0x22,0x03,0x40,0x7c,0x22,0x03,0x40,0x2c,0x00,0x03,0x40,0xe4,0x0e,0x00,0x20,
|
||||
0x54,0x20,0x03,0x40,0xc0,0x22,0x03,0x40,0x10,0x21,0x03,0x40,0x10,0xb5,0x00,0x21,
|
||||
0x04,0x1c,0x00,0xf0,0xdf,0xf8,0x05,0x4b,0x18,0x68,0xc3,0x6b,0x00,0x2b,0x01,0xd0,
|
||||
0x00,0xf0,0x06,0xf8,0x20,0x1c,0xff,0xf7,0x8b,0xfc,0xc0,0x46,0xfc,0x0e,0x00,0x20,
|
||||
0x18,0x47,0xc0,0x46,0x70,0xb5,0x10,0x4e,0x10,0x4d,0xad,0x1b,0xad,0x10,0x00,0x24,
|
||||
0x00,0x2d,0x06,0xd0,0xa3,0x00,0xf3,0x58,0x01,0x34,0x00,0xf0,0x1d,0xf8,0xa5,0x42,
|
||||
0xf8,0xd1,0x00,0xf0,0xdb,0xf9,0x0a,0x4e,0x0a,0x4d,0xad,0x1b,0xad,0x10,0x00,0x24,
|
||||
0x00,0x2d,0x06,0xd0,0xa3,0x00,0xf3,0x58,0x01,0x34,0x00,0xf0,0x0d,0xf8,0xa5,0x42,
|
||||
0xf8,0xd1,0x70,0xbc,0x01,0xbc,0x00,0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x47,0xc0,0x46,0xf0,0xb5,0x0f,0x2a,
|
||||
0x37,0xd9,0x03,0x1c,0x0b,0x43,0x9c,0x07,0x37,0xd1,0x16,0x1c,0x10,0x3e,0x36,0x09,
|
||||
0x35,0x01,0x45,0x19,0x10,0x35,0x0c,0x1c,0x03,0x1c,0x27,0x68,0x1f,0x60,0x67,0x68,
|
||||
0x5f,0x60,0xa7,0x68,0x9f,0x60,0xe7,0x68,0xdf,0x60,0x10,0x33,0x10,0x34,0xab,0x42,
|
||||
0xf3,0xd1,0x73,0x1c,0x1b,0x01,0xc5,0x18,0xc9,0x18,0x0f,0x23,0x13,0x40,0x03,0x2b,
|
||||
0x1d,0xd9,0x1c,0x1f,0xa4,0x08,0x01,0x34,0xa4,0x00,0x00,0x23,0xce,0x58,0xee,0x50,
|
||||
0x04,0x33,0xa3,0x42,0xfa,0xd1,0xed,0x18,0xc9,0x18,0x03,0x23,0x1a,0x40,0x05,0xd0,
|
||||
0x00,0x23,0xcc,0x5c,0xec,0x54,0x01,0x33,0x93,0x42,0xfa,0xd1,0xf0,0xbc,0x02,0xbc,
|
||||
0x08,0x47,0x05,0x1c,0x00,0x2a,0xf3,0xd1,0xf8,0xe7,0x05,0x1c,0xf0,0xe7,0x1a,0x1c,
|
||||
0xf8,0xe7,0xc0,0x46,0xf0,0xb5,0x83,0x07,0x4a,0xd0,0x54,0x1e,0x00,0x2a,0x44,0xd0,
|
||||
0x0e,0x06,0x36,0x0e,0x03,0x1c,0x03,0x25,0x03,0xe0,0x62,0x1e,0x00,0x2c,0x3c,0xd0,
|
||||
0x14,0x1c,0x01,0x33,0x5a,0x1e,0x16,0x70,0x2b,0x42,0xf6,0xd1,0x03,0x2c,0x2b,0xd9,
|
||||
0xff,0x25,0x0d,0x40,0x2a,0x02,0x15,0x43,0x2a,0x04,0x15,0x43,0x0f,0x2c,0x15,0xd9,
|
||||
0x27,0x1c,0x10,0x3f,0x3f,0x09,0x1e,0x1c,0x3a,0x01,0x10,0x36,0xb6,0x18,0x1a,0x1c,
|
||||
0x15,0x60,0x55,0x60,0x95,0x60,0xd5,0x60,0x10,0x32,0xb2,0x42,0xf8,0xd1,0x01,0x37,
|
||||
0x3f,0x01,0x0f,0x22,0xdb,0x19,0x14,0x40,0x03,0x2c,0x0d,0xd9,0x27,0x1f,0xbf,0x08,
|
||||
0xba,0x00,0x1e,0x1d,0xb6,0x18,0x1a,0x1c,0x20,0xc2,0xb2,0x42,0xfc,0xd1,0x01,0x37,
|
||||
0xbf,0x00,0x03,0x22,0xdb,0x19,0x14,0x40,0x00,0x2c,0x06,0xd0,0x0a,0x06,0x12,0x0e,
|
||||
0x1c,0x19,0x1a,0x70,0x01,0x33,0xa3,0x42,0xfb,0xd1,0xf0,0xbc,0x02,0xbc,0x08,0x47,
|
||||
0x14,0x1c,0x03,0x1c,0xc2,0xe7,0xc0,0x46,0x08,0xb5,0x04,0x4b,0x00,0x2b,0x02,0xd0,
|
||||
0x03,0x48,0x00,0xf0,0x9b,0xf8,0x08,0xbc,0x01,0xbc,0x00,0x47,0x00,0x00,0x00,0x00,
|
||||
0xc1,0x0d,0x00,0x20,0xf0,0xb5,0x5f,0x46,0x56,0x46,0x4d,0x46,0x44,0x46,0xf0,0xb4,
|
||||
0x43,0x4b,0x1b,0x68,0x85,0xb0,0x01,0x93,0x49,0x33,0xff,0x33,0x02,0x90,0x03,0x93,
|
||||
0x0f,0x1c,0x01,0x98,0xa4,0x21,0x49,0x00,0x42,0x58,0x90,0x46,0x00,0x2a,0x4b,0xd0,
|
||||
0x03,0x98,0x81,0x46,0x41,0x46,0x4e,0x68,0x74,0x1e,0x42,0xd4,0x45,0x46,0xa3,0x00,
|
||||
0x88,0x35,0xed,0x18,0xc6,0x20,0xc4,0x23,0x01,0x36,0x5b,0x00,0x40,0x00,0xb6,0x00,
|
||||
0x9b,0x46,0x82,0x46,0x46,0x44,0xc3,0x44,0xc2,0x44,0x08,0xe0,0x2b,0x1c,0x80,0x33,
|
||||
0x1b,0x68,0xbb,0x42,0x05,0xd0,0x04,0x3d,0x04,0x3e,0x01,0x3c,0x29,0xd3,0x00,0x2f,
|
||||
0xf4,0xd1,0x41,0x46,0x4a,0x68,0x01,0x3a,0x33,0x68,0xa2,0x42,0x30,0xd0,0x00,0x22,
|
||||
0x32,0x60,0x00,0x2b,0xef,0xd0,0x40,0x46,0x59,0x46,0x40,0x68,0x01,0x22,0x09,0x68,
|
||||
0xa2,0x40,0x00,0x90,0x11,0x42,0x20,0xd0,0x50,0x46,0x00,0x68,0x10,0x42,0x21,0xd1,
|
||||
0x02,0x98,0x29,0x68,0x00,0xf0,0x40,0xf8,0x41,0x46,0x49,0x68,0x00,0x9a,0x91,0x42,
|
||||
0xb7,0xd1,0x4a,0x46,0x12,0x68,0x42,0x45,0xb3,0xd1,0x04,0x3d,0x04,0x3e,0x01,0x3c,
|
||||
0xd5,0xd2,0x18,0x4a,0x00,0x2a,0x11,0xd1,0x05,0xb0,0x3c,0xbc,0x90,0x46,0x99,0x46,
|
||||
0xa2,0x46,0xab,0x46,0xf0,0xbc,0x01,0xbc,0x00,0x47,0x00,0xf0,0x25,0xf8,0xe3,0xe7,
|
||||
0x4c,0x60,0xce,0xe7,0x28,0x68,0x00,0xf0,0x1f,0xf8,0xdd,0xe7,0x43,0x46,0x5b,0x68,
|
||||
0x40,0x46,0x00,0x2b,0x0d,0xd1,0x03,0x68,0x00,0x2b,0x0e,0xd0,0x49,0x46,0x0b,0x60,
|
||||
0xaf,0xf3,0x00,0x80,0x4b,0x46,0x1a,0x68,0x90,0x46,0x41,0x46,0x00,0x29,0x91,0xd1,
|
||||
0xda,0xe7,0x03,0x68,0xc1,0x46,0x98,0x46,0xf7,0xe7,0x00,0x23,0xfa,0xe7,0xc0,0x46,
|
||||
0xfc,0x0e,0x00,0x20,0x00,0x00,0x00,0x00,0x18,0x47,0xc0,0x46,0x08,0xb5,0x01,0x1c,
|
||||
0x00,0x22,0x00,0x20,0x00,0x23,0x00,0xf0,0x1f,0xf8,0x08,0xbc,0x02,0xbc,0x08,0x47,
|
||||
0x38,0xb5,0x0a,0x4b,0x0a,0x4d,0xed,0x1a,0xad,0x10,0x0a,0xd0,0x01,0x3d,0xac,0x00,
|
||||
0xe4,0x18,0x00,0xe0,0x01,0x3d,0x23,0x68,0x00,0xf0,0x0c,0xf8,0x04,0x3c,0x00,0x2d,
|
||||
0xf8,0xd1,0x00,0xf0,0x71,0xf8,0x38,0xbc,0x01,0xbc,0x00,0x47,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x18,0x47,0xc0,0x46,0xf0,0xb5,0x4f,0x46,0x46,0x46,0xc0,0xb4,
|
||||
0x98,0x46,0x2c,0x4b,0xa4,0x25,0x1b,0x68,0x6d,0x00,0x5c,0x59,0x83,0xb0,0x06,0x1c,
|
||||
0x0f,0x1c,0x91,0x46,0x01,0x93,0x00,0x2c,0x46,0xd0,0x65,0x68,0x1f,0x2d,0x1a,0xdd,
|
||||
0x25,0x4b,0x00,0x2b,0x02,0xd1,0x01,0x20,0x40,0x42,0x1c,0xe0,0xc8,0x20,0x40,0x00,
|
||||
0xaf,0xf3,0x00,0x80,0x04,0x1e,0xf6,0xd0,0x00,0x25,0x45,0x60,0xa4,0x23,0x01,0x98,
|
||||
0x5b,0x00,0xc0,0x58,0x01,0x99,0x20,0x60,0xcc,0x50,0xc4,0x23,0x5b,0x00,0xe5,0x50,
|
||||
0xc6,0x23,0x5b,0x00,0xe5,0x50,0x00,0x2e,0x0c,0xd1,0x6b,0x1c,0x02,0x35,0xad,0x00,
|
||||
0x63,0x60,0x2f,0x51,0x00,0x20,0x03,0xb0,0x0c,0xbc,0x90,0x46,0x99,0x46,0xf0,0xbc,
|
||||
0x02,0xbc,0x08,0x47,0xab,0x00,0xe3,0x18,0x88,0x22,0x48,0x46,0x98,0x50,0xc4,0x20,
|
||||
0x40,0x00,0x22,0x18,0x10,0x68,0x01,0x21,0xa9,0x40,0x08,0x43,0x10,0x60,0x84,0x22,
|
||||
0x52,0x00,0x40,0x46,0x98,0x50,0x02,0x2e,0xdf,0xd1,0xc6,0x22,0x52,0x00,0xa3,0x18,
|
||||
0x18,0x68,0x01,0x43,0x19,0x60,0xd8,0xe7,0x1c,0x1c,0x4d,0x34,0xff,0x34,0x5c,0x51,
|
||||
0xb3,0xe7,0xc0,0x46,0xfc,0x0e,0x00,0x20,0x00,0x00,0x00,0x00,0xf8,0xb5,0xc0,0x46,
|
||||
0xf8,0xbc,0x08,0xbc,0x9e,0x46,0x70,0x47,0xf8,0xb5,0xc0,0x46,0xf8,0xbc,0x08,0xbc,
|
||||
0x9e,0x46,0x70,0x47,0x00,0x00,0x00,0x00,0xc8,0xf1,0xff,0x7f,0x01,0x00,0x00,0x00,
|
||||
0x18,0x15,0x00,0x20,0xff,0xff,0xff,0xc5,0xff,0xff,0xff,0xff,0xc5,0xff,0xff,0xff,
|
||||
0xc5,0xc5,0xc5,0xff,0xc5,0xc5,0xc5,0xff,0x43,0x00,0x00,0x00,0x08,0x0f,0x00,0x20,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf4,0x11,0x00,0x20,
|
||||
0x5c,0x12,0x00,0x20,0xc4,0x12,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0f,0x00,0x20,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x0e,0x00,0x20,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
@@ -307,8 +306,9 @@
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x18,0x0f,0x00,0x20,0xc1,0x00,0x00,0x20,0x91,0x00,0x00,0x20,0x00,0x00,0x00,0x00,
|
||||
0x95,0x0d,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x08,0x0f,0x00,0x20,0x61,0x00,0x00,0x20,0x35,0x00,0x00,0x20,0x00,0x00,0x00,0x00,
|
||||
0x69,0x0c,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
|
||||
@@ -1,258 +1,257 @@
|
||||
/* Autogenerated with ../../../../src/helper/bin2char.sh */
|
||||
0x08,0xb5,0x00,0xbf,0x00,0xbf,0x00,0xbf,0x00,0xbf,0xdf,0xf8,0x1c,0xd0,0x07,0x48,
|
||||
0x07,0x49,0x4f,0xf0,0x00,0x02,0x88,0x42,0xb8,0xbf,0x40,0xf8,0x04,0x2b,0xfa,0xdb,
|
||||
0x00,0xf0,0xa8,0xf9,0xfe,0xe7,0x00,0x00,0xf0,0x0e,0x00,0x20,0x54,0x13,0x00,0x20,
|
||||
0xfc,0x13,0x00,0x20,0x08,0xb5,0x07,0x4b,0x07,0x48,0x03,0x33,0x1b,0x1a,0x06,0x2b,
|
||||
0x04,0xd9,0x06,0x4b,0x00,0x2b,0x01,0xd0,0x00,0xf0,0x5c,0xf8,0x08,0xbc,0x01,0xbc,
|
||||
0x00,0x47,0xc0,0x46,0x50,0x13,0x00,0x20,0x50,0x13,0x00,0x20,0x00,0x00,0x00,0x00,
|
||||
0x08,0x48,0x09,0x49,0x09,0x1a,0x89,0x10,0x08,0xb5,0xcb,0x0f,0x59,0x18,0x49,0x10,
|
||||
0x04,0xd0,0x06,0x4b,0x00,0x2b,0x01,0xd0,0x00,0xf0,0x44,0xf8,0x08,0xbc,0x01,0xbc,
|
||||
0x00,0x47,0xc0,0x46,0x50,0x13,0x00,0x20,0x50,0x13,0x00,0x20,0x00,0x00,0x00,0x00,
|
||||
0x10,0xb5,0x08,0x4c,0x23,0x78,0x00,0x2b,0x09,0xd1,0xff,0xf7,0xcb,0xff,0x06,0x4b,
|
||||
0x07,0x49,0x4f,0xf0,0x00,0x02,0x88,0x42,0xb8,0xbf,0x40,0xf8,0x04,0x2b,0xff,0xf6,
|
||||
0xfa,0xaf,0x00,0xf0,0x71,0xf9,0xfe,0xe7,0xe8,0x0e,0x00,0x20,0x4c,0x13,0x00,0x20,
|
||||
0xf4,0x13,0x00,0x20,0x10,0xb5,0x07,0x4c,0x23,0x78,0x00,0x2b,0x07,0xd1,0x06,0x4b,
|
||||
0x00,0x2b,0x02,0xd0,0x05,0x48,0xaf,0xf3,0x00,0x80,0x01,0x23,0x23,0x70,0x10,0xbc,
|
||||
0x01,0xbc,0x00,0x47,0x54,0x13,0x00,0x20,0x00,0x00,0x00,0x00,0xe0,0x0e,0x00,0x20,
|
||||
0x08,0xb5,0x0b,0x4b,0x00,0x2b,0x03,0xd0,0x0a,0x48,0x0b,0x49,0xaf,0xf3,0x00,0x80,
|
||||
0x0a,0x48,0x03,0x68,0x00,0x2b,0x04,0xd1,0xff,0xf7,0xc2,0xff,0x08,0xbc,0x01,0xbc,
|
||||
0x00,0x47,0x07,0x4b,0x00,0x2b,0xf7,0xd0,0x00,0xf0,0x0c,0xf8,0xf4,0xe7,0xc0,0x46,
|
||||
0x00,0x00,0x00,0x00,0xe0,0x0e,0x00,0x20,0x58,0x13,0x00,0x20,0x4c,0x13,0x00,0x20,
|
||||
0x00,0x00,0x00,0x00,0x18,0x47,0xc0,0x46,0xd4,0x30,0x9f,0xe5,0x00,0x00,0x53,0xe3,
|
||||
0xc8,0x30,0x9f,0x05,0x03,0xd0,0xa0,0xe1,0x00,0x20,0x0f,0xe1,0x0f,0x00,0x12,0xe3,
|
||||
0x15,0x00,0x00,0x0a,0xd1,0xf0,0x21,0xe3,0x03,0xd0,0xa0,0xe1,0x01,0xaa,0x4d,0xe2,
|
||||
0x0a,0x30,0xa0,0xe1,0xd7,0xf0,0x21,0xe3,0x03,0xd0,0xa0,0xe1,0x01,0x3a,0x43,0xe2,
|
||||
0xdb,0xf0,0x21,0xe3,0x03,0xd0,0xa0,0xe1,0x01,0x3a,0x43,0xe2,0xd2,0xf0,0x21,0xe3,
|
||||
0x03,0xd0,0xa0,0xe1,0x02,0x3a,0x43,0xe2,0xd3,0xf0,0x21,0xe3,0x03,0xd0,0xa0,0xe1,
|
||||
0x02,0x39,0x43,0xe2,0xff,0x30,0xc3,0xe3,0xff,0x3c,0xc3,0xe3,0x04,0x30,0x03,0xe5,
|
||||
0x00,0x20,0x53,0xe9,0xc0,0x20,0x82,0xe3,0x02,0xf0,0x21,0xe1,0x01,0xa8,0x43,0xe2,
|
||||
0x00,0x10,0xb0,0xe3,0x01,0xb0,0xa0,0xe1,0x01,0x70,0xa0,0xe1,0x5c,0x00,0x9f,0xe5,
|
||||
0x5c,0x20,0x9f,0xe5,0x00,0x20,0x52,0xe0,0x01,0x30,0x8f,0xe2,0x13,0xff,0x2f,0xe1,
|
||||
0x00,0xf0,0x42,0xfd,0x10,0x4b,0x00,0x2b,0x01,0xd0,0xfe,0x46,0x9f,0x46,0x0f,0x4b,
|
||||
0x00,0x2b,0x01,0xd0,0xfe,0x46,0x9f,0x46,0x00,0x20,0x00,0x21,0x04,0x00,0x0d,0x00,
|
||||
0x0d,0x48,0x00,0xf0,0x89,0xfc,0x00,0xf0,0xc3,0xfc,0x20,0x00,0x29,0x00,0x00,0xf0,
|
||||
0xd1,0xf8,0x00,0xf0,0x8b,0xfc,0x7b,0x46,0x18,0x47,0x00,0x00,0x11,0x00,0x00,0xef,
|
||||
0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x54,0x13,0x00,0x20,0xfc,0x13,0x00,0x20,0x15,0x0b,0x00,0x20,0x70,0xb5,0x04,0x46,
|
||||
0x01,0xbc,0x00,0x47,0x4c,0x13,0x00,0x20,0x00,0x00,0x00,0x00,0xd8,0x0e,0x00,0x20,
|
||||
0x08,0xb5,0x09,0x4b,0x00,0x2b,0x03,0xd0,0x08,0x48,0x09,0x49,0xaf,0xf3,0x00,0x80,
|
||||
0x08,0x48,0x03,0x68,0x00,0x2b,0x04,0xd0,0x07,0x4b,0x00,0x2b,0x01,0xd0,0x00,0xf0,
|
||||
0x0d,0xf8,0x08,0xbc,0x01,0xbc,0x00,0x47,0x00,0x00,0x00,0x00,0xd8,0x0e,0x00,0x20,
|
||||
0x50,0x13,0x00,0x20,0x44,0x13,0x00,0x20,0x00,0x00,0x00,0x00,0x18,0x47,0xc0,0x46,
|
||||
0xd8,0x30,0x9f,0xe5,0x00,0x00,0x53,0xe3,0xcc,0x30,0x9f,0x05,0x03,0xd0,0xa0,0xe1,
|
||||
0x00,0x20,0x0f,0xe1,0x0f,0x00,0x12,0xe3,0x15,0x00,0x00,0x0a,0xd1,0xf0,0x21,0xe3,
|
||||
0x03,0xd0,0xa0,0xe1,0x01,0xaa,0x4d,0xe2,0x0a,0x30,0xa0,0xe1,0xd7,0xf0,0x21,0xe3,
|
||||
0x03,0xd0,0xa0,0xe1,0x01,0x3a,0x43,0xe2,0xdb,0xf0,0x21,0xe3,0x03,0xd0,0xa0,0xe1,
|
||||
0x01,0x3a,0x43,0xe2,0xd2,0xf0,0x21,0xe3,0x03,0xd0,0xa0,0xe1,0x02,0x3a,0x43,0xe2,
|
||||
0xd3,0xf0,0x21,0xe3,0x03,0xd0,0xa0,0xe1,0x02,0x39,0x43,0xe2,0xff,0x30,0xc3,0xe3,
|
||||
0xff,0x3c,0xc3,0xe3,0x04,0x30,0x03,0xe5,0x00,0x20,0x53,0xe9,0xc0,0x20,0x82,0xe3,
|
||||
0x02,0xf0,0x21,0xe1,0x01,0xa8,0x43,0xe2,0x00,0x10,0xb0,0xe3,0x01,0xb0,0xa0,0xe1,
|
||||
0x01,0x70,0xa0,0xe1,0x60,0x00,0x9f,0xe5,0x60,0x20,0x9f,0xe5,0x00,0x20,0x52,0xe0,
|
||||
0x01,0x30,0x8f,0xe2,0x13,0xff,0x2f,0xe1,0x00,0xf0,0x46,0xfd,0x11,0x4b,0x00,0x2b,
|
||||
0x01,0xd0,0xfe,0x46,0x9f,0x46,0x10,0x4b,0x00,0x2b,0x01,0xd0,0xfe,0x46,0x9f,0x46,
|
||||
0x00,0x20,0x00,0x21,0x04,0x00,0x0d,0x00,0x0e,0x48,0x00,0x28,0x02,0xd0,0x0e,0x48,
|
||||
0x00,0xf0,0x26,0xfe,0x00,0xf0,0xc0,0xfc,0x20,0x00,0x29,0x00,0x00,0xf0,0xcc,0xf8,
|
||||
0x00,0xf0,0xa6,0xfc,0x7b,0x46,0x18,0x47,0x11,0x00,0x00,0xef,0x00,0x00,0x08,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0x13,0x00,0x20,
|
||||
0xf4,0x13,0x00,0x20,0xb1,0x0d,0x00,0x20,0xc5,0x0d,0x00,0x20,0x70,0xb5,0x04,0x46,
|
||||
0x0e,0x46,0x15,0x46,0x00,0x21,0x28,0x22,0x00,0xf0,0x0e,0xfd,0x26,0x61,0x65,0x62,
|
||||
0x00,0x21,0x84,0x22,0x02,0x48,0x00,0xf0,0x07,0xfd,0x00,0x20,0x70,0xbd,0x00,0xbf,
|
||||
0x70,0x13,0x00,0x20,0x10,0xb5,0x01,0x20,0x00,0xf0,0xac,0xf9,0x04,0x46,0x28,0xb9,
|
||||
0x68,0x13,0x00,0x20,0x10,0xb5,0x01,0x20,0x00,0xf0,0xba,0xf9,0x04,0x46,0x28,0xb9,
|
||||
0x01,0x21,0x84,0x22,0x03,0x48,0x00,0xf0,0xf7,0xfc,0x01,0xe0,0x40,0xf2,0x01,0x14,
|
||||
0x20,0x46,0x10,0xbd,0x70,0x13,0x00,0x20,0x01,0x39,0xf8,0xb5,0x44,0x0b,0x08,0x44,
|
||||
0x45,0x0b,0x66,0x03,0xac,0x42,0x14,0xd8,0x0b,0x4f,0xe3,0x5d,0x6b,0xb9,0x30,0x46,
|
||||
0x00,0xf0,0xfc,0xf8,0x38,0xb1,0x00,0x04,0x00,0xf4,0x7f,0x00,0x40,0xea,0x04,0x60,
|
||||
0x40,0xf4,0x81,0x70,0xf8,0xbd,0x01,0x23,0xe3,0x55,0x01,0x34,0x06,0xf5,0x00,0x56,
|
||||
0xe8,0xe7,0x00,0x20,0xf8,0xbd,0x00,0xbf,0x70,0x13,0x00,0x20,0x2d,0xe9,0xf0,0x4f,
|
||||
0x53,0x1e,0x85,0xb0,0x0b,0x44,0x02,0x90,0x0d,0x46,0x4f,0xea,0x51,0x38,0x5b,0x0b,
|
||||
0x16,0x46,0x23,0x48,0x01,0x93,0x00,0x21,0x84,0x22,0x00,0xf0,0xbd,0xfc,0x4f,0xea,
|
||||
0x48,0x37,0xc5,0xf3,0x0c,0x0c,0x4f,0xf0,0x00,0x09,0x01,0x9b,0x98,0x45,0x32,0xd8,
|
||||
0x74,0x19,0xdf,0xf8,0x70,0xb0,0xcd,0xf8,0x0c,0xc0,0x07,0xf5,0x00,0x5a,0x54,0x45,
|
||||
0x88,0xbf,0xc4,0xf3,0x0c,0x04,0x39,0x46,0x4f,0xf4,0x00,0x52,0x58,0x46,0x8c,0xbf,
|
||||
0x34,0x1b,0x34,0x46,0x00,0xf0,0x60,0xfc,0xdd,0xf8,0x0c,0xc0,0x02,0x9b,0x0b,0xeb,
|
||||
0x0c,0x00,0x03,0xeb,0x09,0x01,0x22,0x46,0x00,0xf0,0x56,0xfc,0x38,0x46,0x4f,0xf4,
|
||||
0x00,0x51,0x08,0xf1,0x01,0x08,0xff,0xf7,0x9f,0xff,0x68,0xb9,0x39,0x46,0x58,0x46,
|
||||
0x4f,0xf4,0x00,0x52,0x25,0x44,0x00,0xf0,0xaf,0xf8,0x36,0x1b,0xc5,0xf3,0x0c,0x0c,
|
||||
0xa1,0x44,0x57,0x46,0xc9,0xe7,0x00,0x20,0x05,0xb0,0xbd,0xe8,0xf0,0x8f,0x00,0xbf,
|
||||
0x70,0x13,0x00,0x20,0x00,0x60,0x00,0x20,0xb2,0xf5,0x00,0x5f,0xf8,0xb5,0x07,0x46,
|
||||
0x0e,0x46,0x15,0x46,0x0b,0xd8,0x08,0x46,0x11,0x46,0xff,0xf7,0x7d,0xff,0x04,0x46,
|
||||
0x40,0xb9,0x38,0x46,0x31,0x46,0x2a,0x46,0x00,0xf0,0x8e,0xf8,0x02,0xe0,0x4f,0xf4,
|
||||
0x82,0x70,0xf8,0xbd,0x20,0x46,0xf8,0xbd,0x08,0xb5,0x00,0xf0,0x85,0xf8,0x00,0x20,
|
||||
0x08,0xbd,0x00,0x00,0xf8,0xb5,0x31,0x48,0x31,0x49,0x32,0x4a,0x32,0x4c,0xff,0xf7,
|
||||
0x3d,0xff,0x00,0x23,0x23,0x60,0x22,0x68,0x2c,0x4f,0x14,0x23,0x03,0xfb,0x02,0x73,
|
||||
0x08,0x33,0x5b,0x68,0x00,0x2b,0xf7,0xd0,0x2c,0x4b,0x1a,0x68,0x11,0x07,0xfb,0xd4,
|
||||
0x2b,0x4d,0x2c,0x4e,0x2a,0x68,0x32,0x60,0x42,0xf0,0x33,0x02,0x2a,0x60,0x1a,0x68,
|
||||
0x12,0x07,0xfc,0xd4,0x21,0x68,0x14,0x22,0x02,0xfb,0x01,0x73,0x98,0x68,0x01,0x38,
|
||||
0x13,0x46,0x04,0x28,0x26,0xd8,0xdf,0xe8,0x00,0xf0,0x03,0x06,0x0e,0x16,0x1e,0x00,
|
||||
0xff,0xf7,0x28,0xff,0x20,0xe0,0x4b,0x43,0xfa,0x18,0x10,0x69,0xf9,0x58,0x52,0x68,
|
||||
0xff,0xf7,0xc2,0xff,0x18,0xe0,0x4b,0x43,0xfa,0x18,0x10,0x69,0xf9,0x58,0x52,0x68,
|
||||
0xff,0xf7,0xa2,0xff,0x10,0xe0,0x4b,0x43,0xfa,0x18,0x10,0x69,0xf9,0x58,0x52,0x68,
|
||||
0xff,0xf7,0x44,0xff,0x08,0xe0,0x4b,0x43,0xfa,0x18,0xf8,0x58,0x51,0x68,0xff,0xf7,
|
||||
0x1b,0xff,0x01,0xe0,0x40,0xf2,0x05,0x10,0x33,0x68,0x2b,0x60,0x0b,0x4b,0x1b,0x68,
|
||||
0x1b,0x07,0xfb,0xd4,0x22,0x68,0x14,0x23,0x03,0xfb,0x02,0x77,0xfb,0x68,0xf8,0x60,
|
||||
0x00,0xb1,0xfe,0xe7,0x82,0xf0,0x01,0x02,0x22,0x60,0xa4,0xe7,0xd8,0x1f,0x00,0x20,
|
||||
0x00,0x20,0x00,0x20,0x00,0x40,0x00,0x20,0xf4,0x13,0x00,0x20,0x00,0x40,0x03,0x40,
|
||||
0x04,0x40,0x03,0x40,0xf8,0x13,0x00,0x20,0xfe,0xe7,0x00,0x00,0x08,0xb5,0x04,0x4b,
|
||||
0x1b,0x68,0x5b,0x69,0x98,0x47,0x03,0x4b,0x00,0x22,0x1a,0x60,0x08,0xbd,0x00,0xbf,
|
||||
0xa8,0x01,0x00,0x10,0x84,0x04,0x60,0x42,0x08,0xb5,0x04,0x4b,0x1b,0x68,0x9b,0x69,
|
||||
0x98,0x47,0x03,0x4b,0x00,0x22,0x1a,0x60,0x08,0xbd,0x00,0xbf,0xa8,0x01,0x00,0x10,
|
||||
0x84,0x04,0x60,0x42,0x10,0xb5,0x33,0x4b,0x33,0x48,0x1b,0x68,0x33,0x4a,0x13,0xf0,
|
||||
0x02,0x0f,0x03,0x68,0x43,0xf0,0x02,0x03,0x03,0x60,0x13,0x68,0x01,0x68,0x19,0xd0,
|
||||
0x21,0xf4,0xe1,0x72,0xc3,0xf3,0xc1,0x04,0x22,0xf0,0x01,0x02,0x22,0x43,0xc3,0xf3,
|
||||
0xc0,0x11,0x42,0xea,0x01,0x22,0xc3,0xf3,0x41,0x11,0x42,0xea,0x81,0x12,0x02,0x60,
|
||||
0x02,0x68,0xd4,0x07,0x03,0xd5,0x26,0x4a,0x12,0x68,0x50,0x07,0xfb,0xd5,0x03,0xf0,
|
||||
0x07,0x03,0x18,0xe0,0x21,0xf4,0xe1,0x72,0xc3,0xf3,0xc1,0x24,0x22,0xf0,0x01,0x02,
|
||||
0xc3,0xf3,0xc0,0x31,0x22,0x43,0x42,0xea,0x01,0x22,0xc3,0xf3,0x41,0x31,0x42,0xea,
|
||||
0x81,0x12,0x02,0x60,0x02,0x68,0xd1,0x07,0x03,0xd5,0x19,0x4a,0x12,0x68,0x52,0x07,
|
||||
0xfb,0xd5,0xc3,0xf3,0x02,0x23,0x17,0x49,0x17,0x48,0x4a,0xf6,0xaa,0x22,0x0a,0x60,
|
||||
0x02,0x68,0x1b,0x03,0xb3,0xf5,0xe0,0x4f,0x22,0xf4,0xe2,0x42,0x18,0xbf,0x43,0xf4,
|
||||
0x80,0x73,0x13,0x43,0x03,0x60,0x45,0xf2,0xaa,0x53,0x0b,0x60,0x0f,0x4b,0x10,0x49,
|
||||
0x01,0x22,0x1a,0x60,0x00,0x22,0x0a,0x60,0x1a,0x60,0x05,0x22,0xc3,0xf8,0x58,0x22,
|
||||
0x4f,0xf0,0xff,0x32,0xc1,0xf8,0x8c,0x22,0xc1,0xf8,0x90,0x22,0x02,0x22,0xc3,0xf8,
|
||||
0x58,0x22,0x10,0xbd,0x10,0x00,0x09,0x40,0x24,0x00,0x03,0x40,0x08,0x13,0x00,0x50,
|
||||
0x1c,0x00,0x03,0x40,0x64,0x20,0x03,0x40,0xa8,0x20,0x03,0x40,0x30,0x20,0x03,0x40,
|
||||
0x34,0x20,0x03,0x40,0x2d,0xe9,0xf8,0x4f,0xd4,0x4d,0x29,0x68,0x11,0xf0,0x01,0x01,
|
||||
0x40,0xf0,0x95,0x81,0xdf,0xf8,0x90,0xe3,0xd1,0x4b,0xdf,0xf8,0x90,0xc3,0xdf,0xf8,
|
||||
0x90,0x83,0xdf,0xf8,0x90,0x93,0x05,0x27,0xce,0xf8,0x00,0x70,0x1b,0x68,0xc3,0xf3,
|
||||
0x03,0x23,0x4f,0xf4,0x40,0x72,0x01,0x33,0xb2,0xfb,0xf3,0xf3,0xdc,0xf8,0x00,0x20,
|
||||
0xd8,0xf8,0x00,0x40,0x92,0xb2,0x5a,0x43,0xc2,0xf3,0x8f,0x16,0x22,0x0c,0x12,0x04,
|
||||
0x32,0x43,0xc8,0xf8,0x00,0x20,0xc3,0x4a,0xc3,0x4c,0x12,0x68,0x26,0x68,0xc3,0x4e,
|
||||
0x5a,0x43,0x92,0x09,0x22,0x60,0x32,0x68,0x54,0xf8,0x24,0x8c,0xc2,0xf3,0x07,0x42,
|
||||
0x5a,0x43,0x28,0xf0,0xff,0x08,0xc2,0xf3,0x87,0x12,0x42,0xea,0x08,0x02,0xdf,0xf8,
|
||||
0x38,0x83,0x44,0xf8,0x24,0x2c,0xd9,0xf8,0x00,0xa0,0xd8,0xf8,0x00,0x20,0xca,0xf3,
|
||||
0x07,0x4a,0x22,0xf0,0xff,0x02,0x4a,0xea,0x02,0x02,0xc8,0xf8,0x00,0x20,0xd9,0xf8,
|
||||
0x00,0x20,0xdf,0xf8,0x18,0xa3,0x12,0x0e,0xda,0xf8,0x00,0x80,0x5a,0x43,0x92,0x00,
|
||||
0x28,0xf4,0x7f,0x48,0x02,0xf4,0x7f,0x42,0x42,0xea,0x08,0x02,0xdf,0xf8,0x00,0x83,
|
||||
0xca,0xf8,0x00,0x20,0xd8,0xf8,0x00,0x20,0x4f,0xea,0x12,0x6b,0xda,0xf8,0x04,0x20,
|
||||
0x0b,0xfb,0x03,0xfb,0x12,0x0c,0xcb,0xf3,0x8f,0x1b,0x12,0x04,0x4b,0xea,0x02,0x02,
|
||||
0xca,0xf8,0x04,0x20,0xd9,0xf8,0x00,0x20,0xc2,0xf3,0x07,0x22,0x53,0x43,0xa0,0x4a,
|
||||
0xd2,0xf8,0x00,0x90,0x9b,0x00,0x29,0xf4,0x7f,0x49,0x03,0xf4,0x7f,0x43,0x43,0xea,
|
||||
0x09,0x03,0xdf,0xf8,0xc0,0x92,0x13,0x60,0xd9,0xf8,0x00,0xa0,0x52,0xf8,0x24,0x3c,
|
||||
0x4f,0xea,0x1a,0x6a,0x23,0xf4,0x7f,0x43,0x43,0xea,0x0a,0x23,0x42,0xf8,0x24,0x3c,
|
||||
0xd9,0xf8,0x00,0xa0,0x52,0xf8,0x24,0x3c,0xca,0xf3,0x07,0x4a,0x23,0xf0,0xff,0x03,
|
||||
0x4a,0xea,0x03,0x03,0x42,0xf8,0x24,0x3c,0xd9,0xf8,0x00,0xa0,0x52,0xf8,0x1c,0x3c,
|
||||
0x0a,0xf4,0x7f,0x4a,0x23,0xf4,0x7f,0x43,0x4a,0xea,0x03,0x03,0x42,0xf8,0x1c,0x3c,
|
||||
0xd9,0xf8,0x00,0x90,0x52,0xf8,0x1c,0x3c,0x5f,0xfa,0x89,0xf9,0x23,0xf0,0xff,0x03,
|
||||
0x49,0xea,0x03,0x03,0xdf,0xf8,0x60,0x92,0x42,0xf8,0x1c,0x3c,0x32,0x68,0xd9,0xf8,
|
||||
0x00,0x30,0x02,0xf4,0x70,0x42,0x23,0xf4,0x70,0x43,0x13,0x43,0xc9,0xf8,0x00,0x30,
|
||||
0xd8,0xf8,0x00,0x20,0xdf,0xf8,0x44,0x82,0xd8,0xf8,0x00,0x30,0x02,0xf4,0x70,0x42,
|
||||
0x23,0xf4,0x70,0x43,0x13,0x43,0xc8,0xf8,0x00,0x30,0x32,0x68,0x54,0xf8,0x24,0x3c,
|
||||
0x12,0x0e,0x23,0xf4,0x7f,0x43,0x43,0xea,0x02,0x23,0x44,0xf8,0x24,0x3c,0x71,0x4b,
|
||||
0x1b,0x68,0x62,0x6a,0xc3,0xf3,0x0b,0x06,0x22,0xf4,0x7f,0x63,0x23,0xf0,0x0f,0x03,
|
||||
0x33,0x43,0x6d,0x4e,0x63,0x62,0x32,0x68,0x63,0x6a,0x02,0xf4,0x70,0x22,0x23,0xf4,
|
||||
0x70,0x23,0x13,0x43,0x63,0x62,0x69,0x4c,0x22,0x68,0xd8,0xf8,0x58,0x30,0xc2,0xf3,
|
||||
0x83,0x42,0x23,0xf4,0x70,0x23,0x43,0xea,0x02,0x43,0xc8,0xf8,0x58,0x30,0xdc,0xf8,
|
||||
0x00,0x30,0xd8,0xf8,0x58,0x20,0xc3,0xf3,0x0b,0x4c,0x22,0xf4,0x7f,0x63,0x23,0xf0,
|
||||
0x0f,0x03,0x4c,0xea,0x03,0x03,0xc8,0xf8,0x58,0x30,0x23,0x68,0xd8,0xf8,0x5c,0x20,
|
||||
0x4f,0xea,0xd3,0x5c,0x22,0xf0,0xff,0x73,0x23,0xf4,0x80,0x33,0x43,0xea,0x0c,0x43,
|
||||
0xc8,0xf8,0x5c,0x30,0x33,0x68,0x56,0x4a,0xdf,0xf8,0xa4,0xc1,0x0f,0x33,0x03,0xf0,
|
||||
0x0f,0x03,0x13,0x60,0x26,0x68,0x53,0x68,0xc6,0xf3,0x80,0x56,0x23,0xf4,0x00,0x03,
|
||||
0x43,0xea,0xc6,0x53,0x53,0x60,0x53,0x68,0x4e,0x4e,0x43,0xf4,0x80,0x43,0x53,0x60,
|
||||
0x02,0x23,0xce,0xf8,0x00,0x30,0xae,0xf5,0x09,0x7e,0x4a,0xf6,0xaa,0x23,0xce,0xf8,
|
||||
0x00,0x30,0xdc,0xf8,0x00,0x30,0x32,0x68,0x03,0xf0,0x0f,0x08,0x22,0xf4,0x7f,0x02,
|
||||
0x42,0xea,0x08,0x42,0xc3,0xf3,0x03,0x23,0x42,0xea,0x03,0x53,0xdf,0xf8,0x54,0x81,
|
||||
0x33,0x60,0xd8,0xf8,0x00,0x30,0x32,0x68,0xc3,0xf3,0x03,0x49,0x22,0xf0,0xff,0x02,
|
||||
0x49,0xea,0x02,0x02,0xc3,0xf3,0x03,0x63,0x42,0xea,0x03,0x13,0x33,0x60,0xdc,0xf8,
|
||||
0x00,0x60,0xdf,0xf8,0x34,0xc1,0xdc,0xf8,0x00,0x30,0x06,0xf4,0x70,0x22,0x23,0xf4,
|
||||
0x7f,0x03,0x1a,0x43,0xc6,0xf3,0x03,0x63,0x42,0xea,0x03,0x53,0x32,0x4e,0xcc,0xf8,
|
||||
0x00,0x30,0x32,0x68,0x5c,0xf8,0x08,0x3c,0xc2,0xf3,0x03,0x22,0x23,0xf0,0x0f,0x03,
|
||||
0x13,0x43,0x4c,0xf8,0x08,0x3c,0xd8,0xf8,0x00,0x20,0xdc,0xf8,0x08,0x30,0x02,0xf4,
|
||||
0xf8,0x52,0x23,0xf4,0xf8,0x53,0x13,0x43,0xcc,0xf8,0x08,0x30,0x32,0x68,0xdc,0xf8,
|
||||
0x0c,0x30,0x12,0x0b,0x02,0xf4,0x70,0x42,0x23,0xf4,0x70,0x43,0x13,0x43,0xcc,0xf8,
|
||||
0x0c,0x30,0x32,0x68,0x21,0x4e,0x33,0x68,0xc2,0xf3,0x04,0x42,0x23,0xf0,0x1f,0x03,
|
||||
0x13,0x43,0x33,0x60,0x22,0x68,0x1e,0x4c,0x23,0x68,0xc2,0xf3,0x01,0x42,0x23,0xf4,
|
||||
0x40,0x13,0x43,0xea,0x02,0x53,0x1b,0x4a,0x23,0x60,0x45,0xf2,0xaa,0x53,0xce,0xf8,
|
||||
0x00,0x30,0x17,0x60,0x2b,0x68,0x43,0xf0,0x01,0x03,0x2b,0x60,0x11,0x60,0x16,0x4b,
|
||||
0x16,0x4c,0x1b,0x68,0x16,0x4a,0x17,0x4d,0x13,0xf0,0x02,0x0f,0x23,0x68,0x43,0xf0,
|
||||
0x02,0x03,0x23,0x60,0x13,0x68,0x21,0x68,0x59,0xd0,0x3f,0xe0,0x40,0x00,0x03,0x40,
|
||||
0x00,0x20,0x03,0x40,0x8c,0x11,0x00,0x50,0x44,0x22,0x03,0x40,0x74,0x11,0x00,0x50,
|
||||
0x34,0x22,0x03,0x40,0x84,0x11,0x00,0x50,0x80,0x11,0x00,0x50,0xb0,0x12,0x00,0x50,
|
||||
0x78,0x22,0x03,0x40,0x84,0x20,0x03,0x40,0x98,0x11,0x00,0x50,0x98,0x20,0x03,0x40,
|
||||
0xa8,0x20,0x03,0x40,0x3c,0x00,0x03,0x40,0x10,0x00,0x09,0x40,0x24,0x00,0x03,0x40,
|
||||
0x08,0x13,0x00,0x50,0x1c,0x00,0x03,0x40,0x88,0x22,0x03,0x40,0x88,0x11,0x00,0x50,
|
||||
0x40,0x22,0x03,0x40,0x78,0x11,0x00,0x50,0x24,0x22,0x03,0x40,0x28,0x22,0x03,0x40,
|
||||
0x7c,0x11,0x00,0x50,0x70,0x11,0x00,0x50,0x1c,0x22,0x03,0x40,0x14,0x22,0x03,0x40,
|
||||
0x90,0x11,0x00,0x50,0x94,0x11,0x00,0x50,0x88,0x20,0x03,0x40,0x21,0xf4,0xe1,0x72,
|
||||
0xc3,0xf3,0xc1,0x46,0x22,0xf0,0x01,0x02,0xc3,0xf3,0xc0,0x51,0x32,0x43,0x42,0xea,
|
||||
0x01,0x22,0xc3,0xf3,0x41,0x51,0x42,0xea,0x81,0x12,0x22,0x60,0x22,0x68,0xd7,0x07,
|
||||
0x02,0xd5,0x2a,0x68,0x56,0x07,0xfc,0xd5,0xc3,0xf3,0x02,0x43,0x16,0xe0,0xc3,0xf3,
|
||||
0xc1,0x62,0xde,0x0f,0x42,0xea,0x06,0x26,0x21,0xf4,0xe1,0x72,0x22,0xf0,0x01,0x02,
|
||||
0x32,0x43,0xc3,0xf3,0x41,0x71,0x42,0xea,0x81,0x12,0x22,0x60,0x22,0x68,0xd4,0x07,
|
||||
0x02,0xd5,0x2a,0x68,0x51,0x07,0xfc,0xd5,0xc3,0xf3,0x02,0x63,0x3b,0x49,0x3c,0x4c,
|
||||
0x4a,0xf6,0xaa,0x22,0x0a,0x60,0x22,0x68,0x1b,0x03,0xb3,0xf5,0xe0,0x4f,0x22,0xf4,
|
||||
0xe2,0x42,0x18,0xbf,0x43,0xf4,0x80,0x73,0x13,0x43,0x23,0x60,0x45,0xf2,0xaa,0x53,
|
||||
0x0b,0x60,0x34,0x4b,0x00,0x21,0x01,0x22,0x19,0x60,0x43,0xf8,0x20,0x2c,0x32,0x4a,
|
||||
0x4f,0xf6,0xff,0x74,0x14,0x60,0x31,0x4c,0x43,0xf8,0x20,0x1c,0x02,0xf5,0xec,0x72,
|
||||
0x4f,0xf0,0x05,0x0e,0x10,0x23,0xc4,0xf8,0x00,0xe0,0x13,0x60,0x2c,0x4b,0x15,0x26,
|
||||
0x1e,0x60,0x02,0x26,0x26,0x60,0x2b,0x4e,0x37,0x68,0xc4,0xf8,0x00,0xe0,0xdf,0xf8,
|
||||
0xb4,0xe0,0xce,0xf8,0x00,0x10,0xce,0xf8,0x04,0x10,0x18,0xb1,0x31,0x68,0x41,0xf4,
|
||||
0x00,0x01,0x31,0x60,0x02,0x21,0x05,0x20,0x21,0x60,0x20,0x60,0x08,0x20,0x10,0x60,
|
||||
0x15,0x22,0x1a,0x60,0x21,0x60,0x2b,0x68,0x9a,0x07,0xfc,0xd4,0x1e,0x4b,0x1b,0x68,
|
||||
0x13,0xf0,0x10,0x0f,0x14,0xbf,0x04,0x25,0x00,0x25,0xff,0xf7,0x1b,0xfd,0x3b,0x02,
|
||||
0x07,0xd4,0x05,0x23,0x23,0x60,0x33,0x68,0x23,0xf4,0x00,0x03,0x33,0x60,0x02,0x23,
|
||||
0x23,0x60,0xc5,0xb9,0x15,0x4b,0x16,0x48,0x19,0x68,0x03,0xf5,0x10,0x53,0x04,0x33,
|
||||
0x1a,0x68,0x1b,0x68,0x02,0xf0,0x0f,0x02,0xc9,0xb2,0x03,0xf0,0x0f,0x03,0x51,0x43,
|
||||
0x9b,0x02,0xc3,0xeb,0x81,0x21,0x01,0xf5,0xfe,0x51,0x18,0x31,0x14,0x22,0xbd,0xe8,
|
||||
0xf8,0x4f,0xff,0xf7,0xe9,0xbc,0x28,0x46,0xbd,0xe8,0xf8,0x8f,0x64,0x20,0x03,0x40,
|
||||
0xa8,0x20,0x03,0x40,0x50,0x20,0x03,0x40,0x34,0x20,0x03,0x40,0x88,0x22,0x03,0x40,
|
||||
0xb4,0x22,0x03,0x40,0x7c,0x22,0x03,0x40,0x54,0x20,0x03,0x40,0x2c,0x00,0x03,0x40,
|
||||
0xf4,0x0e,0x00,0x20,0xc0,0x22,0x03,0x40,0x08,0xb5,0x01,0x1c,0x00,0x22,0x00,0x20,
|
||||
0x00,0x23,0x00,0xf0,0xeb,0xf8,0x08,0xbc,0x02,0xbc,0x08,0x47,0x10,0xb5,0x00,0x21,
|
||||
0x04,0x1c,0x00,0xf0,0x5d,0xf9,0x05,0x4b,0x18,0x68,0xc3,0x6b,0x00,0x2b,0x01,0xd0,
|
||||
0x00,0xf0,0x06,0xf8,0x20,0x1c,0xff,0xf7,0xa7,0xfc,0xc0,0x46,0x0c,0x0f,0x00,0x20,
|
||||
0x18,0x47,0xc0,0x46,0x38,0xb5,0x0a,0x4b,0x0a,0x4c,0xe4,0x1a,0xa4,0x10,0x0a,0xd0,
|
||||
0x09,0x4a,0xa5,0x18,0xad,0x00,0xed,0x18,0x2b,0x68,0x01,0x3c,0x00,0xf0,0x0e,0xf8,
|
||||
0x04,0x3d,0x00,0x2c,0xf8,0xd1,0x00,0xf0,0xcd,0xf9,0x38,0xbc,0x01,0xbc,0x00,0x47,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x3f,0x18,0x47,0xc0,0x46,
|
||||
0x70,0xb5,0x10,0x4e,0x10,0x4d,0xad,0x1b,0xad,0x10,0x00,0x24,0x00,0x2d,0x06,0xd0,
|
||||
0xa3,0x00,0xf3,0x58,0x01,0x34,0x00,0xf0,0x1d,0xf8,0xa5,0x42,0xf8,0xd1,0x00,0xf0,
|
||||
0xab,0xf9,0x0a,0x4e,0x0a,0x4d,0xad,0x1b,0xad,0x10,0x00,0x24,0x00,0x2d,0x06,0xd0,
|
||||
0xa3,0x00,0xf3,0x58,0x01,0x34,0x00,0xf0,0x0d,0xf8,0xa5,0x42,0xf8,0xd1,0x70,0xbc,
|
||||
0x01,0xbc,0x00,0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x18,0x47,0xc0,0x46,0x70,0xb5,0x0f,0x2a,0x34,0xd9,0x04,0x1c,
|
||||
0x0c,0x43,0x0b,0x1c,0xa4,0x07,0x33,0xd1,0x15,0x1c,0x04,0x1c,0x10,0x3d,0x2d,0x09,
|
||||
0x01,0x35,0x2d,0x01,0x49,0x19,0x1e,0x68,0x26,0x60,0x5e,0x68,0x66,0x60,0x9e,0x68,
|
||||
0xa6,0x60,0xde,0x68,0x10,0x33,0xe6,0x60,0x10,0x34,0x99,0x42,0xf3,0xd1,0x0f,0x23,
|
||||
0x45,0x19,0x13,0x40,0x03,0x2b,0x1d,0xd9,0x1c,0x1f,0x00,0x23,0xa4,0x08,0x01,0x34,
|
||||
0xa4,0x00,0xce,0x58,0xee,0x50,0x04,0x33,0xa3,0x42,0xfa,0xd1,0xed,0x18,0xc9,0x18,
|
||||
0x03,0x23,0x1a,0x40,0x05,0xd0,0x00,0x23,0xcc,0x5c,0xec,0x54,0x01,0x33,0x93,0x42,
|
||||
0xfa,0xd1,0x70,0xbc,0x02,0xbc,0x08,0x47,0x05,0x1c,0x00,0x2a,0xf3,0xd1,0xf8,0xe7,
|
||||
0x05,0x1c,0xf0,0xe7,0x1a,0x1c,0xf8,0xe7,0x70,0xb5,0x83,0x07,0x43,0xd0,0x54,0x1e,
|
||||
0x00,0x2a,0x3d,0xd0,0x0d,0x06,0x2d,0x0e,0x03,0x1c,0x03,0x26,0x03,0xe0,0x62,0x1e,
|
||||
0x00,0x2c,0x35,0xd0,0x14,0x1c,0x01,0x33,0x5a,0x1e,0x15,0x70,0x33,0x42,0xf6,0xd1,
|
||||
0x03,0x2c,0x24,0xd9,0xff,0x25,0x0d,0x40,0x2a,0x02,0x15,0x43,0x2a,0x04,0x15,0x43,
|
||||
0x0f,0x2c,0x11,0xd9,0x26,0x1c,0x10,0x3e,0x36,0x09,0x01,0x36,0x36,0x01,0x1a,0x1c,
|
||||
0x9b,0x19,0x15,0x60,0x55,0x60,0x95,0x60,0xd5,0x60,0x10,0x32,0x93,0x42,0xf8,0xd1,
|
||||
0x0f,0x22,0x14,0x40,0x03,0x2c,0x0a,0xd9,0x26,0x1f,0xb6,0x08,0x01,0x36,0xb6,0x00,
|
||||
0x1a,0x1c,0x9b,0x19,0x20,0xc2,0x93,0x42,0xfc,0xd1,0x03,0x22,0x14,0x40,0x00,0x2c,
|
||||
0x06,0xd0,0x09,0x06,0x1c,0x19,0x09,0x0e,0x19,0x70,0x01,0x33,0xa3,0x42,0xfb,0xd1,
|
||||
0x70,0xbc,0x02,0xbc,0x08,0x47,0x14,0x1c,0x03,0x1c,0xc9,0xe7,0xf8,0xb5,0x44,0x46,
|
||||
0x5f,0x46,0x56,0x46,0x4d,0x46,0x9b,0x46,0x30,0x4b,0xf0,0xb4,0x1c,0x68,0xa4,0x23,
|
||||
0x5b,0x00,0x05,0x1c,0xe0,0x58,0x0e,0x1c,0x90,0x46,0x00,0x28,0x4d,0xd0,0x43,0x68,
|
||||
0x1f,0x2b,0x0f,0xdc,0x5c,0x1c,0x00,0x2d,0x23,0xd1,0x02,0x33,0x9b,0x00,0x44,0x60,
|
||||
0x1e,0x50,0x00,0x20,0x3c,0xbc,0x90,0x46,0x99,0x46,0xa2,0x46,0xab,0x46,0xf8,0xbc,
|
||||
0x02,0xbc,0x08,0x47,0x22,0x4b,0x00,0x2b,0x3c,0xd0,0xc8,0x20,0x40,0x00,0xaf,0xf3,
|
||||
0x00,0x80,0x00,0x28,0x36,0xd0,0xa4,0x22,0x00,0x23,0x52,0x00,0xa1,0x58,0x43,0x60,
|
||||
0x01,0x60,0xa0,0x50,0x40,0x32,0x83,0x50,0x04,0x32,0x83,0x50,0x01,0x24,0x00,0x2d,
|
||||
0xdb,0xd0,0x9a,0x00,0x91,0x46,0x81,0x44,0x42,0x46,0x88,0x21,0x4f,0x46,0x7a,0x50,
|
||||
0xc4,0x22,0x52,0x00,0x90,0x46,0x80,0x44,0x42,0x46,0x87,0x39,0x99,0x40,0x12,0x68,
|
||||
0x0a,0x43,0x94,0x46,0x8a,0x46,0x42,0x46,0x61,0x46,0x11,0x60,0x84,0x22,0x49,0x46,
|
||||
0x5f,0x46,0x52,0x00,0x8f,0x50,0x02,0x2d,0xbf,0xd1,0x02,0x1c,0x55,0x46,0x8d,0x32,
|
||||
0xff,0x32,0x11,0x68,0x0d,0x43,0x15,0x60,0xb7,0xe7,0x20,0x1c,0x4d,0x30,0xff,0x30,
|
||||
0xe0,0x50,0xac,0xe7,0x01,0x20,0x40,0x42,0xb4,0xe7,0xc0,0x46,0x0c,0x0f,0x00,0x20,
|
||||
0x00,0x00,0x00,0x00,0x08,0xb5,0x04,0x4b,0x00,0x2b,0x02,0xd0,0x03,0x48,0xff,0xf7,
|
||||
0x9b,0xfe,0x08,0xbc,0x01,0xbc,0x00,0x47,0x00,0x00,0x00,0x00,0x15,0x0b,0x00,0x20,
|
||||
0xf0,0xb5,0x56,0x46,0x5f,0x46,0x4d,0x46,0x44,0x46,0xf0,0xb4,0x0e,0x1c,0x3f,0x4b,
|
||||
0x1b,0x68,0x87,0xb0,0x03,0x93,0x49,0x33,0xff,0x33,0x01,0x90,0x04,0x93,0xa4,0x22,
|
||||
0x03,0x9b,0x52,0x00,0x9f,0x58,0x00,0x2f,0x4d,0xd0,0x04,0x9b,0x98,0x46,0x00,0x23,
|
||||
0x9b,0x46,0xc4,0x23,0x5b,0x00,0x9c,0x46,0xbc,0x44,0x63,0x46,0x02,0x93,0xc6,0x23,
|
||||
0x5b,0x00,0x9a,0x46,0x7c,0x68,0xa5,0x00,0x7d,0x19,0xba,0x44,0x01,0x3c,0x08,0xd5,
|
||||
0x27,0xe0,0x6b,0x1d,0xff,0x33,0x1b,0x68,0xb3,0x42,0x04,0xd0,0x04,0x3d,0x01,0x3c,
|
||||
0x1f,0xd3,0x00,0x2e,0xf5,0xd1,0x7b,0x68,0x01,0x3b,0x6a,0x68,0xa3,0x42,0x3e,0xd0,
|
||||
0x5b,0x46,0x6b,0x60,0x00,0x2a,0xf1,0xd0,0x7b,0x68,0x99,0x46,0x01,0x23,0xa3,0x40,
|
||||
0x02,0x99,0x09,0x68,0x05,0x91,0x19,0x42,0x26,0xd1,0x00,0xf0,0x43,0xf8,0x7b,0x68,
|
||||
0x4b,0x45,0xc4,0xd1,0x43,0x46,0x1b,0x68,0xbb,0x42,0xc0,0xd1,0x04,0x3d,0x01,0x3c,
|
||||
0xdf,0xd2,0x1b,0x4b,0x00,0x2b,0x0e,0xd0,0x7b,0x68,0x00,0x2b,0x27,0xd1,0x3b,0x68,
|
||||
0x00,0x2b,0x28,0xd0,0x42,0x46,0x38,0x1c,0x13,0x60,0xaf,0xf3,0x00,0x80,0x43,0x46,
|
||||
0x1f,0x68,0x00,0x2f,0xb5,0xd1,0x07,0xb0,0x3c,0xbc,0x90,0x46,0x99,0x46,0xa2,0x46,
|
||||
0xab,0x46,0xf0,0xbc,0x01,0xbc,0x00,0x47,0x51,0x46,0x09,0x68,0x19,0x42,0x08,0xd1,
|
||||
0x2b,0x1c,0x84,0x33,0x19,0x68,0x01,0x98,0x00,0xf0,0x14,0xf8,0xcf,0xe7,0x7c,0x60,
|
||||
0xc0,0xe7,0x2b,0x1c,0x84,0x33,0x18,0x68,0x00,0xf0,0x0c,0xf8,0xc7,0xe7,0x3b,0x68,
|
||||
0xb8,0x46,0x1f,0x1c,0xdd,0xe7,0x00,0x23,0xfa,0xe7,0xc0,0x46,0x0c,0x0f,0x00,0x20,
|
||||
0x00,0x00,0x00,0x00,0x10,0x47,0xc0,0x46,0xf8,0xb5,0xc0,0x46,0xf8,0xbc,0x08,0xbc,
|
||||
0x9e,0x46,0x70,0x47,0xf8,0xb5,0xc0,0x46,0xf8,0xbc,0x08,0xbc,0x9e,0x46,0x70,0x47,
|
||||
0x00,0x00,0x00,0x00,0x24,0xf2,0xff,0x7f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x8c,0x15,0x00,0x20,0xff,0xff,0xff,0xc5,0xff,0xff,0xff,0xff,0xc5,0xff,0xff,0xff,
|
||||
0xc5,0xc5,0xc5,0xff,0xc5,0xc5,0xc5,0xff,0x43,0x00,0x00,0x00,0x18,0x0f,0x00,0x20,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x12,0x00,0x20,
|
||||
0x6c,0x12,0x00,0x20,0xd4,0x12,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x20,0x46,0x10,0xbd,0x68,0x13,0x00,0x20,0x01,0x39,0xf8,0xb5,0x44,0x0b,0x08,0x44,
|
||||
0x47,0x0b,0x65,0x03,0xbc,0x42,0x14,0xd8,0x0b,0x4e,0xa3,0x5d,0x6b,0xb9,0x28,0x46,
|
||||
0x00,0xf0,0xf8,0xf8,0x38,0xb1,0x00,0x04,0x00,0xf4,0x7f,0x00,0x40,0xea,0x04,0x60,
|
||||
0x40,0xf4,0x81,0x70,0xf8,0xbd,0x01,0x23,0xa3,0x55,0x01,0x34,0x05,0xf5,0x00,0x55,
|
||||
0xe8,0xe7,0x00,0x20,0xf8,0xbd,0x00,0xbf,0x68,0x13,0x00,0x20,0xb2,0xf5,0x00,0x5f,
|
||||
0xf8,0xb5,0x07,0x46,0x0e,0x46,0x15,0x46,0x0b,0xd8,0x08,0x46,0x11,0x46,0xff,0xf7,
|
||||
0xd3,0xff,0x04,0x46,0x40,0xb9,0x38,0x46,0x31,0x46,0x2a,0x46,0x00,0xf0,0xe0,0xf8,
|
||||
0x02,0xe0,0x4f,0xf4,0x82,0x70,0xf8,0xbd,0x20,0x46,0xf8,0xbd,0x2d,0xe9,0xf0,0x4f,
|
||||
0x53,0x1e,0x85,0xb0,0x0b,0x44,0x5b,0x0b,0x0c,0x46,0x4f,0x0b,0x83,0x46,0x15,0x46,
|
||||
0x20,0x48,0x03,0x93,0x00,0x21,0x84,0x22,0x00,0xf0,0xa6,0xfc,0x4f,0xea,0x47,0x38,
|
||||
0xc4,0xf3,0x0c,0x03,0x4f,0xf0,0x00,0x0a,0x03,0x9a,0x97,0x42,0x2e,0xd8,0x08,0xf5,
|
||||
0x00,0x5c,0x2e,0x19,0xdf,0xf8,0x60,0x90,0xcd,0xf8,0x04,0xc0,0x66,0x45,0x88,0xbf,
|
||||
0xc6,0xf3,0x0c,0x06,0x41,0x46,0x4f,0xf4,0x00,0x52,0x48,0x46,0x8c,0xbf,0xc6,0xeb,
|
||||
0x05,0x06,0x2e,0x46,0x02,0x93,0x00,0xf0,0x43,0xfc,0x02,0x9b,0x0b,0xeb,0x0a,0x01,
|
||||
0x09,0xeb,0x03,0x00,0x32,0x46,0x00,0xf0,0x3b,0xfc,0x48,0x46,0x41,0x46,0x4f,0xf4,
|
||||
0x00,0x52,0xff,0xf7,0xab,0xff,0x01,0x37,0xdd,0xf8,0x04,0xc0,0x38,0xb9,0x34,0x44,
|
||||
0xc4,0xf3,0x0c,0x03,0xad,0x1b,0xb2,0x44,0xe0,0x46,0xcd,0xe7,0x00,0x20,0x05,0xb0,
|
||||
0xbd,0xe8,0xf0,0x8f,0x68,0x13,0x00,0x20,0x00,0x60,0x00,0x20,0x08,0xb5,0x00,0xf0,
|
||||
0x87,0xf8,0x00,0x20,0x08,0xbd,0x00,0x00,0xf8,0xb5,0x32,0x48,0x32,0x49,0x33,0x4a,
|
||||
0x33,0x4d,0xff,0xf7,0x43,0xff,0x00,0x23,0x2b,0x60,0x2a,0x68,0x2d,0x4c,0x14,0x23,
|
||||
0x03,0xfb,0x02,0x43,0x08,0x33,0x5b,0x68,0x00,0x2b,0xf7,0xd0,0x2d,0x4b,0x1a,0x68,
|
||||
0x12,0xf0,0x08,0x0f,0x19,0x46,0xf9,0xd1,0x2b,0x4e,0x2c,0x4f,0x33,0x68,0x3b,0x60,
|
||||
0x43,0xf0,0x33,0x03,0x33,0x60,0x0a,0x68,0x12,0x07,0xfc,0xd4,0x2b,0x68,0x14,0x22,
|
||||
0x02,0xfb,0x03,0x41,0x89,0x68,0x01,0x39,0x04,0x29,0x26,0xd8,0xdf,0xe8,0x01,0xf0,
|
||||
0x03,0x06,0x0e,0x16,0x1e,0x00,0xff,0xf7,0x2d,0xff,0x20,0xe0,0x53,0x43,0xe2,0x18,
|
||||
0x10,0x69,0xe1,0x58,0x52,0x68,0xff,0xf7,0xc1,0xff,0x18,0xe0,0x53,0x43,0xe2,0x18,
|
||||
0x10,0x69,0xe1,0x58,0x52,0x68,0xff,0xf7,0x51,0xff,0x10,0xe0,0x53,0x43,0xe2,0x18,
|
||||
0x10,0x69,0xe1,0x58,0x52,0x68,0xff,0xf7,0x61,0xff,0x08,0xe0,0x53,0x43,0xe2,0x18,
|
||||
0xe0,0x58,0x51,0x68,0xff,0xf7,0x20,0xff,0x01,0xe0,0x40,0xf2,0x05,0x10,0x3b,0x68,
|
||||
0x33,0x60,0x0c,0x4b,0x1b,0x68,0x1b,0x07,0xfb,0xd4,0x2b,0x68,0x14,0x22,0x02,0xfb,
|
||||
0x03,0x44,0x10,0xb1,0xe3,0x68,0xe0,0x60,0xfe,0xe7,0xe2,0x68,0xe0,0x60,0x83,0xf0,
|
||||
0x01,0x03,0xa1,0xe7,0xd8,0x1f,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x40,0x00,0x20,
|
||||
0xec,0x13,0x00,0x20,0x00,0x40,0x03,0x40,0x04,0x40,0x03,0x40,0xf0,0x13,0x00,0x20,
|
||||
0xfe,0xe7,0x00,0x00,0x08,0xb5,0x04,0x4b,0x1b,0x68,0x5b,0x69,0x98,0x47,0x03,0x4b,
|
||||
0x00,0x22,0x1a,0x60,0x08,0xbd,0x00,0xbf,0xa8,0x01,0x00,0x10,0x84,0x04,0x60,0x42,
|
||||
0x08,0xb5,0x04,0x4b,0x1b,0x68,0x9b,0x69,0x98,0x47,0x03,0x4b,0x00,0x22,0x1a,0x60,
|
||||
0x08,0xbd,0x00,0xbf,0xa8,0x01,0x00,0x10,0x84,0x04,0x60,0x42,0x10,0xb5,0x3a,0x4b,
|
||||
0x3a,0x4a,0x1b,0x68,0x13,0xf0,0x02,0x0f,0x39,0x4b,0x19,0x68,0x41,0xf0,0x02,0x01,
|
||||
0x19,0x60,0x12,0x68,0x1a,0xd0,0x19,0x68,0x21,0xf4,0xe1,0x71,0xc2,0xf3,0xc1,0x04,
|
||||
0x21,0xf0,0x01,0x01,0xc2,0xf3,0xc0,0x10,0x21,0x43,0x41,0xea,0x00,0x21,0xc2,0xf3,
|
||||
0x41,0x10,0x41,0xea,0x80,0x11,0x19,0x60,0x1b,0x68,0xdc,0x07,0x03,0xd5,0x2d,0x4b,
|
||||
0x1b,0x68,0x58,0x07,0xfb,0xd5,0x02,0xf0,0x07,0x03,0x19,0xe0,0x19,0x68,0x21,0xf4,
|
||||
0xe1,0x71,0xc2,0xf3,0xc1,0x24,0x21,0xf0,0x01,0x01,0xc2,0xf3,0xc0,0x30,0x21,0x43,
|
||||
0x41,0xea,0x00,0x21,0xc2,0xf3,0x41,0x30,0x41,0xea,0x80,0x11,0x19,0x60,0x1b,0x68,
|
||||
0xd9,0x07,0x03,0xd5,0x1f,0x4b,0x1b,0x68,0x5b,0x07,0xfb,0xd5,0xc2,0xf3,0x02,0x23,
|
||||
0x1d,0x4a,0x4a,0xf6,0xaa,0x21,0x11,0x60,0x1c,0x49,0x1b,0x03,0x08,0x68,0xb3,0xf5,
|
||||
0xe0,0x4f,0x18,0xbf,0x43,0xf4,0x80,0x73,0x20,0xf4,0xe2,0x40,0x03,0x43,0x0b,0x60,
|
||||
0x45,0xf2,0xaa,0x53,0x13,0x60,0x00,0x23,0x15,0x4a,0x12,0x68,0x02,0xf0,0x0f,0x02,
|
||||
0x93,0x42,0x14,0x4a,0x15,0xd2,0x13,0x60,0x13,0x4a,0x14,0x48,0x01,0x21,0x11,0x60,
|
||||
0x00,0x21,0x01,0x60,0x11,0x60,0x05,0x21,0xc2,0xf8,0x58,0x12,0x4f,0xf0,0xff,0x31,
|
||||
0xc0,0xf8,0x8c,0x12,0xc0,0xf8,0x90,0x12,0x02,0x21,0xc2,0xf8,0x58,0x12,0x01,0x33,
|
||||
0xe2,0xe7,0x00,0x23,0x13,0x60,0x10,0xbd,0x10,0x00,0x09,0x40,0x08,0x13,0x00,0x50,
|
||||
0x24,0x00,0x03,0x40,0x1c,0x00,0x03,0x40,0x64,0x20,0x03,0x40,0xa8,0x20,0x03,0x40,
|
||||
0x00,0x24,0x03,0x40,0x50,0x20,0x03,0x40,0x30,0x20,0x03,0x40,0x34,0x20,0x03,0x40,
|
||||
0x2d,0xe9,0xf0,0x4f,0x85,0xb0,0xc8,0x4b,0x02,0x90,0x1b,0x68,0x23,0xf0,0x7f,0x43,
|
||||
0x01,0x93,0x4f,0xf0,0xfc,0x54,0x00,0x22,0xc4,0x4b,0x1b,0x68,0x03,0xf0,0x0f,0x03,
|
||||
0x9a,0x42,0x80,0xf0,0x5a,0x82,0xc2,0x48,0x03,0x68,0x13,0xf0,0x01,0x03,0x03,0x93,
|
||||
0x40,0xf0,0x75,0x81,0xdf,0xf8,0x74,0xc3,0xbe,0x4b,0xdf,0xf8,0x74,0x83,0xbe,0x4d,
|
||||
0x4f,0xf0,0x05,0x0e,0xcc,0xf8,0x00,0xe0,0x1b,0x68,0xd8,0xf8,0x00,0x60,0xc3,0xf3,
|
||||
0x03,0x23,0x4f,0xf4,0x40,0x71,0x01,0x33,0xb1,0xfb,0xf3,0xf3,0x29,0x68,0xb6,0xb2,
|
||||
0x5e,0x43,0x09,0x0c,0xc6,0xf3,0x8f,0x16,0x09,0x04,0x31,0x43,0x29,0x60,0xb3,0x49,
|
||||
0x0d,0x68,0xb3,0x49,0x5d,0x43,0xad,0x09,0x0e,0x68,0x0d,0x60,0xb1,0x4d,0x2e,0x68,
|
||||
0x51,0xf8,0x24,0x7c,0xc6,0xf3,0x07,0x46,0x5e,0x43,0x27,0xf0,0xff,0x07,0xc6,0xf3,
|
||||
0x87,0x16,0x3e,0x43,0x41,0xf8,0x24,0x6c,0xab,0x4f,0xac,0x4e,0xd6,0xf8,0x00,0xa0,
|
||||
0xd7,0xf8,0x00,0x90,0xca,0xf3,0x07,0x4a,0x29,0xf0,0xff,0x09,0x4a,0xea,0x09,0x09,
|
||||
0xc7,0xf8,0x00,0x90,0x37,0x68,0x4f,0xea,0x17,0x6a,0xa5,0x4f,0x0a,0xfb,0x03,0xfa,
|
||||
0xd7,0xf8,0x00,0x90,0x4f,0xea,0x8a,0x0a,0x0a,0xf4,0x7f,0x4a,0x29,0xf4,0x7f,0x49,
|
||||
0x4a,0xea,0x09,0x09,0xc7,0xf8,0x00,0x90,0xdf,0xf8,0xd8,0x92,0xdf,0xf8,0xd8,0xa2,
|
||||
0xd9,0xf8,0x00,0x70,0x4f,0xea,0x17,0x6b,0xda,0xf8,0x00,0x70,0x3f,0x0c,0x0b,0xfb,
|
||||
0x03,0xfb,0x3f,0x04,0x47,0xea,0x9b,0x17,0xca,0xf8,0x00,0x70,0x36,0x68,0xc6,0xf3,
|
||||
0x07,0x26,0x73,0x43,0x93,0x4e,0x37,0x68,0x9b,0x00,0x03,0xf4,0x7f,0x43,0x27,0xf4,
|
||||
0x7f,0x47,0x1f,0x43,0x37,0x60,0x90,0x4b,0x90,0x4e,0xd6,0xf8,0x00,0xa0,0x1f,0x68,
|
||||
0x4f,0xea,0x1a,0x6a,0x27,0xf4,0x7f,0x47,0x47,0xea,0x0a,0x27,0x1f,0x60,0xd6,0xf8,
|
||||
0x00,0xa0,0x1f,0x68,0xca,0xf3,0x07,0x4a,0x27,0xf0,0xff,0x07,0x4a,0xea,0x07,0x07,
|
||||
0x1f,0x60,0xd6,0xf8,0x00,0xa0,0x9f,0x68,0x0a,0xf4,0x7f,0x4a,0x27,0xf4,0x7f,0x47,
|
||||
0x4a,0xea,0x07,0x07,0x9f,0x60,0x37,0x68,0x9e,0x68,0xff,0xb2,0x26,0xf0,0xff,0x06,
|
||||
0x3e,0x43,0x9e,0x60,0x2f,0x68,0xde,0x68,0x07,0xf4,0x70,0x47,0x26,0xf4,0x70,0x46,
|
||||
0x3e,0x43,0xde,0x60,0xd9,0xf8,0x00,0x70,0x5e,0x68,0x07,0xf4,0x70,0x47,0x26,0xf4,
|
||||
0x70,0x46,0x3e,0x43,0x5e,0x60,0x2d,0x68,0x51,0xf8,0x24,0x3c,0x2d,0x0e,0x23,0xf4,
|
||||
0x7f,0x43,0x43,0xea,0x05,0x23,0x41,0xf8,0x24,0x3c,0x71,0x4b,0x1d,0x68,0x71,0x4b,
|
||||
0x19,0x68,0x21,0xf4,0x7f,0x61,0xc5,0xf3,0x0b,0x05,0x21,0xf0,0x0f,0x01,0x29,0x43,
|
||||
0x6d,0x4d,0x19,0x60,0x2e,0x68,0x19,0x68,0x06,0xf4,0x70,0x26,0x21,0xf4,0x70,0x21,
|
||||
0x31,0x43,0x19,0x60,0x69,0x4b,0x6a,0x49,0x1f,0x68,0x0e,0x68,0xc7,0xf3,0x83,0x47,
|
||||
0x26,0xf4,0x70,0x26,0x46,0xea,0x07,0x46,0x0e,0x60,0xd8,0xf8,0x00,0x70,0x0e,0x68,
|
||||
0x26,0xf4,0x7f,0x66,0xc7,0xf3,0x0b,0x47,0x26,0xf0,0x0f,0x06,0x3e,0x43,0x0e,0x60,
|
||||
0x60,0x4e,0x1f,0x68,0x31,0x68,0x21,0xf0,0xff,0x71,0xff,0x0d,0x21,0xf4,0x80,0x31,
|
||||
0x41,0xea,0x07,0x41,0x31,0x60,0x2d,0x68,0x5b,0x49,0x5c,0x4f,0x0f,0x35,0x05,0xf0,
|
||||
0x0f,0x05,0x0d,0x60,0x1e,0x68,0x4d,0x68,0xc6,0xf3,0x80,0x56,0x25,0xf4,0x00,0x05,
|
||||
0x45,0xea,0xc6,0x55,0x4d,0x60,0x4d,0x68,0x45,0xf4,0x80,0x45,0x4d,0x60,0x02,0x21,
|
||||
0x53,0x4d,0xcc,0xf8,0x00,0x10,0x4a,0xf6,0xaa,0x21,0x29,0x60,0x51,0x49,0x3e,0x68,
|
||||
0xd1,0xf8,0x00,0xc0,0x06,0xf0,0x0f,0x08,0x2c,0xf4,0x7f,0x0c,0x4c,0xea,0x08,0x4c,
|
||||
0xc6,0xf3,0x03,0x26,0x4c,0xea,0x06,0x56,0x0e,0x60,0x4b,0x4e,0xd6,0xf8,0x00,0xc0,
|
||||
0xd1,0xf8,0x00,0x80,0xcc,0xf3,0x03,0x49,0x28,0xf0,0xff,0x08,0x49,0xea,0x08,0x08,
|
||||
0xcc,0xf3,0x03,0x6c,0x48,0xea,0x0c,0x1c,0xc1,0xf8,0x00,0xc0,0x3f,0x68,0xd1,0xf8,
|
||||
0x04,0xc0,0x07,0xf4,0x70,0x28,0x2c,0xf4,0x7f,0x0c,0x4c,0xea,0x08,0x0c,0xc7,0xf3,
|
||||
0x03,0x67,0x4c,0xea,0x07,0x57,0x4f,0x60,0x3c,0x49,0x3d,0x4f,0xd1,0xf8,0x00,0x80,
|
||||
0xd7,0xf8,0x00,0xc0,0xc8,0xf3,0x03,0x28,0x2c,0xf0,0x0f,0x0c,0x48,0xea,0x0c,0x0c,
|
||||
0xc7,0xf8,0x00,0xc0,0xd6,0xf8,0x00,0xc0,0x36,0x4e,0x37,0x68,0x0c,0xf4,0xf8,0x5c,
|
||||
0x27,0xf4,0xf8,0x57,0x4c,0xea,0x07,0x07,0x37,0x60,0x0f,0x68,0xd6,0xf8,0x04,0xc0,
|
||||
0x3f,0x0b,0x07,0xf4,0x70,0x47,0x2c,0xf4,0x70,0x4c,0x47,0xea,0x0c,0x07,0x77,0x60,
|
||||
0x0f,0x68,0x2d,0x49,0x0e,0x68,0xc7,0xf3,0x04,0x47,0x26,0xf0,0x1f,0x06,0x3e,0x43,
|
||||
0x0e,0x60,0x1e,0x68,0x29,0x4b,0x19,0x68,0xc6,0xf3,0x01,0x46,0x21,0xf4,0x40,0x11,
|
||||
0x41,0xea,0x06,0x51,0x19,0x60,0x45,0xf2,0xaa,0x53,0x2b,0x60,0x24,0x4b,0xc3,0xf8,
|
||||
0x00,0xe0,0x01,0x68,0x41,0xf0,0x01,0x01,0x01,0x60,0x03,0x99,0x19,0x60,0x21,0x4b,
|
||||
0x21,0x49,0x1b,0x68,0x4a,0xe0,0x00,0xbf,0x14,0x24,0x03,0x40,0x00,0x24,0x03,0x40,
|
||||
0x40,0x00,0x03,0x40,0x00,0x20,0x03,0x40,0x40,0x22,0x03,0x40,0x8c,0x11,0x00,0x50,
|
||||
0x44,0x22,0x03,0x40,0x74,0x11,0x00,0x50,0x24,0x22,0x03,0x40,0x78,0x11,0x00,0x50,
|
||||
0x28,0x22,0x03,0x40,0x34,0x22,0x03,0x40,0x10,0x22,0x03,0x40,0x70,0x11,0x00,0x50,
|
||||
0x84,0x11,0x00,0x50,0x68,0x22,0x03,0x40,0x80,0x11,0x00,0x50,0xb0,0x12,0x00,0x50,
|
||||
0x6c,0x22,0x03,0x40,0x70,0x22,0x03,0x40,0x78,0x22,0x03,0x40,0x90,0x11,0x00,0x50,
|
||||
0x64,0x20,0x03,0x40,0x84,0x20,0x03,0x40,0x94,0x11,0x00,0x50,0x98,0x11,0x00,0x50,
|
||||
0x80,0x20,0x03,0x40,0x90,0x20,0x03,0x40,0x98,0x20,0x03,0x40,0xa8,0x20,0x03,0x40,
|
||||
0x3c,0x00,0x03,0x40,0x10,0x00,0x09,0x40,0x08,0x13,0x00,0x50,0x88,0x22,0x03,0x40,
|
||||
0x88,0x11,0x00,0x50,0x7c,0x11,0x00,0x50,0x2c,0x22,0x03,0x40,0x62,0x48,0x13,0xf0,
|
||||
0x02,0x0f,0x62,0x4b,0x1d,0x68,0x45,0xf0,0x02,0x05,0x1d,0x60,0x09,0x68,0x19,0xd0,
|
||||
0x1d,0x68,0x25,0xf4,0xe1,0x75,0xc1,0xf3,0xc1,0x47,0x25,0xf0,0x01,0x05,0xc1,0xf3,
|
||||
0xc0,0x56,0x3d,0x43,0x45,0xea,0x06,0x25,0xc1,0xf3,0x41,0x56,0x45,0xea,0x86,0x15,
|
||||
0x1d,0x60,0x1b,0x68,0xdd,0x07,0x02,0xd5,0x03,0x68,0x5b,0x07,0xfc,0xd5,0xc1,0xf3,
|
||||
0x02,0x43,0x17,0xe0,0x1d,0x68,0xcf,0x0f,0xc1,0xf3,0xc1,0x66,0x25,0xf4,0xe1,0x75,
|
||||
0x46,0xea,0x07,0x26,0x25,0xf0,0x01,0x05,0x35,0x43,0xc1,0xf3,0x41,0x76,0x45,0xea,
|
||||
0x86,0x15,0x1d,0x60,0x1b,0x68,0xdf,0x07,0x02,0xd5,0x03,0x68,0x5e,0x07,0xfc,0xd5,
|
||||
0xc1,0xf3,0x02,0x63,0x46,0x49,0x47,0x4f,0x4a,0xf6,0xaa,0x25,0x0d,0x60,0x46,0x4d,
|
||||
0x1b,0x03,0x2e,0x68,0xb3,0xf5,0xe0,0x4f,0x26,0xf4,0xe2,0x46,0x18,0xbf,0x43,0xf4,
|
||||
0x80,0x73,0x33,0x43,0x2b,0x60,0x45,0xf2,0xaa,0x53,0x0b,0x60,0x3f,0x4b,0x40,0x4e,
|
||||
0x1a,0x60,0x01,0x21,0x43,0xf8,0x20,0x1c,0x3e,0x49,0x4f,0xf6,0xff,0x75,0x0d,0x60,
|
||||
0x00,0x25,0x43,0xf8,0x20,0x5c,0x03,0xf5,0x0e,0x73,0x4f,0xf0,0x05,0x0e,0x10,0x21,
|
||||
0xc3,0xf8,0x00,0xe0,0x39,0x60,0x15,0x21,0x31,0x60,0x02,0x21,0x19,0x60,0x36,0x49,
|
||||
0xd1,0xf8,0x00,0xc0,0xc3,0xf8,0x00,0xe0,0xdf,0xf8,0xdc,0xe0,0xce,0xf8,0x00,0x50,
|
||||
0xce,0xf8,0x04,0x50,0x02,0x9d,0x1d,0xb1,0x0d,0x68,0x45,0xf4,0x00,0x05,0x0d,0x60,
|
||||
0xdf,0xf8,0xc8,0xe0,0x02,0x25,0x1d,0x60,0xce,0xf8,0x00,0x40,0x4f,0xf0,0x05,0x0e,
|
||||
0xc3,0xf8,0x00,0xe0,0x4f,0xf0,0x08,0x0e,0xc7,0xf8,0x00,0xe0,0x15,0x27,0x37,0x60,
|
||||
0x1d,0x60,0x05,0x68,0xad,0x07,0x19,0xd5,0xfb,0xe7,0x24,0x4b,0x24,0x48,0x1a,0x68,
|
||||
0x03,0xf5,0x10,0x53,0x04,0x33,0x19,0x68,0x1b,0x68,0xd2,0xb2,0x01,0xf0,0x0f,0x01,
|
||||
0x03,0xf0,0x0f,0x03,0x51,0x43,0x9b,0x02,0xc3,0xeb,0x81,0x21,0x01,0xf5,0xfe,0x51,
|
||||
0x18,0x31,0x14,0x22,0xff,0xf7,0xe4,0xfc,0x05,0x46,0x16,0xe0,0x19,0x48,0x00,0x68,
|
||||
0x10,0xf0,0x10,0x0f,0x0c,0xbf,0x00,0x25,0x04,0x25,0x1c,0xf4,0x00,0x0f,0x07,0xd1,
|
||||
0x05,0x20,0x18,0x60,0x08,0x68,0x20,0xf4,0x00,0x00,0x08,0x60,0x02,0x21,0x19,0x60,
|
||||
0x01,0x99,0x0c,0x44,0x0d,0xb9,0x01,0x32,0x6e,0xe5,0xff,0xf7,0xd7,0xfc,0x28,0x46,
|
||||
0x05,0xb0,0xbd,0xe8,0xf0,0x8f,0x00,0xbf,0x1c,0x00,0x03,0x40,0x24,0x00,0x03,0x40,
|
||||
0x64,0x20,0x03,0x40,0x0c,0x22,0x03,0x40,0xa8,0x20,0x03,0x40,0x50,0x20,0x03,0x40,
|
||||
0xb4,0x22,0x03,0x40,0x34,0x20,0x03,0x40,0x7c,0x22,0x03,0x40,0x2c,0x00,0x03,0x40,
|
||||
0xec,0x0e,0x00,0x20,0x54,0x20,0x03,0x40,0xc0,0x22,0x03,0x40,0x10,0x21,0x03,0x40,
|
||||
0x10,0xb5,0x00,0x21,0x04,0x1c,0x00,0xf0,0xdf,0xf8,0x05,0x4b,0x18,0x68,0xc3,0x6b,
|
||||
0x00,0x2b,0x01,0xd0,0x00,0xf0,0x06,0xf8,0x20,0x1c,0xff,0xf7,0x89,0xfc,0xc0,0x46,
|
||||
0x04,0x0f,0x00,0x20,0x18,0x47,0xc0,0x46,0x70,0xb5,0x10,0x4e,0x10,0x4d,0xad,0x1b,
|
||||
0xad,0x10,0x00,0x24,0x00,0x2d,0x06,0xd0,0xa3,0x00,0xf3,0x58,0x01,0x34,0x00,0xf0,
|
||||
0x1d,0xf8,0xa5,0x42,0xf8,0xd1,0x00,0xf0,0xdb,0xf9,0x0a,0x4e,0x0a,0x4d,0xad,0x1b,
|
||||
0xad,0x10,0x00,0x24,0x00,0x2d,0x06,0xd0,0xa3,0x00,0xf3,0x58,0x01,0x34,0x00,0xf0,
|
||||
0x0d,0xf8,0xa5,0x42,0xf8,0xd1,0x70,0xbc,0x01,0xbc,0x00,0x47,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x47,0xc0,0x46,
|
||||
0xf0,0xb5,0x0f,0x2a,0x37,0xd9,0x03,0x1c,0x0b,0x43,0x9c,0x07,0x37,0xd1,0x16,0x1c,
|
||||
0x10,0x3e,0x36,0x09,0x35,0x01,0x45,0x19,0x10,0x35,0x0c,0x1c,0x03,0x1c,0x27,0x68,
|
||||
0x1f,0x60,0x67,0x68,0x5f,0x60,0xa7,0x68,0x9f,0x60,0xe7,0x68,0xdf,0x60,0x10,0x33,
|
||||
0x10,0x34,0xab,0x42,0xf3,0xd1,0x73,0x1c,0x1b,0x01,0xc5,0x18,0xc9,0x18,0x0f,0x23,
|
||||
0x13,0x40,0x03,0x2b,0x1d,0xd9,0x1c,0x1f,0xa4,0x08,0x01,0x34,0xa4,0x00,0x00,0x23,
|
||||
0xce,0x58,0xee,0x50,0x04,0x33,0xa3,0x42,0xfa,0xd1,0xed,0x18,0xc9,0x18,0x03,0x23,
|
||||
0x1a,0x40,0x05,0xd0,0x00,0x23,0xcc,0x5c,0xec,0x54,0x01,0x33,0x93,0x42,0xfa,0xd1,
|
||||
0xf0,0xbc,0x02,0xbc,0x08,0x47,0x05,0x1c,0x00,0x2a,0xf3,0xd1,0xf8,0xe7,0x05,0x1c,
|
||||
0xf0,0xe7,0x1a,0x1c,0xf8,0xe7,0xc0,0x46,0xf0,0xb5,0x83,0x07,0x4a,0xd0,0x54,0x1e,
|
||||
0x00,0x2a,0x44,0xd0,0x0e,0x06,0x36,0x0e,0x03,0x1c,0x03,0x25,0x03,0xe0,0x62,0x1e,
|
||||
0x00,0x2c,0x3c,0xd0,0x14,0x1c,0x01,0x33,0x5a,0x1e,0x16,0x70,0x2b,0x42,0xf6,0xd1,
|
||||
0x03,0x2c,0x2b,0xd9,0xff,0x25,0x0d,0x40,0x2a,0x02,0x15,0x43,0x2a,0x04,0x15,0x43,
|
||||
0x0f,0x2c,0x15,0xd9,0x27,0x1c,0x10,0x3f,0x3f,0x09,0x1e,0x1c,0x3a,0x01,0x10,0x36,
|
||||
0xb6,0x18,0x1a,0x1c,0x15,0x60,0x55,0x60,0x95,0x60,0xd5,0x60,0x10,0x32,0xb2,0x42,
|
||||
0xf8,0xd1,0x01,0x37,0x3f,0x01,0x0f,0x22,0xdb,0x19,0x14,0x40,0x03,0x2c,0x0d,0xd9,
|
||||
0x27,0x1f,0xbf,0x08,0xba,0x00,0x1e,0x1d,0xb6,0x18,0x1a,0x1c,0x20,0xc2,0xb2,0x42,
|
||||
0xfc,0xd1,0x01,0x37,0xbf,0x00,0x03,0x22,0xdb,0x19,0x14,0x40,0x00,0x2c,0x06,0xd0,
|
||||
0x0a,0x06,0x12,0x0e,0x1c,0x19,0x1a,0x70,0x01,0x33,0xa3,0x42,0xfb,0xd1,0xf0,0xbc,
|
||||
0x02,0xbc,0x08,0x47,0x14,0x1c,0x03,0x1c,0xc2,0xe7,0xc0,0x46,0x08,0xb5,0x04,0x4b,
|
||||
0x00,0x2b,0x02,0xd0,0x03,0x48,0x00,0xf0,0x9b,0xf8,0x08,0xbc,0x01,0xbc,0x00,0x47,
|
||||
0x00,0x00,0x00,0x00,0xc5,0x0d,0x00,0x20,0xf0,0xb5,0x5f,0x46,0x56,0x46,0x4d,0x46,
|
||||
0x44,0x46,0xf0,0xb4,0x43,0x4b,0x1b,0x68,0x85,0xb0,0x01,0x93,0x49,0x33,0xff,0x33,
|
||||
0x02,0x90,0x03,0x93,0x0f,0x1c,0x01,0x98,0xa4,0x21,0x49,0x00,0x42,0x58,0x90,0x46,
|
||||
0x00,0x2a,0x4b,0xd0,0x03,0x98,0x81,0x46,0x41,0x46,0x4e,0x68,0x74,0x1e,0x42,0xd4,
|
||||
0x45,0x46,0xa3,0x00,0x88,0x35,0xed,0x18,0xc6,0x20,0xc4,0x23,0x01,0x36,0x5b,0x00,
|
||||
0x40,0x00,0xb6,0x00,0x9b,0x46,0x82,0x46,0x46,0x44,0xc3,0x44,0xc2,0x44,0x08,0xe0,
|
||||
0x2b,0x1c,0x80,0x33,0x1b,0x68,0xbb,0x42,0x05,0xd0,0x04,0x3d,0x04,0x3e,0x01,0x3c,
|
||||
0x29,0xd3,0x00,0x2f,0xf4,0xd1,0x41,0x46,0x4a,0x68,0x01,0x3a,0x33,0x68,0xa2,0x42,
|
||||
0x30,0xd0,0x00,0x22,0x32,0x60,0x00,0x2b,0xef,0xd0,0x40,0x46,0x59,0x46,0x40,0x68,
|
||||
0x01,0x22,0x09,0x68,0xa2,0x40,0x00,0x90,0x11,0x42,0x20,0xd0,0x50,0x46,0x00,0x68,
|
||||
0x10,0x42,0x21,0xd1,0x02,0x98,0x29,0x68,0x00,0xf0,0x40,0xf8,0x41,0x46,0x49,0x68,
|
||||
0x00,0x9a,0x91,0x42,0xb7,0xd1,0x4a,0x46,0x12,0x68,0x42,0x45,0xb3,0xd1,0x04,0x3d,
|
||||
0x04,0x3e,0x01,0x3c,0xd5,0xd2,0x18,0x4a,0x00,0x2a,0x11,0xd1,0x05,0xb0,0x3c,0xbc,
|
||||
0x90,0x46,0x99,0x46,0xa2,0x46,0xab,0x46,0xf0,0xbc,0x01,0xbc,0x00,0x47,0x00,0xf0,
|
||||
0x25,0xf8,0xe3,0xe7,0x4c,0x60,0xce,0xe7,0x28,0x68,0x00,0xf0,0x1f,0xf8,0xdd,0xe7,
|
||||
0x43,0x46,0x5b,0x68,0x40,0x46,0x00,0x2b,0x0d,0xd1,0x03,0x68,0x00,0x2b,0x0e,0xd0,
|
||||
0x49,0x46,0x0b,0x60,0xaf,0xf3,0x00,0x80,0x4b,0x46,0x1a,0x68,0x90,0x46,0x41,0x46,
|
||||
0x00,0x29,0x91,0xd1,0xda,0xe7,0x03,0x68,0xc1,0x46,0x98,0x46,0xf7,0xe7,0x00,0x23,
|
||||
0xfa,0xe7,0xc0,0x46,0x04,0x0f,0x00,0x20,0x00,0x00,0x00,0x00,0x18,0x47,0xc0,0x46,
|
||||
0x08,0xb5,0x01,0x1c,0x00,0x22,0x00,0x20,0x00,0x23,0x00,0xf0,0x1f,0xf8,0x08,0xbc,
|
||||
0x02,0xbc,0x08,0x47,0x38,0xb5,0x0a,0x4b,0x0a,0x4d,0xed,0x1a,0xad,0x10,0x0a,0xd0,
|
||||
0x01,0x3d,0xac,0x00,0xe4,0x18,0x00,0xe0,0x01,0x3d,0x23,0x68,0x00,0xf0,0x0c,0xf8,
|
||||
0x04,0x3c,0x00,0x2d,0xf8,0xd1,0x00,0xf0,0x71,0xf8,0x38,0xbc,0x01,0xbc,0x00,0x47,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x47,0xc0,0x46,0xf0,0xb5,0x4f,0x46,
|
||||
0x46,0x46,0xc0,0xb4,0x98,0x46,0x2c,0x4b,0xa4,0x25,0x1b,0x68,0x6d,0x00,0x5c,0x59,
|
||||
0x83,0xb0,0x06,0x1c,0x0f,0x1c,0x91,0x46,0x01,0x93,0x00,0x2c,0x46,0xd0,0x65,0x68,
|
||||
0x1f,0x2d,0x1a,0xdd,0x25,0x4b,0x00,0x2b,0x02,0xd1,0x01,0x20,0x40,0x42,0x1c,0xe0,
|
||||
0xc8,0x20,0x40,0x00,0xaf,0xf3,0x00,0x80,0x04,0x1e,0xf6,0xd0,0x00,0x25,0x45,0x60,
|
||||
0xa4,0x23,0x01,0x98,0x5b,0x00,0xc0,0x58,0x01,0x99,0x20,0x60,0xcc,0x50,0xc4,0x23,
|
||||
0x5b,0x00,0xe5,0x50,0xc6,0x23,0x5b,0x00,0xe5,0x50,0x00,0x2e,0x0c,0xd1,0x6b,0x1c,
|
||||
0x02,0x35,0xad,0x00,0x63,0x60,0x2f,0x51,0x00,0x20,0x03,0xb0,0x0c,0xbc,0x90,0x46,
|
||||
0x99,0x46,0xf0,0xbc,0x02,0xbc,0x08,0x47,0xab,0x00,0xe3,0x18,0x88,0x22,0x48,0x46,
|
||||
0x98,0x50,0xc4,0x20,0x40,0x00,0x22,0x18,0x10,0x68,0x01,0x21,0xa9,0x40,0x08,0x43,
|
||||
0x10,0x60,0x84,0x22,0x52,0x00,0x40,0x46,0x98,0x50,0x02,0x2e,0xdf,0xd1,0xc6,0x22,
|
||||
0x52,0x00,0xa3,0x18,0x18,0x68,0x01,0x43,0x19,0x60,0xd8,0xe7,0x1c,0x1c,0x4d,0x34,
|
||||
0xff,0x34,0x5c,0x51,0xb3,0xe7,0xc0,0x46,0x04,0x0f,0x00,0x20,0x00,0x00,0x00,0x00,
|
||||
0xf8,0xb5,0xc0,0x46,0xf8,0xbc,0x08,0xbc,0x9e,0x46,0x70,0x47,0xf8,0xb5,0xc0,0x46,
|
||||
0xf8,0xbc,0x08,0xbc,0x9e,0x46,0x70,0x47,0x00,0x00,0x00,0x00,0xc4,0xf1,0xff,0x7f,
|
||||
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x15,0x00,0x20,0xff,0xff,0xff,0xc5,
|
||||
0xff,0xff,0xff,0xff,0xc5,0xff,0xff,0xff,0xc5,0xc5,0xc5,0xff,0xc5,0xc5,0xc5,0xff,
|
||||
0x43,0x00,0x00,0x00,0x10,0x0f,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0xfc,0x11,0x00,0x20,0x64,0x12,0x00,0x20,0xcc,0x12,0x00,0x20,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0f,0x00,0x20,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x33,0xcd,0xab,0x34,0x12,0x6d,0xe6,
|
||||
0xec,0xde,0x05,0x00,0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x0e,0x33,0xcd,0xab,0x34,0x12,0x6d,0xe6,0xec,0xde,0x05,0x00,0x0b,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
@@ -307,8 +306,9 @@
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x18,0x0f,0x00,0x20,0xc1,0x00,0x00,0x20,0x91,0x00,0x00,0x20,0x00,0x00,0x00,0x00,
|
||||
0x95,0x0d,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x0f,0x00,0x20,0x61,0x00,0x00,0x20,
|
||||
0x35,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x6d,0x0c,0x00,0x20,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
|
||||
@@ -42,7 +42,7 @@ typedef uint32_t (*flash_sector_erase_pntr_t) (uint32_t);
|
||||
*
|
||||
******************************************************************************/
|
||||
static void issue_fsm_command(flash_state_command_t command);
|
||||
static void enable_sectors_for_write(void);
|
||||
static void enable_sectors_for_write(uint32_t);
|
||||
static uint32_t scale_cycle_values(uint32_t specified_timing,
|
||||
uint32_t scale_value);
|
||||
static void set_write_mode(void);
|
||||
@@ -80,42 +80,51 @@ uint32_t flash_bank_erase(bool force_precondition)
|
||||
uint32_t error_return;
|
||||
uint32_t sector_address;
|
||||
uint32_t reg_val;
|
||||
uint32_t bank_no;
|
||||
uint32_t top_bank_start_addr = (HWREG(FLASH_BASE + FLASH_O_FCFG_B1_START) &
|
||||
FLASH_FCFG_B1_START_B1_START_ADDR_M)
|
||||
>> FLASH_FCFG_B1_START_B1_START_ADDR_S;
|
||||
|
||||
/* Enable all sectors for erase. */
|
||||
enable_sectors_for_write();
|
||||
for (bank_no = 0; bank_no < flash_bank_count(); bank_no++) {
|
||||
/* Enable all sectors for erase. */
|
||||
enable_sectors_for_write(bank_no);
|
||||
|
||||
/* Clear the Status register. */
|
||||
issue_fsm_command(FAPI_CLEAR_STATUS);
|
||||
/* Clear the Status register. */
|
||||
issue_fsm_command(FAPI_CLEAR_STATUS);
|
||||
|
||||
/* Enable erase of all sectors and enable precondition if required. */
|
||||
reg_val = HWREG(FLASH_BASE + FLASH_O_FSM_ST_MACHINE);
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_WR_ENA) = FSM_REG_WRT_ENABLE;
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_SECTOR1) = 0x00000000;
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_SECTOR2) = 0x00000000;
|
||||
if (force_precondition)
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_ST_MACHINE) |=
|
||||
FLASH_FSM_ST_MACHINE_DO_PRECOND;
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_WR_ENA) = FSM_REG_WRT_DISABLE;
|
||||
|
||||
/* Issue the bank erase command to the FSM. */
|
||||
issue_fsm_command(FAPI_ERASE_BANK);
|
||||
|
||||
/* Wait for erase to finish. */
|
||||
while (flash_check_fsm_for_ready() == FAPI_STATUS_FSM_BUSY)
|
||||
;
|
||||
|
||||
/* Update status. */
|
||||
error_return = flash_check_fsm_for_error();
|
||||
|
||||
/* Disable sectors for erase. */
|
||||
flash_disable_sectors_for_write();
|
||||
|
||||
/* Set configured precondition mode since it may have been forced on. */
|
||||
if (!(reg_val & FLASH_FSM_ST_MACHINE_DO_PRECOND)) {
|
||||
/* Enable erase of all sectors and enable precondition if required. */
|
||||
reg_val = HWREG(FLASH_BASE + FLASH_O_FSM_ST_MACHINE);
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_WR_ENA) = FSM_REG_WRT_ENABLE;
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_ST_MACHINE) &=
|
||||
~FLASH_FSM_ST_MACHINE_DO_PRECOND;
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_SECTOR1) = 0x00000000;
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_SECTOR2) = 0x00000000;
|
||||
if (force_precondition)
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_ST_MACHINE) |=
|
||||
FLASH_FSM_ST_MACHINE_DO_PRECOND;
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_WR_ENA) = FSM_REG_WRT_DISABLE;
|
||||
|
||||
// Write address to FADDR register.
|
||||
HWREG(FLASH_BASE + FLASH_O_FADDR) = ADDR_OFFSET + (bank_no * top_bank_start_addr);
|
||||
|
||||
/* Issue the bank erase command to the FSM. */
|
||||
issue_fsm_command(FAPI_ERASE_BANK);
|
||||
|
||||
/* Wait for erase to finish. */
|
||||
while (flash_check_fsm_for_ready() == FAPI_STATUS_FSM_BUSY)
|
||||
;
|
||||
|
||||
/* Update status. */
|
||||
error_return = flash_check_fsm_for_error();
|
||||
|
||||
/* Set configured precondition mode since it may have been forced on. */
|
||||
if (!(reg_val & FLASH_FSM_ST_MACHINE_DO_PRECOND)) {
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_WR_ENA) = FSM_REG_WRT_ENABLE;
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_ST_MACHINE) &=
|
||||
~FLASH_FSM_ST_MACHINE_DO_PRECOND;
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_WR_ENA) = FSM_REG_WRT_DISABLE;
|
||||
}
|
||||
|
||||
if (error_return != FAPI_STATUS_SUCCESS)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Program security data to default values in the customer configuration */
|
||||
@@ -128,6 +137,9 @@ uint32_t flash_bank_erase(bool force_precondition)
|
||||
CCFG_SIZE_SECURITY);
|
||||
}
|
||||
|
||||
/* Disable sectors for erase. */
|
||||
flash_disable_sectors_for_write();
|
||||
|
||||
/* Return status of operation. */
|
||||
return error_return;
|
||||
}
|
||||
@@ -161,23 +173,34 @@ uint32_t flash_program(uint8_t *data_buffer, uint32_t address, uint32_t count)
|
||||
******************************************************************************/
|
||||
void flash_disable_sectors_for_write(void)
|
||||
{
|
||||
uint32_t bank_no;
|
||||
|
||||
/* Configure flash back to read mode */
|
||||
set_read_mode();
|
||||
|
||||
/* Disable Level 1 Protection. */
|
||||
HWREG(FLASH_BASE + FLASH_O_FBPROT) = FLASH_FBPROT_PROTL1DIS;
|
||||
for (bank_no = 0; bank_no < flash_bank_count(); bank_no++) {
|
||||
|
||||
/* Disable all sectors for erase and programming. */
|
||||
HWREG(FLASH_BASE + FLASH_O_FBSE) = 0x0000;
|
||||
/* Select flash bank. */
|
||||
HWREG(FLASH_BASE + FLASH_O_FMAC) = bank_no;
|
||||
|
||||
/* Enable Level 1 Protection. */
|
||||
HWREG(FLASH_BASE + FLASH_O_FBPROT) = 0;
|
||||
/* Disable Level 1 Protection. */
|
||||
HWREG(FLASH_BASE + FLASH_O_FBPROT) = FLASH_FBPROT_PROTL1DIS;
|
||||
|
||||
/* Protect sectors from sector erase. */
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_WR_ENA) = FSM_REG_WRT_ENABLE;
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_SECTOR1) = 0xFFFFFFFF;
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_SECTOR2) = 0xFFFFFFFF;
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_WR_ENA) = FSM_REG_WRT_DISABLE;
|
||||
/* Disable all sectors for erase and programming. */
|
||||
HWREG(FLASH_BASE + FLASH_O_FBSE) = 0x0000;
|
||||
|
||||
/* Enable Level 1 Protection. */
|
||||
HWREG(FLASH_BASE + FLASH_O_FBPROT) = 0;
|
||||
|
||||
/* Protect sectors from sector erase. */
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_WR_ENA) = FSM_REG_WRT_ENABLE;
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_SECTOR1) = 0xFFFFFFFF;
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_SECTOR2) = 0xFFFFFFFF;
|
||||
HWREG(FLASH_BASE + FLASH_O_FSM_WR_ENA) = FSM_REG_WRT_DISABLE;
|
||||
}
|
||||
|
||||
// Select bank 0
|
||||
HWREG(FLASH_BASE + FLASH_O_FMAC) = 0x0;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
@@ -214,7 +237,7 @@ static void issue_fsm_command(flash_state_command_t command)
|
||||
* the FLASH_O_FSM_SECTOR1 register.
|
||||
*
|
||||
******************************************************************************/
|
||||
static void enable_sectors_for_write(void)
|
||||
static void enable_sectors_for_write(uint32_t bank_no)
|
||||
{
|
||||
/* Trim flash module for program/erase operation. */
|
||||
trim_for_write();
|
||||
@@ -223,7 +246,7 @@ static void enable_sectors_for_write(void)
|
||||
set_write_mode();
|
||||
|
||||
/* Select flash bank. */
|
||||
HWREG(FLASH_BASE + FLASH_O_FMAC) = 0x00;
|
||||
HWREG(FLASH_BASE + FLASH_O_FMAC) = bank_no;
|
||||
|
||||
/* Disable Level 1 Protection. */
|
||||
HWREG(FLASH_BASE + FLASH_O_FBPROT) = FLASH_FBPROT_PROTL1DIS;
|
||||
|
||||
@@ -246,6 +246,46 @@ static inline uint32_t flash_check_fsm_for_ready(void)
|
||||
return FAPI_STATUS_FSM_READY;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Get the number of banks
|
||||
*
|
||||
* This function returns the number of bank of the flash.
|
||||
*
|
||||
* Returns the number of banks
|
||||
*
|
||||
******************************************************************************/
|
||||
static inline uint32_t flash_bank_count(void)
|
||||
{
|
||||
uint32_t bank_count;
|
||||
|
||||
bank_count = (HWREG(FLASH_BASE + FLASH_O_FCFG_BANK) &
|
||||
FLASH_FCFG_BANK_MAIN_NUM_BANK_M) >>
|
||||
FLASH_FCFG_BANK_MAIN_NUM_BANK_S;
|
||||
|
||||
return bank_count;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Get the size of the bank.
|
||||
*
|
||||
* This function returns the size of the main bank in number of bytes.
|
||||
*
|
||||
* Returns the flash size in number of bytes.
|
||||
*
|
||||
******************************************************************************/
|
||||
static inline uint8_t flash_bank_width(void)
|
||||
{
|
||||
uint8_t bank_width;
|
||||
|
||||
bank_width = (uint8_t)(((HWREG(FLASH_BASE + FLASH_O_FCFG_BANK) &
|
||||
FLASH_FCFG_BANK_MAIN_BANK_WIDTH_M) >>
|
||||
FLASH_FCFG_BANK_MAIN_BANK_WIDTH_S) >> 3);
|
||||
|
||||
return bank_width;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Erase a flash sector.
|
||||
|
||||
@@ -116,6 +116,10 @@
|
||||
/* FMC Sequential Pump Information */
|
||||
#define FLASH_O_FSEQPMP 0x000020A8
|
||||
|
||||
#define FLASH_O_FADDR 0x00002110
|
||||
|
||||
#define FLASH_O_FWPWRITE0 0x00002120
|
||||
|
||||
/* FMC FSM Command */
|
||||
#define FLASH_O_FSM_CMD 0x0000220C
|
||||
|
||||
@@ -179,9 +183,14 @@
|
||||
/* FMC FSM Sector Erased 2 */
|
||||
#define FLASH_O_FSM_SECTOR2 0x000022C4
|
||||
|
||||
#define FLASH_O_FCFG_BANK 0x00002400
|
||||
|
||||
/* FMC Flash Bank 0 Starting Address */
|
||||
#define FLASH_O_FCFG_B0_START 0x00002410
|
||||
|
||||
/* FMC Flash Bank 1 Starting Address */
|
||||
#define FLASH_O_FCFG_B1_START 0x00002414
|
||||
|
||||
/* FMC Flash Bank 0 Sector Size 0 */
|
||||
#define FLASH_O_FCFG_B0_SSIZE0 0x00002430
|
||||
|
||||
@@ -1353,4 +1362,16 @@
|
||||
* 1: DCDC and GLDO are bypassed and an external regulator supplies VDDR */
|
||||
#define AON_PMCTL_PWRCTL_EXT_REG_MODE 0x00000002
|
||||
|
||||
/* Field: [3:0] MAIN_NUM_BANK */
|
||||
#define FLASH_FCFG_BANK_MAIN_NUM_BANK_M 0x0000000F
|
||||
#define FLASH_FCFG_BANK_MAIN_NUM_BANK_S 0
|
||||
|
||||
/* Field: [23:0] B1_START_ADDR */
|
||||
#define FLASH_FCFG_B1_START_B1_START_ADDR_M 0x00FFFFFF
|
||||
#define FLASH_FCFG_B1_START_B1_START_ADDR_S 0
|
||||
|
||||
/* Field: [15:4] MAIN_BANK_WIDTH */
|
||||
#define FLASH_FCFG_BANK_MAIN_BANK_WIDTH_M 0x0000FFF0
|
||||
#define FLASH_FCFG_BANK_MAIN_BANK_WIDTH_S 4
|
||||
|
||||
#endif /* #ifndef OPENOCD_LOADERS_FLASH_CC26XX_HW_REGS_H */
|
||||
|
||||
@@ -98,35 +98,32 @@ int main(void)
|
||||
|
||||
/* Perform requested task */
|
||||
switch (g_cfg[g_curr_buf].cmd) {
|
||||
case CMD_ERASE_ALL:
|
||||
status = flashloader_erase_all();
|
||||
break;
|
||||
case CMD_PROGRAM:
|
||||
status =
|
||||
flashloader_program(
|
||||
(uint8_t *)g_cfg[g_curr_buf].buf_addr,
|
||||
g_cfg[g_curr_buf].dest, g_cfg[g_curr_buf].len);
|
||||
break;
|
||||
case CMD_ERASE_AND_PROGRAM:
|
||||
status =
|
||||
flashloader_erase_and_program(
|
||||
(uint8_t *)g_cfg[g_curr_buf].buf_addr,
|
||||
g_cfg[g_curr_buf].dest, g_cfg[g_curr_buf].len);
|
||||
break;
|
||||
case CMD_ERASE_AND_PROGRAM_WITH_RETAIN:
|
||||
status =
|
||||
flashloader_program_with_retain(
|
||||
(uint8_t *)g_cfg[g_curr_buf].buf_addr,
|
||||
g_cfg[g_curr_buf].dest, g_cfg[g_curr_buf].len);
|
||||
break;
|
||||
case CMD_ERASE_SECTORS:
|
||||
status =
|
||||
flashloader_erase_sectors(g_cfg[g_curr_buf].dest,
|
||||
g_cfg[g_curr_buf].len);
|
||||
break;
|
||||
default:
|
||||
status = STATUS_FAILED_UNKNOWN_COMMAND;
|
||||
break;
|
||||
case CMD_ERASE_ALL:
|
||||
status = flashloader_erase_all();
|
||||
break;
|
||||
case CMD_PROGRAM:
|
||||
status =
|
||||
flashloader_program((uint8_t *)g_cfg[g_curr_buf].buf_addr,
|
||||
g_cfg[g_curr_buf].dest, g_cfg[g_curr_buf].len);
|
||||
break;
|
||||
case CMD_ERASE_AND_PROGRAM:
|
||||
status =
|
||||
flashloader_erase_and_program((uint8_t *)g_cfg[g_curr_buf].buf_addr,
|
||||
g_cfg[g_curr_buf].dest, g_cfg[g_curr_buf].len);
|
||||
break;
|
||||
case CMD_ERASE_AND_PROGRAM_WITH_RETAIN:
|
||||
status =
|
||||
flashloader_program_with_retain((uint8_t *)g_cfg[g_curr_buf].buf_addr,
|
||||
g_cfg[g_curr_buf].dest, g_cfg[g_curr_buf].len);
|
||||
break;
|
||||
case CMD_ERASE_SECTORS:
|
||||
status =
|
||||
flashloader_erase_sectors(g_cfg[g_curr_buf].dest,
|
||||
g_cfg[g_curr_buf].len);
|
||||
break;
|
||||
default:
|
||||
status = STATUS_FAILED_UNKNOWN_COMMAND;
|
||||
break;
|
||||
}
|
||||
|
||||
restore_cache_state();
|
||||
|
||||
35
contrib/loaders/flash/dw-spi/Makefile
Normal file
35
contrib/loaders/flash/dw-spi/Makefile
Normal file
@@ -0,0 +1,35 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
TOOLCHAIN:=mipsel-linux-gnu-
|
||||
CC:=$(TOOLCHAIN)gcc
|
||||
OBJCOPY:=$(TOOLCHAIN)objcopy
|
||||
CFLAGS:=-O2 -Wall -Wextra -fpic -Wno-int-to-pointer-cast
|
||||
SRC=dw-spi.c
|
||||
OBJ=$(patsubst %.c, %.o,$(SRC))
|
||||
|
||||
# sparx-iv
|
||||
ifeq ($(TOOLCHAIN),mipsel-linux-gnu-)
|
||||
CFLAGS+= -march=24kec
|
||||
endif
|
||||
|
||||
all: \
|
||||
$(TOOLCHAIN)transaction.inc \
|
||||
$(TOOLCHAIN)erase.inc \
|
||||
$(TOOLCHAIN)check_fill.inc \
|
||||
$(TOOLCHAIN)program.inc \
|
||||
$(TOOLCHAIN)read.inc
|
||||
|
||||
$(TOOLCHAIN)%.bin: $(OBJ)
|
||||
$(OBJCOPY) --dump-section .$*=$@ $<
|
||||
|
||||
%.inc: %.bin
|
||||
xxd -i > $@ < $<
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -rf .ccls-cache
|
||||
find . \( \
|
||||
-iname "*.o" \
|
||||
-o -iname "*.bin" \
|
||||
-o -iname "*.inc" \
|
||||
\) -delete
|
||||
246
contrib/loaders/flash/dw-spi/dw-spi.c
Normal file
246
contrib/loaders/flash/dw-spi/dw-spi.c
Normal file
@@ -0,0 +1,246 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
/**
|
||||
* @file
|
||||
* Helper functions for DesignWare SPI Core driver.
|
||||
* These helpers are loaded into CPU and execute Flash manipulation algorithms
|
||||
* at full CPU speed. Due to inability to control nCS pin, this is the only way
|
||||
* to communicate with Flash chips connected via DW SPI serial interface.
|
||||
*
|
||||
* In order to avoid using stack, all functions used in helpers are inlined.
|
||||
* Software breakpoints are used to terminate helpers.
|
||||
*
|
||||
* Pushing byte to TX FIFO does not make byte immediately available in RX FIFO
|
||||
* and nCS is only asserted when TX FIFO is not empty. General approach is to
|
||||
* fill TX FIFO with as many bytes as possible, at the same time reading
|
||||
* available bytes from RX FIFO.
|
||||
*
|
||||
* This file contains helper functions.
|
||||
*/
|
||||
|
||||
#include "dw-spi.h"
|
||||
|
||||
#include "../../../../src/flash/nor/dw-spi-helper.h"
|
||||
|
||||
/**
|
||||
* @brief Generic flash transaction.
|
||||
*
|
||||
* @param[in] arg: Function arguments.
|
||||
*/
|
||||
__attribute__((section(".transaction"))) void
|
||||
transaction(struct dw_spi_transaction *arg)
|
||||
{
|
||||
register uint8_t *buffer_tx = (uint8_t *)arg->buffer;
|
||||
register uint8_t *buffer_rx = buffer_tx;
|
||||
register uint32_t size = arg->size;
|
||||
register volatile uint8_t *status = (uint8_t *)arg->status_reg;
|
||||
register volatile uint8_t *data = (uint8_t *)arg->data_reg;
|
||||
|
||||
wait_tx_finish(status);
|
||||
flush_rx(status, data);
|
||||
|
||||
for (; size > 0; size--) {
|
||||
send_u8(status, data, *buffer_tx++);
|
||||
if (arg->read_flag && rx_available(status))
|
||||
*buffer_rx++ = rcv_byte(data);
|
||||
}
|
||||
|
||||
// Pushed all data to TX FIFO. Read bytes left in RX FIFO.
|
||||
if (arg->read_flag) {
|
||||
while (buffer_rx < buffer_tx) {
|
||||
wait_rx_available(status);
|
||||
*buffer_rx++ = rcv_byte(data);
|
||||
}
|
||||
}
|
||||
|
||||
RETURN;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check flash sectors are filled with pattern. Primary use for
|
||||
* checking sector erase state.
|
||||
*
|
||||
* @param[in] arg: Function arguments.
|
||||
*/
|
||||
__attribute__((section(".check_fill"))) void
|
||||
check_fill(struct dw_spi_check_fill *arg)
|
||||
{
|
||||
register uint32_t tx_size;
|
||||
register uint32_t rx_size;
|
||||
register uint32_t dummy_count;
|
||||
register uint8_t filled;
|
||||
register uint8_t *fill_status_array = (uint8_t *)arg->fill_status_array;
|
||||
register volatile uint8_t *status = (uint8_t *)arg->status_reg;
|
||||
register volatile uint8_t *data = (uint8_t *)arg->data_reg;
|
||||
|
||||
for (; arg->sector_count > 0; arg->sector_count--,
|
||||
arg->address += arg->sector_size,
|
||||
fill_status_array++) {
|
||||
wait_tx_finish(status);
|
||||
flush_rx(status, data);
|
||||
|
||||
/*
|
||||
* Command byte and address bytes make up for dummy_count number of
|
||||
* bytes, that must be skipped in RX FIFO before actual data arrives.
|
||||
*/
|
||||
send_u8(status, data, arg->read_cmd);
|
||||
if (arg->four_byte_mode) {
|
||||
dummy_count = 1 + 4; // Command byte + 4 address bytes
|
||||
send_u32(status, data, arg->address);
|
||||
} else {
|
||||
dummy_count = 1 + 3; // Command byte + 3 address bytes
|
||||
send_u24(status, data, arg->address);
|
||||
}
|
||||
|
||||
for (tx_size = arg->sector_size, rx_size = arg->sector_size, filled = 1;
|
||||
tx_size > 0; tx_size--) {
|
||||
send_u8(status, data, 0); // Dummy write to push out read data.
|
||||
if (rx_available(status)) {
|
||||
if (dummy_count > 0) {
|
||||
// Read data not arrived yet.
|
||||
rcv_byte(data);
|
||||
dummy_count--;
|
||||
} else {
|
||||
if (rcv_byte(data) != arg->pattern) {
|
||||
filled = 0;
|
||||
break;
|
||||
}
|
||||
rx_size--;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (filled) {
|
||||
for (; rx_size > 0; rx_size--) {
|
||||
wait_rx_available(status);
|
||||
if (rcv_byte(data) != arg->pattern) {
|
||||
filled = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
*fill_status_array = filled;
|
||||
}
|
||||
|
||||
RETURN;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Erase flash sectors.
|
||||
*
|
||||
* @param[in] arg: Function arguments.
|
||||
*/
|
||||
__attribute__((section(".erase"))) void
|
||||
erase(struct dw_spi_erase *arg)
|
||||
{
|
||||
register uint32_t address = arg->address;
|
||||
register uint32_t count = arg->sector_count;
|
||||
register volatile uint8_t *status = (uint8_t *)arg->status_reg;
|
||||
register volatile uint8_t *data = (uint8_t *)arg->data_reg;
|
||||
|
||||
for (; count > 0; count--, address += arg->sector_size) {
|
||||
write_enable(status, data, arg->write_enable_cmd);
|
||||
wait_write_enable(status, data, arg->read_status_cmd,
|
||||
arg->write_enable_mask);
|
||||
|
||||
erase_sector(status, data, arg->erase_sector_cmd, address,
|
||||
arg->four_byte_mode);
|
||||
wait_busy(status, data, arg->read_status_cmd, arg->busy_mask);
|
||||
}
|
||||
|
||||
RETURN;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Flash program.
|
||||
*
|
||||
* @param[in] arg: Function arguments.
|
||||
*/
|
||||
__attribute__((section(".program"))) void
|
||||
program(struct dw_spi_program *arg)
|
||||
{
|
||||
register uint8_t *buffer = (uint8_t *)arg->buffer;
|
||||
register uint32_t buffer_size = arg->buffer_size;
|
||||
register volatile uint8_t *status = (uint8_t *)arg->status_reg;
|
||||
register volatile uint8_t *data = (uint8_t *)arg->data_reg;
|
||||
register uint32_t page_size;
|
||||
|
||||
while (buffer_size > 0) {
|
||||
write_enable(status, data, arg->write_enable_cmd);
|
||||
wait_write_enable(status, data, arg->read_status_cmd,
|
||||
arg->write_enable_mask);
|
||||
|
||||
wait_tx_finish(status);
|
||||
|
||||
send_u8(status, data, arg->program_cmd);
|
||||
if (arg->four_byte_mode)
|
||||
send_u32(status, data, arg->address);
|
||||
else
|
||||
send_u24(status, data, arg->address);
|
||||
|
||||
for (page_size = MIN(arg->page_size, buffer_size); page_size > 0;
|
||||
page_size--, buffer_size--) {
|
||||
send_u8(status, data, *buffer++);
|
||||
}
|
||||
arg->address += arg->page_size;
|
||||
wait_busy(status, data, arg->read_status_cmd, arg->busy_mask);
|
||||
}
|
||||
|
||||
RETURN;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read data from flash.
|
||||
*
|
||||
* @param[in] arg: Function arguments.
|
||||
*/
|
||||
__attribute__((section(".read"))) void
|
||||
read(struct dw_spi_read *arg)
|
||||
{
|
||||
register uint32_t tx_size = arg->buffer_size;
|
||||
register uint32_t rx_size = arg->buffer_size;
|
||||
register uint32_t dummy_count;
|
||||
register uint8_t *buffer = (uint8_t *)arg->buffer;
|
||||
register volatile uint8_t *status = (uint8_t *)arg->status_reg;
|
||||
register volatile uint8_t *data = (uint8_t *)arg->data_reg;
|
||||
|
||||
wait_tx_finish(status);
|
||||
flush_rx(status, data);
|
||||
|
||||
/*
|
||||
* Command byte and address bytes make up for dummy_count number of
|
||||
* bytes, that must be skipped in RX FIFO before actual data arrives.
|
||||
*/
|
||||
send_u8(status, data, arg->read_cmd);
|
||||
if (arg->four_byte_mode) {
|
||||
dummy_count = 1 + 4; // Command byte + 4 address bytes
|
||||
send_u32(status, data, arg->address);
|
||||
} else {
|
||||
dummy_count = 1 + 3; // Command byte + 3 address bytes
|
||||
send_u24(status, data, arg->address);
|
||||
}
|
||||
|
||||
for (; tx_size > 0; tx_size--) {
|
||||
send_u8(status, data, 0); // Dummy write to push out read data.
|
||||
if (rx_available(status)) {
|
||||
if (dummy_count > 0) {
|
||||
rcv_byte(data);
|
||||
dummy_count--;
|
||||
} else {
|
||||
*buffer++ = rcv_byte(data);
|
||||
rx_size--;
|
||||
}
|
||||
}
|
||||
}
|
||||
while (rx_size > 0) {
|
||||
wait_rx_available(status);
|
||||
if (dummy_count > 0) {
|
||||
// Read data not arrived yet.
|
||||
rcv_byte(data);
|
||||
dummy_count--;
|
||||
} else {
|
||||
*buffer++ = rcv_byte(data);
|
||||
rx_size--;
|
||||
}
|
||||
}
|
||||
|
||||
RETURN;
|
||||
}
|
||||
313
contrib/loaders/flash/dw-spi/dw-spi.h
Normal file
313
contrib/loaders/flash/dw-spi/dw-spi.h
Normal file
@@ -0,0 +1,313 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/**
|
||||
* @file
|
||||
* Helper functions for DesignWare SPI Core driver.
|
||||
* These helpers are loaded into CPU and execute Flash manipulation algorithms
|
||||
* at full CPU speed. Due to inability to control nCS pin, this is the only way
|
||||
* to communicate with Flash chips connected via DW SPI serial interface.
|
||||
*
|
||||
* In order to avoid using stack, all functions used in helpers are inlined.
|
||||
* Software breakpoints are used to terminate helpers.
|
||||
*
|
||||
* This file contains functions, common to helpers.
|
||||
*/
|
||||
|
||||
#ifndef _DW_SPI_H_
|
||||
#define _DW_SPI_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <sys/param.h>
|
||||
|
||||
#include "../../../../src/helper/types.h"
|
||||
|
||||
/**
|
||||
* @brief SI busy status bit.
|
||||
*
|
||||
* Set when serial transfer is in progress, cleared when master is idle or
|
||||
* disabled.
|
||||
*/
|
||||
#define DW_SPI_STATUS_BUSY 0x01
|
||||
|
||||
/**
|
||||
* @brief SI TX FIFO not full status bit.
|
||||
*
|
||||
* Set when TX FIFO has room for one or more data-word.
|
||||
*/
|
||||
#define DW_SPI_STATUS_TFNF 0x02
|
||||
|
||||
/**
|
||||
* @brief SI TX FIFO empty status bit.
|
||||
*/
|
||||
#define DW_SPI_STATUS_TFE 0x04
|
||||
|
||||
/**
|
||||
* @brief SI RX FIFO not empty status bit.
|
||||
*/
|
||||
#define DW_SPI_STATUS_RFNE 0x08
|
||||
|
||||
/**
|
||||
* @brief Return from helper function.
|
||||
*/
|
||||
#define RETURN \
|
||||
do { \
|
||||
asm("sdbbp\n\t"); \
|
||||
return; \
|
||||
} while (0)
|
||||
|
||||
/**
|
||||
* @brief Append byte to TX FIFO.
|
||||
*
|
||||
* For each transferred byte, DW SPI controller receives a byte into RX FIFO.
|
||||
* Slave data are read by pushing dummy bytes to TX FIFO.
|
||||
*
|
||||
* @param[in] dr: Pointer to DR register.
|
||||
* @param[in] byte: Data to push.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline void
|
||||
_send_byte(volatile uint8_t *dr, uint8_t byte)
|
||||
{
|
||||
*dr = byte;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get byte from RX FIFO.
|
||||
*
|
||||
* Reading RX byte removes it from RX FIFO.
|
||||
*
|
||||
* @param[in] dr: Pointer to DR register.
|
||||
* @return RX FIFO byte.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline uint8_t
|
||||
rcv_byte(volatile uint8_t *dr)
|
||||
{
|
||||
return *dr;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check transmission is currently in progress.
|
||||
*
|
||||
* @param[in] sr: Pointer to SR register.
|
||||
* @retval 1: Transmission is in progress.
|
||||
* @retval 0: Controller is idle or off.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline int
|
||||
tx_in_progress(volatile uint8_t *sr)
|
||||
{
|
||||
return (*sr ^ DW_SPI_STATUS_TFE) & (DW_SPI_STATUS_BUSY | DW_SPI_STATUS_TFE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Wait for controller to finish previous transaction.
|
||||
*
|
||||
* @param[in] sr: Pointer to SR register.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline void
|
||||
wait_tx_finish(volatile uint8_t *sr)
|
||||
{
|
||||
while (tx_in_progress(sr))
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Wait for room in TX FIFO.
|
||||
*
|
||||
* @param[in] sr: Pointer to SR register.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline void
|
||||
wait_tx_available(volatile uint8_t *sr)
|
||||
{
|
||||
while (!(*sr & DW_SPI_STATUS_TFNF))
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check for data available in RX FIFO.
|
||||
*
|
||||
* @param[in] sr: Pointer to SR register.
|
||||
* @retval 1: Data available.
|
||||
* @retval 0: No data available.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline int
|
||||
rx_available(volatile uint8_t *sr)
|
||||
{
|
||||
return *sr & DW_SPI_STATUS_RFNE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Wait for data in RX FIFO.
|
||||
*
|
||||
* @param[in] sr: Pointer to SR register.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline void
|
||||
wait_rx_available(volatile uint8_t *sr)
|
||||
{
|
||||
while (!rx_available(sr))
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Flush RX FIFO.
|
||||
*
|
||||
* @param[in] sr: Pointer to SR register.
|
||||
* @param[in] dr: Pointer to DR register.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline void
|
||||
flush_rx(volatile uint8_t *sr, volatile uint8_t *dr)
|
||||
{
|
||||
while (*sr & DW_SPI_STATUS_RFNE)
|
||||
*dr;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Append variable number of bytes to TX FIFO.
|
||||
*
|
||||
* @param[in] sr: Pointer to SR register.
|
||||
* @param[in] dr: Pointer to DR register.
|
||||
* @param[in] word: Data to append.
|
||||
* @param[in] bytes: Number of bytes to append.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline void
|
||||
_send_bytes(volatile uint8_t *sr, volatile uint8_t *dr, uint32_t word,
|
||||
int bytes)
|
||||
{
|
||||
for (register int i = bytes - 1; i >= 0; i--) {
|
||||
wait_tx_available(sr);
|
||||
_send_byte(dr, (word >> (i * 8)) & 0xff);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Append 8 bit value to TX FIFO.
|
||||
*
|
||||
* @param[in] sr: Pointer to SR register.
|
||||
* @param[in] dr: Pointer to DR register.
|
||||
* @param[in] word: Data to push.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline void
|
||||
send_u8(volatile uint8_t *sr, volatile uint8_t *dr, uint8_t byte)
|
||||
{
|
||||
wait_tx_available(sr);
|
||||
_send_byte(dr, byte);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Append 24 bit value to TX FIFO.
|
||||
*
|
||||
* Used to send Flash addresses in 24 bit mode.
|
||||
*
|
||||
* @param[in] sr: Pointer to SR register.
|
||||
* @param[in] dr: Pointer to DR register.
|
||||
* @param[in] word: Data to push.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline void
|
||||
send_u24(volatile uint8_t *sr, volatile uint8_t *dr, uint32_t word)
|
||||
{
|
||||
_send_bytes(sr, dr, word, 3);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Append 32 bit value to TX FIFO.
|
||||
*
|
||||
* @param[in] sr: Pointer to SR register.
|
||||
* @param[in] dr: Pointer to DR register.
|
||||
* @param[in] word: Data to push.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline void
|
||||
send_u32(volatile uint8_t *sr, volatile uint8_t *dr, uint32_t word)
|
||||
{
|
||||
_send_bytes(sr, dr, word, 4);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read chip status register.
|
||||
*
|
||||
* @param[in] sr: Pointer to SR register.
|
||||
* @param[in] dr: Pointer to DR register.
|
||||
* @param[in] stat_cmd: Read status command.
|
||||
* @return Chip status.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline uint8_t
|
||||
read_status(volatile uint8_t *sr, volatile uint8_t *dr, uint8_t stat_cmd)
|
||||
{
|
||||
wait_tx_finish(sr);
|
||||
flush_rx(sr, dr);
|
||||
/*
|
||||
* Don't bother with wait_tx_available() as TX FIFO is empty
|
||||
* and we only send two bytes.
|
||||
*/
|
||||
_send_byte(dr, stat_cmd);
|
||||
_send_byte(dr, 0); // Dummy write to push out read data.
|
||||
wait_rx_available(sr);
|
||||
rcv_byte(dr); // Dummy read to skip command byte.
|
||||
wait_rx_available(sr);
|
||||
return rcv_byte(dr);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enable Flash chip write.
|
||||
*
|
||||
* @param[in] sr: Pointer to SR register.
|
||||
* @param[in] dr: Pointer to DR register.
|
||||
* @param[in] we_cmd: Write enable command.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline void
|
||||
write_enable(volatile uint8_t *sr, volatile uint8_t *dr, uint8_t we_cmd)
|
||||
{
|
||||
wait_tx_finish(sr);
|
||||
_send_byte(dr, we_cmd);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Erase Flash sector.
|
||||
*
|
||||
* @param[in] sr: Pointer to SR register.
|
||||
* @param[in] dr: Pointer to DR register.
|
||||
* @param[in] erase_cmd: Erase sector cmd.
|
||||
* @param[in] address: Sector address.
|
||||
* @param[in] four_byte_mode: Device is in 32 bit mode flag.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline void
|
||||
erase_sector(volatile uint8_t *sr, volatile uint8_t *dr, uint8_t erase_cmd,
|
||||
uint32_t address, uint8_t four_byte_mode)
|
||||
{
|
||||
wait_tx_finish(sr);
|
||||
_send_byte(dr, erase_cmd);
|
||||
if (four_byte_mode)
|
||||
send_u32(sr, dr, address);
|
||||
else
|
||||
send_u24(sr, dr, address);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Wait for write enable flag.
|
||||
*
|
||||
* @param[in] sr: Pointer to SR register.
|
||||
* @param[in] dr: Pointer to DR register.
|
||||
* @param[in] stat_cmd: Read status command.
|
||||
* @param[in] we_mask: Write enable status mask.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline void
|
||||
wait_write_enable(volatile uint8_t *sr, volatile uint8_t *dr, uint8_t stat_cmd,
|
||||
uint8_t we_mask)
|
||||
{
|
||||
while (!(read_status(sr, dr, stat_cmd) & we_mask))
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Wait while flash is busy.
|
||||
*
|
||||
* @param[in] sr: Pointer to SR register.
|
||||
* @param[in] dr: Pointer to DR register.
|
||||
* @param[in] stat_cmd: Read status command.
|
||||
* @param[in] busy_mask: Flash busy mask.
|
||||
*/
|
||||
__attribute__((always_inline)) static inline void
|
||||
wait_busy(volatile uint8_t *sr, volatile uint8_t *dr, uint8_t stat_cmd,
|
||||
uint8_t busy_mask)
|
||||
{
|
||||
while (read_status(sr, dr, stat_cmd) & busy_mask)
|
||||
;
|
||||
}
|
||||
|
||||
#endif // _DW_SPI_H_
|
||||
39
contrib/loaders/flash/dw-spi/mipsel-linux-gnu-check_fill.inc
Normal file
39
contrib/loaders/flash/dw-spi/mipsel-linux-gnu-check_fill.inc
Normal file
@@ -0,0 +1,39 @@
|
||||
0x0b, 0x00, 0x82, 0x88, 0x1f, 0x00, 0x8a, 0x88, 0x0f, 0x00, 0x83, 0x88,
|
||||
0x17, 0x00, 0x86, 0x88, 0x08, 0x00, 0x82, 0x98, 0x1c, 0x00, 0x8a, 0x98,
|
||||
0x0c, 0x00, 0x83, 0x98, 0x14, 0x00, 0x86, 0x98, 0x25, 0x38, 0x80, 0x00,
|
||||
0x54, 0x00, 0x40, 0x10, 0xf8, 0xff, 0x09, 0x24, 0x00, 0x00, 0x64, 0x90,
|
||||
0x05, 0x00, 0x84, 0x30, 0x04, 0x00, 0x84, 0x38, 0xfc, 0xff, 0x80, 0x14,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x90, 0x08, 0x00, 0x42, 0x30,
|
||||
0x07, 0x00, 0x40, 0x50, 0x25, 0x00, 0xe5, 0x90, 0x00, 0x00, 0xc2, 0x90,
|
||||
0x00, 0x00, 0x62, 0x90, 0x08, 0x00, 0x42, 0x30, 0xfc, 0xff, 0x40, 0x14,
|
||||
0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0xe5, 0x90, 0x00, 0x00, 0x62, 0x90,
|
||||
0x02, 0x00, 0x42, 0x30, 0xfd, 0xff, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xc5, 0xa0, 0x26, 0x00, 0xe2, 0x90, 0x45, 0x00, 0x40, 0x10,
|
||||
0x03, 0x00, 0xe8, 0x88, 0x00, 0x00, 0xe8, 0x98, 0x18, 0x00, 0x05, 0x24,
|
||||
0x00, 0x00, 0x62, 0x90, 0x02, 0x00, 0x42, 0x30, 0xfd, 0xff, 0x40, 0x10,
|
||||
0x06, 0x10, 0xa8, 0x00, 0xff, 0x00, 0x42, 0x30, 0xf8, 0xff, 0xa5, 0x24,
|
||||
0x00, 0x00, 0xc2, 0xa0, 0xf8, 0xff, 0xa9, 0x14, 0x05, 0x00, 0x0b, 0x24,
|
||||
0x07, 0x00, 0xe8, 0x88, 0x04, 0x00, 0xe8, 0x98, 0x1e, 0x00, 0x00, 0x11,
|
||||
0x25, 0x28, 0x00, 0x01, 0x00, 0x00, 0x62, 0x90, 0x02, 0x00, 0x42, 0x30,
|
||||
0xfd, 0xff, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xa0,
|
||||
0x00, 0x00, 0x62, 0x90, 0x08, 0x00, 0x42, 0x30, 0x06, 0x00, 0x40, 0x50,
|
||||
0xff, 0xff, 0xa5, 0x24, 0x00, 0x00, 0xc2, 0x90, 0x25, 0x00, 0x60, 0x51,
|
||||
0x24, 0x00, 0xec, 0x90, 0xff, 0xff, 0x6b, 0x25, 0xff, 0xff, 0xa5, 0x24,
|
||||
0xf1, 0xff, 0xa0, 0x14, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x51,
|
||||
0x01, 0x00, 0x04, 0x24, 0x24, 0x00, 0xe5, 0x90, 0x00, 0x00, 0x62, 0x90,
|
||||
0x08, 0x00, 0x42, 0x30, 0xfd, 0xff, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xc2, 0x90, 0xff, 0x00, 0x42, 0x30, 0x04, 0x00, 0xa2, 0x14,
|
||||
0xff, 0xff, 0x08, 0x25, 0xf7, 0xff, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x04, 0x24, 0x00, 0x00, 0x44, 0xa1, 0x0b, 0x00, 0xe2, 0x88,
|
||||
0x01, 0x00, 0x4a, 0x25, 0x08, 0x00, 0xe2, 0x98, 0xff, 0xff, 0x42, 0x24,
|
||||
0x0b, 0x00, 0xe2, 0xa8, 0x08, 0x00, 0xe2, 0xb8, 0x03, 0x00, 0xe4, 0x88,
|
||||
0x07, 0x00, 0xe5, 0x88, 0x00, 0x00, 0xe4, 0x98, 0x04, 0x00, 0xe5, 0x98,
|
||||
0x21, 0x20, 0x85, 0x00, 0x03, 0x00, 0xe4, 0xa8, 0xae, 0xff, 0x40, 0x14,
|
||||
0x00, 0x00, 0xe4, 0xb8, 0x3f, 0x00, 0x00, 0x70, 0x08, 0x00, 0xe0, 0x03,
|
||||
0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x42, 0x30, 0xed, 0xff, 0x82, 0x55,
|
||||
0x00, 0x00, 0x44, 0xa1, 0xd9, 0xff, 0x00, 0x10, 0xff, 0xff, 0x08, 0x25,
|
||||
0x00, 0x00, 0xe8, 0x98, 0x10, 0x00, 0x05, 0x24, 0x00, 0x00, 0x62, 0x90,
|
||||
0x02, 0x00, 0x42, 0x30, 0xfd, 0xff, 0x40, 0x10, 0x06, 0x10, 0xa8, 0x00,
|
||||
0xff, 0x00, 0x42, 0x30, 0xf8, 0xff, 0xa5, 0x24, 0x00, 0x00, 0xc2, 0xa0,
|
||||
0xf8, 0xff, 0xa9, 0x14, 0x04, 0x00, 0x0b, 0x24, 0xbc, 0xff, 0x00, 0x10,
|
||||
0x07, 0x00, 0xe8, 0x88
|
||||
39
contrib/loaders/flash/dw-spi/mipsel-linux-gnu-erase.inc
Normal file
39
contrib/loaders/flash/dw-spi/mipsel-linux-gnu-erase.inc
Normal file
@@ -0,0 +1,39 @@
|
||||
0x0b, 0x00, 0x88, 0x88, 0x25, 0x28, 0x80, 0x00, 0x03, 0x00, 0x86, 0x88,
|
||||
0x0f, 0x00, 0x82, 0x88, 0x17, 0x00, 0x84, 0x88, 0x08, 0x00, 0xa8, 0x98,
|
||||
0x00, 0x00, 0xa6, 0x98, 0x0c, 0x00, 0xa2, 0x98, 0x5f, 0x00, 0x00, 0x11,
|
||||
0x14, 0x00, 0xa4, 0x98, 0xf8, 0xff, 0x07, 0x24, 0x1d, 0x00, 0xa9, 0x90,
|
||||
0x00, 0x00, 0x43, 0x90, 0x05, 0x00, 0x63, 0x30, 0x04, 0x00, 0x63, 0x38,
|
||||
0xfc, 0xff, 0x60, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xa0,
|
||||
0x1c, 0x00, 0xaa, 0x90, 0x1f, 0x00, 0xa9, 0x90, 0x00, 0x00, 0x43, 0x90,
|
||||
0x05, 0x00, 0x63, 0x30, 0x04, 0x00, 0x63, 0x38, 0xfc, 0xff, 0x60, 0x14,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x90, 0x08, 0x00, 0x63, 0x30,
|
||||
0x06, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x90,
|
||||
0x00, 0x00, 0x43, 0x90, 0x08, 0x00, 0x63, 0x30, 0xfc, 0xff, 0x60, 0x14,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xa0, 0x00, 0x00, 0x80, 0xa0,
|
||||
0x00, 0x00, 0x43, 0x90, 0x08, 0x00, 0x63, 0x30, 0xfd, 0xff, 0x60, 0x10,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x90, 0x00, 0x00, 0x43, 0x90,
|
||||
0x08, 0x00, 0x63, 0x30, 0xfd, 0xff, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x83, 0x90, 0x24, 0x18, 0x23, 0x01, 0xe4, 0xff, 0x60, 0x10,
|
||||
0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xaa, 0x90, 0x21, 0x00, 0xa9, 0x90,
|
||||
0x00, 0x00, 0x43, 0x90, 0x05, 0x00, 0x63, 0x30, 0x04, 0x00, 0x63, 0x38,
|
||||
0xfc, 0xff, 0x60, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xa0,
|
||||
0x31, 0x00, 0x20, 0x11, 0x10, 0x00, 0x09, 0x24, 0x18, 0x00, 0x09, 0x24,
|
||||
0x00, 0x00, 0x43, 0x90, 0x02, 0x00, 0x63, 0x30, 0xfd, 0xff, 0x60, 0x10,
|
||||
0x06, 0x18, 0x26, 0x01, 0xff, 0x00, 0x63, 0x30, 0xf8, 0xff, 0x29, 0x25,
|
||||
0xf9, 0xff, 0x27, 0x15, 0x00, 0x00, 0x83, 0xa0, 0x1c, 0x00, 0xaa, 0x90,
|
||||
0x20, 0x00, 0xa9, 0x90, 0x00, 0x00, 0x43, 0x90, 0x05, 0x00, 0x63, 0x30,
|
||||
0x04, 0x00, 0x63, 0x38, 0xfc, 0xff, 0x60, 0x14, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x43, 0x90, 0x08, 0x00, 0x63, 0x30, 0x06, 0x00, 0x60, 0x10,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x90, 0x00, 0x00, 0x43, 0x90,
|
||||
0x08, 0x00, 0x63, 0x30, 0xfc, 0xff, 0x60, 0x14, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x8a, 0xa0, 0x00, 0x00, 0x80, 0xa0, 0x00, 0x00, 0x43, 0x90,
|
||||
0x08, 0x00, 0x63, 0x30, 0xfd, 0xff, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x83, 0x90, 0x00, 0x00, 0x43, 0x90, 0x08, 0x00, 0x63, 0x30,
|
||||
0xfd, 0xff, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x90,
|
||||
0x24, 0x18, 0x23, 0x01, 0xe4, 0xff, 0x60, 0x14, 0x00, 0x00, 0x00, 0x00,
|
||||
0x07, 0x00, 0xa3, 0x88, 0xff, 0xff, 0x08, 0x25, 0x04, 0x00, 0xa3, 0x98,
|
||||
0xa4, 0xff, 0x00, 0x15, 0x21, 0x30, 0xc3, 0x00, 0x3f, 0x00, 0x00, 0x70,
|
||||
0x08, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x90,
|
||||
0x02, 0x00, 0x63, 0x30, 0xfd, 0xff, 0x60, 0x10, 0x06, 0x18, 0x26, 0x01,
|
||||
0xff, 0x00, 0x63, 0x30, 0xf8, 0xff, 0x29, 0x25, 0xf9, 0xff, 0x27, 0x15,
|
||||
0x00, 0x00, 0x83, 0xa0, 0xd1, 0xff, 0x00, 0x10, 0x1c, 0x00, 0xaa, 0x90
|
||||
51
contrib/loaders/flash/dw-spi/mipsel-linux-gnu-program.inc
Normal file
51
contrib/loaders/flash/dw-spi/mipsel-linux-gnu-program.inc
Normal file
@@ -0,0 +1,51 @@
|
||||
0x13, 0x00, 0x88, 0x88, 0x25, 0x30, 0x80, 0x00, 0x0b, 0x00, 0x85, 0x88,
|
||||
0x17, 0x00, 0x82, 0x88, 0x1f, 0x00, 0x84, 0x88, 0x10, 0x00, 0xc8, 0x98,
|
||||
0x08, 0x00, 0xc5, 0x98, 0x14, 0x00, 0xc2, 0x98, 0x1c, 0x00, 0xc4, 0x98,
|
||||
0x78, 0x00, 0x00, 0x11, 0xf8, 0xff, 0x07, 0x24, 0x25, 0x00, 0xc9, 0x90,
|
||||
0x00, 0x00, 0x43, 0x90, 0x05, 0x00, 0x63, 0x30, 0x04, 0x00, 0x63, 0x38,
|
||||
0xfc, 0xff, 0x60, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xa0,
|
||||
0x24, 0x00, 0xca, 0x90, 0x27, 0x00, 0xc9, 0x90, 0x00, 0x00, 0x43, 0x90,
|
||||
0x05, 0x00, 0x63, 0x30, 0x04, 0x00, 0x63, 0x38, 0xfc, 0xff, 0x60, 0x14,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x90, 0x08, 0x00, 0x63, 0x30,
|
||||
0x06, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x90,
|
||||
0x00, 0x00, 0x43, 0x90, 0x08, 0x00, 0x63, 0x30, 0xfc, 0xff, 0x60, 0x14,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xa0, 0x00, 0x00, 0x80, 0xa0,
|
||||
0x00, 0x00, 0x43, 0x90, 0x08, 0x00, 0x63, 0x30, 0xfd, 0xff, 0x60, 0x10,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x90, 0x00, 0x00, 0x43, 0x90,
|
||||
0x08, 0x00, 0x63, 0x30, 0xfd, 0xff, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x83, 0x90, 0x24, 0x18, 0x23, 0x01, 0xe4, 0xff, 0x60, 0x10,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x90, 0x05, 0x00, 0x63, 0x30,
|
||||
0x04, 0x00, 0x63, 0x38, 0xfc, 0xff, 0x60, 0x14, 0x00, 0x00, 0x00, 0x00,
|
||||
0x26, 0x00, 0xc9, 0x90, 0x00, 0x00, 0x43, 0x90, 0x02, 0x00, 0x63, 0x30,
|
||||
0xfd, 0xff, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xa0,
|
||||
0x29, 0x00, 0xc3, 0x90, 0x47, 0x00, 0x60, 0x10, 0x03, 0x00, 0xca, 0x88,
|
||||
0x00, 0x00, 0xca, 0x98, 0x18, 0x00, 0x09, 0x24, 0x00, 0x00, 0x43, 0x90,
|
||||
0x02, 0x00, 0x63, 0x30, 0xfd, 0xff, 0x60, 0x10, 0x06, 0x18, 0x2a, 0x01,
|
||||
0xff, 0x00, 0x63, 0x30, 0xf8, 0xff, 0x29, 0x25, 0x00, 0x00, 0x83, 0xa0,
|
||||
0xf8, 0xff, 0x27, 0x15, 0x25, 0x58, 0x00, 0x01, 0x07, 0x00, 0xc3, 0x88,
|
||||
0x04, 0x00, 0xc3, 0x98, 0x2b, 0x48, 0x03, 0x01, 0x0a, 0x58, 0x69, 0x00,
|
||||
0x0d, 0x00, 0x60, 0x11, 0x21, 0x50, 0xab, 0x00, 0x00, 0x00, 0xa9, 0x90,
|
||||
0x01, 0x00, 0xa5, 0x24, 0x00, 0x00, 0x43, 0x90, 0x02, 0x00, 0x63, 0x30,
|
||||
0xfd, 0xff, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xa0,
|
||||
0xf9, 0xff, 0xaa, 0x54, 0x00, 0x00, 0xa9, 0x90, 0x07, 0x00, 0xc3, 0x88,
|
||||
0x23, 0x40, 0x0b, 0x01, 0x04, 0x00, 0xc3, 0x98, 0x03, 0x00, 0xc9, 0x88,
|
||||
0x00, 0x00, 0xc9, 0x98, 0x21, 0x18, 0x23, 0x01, 0x03, 0x00, 0xc3, 0xa8,
|
||||
0x00, 0x00, 0xc3, 0xb8, 0x24, 0x00, 0xca, 0x90, 0x28, 0x00, 0xc9, 0x90,
|
||||
0x00, 0x00, 0x43, 0x90, 0x05, 0x00, 0x63, 0x30, 0x04, 0x00, 0x63, 0x38,
|
||||
0xfc, 0xff, 0x60, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x90,
|
||||
0x08, 0x00, 0x63, 0x30, 0x06, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x83, 0x90, 0x00, 0x00, 0x43, 0x90, 0x08, 0x00, 0x63, 0x30,
|
||||
0xfc, 0xff, 0x60, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0xa0,
|
||||
0x00, 0x00, 0x80, 0xa0, 0x00, 0x00, 0x43, 0x90, 0x08, 0x00, 0x63, 0x30,
|
||||
0xfd, 0xff, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x90,
|
||||
0x00, 0x00, 0x43, 0x90, 0x08, 0x00, 0x63, 0x30, 0xfd, 0xff, 0x60, 0x10,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x90, 0x24, 0x18, 0x23, 0x01,
|
||||
0xe4, 0xff, 0x60, 0x14, 0x00, 0x00, 0x00, 0x00, 0x8b, 0xff, 0x00, 0x55,
|
||||
0x25, 0x00, 0xc9, 0x90, 0x3f, 0x00, 0x00, 0x70, 0x08, 0x00, 0xe0, 0x03,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0x98, 0x10, 0x00, 0x09, 0x24,
|
||||
0x00, 0x00, 0x43, 0x90, 0x02, 0x00, 0x63, 0x30, 0xfd, 0xff, 0x60, 0x10,
|
||||
0x06, 0x18, 0x2a, 0x01, 0xff, 0x00, 0x63, 0x30, 0xf8, 0xff, 0x29, 0x25,
|
||||
0x00, 0x00, 0x83, 0xa0, 0xf8, 0xff, 0x27, 0x15, 0x25, 0x58, 0x00, 0x01,
|
||||
0x07, 0x00, 0xc3, 0x88, 0x04, 0x00, 0xc3, 0x98, 0x2b, 0x48, 0x03, 0x01,
|
||||
0x0a, 0x58, 0x69, 0x00, 0xbb, 0xff, 0x60, 0x15, 0x21, 0x50, 0xab, 0x00,
|
||||
0xc6, 0xff, 0x00, 0x10, 0x03, 0x00, 0xc9, 0x88
|
||||
33
contrib/loaders/flash/dw-spi/mipsel-linux-gnu-read.inc
Normal file
33
contrib/loaders/flash/dw-spi/mipsel-linux-gnu-read.inc
Normal file
@@ -0,0 +1,33 @@
|
||||
0x0f, 0x00, 0x87, 0x88, 0x07, 0x00, 0x88, 0x88, 0x13, 0x00, 0x83, 0x88,
|
||||
0x1b, 0x00, 0x85, 0x88, 0x0c, 0x00, 0x87, 0x98, 0x04, 0x00, 0x88, 0x98,
|
||||
0x10, 0x00, 0x83, 0x98, 0x18, 0x00, 0x85, 0x98, 0x00, 0x00, 0x62, 0x90,
|
||||
0x05, 0x00, 0x42, 0x30, 0x04, 0x00, 0x42, 0x38, 0xfc, 0xff, 0x40, 0x14,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x90, 0x08, 0x00, 0x42, 0x30,
|
||||
0x07, 0x00, 0x40, 0x50, 0x20, 0x00, 0x86, 0x90, 0x00, 0x00, 0xa2, 0x90,
|
||||
0x00, 0x00, 0x62, 0x90, 0x08, 0x00, 0x42, 0x30, 0xfc, 0xff, 0x40, 0x14,
|
||||
0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x86, 0x90, 0x00, 0x00, 0x62, 0x90,
|
||||
0x02, 0x00, 0x42, 0x30, 0xfd, 0xff, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xa6, 0xa0, 0x21, 0x00, 0x82, 0x90, 0x35, 0x00, 0x40, 0x10,
|
||||
0x03, 0x00, 0x82, 0x88, 0x18, 0x00, 0x06, 0x24, 0xf8, 0xff, 0x09, 0x24,
|
||||
0x00, 0x00, 0x82, 0x98, 0x25, 0x20, 0x40, 0x00, 0x00, 0x00, 0x62, 0x90,
|
||||
0x02, 0x00, 0x42, 0x30, 0xfd, 0xff, 0x40, 0x10, 0x06, 0x10, 0xc4, 0x00,
|
||||
0xff, 0x00, 0x42, 0x30, 0xf8, 0xff, 0xc6, 0x24, 0xf9, 0xff, 0xc9, 0x14,
|
||||
0x00, 0x00, 0xa2, 0xa0, 0x05, 0x00, 0x06, 0x24, 0x23, 0x00, 0xe0, 0x10,
|
||||
0x25, 0x20, 0xe0, 0x00, 0x00, 0x00, 0x62, 0x90, 0x02, 0x00, 0x42, 0x30,
|
||||
0xfd, 0xff, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xa0,
|
||||
0x00, 0x00, 0x62, 0x90, 0x08, 0x00, 0x42, 0x30, 0x06, 0x00, 0x40, 0x50,
|
||||
0xff, 0xff, 0x84, 0x24, 0x00, 0x00, 0xa2, 0x90, 0x14, 0x00, 0xc0, 0x50,
|
||||
0x00, 0x00, 0x02, 0xa1, 0xff, 0xff, 0xc6, 0x24, 0xff, 0xff, 0x84, 0x24,
|
||||
0xf1, 0xff, 0x80, 0x14, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0xe0, 0x10,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x90, 0x08, 0x00, 0x42, 0x30,
|
||||
0xfd, 0xff, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x90,
|
||||
0x03, 0x00, 0xc0, 0x50, 0xff, 0xff, 0xe7, 0x24, 0xf8, 0xff, 0x00, 0x10,
|
||||
0xff, 0xff, 0xc6, 0x24, 0x06, 0x00, 0xe0, 0x10, 0x00, 0x00, 0x02, 0xa1,
|
||||
0xf4, 0xff, 0x00, 0x10, 0x01, 0x00, 0x08, 0x25, 0xff, 0xff, 0xe7, 0x24,
|
||||
0xec, 0xff, 0x00, 0x10, 0x01, 0x00, 0x08, 0x25, 0x3f, 0x00, 0x00, 0x70,
|
||||
0x08, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x06, 0x24,
|
||||
0xf8, 0xff, 0x09, 0x24, 0x00, 0x00, 0x82, 0x98, 0x25, 0x20, 0x40, 0x00,
|
||||
0x00, 0x00, 0x62, 0x90, 0x02, 0x00, 0x42, 0x30, 0xfd, 0xff, 0x40, 0x10,
|
||||
0x06, 0x10, 0xc4, 0x00, 0xff, 0x00, 0x42, 0x30, 0xf8, 0xff, 0xc6, 0x24,
|
||||
0xf9, 0xff, 0xc9, 0x14, 0x00, 0x00, 0xa2, 0xa0, 0xcc, 0xff, 0x00, 0x10,
|
||||
0x04, 0x00, 0x06, 0x24
|
||||
@@ -0,0 +1,21 @@
|
||||
0x03, 0x00, 0x85, 0x88, 0x0b, 0x00, 0x88, 0x88, 0x0f, 0x00, 0x83, 0x88,
|
||||
0x17, 0x00, 0x86, 0x88, 0x00, 0x00, 0x85, 0x98, 0x08, 0x00, 0x88, 0x98,
|
||||
0x0c, 0x00, 0x83, 0x98, 0x14, 0x00, 0x86, 0x98, 0x00, 0x00, 0x62, 0x90,
|
||||
0x05, 0x00, 0x42, 0x30, 0x04, 0x00, 0x42, 0x38, 0xfc, 0xff, 0x40, 0x14,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x90, 0x08, 0x00, 0x42, 0x30,
|
||||
0x06, 0x00, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x90,
|
||||
0x00, 0x00, 0x62, 0x90, 0x08, 0x00, 0x42, 0x30, 0xfc, 0xff, 0x40, 0x14,
|
||||
0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00,
|
||||
0x25, 0x38, 0xa0, 0x00, 0x21, 0x40, 0x05, 0x01, 0x00, 0x00, 0xa9, 0x90,
|
||||
0x01, 0x00, 0xa5, 0x24, 0x00, 0x00, 0x62, 0x90, 0x02, 0x00, 0x42, 0x30,
|
||||
0xfd, 0xff, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc9, 0xa0,
|
||||
0x1c, 0x00, 0x82, 0x90, 0x08, 0x00, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x62, 0x90, 0x08, 0x00, 0x42, 0x30, 0x04, 0x00, 0x40, 0x10,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x90, 0x01, 0x00, 0xe7, 0x24,
|
||||
0xff, 0xff, 0xe2, 0xa0, 0xef, 0xff, 0xa8, 0x54, 0x00, 0x00, 0xa9, 0x90,
|
||||
0x1c, 0x00, 0x82, 0x90, 0x0c, 0x00, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||
0x2b, 0x10, 0xe8, 0x00, 0x09, 0x00, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x62, 0x90, 0x08, 0x00, 0x42, 0x30, 0xfd, 0xff, 0x40, 0x10,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x90, 0x01, 0x00, 0xe7, 0x24,
|
||||
0xf9, 0xff, 0x07, 0x15, 0xff, 0xff, 0xe2, 0xa0, 0x3f, 0x00, 0x00, 0x70,
|
||||
0x08, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00
|
||||
@@ -103,7 +103,7 @@ static void fespi_disable_hw_mode(volatile uint32_t *ctrl_base);
|
||||
static void fespi_enable_hw_mode(volatile uint32_t *ctrl_base);
|
||||
static int fespi_wip(volatile uint32_t *ctrl_base);
|
||||
static int fespi_write_buffer(volatile uint32_t *ctrl_base,
|
||||
const uint8_t *buffer, unsigned offset, unsigned len,
|
||||
const uint8_t *buffer, unsigned int offset, unsigned int len,
|
||||
uint32_t flash_info);
|
||||
|
||||
/* Can set bits 3:0 in result. */
|
||||
@@ -113,7 +113,7 @@ static int fespi_write_buffer(volatile uint32_t *ctrl_base,
|
||||
* after pprog_cmd
|
||||
*/
|
||||
int flash_fespi(volatile uint32_t *ctrl_base, uint32_t page_size,
|
||||
const uint8_t *buffer, unsigned offset, uint32_t count,
|
||||
const uint8_t *buffer, unsigned int offset, uint32_t count,
|
||||
uint32_t flash_info)
|
||||
{
|
||||
int result;
|
||||
@@ -163,12 +163,12 @@ err:
|
||||
return result;
|
||||
}
|
||||
|
||||
static uint32_t fespi_read_reg(volatile uint32_t *ctrl_base, unsigned address)
|
||||
static uint32_t fespi_read_reg(volatile uint32_t *ctrl_base, unsigned int address)
|
||||
{
|
||||
return ctrl_base[address / 4];
|
||||
}
|
||||
|
||||
static void fespi_write_reg(volatile uint32_t *ctrl_base, unsigned address, uint32_t value)
|
||||
static void fespi_write_reg(volatile uint32_t *ctrl_base, unsigned int address, uint32_t value)
|
||||
{
|
||||
ctrl_base[address / 4] = value;
|
||||
}
|
||||
@@ -188,7 +188,7 @@ static void fespi_enable_hw_mode(volatile uint32_t *ctrl_base)
|
||||
/* Can set bits 7:4 in result. */
|
||||
static int fespi_txwm_wait(volatile uint32_t *ctrl_base)
|
||||
{
|
||||
unsigned timeout = TIMEOUT;
|
||||
unsigned int timeout = TIMEOUT;
|
||||
|
||||
while (timeout--) {
|
||||
uint32_t ip = fespi_read_reg(ctrl_base, FESPI_REG_IP);
|
||||
@@ -209,7 +209,7 @@ static void fespi_set_dir(volatile uint32_t *ctrl_base, bool dir)
|
||||
/* Can set bits 11:8 in result. */
|
||||
static int fespi_tx(volatile uint32_t *ctrl_base, uint8_t in)
|
||||
{
|
||||
unsigned timeout = TIMEOUT;
|
||||
unsigned int timeout = TIMEOUT;
|
||||
|
||||
while (timeout--) {
|
||||
uint32_t txfifo = fespi_read_reg(ctrl_base, FESPI_REG_TXFIFO);
|
||||
@@ -224,7 +224,7 @@ static int fespi_tx(volatile uint32_t *ctrl_base, uint8_t in)
|
||||
/* Can set bits 15:12 in result. */
|
||||
static int fespi_rx(volatile uint32_t *ctrl_base, uint8_t *out)
|
||||
{
|
||||
unsigned timeout = TIMEOUT;
|
||||
unsigned int timeout = TIMEOUT;
|
||||
|
||||
while (timeout--) {
|
||||
uint32_t value = fespi_read_reg(ctrl_base, FESPI_REG_RXFIFO);
|
||||
@@ -252,7 +252,7 @@ static int fespi_wip(volatile uint32_t *ctrl_base)
|
||||
if (result != ERROR_OK)
|
||||
return result | ERROR_STACK(0x20000);
|
||||
|
||||
unsigned timeout = TIMEOUT;
|
||||
unsigned int timeout = TIMEOUT;
|
||||
while (timeout--) {
|
||||
result = fespi_tx(ctrl_base, 0);
|
||||
if (result != ERROR_OK)
|
||||
@@ -273,7 +273,7 @@ static int fespi_wip(volatile uint32_t *ctrl_base)
|
||||
|
||||
/* Can set bits 23:20 in result. */
|
||||
static int fespi_write_buffer(volatile uint32_t *ctrl_base,
|
||||
const uint8_t *buffer, unsigned offset, unsigned len,
|
||||
const uint8_t *buffer, unsigned int offset, unsigned int len,
|
||||
uint32_t flash_info)
|
||||
{
|
||||
int result = fespi_tx(ctrl_base, SPIFLASH_WRITE_ENABLE);
|
||||
@@ -304,7 +304,7 @@ static int fespi_write_buffer(volatile uint32_t *ctrl_base,
|
||||
if (result != ERROR_OK)
|
||||
return result | ERROR_STACK(0x600000);
|
||||
|
||||
for (unsigned i = 0; i < len; i++) {
|
||||
for (unsigned int i = 0; i < len; i++) {
|
||||
result = fespi_tx(ctrl_base, buffer[i]);
|
||||
if (result != ERROR_OK)
|
||||
return result | ERROR_STACK(0x700000);
|
||||
|
||||
51
contrib/loaders/flash/hpmicro/Makefile
Normal file
51
contrib/loaders/flash/hpmicro/Makefile
Normal file
@@ -0,0 +1,51 @@
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
# Copyright (c) 2023 HPMicro
|
||||
#
|
||||
BIN2C = ../../../../src/helper/bin2char.sh
|
||||
|
||||
|
||||
PROJECT=hpm_xpi_flash
|
||||
CROSS_COMPILE ?= riscv32-unknown-elf-
|
||||
CC=$(CROSS_COMPILE)gcc
|
||||
AS=$(CROSS_COMPILE)gcc
|
||||
OBJCOPY=$(CROSS_COMPILE)objcopy
|
||||
OBJDUMP=$(CROSS_COMPILE)objdump
|
||||
LD=$(CROSS_COMPILE)ld
|
||||
LDSCRIPT=linker.ld
|
||||
|
||||
OPT=-O3
|
||||
|
||||
ASFLAGS=
|
||||
CFLAGS=$(OPT) -fomit-frame-pointer -Wall
|
||||
LDFLAGS=-nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(PROJECT).map -static -Wl,--gc-sections
|
||||
OBJS=$(ASRC:.S=.o) $(SRC:.c=.o)
|
||||
|
||||
SRC=openocd_flash_algo.c
|
||||
ASRC=func_table.S
|
||||
|
||||
all: $(OBJS) $(PROJECT).elf $(PROJECT).bin $(PROJECT).lst $(PROJECT).inc
|
||||
|
||||
%o: %c
|
||||
@$(CC) -c $(CFLAGS) -I . $< -o $@
|
||||
|
||||
%o: %S
|
||||
@$(AS) -c $(ASFLAGS) -I . $< -o $@
|
||||
|
||||
%elf: $(OBJS)
|
||||
@$(CC) $(OBJS) $(LDFLAGS) -o $@
|
||||
|
||||
%lst: %elf
|
||||
@$(OBJDUMP) -h -S $< > $@
|
||||
|
||||
%bin: %elf
|
||||
@$(OBJCOPY) -Obinary $< $@
|
||||
|
||||
%inc: %bin
|
||||
$(BIN2C) < $< > $@
|
||||
|
||||
clean:
|
||||
@-rm -f *.o *.elf *.lst *.bin *.inc
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
.INTERMEDIATE: $(patsubst %.S,%.o,$(SRCS)) $(patsubst %.S,%.elf,$(SRCS)) $(patsubst %.S,%.bin,$(SRCS))
|
||||
7
contrib/loaders/flash/hpmicro/README
Normal file
7
contrib/loaders/flash/hpmicro/README
Normal file
@@ -0,0 +1,7 @@
|
||||
The loader relies on the romapi provided by HPMicro devices.
|
||||
|
||||
- hpm_common.h and all the hpm_romapi_*.c/h are reused from hpm_sdk
|
||||
(v1.9.0 https://github.com/hpmicro/hpm_sdk/releases).
|
||||
|
||||
Due to different coding rules, these source code needs to be updated
|
||||
accordingly to pass the coding rule check for openocd.
|
||||
21
contrib/loaders/flash/hpmicro/func_table.S
Normal file
21
contrib/loaders/flash/hpmicro/func_table.S
Normal file
@@ -0,0 +1,21 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause */
|
||||
/*
|
||||
* Copyright (c) 2021 HPMicro
|
||||
*/
|
||||
.section .func_table, "ax"
|
||||
.global _init
|
||||
_init:
|
||||
jal flash_init
|
||||
ebreak
|
||||
jal flash_erase
|
||||
ebreak
|
||||
jal flash_program
|
||||
ebreak
|
||||
jal flash_read
|
||||
ebreak
|
||||
jal flash_get_info
|
||||
ebreak
|
||||
jal flash_erase_chip
|
||||
ebreak
|
||||
jal flash_deinit
|
||||
ebreak
|
||||
203
contrib/loaders/flash/hpmicro/hpm_common.h
Normal file
203
contrib/loaders/flash/hpmicro/hpm_common.h
Normal file
@@ -0,0 +1,203 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2021-2023 HPMicro
|
||||
*/
|
||||
|
||||
#ifndef _HPM_COMMON_H
|
||||
#define _HPM_COMMON_H
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief COMMON driver APIs
|
||||
* @defgroup common_interface COMMON driver APIs
|
||||
* @{
|
||||
*
|
||||
*/
|
||||
|
||||
#define __R volatile const /* Define "read-only" permission */
|
||||
#define __RW volatile /* Define "read-write" permission */
|
||||
#define __W volatile /* Define "write-only" permission */
|
||||
|
||||
#ifndef __I
|
||||
#define __I __R
|
||||
#endif
|
||||
|
||||
#ifndef __IO
|
||||
#define __IO __RW
|
||||
#endif
|
||||
|
||||
#ifndef __O
|
||||
#define __O __W
|
||||
#endif
|
||||
|
||||
#ifndef ARRAY_SIZE
|
||||
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
|
||||
#endif
|
||||
|
||||
#define HPM_BITSMASK(val, offset) ((uint32_t)(val) << (offset))
|
||||
#define IS_HPM_BITMASK_SET(val, mask) (((uint32_t)(val) & (uint32_t)(mask)) != 0U)
|
||||
#define IS_HPM_BIT_SET(val, offset) (((uint32_t)(val) & (1UL << (offset))) != 0U)
|
||||
#define IS_HPM_BITMASK_CLR(val, mask) (((uint32_t)(val) & (uint32_t)(mask)) == 0U)
|
||||
#define IS_HPM_BIT_CLR(val, offset) (((uint32_t)(val) & (1UL << (offset))) == 0U)
|
||||
|
||||
#define HPM_BREAK_IF(cond) do {if (cond) break; } while (0)
|
||||
#define HPM_CONTINUE_IF(cond) do {if (cond) continue; } while (0)
|
||||
|
||||
#define HPM_CHECK_RET(x) \
|
||||
do { \
|
||||
stat = (x); \
|
||||
if (status_success != stat) { \
|
||||
return stat; \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
#define SIZE_1KB (1024UL)
|
||||
#define SIZE_1MB (1048576UL)
|
||||
|
||||
typedef uint32_t hpm_stat_t;
|
||||
|
||||
/* @brief Enum definition for the Status group
|
||||
* Rule:
|
||||
* [Group] 0-999 for the SoC driver and the corresponding components
|
||||
* 1000 or above for the application status group
|
||||
* [Code] Valid value: 0-999
|
||||
*
|
||||
*/
|
||||
#define MAKE_STATUS(group, code) ((uint32_t)(group) * 1000U + (uint32_t)(code))
|
||||
/* @brief System status group definitions */
|
||||
enum {
|
||||
status_group_common = 0,
|
||||
status_group_uart = 1,
|
||||
status_group_i2c = 2,
|
||||
status_group_spi = 3,
|
||||
status_group_usb = 4,
|
||||
status_group_i2s = 5,
|
||||
status_group_xpi = 6,
|
||||
status_group_l1c,
|
||||
status_group_dma,
|
||||
status_group_femc,
|
||||
status_group_sdp,
|
||||
status_group_xpi_nor,
|
||||
status_group_otp,
|
||||
status_group_lcdc,
|
||||
status_group_mbx,
|
||||
status_group_rng,
|
||||
status_group_pdma,
|
||||
status_group_wdg,
|
||||
status_group_pmic_sec,
|
||||
status_group_can,
|
||||
status_group_sdxc,
|
||||
status_group_pcfg,
|
||||
status_group_clk,
|
||||
status_group_pllctl,
|
||||
status_group_pllctlv2,
|
||||
status_group_ffa,
|
||||
status_group_mcan,
|
||||
|
||||
status_group_middleware_start = 500,
|
||||
status_group_sdmmc = status_group_middleware_start,
|
||||
status_group_audio_codec,
|
||||
status_group_dma_manager,
|
||||
};
|
||||
|
||||
/* @brief Common status code definitions */
|
||||
enum {
|
||||
status_success = MAKE_STATUS(status_group_common, 0),
|
||||
status_fail = MAKE_STATUS(status_group_common, 1),
|
||||
status_invalid_argument = MAKE_STATUS(status_group_common, 2),
|
||||
status_timeout = MAKE_STATUS(status_group_common, 3),
|
||||
};
|
||||
|
||||
#if defined(__GNUC__)
|
||||
|
||||
/* alway_inline */
|
||||
#define ATTR_ALWAYS_INLINE __attribute__((always_inline))
|
||||
|
||||
/* weak */
|
||||
#define ATTR_WEAK __attribute__((weak))
|
||||
|
||||
/* alignment */
|
||||
#define ATTR_ALIGN(alignment) __attribute__((aligned(alignment)))
|
||||
|
||||
/* place var_declare at section_name, e.x. PLACE_AT(".target_section", var); */
|
||||
#define ATTR_PLACE_AT(section_name) __attribute__((section(section_name)))
|
||||
|
||||
#define ATTR_PLACE_AT_WITH_ALIGNMENT(section_name, alignment) \
|
||||
ATTR_PLACE_AT(section_name) ATTR_ALIGN(alignment)
|
||||
|
||||
#define ATTR_PLACE_AT_NONCACHEABLE ATTR_PLACE_AT(".noncacheable.bss")
|
||||
#define ATTR_PLACE_AT_NONCACHEABLE_WITH_ALIGNMENT(alignment) \
|
||||
ATTR_PLACE_AT_NONCACHEABLE ATTR_ALIGN(alignment)
|
||||
|
||||
#define ATTR_PLACE_AT_NONCACHEABLE_BSS ATTR_PLACE_AT(".noncacheable.bss")
|
||||
#define ATTR_PLACE_AT_NONCACHEABLE_BSS_WITH_ALIGNMENT(alignment) \
|
||||
ATTR_PLACE_AT_NONCACHEABLE_BSS ATTR_ALIGN(alignment)
|
||||
|
||||
/* initialize variable x with y using PLACE_AT_NONCACHEABLE_INIT(x) = {y}; */
|
||||
#define ATTR_PLACE_AT_NONCACHEABLE_INIT ATTR_PLACE_AT(".noncacheable.init")
|
||||
#define ATTR_PLACE_AT_NONCACHEABLE_INIT_WITH_ALIGNMENT(alignment) \
|
||||
ATTR_PLACE_AT_NONCACHEABLE_INIT ATTR_ALIGN(alignment)
|
||||
|
||||
#define ATTR_RAMFUNC ATTR_PLACE_AT(".fast")
|
||||
#define ATTR_RAMFUNC_WITH_ALIGNMENT(alignment) \
|
||||
ATTR_RAMFUNC ATTR_ALIGN(alignment)
|
||||
|
||||
#define ATTR_SHARE_MEM ATTR_PLACE_AT(".sh_mem")
|
||||
|
||||
#define NOP() __asm volatile("nop")
|
||||
#define WFI() __asm volatile("wfi")
|
||||
|
||||
#define HPM_ATTR_MACHINE_INTERRUPT __attribute__ ((section(".isr_vector"), interrupt("machine"), aligned(4)))
|
||||
|
||||
#elif defined(__ICCRISCV__)
|
||||
|
||||
/* alway_inline */
|
||||
#define ATTR_ALWAYS_INLINE __attribute__((always_inline))
|
||||
|
||||
/* weak */
|
||||
#define ATTR_WEAK __weak
|
||||
|
||||
/* alignment */
|
||||
#define ATTR_ALIGN(alignment) __attribute__((aligned(alignment)))
|
||||
|
||||
/* place var_declare at section_name, e.x. PLACE_AT(".target_section", var); */
|
||||
#define ATTR_PLACE_AT(section_name) __attribute__((section(section_name)))
|
||||
|
||||
#define ATTR_PLACE_AT_WITH_ALIGNMENT(section_name, alignment) \
|
||||
ATTR_PLACE_AT(section_name) ATTR_ALIGN(alignment)
|
||||
|
||||
#define ATTR_PLACE_AT_NONCACHEABLE ATTR_PLACE_AT(".noncacheable.bss")
|
||||
#define ATTR_PLACE_AT_NONCACHEABLE_WITH_ALIGNMENT(alignment) \
|
||||
ATTR_PLACE_AT_NONCACHEABLE ATTR_ALIGN(alignment)
|
||||
|
||||
#define ATTR_PLACE_AT_NONCACHEABLE_BSS ATTR_PLACE_AT(".noncacheable.bss")
|
||||
#define ATTR_PLACE_AT_NONCACHEABLE_BSS_WITH_ALIGNMENT(alignment) \
|
||||
ATTR_PLACE_AT_NONCACHEABLE_BSS ATTR_ALIGN(alignment)
|
||||
|
||||
/* initialize variable x with y using PLACE_AT_NONCACHEABLE_INIT(x) = {y}; */
|
||||
#define ATTR_PLACE_AT_NONCACHEABLE_INIT ATTR_PLACE_AT(".noncacheable.init")
|
||||
#define ATTR_PLACE_AT_NONCACHEABLE_INIT_WITH_ALIGNMENT(alignment) \
|
||||
ATTR_PLACE_AT_NONCACHEABLE_INIT ATTR_ALIGN(alignment)
|
||||
|
||||
#define ATTR_RAMFUNC ATTR_PLACE_AT(".fast")
|
||||
#define ATTR_RAMFUNC_WITH_ALIGNMENT(alignment) \
|
||||
ATTR_RAMFUNC ATTR_ALIGN(alignment)
|
||||
|
||||
#define ATTR_SHARE_MEM ATTR_PLACE_AT(".sh_mem")
|
||||
|
||||
#define NOP() __asm volatile("nop")
|
||||
#define WFI() __asm volatile("wfi")
|
||||
|
||||
#define HPM_ATTR_MACHINE_INTERRUPT __machine __interrupt
|
||||
|
||||
#else
|
||||
#error Unknown toolchain
|
||||
#endif
|
||||
#endif /* _HPM_COMMON_H */
|
||||
52
contrib/loaders/flash/hpmicro/hpm_romapi.h
Normal file
52
contrib/loaders/flash/hpmicro/hpm_romapi.h
Normal file
@@ -0,0 +1,52 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2021-2023 HPMicro
|
||||
*/
|
||||
|
||||
#ifndef HPM_ROMAPI_H
|
||||
#define HPM_ROMAPI_H
|
||||
|
||||
/**
|
||||
* @brief ROM APIs
|
||||
* @defgroup romapi_interface ROM APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "hpm_common.h"
|
||||
#include "hpm_romapi_xpi_def.h"
|
||||
#include "hpm_romapi_xpi_soc_def.h"
|
||||
#include "hpm_romapi_xpi_nor_def.h"
|
||||
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
*
|
||||
* Definitions
|
||||
*
|
||||
*
|
||||
**********************************************************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief Bootloader API table
|
||||
*/
|
||||
struct bootloader_api_table_t {
|
||||
/**< Bootloader API table: version */
|
||||
const uint32_t version;
|
||||
/**< Bootloader API table: copyright string address */
|
||||
const char *copyright;
|
||||
/**< Bootloader API table: run_bootloader API */
|
||||
const uint32_t reserved0;
|
||||
/**< Bootloader API table: otp driver interface address */
|
||||
const uint32_t reserved1;
|
||||
/**< Bootloader API table: xpi driver interface address */
|
||||
const struct xpi_driver_interface_t *xpi_driver_if;
|
||||
/**< Bootloader API table: xpi nor driver interface address */
|
||||
const struct xpi_nor_driver_interface_t *xpi_nor_driver_if;
|
||||
/**< Bootloader API table: xpi ram driver interface address */
|
||||
const uint32_t reserved2;
|
||||
};
|
||||
|
||||
/**< Bootloader API table Root */
|
||||
#define ROM_API_TABLE_ROOT ((const struct bootloader_api_table_t *)0x2001FF00U)
|
||||
|
||||
#endif /* HPM_ROMAPI_H */
|
||||
254
contrib/loaders/flash/hpmicro/hpm_romapi_xpi_def.h
Normal file
254
contrib/loaders/flash/hpmicro/hpm_romapi_xpi_def.h
Normal file
@@ -0,0 +1,254 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2021 HPMicro
|
||||
*/
|
||||
#ifndef HPM_ROMAPI_XPI_DEF_H
|
||||
#define HPM_ROMAPI_XPI_DEF_H
|
||||
|
||||
/**
|
||||
* @brief XPI ROM APIs
|
||||
* @defgroup xpi_interface XPI driver APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "hpm_common.h"
|
||||
|
||||
/**
|
||||
* @brief XPI Read Sample Clock source options
|
||||
*/
|
||||
enum xpi_rxclksrc_type_t {
|
||||
xpi_rxclksrc_internal_loopback = 0, /**< Internal loopback */
|
||||
xpi_rxclksrc_dqs_loopback = 1, /**< Loopback from DQS pad */
|
||||
xpi_rxclksrc_external_dqs = 3, /**< Read is driven by External DQS pad */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI pad definitions
|
||||
*/
|
||||
#define XPI_1PAD (0U) /**< Single pad */
|
||||
#define XPI_2PADS (1U) /**< Dual pads */
|
||||
#define XPI_4PADS (2U) /**< Quad pads */
|
||||
#define XPI_8PADS (3U) /**< Octal pads */
|
||||
|
||||
/**
|
||||
* @brief XPI IO pin group options
|
||||
*/
|
||||
enum xpi_io_group_t {
|
||||
xpi_io_1st_group, /**< First/Primary group */
|
||||
xpi_io_2nd_group, /**< Second/Secondary group */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI Transfer Channel type definitions
|
||||
*/
|
||||
enum xpi_xfer_channel_t {
|
||||
xpi_xfer_channel_a1, /**< The address is based on the device connected to Channel A1 */
|
||||
xpi_xfer_channel_a2, /**< The address is based on the device connected to Channel A2 */
|
||||
xpi_xfer_channel_b1, /**< The address is based on the device connected to Channel B1 */
|
||||
xpi_xfer_channel_b2, /**< The address is based on the device connected to Channel B2 */
|
||||
xpi_xfer_channel_auto, /**< The channel is auto determined */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI Channel definitions
|
||||
*/
|
||||
enum xpi_channel_t {
|
||||
xpi_channel_a1, /**< Port: Channel A1 */
|
||||
xpi_channel_a2, /**< Port: Channel A2 */
|
||||
xpi_channel_b1, /**< Port: Channel B1 */
|
||||
xpi_channel_b2, /**< Port: Channel B2 */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI APB Transfer type
|
||||
*/
|
||||
enum xpi_apb_xfer_type_t {
|
||||
xpi_apb_xfer_type_cmd, /**< APB Command Type: Command only */
|
||||
xpi_apb_xfer_type_config, /**< APB Command Type: Configuration */
|
||||
xpi_apb_xfer_type_read, /**< APB Command Type: Read */
|
||||
xpi_apb_xfer_type_write, /**< APB Command Type: Write */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI Xfer Mode
|
||||
*/
|
||||
enum xpi_xfer_mode_t {
|
||||
xpi_xfer_mode_polling, /**< Transfer mode: Polling */
|
||||
xpi_xfer_mode_dma, /**< Transfer mode: DMA */
|
||||
xpi_xfer_mode_interrupt, /**< Transfer mode: Interrupt */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI Xfer context
|
||||
*/
|
||||
struct xpi_xfer_ctx_t {
|
||||
uint32_t addr; /**< device address for XPI transfer */
|
||||
uint8_t channel; /**< channel for XPI transfer */
|
||||
uint8_t cmd_type; /**< command type for XPI transfer */
|
||||
uint8_t seq_idx; /**< Sequence index for XPI transfer */
|
||||
uint8_t seq_num; /**< Sequence number for XPI transfer */
|
||||
uint32_t *buf; /**< Buffer for XPI transfer */
|
||||
uint32_t xfer_size; /**< Transfer size in bytes */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI instruction sequence
|
||||
*/
|
||||
struct xpi_instr_seq_t {
|
||||
uint32_t entry[4];
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI Phase definitions
|
||||
*/
|
||||
#define XPI_PHASE_STOP (0x00U) /**< Phase: Stop */
|
||||
#define XPI_PHASE_CMD_SDR (0x01U) /**< Phase: Send CMD in SDR mode */
|
||||
#define XPI_PHASE_RADDR_SDR (0x02U) /**< Phase: Send Row Address in SDR Mode */
|
||||
#define XPI_PHASE_CADDR_SDR (0x03U) /**< Phase: Send Column Address in SDR Mode */
|
||||
#define XPI_PHASE_MODE4_SDR (0x06U) /**< Phase: Send Mode 4 in SDR Mode */
|
||||
#define XPI_PHASE_MODE8_SDR (0x07U) /**< Phase: Send Mode 8 in SDR Mode */
|
||||
#define XPI_PHASE_WRITE_SDR (0x08U) /**< Phase: Write data in SDR Mode */
|
||||
#define XPI_PHASE_READ_SDR (0x09U) /**< Phase: Read data in SDR Mode */
|
||||
#define XPI_PHASE_DUMMY_SDR (0X0CU) /**< Phase: Send Dummy in SDR Mode */
|
||||
#define XPI_PHASE_DUMMY_RWDS_SDR (0x0DU) /**< Phase: Send Dummy RWDS in SDR Mode */
|
||||
|
||||
#define XPI_PHASE_CMD_DDR (0x21U) /**< Phase: Send CMD in DDR Mode */
|
||||
#define XPI_PHASE_RADDR_DDR (0x22U) /**< Phase: Send Raw Address in DDR Mode */
|
||||
#define XPI_PHASE_CADDR_DDR (0x23U) /**< Phase: Send Column address in DDR Mode */
|
||||
#define XPI_PHASE_MODE4_DDR (0x26U) /**< Phase: Send Mode 4 in DDR Mode */
|
||||
#define XPI_PHASE_MODE8_DDR (0x27U) /**< Phase: Send Mode 8 in DDR Mode */
|
||||
#define XPI_PHASE_WRITE_DDR (0x28U) /**< Phase: Write data in DDR Mode */
|
||||
#define XPI_PHASE_READ_DDR (0x29U) /**< Phase: Read data in SDR Mode */
|
||||
#define XPI_PHASE_DUMMY_DDR (0x2CU) /**< Phase: Send DUMMY in DDR Mode */
|
||||
#define XPI_PHASE_DUMMY_RWDS_DDR (0x2DU) /**< Phase: Send DUMMY RWDS in DDR Mode */
|
||||
|
||||
/**
|
||||
* @brief XPI API command error codes
|
||||
*/
|
||||
enum {
|
||||
status_xpi_apb_jump_on_cs = MAKE_STATUS(status_group_xpi, 1),
|
||||
status_xpi_apb_unknown_inst = MAKE_STATUS(status_group_xpi, 2),
|
||||
status_xpi_apb_dummy_sdr_in_ddr_seq = MAKE_STATUS(status_group_xpi, 3),
|
||||
status_xpi_apb_dummy_ddr_in_sdr_seq = MAKE_STATUS(status_group_xpi, 4),
|
||||
status_xpi_apb_exceed_addr_range = MAKE_STATUS(status_group_xpi, 5),
|
||||
status_xpi_apb_seq_timeout = MAKE_STATUS(status_group_xpi, 6),
|
||||
status_xpi_apb_cross_boundary = MAKE_STATUS(status_group_xpi, 7),
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Delay line definitions
|
||||
*/
|
||||
enum {
|
||||
xpi_dll_half_cycle = 0xFU,
|
||||
xpi_dll_quarter_cycle = 0x7U,
|
||||
xpi_dll_sdr_default_cycle = xpi_dll_half_cycle,
|
||||
xpi_dll_ddr_default_cycle = xpi_dll_quarter_cycle,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI configuration structure
|
||||
*/
|
||||
struct xpi_config_t {
|
||||
uint8_t rxclk_src; /**< Read sample clock source */
|
||||
uint8_t reserved0[7]; /**< Reserved */
|
||||
uint8_t tx_watermark_in_dwords; /**< Tx watermark in double words */
|
||||
uint8_t rx_watermark_in_dwords; /**< Rx watermark in double words */
|
||||
uint8_t enable_differential_clk; /**< Enable differential clock */
|
||||
uint8_t reserved1[5]; /**< Reserved */
|
||||
uint32_t access_flags; /**< Access flags */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI Device Configuration structure
|
||||
*/
|
||||
struct xpi_device_config_t {
|
||||
uint32_t size_in_kbytes; /**< Device size in kbytes */
|
||||
uint32_t serial_root_clk_freq; /**< XPI serial root clock frequency */
|
||||
|
||||
uint8_t enable_write_mask; /**< Enable write mask, typically for PSRAM/HyperRAM */
|
||||
uint8_t data_valid_time; /**< Data valid time, Unit 0.1ns */
|
||||
uint8_t reserved0[2];
|
||||
|
||||
uint8_t cs_hold_time; /**< CS hold time, cycles in terms of FLASH clock */
|
||||
uint8_t cs_setup_time; /**< CS setup time, cycles in terms of FLASH clock */
|
||||
uint16_t cs_interval; /**< CS interval, cycles in terms of FLASH clock */
|
||||
|
||||
uint8_t reserved1;
|
||||
uint8_t column_addr_size; /**< Column address bits */
|
||||
uint8_t enable_word_address; /**< Enable word address, for HyperFLASH/HyperRAM */
|
||||
uint8_t dly_target; /**< Delay target */
|
||||
|
||||
uint8_t ahb_write_seq_idx; /**< AHB write sequence index */
|
||||
uint8_t ahb_write_seq_num; /**< AHB write sequence number */
|
||||
uint8_t ahb_read_seq_idx; /**< AHB read sequence index */
|
||||
uint8_t ahb_read_seq_num; /**< AHB read sequence number */
|
||||
|
||||
uint8_t ahb_write_wait_interval; /**< AHB write wait interval, in terms of FLASH clock */
|
||||
uint8_t reserved2[3];
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief SUB Instruction
|
||||
* @param [in] phase Name
|
||||
* @param [in] pad Pad for Phase
|
||||
* @param [in] op Operand for Phase
|
||||
*/
|
||||
#define SUB_INSTR(phase, pad, op) ((uint32_t)(((uint16_t)(phase) << 10) | ((uint16_t)(pad) << 8) | ((uint16_t)(op))))
|
||||
/**
|
||||
* @brief Generate a single word INSTRUCTION sequence word
|
||||
* @note Here intentionally use the MACRO because when the arguments are constant value, the compiler
|
||||
* can generate the const entry word during pre-processing
|
||||
*/
|
||||
#define XPI_INSTR_SEQ(phase0, pad0, op0, phase1, pad1, op1) \
|
||||
(SUB_INSTR(phase0, pad0, op0) | (SUB_INSTR(phase1, pad1, op1) << 16))
|
||||
|
||||
struct xpi_ahb_buffer_cfg_t {
|
||||
struct {
|
||||
uint8_t priority; /* Offset: 0x00 */
|
||||
uint8_t master_idx; /* Offset: 0x01 */
|
||||
uint8_t buf_size_in_dword; /* Offset: 0x02 */
|
||||
bool enable_prefetch; /* Offset: 0x03 */
|
||||
} entry[8];
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI driver interface
|
||||
*/
|
||||
struct xpi_driver_interface_t {
|
||||
/**< XPI driver interface: version */
|
||||
uint32_t version;
|
||||
/**< XPI driver interface: get default configuration */
|
||||
hpm_stat_t (*get_default_config)(struct xpi_config_t *xpi_config);
|
||||
/**< XPI driver interface: get default device configuration */
|
||||
hpm_stat_t (*get_default_device_config)(struct xpi_device_config_t *dev_config);
|
||||
/**< XPI driver interface: initialize the XPI using xpi_config */
|
||||
hpm_stat_t (*init)(uint32_t *base, struct xpi_config_t *xpi_config);
|
||||
/**< XPI driver interface: configure the AHB buffer */
|
||||
hpm_stat_t (*config_ahb_buffer)(uint32_t *base, struct xpi_ahb_buffer_cfg_t *ahb_buf_cfg);
|
||||
/**< XPI driver interface: configure the device */
|
||||
hpm_stat_t (*config_device)(uint32_t *base, struct xpi_device_config_t *dev_cfg, enum xpi_channel_t channel);
|
||||
/**< XPI driver interface: update instruction talbe */
|
||||
hpm_stat_t (*update_instr_table)(uint32_t *base, const uint32_t *inst_base, uint32_t seq_idx, uint32_t num);
|
||||
/**< XPI driver interface: transfer command/data using block interface */
|
||||
hpm_stat_t (*transfer_blocking)(uint32_t *base, struct xpi_xfer_ctx_t *xfer);
|
||||
/**< Software reset the XPI controller */
|
||||
void (*software_reset)(uint32_t *base);
|
||||
/**< XPI driver interface: Check whether IP is idle */
|
||||
bool (*is_idle)(uint32_t *base);
|
||||
/**< XPI driver interface: update delay line setting */
|
||||
void (*update_dllcr)(uint32_t *base,
|
||||
uint32_t serial_root_clk_freq,
|
||||
uint32_t data_valid_time,
|
||||
enum xpi_channel_t channel,
|
||||
uint32_t dly_target);
|
||||
/**< XPI driver interface: Get absolute address for APB transfer */
|
||||
hpm_stat_t
|
||||
(*get_abs_apb_xfer_addr)(uint32_t *base, enum xpi_xfer_channel_t channel, uint32_t in_addr, uint32_t *out_addr);
|
||||
};
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* HPM_ROMAPI_XPI_DEF_H */
|
||||
426
contrib/loaders/flash/hpmicro/hpm_romapi_xpi_nor_def.h
Normal file
426
contrib/loaders/flash/hpmicro/hpm_romapi_xpi_nor_def.h
Normal file
@@ -0,0 +1,426 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2021 HPMicro
|
||||
*/
|
||||
#ifndef HPM_ROMAPI_XPI_NOR_DEF_H
|
||||
#define HPM_ROMAPI_XPI_NOR_DEF_H
|
||||
|
||||
/**
|
||||
* @brief XPI NOR ROM APIs
|
||||
* @defgroup xpi_nor_interface XPI NOR driver APIs
|
||||
* @ingroup romapi_interfaces
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "hpm_common.h"
|
||||
#include "hpm_romapi_xpi_def.h"
|
||||
|
||||
#define XPI_NOR_CFG_TAG 0x524f4E58U /**< ASCII: "XNOR" */
|
||||
|
||||
/**
|
||||
* @brief XPI NOR properties
|
||||
*/
|
||||
enum {
|
||||
xpi_nor_property_total_size, /**< Total size in bytes */
|
||||
xpi_nor_property_page_size, /**< Page size in bytes */
|
||||
xpi_nor_property_sector_size, /**<sector size in bytes */
|
||||
xpi_nor_property_block_size, /**< block size in bytes */
|
||||
xpi_nor_property_max = xpi_nor_property_block_size,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI NOR safe frequency option
|
||||
*/
|
||||
enum {
|
||||
xpi_nor_clk_safe_clk_freq = 1,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI NOR miscellaneous options
|
||||
*/
|
||||
enum {
|
||||
xpi_nor_option_misc_spi_only = 1, /**< SPI only */
|
||||
xpi_nor_option_misc_internal_loopback = 2, /**< Internal loopback mode */
|
||||
xpi_nor_option_misc_ext_dqs = 3, /**< External DQS pin */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI NOR connection option
|
||||
*/
|
||||
enum {
|
||||
xpi_nor_connection_sel_chna_cs0, /**< Channel A, CS0 */
|
||||
xpi_nor_connection_sel_chnb_cs0, /**< Channel B, CS0 */
|
||||
xpi_nor_connection_sel_chna_cs0_chnb_cs0, /**< Channel A + Channel B, CS0 */
|
||||
xpi_nor_connection_sel_chna_cs0_cs1, /**< Channel A, CS0 + CS1 */
|
||||
xpi_nor_connection_sel_chnb_cs0_cs1 /**< Channel B, CS0 + CS1 */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief QE bit enable sequence option
|
||||
*/
|
||||
enum xpi_nor_quad_enable_seq_t {
|
||||
xpi_nor_quad_en_auto_or_ignore = 0U, /**< Auto enable or ignore */
|
||||
xpi_nor_quad_en_set_bit6_in_status_reg1 = 1U, /**< QE bit is at bit6 in Status register 1 */
|
||||
xpi_nor_quad_en_set_bit1_in_status_reg2 = 2U, /**< QE bit is at bit1 in Status register 2 register 2 */
|
||||
xpi_nor_quad_en_set_bit7_in_status_reg2 = 3U, /**< QE bit is at bit7 in Status register 2 */
|
||||
xpi_nor_quad_en_set_bi1_in_status_reg2_via_0x31_cmd = 4U, /**< QE bit is in status register 2 via CMD 0x31 */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI working mode
|
||||
*/
|
||||
enum xpi_working_mode_t {
|
||||
xpi_working_mode_extend_spi, /**< XPI works in extended SPI mode, including 1-1-1, 1-2-2, 1-4-4, 1-8-8 */
|
||||
xpi_working_mode_xpi, /**< XPI works in XPI mode, including, 1-1-1, 2-2-2, 4-4-4, 8-8-8 */
|
||||
xpi_working_mode_hyperbus, /**< XPI works in HyperBus mode */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI NOR configuration command type
|
||||
*/
|
||||
enum xpi_nor_cfg_cmd_type_t {
|
||||
xpi_nor_cfg_cmd_type_no_cfg = 0U, /**< No configuration */
|
||||
xpi_nor_cfg_cmd_type_generic = 1U, /**< Generic configuration */
|
||||
xpi_nor_cfg_cmd_type_spi2xpi = 2U, /**< SPI to XPI mode */
|
||||
xpi_nor_cfg_cmd_type_xpi2spi = 3U, /**< XPI to SPI mode */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI NOR probe options
|
||||
*/
|
||||
enum xpi_nor_probe_t {
|
||||
xpi_nor_probe_sfdp_sdr = 0U, /**< Probe FLASH using SFDP and set FLASH to SDR mode */
|
||||
xpi_nor_probe_sfdp_ddr = 1U, /**< Probe FLASH using SDP and set FLASH to DDR mode */
|
||||
xpi_nor_quad_read_0xeb = 2U, /**< Set FLASH to default Quad I/O read in SDR mode */
|
||||
xpi_nor_dual_read_0xbb = 3U, /**< Set FLASH to default Dual I/O read in SDR mode */
|
||||
xpi_nor_hyperbus_1v8 = 4U, /**< Probe FLASH using HyperBus in 1.8V voltage */
|
||||
xpi_nor_hyperbus_3v0 = 5U, /**< Probe FLASH using HyperBus in 3.0V voltage */
|
||||
xpi_nor_octabus_ddr = 6U, /**< Probe FLASH using Macronix OctaBus and configure FLASH to OPI DDR mode */
|
||||
xpi_nor_octabus_sdr = 7U, /**< Probe FLASH using Macronix OctaBus and configure FLASH to OPI SDR mode */
|
||||
xpi_nor_xccela_ddr = 8U, /**< Probe FLASH using Xccela Protocol and configure FLASH to OPI DDR mode */
|
||||
xpi_nor_xccela_sdr = 9U, /**< Probe FLASH using Xccela Protocol and configure FLASH to SDR mode */
|
||||
xpi_nor_ecoxip_ddr = 10U, /**< Probe FLASH using EcoXiP Protocol and configure FLASH to OPI DDR mode */
|
||||
xpi_nor_ecoxip_sdr = 11U, /**< Probe FLASH using EcoXiP Protocol and configure FLASH to SDR mode */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Standard XPI NOR seuqnce index definitions
|
||||
*/
|
||||
enum xpi_std_nor_instr_idx_t {
|
||||
xpi_std_nor_seq_idx_read = 0U, /**< 0 - Read */
|
||||
xpi_std_nor_seq_idx_page_program = 1U, /**< 1 - Page Program */
|
||||
xpi_std_nor_seq_idx_read_status = 2U, /**< 2 - Read Status */
|
||||
xpi_std_nor_seq_idx_read_status_xpi = 3U, /**< 3 - Read Status in xSPI mode */
|
||||
xpi_std_nor_seq_idx_write_enable = 4U, /**< 4 - Write Enable */
|
||||
xpi_std_nor_seq_idx_write_enable_xpi = 5U, /**< 5 - Write Enable in xSPI mode */
|
||||
xpi_std_nor_seq_idx_erase_sector = 6U, /**< 6 - Erase sector */
|
||||
xpi_std_nor_seq_idx_erase_block = 7U, /**< 7 - Erase block */
|
||||
xpi_std_nor_seq_idx_erase_chip = 8U, /**< 8 - Erase full chip */
|
||||
xpi_std_nor_seq_idx_max = 9, /**< 9 */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI NOR option tag
|
||||
*/
|
||||
#define XPI_NOR_CFG_OPTION_TAG (0xfcf90U)
|
||||
|
||||
/**
|
||||
* @brief XPI NOR configuration option
|
||||
* The ROM SW can detect the FLASH configuration based on the following structure specified by the end-user
|
||||
*/
|
||||
struct xpi_nor_config_option_t {
|
||||
union {
|
||||
struct {
|
||||
uint32_t words: 4; /**< Option words, exclude the header itself */
|
||||
uint32_t reserved: 8; /**< Reserved for future use */
|
||||
uint32_t tag: 20; /**< Must be 0xfcf90 */
|
||||
};
|
||||
uint32_t U;
|
||||
} header;
|
||||
union {
|
||||
struct {
|
||||
uint32_t freq_opt: 4; /**< 1 - 30MHz, others, SoC specific setting */
|
||||
uint32_t misc: 4; /**< Not used for now */
|
||||
uint32_t dummy_cycles: 8; /**< 0 - Auto detected/ use predefined value, others: by end-user */
|
||||
uint32_t quad_enable_seq: 4; /**< See the xpi_nor_quad_enable_seq_t definitions for more details */
|
||||
uint32_t cmd_pads_after_init: 4; /**< See the xpi_data_pad_t definitions for more details */
|
||||
uint32_t cmd_pads_after_por: 4; /**< See the xpi_data_pad_t definitions for more details */
|
||||
uint32_t probe_type: 4; /**< See the xpi_nor_probe_t definitions for more details */
|
||||
};
|
||||
uint32_t U;
|
||||
} option0;
|
||||
union {
|
||||
struct {
|
||||
uint32_t drive_strength: 8; /**< IO drive strength, 0 - pre-defined, Others - specified by end-user */
|
||||
uint32_t connection_sel: 4; /**< Device connection selection: 0 - PORTA, 1 - PORTB, 2 - Parallel mode */
|
||||
uint32_t pin_group_sel: 4; /**< Pin group selection, 0 - 1st group, 1 - 2nd group, default, 1st group */
|
||||
uint32_t io_voltage: 4; /**< SoC pad voltage, 0 - 3.0V, 1-1.8V */
|
||||
uint32_t reserved: 12; /**< Reserved for future use */
|
||||
};
|
||||
uint32_t U;
|
||||
} option1;
|
||||
union {
|
||||
struct {
|
||||
uint32_t flash_size_option:8; /**< FLASH size option */
|
||||
uint32_t flash_sector_size_option:4; /**< FLASH sector size option */
|
||||
uint32_t flash_sector_erase_cmd_option:4; /**< Sector Erase command option */
|
||||
uint32_t reserved:20;
|
||||
};
|
||||
uint32_t U;
|
||||
} option2;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Sector size options
|
||||
*/
|
||||
enum {
|
||||
serial_nor_sector_size_4kb, /**< Sector size: 4KB */
|
||||
serial_nor_sector_size_32kb, /**< Sector size: 32KB */
|
||||
serial_nor_sector_size_64kb, /**< Sector size: 64KB */
|
||||
serial_nor_sector_size_256kb, /**< Sector size: 256KB */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Sector erase command options
|
||||
*/
|
||||
enum {
|
||||
serial_nor_erase_type_4kb, /**< Sector erase command: 4KB Erase */
|
||||
serial_nor_erase_type_32kb, /**< Sector erase command: 32KB Erase */
|
||||
serial_nor_erase_type_64kb, /**< Sector erase command: 64KB Erase */
|
||||
serial_nor_erase_type_256kb, /**< Sector erase command: 256KB Erase */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief FLASH size options
|
||||
*/
|
||||
enum {
|
||||
flash_size_4mb, /**< FLASH size: 4MB */
|
||||
flash_size_8mb, /**< FLASH size: 8MB */
|
||||
flash_size_16mb, /**< FLASH size: 16MB */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Device Mode configuration structure
|
||||
*/
|
||||
struct device_mode_cfg_t {
|
||||
uint8_t cfg_cmd_type; /**< Configuration command type */
|
||||
uint8_t param_size; /**< Size for parameter */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Device mode parameter structure
|
||||
*/
|
||||
struct device_mode_param_t {
|
||||
uint32_t instr_seq[4]; /**< Command Instruction sequence*/
|
||||
uint32_t param; /**< Parameter */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI NOR device information structure
|
||||
*/
|
||||
struct xpi_device_info_t {
|
||||
uint32_t size_in_kbytes; /**< Device Size in Kilobytes, offset 0x00 */
|
||||
uint16_t page_size; /**< Page size, offset 0x04 */
|
||||
uint16_t sector_size_kbytes; /**< Sector size in kilobytes, offset 0x06 */
|
||||
uint16_t block_size_kbytes; /**< Block size in kilobytes, offset 0x08 */
|
||||
uint8_t busy_offset; /**< Busy offset, offset 0x0a */
|
||||
uint8_t busy_polarity; /**< Busy polarity, offset 0x0b */
|
||||
uint8_t data_pads; /**< Device Size in Kilobytes, offset 0x0c */
|
||||
uint8_t en_ddr_mode; /**< Enable DDR mode, offset 0x0d */
|
||||
uint8_t clk_freq_for_device_cfg; /**< Clk frequency for device configuration offset 0x0e */
|
||||
uint8_t working_mode_por; /**< Working mode after POR reset offset 0x0f */
|
||||
uint8_t working_mode; /**< The device working mode, offset 0x10 */
|
||||
uint8_t en_diff_clk; /**< Enable Differential clock, offset 0x11 */
|
||||
uint8_t data_valid_time; /**< Data valid time, in 0.1ns, offset 0x12 */
|
||||
uint8_t en_half_clk_for_non_read_cmd; /**< Enable half clock for non-read command, offset 0x13 */
|
||||
uint8_t clk_freq_for_non_read_cmd; /**< Enable safe clock for non-read command, offset 0x14 */
|
||||
uint8_t dll_dly_target; /**< XPI DLL Delay Target, offset 0x15 */
|
||||
uint8_t io_voltage; /**< IO voltage, offset 0x16 */
|
||||
uint8_t reserved0; /**< Reserved for future use, offset 0x17 */
|
||||
uint8_t cs_hold_time; /**< CS hold time, 0 - default, others - user specified, offset 0x18 */
|
||||
uint8_t cs_setup_time; /**< CS setup time, 0 - default, others - user specified, offset 0x19 */
|
||||
uint8_t cs_interval; /**< CS interval, intervals between to CS active, offset 0x1a */
|
||||
uint8_t en_dev_mode_cfg; /**< Enable device mode configuration, offset 0x1b */
|
||||
uint32_t flash_state_ctx; /**< Flash state context, offset 0x1c */
|
||||
struct device_mode_cfg_t mode_cfg_list[2]; /**< Mode configuration sequences, offset 0x20 */
|
||||
uint32_t mode_cfg_param[2]; /**< Mode configuration parameters, offset 0x24 */
|
||||
uint32_t reserved1; /**< Reserved for future use, offset 0x2C */
|
||||
struct {
|
||||
uint32_t entry[4];
|
||||
} cfg_instr_seq[2]; /**< Mode Configuration Instruction sequence, offset 0x30 */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI NOR configuration structure
|
||||
*/
|
||||
struct xpi_nor_config_t {
|
||||
uint32_t tag; /**< Must be "XNOR", offset 0x000 */
|
||||
uint32_t reserved0; /**< Reserved for future use, offset 0x004 */
|
||||
uint8_t rxclk_src; /**< RXCLKSRC value, offset 0x008 */
|
||||
uint8_t clk_freq; /**< Clock frequency, offset 0x009 */
|
||||
uint8_t drive_strength; /**< Drive strength, offset 0x0a */
|
||||
uint8_t column_addr_size; /**< Column address size, offset 0x0b */
|
||||
uint8_t rxclk_src_for_init; /**< RXCLKSRC during FLASH initialization, offset 0x0c */
|
||||
uint8_t config_in_progress; /**< Indicate whether device configuration is in progress, offset: 0x0d */
|
||||
uint8_t reserved[2]; /**< Reserved for future use, offset 0x00f */
|
||||
struct {
|
||||
uint8_t enable; /**< Port enable flag, 0 - not enabled, 1 - enabled */
|
||||
uint8_t group; /**< 0 - 1st IO group, 1 - 2nd IO group */
|
||||
uint8_t reserved[2];
|
||||
} chn_info[4]; /**< Device connection information */
|
||||
struct xpi_device_info_t device_info; /**< Device info, offset 0x20 */
|
||||
struct xpi_instr_seq_t instr_set[xpi_std_nor_seq_idx_max];/**< Standard instruction sequence table, offset 0x70 */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief FLASH runtime context structure
|
||||
*/
|
||||
union flash_run_context_t {
|
||||
struct {
|
||||
uint32_t wait_time: 7; /**< Wait time */
|
||||
uint32_t wait_time_unit: 1; /**< 0 - 10us, 1 - 1ms */
|
||||
uint32_t reset_gpio: 8; /**<Reset GPIO */
|
||||
uint32_t restore_sequence: 4; /**<Restore sequence */
|
||||
uint32_t exit_no_cmd_sequence: 4; /**< Exit no-cmd sequence */
|
||||
uint32_t current_mode: 4; /**< Current FLASH mode */
|
||||
uint32_t por_mode: 4; /**< FLASH mode upon Power-on Reset */
|
||||
};
|
||||
uint32_t U;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI NOR API error codes
|
||||
*/
|
||||
enum {
|
||||
status_xpi_nor_sfdp_not_found = MAKE_STATUS(status_group_xpi_nor, 0), /**< SFDP table was not found */
|
||||
status_xpi_nor_ddr_read_dummy_cycle_probe_failed =
|
||||
MAKE_STATUS(status_group_xpi_nor, 1), /**< Probing Dummy cyles for DDR read failed */
|
||||
status_xpi_nor_flash_not_found = MAKE_STATUS(status_group_xpi_nor, 2), /**< FLASH was not detected */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief XPI NOR driver interface
|
||||
*/
|
||||
struct xpi_nor_driver_interface_t {
|
||||
/**< XPI NOR driver interface: API version */
|
||||
uint32_t version;
|
||||
/**< XPI NOR driver interface: Get FLASH configuration */
|
||||
hpm_stat_t (*get_config)(uint32_t *base,
|
||||
struct xpi_nor_config_t *nor_cfg,
|
||||
struct xpi_nor_config_option_t *cfg_option);
|
||||
/**< XPI NOR driver interface: initialize FLASH */
|
||||
hpm_stat_t (*init)(uint32_t *base, struct xpi_nor_config_t *nor_config);
|
||||
/**< XPI NOR driver interface: Enable write access to FLASH */
|
||||
hpm_stat_t
|
||||
(*enable_write)(uint32_t *base, enum xpi_xfer_channel_t channel,
|
||||
const struct xpi_nor_config_t *nor_config, uint32_t addr);
|
||||
/**< XPI NOR driver interface: Get FLASH status register */
|
||||
hpm_stat_t (*get_status)(uint32_t *base,
|
||||
enum xpi_xfer_channel_t channel,
|
||||
const struct xpi_nor_config_t *nor_config,
|
||||
uint32_t addr,
|
||||
uint16_t *out_status);
|
||||
/**< XPI NOR driver interface: Wait when FLASH is still busy */
|
||||
hpm_stat_t
|
||||
(*wait_busy)(uint32_t *base, enum xpi_xfer_channel_t channel,
|
||||
const struct xpi_nor_config_t *nor_config, uint32_t addr);
|
||||
/**< XPI NOR driver interface: erase a specified FLASH region */
|
||||
hpm_stat_t (*erase)(uint32_t *base,
|
||||
enum xpi_xfer_channel_t channel,
|
||||
const struct xpi_nor_config_t *nor_config,
|
||||
uint32_t start,
|
||||
uint32_t length);
|
||||
/**< XPI NOR driver interface: Erase the whole FLASH */
|
||||
hpm_stat_t (*erase_chip)(uint32_t *base, enum xpi_xfer_channel_t channel,
|
||||
const struct xpi_nor_config_t *nor_config);
|
||||
/**< XPI NOR driver interface: Erase specified FLASH sector */
|
||||
hpm_stat_t
|
||||
(*erase_sector)(uint32_t *base, enum xpi_xfer_channel_t channel,
|
||||
const struct xpi_nor_config_t *nor_config, uint32_t addr);
|
||||
/**< XPI NOR driver interface: Erase specified FLASH block */
|
||||
hpm_stat_t
|
||||
(*erase_block)(uint32_t *base, enum xpi_xfer_channel_t channel,
|
||||
const struct xpi_nor_config_t *nor_config, uint32_t addr);
|
||||
/**< XPI NOR driver interface: Program data to specified FLASH address */
|
||||
hpm_stat_t (*program)(uint32_t *base,
|
||||
enum xpi_xfer_channel_t channel,
|
||||
const struct xpi_nor_config_t *nor_config,
|
||||
const uint32_t *src,
|
||||
uint32_t dst_addr,
|
||||
uint32_t length);
|
||||
/**< XPI NOR driver interface: read data from specified FLASH address */
|
||||
hpm_stat_t (*read)(uint32_t *base,
|
||||
enum xpi_xfer_channel_t channel,
|
||||
const struct xpi_nor_config_t *nor_config,
|
||||
uint32_t *dst,
|
||||
uint32_t start,
|
||||
uint32_t length);
|
||||
/**< XPI NOR driver interface: program FLASH page using nonblocking interface */
|
||||
hpm_stat_t (*page_program_nonblocking)(uint32_t *base,
|
||||
enum xpi_xfer_channel_t channel,
|
||||
const struct xpi_nor_config_t *nor_config,
|
||||
const uint32_t *src,
|
||||
uint32_t dst_addr,
|
||||
uint32_t length);
|
||||
/**< XPI NOR driver interface: erase FLASH sector using nonblocking interface */
|
||||
hpm_stat_t (*erase_sector_nonblocking)(uint32_t *base,
|
||||
enum xpi_xfer_channel_t channel,
|
||||
const struct xpi_nor_config_t *nor_config,
|
||||
uint32_t addr);
|
||||
/**< XPI NOR driver interface: erase FLASH block using nonblocking interface */
|
||||
hpm_stat_t (*erase_block_nonblocking)(uint32_t *base,
|
||||
enum xpi_xfer_channel_t channel,
|
||||
const struct xpi_nor_config_t *nor_config,
|
||||
uint32_t addr);
|
||||
/**< XPI NOR driver interface: erase the whole FLASh using nonblocking interface */
|
||||
hpm_stat_t (*erase_chip_nonblocking)(uint32_t *base,
|
||||
enum xpi_xfer_channel_t channel,
|
||||
const struct xpi_nor_config_t *nor_config);
|
||||
|
||||
uint32_t reserved0[3];
|
||||
|
||||
/**< XPI NOR driver interface: automatically configuration flash based on the cfg_option setting */
|
||||
hpm_stat_t (*auto_config)(uint32_t *base, struct xpi_nor_config_t *nor_cfg,
|
||||
struct xpi_nor_config_option_t *cfg_option);
|
||||
|
||||
/**< XPI NOR driver interface: Get FLASH properties */
|
||||
hpm_stat_t (*get_property)(uint32_t *base, struct xpi_nor_config_t *nor_cfg, uint32_t property_id, uint32_t *value);
|
||||
|
||||
uint32_t reserved1;
|
||||
|
||||
/**< Post Erase Sector Nonblocking operation: For Hybrid mode only */
|
||||
hpm_stat_t (*post_erase_sector_nonblocking)(uint32_t *base, enum xpi_xfer_channel_t chn,
|
||||
struct xpi_nor_config_t *nor_cfg, uint32_t addr);
|
||||
|
||||
/**< Post Erase Block Nonblocking operation: For Hybrid mode only */
|
||||
hpm_stat_t (*post_erase_block_nonblocking)(uint32_t *base, enum xpi_xfer_channel_t chn,
|
||||
struct xpi_nor_config_t *nor_cfg, uint32_t addr);
|
||||
|
||||
/**< Post Erase Chip Nonblocking operation: For Hybrid mode only */
|
||||
hpm_stat_t (*post_erase_chip_nonblocking)(uint32_t *base, enum xpi_xfer_channel_t chn,
|
||||
struct xpi_nor_config_t *nor_cfg);
|
||||
|
||||
/**< Post Page Program Nonblocking operation: For Hybrid mode only */
|
||||
hpm_stat_t (*post_page_program_nonblocking)(uint32_t *base, enum xpi_xfer_channel_t chn,
|
||||
struct xpi_nor_config_t *nor_config,
|
||||
const uint32_t *src, uint32_t dst_addr, uint32_t length);
|
||||
/**< Turn on the power for Internal FLASH */
|
||||
void (*sip_flash_power_on)(uint32_t *base);
|
||||
|
||||
/**< Turn off the power for Internal FLASH */
|
||||
void (*sip_flash_power_off)(uint32_t *base);
|
||||
|
||||
/**< Enable Hybrid mode */
|
||||
void (*enable_hybrid_xpi)(uint32_t *base);
|
||||
|
||||
/**< Disable Hybrid mode */
|
||||
void (*disable_hybrid_xpi)(uint32_t *base);
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* HPM_ROMAPI_XPI_NOR_DEF_H */
|
||||
69
contrib/loaders/flash/hpmicro/hpm_romapi_xpi_soc_def.h
Normal file
69
contrib/loaders/flash/hpmicro/hpm_romapi_xpi_soc_def.h
Normal file
@@ -0,0 +1,69 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2021 HPMicro
|
||||
*/
|
||||
|
||||
#ifndef HPM_ROMAPI_XPI_SOC_DEF_H
|
||||
#define HPM_ROMAPI_XPI_SOC_DEF_H
|
||||
|
||||
#include "hpm_common.h"
|
||||
#include "hpm_romapi_xpi_def.h"
|
||||
|
||||
/***********************************************************************************************************************
|
||||
* Definitions
|
||||
**********************************************************************************************************************/
|
||||
|
||||
#define XPI_CLK_OUT_FREQ_OPTION_30MHZ (1U)
|
||||
#define XPI_CLK_OUT_FREQ_OPTION_50MHZ (2U)
|
||||
#define XPI_CLK_OUT_FREQ_OPTION_66MHZ (3U)
|
||||
#define XPI_CLK_OUT_FREQ_OPTION_80MHZ (4U)
|
||||
#define XPI_CLK_OUT_FREQ_OPTION_104MHZ (5U)
|
||||
#define XPI_CLK_OUT_FREQ_OPTION_120MHZ (6U)
|
||||
#define XPI_CLK_OUT_FREQ_OPTION_133MHZ (7U)
|
||||
#define XPI_CLK_OUT_FREQ_OPTION_166MHZ (8U)
|
||||
#define XPI_CLK_OUT_FREQ_OPTION_200MHZ (9U)
|
||||
|
||||
struct xpi_io_config_t {
|
||||
uint8_t data_pads;
|
||||
enum xpi_channel_t channel;
|
||||
enum xpi_io_group_t io_group;
|
||||
uint8_t drive_strength;
|
||||
bool enable_dqs;
|
||||
bool enable_diff_clk;
|
||||
};
|
||||
|
||||
enum clk_freq_type_t {
|
||||
xpi_freq_type_typical,
|
||||
xpi_freq_type_mhz,
|
||||
};
|
||||
|
||||
enum xpi_clk_src_t {
|
||||
xpi_clk_src_auto,
|
||||
xpi_clk_src_osc,
|
||||
xpi_clk_src_pll0clk0,
|
||||
xpi_clk_src_pll1clk0,
|
||||
xpi_clk_src_pll1clk1,
|
||||
xpi_clk_src_pll2clk0,
|
||||
xpi_clk_src_pll2clk1,
|
||||
xpi_clk_src_pll3clk0,
|
||||
xpi_clk_src_pll4clk0,
|
||||
};
|
||||
|
||||
union xpi_clk_config_t {
|
||||
struct {
|
||||
uint8_t freq;
|
||||
bool enable_ddr;
|
||||
enum xpi_clk_src_t clk_src;
|
||||
enum clk_freq_type_t freq_type;
|
||||
};
|
||||
uint32_t freq_opt;
|
||||
};
|
||||
|
||||
enum xpi_clock_t {
|
||||
xpi_clock_bus,
|
||||
xpi_clock_serial_root,
|
||||
xpi_clock_serial,
|
||||
};
|
||||
|
||||
#endif /* HPM_ROMAPI_XPI_SOC_DEF_H */
|
||||
17
contrib/loaders/flash/hpmicro/hpm_xpi_flash.h
Normal file
17
contrib/loaders/flash/hpmicro/hpm_xpi_flash.h
Normal file
@@ -0,0 +1,17 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2021 hpmicro
|
||||
*/
|
||||
|
||||
#ifndef HPM_XPI_FLASH_H
|
||||
#define HPM_XPI_FLASH_H
|
||||
|
||||
#define FLASH_INIT (0)
|
||||
#define FLASH_ERASE (0x6)
|
||||
#define FLASH_PROGRAM (0xc)
|
||||
#define FLASH_READ (0x12)
|
||||
#define FLASH_GET_INFO (0x18)
|
||||
#define FLASH_ERASE_CHIP (0x1e)
|
||||
|
||||
#endif
|
||||
72
contrib/loaders/flash/hpmicro/hpm_xpi_flash.inc
Normal file
72
contrib/loaders/flash/hpmicro/hpm_xpi_flash.inc
Normal file
@@ -0,0 +1,72 @@
|
||||
/* Autogenerated with ../../../../src/helper/bin2char.sh */
|
||||
0xef,0x00,0x20,0x05,0x02,0x90,0xef,0x00,0x60,0x12,0x02,0x90,0xef,0x00,0xe0,0x1f,
|
||||
0x02,0x90,0xef,0x00,0x00,0x23,0x02,0x90,0xef,0x00,0x40,0x26,0x02,0x90,0xef,0x00,
|
||||
0xa0,0x27,0x02,0x90,0xef,0x00,0xe0,0x28,0x02,0x90,0x9c,0x41,0x05,0x47,0xbd,0x8b,
|
||||
0x63,0x7b,0xf7,0x00,0x9c,0x45,0x05,0x67,0x13,0x07,0x07,0xf0,0xf9,0x8f,0x13,0x07,
|
||||
0x00,0x10,0x63,0x83,0xe7,0x00,0x82,0x80,0x23,0x20,0x05,0x06,0x23,0x22,0x05,0x06,
|
||||
0x82,0x80,0x39,0x71,0x22,0xdc,0x13,0x04,0x40,0x2b,0x83,0x47,0x44,0x00,0x06,0xde,
|
||||
0x18,0xc0,0xcd,0xe3,0x26,0xda,0x4a,0xd8,0x4e,0xd6,0x52,0xd4,0x56,0xd2,0xba,0x84,
|
||||
0x2e,0x8a,0xb2,0x89,0x36,0x89,0x89,0x47,0x73,0xb0,0xa7,0x7c,0x13,0x07,0x84,0x00,
|
||||
0x13,0x06,0x00,0x10,0x81,0x45,0x3a,0x85,0xb7,0x0a,0x02,0x20,0x02,0xcc,0x02,0xce,
|
||||
0x05,0x2e,0x83,0xa6,0x4a,0xf1,0x93,0x57,0x79,0x00,0x89,0x8b,0xf4,0x46,0xaa,0x85,
|
||||
0x52,0xc6,0x4e,0xc8,0x4a,0xca,0x23,0x24,0xf4,0x10,0x70,0x00,0x26,0x85,0x93,0x8a,
|
||||
0x0a,0xf0,0x82,0x96,0x29,0xed,0x03,0xa7,0x4a,0x01,0xb7,0x07,0x01,0x56,0x93,0x87,
|
||||
0xf7,0x2f,0x14,0x43,0x63,0xf5,0xd7,0x00,0x3c,0x5b,0x08,0x40,0x82,0x97,0xb2,0x47,
|
||||
0x05,0x47,0xbd,0x8b,0x63,0x7b,0xf7,0x00,0xd2,0x47,0x05,0x67,0x13,0x07,0x07,0xf0,
|
||||
0xf9,0x8f,0x13,0x07,0x00,0x10,0x63,0x8d,0xe7,0x02,0x83,0x47,0x44,0x00,0x23,0x0e,
|
||||
0x04,0x02,0x81,0xe7,0x85,0x47,0x23,0x02,0xf4,0x00,0xd2,0x54,0x42,0x59,0xb2,0x59,
|
||||
0x22,0x5a,0x92,0x5a,0xf2,0x50,0x62,0x54,0x01,0x45,0x21,0x61,0x82,0x80,0xf2,0x50,
|
||||
0x62,0x54,0xd2,0x54,0x42,0x59,0xb2,0x59,0x22,0x5a,0x92,0x5a,0x21,0x61,0x82,0x80,
|
||||
0x1c,0x40,0x23,0xa0,0x07,0x06,0x23,0xa2,0x07,0x06,0xc1,0xb7,0xb7,0x07,0x02,0x20,
|
||||
0x83,0xa6,0x47,0xf1,0x01,0x11,0xb7,0x07,0x01,0x56,0x98,0x42,0x22,0xcc,0x4a,0xc8,
|
||||
0x06,0xce,0x26,0xca,0x4e,0xc6,0x56,0xc2,0x93,0x87,0xf7,0x2f,0x2e,0x89,0x32,0x84,
|
||||
0x63,0xf4,0xe7,0x00,0x33,0x89,0xa5,0x00,0x93,0x09,0x40,0x2b,0x83,0xd4,0x09,0x03,
|
||||
0xaa,0x04,0x63,0x69,0x94,0x06,0xb3,0x7a,0x99,0x02,0x52,0xc4,0x33,0x8a,0x54,0x41,
|
||||
0x63,0x80,0x44,0x03,0x9c,0x4e,0x83,0xa5,0x89,0x10,0x03,0xa5,0x09,0x00,0x52,0x87,
|
||||
0xca,0x86,0x13,0x86,0x89,0x00,0x82,0x97,0x05,0xed,0x05,0x8c,0x56,0x94,0x52,0x99,
|
||||
0x63,0xf1,0x84,0x04,0x37,0x0a,0x02,0x20,0x93,0x0a,0xc0,0x2b,0x13,0x0a,0x0a,0xf0,
|
||||
0x21,0xa0,0x26,0x99,0x63,0xf1,0x84,0x06,0x83,0x27,0x4a,0x01,0x83,0xa5,0x89,0x10,
|
||||
0x03,0xa5,0x09,0x00,0xdc,0x53,0xca,0x86,0x56,0x86,0x82,0x97,0x05,0x8c,0x75,0xd1,
|
||||
0x22,0x4a,0xf2,0x40,0x62,0x44,0xd2,0x44,0x42,0x49,0xb2,0x49,0x92,0x4a,0x05,0x61,
|
||||
0x82,0x80,0x22,0x4a,0x01,0x45,0x75,0xd4,0x93,0x0a,0xc0,0x2b,0xb7,0x07,0x02,0x20,
|
||||
0x93,0x87,0x07,0xf0,0xdc,0x4b,0x22,0x87,0x62,0x44,0x83,0xa5,0x89,0x10,0x03,0xa5,
|
||||
0x09,0x00,0xf2,0x40,0xd2,0x44,0xb2,0x49,0x9c,0x4f,0xca,0x86,0x56,0x86,0x42,0x49,
|
||||
0x92,0x4a,0x05,0x61,0x82,0x87,0x22,0x4a,0xd1,0xbf,0xb7,0x07,0x02,0x20,0x83,0xa8,
|
||||
0x47,0xf1,0xb7,0x07,0x01,0x56,0x13,0x88,0xf7,0x2f,0x03,0xa3,0x08,0x00,0x2e,0x87,
|
||||
0xb6,0x87,0x63,0x74,0x68,0x00,0x33,0x87,0xa5,0x00,0x13,0x08,0x40,0x2b,0x83,0xa8,
|
||||
0x88,0x02,0x83,0x25,0x88,0x10,0x03,0x25,0x08,0x00,0xb2,0x86,0x13,0x06,0x88,0x00,
|
||||
0x82,0x88,0xb7,0x07,0x02,0x20,0x03,0xa3,0x47,0xf1,0xb7,0x07,0x01,0x56,0x13,0x88,
|
||||
0xf7,0x2f,0x03,0x2e,0x03,0x00,0xae,0x88,0x32,0x87,0xb6,0x87,0x63,0x74,0xc8,0x01,
|
||||
0x33,0x07,0xa6,0x00,0x13,0x08,0x40,0x2b,0x03,0x23,0xc3,0x02,0x83,0x25,0x88,0x10,
|
||||
0x03,0x25,0x08,0x00,0xc6,0x86,0x13,0x06,0x88,0x00,0x02,0x83,0x81,0xcd,0x93,0x07,
|
||||
0x40,0x2b,0x98,0x57,0x83,0xd7,0xe7,0x02,0x01,0x45,0x2a,0x07,0xaa,0x07,0x98,0xc1,
|
||||
0xdc,0xc1,0x82,0x80,0x09,0x45,0x82,0x80,0xb7,0x07,0x02,0x20,0x93,0x87,0x07,0xf0,
|
||||
0xdc,0x4b,0x13,0x06,0x40,0x2b,0x83,0x25,0x86,0x10,0x08,0x42,0xdc,0x4f,0x21,0x06,
|
||||
0x82,0x87,0x82,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||
0x3d,0x43,0x2a,0x87,0x63,0x73,0xc3,0x02,0x93,0x77,0xf7,0x00,0xbd,0xef,0xad,0xe5,
|
||||
0x93,0x76,0x06,0xff,0x3d,0x8a,0xba,0x96,0x0c,0xc3,0x4c,0xc3,0x0c,0xc7,0x4c,0xc7,
|
||||
0x41,0x07,0xe3,0x6b,0xd7,0xfe,0x11,0xe2,0x82,0x80,0xb3,0x06,0xc3,0x40,0x8a,0x06,
|
||||
0x97,0x02,0x00,0x00,0x96,0x96,0x67,0x80,0xa6,0x00,0x23,0x07,0xb7,0x00,0xa3,0x06,
|
||||
0xb7,0x00,0x23,0x06,0xb7,0x00,0xa3,0x05,0xb7,0x00,0x23,0x05,0xb7,0x00,0xa3,0x04,
|
||||
0xb7,0x00,0x23,0x04,0xb7,0x00,0xa3,0x03,0xb7,0x00,0x23,0x03,0xb7,0x00,0xa3,0x02,
|
||||
0xb7,0x00,0x23,0x02,0xb7,0x00,0xa3,0x01,0xb7,0x00,0x23,0x01,0xb7,0x00,0xa3,0x00,
|
||||
0xb7,0x00,0x23,0x00,0xb7,0x00,0x82,0x80,0x93,0xf5,0xf5,0x0f,0x93,0x96,0x85,0x00,
|
||||
0xd5,0x8d,0x93,0x96,0x05,0x01,0xd5,0x8d,0x61,0xb7,0x93,0x96,0x27,0x00,0x97,0x02,
|
||||
0x00,0x00,0x96,0x96,0x86,0x82,0xe7,0x80,0x86,0xfa,0x96,0x80,0xc1,0x17,0x1d,0x8f,
|
||||
0x3e,0x96,0xe3,0x74,0xc3,0xf8,0xa5,0xb7,
|
||||
48
contrib/loaders/flash/hpmicro/linker.ld
Normal file
48
contrib/loaders/flash/hpmicro/linker.ld
Normal file
@@ -0,0 +1,48 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause */
|
||||
/*
|
||||
* Copyright (c) 2021 HPMicro
|
||||
*/
|
||||
ENTRY(_init)
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.text : {
|
||||
*(.func_table)
|
||||
KEEP(*(.flash_algo.text*))
|
||||
KEEP(*(.rodata))
|
||||
KEEP(*(.rodata*))
|
||||
KEEP(*(.flash_algo.data*))
|
||||
*(.text)
|
||||
*(.text*)
|
||||
__etext = .;
|
||||
}
|
||||
.discard : {
|
||||
__noncacheable_start__ = .;
|
||||
__noncacheable_bss_start__ = .;
|
||||
__bss_start__ = .;
|
||||
__bss_end__ = .;
|
||||
__noncacheable_bss_end__ = .;
|
||||
_end = .;
|
||||
__noncacheable_init_start__ = .;
|
||||
__data_start__ = .;
|
||||
__data_end__ = .;
|
||||
__noncacheable_init_end__ = .;
|
||||
__noncacheable_end__ = .;
|
||||
__heap_start__ = .;
|
||||
__heap_end__ = .;
|
||||
__ramfunc_start__ = .;
|
||||
__ramfunc_end__ = .;
|
||||
__noncacheable_bss_start__ = .;
|
||||
__noncacheable_bss_end__ = .;
|
||||
__noncacheable_init_start__ = .;
|
||||
__noncacheable_init_end__ = .;
|
||||
__tdata_start__ = .;
|
||||
__tdata_end__ = .;
|
||||
__tbss_start__ = .;
|
||||
__tbss_end__ = .;
|
||||
__data_load_addr__ = .;
|
||||
__fast_load_addr__ = .;
|
||||
__tdata_load_addr__ = .;
|
||||
__noncacheable_init_load_addr__ = .;
|
||||
}
|
||||
}
|
||||
154
contrib/loaders/flash/hpmicro/openocd_flash_algo.c
Normal file
154
contrib/loaders/flash/hpmicro/openocd_flash_algo.c
Normal file
@@ -0,0 +1,154 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
/*
|
||||
* Copyright (c) 2024 HPMicro
|
||||
*/
|
||||
|
||||
#include "hpm_romapi.h"
|
||||
|
||||
#define CSR_MCACHE_CTL (0x7CA)
|
||||
#define HPM_MCACHE_CTL_DC_EN_MASK (0x2UL)
|
||||
|
||||
#define XPI_USE_PORT_B_MASK (0x100)
|
||||
#define XPI_USE_PORT_A_MASK (0)
|
||||
#define XPI_USE_PORT_SHIFT (0x8)
|
||||
|
||||
#define ROMAPI_SUPPORTS_HYBRIDXPI() (ROM_API_TABLE_ROOT->xpi_nor_driver_if->version >= 0x56010300)
|
||||
|
||||
struct hpm_flash_info_t {
|
||||
uint32_t total_sz_in_bytes;
|
||||
uint32_t sector_sz_in_bytes;
|
||||
};
|
||||
|
||||
__attribute__ ((section(".flash_algo.data"))) struct xpi_nor_config_t nor_config;
|
||||
__attribute__ ((section(".flash_algo.data"))) bool xpi_inited = false;
|
||||
__attribute__ ((section(".flash_algo.data"))) uint32_t channel = xpi_channel_a1;
|
||||
__attribute__ ((section(".flash_algo.data"))) uint32_t *xpi_base;
|
||||
|
||||
__attribute__ ((section(".flash_algo.text"))) void refresh_device_size(uint32_t *base,
|
||||
struct xpi_nor_config_option_t *option)
|
||||
{
|
||||
volatile uint32_t *dev_size = (volatile uint32_t *)((uint32_t)base + 0x60);
|
||||
bool enable_channelb = false;
|
||||
if (option->header.words > 1)
|
||||
enable_channelb = option->option1.connection_sel == xpi_nor_connection_sel_chnb_cs0;
|
||||
if (enable_channelb) {
|
||||
dev_size[0] = 0;
|
||||
dev_size[1] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__ ((section(".flash_algo.text"))) uint32_t flash_init(uint32_t flash_base, uint32_t header,
|
||||
uint32_t opt0, uint32_t opt1, uint32_t xpi_base_addr)
|
||||
{
|
||||
uint32_t i = 0;
|
||||
struct xpi_nor_config_option_t cfg_option;
|
||||
hpm_stat_t stat = status_success;
|
||||
|
||||
xpi_base = (uint32_t *)xpi_base_addr;
|
||||
if (xpi_inited)
|
||||
return stat;
|
||||
|
||||
__asm volatile("csrc %0, %1" : : "i"(CSR_MCACHE_CTL), "r"(HPM_MCACHE_CTL_DC_EN_MASK));
|
||||
for (i = 0; i < sizeof(cfg_option); i++)
|
||||
*((uint8_t *)&cfg_option + i) = 0;
|
||||
for (i = 0; i < sizeof(nor_config); i++)
|
||||
*((uint8_t *)&nor_config + i) = 0;
|
||||
|
||||
cfg_option.header.U = header;
|
||||
cfg_option.option0.U = opt0;
|
||||
cfg_option.option1.U = opt1;
|
||||
|
||||
if (opt1 & XPI_USE_PORT_B_MASK)
|
||||
channel = xpi_channel_b1;
|
||||
else
|
||||
channel = xpi_channel_a1;
|
||||
|
||||
stat = ROM_API_TABLE_ROOT->xpi_nor_driver_if->auto_config(xpi_base, &nor_config, &cfg_option);
|
||||
if (stat)
|
||||
return stat;
|
||||
|
||||
if (ROMAPI_SUPPORTS_HYBRIDXPI())
|
||||
ROM_API_TABLE_ROOT->xpi_nor_driver_if->enable_hybrid_xpi(xpi_base);
|
||||
|
||||
refresh_device_size(xpi_base, &cfg_option);
|
||||
|
||||
nor_config.device_info.clk_freq_for_non_read_cmd = 0;
|
||||
if (!xpi_inited)
|
||||
xpi_inited = true;
|
||||
return stat;
|
||||
}
|
||||
|
||||
__attribute__ ((section(".flash_algo.text"))) uint32_t flash_erase(uint32_t flash_base, uint32_t address, uint32_t size)
|
||||
{
|
||||
hpm_stat_t stat = status_success;
|
||||
uint32_t left, start, block_size, align;
|
||||
|
||||
left = size;
|
||||
start = address;
|
||||
if (ROMAPI_SUPPORTS_HYBRIDXPI())
|
||||
start += flash_base;
|
||||
block_size = nor_config.device_info.block_size_kbytes * 1024;
|
||||
if (left >= block_size) {
|
||||
align = block_size - (start % block_size);
|
||||
if (align != block_size) {
|
||||
stat = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase(xpi_base, channel, &nor_config, start, align);
|
||||
if (stat != status_success)
|
||||
return stat;
|
||||
left -= align;
|
||||
start += align;
|
||||
}
|
||||
while (left > block_size) {
|
||||
stat = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_block(xpi_base, channel, &nor_config, start);
|
||||
if (stat != status_success)
|
||||
break;
|
||||
left -= block_size;
|
||||
start += block_size;
|
||||
}
|
||||
}
|
||||
if (stat == status_success && left)
|
||||
stat = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase(xpi_base, channel, &nor_config, start, left);
|
||||
return stat;
|
||||
}
|
||||
|
||||
__attribute__ ((section(".flash_algo.text"))) uint32_t flash_program(uint32_t flash_base, uint32_t address,
|
||||
uint32_t *buf, uint32_t size)
|
||||
{
|
||||
hpm_stat_t stat;
|
||||
|
||||
if (ROMAPI_SUPPORTS_HYBRIDXPI())
|
||||
address += flash_base;
|
||||
stat = ROM_API_TABLE_ROOT->xpi_nor_driver_if->program(xpi_base, channel, &nor_config, buf, address, size);
|
||||
return stat;
|
||||
}
|
||||
|
||||
__attribute__ ((section(".flash_algo.text"))) uint32_t flash_read(uint32_t flash_base, uint32_t *buf,
|
||||
uint32_t address, uint32_t size)
|
||||
{
|
||||
hpm_stat_t stat;
|
||||
|
||||
if (ROMAPI_SUPPORTS_HYBRIDXPI())
|
||||
address += flash_base;
|
||||
stat = ROM_API_TABLE_ROOT->xpi_nor_driver_if->read(xpi_base, channel, &nor_config, buf, address, size);
|
||||
return stat;
|
||||
}
|
||||
|
||||
__attribute__ ((section(".flash_algo.text"))) uint32_t flash_get_info(uint32_t flash_base,
|
||||
struct hpm_flash_info_t *flash_info)
|
||||
{
|
||||
if (!flash_info)
|
||||
return status_invalid_argument;
|
||||
|
||||
flash_info->total_sz_in_bytes = nor_config.device_info.size_in_kbytes << 10;
|
||||
flash_info->sector_sz_in_bytes = nor_config.device_info.sector_size_kbytes << 10;
|
||||
return status_success;
|
||||
}
|
||||
|
||||
__attribute__ ((section(".flash_algo.text"))) uint32_t flash_erase_chip(uint32_t flash_base)
|
||||
{
|
||||
return ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_chip(xpi_base, channel, &nor_config);
|
||||
}
|
||||
|
||||
__attribute__ ((section(".flash_algo.text"))) void flash_deinit(void)
|
||||
{
|
||||
}
|
||||
@@ -1,21 +1,30 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
TARGET=max32xxx_write
|
||||
ENTRY=algo_write
|
||||
|
||||
BIN2C = ../../../../src/helper/bin2char.sh
|
||||
|
||||
CROSS_COMPILE ?= arm-none-eabi-
|
||||
AS = $(CROSS_COMPILE)as
|
||||
OBJCOPY = $(CROSS_COMPILE)objcopy
|
||||
PREFIX=arm-none-eabi
|
||||
CFLAGS=-mthumb -mcpu=cortex-m4 -Wa,-mimplicit-it=thumb
|
||||
|
||||
all: max32xxx.inc
|
||||
all: $(TARGET).inc
|
||||
|
||||
%.elf: %.s
|
||||
$(AS) $< -o $@
|
||||
%.o: %.c
|
||||
$(PREFIX)-gcc $(CFLAGS) -Os -Wall -c ${<} -o ${@}
|
||||
|
||||
%.elf: %.o
|
||||
$(PREFIX)-ld -nostdlib --entry $(ENTRY) ${<} -o ${@}
|
||||
$(PREFIX)-size ${@}
|
||||
|
||||
%.bin: %.elf
|
||||
$(OBJCOPY) -Obinary $< $@
|
||||
$(PREFIX)-objcopy -O binary ${<} ${@}
|
||||
|
||||
%.inc: %.bin
|
||||
$(BIN2C) < $< > $@
|
||||
|
||||
%.dasm: %.o
|
||||
$(PREFIX)-objdump -S ${<} > ${TARGET}.dasm
|
||||
|
||||
clean:
|
||||
-rm -f *.elf *.bin *.inc
|
||||
rm -rf $(TARGET).bin $(TARGET).elf $(TARGET).o $(TARGET).dasm $(TARGET).inc
|
||||
|
||||
14
contrib/loaders/flash/max32xxx/algo_options.h
Normal file
14
contrib/loaders/flash/max32xxx/algo_options.h
Normal file
@@ -0,0 +1,14 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2016 by Maxim Integrated *
|
||||
* Copyright (C) 2025 Analog Devices, Inc. *
|
||||
***************************************************************************/
|
||||
|
||||
#define OPTIONS_128 0x01 /* Perform 128 bit flash writes */
|
||||
#define OPTIONS_ENC 0x02 /* Encrypt the flash contents */
|
||||
#define OPTIONS_AUTH 0x04 /* Authenticate the flash contents */
|
||||
#define OPTIONS_COUNT 0x08 /* Add counter values to authentication */
|
||||
#define OPTIONS_INTER 0x10 /* Interleave the authentication and count values*/
|
||||
#define OPTIONS_RELATIVE_XOR 0x20 /* Only XOR the offset of the address when encrypting */
|
||||
#define OPTIONS_KEYSIZE 0x40 /* Use a 256 bit KEY */
|
||||
238
contrib/loaders/flash/max32xxx/flc_regs.h
Normal file
238
contrib/loaders/flash/max32xxx/flc_regs.h
Normal file
@@ -0,0 +1,238 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2016 by Maxim Integrated *
|
||||
* Copyright (C) 2025 Analog Devices, Inc. *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef _FLC_REGS_H_
|
||||
#define _FLC_REGS_H_
|
||||
|
||||
/* **** Includes **** */
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if defined(__ICCARM__)
|
||||
#pragma system_include
|
||||
#endif
|
||||
|
||||
/*/ @cond */
|
||||
/*
|
||||
If types are not defined elsewhere (CMSIS) define them here
|
||||
*/
|
||||
#ifndef __IO
|
||||
#define __IO volatile
|
||||
#endif
|
||||
#ifndef __I
|
||||
#define __I volatile const
|
||||
#endif
|
||||
#ifndef __O
|
||||
#define __O volatile
|
||||
#endif
|
||||
#ifndef __R
|
||||
#define __R volatile const
|
||||
#endif
|
||||
/*/ @endcond */
|
||||
|
||||
/* **** Definitions **** */
|
||||
|
||||
/**
|
||||
* @ingroup flc
|
||||
* @defgroup flc_registers Registers
|
||||
* @brief Registers, Bit Masks and Bit Positions for the FLC Peripheral Module.
|
||||
* @description Flash Memory Control.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup flc_registers
|
||||
* Structure type to access the FLC Registers.
|
||||
*/
|
||||
struct mxc_flc_regs {
|
||||
__IO uint32_t addr; /**< <tt>\b 0x00:<\tt> FLC ADDR Register */
|
||||
__IO uint32_t clkdiv; /**< <tt>\b 0x04:<\tt> FLC CLKDIV Register */
|
||||
__IO uint32_t cn; /**< <tt>\b 0x08:<\tt> FLC CN Register */
|
||||
__R uint32_t rsv_0xc_0x23[6];
|
||||
__IO uint32_t intr; /**< <tt>\b 0x024:<\tt> FLC INTR Register */
|
||||
__R uint32_t rsv_0x28_0x2f[2];
|
||||
__IO uint32_t data[4]; /**< <tt>\b 0x30:<\tt> FLC DATA Register */
|
||||
__O uint32_t acntl; /**< <tt>\b 0x40:<\tt> FLC ACNTL Register */
|
||||
};
|
||||
|
||||
/* Register offsets for module FLC */
|
||||
/**
|
||||
* @ingroup flc_registers
|
||||
* @defgroup FLC_Register_Offsets Register Offsets
|
||||
* @brief FLC Peripheral Register Offsets from the FLC Base Peripheral Address.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_R_FLC_ADDR ((uint32_t)0x00000000UL) /**< Offset from FLC Base Address: <tt> 0x0x000 */
|
||||
#define MXC_R_FLC_CLKDIV ((uint32_t)0x00000004UL) /**< Offset from FLC Base Address: <tt> 0x0x004 */
|
||||
#define MXC_R_FLC_CN ((uint32_t)0x00000008UL) /**< Offset from FLC Base Address: <tt> 0x0x008 */
|
||||
#define MXC_R_FLC_INTR ((uint32_t)0x00000024UL) /**< Offset from FLC Base Address: <tt> 0x0x024 */
|
||||
#define MXC_R_FLC_DATA ((uint32_t)0x00000030UL) /**< Offset from FLC Base Address: <tt> 0x0x030 */
|
||||
#define MXC_R_FLC_ACNTL ((uint32_t)0x00000040UL) /**< Offset from FLC Base Address: <tt> 0x0x040 */
|
||||
/**@} end of group flc_registers */
|
||||
|
||||
/**
|
||||
* @ingroup flc_registers
|
||||
* @defgroup ADDR_Register
|
||||
* @brief Flash Write Address.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_FLC_ADDR_ADDR_POS 0 /**< ADDR_ADDR Position */
|
||||
#define MXC_F_FLC_ADDR_ADDR ((uint32_t)(0xFFFFFFFFUL << MXC_F_FLC_ADDR_ADDR_POS)) /**< ADDR_ADDR Mask */
|
||||
|
||||
/**@} end of group ADDR_Register */
|
||||
|
||||
/**
|
||||
* @ingroup flc_registers
|
||||
* @defgroup CLKDIV_Register
|
||||
* @brief Flash Clock Divide. The clock (PLL0) is divided by this value to generate a 1
|
||||
* MHz clock for Flash controller.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_FLC_CLKDIV_CLKDIV_POS 0 /**< CLKDIV_CLKDIV Position */
|
||||
#define MXC_F_FLC_CLKDIV_CLKDIV ((uint32_t)(0xFFUL << MXC_F_FLC_CLKDIV_CLKDIV_POS)) /**< CLKDIV_CLKDIV Mask */
|
||||
|
||||
/**@} end of group CLKDIV_Register */
|
||||
|
||||
/**
|
||||
* @ingroup flc_registers
|
||||
* @defgroup CN_Register
|
||||
* @brief Flash Control Register.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_FLC_CN_WR_POS 0 /**< CN_WR Position */
|
||||
#define MXC_F_FLC_CN_WR ((uint32_t)(0x1UL << MXC_F_FLC_CN_WR_POS)) /**< CN_WR Mask */
|
||||
#define MXC_V_FLC_CN_WR_COMPLETE ((uint32_t)0x0UL) /**< CN_WR_COMPLETE Value */
|
||||
#define MXC_S_FLC_CN_WR_COMPLETE (MXC_V_FLC_CN_WR_COMPLETE << MXC_F_FLC_CN_WR_POS) /**< CN_WR_COMPLETE Setting */
|
||||
#define MXC_V_FLC_CN_WR_START ((uint32_t)0x1UL) /**< CN_WR_START Value */
|
||||
#define MXC_S_FLC_CN_WR_START (MXC_V_FLC_CN_WR_START << MXC_F_FLC_CN_WR_POS) /**< CN_WR_START Setting */
|
||||
|
||||
#define MXC_F_FLC_CN_ME_POS 1 /**< CN_ME Position */
|
||||
#define MXC_F_FLC_CN_ME ((uint32_t)(0x1UL << MXC_F_FLC_CN_ME_POS)) /**< CN_ME Mask */
|
||||
|
||||
#define MXC_F_FLC_CN_PGE_POS 2 /**< CN_PGE Position */
|
||||
#define MXC_F_FLC_CN_PGE ((uint32_t)(0x1UL << MXC_F_FLC_CN_PGE_POS)) /**< CN_PGE Mask */
|
||||
|
||||
#define MXC_F_FLC_CN_WDTH_POS 4 /**< CN_WDTH Position */
|
||||
#define MXC_F_FLC_CN_WDTH ((uint32_t)(0x1UL << MXC_F_FLC_CN_WDTH_POS)) /**< CN_WDTH Mask */
|
||||
#define MXC_V_FLC_CN_WDTH_SIZE128 ((uint32_t)0x0UL) /**< CN_WDTH_SIZE128 Value */
|
||||
#define MXC_S_FLC_CN_WDTH_SIZE128 (MXC_V_FLC_CN_WDTH_SIZE128 << MXC_F_FLC_CN_WDTH_POS) /**< CN_WDTH_SIZE128 Setting */
|
||||
#define MXC_V_FLC_CN_WDTH_SIZE32 ((uint32_t)0x1UL) /**< CN_WDTH_SIZE32 Value */
|
||||
#define MXC_S_FLC_CN_WDTH_SIZE32 (MXC_V_FLC_CN_WDTH_SIZE32 << MXC_F_FLC_CN_WDTH_POS) /**< CN_WDTH_SIZE32 Setting */
|
||||
|
||||
#define MXC_F_FLC_CN_ERASE_CODE_POS 8 /**< CN_ERASE_CODE Position */
|
||||
#define MXC_F_FLC_CN_ERASE_CODE ((uint32_t)(0xFFUL << MXC_F_FLC_CN_ERASE_CODE_POS)) /**< CN_ERASE_CODE Mask */
|
||||
#define MXC_V_FLC_CN_ERASE_CODE_NOP ((uint32_t)0x0UL) /**< CN_ERASE_CODE_NOP Value */
|
||||
#define MXC_S_FLC_CN_ERASE_CODE_NOP \
|
||||
(MXC_V_FLC_CN_ERASE_CODE_NOP << MXC_F_FLC_CN_ERASE_CODE_POS) /**< CN_ERASE_CODE_NOP Setting */
|
||||
#define MXC_V_FLC_CN_ERASE_CODE_ERASEPAGE ((uint32_t)0x55UL) /**< CN_ERASE_CODE_ERASEPAGE Value */
|
||||
#define MXC_S_FLC_CN_ERASE_CODE_ERASEPAGE \
|
||||
(MXC_V_FLC_CN_ERASE_CODE_ERASEPAGE << MXC_F_FLC_CN_ERASE_CODE_POS) /**< CN_ERASE_CODE_ERASEPAGE Setting */
|
||||
#define MXC_V_FLC_CN_ERASE_CODE_ERASEALL ((uint32_t)0xAAUL) /**< CN_ERASE_CODE_ERASEALL Value */
|
||||
#define MXC_S_FLC_CN_ERASE_CODE_ERASEALL \
|
||||
(MXC_V_FLC_CN_ERASE_CODE_ERASEALL << MXC_F_FLC_CN_ERASE_CODE_POS) /**< CN_ERASE_CODE_ERASEALL Setting */
|
||||
|
||||
#define MXC_F_FLC_CN_PEND_POS 24 /**< CN_PEND Position */
|
||||
#define MXC_F_FLC_CN_PEND ((uint32_t)(0x1UL << MXC_F_FLC_CN_PEND_POS)) /**< CN_PEND Mask */
|
||||
#define MXC_V_FLC_CN_PEND_IDLE ((uint32_t)0x0UL) /**< CN_PEND_IDLE Value */
|
||||
#define MXC_S_FLC_CN_PEND_IDLE (MXC_V_FLC_CN_PEND_IDLE << MXC_F_FLC_CN_PEND_POS) /**< CN_PEND_IDLE Setting */
|
||||
#define MXC_V_FLC_CN_PEND_BUSY ((uint32_t)0x1UL) /**< CN_PEND_BUSY Value */
|
||||
#define MXC_S_FLC_CN_PEND_BUSY (MXC_V_FLC_CN_PEND_BUSY << MXC_F_FLC_CN_PEND_POS) /**< CN_PEND_BUSY Setting */
|
||||
|
||||
#define MXC_F_FLC_CN_LVE_POS 25 /**< CN_LVE Position */
|
||||
#define MXC_F_FLC_CN_LVE ((uint32_t)(0x1UL << MXC_F_FLC_CN_LVE_POS)) /**< CN_LVE Mask */
|
||||
#define MXC_V_FLC_CN_LVE_DIS ((uint32_t)0x0UL) /**< CN_LVE_DIS Value */
|
||||
#define MXC_S_FLC_CN_LVE_DIS (MXC_V_FLC_CN_LVE_DIS << MXC_F_FLC_CN_LVE_POS) /**< CN_LVE_DIS Setting */
|
||||
#define MXC_V_FLC_CN_LVE_EN ((uint32_t)0x1UL) /**< CN_LVE_EN Value */
|
||||
#define MXC_S_FLC_CN_LVE_EN (MXC_V_FLC_CN_LVE_EN << MXC_F_FLC_CN_LVE_POS) /**< CN_LVE_EN Setting */
|
||||
|
||||
#define MXC_F_FLC_CN_BRST_POS 27 /**< CN_BRST Position */
|
||||
#define MXC_F_FLC_CN_BRST ((uint32_t)(0x1UL << MXC_F_FLC_CN_BRST_POS)) /**< CN_BRST Mask */
|
||||
#define MXC_V_FLC_CN_BRST_DISABLE ((uint32_t)0x0UL) /**< CN_BRST_DISABLE Value */
|
||||
#define MXC_S_FLC_CN_BRST_DISABLE (MXC_V_FLC_CN_BRST_DISABLE << MXC_F_FLC_CN_BRST_POS) /**< CN_BRST_DISABLE Setting */
|
||||
#define MXC_V_FLC_CN_BRST_ENABLE ((uint32_t)0x1UL) /**< CN_BRST_ENABLE Value */
|
||||
#define MXC_S_FLC_CN_BRST_ENABLE (MXC_V_FLC_CN_BRST_ENABLE << MXC_F_FLC_CN_BRST_POS) /**< CN_BRST_ENABLE Setting */
|
||||
|
||||
#define MXC_F_FLC_CN_UNLOCK_POS 28 /**< CN_UNLOCK Position */
|
||||
#define MXC_F_FLC_CN_UNLOCK ((uint32_t)(0xFUL << MXC_F_FLC_CN_UNLOCK_POS)) /**< CN_UNLOCK Mask */
|
||||
#define MXC_V_FLC_CN_UNLOCK_UNLOCKED ((uint32_t)0x2UL) /**< CN_UNLOCK_UNLOCKED Value */
|
||||
#define MXC_S_FLC_CN_UNLOCK_UNLOCKED \
|
||||
(MXC_V_FLC_CN_UNLOCK_UNLOCKED << MXC_F_FLC_CN_UNLOCK_POS) /**< CN_UNLOCK_UNLOCKED Setting */
|
||||
#define MXC_V_FLC_CN_UNLOCK_LOCKED ((uint32_t)0x3UL) /**< CN_UNLOCK_LOCKED Value */
|
||||
#define MXC_S_FLC_CN_UNLOCK_LOCKED \
|
||||
(MXC_V_FLC_CN_UNLOCK_LOCKED << MXC_F_FLC_CN_UNLOCK_POS) /**< CN_UNLOCK_LOCKED Setting */
|
||||
|
||||
/**@} end of group CN_Register */
|
||||
|
||||
/**
|
||||
* @ingroup flc_registers
|
||||
* @defgroup INTR_Register
|
||||
* @brief Flash Interrupt Register.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_FLC_INTR_DONE_POS 0 /**< INTR_DONE Position */
|
||||
#define MXC_F_FLC_INTR_DONE ((uint32_t)(0x1UL << MXC_F_FLC_INTR_DONE_POS)) /**< INTR_DONE Mask */
|
||||
#define MXC_V_FLC_INTR_DONE_INACTIVE ((uint32_t)0x0UL) /**< INTR_DONE_INACTIVE Value */
|
||||
#define MXC_S_FLC_INTR_DONE_INACTIVE \
|
||||
(MXC_V_FLC_INTR_DONE_INACTIVE << MXC_F_FLC_INTR_DONE_POS) /**< INTR_DONE_INACTIVE Setting */
|
||||
#define MXC_V_FLC_INTR_DONE_PENDING ((uint32_t)0x1UL) /**< INTR_DONE_PENDING Value */
|
||||
#define MXC_S_FLC_INTR_DONE_PENDING \
|
||||
(MXC_V_FLC_INTR_DONE_PENDING << MXC_F_FLC_INTR_DONE_POS) /**< INTR_DONE_PENDING Setting */
|
||||
|
||||
#define MXC_F_FLC_INTR_AF_POS 1 /**< INTR_AF Position */
|
||||
#define MXC_F_FLC_INTR_AF ((uint32_t)(0x1UL << MXC_F_FLC_INTR_AF_POS)) /**< INTR_AF Mask */
|
||||
#define MXC_V_FLC_INTR_AF_NOERROR ((uint32_t)0x0UL) /**< INTR_AF_NOERROR Value */
|
||||
#define MXC_S_FLC_INTR_AF_NOERROR (MXC_V_FLC_INTR_AF_NOERROR << MXC_F_FLC_INTR_AF_POS) /**< INTR_AF_NOERROR Setting */
|
||||
#define MXC_V_FLC_INTR_AF_ERROR ((uint32_t)0x1UL) /**< INTR_AF_ERROR Value */
|
||||
#define MXC_S_FLC_INTR_AF_ERROR (MXC_V_FLC_INTR_AF_ERROR << MXC_F_FLC_INTR_AF_POS) /**< INTR_AF_ERROR Setting */
|
||||
|
||||
#define MXC_F_FLC_INTR_DONEIE_POS 8 /**< INTR_DONEIE Position */
|
||||
#define MXC_F_FLC_INTR_DONEIE ((uint32_t)(0x1UL << MXC_F_FLC_INTR_DONEIE_POS)) /**< INTR_DONEIE Mask */
|
||||
#define MXC_V_FLC_INTR_DONEIE_DISABLE ((uint32_t)0x0UL) /**< INTR_DONEIE_DISABLE Value */
|
||||
#define MXC_S_FLC_INTR_DONEIE_DISABLE \
|
||||
(MXC_V_FLC_INTR_DONEIE_DISABLE << MXC_F_FLC_INTR_DONEIE_POS) /**< INTR_DONEIE_DISABLE Setting */
|
||||
#define MXC_V_FLC_INTR_DONEIE_ENABLE ((uint32_t)0x1UL) /**< INTR_DONEIE_ENABLE Value */
|
||||
#define MXC_S_FLC_INTR_DONEIE_ENABLE \
|
||||
(MXC_V_FLC_INTR_DONEIE_ENABLE << MXC_F_FLC_INTR_DONEIE_POS) /**< INTR_DONEIE_ENABLE Setting */
|
||||
|
||||
#define MXC_F_FLC_INTR_AFIE_POS 9 /**< INTR_AFIE Position */
|
||||
#define MXC_F_FLC_INTR_AFIE ((uint32_t)(0x1UL << MXC_F_FLC_INTR_AFIE_POS)) /**< INTR_AFIE Mask */
|
||||
|
||||
/**@} end of group INTR_Register */
|
||||
|
||||
/**
|
||||
* @ingroup flc_registers
|
||||
* @defgroup DATA_Register
|
||||
* @brief Flash Write Data.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_FLC_DATA_DATA_POS 0 /**< DATA_DATA Position */
|
||||
#define MXC_F_FLC_DATA_DATA ((uint32_t)(0xFFFFFFFFUL << MXC_F_FLC_DATA_DATA_POS)) /**< DATA_DATA Mask */
|
||||
|
||||
/**@} end of group DATA_Register */
|
||||
|
||||
/**
|
||||
* @ingroup flc_registers
|
||||
* @defgroup ACNTL_Register
|
||||
* @brief Access Control Register. Writing the ACNTL register with the following values in
|
||||
* the order shown, allows read and write access to the system and user Information
|
||||
* block: pflc-acntl = 0x3a7f5ca3; pflc-acntl = 0xa1e34f20; pflc-acntl =
|
||||
* 0x9608b2c1. When unlocked, a write of any word will disable access to system and
|
||||
* user information block. Readback of this register is always zero.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_FLC_ACNTL_ACNTL_POS 0 /**< ACNTL_ACNTL Position */
|
||||
#define MXC_F_FLC_ACNTL_ACNTL ((uint32_t)(0xFFFFFFFFUL << MXC_F_FLC_ACNTL_ACNTL_POS)) /**< ACNTL_ACNTL Mask */
|
||||
|
||||
/**@} end of group ACNTL_Register */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _FLC_REGS_H_ */
|
||||
777
contrib/loaders/flash/max32xxx/gcr_regs.h
Normal file
777
contrib/loaders/flash/max32xxx/gcr_regs.h
Normal file
@@ -0,0 +1,777 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2016 by Maxim Integrated *
|
||||
* Copyright (C) 2025 Analog Devices, Inc. *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef _GCR_REGS_H_
|
||||
#define _GCR_REGS_H_
|
||||
|
||||
/* **** Includes **** */
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if defined(__ICCARM__)
|
||||
#pragma system_include
|
||||
#endif
|
||||
|
||||
#if defined(__CC_ARM)
|
||||
#pragma anon_unions
|
||||
#endif
|
||||
/*/ @cond */
|
||||
/*
|
||||
If types are not defined elsewhere (CMSIS) define them here
|
||||
*/
|
||||
#ifndef __IO
|
||||
#define __IO volatile
|
||||
#endif
|
||||
#ifndef __I
|
||||
#define __I volatile const
|
||||
#endif
|
||||
#ifndef __O
|
||||
#define __O volatile
|
||||
#endif
|
||||
#ifndef __R
|
||||
#define __R volatile const
|
||||
#endif
|
||||
/*/ @endcond */
|
||||
|
||||
/* **** Definitions **** */
|
||||
|
||||
/**
|
||||
* @ingroup gcr
|
||||
* @defgroup gcr_registers GCR_Registers
|
||||
* @brief Registers, Bit Masks and Bit Positions for the GCR Peripheral Module.
|
||||
* @details Global Control Registers.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* Structure type to access the GCR Registers.
|
||||
*/
|
||||
struct mxc_gcr_regs {
|
||||
__IO uint32_t scon; /**< <tt>\b 0x00:</tt> GCR SCON Register */
|
||||
__IO uint32_t rstr0; /**< <tt>\b 0x04:</tt> GCR RSTR0 Register */
|
||||
__IO uint32_t clkcn; /**< <tt>\b 0x08:</tt> GCR CLKCN Register */
|
||||
__IO uint32_t pm; /**< <tt>\b 0x0C:</tt> GCR PM Register */
|
||||
__R uint32_t rsv_0x10_0x17[2];
|
||||
__IO uint32_t pckdiv; /**< <tt>\b 0x18:</tt> GCR PCKDIV Register */
|
||||
__R uint32_t rsv_0x1c_0x23[2];
|
||||
__IO uint32_t perckcn0; /**< <tt>\b 0x24:</tt> GCR PERCKCN0 Register */
|
||||
__IO uint32_t memckcn; /**< <tt>\b 0x28:</tt> GCR MEMCKCN Register */
|
||||
__IO uint32_t memzcn; /**< <tt>\b 0x2C:</tt> GCR MEMZCN Register */
|
||||
__R uint32_t rsv_0x30_0x3f[4];
|
||||
__IO uint32_t sysst; /**< <tt>\b 0x40:</tt> GCR SYSST Register */
|
||||
__IO uint32_t rstr1; /**< <tt>\b 0x44:</tt> GCR RSTR1 Register */
|
||||
__IO uint32_t perckcn1; /**< <tt>\b 0x48:</tt> GCR PERCKCN1 Register */
|
||||
__IO uint32_t evten; /**< <tt>\b 0x4C:</tt> GCR EVTEN Register */
|
||||
__I uint32_t revision; /**< <tt>\b 0x50:</tt> GCR REVISION Register */
|
||||
__IO uint32_t syssie; /**< <tt>\b 0x54:</tt> GCR SYSSIE Register */
|
||||
__R uint32_t rsv_0x58_0x63[3];
|
||||
__IO uint32_t eccerr; /**< <tt>\b 0x64:</tt> GCR ECCERR Register */
|
||||
__IO uint32_t eccnded; /**< <tt>\b 0x68:</tt> GCR ECCNDED Register */
|
||||
__IO uint32_t eccirqen; /**< <tt>\b 0x6C:</tt> GCR ECCIRQEN Register */
|
||||
__IO uint32_t eccerrad; /**< <tt>\b 0x70:</tt> GCR ECCERRAD Register */
|
||||
};
|
||||
|
||||
/* Register offsets for module GCR */
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_Register_Offsets Register Offsets
|
||||
* @brief GCR Peripheral Register Offsets from the GCR Base Peripheral Address.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_R_GCR_SCON ((uint32_t)0x00000000UL) /**< Offset from GCR Base Address: 0x0000 */
|
||||
#define MXC_R_GCR_RSTR0 ((uint32_t)0x00000004UL) /**< Offset from GCR Base Address: 0x0004 */
|
||||
#define MXC_R_GCR_CLKCN ((uint32_t)0x00000008UL) /**< Offset from GCR Base Address: 0x0008 */
|
||||
#define MXC_R_GCR_PM ((uint32_t)0x0000000CUL) /**< Offset from GCR Base Address: 0x000C */
|
||||
#define MXC_R_GCR_PCKDIV ((uint32_t)0x00000018UL) /**< Offset from GCR Base Address: 0x0018 */
|
||||
#define MXC_R_GCR_PERCKCN0 ((uint32_t)0x00000024UL) /**< Offset from GCR Base Address: 0x0024 */
|
||||
#define MXC_R_GCR_MEMCKCN ((uint32_t)0x00000028UL) /**< Offset from GCR Base Address: 0x0028 */
|
||||
#define MXC_R_GCR_MEMZCN ((uint32_t)0x0000002CUL) /**< Offset from GCR Base Address: 0x002C */
|
||||
#define MXC_R_GCR_SYSST ((uint32_t)0x00000040UL) /**< Offset from GCR Base Address: 0x0040 */
|
||||
#define MXC_R_GCR_RSTR1 ((uint32_t)0x00000044UL) /**< Offset from GCR Base Address: 0x0044 */
|
||||
#define MXC_R_GCR_PERCKCN1 ((uint32_t)0x00000048UL) /**< Offset from GCR Base Address: 0x0048 */
|
||||
#define MXC_R_GCR_EVTEN ((uint32_t)0x0000004CUL) /**< Offset from GCR Base Address: 0x004C */
|
||||
#define MXC_R_GCR_REVISION ((uint32_t)0x00000050UL) /**< Offset from GCR Base Address: 0x0050 */
|
||||
#define MXC_R_GCR_SYSSIE ((uint32_t)0x00000054UL) /**< Offset from GCR Base Address: 0x0054 */
|
||||
#define MXC_R_GCR_ECCERR ((uint32_t)0x00000064UL) /**< Offset from GCR Base Address: 0x0064 */
|
||||
#define MXC_R_GCR_ECCNDED ((uint32_t)0x00000068UL) /**< Offset from GCR Base Address: 0x0068 */
|
||||
#define MXC_R_GCR_ECCIRQEN ((uint32_t)0x0000006CUL) /**< Offset from GCR Base Address: 0x006C */
|
||||
#define MXC_R_GCR_ECCERRAD ((uint32_t)0x00000070UL) /**< Offset from GCR Base Address: 0x0070 */
|
||||
/**@} end of group gcr_registers */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_SCON GCR_SCON
|
||||
* @brief System Control.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_SCON_BSTAPEN_POS 0 /**< SCON_BSTAPEN Position */
|
||||
#define MXC_F_GCR_SCON_BSTAPEN ((uint32_t)(0x1UL << MXC_F_GCR_SCON_BSTAPEN_POS)) /**< SCON_BSTAPEN Mask */
|
||||
#define MXC_V_GCR_SCON_BSTAPEN_DIS ((uint32_t)0x0UL) /**< SCON_BSTAPEN_DIS Value */
|
||||
#define MXC_S_GCR_SCON_BSTAPEN_DIS \
|
||||
(MXC_V_GCR_SCON_BSTAPEN_DIS << MXC_F_GCR_SCON_BSTAPEN_POS) /**< SCON_BSTAPEN_DIS Setting */
|
||||
#define MXC_V_GCR_SCON_BSTAPEN_EN ((uint32_t)0x1UL) /**< SCON_BSTAPEN_EN Value */
|
||||
#define MXC_S_GCR_SCON_BSTAPEN_EN \
|
||||
(MXC_V_GCR_SCON_BSTAPEN_EN << MXC_F_GCR_SCON_BSTAPEN_POS) /**< SCON_BSTAPEN_EN Setting */
|
||||
|
||||
#define MXC_F_GCR_SCON_SBUSARB_POS 1 /**< SCON_SBUSARB Position */
|
||||
#define MXC_F_GCR_SCON_SBUSARB ((uint32_t)(0x3UL << MXC_F_GCR_SCON_SBUSARB_POS)) /**< SCON_SBUSARB Mask */
|
||||
#define MXC_V_GCR_SCON_SBUSARB_FIX ((uint32_t)0x0UL) /**< SCON_SBUSARB_FIX Value */
|
||||
#define MXC_S_GCR_SCON_SBUSARB_FIX \
|
||||
(MXC_V_GCR_SCON_SBUSARB_FIX << MXC_F_GCR_SCON_SBUSARB_POS) /**< SCON_SBUSARB_FIX Setting */
|
||||
#define MXC_V_GCR_SCON_SBUSARB_ROUND ((uint32_t)0x1UL) /**< SCON_SBUSARB_ROUND Value */
|
||||
#define MXC_S_GCR_SCON_SBUSARB_ROUND \
|
||||
(MXC_V_GCR_SCON_SBUSARB_ROUND << MXC_F_GCR_SCON_SBUSARB_POS) /**< SCON_SBUSARB_ROUND Setting */
|
||||
|
||||
#define MXC_F_GCR_SCON_FLASH_PAGE_FLIP_POS 4 /**< SCON_FLASH_PAGE_FLIP Position */
|
||||
#define MXC_F_GCR_SCON_FLASH_PAGE_FLIP \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_SCON_FLASH_PAGE_FLIP_POS)) /**< SCON_FLASH_PAGE_FLIP Mask */
|
||||
#define MXC_V_GCR_SCON_FLASH_PAGE_FLIP_NORMAL ((uint32_t)0x0UL) /**< SCON_FLASH_PAGE_FLIP_NORMAL Value */
|
||||
#define MXC_S_GCR_SCON_FLASH_PAGE_FLIP_NORMAL \
|
||||
(MXC_V_GCR_SCON_FLASH_PAGE_FLIP_NORMAL \
|
||||
<< MXC_F_GCR_SCON_FLASH_PAGE_FLIP_POS) /**< SCON_FLASH_PAGE_FLIP_NORMAL Setting */
|
||||
#define MXC_V_GCR_SCON_FLASH_PAGE_FLIP_SWAPPED ((uint32_t)0x1UL) /**< SCON_FLASH_PAGE_FLIP_SWAPPED Value */
|
||||
#define MXC_S_GCR_SCON_FLASH_PAGE_FLIP_SWAPPED \
|
||||
(MXC_V_GCR_SCON_FLASH_PAGE_FLIP_SWAPPED \
|
||||
<< MXC_F_GCR_SCON_FLASH_PAGE_FLIP_POS) /**< SCON_FLASH_PAGE_FLIP_SWAPPED Setting */
|
||||
|
||||
#define MXC_F_GCR_SCON_CCACHE_FLUSH_POS 6 /**< SCON_CCACHE_FLUSH Position */
|
||||
#define MXC_F_GCR_SCON_CCACHE_FLUSH \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_SCON_CCACHE_FLUSH_POS)) /**< SCON_CCACHE_FLUSH Mask */
|
||||
#define MXC_V_GCR_SCON_CCACHE_FLUSH_NORMAL ((uint32_t)0x0UL) /**< SCON_CCACHE_FLUSH_NORMAL Value */
|
||||
#define MXC_S_GCR_SCON_CCACHE_FLUSH_NORMAL \
|
||||
(MXC_V_GCR_SCON_CCACHE_FLUSH_NORMAL << MXC_F_GCR_SCON_CCACHE_FLUSH_POS) /**< SCON_CCACHE_FLUSH_NORMAL Setting */
|
||||
#define MXC_V_GCR_SCON_CCACHE_FLUSH_FLUSH ((uint32_t)0x1UL) /**< SCON_CCACHE_FLUSH_FLUSH Value */
|
||||
#define MXC_S_GCR_SCON_CCACHE_FLUSH_FLUSH \
|
||||
(MXC_V_GCR_SCON_CCACHE_FLUSH_FLUSH << MXC_F_GCR_SCON_CCACHE_FLUSH_POS) /**< SCON_CCACHE_FLUSH_FLUSH Setting */
|
||||
|
||||
#define MXC_F_GCR_SCON_CCHK_POS 13 /**< SCON_CCHK Position */
|
||||
#define MXC_F_GCR_SCON_CCHK ((uint32_t)(0x1UL << MXC_F_GCR_SCON_CCHK_POS)) /**< SCON_CCHK Mask */
|
||||
#define MXC_V_GCR_SCON_CCHK_COMPLETE ((uint32_t)0x0UL) /**< SCON_CCHK_COMPLETE Value */
|
||||
#define MXC_S_GCR_SCON_CCHK_COMPLETE \
|
||||
(MXC_V_GCR_SCON_CCHK_COMPLETE << MXC_F_GCR_SCON_CCHK_POS) /**< SCON_CCHK_COMPLETE Setting */
|
||||
#define MXC_V_GCR_SCON_CCHK_START ((uint32_t)0x1UL) /**< SCON_CCHK_START Value */
|
||||
#define MXC_S_GCR_SCON_CCHK_START (MXC_V_GCR_SCON_CCHK_START << MXC_F_GCR_SCON_CCHK_POS) /**< SCON_CCHK_START Setting \
|
||||
*/
|
||||
|
||||
#define MXC_F_GCR_SCON_CHKRES_POS 15 /**< SCON_CHKRES Position */
|
||||
#define MXC_F_GCR_SCON_CHKRES ((uint32_t)(0x1UL << MXC_F_GCR_SCON_CHKRES_POS)) /**< SCON_CHKRES Mask */
|
||||
#define MXC_V_GCR_SCON_CHKRES_PASS ((uint32_t)0x0UL) /**< SCON_CHKRES_PASS Value */
|
||||
#define MXC_S_GCR_SCON_CHKRES_PASS \
|
||||
(MXC_V_GCR_SCON_CHKRES_PASS << MXC_F_GCR_SCON_CHKRES_POS) /**< SCON_CHKRES_PASS Setting */
|
||||
#define MXC_V_GCR_SCON_CHKRES_FAIL ((uint32_t)0x1UL) /**< SCON_CHKRES_FAIL Value */
|
||||
#define MXC_S_GCR_SCON_CHKRES_FAIL \
|
||||
(MXC_V_GCR_SCON_CHKRES_FAIL << MXC_F_GCR_SCON_CHKRES_POS) /**< SCON_CHKRES_FAIL Setting */
|
||||
|
||||
#define MXC_F_GCR_SCON_OVR_POS 16 /**< SCON_OVR Position */
|
||||
#define MXC_F_GCR_SCON_OVR ((uint32_t)(0x3UL << MXC_F_GCR_SCON_OVR_POS)) /**< SCON_OVR Mask */
|
||||
#define MXC_V_GCR_SCON_OVR_0_9V ((uint32_t)0x0UL) /**< SCON_OVR_0_9V Value */
|
||||
#define MXC_S_GCR_SCON_OVR_0_9V (MXC_V_GCR_SCON_OVR_0_9V << MXC_F_GCR_SCON_OVR_POS) /**< SCON_OVR_0_9V Setting */
|
||||
#define MXC_V_GCR_SCON_OVR_1_0V ((uint32_t)0x1UL) /**< SCON_OVR_1_0V Value */
|
||||
#define MXC_S_GCR_SCON_OVR_1_0V (MXC_V_GCR_SCON_OVR_1_0V << MXC_F_GCR_SCON_OVR_POS) /**< SCON_OVR_1_0V Setting */
|
||||
#define MXC_V_GCR_SCON_OVR_1_1V ((uint32_t)0x2UL) /**< SCON_OVR_1_1V Value */
|
||||
#define MXC_S_GCR_SCON_OVR_1_1V (MXC_V_GCR_SCON_OVR_1_1V << MXC_F_GCR_SCON_OVR_POS) /**< SCON_OVR_1_1V Setting */
|
||||
|
||||
#define MXC_F_GCR_SCON_MEMPROT_EN_POS 20 /**< SCON_MEMPROT_EN Position */
|
||||
#define MXC_F_GCR_SCON_MEMPROT_EN ((uint32_t)(0x1UL << MXC_F_GCR_SCON_MEMPROT_EN_POS)) /**< SCON_MEMPROT_EN Mask */
|
||||
#define MXC_V_GCR_SCON_MEMPROT_EN_DIS ((uint32_t)0x0UL) /**< SCON_MEMPROT_EN_DIS Value */
|
||||
#define MXC_S_GCR_SCON_MEMPROT_EN_DIS \
|
||||
(MXC_V_GCR_SCON_MEMPROT_EN_DIS << MXC_F_GCR_SCON_MEMPROT_EN_POS) /**< SCON_MEMPROT_EN_DIS Setting */
|
||||
#define MXC_V_GCR_SCON_MEMPROT_EN_EN ((uint32_t)0x1UL) /**< SCON_MEMPROT_EN_EN Value */
|
||||
#define MXC_S_GCR_SCON_MEMPROT_EN_EN \
|
||||
(MXC_V_GCR_SCON_MEMPROT_EN_EN << MXC_F_GCR_SCON_MEMPROT_EN_POS) /**< SCON_MEMPROT_EN_EN Setting */
|
||||
|
||||
#define MXC_F_GCR_SCON_MEMPROT_KEYSZ_POS 21 /**< SCON_MEMPROT_KEYSZ Position */
|
||||
#define MXC_F_GCR_SCON_MEMPROT_KEYSZ \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_SCON_MEMPROT_KEYSZ_POS)) /**< SCON_MEMPROT_KEYSZ Mask */
|
||||
#define MXC_V_GCR_SCON_MEMPROT_KEYSZ_128 ((uint32_t)0x0UL) /**< SCON_MEMPROT_KEYSZ_128 Value */
|
||||
#define MXC_S_GCR_SCON_MEMPROT_KEYSZ_128 \
|
||||
(MXC_V_GCR_SCON_MEMPROT_KEYSZ_128 << MXC_F_GCR_SCON_MEMPROT_KEYSZ_POS) /**< SCON_MEMPROT_KEYSZ_128 Setting */
|
||||
#define MXC_V_GCR_SCON_MEMPROT_KEYSZ_256 ((uint32_t)0x1UL) /**< SCON_MEMPROT_KEYSZ_256 Value */
|
||||
#define MXC_S_GCR_SCON_MEMPROT_KEYSZ_256 \
|
||||
(MXC_V_GCR_SCON_MEMPROT_KEYSZ_256 << MXC_F_GCR_SCON_MEMPROT_KEYSZ_POS) /**< SCON_MEMPROT_KEYSZ_256 Setting */
|
||||
|
||||
/**@} end of group GCR_SCON_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_RSTR0 GCR_RSTR0
|
||||
* @brief Reset.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_RSTR0_DMA_POS 0 /**< RSTR0_DMA Position */
|
||||
#define MXC_F_GCR_RSTR0_DMA ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_DMA_POS)) /**< RSTR0_DMA Mask */
|
||||
#define MXC_V_GCR_RSTR0_DMA_RESET_DONE ((uint32_t)0x0UL) /**< RSTR0_DMA_RESET_DONE Value */
|
||||
#define MXC_S_GCR_RSTR0_DMA_RESET_DONE \
|
||||
(MXC_V_GCR_RSTR0_DMA_RESET_DONE << MXC_F_GCR_RSTR0_DMA_POS) /**< RSTR0_DMA_RESET_DONE Setting */
|
||||
#define MXC_V_GCR_RSTR0_DMA_BUSY ((uint32_t)0x1UL) /**< RSTR0_DMA_BUSY Value */
|
||||
#define MXC_S_GCR_RSTR0_DMA_BUSY (MXC_V_GCR_RSTR0_DMA_BUSY << MXC_F_GCR_RSTR0_DMA_POS) /**< RSTR0_DMA_BUSY Setting */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_WDT_POS 1 /**< RSTR0_WDT Position */
|
||||
#define MXC_F_GCR_RSTR0_WDT ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_WDT_POS)) /**< RSTR0_WDT Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_GPIO0_POS 2 /**< RSTR0_GPIO0 Position */
|
||||
#define MXC_F_GCR_RSTR0_GPIO0 ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_GPIO0_POS)) /**< RSTR0_GPIO0 Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_GPIO1_POS 3 /**< RSTR0_GPIO1 Position */
|
||||
#define MXC_F_GCR_RSTR0_GPIO1 ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_GPIO1_POS)) /**< RSTR0_GPIO1 Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_TIMER0_POS 5 /**< RSTR0_TIMER0 Position */
|
||||
#define MXC_F_GCR_RSTR0_TIMER0 ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_TIMER0_POS)) /**< RSTR0_TIMER0 Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_TIMER1_POS 6 /**< RSTR0_TIMER1 Position */
|
||||
#define MXC_F_GCR_RSTR0_TIMER1 ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_TIMER1_POS)) /**< RSTR0_TIMER1 Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_TIMER2_POS 7 /**< RSTR0_TIMER2 Position */
|
||||
#define MXC_F_GCR_RSTR0_TIMER2 ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_TIMER2_POS)) /**< RSTR0_TIMER2 Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_TIMER3_POS 8 /**< RSTR0_TIMER3 Position */
|
||||
#define MXC_F_GCR_RSTR0_TIMER3 ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_TIMER3_POS)) /**< RSTR0_TIMER3 Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_UART0_POS 11 /**< RSTR0_UART0 Position */
|
||||
#define MXC_F_GCR_RSTR0_UART0 ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_UART0_POS)) /**< RSTR0_UART0 Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_SPI0_POS 13 /**< RSTR0_SPI0 Position */
|
||||
#define MXC_F_GCR_RSTR0_SPI0 ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_SPI0_POS)) /**< RSTR0_SPI0 Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_SPI1_POS 14 /**< RSTR0_SPI1 Position */
|
||||
#define MXC_F_GCR_RSTR0_SPI1 ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_SPI1_POS)) /**< RSTR0_SPI1 Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_I2C0_POS 16 /**< RSTR0_I2C0 Position */
|
||||
#define MXC_F_GCR_RSTR0_I2C0 ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_I2C0_POS)) /**< RSTR0_I2C0 Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_CRYPTO_POS 18 /**< RSTR0_CRYPTO Position */
|
||||
#define MXC_F_GCR_RSTR0_CRYPTO ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_CRYPTO_POS)) /**< RSTR0_CRYPTO Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_SMPHR_POS 22 /**< RSTR0_SMPHR Position */
|
||||
#define MXC_F_GCR_RSTR0_SMPHR ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_SMPHR_POS)) /**< RSTR0_SMPHR Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_TRNG_POS 24 /**< RSTR0_TRNG Position */
|
||||
#define MXC_F_GCR_RSTR0_TRNG ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_TRNG_POS)) /**< RSTR0_TRNG Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_SRST_POS 29 /**< RSTR0_SRST Position */
|
||||
#define MXC_F_GCR_RSTR0_SRST ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_SRST_POS)) /**< RSTR0_SRST Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_PRST_POS 30 /**< RSTR0_PRST Position */
|
||||
#define MXC_F_GCR_RSTR0_PRST ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_PRST_POS)) /**< RSTR0_PRST Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR0_SYSTEM_POS 31 /**< RSTR0_SYSTEM Position */
|
||||
#define MXC_F_GCR_RSTR0_SYSTEM ((uint32_t)(0x1UL << MXC_F_GCR_RSTR0_SYSTEM_POS)) /**< RSTR0_SYSTEM Mask */
|
||||
|
||||
/**@} end of group GCR_RSTR0_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_CLKCN GCR_CLKCN
|
||||
* @brief Clock Control.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_CLKCN_PSC_POS 6 /**< CLKCN_PSC Position */
|
||||
#define MXC_F_GCR_CLKCN_PSC ((uint32_t)(0x7UL << MXC_F_GCR_CLKCN_PSC_POS)) /**< CLKCN_PSC Mask */
|
||||
#define MXC_V_GCR_CLKCN_PSC_DIV1 ((uint32_t)0x0UL) /**< CLKCN_PSC_DIV1 Value */
|
||||
#define MXC_S_GCR_CLKCN_PSC_DIV1 (MXC_V_GCR_CLKCN_PSC_DIV1 << MXC_F_GCR_CLKCN_PSC_POS) /**< CLKCN_PSC_DIV1 Setting */
|
||||
#define MXC_V_GCR_CLKCN_PSC_DIV2 ((uint32_t)0x1UL) /**< CLKCN_PSC_DIV2 Value */
|
||||
#define MXC_S_GCR_CLKCN_PSC_DIV2 (MXC_V_GCR_CLKCN_PSC_DIV2 << MXC_F_GCR_CLKCN_PSC_POS) /**< CLKCN_PSC_DIV2 Setting */
|
||||
#define MXC_V_GCR_CLKCN_PSC_DIV4 ((uint32_t)0x2UL) /**< CLKCN_PSC_DIV4 Value */
|
||||
#define MXC_S_GCR_CLKCN_PSC_DIV4 (MXC_V_GCR_CLKCN_PSC_DIV4 << MXC_F_GCR_CLKCN_PSC_POS) /**< CLKCN_PSC_DIV4 Setting */
|
||||
#define MXC_V_GCR_CLKCN_PSC_DIV8 ((uint32_t)0x3UL) /**< CLKCN_PSC_DIV8 Value */
|
||||
#define MXC_S_GCR_CLKCN_PSC_DIV8 (MXC_V_GCR_CLKCN_PSC_DIV8 << MXC_F_GCR_CLKCN_PSC_POS) /**< CLKCN_PSC_DIV8 Setting */
|
||||
#define MXC_V_GCR_CLKCN_PSC_DIV16 ((uint32_t)0x4UL) /**< CLKCN_PSC_DIV16 Value */
|
||||
#define MXC_S_GCR_CLKCN_PSC_DIV16 (MXC_V_GCR_CLKCN_PSC_DIV16 << MXC_F_GCR_CLKCN_PSC_POS) /**< CLKCN_PSC_DIV16 Setting \
|
||||
*/
|
||||
#define MXC_V_GCR_CLKCN_PSC_DIV32 ((uint32_t)0x5UL) /**< CLKCN_PSC_DIV32 Value */
|
||||
#define MXC_S_GCR_CLKCN_PSC_DIV32 (MXC_V_GCR_CLKCN_PSC_DIV32 << MXC_F_GCR_CLKCN_PSC_POS) /**< CLKCN_PSC_DIV32 Setting \
|
||||
*/
|
||||
#define MXC_V_GCR_CLKCN_PSC_DIV64 ((uint32_t)0x6UL) /**< CLKCN_PSC_DIV64 Value */
|
||||
#define MXC_S_GCR_CLKCN_PSC_DIV64 (MXC_V_GCR_CLKCN_PSC_DIV64 << MXC_F_GCR_CLKCN_PSC_POS) /**< CLKCN_PSC_DIV64 Setting \
|
||||
*/
|
||||
#define MXC_V_GCR_CLKCN_PSC_DIV128 ((uint32_t)0x7UL) /**< CLKCN_PSC_DIV128 Value */
|
||||
#define MXC_S_GCR_CLKCN_PSC_DIV128 \
|
||||
(MXC_V_GCR_CLKCN_PSC_DIV128 << MXC_F_GCR_CLKCN_PSC_POS) /**< CLKCN_PSC_DIV128 Setting */
|
||||
|
||||
#define MXC_F_GCR_CLKCN_CLKSEL_POS 9 /**< CLKCN_CLKSEL Position */
|
||||
#define MXC_F_GCR_CLKCN_CLKSEL ((uint32_t)(0x7UL << MXC_F_GCR_CLKCN_CLKSEL_POS)) /**< CLKCN_CLKSEL Mask */
|
||||
#define MXC_V_GCR_CLKCN_CLKSEL_HIRC ((uint32_t)0x0UL) /**< CLKCN_CLKSEL_HIRC Value */
|
||||
#define MXC_S_GCR_CLKCN_CLKSEL_HIRC \
|
||||
(MXC_V_GCR_CLKCN_CLKSEL_HIRC << MXC_F_GCR_CLKCN_CLKSEL_POS) /**< CLKCN_CLKSEL_HIRC Setting */
|
||||
#define MXC_V_GCR_CLKCN_CLKSEL_LIRC8 ((uint32_t)0x3UL) /**< CLKCN_CLKSEL_LIRC8 Value */
|
||||
#define MXC_S_GCR_CLKCN_CLKSEL_LIRC8 \
|
||||
(MXC_V_GCR_CLKCN_CLKSEL_LIRC8 << MXC_F_GCR_CLKCN_CLKSEL_POS) /**< CLKCN_CLKSEL_LIRC8 Setting */
|
||||
#define MXC_V_GCR_CLKCN_CLKSEL_HIRC8 ((uint32_t)0x5UL) /**< CLKCN_CLKSEL_HIRC8 Value */
|
||||
#define MXC_S_GCR_CLKCN_CLKSEL_HIRC8 \
|
||||
(MXC_V_GCR_CLKCN_CLKSEL_HIRC8 << MXC_F_GCR_CLKCN_CLKSEL_POS) /**< CLKCN_CLKSEL_HIRC8 Setting */
|
||||
|
||||
#define MXC_F_GCR_CLKCN_CKRDY_POS 13 /**< CLKCN_CKRDY Position */
|
||||
#define MXC_F_GCR_CLKCN_CKRDY ((uint32_t)(0x1UL << MXC_F_GCR_CLKCN_CKRDY_POS)) /**< CLKCN_CKRDY Mask */
|
||||
#define MXC_V_GCR_CLKCN_CKRDY_BUSY ((uint32_t)0x0UL) /**< CLKCN_CKRDY_BUSY Value */
|
||||
#define MXC_S_GCR_CLKCN_CKRDY_BUSY \
|
||||
(MXC_V_GCR_CLKCN_CKRDY_BUSY << MXC_F_GCR_CLKCN_CKRDY_POS) /**< CLKCN_CKRDY_BUSY Setting */
|
||||
#define MXC_V_GCR_CLKCN_CKRDY_READY ((uint32_t)0x1UL) /**< CLKCN_CKRDY_READY Value */
|
||||
#define MXC_S_GCR_CLKCN_CKRDY_READY \
|
||||
(MXC_V_GCR_CLKCN_CKRDY_READY << MXC_F_GCR_CLKCN_CKRDY_POS) /**< CLKCN_CKRDY_READY Setting */
|
||||
|
||||
#define MXC_F_GCR_CLKCN_HIRC_EN_POS 18 /**< CLKCN_HIRC_EN Position */
|
||||
#define MXC_F_GCR_CLKCN_HIRC_EN ((uint32_t)(0x1UL << MXC_F_GCR_CLKCN_HIRC_EN_POS)) /**< CLKCN_HIRC_EN Mask */
|
||||
#define MXC_V_GCR_CLKCN_HIRC_EN_DIS ((uint32_t)0x0UL) /**< CLKCN_HIRC_EN_DIS Value */
|
||||
#define MXC_S_GCR_CLKCN_HIRC_EN_DIS \
|
||||
(MXC_V_GCR_CLKCN_HIRC_EN_DIS << MXC_F_GCR_CLKCN_HIRC_EN_POS) /**< CLKCN_HIRC_EN_DIS Setting */
|
||||
#define MXC_V_GCR_CLKCN_HIRC_EN_EN ((uint32_t)0x1UL) /**< CLKCN_HIRC_EN_EN Value */
|
||||
#define MXC_S_GCR_CLKCN_HIRC_EN_EN \
|
||||
(MXC_V_GCR_CLKCN_HIRC_EN_EN << MXC_F_GCR_CLKCN_HIRC_EN_POS) /**< CLKCN_HIRC_EN_EN Setting */
|
||||
|
||||
#define MXC_F_GCR_CLKCN_HIRC8M_EN_POS 20 /**< CLKCN_HIRC8M_EN Position */
|
||||
#define MXC_F_GCR_CLKCN_HIRC8M_EN ((uint32_t)(0x1UL << MXC_F_GCR_CLKCN_HIRC8M_EN_POS)) /**< CLKCN_HIRC8M_EN Mask */
|
||||
|
||||
#define MXC_F_GCR_CLKCN_HIRC8M_VS_POS 21 /**< CLKCN_HIRC8M_VS Position */
|
||||
#define MXC_F_GCR_CLKCN_HIRC8M_VS ((uint32_t)(0x1UL << MXC_F_GCR_CLKCN_HIRC8M_VS_POS)) /**< CLKCN_HIRC8M_VS Mask */
|
||||
#define MXC_V_GCR_CLKCN_HIRC8M_VS_VCOR ((uint32_t)0x0UL) /**< CLKCN_HIRC8M_VS_VCOR Value */
|
||||
#define MXC_S_GCR_CLKCN_HIRC8M_VS_VCOR \
|
||||
(MXC_V_GCR_CLKCN_HIRC8M_VS_VCOR << MXC_F_GCR_CLKCN_HIRC8M_VS_POS) /**< CLKCN_HIRC8M_VS_VCOR Setting */
|
||||
#define MXC_V_GCR_CLKCN_HIRC8M_VS_1V ((uint32_t)0x1UL) /**< CLKCN_HIRC8M_VS_1V Value */
|
||||
#define MXC_S_GCR_CLKCN_HIRC8M_VS_1V \
|
||||
(MXC_V_GCR_CLKCN_HIRC8M_VS_1V << MXC_F_GCR_CLKCN_HIRC8M_VS_POS) /**< CLKCN_HIRC8M_VS_1V Setting */
|
||||
|
||||
#define MXC_F_GCR_CLKCN_HIRC_RDY_POS 26 /**< CLKCN_HIRC_RDY Position */
|
||||
#define MXC_F_GCR_CLKCN_HIRC_RDY ((uint32_t)(0x1UL << MXC_F_GCR_CLKCN_HIRC_RDY_POS)) /**< CLKCN_HIRC_RDY Mask */
|
||||
#define MXC_V_GCR_CLKCN_HIRC_RDY_NOT ((uint32_t)0x0UL) /**< CLKCN_HIRC_RDY_NOT Value */
|
||||
#define MXC_S_GCR_CLKCN_HIRC_RDY_NOT \
|
||||
(MXC_V_GCR_CLKCN_HIRC_RDY_NOT << MXC_F_GCR_CLKCN_HIRC_RDY_POS) /**< CLKCN_HIRC_RDY_NOT Setting */
|
||||
#define MXC_V_GCR_CLKCN_HIRC_RDY_READY ((uint32_t)0x1UL) /**< CLKCN_HIRC_RDY_READY Value */
|
||||
#define MXC_S_GCR_CLKCN_HIRC_RDY_READY \
|
||||
(MXC_V_GCR_CLKCN_HIRC_RDY_READY << MXC_F_GCR_CLKCN_HIRC_RDY_POS) /**< CLKCN_HIRC_RDY_READY Setting */
|
||||
|
||||
#define MXC_F_GCR_CLKCN_HIRC8M_RDY_POS 28 /**< CLKCN_HIRC8M_RDY Position */
|
||||
#define MXC_F_GCR_CLKCN_HIRC8M_RDY ((uint32_t)(0x1UL << MXC_F_GCR_CLKCN_HIRC8M_RDY_POS)) /**< CLKCN_HIRC8M_RDY Mask */
|
||||
|
||||
#define MXC_F_GCR_CLKCN_LIRC8K_RDY_POS 29 /**< CLKCN_LIRC8K_RDY Position */
|
||||
#define MXC_F_GCR_CLKCN_LIRC8K_RDY ((uint32_t)(0x1UL << MXC_F_GCR_CLKCN_LIRC8K_RDY_POS)) /**< CLKCN_LIRC8K_RDY Mask */
|
||||
|
||||
/**@} end of group GCR_CLKCN_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_PM GCR_PM
|
||||
* @brief Power Management.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_PM_MODE_POS 0 /**< PM_MODE Position */
|
||||
#define MXC_F_GCR_PM_MODE ((uint32_t)(0x7UL << MXC_F_GCR_PM_MODE_POS)) /**< PM_MODE Mask */
|
||||
#define MXC_V_GCR_PM_MODE_ACTIVE ((uint32_t)0x0UL) /**< PM_MODE_ACTIVE Value */
|
||||
#define MXC_S_GCR_PM_MODE_ACTIVE (MXC_V_GCR_PM_MODE_ACTIVE << MXC_F_GCR_PM_MODE_POS) /**< PM_MODE_ACTIVE Setting */
|
||||
#define MXC_V_GCR_PM_MODE_DEEPSLEEP ((uint32_t)0x2UL) /**< PM_MODE_DEEPSLEEP Value */
|
||||
#define MXC_S_GCR_PM_MODE_DEEPSLEEP \
|
||||
(MXC_V_GCR_PM_MODE_DEEPSLEEP << MXC_F_GCR_PM_MODE_POS) /**< PM_MODE_DEEPSLEEP Setting */
|
||||
#define MXC_V_GCR_PM_MODE_SHUTDOWN ((uint32_t)0x3UL) /**< PM_MODE_SHUTDOWN Value */
|
||||
#define MXC_S_GCR_PM_MODE_SHUTDOWN \
|
||||
(MXC_V_GCR_PM_MODE_SHUTDOWN << MXC_F_GCR_PM_MODE_POS) /**< PM_MODE_SHUTDOWN Setting */
|
||||
#define MXC_V_GCR_PM_MODE_BACKUP ((uint32_t)0x4UL) /**< PM_MODE_BACKUP Value */
|
||||
#define MXC_S_GCR_PM_MODE_BACKUP (MXC_V_GCR_PM_MODE_BACKUP << MXC_F_GCR_PM_MODE_POS) /**< PM_MODE_BACKUP Setting */
|
||||
|
||||
#define MXC_F_GCR_PM_GPIOWKEN_POS 4 /**< PM_GPIOWKEN Position */
|
||||
#define MXC_F_GCR_PM_GPIOWKEN ((uint32_t)(0x1UL << MXC_F_GCR_PM_GPIOWKEN_POS)) /**< PM_GPIOWKEN Mask */
|
||||
#define MXC_V_GCR_PM_GPIOWKEN_DIS ((uint32_t)0x0UL) /**< PM_GPIOWKEN_DIS Value */
|
||||
#define MXC_S_GCR_PM_GPIOWKEN_DIS \
|
||||
(MXC_V_GCR_PM_GPIOWKEN_DIS << MXC_F_GCR_PM_GPIOWKEN_POS) /**< PM_GPIOWKEN_DIS Setting */
|
||||
#define MXC_V_GCR_PM_GPIOWKEN_EN ((uint32_t)0x1UL) /**< PM_GPIOWKEN_EN Value */
|
||||
#define MXC_S_GCR_PM_GPIOWKEN_EN (MXC_V_GCR_PM_GPIOWKEN_EN << MXC_F_GCR_PM_GPIOWKEN_POS) /**< PM_GPIOWKEN_EN Setting \
|
||||
*/
|
||||
|
||||
#define MXC_F_GCR_PM_HIRCPD_POS 15 /**< PM_HIRCPD Position */
|
||||
#define MXC_F_GCR_PM_HIRCPD ((uint32_t)(0x1UL << MXC_F_GCR_PM_HIRCPD_POS)) /**< PM_HIRCPD Mask */
|
||||
#define MXC_V_GCR_PM_HIRCPD_ACTIVE ((uint32_t)0x0UL) /**< PM_HIRCPD_ACTIVE Value */
|
||||
#define MXC_S_GCR_PM_HIRCPD_ACTIVE \
|
||||
(MXC_V_GCR_PM_HIRCPD_ACTIVE << MXC_F_GCR_PM_HIRCPD_POS) /**< PM_HIRCPD_ACTIVE Setting */
|
||||
#define MXC_V_GCR_PM_HIRCPD_DEEPSLEEP ((uint32_t)0x1UL) /**< PM_HIRCPD_DEEPSLEEP Value */
|
||||
#define MXC_S_GCR_PM_HIRCPD_DEEPSLEEP \
|
||||
(MXC_V_GCR_PM_HIRCPD_DEEPSLEEP << MXC_F_GCR_PM_HIRCPD_POS) /**< PM_HIRCPD_DEEPSLEEP Setting */
|
||||
|
||||
#define MXC_F_GCR_PM_HIRC8MPD_POS 17 /**< PM_HIRC8MPD Position */
|
||||
#define MXC_F_GCR_PM_HIRC8MPD ((uint32_t)(0x1UL << MXC_F_GCR_PM_HIRC8MPD_POS)) /**< PM_HIRC8MPD Mask */
|
||||
|
||||
/**@} end of group GCR_PM_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_PCKDIV GCR_PCKDIV
|
||||
* @brief Peripheral Clock Divider.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_PCKDIV_PCF_POS 0 /**< PCKDIV_PCF Position */
|
||||
#define MXC_F_GCR_PCKDIV_PCF ((uint32_t)(0x7UL << MXC_F_GCR_PCKDIV_PCF_POS)) /**< PCKDIV_PCF Mask */
|
||||
#define MXC_V_GCR_PCKDIV_PCF_96MHZ ((uint32_t)0x2UL) /**< PCKDIV_PCF_96MHZ Value */
|
||||
#define MXC_S_GCR_PCKDIV_PCF_96MHZ \
|
||||
(MXC_V_GCR_PCKDIV_PCF_96MHZ << MXC_F_GCR_PCKDIV_PCF_POS) /**< PCKDIV_PCF_96MHZ Setting */
|
||||
#define MXC_V_GCR_PCKDIV_PCF_48MHZ ((uint32_t)0x3UL) /**< PCKDIV_PCF_48MHZ Value */
|
||||
#define MXC_S_GCR_PCKDIV_PCF_48MHZ \
|
||||
(MXC_V_GCR_PCKDIV_PCF_48MHZ << MXC_F_GCR_PCKDIV_PCF_POS) /**< PCKDIV_PCF_48MHZ Setting */
|
||||
#define MXC_V_GCR_PCKDIV_PCF_24MHZ ((uint32_t)0x4UL) /**< PCKDIV_PCF_24MHZ Value */
|
||||
#define MXC_S_GCR_PCKDIV_PCF_24MHZ \
|
||||
(MXC_V_GCR_PCKDIV_PCF_24MHZ << MXC_F_GCR_PCKDIV_PCF_POS) /**< PCKDIV_PCF_24MHZ Setting */
|
||||
#define MXC_V_GCR_PCKDIV_PCF_12MHZ ((uint32_t)0x5UL) /**< PCKDIV_PCF_12MHZ Value */
|
||||
#define MXC_S_GCR_PCKDIV_PCF_12MHZ \
|
||||
(MXC_V_GCR_PCKDIV_PCF_12MHZ << MXC_F_GCR_PCKDIV_PCF_POS) /**< PCKDIV_PCF_12MHZ Setting */
|
||||
#define MXC_V_GCR_PCKDIV_PCF_6MHZ ((uint32_t)0x6UL) /**< PCKDIV_PCF_6MHZ Value */
|
||||
#define MXC_S_GCR_PCKDIV_PCF_6MHZ \
|
||||
(MXC_V_GCR_PCKDIV_PCF_6MHZ << MXC_F_GCR_PCKDIV_PCF_POS) /**< PCKDIV_PCF_6MHZ Setting */
|
||||
#define MXC_V_GCR_PCKDIV_PCF_3MHZ ((uint32_t)0x7UL) /**< PCKDIV_PCF_3MHZ Value */
|
||||
#define MXC_S_GCR_PCKDIV_PCF_3MHZ \
|
||||
(MXC_V_GCR_PCKDIV_PCF_3MHZ << MXC_F_GCR_PCKDIV_PCF_POS) /**< PCKDIV_PCF_3MHZ Setting */
|
||||
|
||||
#define MXC_F_GCR_PCKDIV_PCFWEN_POS 3 /**< PCKDIV_PCFWEN Position */
|
||||
#define MXC_F_GCR_PCKDIV_PCFWEN ((uint32_t)(0x1UL << MXC_F_GCR_PCKDIV_PCFWEN_POS)) /**< PCKDIV_PCFWEN Mask */
|
||||
#define MXC_V_GCR_PCKDIV_PCFWEN_DISABLED ((uint32_t)0x0UL) /**< PCKDIV_PCFWEN_DISABLED Value */
|
||||
#define MXC_S_GCR_PCKDIV_PCFWEN_DISABLED \
|
||||
(MXC_V_GCR_PCKDIV_PCFWEN_DISABLED << MXC_F_GCR_PCKDIV_PCFWEN_POS) /**< PCKDIV_PCFWEN_DISABLED Setting */
|
||||
#define MXC_V_GCR_PCKDIV_PCFWEN_ENABLED ((uint32_t)0x1UL) /**< PCKDIV_PCFWEN_ENABLED Value */
|
||||
#define MXC_S_GCR_PCKDIV_PCFWEN_ENABLED \
|
||||
(MXC_V_GCR_PCKDIV_PCFWEN_ENABLED << MXC_F_GCR_PCKDIV_PCFWEN_POS) /**< PCKDIV_PCFWEN_ENABLED Setting */
|
||||
|
||||
#define MXC_F_GCR_PCKDIV_AONCD_POS 14 /**< PCKDIV_AONCD Position */
|
||||
#define MXC_F_GCR_PCKDIV_AONCD ((uint32_t)(0x3UL << MXC_F_GCR_PCKDIV_AONCD_POS)) /**< PCKDIV_AONCD Mask */
|
||||
#define MXC_V_GCR_PCKDIV_AONCD_DIV_4 ((uint32_t)0x0UL) /**< PCKDIV_AONCD_DIV_4 Value */
|
||||
#define MXC_S_GCR_PCKDIV_AONCD_DIV_4 \
|
||||
(MXC_V_GCR_PCKDIV_AONCD_DIV_4 << MXC_F_GCR_PCKDIV_AONCD_POS) /**< PCKDIV_AONCD_DIV_4 Setting */
|
||||
#define MXC_V_GCR_PCKDIV_AONCD_DIV_8 ((uint32_t)0x1UL) /**< PCKDIV_AONCD_DIV_8 Value */
|
||||
#define MXC_S_GCR_PCKDIV_AONCD_DIV_8 \
|
||||
(MXC_V_GCR_PCKDIV_AONCD_DIV_8 << MXC_F_GCR_PCKDIV_AONCD_POS) /**< PCKDIV_AONCD_DIV_8 Setting */
|
||||
#define MXC_V_GCR_PCKDIV_AONCD_DIV_16 ((uint32_t)0x2UL) /**< PCKDIV_AONCD_DIV_16 Value */
|
||||
#define MXC_S_GCR_PCKDIV_AONCD_DIV_16 \
|
||||
(MXC_V_GCR_PCKDIV_AONCD_DIV_16 << MXC_F_GCR_PCKDIV_AONCD_POS) /**< PCKDIV_AONCD_DIV_16 Setting */
|
||||
#define MXC_V_GCR_PCKDIV_AONCD_DIV_32 ((uint32_t)0x3UL) /**< PCKDIV_AONCD_DIV_32 Value */
|
||||
#define MXC_S_GCR_PCKDIV_AONCD_DIV_32 \
|
||||
(MXC_V_GCR_PCKDIV_AONCD_DIV_32 << MXC_F_GCR_PCKDIV_AONCD_POS) /**< PCKDIV_AONCD_DIV_32 Setting */
|
||||
|
||||
/**@} end of group GCR_PCKDIV_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_PERCKCN0 GCR_PERCKCN0
|
||||
* @brief Peripheral Clock Disable.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_PERCKCN0_GPIO0D_POS 0 /**< PERCKCN0_GPIO0D Position */
|
||||
#define MXC_F_GCR_PERCKCN0_GPIO0D ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN0_GPIO0D_POS)) /**< PERCKCN0_GPIO0D Mask */
|
||||
#define MXC_V_GCR_PERCKCN0_GPIO0D_EN ((uint32_t)0x0UL) /**< PERCKCN0_GPIO0D_EN Value */
|
||||
#define MXC_S_GCR_PERCKCN0_GPIO0D_EN \
|
||||
(MXC_V_GCR_PERCKCN0_GPIO0D_EN << MXC_F_GCR_PERCKCN0_GPIO0D_POS) /**< PERCKCN0_GPIO0D_EN Setting */
|
||||
#define MXC_V_GCR_PERCKCN0_GPIO0D_DIS ((uint32_t)0x1UL) /**< PERCKCN0_GPIO0D_DIS Value */
|
||||
#define MXC_S_GCR_PERCKCN0_GPIO0D_DIS \
|
||||
(MXC_V_GCR_PERCKCN0_GPIO0D_DIS << MXC_F_GCR_PERCKCN0_GPIO0D_POS) /**< PERCKCN0_GPIO0D_DIS Setting */
|
||||
|
||||
#define MXC_F_GCR_PERCKCN0_GPIO1D_POS 1 /**< PERCKCN0_GPIO1D Position */
|
||||
#define MXC_F_GCR_PERCKCN0_GPIO1D ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN0_GPIO1D_POS)) /**< PERCKCN0_GPIO1D Mask */
|
||||
|
||||
#define MXC_F_GCR_PERCKCN0_DMAD_POS 5 /**< PERCKCN0_DMAD Position */
|
||||
#define MXC_F_GCR_PERCKCN0_DMAD ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN0_DMAD_POS)) /**< PERCKCN0_DMAD Mask */
|
||||
|
||||
#define MXC_F_GCR_PERCKCN0_SPI0D_POS 6 /**< PERCKCN0_SPI0D Position */
|
||||
#define MXC_F_GCR_PERCKCN0_SPI0D ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN0_SPI0D_POS)) /**< PERCKCN0_SPI0D Mask */
|
||||
|
||||
#define MXC_F_GCR_PERCKCN0_SPI1D_POS 7 /**< PERCKCN0_SPI1D Position */
|
||||
#define MXC_F_GCR_PERCKCN0_SPI1D ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN0_SPI1D_POS)) /**< PERCKCN0_SPI1D Mask */
|
||||
|
||||
#define MXC_F_GCR_PERCKCN0_UART0D_POS 9 /**< PERCKCN0_UART0D Position */
|
||||
#define MXC_F_GCR_PERCKCN0_UART0D ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN0_UART0D_POS)) /**< PERCKCN0_UART0D Mask */
|
||||
|
||||
#define MXC_F_GCR_PERCKCN0_I2C0D_POS 13 /**< PERCKCN0_I2C0D Position */
|
||||
#define MXC_F_GCR_PERCKCN0_I2C0D ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN0_I2C0D_POS)) /**< PERCKCN0_I2C0D Mask */
|
||||
|
||||
#define MXC_F_GCR_PERCKCN0_CRYPTOD_POS 14 /**< PERCKCN0_CRYPTOD Position */
|
||||
#define MXC_F_GCR_PERCKCN0_CRYPTOD ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN0_CRYPTOD_POS)) /**< PERCKCN0_CRYPTOD Mask */
|
||||
|
||||
#define MXC_F_GCR_PERCKCN0_T0D_POS 15 /**< PERCKCN0_T0D Position */
|
||||
#define MXC_F_GCR_PERCKCN0_T0D ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN0_T0D_POS)) /**< PERCKCN0_T0D Mask */
|
||||
|
||||
#define MXC_F_GCR_PERCKCN0_T1D_POS 16 /**< PERCKCN0_T1D Position */
|
||||
#define MXC_F_GCR_PERCKCN0_T1D ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN0_T1D_POS)) /**< PERCKCN0_T1D Mask */
|
||||
|
||||
#define MXC_F_GCR_PERCKCN0_T2D_POS 17 /**< PERCKCN0_T2D Position */
|
||||
#define MXC_F_GCR_PERCKCN0_T2D ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN0_T2D_POS)) /**< PERCKCN0_T2D Mask */
|
||||
|
||||
#define MXC_F_GCR_PERCKCN0_T3D_POS 18 /**< PERCKCN0_T3D Position */
|
||||
#define MXC_F_GCR_PERCKCN0_T3D ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN0_T3D_POS)) /**< PERCKCN0_T3D Mask */
|
||||
|
||||
/**@} end of group GCR_PERCKCN0_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_MEMCKCN GCR_MEMCKCN
|
||||
* @brief Memory Clock Control Register.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_MEMCKCN_FWS_POS 0 /**< MEMCKCN_FWS Position */
|
||||
#define MXC_F_GCR_MEMCKCN_FWS ((uint32_t)(0x7UL << MXC_F_GCR_MEMCKCN_FWS_POS)) /**< MEMCKCN_FWS Mask */
|
||||
|
||||
#define MXC_F_GCR_MEMCKCN_SYSRAM0LS_POS 16 /**< MEMCKCN_SYSRAM0LS Position */
|
||||
#define MXC_F_GCR_MEMCKCN_SYSRAM0LS \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_MEMCKCN_SYSRAM0LS_POS)) /**< MEMCKCN_SYSRAM0LS Mask */
|
||||
#define MXC_V_GCR_MEMCKCN_SYSRAM0LS_ACTIVE ((uint32_t)0x0UL) /**< MEMCKCN_SYSRAM0LS_ACTIVE Value */
|
||||
#define MXC_S_GCR_MEMCKCN_SYSRAM0LS_ACTIVE \
|
||||
(MXC_V_GCR_MEMCKCN_SYSRAM0LS_ACTIVE << MXC_F_GCR_MEMCKCN_SYSRAM0LS_POS) /**< MEMCKCN_SYSRAM0LS_ACTIVE Setting */
|
||||
#define MXC_V_GCR_MEMCKCN_SYSRAM0LS_LIGHT_SLEEP ((uint32_t)0x1UL) /**< MEMCKCN_SYSRAM0LS_LIGHT_SLEEP Value */
|
||||
#define MXC_S_GCR_MEMCKCN_SYSRAM0LS_LIGHT_SLEEP \
|
||||
(MXC_V_GCR_MEMCKCN_SYSRAM0LS_LIGHT_SLEEP \
|
||||
<< MXC_F_GCR_MEMCKCN_SYSRAM0LS_POS) /**< MEMCKCN_SYSRAM0LS_LIGHT_SLEEP Setting */
|
||||
|
||||
#define MXC_F_GCR_MEMCKCN_SYSRAM1LS_POS 17 /**< MEMCKCN_SYSRAM1LS Position */
|
||||
#define MXC_F_GCR_MEMCKCN_SYSRAM1LS \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_MEMCKCN_SYSRAM1LS_POS)) /**< MEMCKCN_SYSRAM1LS Mask */
|
||||
|
||||
#define MXC_F_GCR_MEMCKCN_SYSRAM2LS_POS 18 /**< MEMCKCN_SYSRAM2LS Position */
|
||||
#define MXC_F_GCR_MEMCKCN_SYSRAM2LS \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_MEMCKCN_SYSRAM2LS_POS)) /**< MEMCKCN_SYSRAM2LS Mask */
|
||||
|
||||
#define MXC_F_GCR_MEMCKCN_SYSRAM3LS_POS 19 /**< MEMCKCN_SYSRAM3LS Position */
|
||||
#define MXC_F_GCR_MEMCKCN_SYSRAM3LS \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_MEMCKCN_SYSRAM3LS_POS)) /**< MEMCKCN_SYSRAM3LS Mask */
|
||||
|
||||
#define MXC_F_GCR_MEMCKCN_SYSRAM4LS_POS 20 /**< MEMCKCN_SYSRAM4LS Position */
|
||||
#define MXC_F_GCR_MEMCKCN_SYSRAM4LS \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_MEMCKCN_SYSRAM4LS_POS)) /**< MEMCKCN_SYSRAM4LS Mask */
|
||||
|
||||
#define MXC_F_GCR_MEMCKCN_ICACHELS_POS 24 /**< MEMCKCN_ICACHELS Position */
|
||||
#define MXC_F_GCR_MEMCKCN_ICACHELS ((uint32_t)(0x1UL << MXC_F_GCR_MEMCKCN_ICACHELS_POS)) /**< MEMCKCN_ICACHELS Mask */
|
||||
|
||||
#define MXC_F_GCR_MEMCKCN_ROMLS_POS 29 /**< MEMCKCN_ROMLS Position */
|
||||
#define MXC_F_GCR_MEMCKCN_ROMLS ((uint32_t)(0x1UL << MXC_F_GCR_MEMCKCN_ROMLS_POS)) /**< MEMCKCN_ROMLS Mask */
|
||||
|
||||
/**@} end of group GCR_MEMCKCN_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_MEMZCN GCR_MEMZCN
|
||||
* @brief Memory Zeroize Control.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_MEMZCN_SRAM0Z_POS 0 /**< MEMZCN_SRAM0Z Position */
|
||||
#define MXC_F_GCR_MEMZCN_SRAM0Z ((uint32_t)(0x1UL << MXC_F_GCR_MEMZCN_SRAM0Z_POS)) /**< MEMZCN_SRAM0Z Mask */
|
||||
#define MXC_V_GCR_MEMZCN_SRAM0Z_NOP ((uint32_t)0x0UL) /**< MEMZCN_SRAM0Z_NOP Value */
|
||||
#define MXC_S_GCR_MEMZCN_SRAM0Z_NOP \
|
||||
(MXC_V_GCR_MEMZCN_SRAM0Z_NOP << MXC_F_GCR_MEMZCN_SRAM0Z_POS) /**< MEMZCN_SRAM0Z_NOP Setting */
|
||||
#define MXC_V_GCR_MEMZCN_SRAM0Z_START ((uint32_t)0x1UL) /**< MEMZCN_SRAM0Z_START Value */
|
||||
#define MXC_S_GCR_MEMZCN_SRAM0Z_START \
|
||||
(MXC_V_GCR_MEMZCN_SRAM0Z_START << MXC_F_GCR_MEMZCN_SRAM0Z_POS) /**< MEMZCN_SRAM0Z_START Setting */
|
||||
|
||||
#define MXC_F_GCR_MEMZCN_SRAM1Z_POS 1 /**< MEMZCN_SRAM1Z Position */
|
||||
#define MXC_F_GCR_MEMZCN_SRAM1Z ((uint32_t)(0x1UL << MXC_F_GCR_MEMZCN_SRAM1Z_POS)) /**< MEMZCN_SRAM1Z Mask */
|
||||
|
||||
#define MXC_F_GCR_MEMZCN_SRAM2Z_POS 2 /**< MEMZCN_SRAM2Z Position */
|
||||
#define MXC_F_GCR_MEMZCN_SRAM2Z ((uint32_t)(0x1UL << MXC_F_GCR_MEMZCN_SRAM2Z_POS)) /**< MEMZCN_SRAM2Z Mask */
|
||||
|
||||
#define MXC_F_GCR_MEMZCN_SRAM3Z_POS 3 /**< MEMZCN_SRAM3Z Position */
|
||||
#define MXC_F_GCR_MEMZCN_SRAM3Z ((uint32_t)(0x1UL << MXC_F_GCR_MEMZCN_SRAM3Z_POS)) /**< MEMZCN_SRAM3Z Mask */
|
||||
|
||||
#define MXC_F_GCR_MEMZCN_SRAM4Z_POS 4 /**< MEMZCN_SRAM4Z Position */
|
||||
#define MXC_F_GCR_MEMZCN_SRAM4Z ((uint32_t)(0x1UL << MXC_F_GCR_MEMZCN_SRAM4Z_POS)) /**< MEMZCN_SRAM4Z Mask */
|
||||
|
||||
#define MXC_F_GCR_MEMZCN_ICACHEZ_POS 8 /**< MEMZCN_ICACHEZ Position */
|
||||
#define MXC_F_GCR_MEMZCN_ICACHEZ ((uint32_t)(0x1UL << MXC_F_GCR_MEMZCN_ICACHEZ_POS)) /**< MEMZCN_ICACHEZ Mask */
|
||||
|
||||
/**@} end of group GCR_MEMZCN_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_SYSST GCR_SYSST
|
||||
* @brief System Status Register.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_SYSST_ICECLOCK_POS 0 /**< SYSST_ICECLOCK Position */
|
||||
#define MXC_F_GCR_SYSST_ICECLOCK ((uint32_t)(0x1UL << MXC_F_GCR_SYSST_ICECLOCK_POS)) /**< SYSST_ICECLOCK Mask */
|
||||
#define MXC_V_GCR_SYSST_ICECLOCK_UNLOCKED ((uint32_t)0x0UL) /**< SYSST_ICECLOCK_UNLOCKED Value */
|
||||
#define MXC_S_GCR_SYSST_ICECLOCK_UNLOCKED \
|
||||
(MXC_V_GCR_SYSST_ICECLOCK_UNLOCKED << MXC_F_GCR_SYSST_ICECLOCK_POS) /**< SYSST_ICECLOCK_UNLOCKED Setting */
|
||||
#define MXC_V_GCR_SYSST_ICECLOCK_LOCKED ((uint32_t)0x1UL) /**< SYSST_ICECLOCK_LOCKED Value */
|
||||
#define MXC_S_GCR_SYSST_ICECLOCK_LOCKED \
|
||||
(MXC_V_GCR_SYSST_ICECLOCK_LOCKED << MXC_F_GCR_SYSST_ICECLOCK_POS) /**< SYSST_ICECLOCK_LOCKED Setting */
|
||||
|
||||
/**@} end of group GCR_SYSST_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_RSTR1 GCR_RSTR1
|
||||
* @brief Reset 1.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_RSTR1_WDT1_POS 8 /**< RSTR1_WDT1 Position */
|
||||
#define MXC_F_GCR_RSTR1_WDT1 ((uint32_t)(0x1UL << MXC_F_GCR_RSTR1_WDT1_POS)) /**< RSTR1_WDT1 Mask */
|
||||
#define MXC_V_GCR_RSTR1_WDT1_RESET_DONE ((uint32_t)0x0UL) /**< RSTR1_WDT1_RESET_DONE Value */
|
||||
#define MXC_S_GCR_RSTR1_WDT1_RESET_DONE \
|
||||
(MXC_V_GCR_RSTR1_WDT1_RESET_DONE << MXC_F_GCR_RSTR1_WDT1_POS) /**< RSTR1_WDT1_RESET_DONE Setting */
|
||||
#define MXC_V_GCR_RSTR1_WDT1_BUSY ((uint32_t)0x1UL) /**< RSTR1_WDT1_BUSY Value */
|
||||
#define MXC_S_GCR_RSTR1_WDT1_BUSY \
|
||||
(MXC_V_GCR_RSTR1_WDT1_BUSY << MXC_F_GCR_RSTR1_WDT1_POS) /**< RSTR1_WDT1_BUSY Setting */
|
||||
|
||||
#define MXC_F_GCR_RSTR1_PUFC_POS 27 /**< RSTR1_PUFC Position */
|
||||
#define MXC_F_GCR_RSTR1_PUFC ((uint32_t)(0x1UL << MXC_F_GCR_RSTR1_PUFC_POS)) /**< RSTR1_PUFC Mask */
|
||||
|
||||
#define MXC_F_GCR_RSTR1_CSPIS_POS 28 /**< RSTR1_CSPIS Position */
|
||||
#define MXC_F_GCR_RSTR1_CSPIS ((uint32_t)(0x1UL << MXC_F_GCR_RSTR1_CSPIS_POS)) /**< RSTR1_CSPIS Mask */
|
||||
|
||||
/**@} end of group GCR_RSTR1_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_PERCKCN1 GCR_PERCKCN1
|
||||
* @brief Peripheral Clock Disable.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_PERCKCN1_TRNGD_POS 2 /**< PERCKCN1_TRNGD Position */
|
||||
#define MXC_F_GCR_PERCKCN1_TRNGD ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN1_TRNGD_POS)) /**< PERCKCN1_TRNGD Mask */
|
||||
#define MXC_V_GCR_PERCKCN1_TRNGD_EN ((uint32_t)0x0UL) /**< PERCKCN1_TRNGD_EN Value */
|
||||
#define MXC_S_GCR_PERCKCN1_TRNGD_EN \
|
||||
(MXC_V_GCR_PERCKCN1_TRNGD_EN << MXC_F_GCR_PERCKCN1_TRNGD_POS) /**< PERCKCN1_TRNGD_EN Setting */
|
||||
#define MXC_V_GCR_PERCKCN1_TRNGD_DIS ((uint32_t)0x1UL) /**< PERCKCN1_TRNGD_DIS Value */
|
||||
#define MXC_S_GCR_PERCKCN1_TRNGD_DIS \
|
||||
(MXC_V_GCR_PERCKCN1_TRNGD_DIS << MXC_F_GCR_PERCKCN1_TRNGD_POS) /**< PERCKCN1_TRNGD_DIS Setting */
|
||||
|
||||
#define MXC_F_GCR_PERCKCN1_PUFCD_POS 3 /**< PERCKCN1_PUFCD Position */
|
||||
#define MXC_F_GCR_PERCKCN1_PUFCD ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN1_PUFCD_POS)) /**< PERCKCN1_PUFCD Mask */
|
||||
|
||||
#define MXC_F_GCR_PERCKCN1_ICACHED_POS 11 /**< PERCKCN1_ICACHED Position */
|
||||
#define MXC_F_GCR_PERCKCN1_ICACHED ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN1_ICACHED_POS)) /**< PERCKCN1_ICACHED Mask */
|
||||
|
||||
#define MXC_F_GCR_PERCKCN1_CSPISD_POS 30 /**< PERCKCN1_CSPISD Position */
|
||||
#define MXC_F_GCR_PERCKCN1_CSPISD ((uint32_t)(0x1UL << MXC_F_GCR_PERCKCN1_CSPISD_POS)) /**< PERCKCN1_CSPISD Mask */
|
||||
|
||||
/**@} end of group GCR_PERCKCN1_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_EVTEN GCR_EVTEN
|
||||
* @brief Event Enable Register.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_EVTEN_CPU0DMAEVENT_POS 0 /**< EVTEN_CPU0DMAEVENT Position */
|
||||
#define MXC_F_GCR_EVTEN_CPU0DMAEVENT \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_EVTEN_CPU0DMAEVENT_POS)) /**< EVTEN_CPU0DMAEVENT Mask */
|
||||
|
||||
#define MXC_F_GCR_EVTEN_CPU0RXEVENT_POS 1 /**< EVTEN_CPU0RXEVENT Position */
|
||||
#define MXC_F_GCR_EVTEN_CPU0RXEVENT \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_EVTEN_CPU0RXEVENT_POS)) /**< EVTEN_CPU0RXEVENT Mask */
|
||||
|
||||
#define MXC_F_GCR_EVTEN_CPU0TXEVENT_POS 2 /**< EVTEN_CPU0TXEVENT Position */
|
||||
#define MXC_F_GCR_EVTEN_CPU0TXEVENT \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_EVTEN_CPU0TXEVENT_POS)) /**< EVTEN_CPU0TXEVENT Mask */
|
||||
|
||||
/**@} end of group GCR_EVTEN_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_REVISION GCR_REVISION
|
||||
* @brief Revision Register.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_REVISION_REVISION_POS 0 /**< REVISION_REVISION Position */
|
||||
#define MXC_F_GCR_REVISION_REVISION \
|
||||
((uint32_t)(0xFFFFUL << MXC_F_GCR_REVISION_REVISION_POS)) /**< REVISION_REVISION Mask */
|
||||
|
||||
/**@} end of group GCR_REVISION_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_SYSSIE GCR_SYSSIE
|
||||
* @brief System Status Interrupt Enable Register.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_SYSSIE_ICEULIE_POS 0 /**< SYSSIE_ICEULIE Position */
|
||||
#define MXC_F_GCR_SYSSIE_ICEULIE ((uint32_t)(0x1UL << MXC_F_GCR_SYSSIE_ICEULIE_POS)) /**< SYSSIE_ICEULIE Mask */
|
||||
#define MXC_V_GCR_SYSSIE_ICEULIE_DIS ((uint32_t)0x0UL) /**< SYSSIE_ICEULIE_DIS Value */
|
||||
#define MXC_S_GCR_SYSSIE_ICEULIE_DIS \
|
||||
(MXC_V_GCR_SYSSIE_ICEULIE_DIS << MXC_F_GCR_SYSSIE_ICEULIE_POS) /**< SYSSIE_ICEULIE_DIS Setting */
|
||||
#define MXC_V_GCR_SYSSIE_ICEULIE_EN ((uint32_t)0x1UL) /**< SYSSIE_ICEULIE_EN Value */
|
||||
#define MXC_S_GCR_SYSSIE_ICEULIE_EN \
|
||||
(MXC_V_GCR_SYSSIE_ICEULIE_EN << MXC_F_GCR_SYSSIE_ICEULIE_POS) /**< SYSSIE_ICEULIE_EN Setting */
|
||||
|
||||
/**@} end of group GCR_SYSSIE_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_ECCERR GCR_ECCERR
|
||||
* @brief ECC Error Register
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_ECCERR_SYSRAM0ECCERR_POS 0 /**< ECCERR_SYSRAM0ECCERR Position */
|
||||
#define MXC_F_GCR_ECCERR_SYSRAM0ECCERR \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_ECCERR_SYSRAM0ECCERR_POS)) /**< ECCERR_SYSRAM0ECCERR Mask */
|
||||
|
||||
#define MXC_F_GCR_ECCERR_SYSRAM1ECCERR_POS 1 /**< ECCERR_SYSRAM1ECCERR Position */
|
||||
#define MXC_F_GCR_ECCERR_SYSRAM1ECCERR \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_ECCERR_SYSRAM1ECCERR_POS)) /**< ECCERR_SYSRAM1ECCERR Mask */
|
||||
|
||||
#define MXC_F_GCR_ECCERR_SYSRAM2ECCERR_POS 2 /**< ECCERR_SYSRAM2ECCERR Position */
|
||||
#define MXC_F_GCR_ECCERR_SYSRAM2ECCERR \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_ECCERR_SYSRAM2ECCERR_POS)) /**< ECCERR_SYSRAM2ECCERR Mask */
|
||||
|
||||
#define MXC_F_GCR_ECCERR_SYSRAM3ECCERR_POS 3 /**< ECCERR_SYSRAM3ECCERR Position */
|
||||
#define MXC_F_GCR_ECCERR_SYSRAM3ECCERR \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_ECCERR_SYSRAM3ECCERR_POS)) /**< ECCERR_SYSRAM3ECCERR Mask */
|
||||
|
||||
#define MXC_F_GCR_ECCERR_SYSRAM4ECCERR_POS 4 /**< ECCERR_SYSRAM4ECCERR Position */
|
||||
#define MXC_F_GCR_ECCERR_SYSRAM4ECCERR \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_ECCERR_SYSRAM4ECCERR_POS)) /**< ECCERR_SYSRAM4ECCERR Mask */
|
||||
|
||||
/**@} end of group GCR_ECCERR_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_ECCNDED GCR_ECCNDED
|
||||
* @brief ECC Not Double Error Detect Register
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_ECCNDED_SYSRAM0ECCNDED_POS 0 /**< ECCNDED_SYSRAM0ECCNDED Position */
|
||||
#define MXC_F_GCR_ECCNDED_SYSRAM0ECCNDED \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_ECCNDED_SYSRAM0ECCNDED_POS)) /**< ECCNDED_SYSRAM0ECCNDED Mask */
|
||||
|
||||
#define MXC_F_GCR_ECCNDED_SYSRAM1ECCNDED_POS 1 /**< ECCNDED_SYSRAM1ECCNDED Position */
|
||||
#define MXC_F_GCR_ECCNDED_SYSRAM1ECCNDED \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_ECCNDED_SYSRAM1ECCNDED_POS)) /**< ECCNDED_SYSRAM1ECCNDED Mask */
|
||||
|
||||
#define MXC_F_GCR_ECCNDED_SYSRAM2ECCNDED_POS 2 /**< ECCNDED_SYSRAM2ECCNDED Position */
|
||||
#define MXC_F_GCR_ECCNDED_SYSRAM2ECCNDED \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_ECCNDED_SYSRAM2ECCNDED_POS)) /**< ECCNDED_SYSRAM2ECCNDED Mask */
|
||||
|
||||
#define MXC_F_GCR_ECCNDED_SYSRAM3ECCNDED_POS 3 /**< ECCNDED_SYSRAM3ECCNDED Position */
|
||||
#define MXC_F_GCR_ECCNDED_SYSRAM3ECCNDED \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_ECCNDED_SYSRAM3ECCNDED_POS)) /**< ECCNDED_SYSRAM3ECCNDED Mask */
|
||||
|
||||
#define MXC_F_GCR_ECCNDED_SYSRAM4ECCNDED_POS 4 /**< ECCNDED_SYSRAM4ECCNDED Position */
|
||||
#define MXC_F_GCR_ECCNDED_SYSRAM4ECCNDED \
|
||||
((uint32_t)(0x1UL << MXC_F_GCR_ECCNDED_SYSRAM4ECCNDED_POS)) /**< ECCNDED_SYSRAM4ECCNDED Mask */
|
||||
|
||||
/**@} end of group GCR_ECCNDED_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_ECCIRQEN GCR_ECCIRQEN
|
||||
* @brief ECC IRQ Enable Register
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_ECCIRQEN_ECCERAD_POS 0 /**< ECCIRQEN_ECCERAD Position */
|
||||
#define MXC_F_GCR_ECCIRQEN_ECCERAD \
|
||||
((uint32_t)(0x7FFFFFFFUL << MXC_F_GCR_ECCIRQEN_ECCERAD_POS)) /**< ECCIRQEN_ECCERAD Mask */
|
||||
|
||||
/**@} end of group GCR_ECCIRQEN_Register */
|
||||
|
||||
/**
|
||||
* @ingroup gcr_registers
|
||||
* @defgroup GCR_ECCERRAD GCR_ECCERRAD
|
||||
* @brief ECC Error Address Register
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_GCR_ECCERRAD_ECCERAD_POS 0 /**< ECCERRAD_ECCERAD Position */
|
||||
#define MXC_F_GCR_ECCERRAD_ECCERAD \
|
||||
((uint32_t)(0x7FFFFFFFUL << MXC_F_GCR_ECCERRAD_ECCERAD_POS)) /**< ECCERRAD_ECCERAD Mask */
|
||||
|
||||
/**@} end of group GCR_ECCERRAD_Register */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _GCR_REGS_H_ */
|
||||
@@ -1,6 +0,0 @@
|
||||
/* Autogenerated with ../../../../src/helper/bin2char.sh */
|
||||
0xdf,0xf8,0x44,0x40,0xd0,0xf8,0x00,0x80,0xb8,0xf1,0x00,0x0f,0x1a,0xd0,0x47,0x68,
|
||||
0x47,0x45,0xf7,0xd0,0x22,0x60,0x02,0xf1,0x04,0x02,0x57,0xf8,0x04,0x8b,0xc4,0xf8,
|
||||
0x30,0x80,0xa5,0x68,0x45,0xf0,0x01,0x05,0xa5,0x60,0xd4,0xf8,0x08,0x80,0x18,0xf0,
|
||||
0x01,0x0f,0xfa,0xd1,0x8f,0x42,0x28,0xbf,0x00,0xf1,0x08,0x07,0x47,0x60,0x01,0x3b,
|
||||
0x03,0xb1,0xdf,0xe7,0x00,0xbe,0x00,0xbf,0x00,0x00,0x00,0x40,
|
||||
@@ -1,59 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2016 by Maxim Integrated *
|
||||
* Kevin Gillespie <kevin.gillespie@maximintegrated.com *
|
||||
***************************************************************************/
|
||||
|
||||
.text
|
||||
.syntax unified
|
||||
.cpu cortex-m3
|
||||
.thumb
|
||||
.thumb_func
|
||||
|
||||
/*
|
||||
* Params :
|
||||
* r0 = workarea start
|
||||
* r1 = workarea end
|
||||
* r2 = target address
|
||||
* r3 = count (32bit words)
|
||||
* r4 = pFLASH_CTRL_BASE
|
||||
*
|
||||
* Clobbered:
|
||||
* r5 = FLASHWRITECMD
|
||||
* r7 - rp
|
||||
* r8 - wp, tmp
|
||||
*/
|
||||
|
||||
write:
|
||||
|
||||
wait_fifo:
|
||||
ldr r8, [r0, #0] /* read wp */
|
||||
cmp r8, #0 /* abort if wp == 0 */
|
||||
beq exit
|
||||
ldr r7, [r0, #4] /* read rp */
|
||||
cmp r7, r8 /* wait until rp != wp */
|
||||
beq wait_fifo
|
||||
|
||||
mainloop:
|
||||
str r2, [r4, #0x00] /* FLSH_ADDR - write address */
|
||||
add r2, r2, #4 /* increment target address */
|
||||
ldr r8, [r7], #4
|
||||
str r8, [r4, #0x30] /* FLSH_DATA0 - write data */
|
||||
ldr r5, [r4, #0x08] /* FLSH_CN */
|
||||
orr r5, r5, #1
|
||||
str r5, [r4, #0x08] /* FLSH_CN - enable write */
|
||||
busy:
|
||||
ldr r8, [r4, #0x08] /* FLSH_CN */
|
||||
tst r8, #1
|
||||
bne busy
|
||||
|
||||
cmp r7, r1 /* wrap rp at end of buffer */
|
||||
it cs
|
||||
addcs r7, r0, #8 /* skip loader args */
|
||||
str r7, [r0, #4] /* store rp */
|
||||
subs r3, r3, #1 /* decrement word count */
|
||||
cbz r3, exit /* loop if not done */
|
||||
b wait_fifo
|
||||
exit:
|
||||
bkpt
|
||||
282
contrib/loaders/flash/max32xxx/max32xxx_write.c
Normal file
282
contrib/loaders/flash/max32xxx/max32xxx_write.c
Normal file
@@ -0,0 +1,282 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2015 by Maxim Integrated *
|
||||
* Copyright (C) 2025 Analog Devices, Inc. *
|
||||
***************************************************************************/
|
||||
|
||||
/***** Includes *****/
|
||||
#ifdef ALGO_TEST
|
||||
#include "mxc_device.h"
|
||||
#endif
|
||||
|
||||
#include "tpu_regs.h"
|
||||
#include "gcr_regs.h"
|
||||
#include "flc_regs.h"
|
||||
#include "algo_options.h"
|
||||
|
||||
#ifdef ALGO_TEST
|
||||
#include <stdio.h>
|
||||
#else
|
||||
#define printf(...)
|
||||
#endif
|
||||
|
||||
/***** Definitions *****/
|
||||
#define MXC_BASE_TPU ((uint32_t)0x40001000UL)
|
||||
#define MXC_TPU ((struct mxc_tpu_regs *)MXC_BASE_TPU)
|
||||
#define MXC_BASE_GCR ((uint32_t)0x40000000UL)
|
||||
#define MXC_GCR ((struct mxc_gcr_regs *)MXC_BASE_GCR)
|
||||
|
||||
/******************************************************************************/
|
||||
#define getbyte(temp8) \
|
||||
/* Wait for the Read FIFO to not equal the Write FIFO */ \
|
||||
do { while (*read_ptr == *write_ptr); \
|
||||
temp8 = **read_ptr; \
|
||||
/* Increment and wrap around the read pointer */ \
|
||||
if ((*read_ptr + 1) >= (uint8_t *)(work_end - 8 - 256)) { \
|
||||
*read_ptr = (uint8_t *)(work_start + 8); \
|
||||
} else { \
|
||||
(*read_ptr)++; \
|
||||
} \
|
||||
len--; \
|
||||
addr++; } while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#ifndef ALGO_TEST
|
||||
__attribute__ ((naked, section(".algo")))
|
||||
#endif
|
||||
void algo_write(uint8_t *work_start, uint8_t *work_end, uint32_t len, uint32_t addr)
|
||||
{
|
||||
printf(" > %s starting\n", __func__);
|
||||
|
||||
volatile uint8_t * (*write_ptr) = (volatile uint8_t **)work_start;
|
||||
volatile uint8_t * (*read_ptr) = (volatile uint8_t **)(work_start + 4);
|
||||
uint32_t *flc_base = (uint32_t *)(work_end - 4 - 128);
|
||||
uint32_t *options = (uint32_t *)(work_end - 8 - 128);
|
||||
uint32_t *enc_buffer = (uint32_t *)(work_end - 8 - 256);
|
||||
uint8_t temp8;
|
||||
uint32_t addr_save;
|
||||
int i;
|
||||
struct mxc_flc_regs *MXC_FLC = (struct mxc_flc_regs *)*flc_base;
|
||||
|
||||
printf(" > w%08x r%08x o%08x f%08x b%08x b%08x\n",
|
||||
(uint32_t)write_ptr, (uint32_t)read_ptr, (uint32_t)*options, (uint32_t)*flc_base,
|
||||
(uint32_t)enc_buffer, (uint32_t)(enc_buffer + 256));
|
||||
|
||||
if (*options & OPTIONS_ENC) {
|
||||
/* Enable Memory Protection */
|
||||
MXC_GCR->scon |= MXC_F_GCR_SCON_MEMPROT_EN;
|
||||
|
||||
/* Set the keysize */
|
||||
if (*options & OPTIONS_KEYSIZE)
|
||||
MXC_GCR->scon |= MXC_F_GCR_SCON_MEMPROT_KEYSZ;
|
||||
else
|
||||
MXC_GCR->scon &= ~(MXC_F_GCR_SCON_MEMPROT_KEYSZ);
|
||||
} else {
|
||||
/* Disable memory protection */
|
||||
MXC_GCR->scon &= ~MXC_F_GCR_SCON_MEMPROT_EN;
|
||||
}
|
||||
|
||||
if (*options & OPTIONS_ENC) {
|
||||
/* Setup the AES */
|
||||
|
||||
/* Enable CRYPTO clock */
|
||||
if ((MXC_GCR->clkcn & MXC_F_GCR_CLKCN_HIRC_EN) == 0)
|
||||
MXC_GCR->clkcn |= MXC_F_GCR_CLKCN_HIRC_EN;
|
||||
|
||||
/* Disable CRYPTO clock gate */
|
||||
if (MXC_GCR->perckcn0 & MXC_F_GCR_PERCKCN0_CRYPTOD)
|
||||
MXC_GCR->perckcn0 &= ~(MXC_F_GCR_PERCKCN0_CRYPTOD);
|
||||
|
||||
/* Reset Crypto block and clear state */
|
||||
MXC_TPU->ctrl = MXC_F_TPU_CTRL_RST;
|
||||
|
||||
/* Set the legacy bit */
|
||||
MXC_TPU->ctrl |= MXC_F_TPU_CTRL_FLAG_MODE;
|
||||
|
||||
/* Byte swap the input and output */
|
||||
MXC_TPU->ctrl |= MXC_F_TPU_CTRL_BSO;
|
||||
MXC_TPU->ctrl |= MXC_F_TPU_CTRL_BSI;
|
||||
}
|
||||
|
||||
while (len) {
|
||||
if ((*options & OPTIONS_128) == 0) {
|
||||
/* Save the current address before we read from the working area */
|
||||
addr_save = addr;
|
||||
|
||||
/* 32-bit write */
|
||||
MXC_FLC->cn |= MXC_F_FLC_CN_WDTH;
|
||||
|
||||
enc_buffer[0] = 0;
|
||||
for (i = 0; i < 4; i++) {
|
||||
/* Get data from the working area, pad with 0xFF */
|
||||
if (len) {
|
||||
getbyte(temp8);
|
||||
__asm("nop\n");
|
||||
} else {
|
||||
temp8 = 0xFF;
|
||||
__asm("nop\n");
|
||||
}
|
||||
enc_buffer[0] |= (temp8 << (i * 8));
|
||||
}
|
||||
|
||||
/* 32-bit write */
|
||||
MXC_FLC->cn |= MXC_F_FLC_CN_WDTH;
|
||||
|
||||
MXC_FLC->addr = addr_save;
|
||||
MXC_FLC->data[0] = enc_buffer[0];
|
||||
|
||||
/* Enable the write */
|
||||
MXC_FLC->cn |= MXC_F_FLC_CN_WR;
|
||||
|
||||
/* Wait for the operation to complete */
|
||||
do {} while (MXC_FLC->cn & MXC_F_FLC_CN_WR);
|
||||
|
||||
/* Check access violations */
|
||||
if (MXC_FLC->intr & MXC_F_FLC_INTR_AF) {
|
||||
MXC_FLC->intr &= ~MXC_F_FLC_INTR_AF;
|
||||
#ifndef ALGO_TEST
|
||||
#ifdef __riscv
|
||||
__asm("ebreak\n");
|
||||
#else
|
||||
__asm("bkpt\n");
|
||||
#endif
|
||||
#else
|
||||
printf(" > Error writing to flash\n");
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
/* Save the current address before we read from the working area */
|
||||
addr_save = addr;
|
||||
|
||||
/* Fill the buffer with the plain text data from the working area */
|
||||
for (i = 0; i < 4; i++) {
|
||||
/* Get data from the working area, pad with 0xFF */
|
||||
enc_buffer[i] = 0;
|
||||
if (len) {
|
||||
getbyte(temp8);
|
||||
__asm("nop\n");
|
||||
} else {
|
||||
temp8 = 0xFF;
|
||||
__asm("nop\n");
|
||||
}
|
||||
enc_buffer[i] |= (temp8 << (0));
|
||||
/* Get data from the working area, pad with 0xFF */
|
||||
if (len) {
|
||||
getbyte(temp8);
|
||||
__asm("nop\n");
|
||||
} else {
|
||||
temp8 = 0xFF;
|
||||
__asm("nop\n");
|
||||
}
|
||||
enc_buffer[i] |= (temp8 << (8));
|
||||
/* Get data from the working area, pad with 0xFF */
|
||||
if (len) {
|
||||
getbyte(temp8);
|
||||
__asm("nop\n");
|
||||
} else {
|
||||
temp8 = 0xFF;
|
||||
__asm("nop\n");
|
||||
}
|
||||
enc_buffer[i] |= (temp8 << (16));
|
||||
/* Get data from the working area, pad with 0xFF */
|
||||
if (len) {
|
||||
getbyte(temp8);
|
||||
__asm("nop\n");
|
||||
} else {
|
||||
temp8 = 0xFF;
|
||||
__asm("nop\n");
|
||||
}
|
||||
enc_buffer[i] |= (temp8 << (24));
|
||||
}
|
||||
|
||||
if (*options & OPTIONS_ENC) {
|
||||
/* XOR data with the address */
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (*options & OPTIONS_RELATIVE_XOR)
|
||||
enc_buffer[i] ^= ((addr_save & 0x00FFFFFF) + i * 4);
|
||||
else
|
||||
enc_buffer[i] ^= (addr_save + i * 4);
|
||||
}
|
||||
|
||||
/* Encrypt the plain text
|
||||
* Clear interrupt flags*/
|
||||
MXC_TPU->ctrl |= MXC_F_TPU_CTRL_CPH_DONE;
|
||||
|
||||
MXC_TPU->cipher_ctrl = ((0x0 << MXC_F_TPU_CIPHER_CTRL_MODE_POS) |
|
||||
(0x0 << MXC_F_TPU_CIPHER_CTRL_ENC_POS));
|
||||
|
||||
if (*options & OPTIONS_KEYSIZE) {
|
||||
/* ECB, AES-256, encrypt */
|
||||
MXC_TPU->cipher_ctrl |=
|
||||
(0x3 << MXC_F_TPU_CIPHER_CTRL_CIPHER_POS);
|
||||
} else {
|
||||
/* ECB, AES-128, encrypt */
|
||||
MXC_TPU->cipher_ctrl |=
|
||||
(0x1 << MXC_F_TPU_CIPHER_CTRL_CIPHER_POS);
|
||||
}
|
||||
|
||||
/* Set the key source */
|
||||
MXC_TPU->cipher_ctrl =
|
||||
((MXC_TPU->cipher_ctrl & ~MXC_F_TPU_CIPHER_CTRL_SRC) |
|
||||
(0x3 << MXC_F_TPU_CIPHER_CTRL_SRC_POS));
|
||||
|
||||
/* Copy data to start the operation */
|
||||
MXC_TPU->din[0] = enc_buffer[0];
|
||||
MXC_TPU->din[1] = enc_buffer[1];
|
||||
MXC_TPU->din[2] = enc_buffer[2];
|
||||
MXC_TPU->din[3] = enc_buffer[3];
|
||||
|
||||
/* Wait until operation is complete */
|
||||
do {} while (!(MXC_TPU->ctrl & MXC_F_TPU_CTRL_CPH_DONE));
|
||||
|
||||
/* Copy the data out */
|
||||
enc_buffer[0] = MXC_TPU->dout[0];
|
||||
enc_buffer[1] = MXC_TPU->dout[1];
|
||||
enc_buffer[2] = MXC_TPU->dout[2];
|
||||
enc_buffer[3] = MXC_TPU->dout[3];
|
||||
}
|
||||
|
||||
/* 128-bit write */
|
||||
MXC_FLC->cn &= ~MXC_F_FLC_CN_WDTH;
|
||||
|
||||
MXC_FLC->addr = addr_save;
|
||||
MXC_FLC->data[0] = enc_buffer[0];
|
||||
MXC_FLC->data[1] = enc_buffer[1];
|
||||
MXC_FLC->data[2] = enc_buffer[2];
|
||||
MXC_FLC->data[3] = enc_buffer[3];
|
||||
|
||||
/* Enable the write */
|
||||
MXC_FLC->cn |= MXC_F_FLC_CN_WR;
|
||||
|
||||
/* Wait for the operation to complete */
|
||||
do {} while (MXC_FLC->cn & MXC_F_FLC_CN_WR);
|
||||
|
||||
/* Check access violations */
|
||||
if (MXC_FLC->intr & MXC_F_FLC_INTR_AF) {
|
||||
MXC_FLC->intr &= ~MXC_F_FLC_INTR_AF;
|
||||
#ifndef ALGO_TEST
|
||||
#ifdef __riscv
|
||||
__asm("ebreak\n");
|
||||
#else
|
||||
__asm("bkpt\n");
|
||||
#endif
|
||||
printf(" > Error writing to flash\n");
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef ALGO_TEST
|
||||
#ifdef __riscv
|
||||
__asm("ebreak\n");
|
||||
#else
|
||||
__asm("bkpt\n");
|
||||
#endif
|
||||
#else
|
||||
printf(" > %s returning\n", __func__);
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
57
contrib/loaders/flash/max32xxx/max32xxx_write_arm.inc
Normal file
57
contrib/loaders/flash/max32xxx/max32xxx_write_arm.inc
Normal file
@@ -0,0 +1,57 @@
|
||||
/* Autogenerated with ../../../../src/helper/bin2char.sh */
|
||||
0x51,0xe9,0x22,0x54,0x15,0xf0,0x02,0x0f,0x4f,0xf0,0x80,0x45,0x00,0x93,0xa1,0xf5,
|
||||
0x84,0x76,0x2f,0x68,0x00,0xf0,0x90,0x80,0x47,0xf4,0x80,0x17,0x2f,0x60,0x51,0xf8,
|
||||
0x88,0x7c,0x17,0xf0,0x40,0x0f,0x2f,0x68,0x14,0xbf,0x47,0xf4,0x00,0x17,0x27,0xf4,
|
||||
0x00,0x17,0x2f,0x60,0x51,0xf8,0x88,0x5c,0xad,0x07,0x1e,0xd5,0x4f,0xf0,0x80,0x45,
|
||||
0xaf,0x68,0x7b,0x03,0x5e,0xbf,0xaf,0x68,0x47,0xf4,0x80,0x27,0xaf,0x60,0x6f,0x6a,
|
||||
0x7f,0x04,0x42,0xbf,0x6f,0x6a,0x27,0xf4,0x80,0x47,0x6f,0x62,0xc0,0x4d,0x01,0x27,
|
||||
0x2f,0x60,0x2f,0x68,0x47,0xf4,0x80,0x47,0x2f,0x60,0x2f,0x68,0x47,0xf0,0x10,0x07,
|
||||
0x2f,0x60,0x2f,0x68,0x47,0xf0,0x20,0x07,0x2f,0x60,0xa1,0xf1,0xfc,0x05,0x03,0x95,
|
||||
0x00,0xf1,0x08,0x05,0x01,0x95,0xa1,0xf5,0x82,0x75,0x02,0x95,0xb4,0x4d,0xa1,0xf5,
|
||||
0x80,0x7c,0x00,0x2a,0x00,0xf0,0x63,0x81,0x51,0xf8,0x88,0x7c,0x17,0xf0,0x01,0x0e,
|
||||
0x50,0xd1,0xa7,0x68,0x47,0xf0,0x10,0x07,0xa7,0x60,0x00,0x9f,0xc6,0xf8,0x00,0xe0,
|
||||
0x00,0x2a,0x44,0xd0,0xd0,0xf8,0x04,0x90,0xd0,0xf8,0x00,0x80,0xc1,0x45,0xf9,0xd0,
|
||||
0xd0,0xf8,0x04,0x80,0xd0,0xf8,0x04,0x90,0x98,0xf8,0x00,0x80,0x09,0xf1,0x01,0x09,
|
||||
0x4e,0x45,0x8d,0xbf,0xd0,0xf8,0x04,0x90,0x01,0x9b,0x43,0x60,0x09,0xf1,0x01,0x09,
|
||||
0x88,0xbf,0xc0,0xf8,0x04,0x90,0x01,0x3a,0x01,0x37,0x33,0x68,0x08,0xfa,0x0e,0xf8,
|
||||
0x0e,0xf1,0x08,0x0e,0x43,0xea,0x08,0x08,0xbe,0xf1,0x20,0x0f,0xc6,0xf8,0x00,0x80,
|
||||
0xd6,0xd1,0xd4,0xf8,0x08,0xe0,0x00,0x9b,0x4e,0xf0,0x10,0x0e,0xc4,0xf8,0x08,0xe0,
|
||||
0x23,0x60,0x33,0x68,0x23,0x63,0xa3,0x68,0x43,0xf0,0x01,0x03,0xa3,0x60,0xa3,0x68,
|
||||
0xdb,0x07,0xfc,0xd4,0x63,0x6a,0x9b,0x07,0x04,0xd5,0x63,0x6a,0x23,0xf0,0x02,0x03,
|
||||
0x63,0x62,0x00,0xbe,0x00,0x97,0xac,0xe7,0x27,0xf4,0x80,0x17,0x79,0xe7,0x4f,0xf0,
|
||||
0xff,0x08,0xd2,0xe7,0xa1,0xf5,0x86,0x78,0x00,0x9f,0xc1,0x46,0x00,0x23,0x49,0xf8,
|
||||
0x04,0x3f,0x00,0x2a,0x00,0xf0,0x06,0x81,0xd0,0xf8,0x04,0xa0,0xd0,0xf8,0x00,0xe0,
|
||||
0xf2,0x45,0xf9,0xd0,0xd0,0xf8,0x04,0xe0,0xd0,0xf8,0x04,0xa0,0x9e,0xf8,0x00,0xe0,
|
||||
0x0a,0xf1,0x01,0x0a,0x56,0x45,0x8d,0xbf,0xd0,0xf8,0x04,0xa0,0x01,0x9b,0x43,0x60,
|
||||
0x0a,0xf1,0x01,0x0a,0x88,0xbf,0xc0,0xf8,0x04,0xa0,0x01,0x3a,0x01,0x37,0xc9,0xf8,
|
||||
0x00,0xe0,0x00,0x2a,0x00,0xf0,0xe9,0x80,0xd0,0xf8,0x04,0xb0,0xd0,0xf8,0x00,0xa0,
|
||||
0xd3,0x45,0xf9,0xd0,0xd0,0xf8,0x04,0xa0,0x9a,0xf8,0x00,0xb0,0xd0,0xf8,0x04,0xa0,
|
||||
0x0a,0xf1,0x01,0x0a,0x56,0x45,0x8d,0xbf,0xd0,0xf8,0x04,0xa0,0x01,0x9b,0x43,0x60,
|
||||
0x0a,0xf1,0x01,0x0a,0x88,0xbf,0xc0,0xf8,0x04,0xa0,0x01,0x3a,0x01,0x37,0x4e,0xea,
|
||||
0x0b,0x2e,0xc9,0xf8,0x00,0xe0,0x00,0x2a,0x00,0xf0,0xca,0x80,0xd0,0xf8,0x04,0xb0,
|
||||
0xd0,0xf8,0x00,0xa0,0xd3,0x45,0xf9,0xd0,0xd0,0xf8,0x04,0xa0,0x9a,0xf8,0x00,0xb0,
|
||||
0xd0,0xf8,0x04,0xa0,0x0a,0xf1,0x01,0x0a,0x56,0x45,0x8d,0xbf,0xd0,0xf8,0x04,0xa0,
|
||||
0x01,0x9b,0x43,0x60,0x0a,0xf1,0x01,0x0a,0x88,0xbf,0xc0,0xf8,0x04,0xa0,0x01,0x3a,
|
||||
0x01,0x37,0x4e,0xea,0x0b,0x4e,0xc9,0xf8,0x00,0xe0,0x00,0x2a,0x00,0xf0,0xab,0x80,
|
||||
0xd0,0xf8,0x04,0xb0,0xd0,0xf8,0x00,0xa0,0xd3,0x45,0xf9,0xd0,0xd0,0xf8,0x04,0xa0,
|
||||
0x9a,0xf8,0x00,0xb0,0xd0,0xf8,0x04,0xa0,0x0a,0xf1,0x01,0x0a,0x56,0x45,0x8d,0xbf,
|
||||
0xd0,0xf8,0x04,0xa0,0x01,0x9b,0x43,0x60,0x0a,0xf1,0x01,0x0a,0x88,0xbf,0xc0,0xf8,
|
||||
0x04,0xa0,0x01,0x3a,0x01,0x37,0x03,0x9b,0x4e,0xea,0x0b,0x6e,0x99,0x45,0xc9,0xf8,
|
||||
0x00,0xe0,0x7f,0xf4,0x73,0xaf,0x51,0xf8,0x88,0x3c,0x9b,0x07,0x55,0xd5,0x00,0x9b,
|
||||
0x4f,0xf0,0x00,0x0e,0x23,0xf0,0x7f,0x4a,0x51,0xf8,0x88,0x3c,0x58,0xf8,0x04,0x9f,
|
||||
0x9b,0x06,0x56,0xbf,0x00,0x9b,0x0a,0xeb,0x0e,0x0b,0x0e,0xeb,0x03,0x0b,0x0e,0xf1,
|
||||
0x04,0x0e,0x8b,0xea,0x09,0x09,0xbe,0xf1,0x10,0x0f,0xc8,0xf8,0x00,0x90,0xeb,0xd1,
|
||||
0xd5,0xf8,0x00,0xe0,0x4e,0xf0,0x00,0x6e,0xc5,0xf8,0x00,0xe0,0x4f,0xf0,0x00,0x0e,
|
||||
0xc5,0xf8,0x04,0xe0,0x51,0xf8,0x88,0x3c,0xd5,0xf8,0x04,0xe0,0x5b,0x06,0x4c,0xbf,
|
||||
0x4e,0xf0,0x30,0x0e,0x4e,0xf0,0x10,0x0e,0xc5,0xf8,0x04,0xe0,0xd5,0xf8,0x04,0xe0,
|
||||
0x4e,0xf0,0x0c,0x0e,0xc5,0xf8,0x04,0xe0,0x33,0x68,0x2b,0x62,0x02,0x9b,0x1b,0x68,
|
||||
0x6b,0x62,0xdc,0xf8,0x00,0x30,0xab,0x62,0x51,0xf8,0xfc,0x3c,0xeb,0x62,0xd5,0xf8,
|
||||
0x00,0xe0,0x1e,0xf0,0x00,0x6f,0xfa,0xd0,0xd5,0xf8,0x30,0xe0,0xc6,0xf8,0x00,0xe0,
|
||||
0x02,0x9b,0xd5,0xf8,0x34,0xe0,0xc3,0xf8,0x00,0xe0,0xd5,0xf8,0x38,0xe0,0xcc,0xf8,
|
||||
0x00,0xe0,0xd5,0xf8,0x3c,0xe0,0x41,0xf8,0xfc,0xec,0xd4,0xf8,0x08,0xe0,0x00,0x9b,
|
||||
0x2e,0xf0,0x10,0x0e,0xc4,0xf8,0x08,0xe0,0x23,0x60,0x33,0x68,0x23,0x63,0x02,0x9b,
|
||||
0x1b,0x68,0x63,0x63,0xdc,0xf8,0x00,0x30,0xa3,0x63,0x51,0xf8,0xfc,0x3c,0xe3,0x63,
|
||||
0xa3,0x68,0x43,0xf0,0x01,0x03,0xa3,0x60,0xa3,0x68,0xdb,0x07,0xfc,0xd4,0x63,0x6a,
|
||||
0x9b,0x07,0x7f,0xf5,0xef,0xae,0x63,0x6a,0x23,0xf0,0x02,0x03,0x63,0x62,0x00,0xbe,
|
||||
0x00,0x10,0x00,0x40,0x4f,0xf0,0xff,0x0e,0x11,0xe7,0x4f,0xf0,0xff,0x0b,0x2e,0xe7,
|
||||
0x4f,0xf0,0xff,0x0b,0x4d,0xe7,0x4f,0xf0,0xff,0x0b,0x6c,0xe7,
|
||||
572
contrib/loaders/flash/max32xxx/tpu_regs.h
Normal file
572
contrib/loaders/flash/max32xxx/tpu_regs.h
Normal file
@@ -0,0 +1,572 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2016 by Maxim Integrated *
|
||||
* Copyright (C) 2025 Analog Devices, Inc. *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef _TPU_REGS_H_
|
||||
#define _TPU_REGS_H_
|
||||
|
||||
/* **** Includes **** */
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if defined(__ICCARM__)
|
||||
#pragma system_include
|
||||
#endif
|
||||
|
||||
/*/ @cond */
|
||||
/*
|
||||
If types are not defined elsewhere (CMSIS) define them here
|
||||
*/
|
||||
#ifndef __IO
|
||||
#define __IO volatile
|
||||
#endif
|
||||
#ifndef __I
|
||||
#define __I volatile const
|
||||
#endif
|
||||
#ifndef __O
|
||||
#define __O volatile
|
||||
#endif
|
||||
#ifndef __R
|
||||
#define __R volatile const
|
||||
#endif
|
||||
/*/ @endcond */
|
||||
|
||||
/* **** Definitions **** */
|
||||
|
||||
/**
|
||||
* @ingroup tpu
|
||||
* @defgroup tpu_registers Registers
|
||||
* @brief Registers, Bit Masks and Bit Positions for the TPU Peripheral Module.
|
||||
* @description The Trust Protection Unit used to assist the computationally intensive operations of several common
|
||||
* cryptographic algorithms.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* Structure type to access the TPU Registers.
|
||||
*/
|
||||
struct mxc_tpu_regs {
|
||||
__IO uint32_t ctrl; /**< <tt>\b 0x00:<\tt> TPU CTRL Register */
|
||||
__IO uint32_t cipher_ctrl; /**< <tt>\b 0x04:<\tt> TPU CIPHER_CTRL Register */
|
||||
__IO uint32_t hash_ctrl; /**< <tt>\b 0x08:<\tt> TPU HASH_CTRL Register */
|
||||
__IO uint32_t crc_ctrl; /**< <tt>\b 0x0C:<\tt> TPU CRC_CTRL Register */
|
||||
__IO uint32_t dma_src; /**< <tt>\b 0x10:<\tt> TPU DMA_SRC Register */
|
||||
__IO uint32_t dma_dest; /**< <tt>\b 0x14:<\tt> TPU DMA_DEST Register */
|
||||
__IO uint32_t dma_cnt; /**< <tt>\b 0x18:<\tt> TPU DMA_CNT Register */
|
||||
__IO uint32_t maa_ctrl; /**< <tt>\b 0x1C:<\tt> TPU MAA_CTRL Register */
|
||||
__O uint32_t din[4]; /**< <tt>\b 0x20:<\tt> TPU DIN Register */
|
||||
__I uint32_t dout[4]; /**< <tt>\b 0x30:<\tt> TPU DOUT Register */
|
||||
__IO uint32_t crc_poly; /**< <tt>\b 0x40:<\tt> TPU CRC_POLY Register */
|
||||
__IO uint32_t crc_val; /**< <tt>\b 0x44:<\tt> TPU CRC_VAL Register */
|
||||
__I uint32_t crc_prng; /**< <tt>\b 0x48:<\tt> TPU CRC_PRNG Register */
|
||||
__IO uint32_t ham_ecc; /**< <tt>\b 0x4C:<\tt> TPU HAM_ECC Register */
|
||||
__IO uint32_t cipher_init[4]; /**< <tt>\b 0x50:<\tt> TPU CIPHER_INIT Register */
|
||||
__O uint32_t cipher_key[8]; /**< <tt>\b 0x60:<\tt> TPU CIPHER_KEY Register */
|
||||
__IO uint32_t hash_digest[16]; /**< <tt>\b 0x80:<\tt> TPU HASH_DIGEST Register */
|
||||
__IO uint32_t hash_msg_sz[4]; /**< <tt>\b 0xC0:<\tt> TPU HASH_MSG_SZ Register */
|
||||
__IO uint32_t maa_maws; /**< <tt>\b 0xD0:<\tt> TPU MAA_MAWS Register */
|
||||
};
|
||||
|
||||
/* Register offsets for module TPU */
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup TPU_Register_Offsets Register Offsets
|
||||
* @brief TPU Peripheral Register Offsets from the TPU Base Peripheral Address.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_R_TPU_CTRL ((uint32_t)0x00000000UL) /**< Offset from TPU Base Address: <tt> 0x0x000 */
|
||||
#define MXC_R_TPU_CIPHER_CTRL ((uint32_t)0x00000004UL) /**< Offset from TPU Base Address: <tt> 0x0x004 */
|
||||
#define MXC_R_TPU_HASH_CTRL ((uint32_t)0x00000008UL) /**< Offset from TPU Base Address: <tt> 0x0x008 */
|
||||
#define MXC_R_TPU_CRC_CTRL ((uint32_t)0x0000000CUL) /**< Offset from TPU Base Address: <tt> 0x0x00C */
|
||||
#define MXC_R_TPU_DMA_SRC ((uint32_t)0x00000010UL) /**< Offset from TPU Base Address: <tt> 0x0x010 */
|
||||
#define MXC_R_TPU_DMA_DEST ((uint32_t)0x00000014UL) /**< Offset from TPU Base Address: <tt> 0x0x014 */
|
||||
#define MXC_R_TPU_DMA_CNT ((uint32_t)0x00000018UL) /**< Offset from TPU Base Address: <tt> 0x0x018 */
|
||||
#define MXC_R_TPU_MAA_CTRL ((uint32_t)0x0000001CUL) /**< Offset from TPU Base Address: <tt> 0x0x01C */
|
||||
#define MXC_R_TPU_DIN ((uint32_t)0x00000020UL) /**< Offset from TPU Base Address: <tt> 0x0x020 */
|
||||
#define MXC_R_TPU_DOUT ((uint32_t)0x00000030UL) /**< Offset from TPU Base Address: <tt> 0x0x030 */
|
||||
#define MXC_R_TPU_CRC_POLY ((uint32_t)0x00000040UL) /**< Offset from TPU Base Address: <tt> 0x0x040 */
|
||||
#define MXC_R_TPU_CRC_VAL ((uint32_t)0x00000044UL) /**< Offset from TPU Base Address: <tt> 0x0x044 */
|
||||
#define MXC_R_TPU_CRC_PRNG ((uint32_t)0x00000048UL) /**< Offset from TPU Base Address: <tt> 0x0x048 */
|
||||
#define MXC_R_TPU_HAM_ECC ((uint32_t)0x0000004CUL) /**< Offset from TPU Base Address: <tt> 0x0x04C */
|
||||
#define MXC_R_TPU_CIPHER_INIT ((uint32_t)0x00000050UL) /**< Offset from TPU Base Address: <tt> 0x0x050 */
|
||||
#define MXC_R_TPU_CIPHER_KEY ((uint32_t)0x00000060UL) /**< Offset from TPU Base Address: <tt> 0x0x060 */
|
||||
#define MXC_R_TPU_HASH_DIGEST ((uint32_t)0x00000080UL) /**< Offset from TPU Base Address: <tt> 0x0x080 */
|
||||
#define MXC_R_TPU_HASH_MSG_SZ ((uint32_t)0x000000C0UL) /**< Offset from TPU Base Address: <tt> 0x0x0C0 */
|
||||
#define MXC_R_TPU_MAA_MAWS ((uint32_t)0x000000D0UL) /**< Offset from TPU Base Address: <tt> 0x0x0D0 */
|
||||
/**@} end of group tpu_registers */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup CTRL_Register
|
||||
* @brief Crypto Control Register.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_CTRL_RST_POS 0 /**< CTRL_RST Position */
|
||||
#define MXC_F_TPU_CTRL_RST ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_RST_POS)) /**< CTRL_RST Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_INTR_POS 1 /**< CTRL_INTR Position */
|
||||
#define MXC_F_TPU_CTRL_INTR ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_INTR_POS)) /**< CTRL_INTR Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_SRC_POS 2 /**< CTRL_SRC Position */
|
||||
#define MXC_F_TPU_CTRL_SRC ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_SRC_POS)) /**< CTRL_SRC Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_BSO_POS 4 /**< CTRL_BSO Position */
|
||||
#define MXC_F_TPU_CTRL_BSO ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_BSO_POS)) /**< CTRL_BSO Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_BSI_POS 5 /**< CTRL_BSI Position */
|
||||
#define MXC_F_TPU_CTRL_BSI ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_BSI_POS)) /**< CTRL_BSI Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_WAIT_EN_POS 6 /**< CTRL_WAIT_EN Position */
|
||||
#define MXC_F_TPU_CTRL_WAIT_EN ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_WAIT_EN_POS)) /**< CTRL_WAIT_EN Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_WAIT_POL_POS 7 /**< CTRL_WAIT_POL Position */
|
||||
#define MXC_F_TPU_CTRL_WAIT_POL ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_WAIT_POL_POS)) /**< CTRL_WAIT_POL Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_WRSRC_POS 8 /**< CTRL_WRSRC Position */
|
||||
#define MXC_F_TPU_CTRL_WRSRC ((uint32_t)(0x3UL << MXC_F_TPU_CTRL_WRSRC_POS)) /**< CTRL_WRSRC Mask */
|
||||
#define MXC_V_TPU_CTRL_WRSRC_NONE ((uint32_t)0x0UL) /**< CTRL_WRSRC_NONE Value */
|
||||
#define MXC_S_TPU_CTRL_WRSRC_NONE \
|
||||
(MXC_V_TPU_CTRL_WRSRC_NONE << MXC_F_TPU_CTRL_WRSRC_POS) /**< CTRL_WRSRC_NONE Setting */
|
||||
#define MXC_V_TPU_CTRL_WRSRC_CIPHEROUTPUT ((uint32_t)0x1UL) /**< CTRL_WRSRC_CIPHEROUTPUT Value */
|
||||
#define MXC_S_TPU_CTRL_WRSRC_CIPHEROUTPUT \
|
||||
(MXC_V_TPU_CTRL_WRSRC_CIPHEROUTPUT << MXC_F_TPU_CTRL_WRSRC_POS) /**< CTRL_WRSRC_CIPHEROUTPUT Setting */
|
||||
#define MXC_V_TPU_CTRL_WRSRC_READFIFO ((uint32_t)0x2UL) /**< CTRL_WRSRC_READFIFO Value */
|
||||
#define MXC_S_TPU_CTRL_WRSRC_READFIFO \
|
||||
(MXC_V_TPU_CTRL_WRSRC_READFIFO << MXC_F_TPU_CTRL_WRSRC_POS) /**< CTRL_WRSRC_READFIFO Setting */
|
||||
#define MXC_V_TPU_CTRL_WRSRC_RFU ((uint32_t)0x3UL) /**< CTRL_WRSRC_RFU Value */
|
||||
#define MXC_S_TPU_CTRL_WRSRC_RFU (MXC_V_TPU_CTRL_WRSRC_RFU << MXC_F_TPU_CTRL_WRSRC_POS) /**< CTRL_WRSRC_RFU Setting */
|
||||
|
||||
#define MXC_F_TPU_CTRL_RDSRC_POS 10 /**< CTRL_RDSRC Position */
|
||||
#define MXC_F_TPU_CTRL_RDSRC ((uint32_t)(0x3UL << MXC_F_TPU_CTRL_RDSRC_POS)) /**< CTRL_RDSRC Mask */
|
||||
#define MXC_V_TPU_CTRL_RDSRC_DMADISABLED ((uint32_t)0x0UL) /**< CTRL_RDSRC_DMADISABLED Value */
|
||||
#define MXC_S_TPU_CTRL_RDSRC_DMADISABLED \
|
||||
(MXC_V_TPU_CTRL_RDSRC_DMADISABLED << MXC_F_TPU_CTRL_RDSRC_POS) /**< CTRL_RDSRC_DMADISABLED Setting */
|
||||
#define MXC_V_TPU_CTRL_RDSRC_DMAORAPB ((uint32_t)0x1UL) /**< CTRL_RDSRC_DMAORAPB Value */
|
||||
#define MXC_S_TPU_CTRL_RDSRC_DMAORAPB \
|
||||
(MXC_V_TPU_CTRL_RDSRC_DMAORAPB << MXC_F_TPU_CTRL_RDSRC_POS) /**< CTRL_RDSRC_DMAORAPB Setting */
|
||||
#define MXC_V_TPU_CTRL_RDSRC_RNG ((uint32_t)0x2UL) /**< CTRL_RDSRC_RNG Value */
|
||||
#define MXC_S_TPU_CTRL_RDSRC_RNG (MXC_V_TPU_CTRL_RDSRC_RNG << MXC_F_TPU_CTRL_RDSRC_POS) /**< CTRL_RDSRC_RNG Setting */
|
||||
|
||||
#define MXC_F_TPU_CTRL_FLAG_MODE_POS 14 /**< CTRL_FLAG_MODE Position */
|
||||
#define MXC_F_TPU_CTRL_FLAG_MODE ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_FLAG_MODE_POS)) /**< CTRL_FLAG_MODE Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_DMADNEMSK_POS 15 /**< CTRL_DMADNEMSK Position */
|
||||
#define MXC_F_TPU_CTRL_DMADNEMSK ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_DMADNEMSK_POS)) /**< CTRL_DMADNEMSK Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_DMA_DONE_POS 24 /**< CTRL_DMA_DONE Position */
|
||||
#define MXC_F_TPU_CTRL_DMA_DONE ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_DMA_DONE_POS)) /**< CTRL_DMA_DONE Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_GLS_DONE_POS 25 /**< CTRL_GLS_DONE Position */
|
||||
#define MXC_F_TPU_CTRL_GLS_DONE ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_GLS_DONE_POS)) /**< CTRL_GLS_DONE Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_HSH_DONE_POS 26 /**< CTRL_HSH_DONE Position */
|
||||
#define MXC_F_TPU_CTRL_HSH_DONE ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_HSH_DONE_POS)) /**< CTRL_HSH_DONE Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_CPH_DONE_POS 27 /**< CTRL_CPH_DONE Position */
|
||||
#define MXC_F_TPU_CTRL_CPH_DONE ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_CPH_DONE_POS)) /**< CTRL_CPH_DONE Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_MAA_DONE_POS 28 /**< CTRL_MAA_DONE Position */
|
||||
#define MXC_F_TPU_CTRL_MAA_DONE ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_MAA_DONE_POS)) /**< CTRL_MAA_DONE Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_ERR_POS 29 /**< CTRL_ERR Position */
|
||||
#define MXC_F_TPU_CTRL_ERR ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_ERR_POS)) /**< CTRL_ERR Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_RDY_POS 30 /**< CTRL_RDY Position */
|
||||
#define MXC_F_TPU_CTRL_RDY ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_RDY_POS)) /**< CTRL_RDY Mask */
|
||||
|
||||
#define MXC_F_TPU_CTRL_DONE_POS 31 /**< CTRL_DONE Position */
|
||||
#define MXC_F_TPU_CTRL_DONE ((uint32_t)(0x1UL << MXC_F_TPU_CTRL_DONE_POS)) /**< CTRL_DONE Mask */
|
||||
|
||||
/**@} end of group CTRL_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup CIPHER_CTRL_Register
|
||||
* @brief Cipher Control Register.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_CIPHER_CTRL_ENC_POS 0 /**< CIPHER_CTRL_ENC Position */
|
||||
#define MXC_F_TPU_CIPHER_CTRL_ENC ((uint32_t)(0x1UL << MXC_F_TPU_CIPHER_CTRL_ENC_POS)) /**< CIPHER_CTRL_ENC Mask */
|
||||
|
||||
#define MXC_F_TPU_CIPHER_CTRL_KEY_POS 1 /**< CIPHER_CTRL_KEY Position */
|
||||
#define MXC_F_TPU_CIPHER_CTRL_KEY ((uint32_t)(0x1UL << MXC_F_TPU_CIPHER_CTRL_KEY_POS)) /**< CIPHER_CTRL_KEY Mask */
|
||||
|
||||
#define MXC_F_TPU_CIPHER_CTRL_SRC_POS 2 /**< CIPHER_CTRL_SRC Position */
|
||||
#define MXC_F_TPU_CIPHER_CTRL_SRC ((uint32_t)(0x3UL << MXC_F_TPU_CIPHER_CTRL_SRC_POS)) /**< CIPHER_CTRL_SRC Mask */
|
||||
#define MXC_V_TPU_CIPHER_CTRL_SRC_CIPHERKEY ((uint32_t)0x0UL) /**< CIPHER_CTRL_SRC_CIPHERKEY Value */
|
||||
#define MXC_S_TPU_CIPHER_CTRL_SRC_CIPHERKEY \
|
||||
(MXC_V_TPU_CIPHER_CTRL_SRC_CIPHERKEY << MXC_F_TPU_CIPHER_CTRL_SRC_POS) /**< CIPHER_CTRL_SRC_CIPHERKEY Setting */
|
||||
#define MXC_V_TPU_CIPHER_CTRL_SRC_REGFILE ((uint32_t)0x2UL) /**< CIPHER_CTRL_SRC_REGFILE Value */
|
||||
#define MXC_S_TPU_CIPHER_CTRL_SRC_REGFILE \
|
||||
(MXC_V_TPU_CIPHER_CTRL_SRC_REGFILE << MXC_F_TPU_CIPHER_CTRL_SRC_POS) /**< CIPHER_CTRL_SRC_REGFILE Setting */
|
||||
#define MXC_V_TPU_CIPHER_CTRL_SRC_QSPIKEY_REGFILE ((uint32_t)0x3UL) /**< CIPHER_CTRL_SRC_QSPIKEY_REGFILE Value */
|
||||
#define MXC_S_TPU_CIPHER_CTRL_SRC_QSPIKEY_REGFILE \
|
||||
(MXC_V_TPU_CIPHER_CTRL_SRC_QSPIKEY_REGFILE \
|
||||
<< MXC_F_TPU_CIPHER_CTRL_SRC_POS) /**< CIPHER_CTRL_SRC_QSPIKEY_REGFILE Setting */
|
||||
|
||||
#define MXC_F_TPU_CIPHER_CTRL_CIPHER_POS 4 /**< CIPHER_CTRL_CIPHER Position */
|
||||
#define MXC_F_TPU_CIPHER_CTRL_CIPHER \
|
||||
((uint32_t)(0x7UL << MXC_F_TPU_CIPHER_CTRL_CIPHER_POS)) /**< CIPHER_CTRL_CIPHER Mask */
|
||||
#define MXC_V_TPU_CIPHER_CTRL_CIPHER_DIS ((uint32_t)0x0UL) /**< CIPHER_CTRL_CIPHER_DIS Value */
|
||||
#define MXC_S_TPU_CIPHER_CTRL_CIPHER_DIS \
|
||||
(MXC_V_TPU_CIPHER_CTRL_CIPHER_DIS << MXC_F_TPU_CIPHER_CTRL_CIPHER_POS) /**< CIPHER_CTRL_CIPHER_DIS Setting */
|
||||
#define MXC_V_TPU_CIPHER_CTRL_CIPHER_AES128 ((uint32_t)0x1UL) /**< CIPHER_CTRL_CIPHER_AES128 Value */
|
||||
#define MXC_S_TPU_CIPHER_CTRL_CIPHER_AES128 \
|
||||
(MXC_V_TPU_CIPHER_CTRL_CIPHER_AES128 << MXC_F_TPU_CIPHER_CTRL_CIPHER_POS) /**< CIPHER_CTRL_CIPHER_AES128 Setting \
|
||||
*/
|
||||
#define MXC_V_TPU_CIPHER_CTRL_CIPHER_AES192 ((uint32_t)0x2UL) /**< CIPHER_CTRL_CIPHER_AES192 Value */
|
||||
#define MXC_S_TPU_CIPHER_CTRL_CIPHER_AES192 \
|
||||
(MXC_V_TPU_CIPHER_CTRL_CIPHER_AES192 << MXC_F_TPU_CIPHER_CTRL_CIPHER_POS) /**< CIPHER_CTRL_CIPHER_AES192 Setting \
|
||||
*/
|
||||
#define MXC_V_TPU_CIPHER_CTRL_CIPHER_AES256 ((uint32_t)0x3UL) /**< CIPHER_CTRL_CIPHER_AES256 Value */
|
||||
#define MXC_S_TPU_CIPHER_CTRL_CIPHER_AES256 \
|
||||
(MXC_V_TPU_CIPHER_CTRL_CIPHER_AES256 << MXC_F_TPU_CIPHER_CTRL_CIPHER_POS) /**< CIPHER_CTRL_CIPHER_AES256 Setting \
|
||||
*/
|
||||
#define MXC_V_TPU_CIPHER_CTRL_CIPHER_DES ((uint32_t)0x4UL) /**< CIPHER_CTRL_CIPHER_DES Value */
|
||||
#define MXC_S_TPU_CIPHER_CTRL_CIPHER_DES \
|
||||
(MXC_V_TPU_CIPHER_CTRL_CIPHER_DES << MXC_F_TPU_CIPHER_CTRL_CIPHER_POS) /**< CIPHER_CTRL_CIPHER_DES Setting */
|
||||
#define MXC_V_TPU_CIPHER_CTRL_CIPHER_TDES ((uint32_t)0x5UL) /**< CIPHER_CTRL_CIPHER_TDES Value */
|
||||
#define MXC_S_TPU_CIPHER_CTRL_CIPHER_TDES \
|
||||
(MXC_V_TPU_CIPHER_CTRL_CIPHER_TDES << MXC_F_TPU_CIPHER_CTRL_CIPHER_POS) /**< CIPHER_CTRL_CIPHER_TDES Setting */
|
||||
|
||||
#define MXC_F_TPU_CIPHER_CTRL_MODE_POS 8 /**< CIPHER_CTRL_MODE Position */
|
||||
#define MXC_F_TPU_CIPHER_CTRL_MODE ((uint32_t)(0x7UL << MXC_F_TPU_CIPHER_CTRL_MODE_POS)) /**< CIPHER_CTRL_MODE Mask */
|
||||
#define MXC_V_TPU_CIPHER_CTRL_MODE_ECB ((uint32_t)0x0UL) /**< CIPHER_CTRL_MODE_ECB Value */
|
||||
#define MXC_S_TPU_CIPHER_CTRL_MODE_ECB \
|
||||
(MXC_V_TPU_CIPHER_CTRL_MODE_ECB << MXC_F_TPU_CIPHER_CTRL_MODE_POS) /**< CIPHER_CTRL_MODE_ECB Setting */
|
||||
#define MXC_V_TPU_CIPHER_CTRL_MODE_CBC ((uint32_t)0x1UL) /**< CIPHER_CTRL_MODE_CBC Value */
|
||||
#define MXC_S_TPU_CIPHER_CTRL_MODE_CBC \
|
||||
(MXC_V_TPU_CIPHER_CTRL_MODE_CBC << MXC_F_TPU_CIPHER_CTRL_MODE_POS) /**< CIPHER_CTRL_MODE_CBC Setting */
|
||||
#define MXC_V_TPU_CIPHER_CTRL_MODE_CFB ((uint32_t)0x2UL) /**< CIPHER_CTRL_MODE_CFB Value */
|
||||
#define MXC_S_TPU_CIPHER_CTRL_MODE_CFB \
|
||||
(MXC_V_TPU_CIPHER_CTRL_MODE_CFB << MXC_F_TPU_CIPHER_CTRL_MODE_POS) /**< CIPHER_CTRL_MODE_CFB Setting */
|
||||
#define MXC_V_TPU_CIPHER_CTRL_MODE_OFB ((uint32_t)0x3UL) /**< CIPHER_CTRL_MODE_OFB Value */
|
||||
#define MXC_S_TPU_CIPHER_CTRL_MODE_OFB \
|
||||
(MXC_V_TPU_CIPHER_CTRL_MODE_OFB << MXC_F_TPU_CIPHER_CTRL_MODE_POS) /**< CIPHER_CTRL_MODE_OFB Setting */
|
||||
#define MXC_V_TPU_CIPHER_CTRL_MODE_CTR ((uint32_t)0x4UL) /**< CIPHER_CTRL_MODE_CTR Value */
|
||||
#define MXC_S_TPU_CIPHER_CTRL_MODE_CTR \
|
||||
(MXC_V_TPU_CIPHER_CTRL_MODE_CTR << MXC_F_TPU_CIPHER_CTRL_MODE_POS) /**< CIPHER_CTRL_MODE_CTR Setting */
|
||||
|
||||
/**@} end of group CIPHER_CTRL_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup HASH_CTRL_Register
|
||||
* @brief HASH Control Register.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_HASH_CTRL_INIT_POS 0 /**< HASH_CTRL_INIT Position */
|
||||
#define MXC_F_TPU_HASH_CTRL_INIT ((uint32_t)(0x1UL << MXC_F_TPU_HASH_CTRL_INIT_POS)) /**< HASH_CTRL_INIT Mask */
|
||||
|
||||
#define MXC_F_TPU_HASH_CTRL_XOR_POS 1 /**< HASH_CTRL_XOR Position */
|
||||
#define MXC_F_TPU_HASH_CTRL_XOR ((uint32_t)(0x1UL << MXC_F_TPU_HASH_CTRL_XOR_POS)) /**< HASH_CTRL_XOR Mask */
|
||||
|
||||
#define MXC_F_TPU_HASH_CTRL_HASH_POS 2 /**< HASH_CTRL_HASH Position */
|
||||
#define MXC_F_TPU_HASH_CTRL_HASH ((uint32_t)(0x7UL << MXC_F_TPU_HASH_CTRL_HASH_POS)) /**< HASH_CTRL_HASH Mask */
|
||||
#define MXC_V_TPU_HASH_CTRL_HASH_DIS ((uint32_t)0x0UL) /**< HASH_CTRL_HASH_DIS Value */
|
||||
#define MXC_S_TPU_HASH_CTRL_HASH_DIS \
|
||||
(MXC_V_TPU_HASH_CTRL_HASH_DIS << MXC_F_TPU_HASH_CTRL_HASH_POS) /**< HASH_CTRL_HASH_DIS Setting */
|
||||
#define MXC_V_TPU_HASH_CTRL_HASH_SHA1 ((uint32_t)0x1UL) /**< HASH_CTRL_HASH_SHA1 Value */
|
||||
#define MXC_S_TPU_HASH_CTRL_HASH_SHA1 \
|
||||
(MXC_V_TPU_HASH_CTRL_HASH_SHA1 << MXC_F_TPU_HASH_CTRL_HASH_POS) /**< HASH_CTRL_HASH_SHA1 Setting */
|
||||
#define MXC_V_TPU_HASH_CTRL_HASH_SHA224 ((uint32_t)0x2UL) /**< HASH_CTRL_HASH_SHA224 Value */
|
||||
#define MXC_S_TPU_HASH_CTRL_HASH_SHA224 \
|
||||
(MXC_V_TPU_HASH_CTRL_HASH_SHA224 << MXC_F_TPU_HASH_CTRL_HASH_POS) /**< HASH_CTRL_HASH_SHA224 Setting */
|
||||
#define MXC_V_TPU_HASH_CTRL_HASH_SHA256 ((uint32_t)0x3UL) /**< HASH_CTRL_HASH_SHA256 Value */
|
||||
#define MXC_S_TPU_HASH_CTRL_HASH_SHA256 \
|
||||
(MXC_V_TPU_HASH_CTRL_HASH_SHA256 << MXC_F_TPU_HASH_CTRL_HASH_POS) /**< HASH_CTRL_HASH_SHA256 Setting */
|
||||
#define MXC_V_TPU_HASH_CTRL_HASH_SHA384 ((uint32_t)0x4UL) /**< HASH_CTRL_HASH_SHA384 Value */
|
||||
#define MXC_S_TPU_HASH_CTRL_HASH_SHA384 \
|
||||
(MXC_V_TPU_HASH_CTRL_HASH_SHA384 << MXC_F_TPU_HASH_CTRL_HASH_POS) /**< HASH_CTRL_HASH_SHA384 Setting */
|
||||
#define MXC_V_TPU_HASH_CTRL_HASH_SHA512 ((uint32_t)0x5UL) /**< HASH_CTRL_HASH_SHA512 Value */
|
||||
#define MXC_S_TPU_HASH_CTRL_HASH_SHA512 \
|
||||
(MXC_V_TPU_HASH_CTRL_HASH_SHA512 << MXC_F_TPU_HASH_CTRL_HASH_POS) /**< HASH_CTRL_HASH_SHA512 Setting */
|
||||
|
||||
#define MXC_F_TPU_HASH_CTRL_LAST_POS 5 /**< HASH_CTRL_LAST Position */
|
||||
#define MXC_F_TPU_HASH_CTRL_LAST ((uint32_t)(0x1UL << MXC_F_TPU_HASH_CTRL_LAST_POS)) /**< HASH_CTRL_LAST Mask */
|
||||
|
||||
/**@} end of group HASH_CTRL_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup CRC_CTRL_Register
|
||||
* @brief CRC Control Register.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_CRC_CTRL_CRC_POS 0 /**< CRC_CTRL_CRC Position */
|
||||
#define MXC_F_TPU_CRC_CTRL_CRC ((uint32_t)(0x1UL << MXC_F_TPU_CRC_CTRL_CRC_POS)) /**< CRC_CTRL_CRC Mask */
|
||||
|
||||
#define MXC_F_TPU_CRC_CTRL_MSB_POS 1 /**< CRC_CTRL_MSB Position */
|
||||
#define MXC_F_TPU_CRC_CTRL_MSB ((uint32_t)(0x1UL << MXC_F_TPU_CRC_CTRL_MSB_POS)) /**< CRC_CTRL_MSB Mask */
|
||||
|
||||
#define MXC_F_TPU_CRC_CTRL_PRNG_POS 2 /**< CRC_CTRL_PRNG Position */
|
||||
#define MXC_F_TPU_CRC_CTRL_PRNG ((uint32_t)(0x1UL << MXC_F_TPU_CRC_CTRL_PRNG_POS)) /**< CRC_CTRL_PRNG Mask */
|
||||
|
||||
#define MXC_F_TPU_CRC_CTRL_ENT_POS 3 /**< CRC_CTRL_ENT Position */
|
||||
#define MXC_F_TPU_CRC_CTRL_ENT ((uint32_t)(0x1UL << MXC_F_TPU_CRC_CTRL_ENT_POS)) /**< CRC_CTRL_ENT Mask */
|
||||
|
||||
#define MXC_F_TPU_CRC_CTRL_HAM_POS 4 /**< CRC_CTRL_HAM Position */
|
||||
#define MXC_F_TPU_CRC_CTRL_HAM ((uint32_t)(0x1UL << MXC_F_TPU_CRC_CTRL_HAM_POS)) /**< CRC_CTRL_HAM Mask */
|
||||
|
||||
#define MXC_F_TPU_CRC_CTRL_HRST_POS 5 /**< CRC_CTRL_HRST Position */
|
||||
#define MXC_F_TPU_CRC_CTRL_HRST ((uint32_t)(0x1UL << MXC_F_TPU_CRC_CTRL_HRST_POS)) /**< CRC_CTRL_HRST Mask */
|
||||
|
||||
/**@} end of group CRC_CTRL_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup DMA_SRC_Register
|
||||
* @brief Crypto DMA Source Address.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_DMA_SRC_ADDR_POS 0 /**< DMA_SRC_ADDR Position */
|
||||
#define MXC_F_TPU_DMA_SRC_ADDR ((uint32_t)(0xFFFFFFFFUL << MXC_F_TPU_DMA_SRC_ADDR_POS)) /**< DMA_SRC_ADDR Mask */
|
||||
|
||||
/**@} end of group DMA_SRC_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup DMA_DEST_Register
|
||||
* @brief Crypto DMA Destination Address.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_DMA_DEST_ADDR_POS 0 /**< DMA_DEST_ADDR Position */
|
||||
#define MXC_F_TPU_DMA_DEST_ADDR ((uint32_t)(0xFFFFFFFFUL << MXC_F_TPU_DMA_DEST_ADDR_POS)) /**< DMA_DEST_ADDR Mask */
|
||||
|
||||
/**@} end of group DMA_DEST_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup DMA_CNT_Register
|
||||
* @brief Crypto DMA Byte Count.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_DMA_CNT_ADDR_POS 0 /**< DMA_CNT_ADDR Position */
|
||||
#define MXC_F_TPU_DMA_CNT_ADDR ((uint32_t)(0xFFFFFFFFUL << MXC_F_TPU_DMA_CNT_ADDR_POS)) /**< DMA_CNT_ADDR Mask */
|
||||
|
||||
/**@} end of group DMA_CNT_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup MAA_CTRL_Register
|
||||
* @brief MAA Control Register.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_MAA_CTRL_STC_POS 0 /**< MAA_CTRL_STC Position */
|
||||
#define MXC_F_TPU_MAA_CTRL_STC ((uint32_t)(0x1UL << MXC_F_TPU_MAA_CTRL_STC_POS)) /**< MAA_CTRL_STC Mask */
|
||||
|
||||
#define MXC_F_TPU_MAA_CTRL_CLC_POS 1 /**< MAA_CTRL_CLC Position */
|
||||
#define MXC_F_TPU_MAA_CTRL_CLC ((uint32_t)(0x7UL << MXC_F_TPU_MAA_CTRL_CLC_POS)) /**< MAA_CTRL_CLC Mask */
|
||||
#define MXC_V_TPU_MAA_CTRL_CLC_EXP ((uint32_t)0x0UL) /**< MAA_CTRL_CLC_EXP Value */
|
||||
#define MXC_S_TPU_MAA_CTRL_CLC_EXP \
|
||||
(MXC_V_TPU_MAA_CTRL_CLC_EXP << MXC_F_TPU_MAA_CTRL_CLC_POS) /**< MAA_CTRL_CLC_EXP Setting */
|
||||
#define MXC_V_TPU_MAA_CTRL_CLC_SQ ((uint32_t)0x1UL) /**< MAA_CTRL_CLC_SQ Value */
|
||||
#define MXC_S_TPU_MAA_CTRL_CLC_SQ \
|
||||
(MXC_V_TPU_MAA_CTRL_CLC_SQ << MXC_F_TPU_MAA_CTRL_CLC_POS) /**< MAA_CTRL_CLC_SQ Setting */
|
||||
#define MXC_V_TPU_MAA_CTRL_CLC_MUL ((uint32_t)0x2UL) /**< MAA_CTRL_CLC_MUL Value */
|
||||
#define MXC_S_TPU_MAA_CTRL_CLC_MUL \
|
||||
(MXC_V_TPU_MAA_CTRL_CLC_MUL << MXC_F_TPU_MAA_CTRL_CLC_POS) /**< MAA_CTRL_CLC_MUL Setting */
|
||||
#define MXC_V_TPU_MAA_CTRL_CLC_SQMUL ((uint32_t)0x3UL) /**< MAA_CTRL_CLC_SQMUL Value */
|
||||
#define MXC_S_TPU_MAA_CTRL_CLC_SQMUL \
|
||||
(MXC_V_TPU_MAA_CTRL_CLC_SQMUL << MXC_F_TPU_MAA_CTRL_CLC_POS) /**< MAA_CTRL_CLC_SQMUL Setting */
|
||||
#define MXC_V_TPU_MAA_CTRL_CLC_ADD ((uint32_t)0x4UL) /**< MAA_CTRL_CLC_ADD Value */
|
||||
#define MXC_S_TPU_MAA_CTRL_CLC_ADD \
|
||||
(MXC_V_TPU_MAA_CTRL_CLC_ADD << MXC_F_TPU_MAA_CTRL_CLC_POS) /**< MAA_CTRL_CLC_ADD Setting */
|
||||
#define MXC_V_TPU_MAA_CTRL_CLC_SUB ((uint32_t)0x5UL) /**< MAA_CTRL_CLC_SUB Value */
|
||||
#define MXC_S_TPU_MAA_CTRL_CLC_SUB \
|
||||
(MXC_V_TPU_MAA_CTRL_CLC_SUB << MXC_F_TPU_MAA_CTRL_CLC_POS) /**< MAA_CTRL_CLC_SUB Setting */
|
||||
|
||||
#define MXC_F_TPU_MAA_CTRL_OCALC_POS 4 /**< MAA_CTRL_OCALC Position */
|
||||
#define MXC_F_TPU_MAA_CTRL_OCALC ((uint32_t)(0x1UL << MXC_F_TPU_MAA_CTRL_OCALC_POS)) /**< MAA_CTRL_OCALC Mask */
|
||||
|
||||
#define MXC_F_TPU_MAA_CTRL_MAAER_POS 7 /**< MAA_CTRL_MAAER Position */
|
||||
#define MXC_F_TPU_MAA_CTRL_MAAER ((uint32_t)(0x1UL << MXC_F_TPU_MAA_CTRL_MAAER_POS)) /**< MAA_CTRL_MAAER Mask */
|
||||
|
||||
#define MXC_F_TPU_MAA_CTRL_AMS_POS 8 /**< MAA_CTRL_AMS Position */
|
||||
#define MXC_F_TPU_MAA_CTRL_AMS ((uint32_t)(0x3UL << MXC_F_TPU_MAA_CTRL_AMS_POS)) /**< MAA_CTRL_AMS Mask */
|
||||
|
||||
#define MXC_F_TPU_MAA_CTRL_BMS_POS 10 /**< MAA_CTRL_BMS Position */
|
||||
#define MXC_F_TPU_MAA_CTRL_BMS ((uint32_t)(0x3UL << MXC_F_TPU_MAA_CTRL_BMS_POS)) /**< MAA_CTRL_BMS Mask */
|
||||
|
||||
#define MXC_F_TPU_MAA_CTRL_EMS_POS 12 /**< MAA_CTRL_EMS Position */
|
||||
#define MXC_F_TPU_MAA_CTRL_EMS ((uint32_t)(0x3UL << MXC_F_TPU_MAA_CTRL_EMS_POS)) /**< MAA_CTRL_EMS Mask */
|
||||
|
||||
#define MXC_F_TPU_MAA_CTRL_MMS_POS 14 /**< MAA_CTRL_MMS Position */
|
||||
#define MXC_F_TPU_MAA_CTRL_MMS ((uint32_t)(0x3UL << MXC_F_TPU_MAA_CTRL_MMS_POS)) /**< MAA_CTRL_MMS Mask */
|
||||
|
||||
#define MXC_F_TPU_MAA_CTRL_AMA_POS 16 /**< MAA_CTRL_AMA Position */
|
||||
#define MXC_F_TPU_MAA_CTRL_AMA ((uint32_t)(0xFUL << MXC_F_TPU_MAA_CTRL_AMA_POS)) /**< MAA_CTRL_AMA Mask */
|
||||
|
||||
#define MXC_F_TPU_MAA_CTRL_BMA_POS 20 /**< MAA_CTRL_BMA Position */
|
||||
#define MXC_F_TPU_MAA_CTRL_BMA ((uint32_t)(0xFUL << MXC_F_TPU_MAA_CTRL_BMA_POS)) /**< MAA_CTRL_BMA Mask */
|
||||
|
||||
#define MXC_F_TPU_MAA_CTRL_RMA_POS 24 /**< MAA_CTRL_RMA Position */
|
||||
#define MXC_F_TPU_MAA_CTRL_RMA ((uint32_t)(0xFUL << MXC_F_TPU_MAA_CTRL_RMA_POS)) /**< MAA_CTRL_RMA Mask */
|
||||
|
||||
#define MXC_F_TPU_MAA_CTRL_TMA_POS 28 /**< MAA_CTRL_TMA Position */
|
||||
#define MXC_F_TPU_MAA_CTRL_TMA ((uint32_t)(0xFUL << MXC_F_TPU_MAA_CTRL_TMA_POS)) /**< MAA_CTRL_TMA Mask */
|
||||
|
||||
/**@} end of group MAA_CTRL_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup DIN_Register
|
||||
* @brief Crypto Data Input. Data input can be written to this register instead of using
|
||||
* the DMA. This register writes to the FIFO. This register occupies four
|
||||
* successive words to allow the use of multi-store instructions. Words can be
|
||||
* written to any location, they will be placed in the FIFO in the order they are
|
||||
* written. The endian swap input control bit affects this register.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_DIN_DATA_POS 0 /**< DIN_DATA Position */
|
||||
#define MXC_F_TPU_DIN_DATA ((uint32_t)(0xFFFFFFFFUL << MXC_F_TPU_DIN_DATA_POS)) /**< DIN_DATA Mask */
|
||||
|
||||
/**@} end of group DIN_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup DOUT_Register
|
||||
* @brief Crypto Data Output. Resulting data from cipher calculation. Data is placed in
|
||||
* the lower words of these four registers depending on the algorithm. For block
|
||||
* cipher modes, this register holds the result of most recent encryption or
|
||||
* decryption operation. These registers are affected by the endian swap bits.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_DOUT_DATA_POS 0 /**< DOUT_DATA Position */
|
||||
#define MXC_F_TPU_DOUT_DATA ((uint32_t)(0xFFFFFFFFUL << MXC_F_TPU_DOUT_DATA_POS)) /**< DOUT_DATA Mask */
|
||||
|
||||
/**@} end of group DOUT_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup CRC_POLY_Register
|
||||
* @brief CRC Polynomial. The polynomial to be used for Galois Field calculations (CRC or
|
||||
* LFSR) should be written to this register. This register is affected by the MSB
|
||||
* control bit.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_CRC_POLY_POLY_POS 0 /**< CRC_POLY_POLY Position */
|
||||
#define MXC_F_TPU_CRC_POLY_POLY ((uint32_t)(0xFFFFFFFFUL << MXC_F_TPU_CRC_POLY_POLY_POS)) /**< CRC_POLY_POLY Mask */
|
||||
|
||||
/**@} end of group CRC_POLY_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup CRC_VAL_Register
|
||||
* @brief CRC Value. This is the state for the Galois Field. This register holds the
|
||||
* result of a CRC calculation or the current state of the LFSR. This register is
|
||||
* affected by the MSB control bit.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_CRC_VAL_VAL_POS 0 /**< CRC_VAL_VAL Position */
|
||||
#define MXC_F_TPU_CRC_VAL_VAL ((uint32_t)(0xFFFFFFFFUL << MXC_F_TPU_CRC_VAL_VAL_POS)) /**< CRC_VAL_VAL Mask */
|
||||
|
||||
/**@} end of group CRC_VAL_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup CRC_PRNG_Register
|
||||
* @brief Pseudo Random Value. Output of the Galois Field shift register. This holds the
|
||||
* resulting pseudo-random number if entropy is disabled or true random number if
|
||||
* entropy is enabled.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_CRC_PRNG_PRNG_POS 0 /**< CRC_PRNG_PRNG Position */
|
||||
#define MXC_F_TPU_CRC_PRNG_PRNG ((uint32_t)(0xFFFFFFFFUL << MXC_F_TPU_CRC_PRNG_PRNG_POS)) /**< CRC_PRNG_PRNG Mask */
|
||||
|
||||
/**@} end of group CRC_PRNG_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup HAM_ECC_Register
|
||||
* @brief Hamming ECC Register.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_HAM_ECC_ECC_POS 0 /**< HAM_ECC_ECC Position */
|
||||
#define MXC_F_TPU_HAM_ECC_ECC ((uint32_t)(0xFFFFUL << MXC_F_TPU_HAM_ECC_ECC_POS)) /**< HAM_ECC_ECC Mask */
|
||||
|
||||
#define MXC_F_TPU_HAM_ECC_PAR_POS 16 /**< HAM_ECC_PAR Position */
|
||||
#define MXC_F_TPU_HAM_ECC_PAR ((uint32_t)(0x1UL << MXC_F_TPU_HAM_ECC_PAR_POS)) /**< HAM_ECC_PAR Mask */
|
||||
|
||||
/**@} end of group HAM_ECC_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup CIPHER_INIT_Register
|
||||
* @brief Initial Vector. For block cipher operations that use CBC, CFB, OFB, or CNTR
|
||||
* modes, this register holds the initial value. This register is updated with each
|
||||
* encryption or decryption operation. This register is affected by the endian swap
|
||||
* bits.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_CIPHER_INIT_IVEC_POS 0 /**< CIPHER_INIT_IVEC Position */
|
||||
#define MXC_F_TPU_CIPHER_INIT_IVEC \
|
||||
((uint32_t)(0xFFFFFFFFUL << MXC_F_TPU_CIPHER_INIT_IVEC_POS)) /**< CIPHER_INIT_IVEC Mask */
|
||||
|
||||
/**@} end of group CIPHER_INIT_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup CIPHER_KEY_Register
|
||||
* @brief Cipher Key. This register holds the key used for block cipher operations. The
|
||||
* lower words are used for block ciphers that use shorter key lengths. This
|
||||
* register is affected by the endian swap input control bits.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_CIPHER_KEY_KEY_POS 0 /**< CIPHER_KEY_KEY Position */
|
||||
#define MXC_F_TPU_CIPHER_KEY_KEY \
|
||||
((uint32_t)(0xFFFFFFFFUL << MXC_F_TPU_CIPHER_KEY_KEY_POS)) /**< CIPHER_KEY_KEY Mask \
|
||||
*/
|
||||
|
||||
/**@} end of group CIPHER_KEY_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup HASH_DIGEST_Register
|
||||
* @brief This register holds the calculated hash value. This register is affected by the
|
||||
* endian swap bits.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_HASH_DIGEST_HASH_POS 0 /**< HASH_DIGEST_HASH Position */
|
||||
#define MXC_F_TPU_HASH_DIGEST_HASH \
|
||||
((uint32_t)(0xFFFFFFFFUL << MXC_F_TPU_HASH_DIGEST_HASH_POS)) /**< HASH_DIGEST_HASH Mask */
|
||||
|
||||
/**@} end of group HASH_DIGEST_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup HASH_MSG_SZ_Register
|
||||
* @brief Message Size. This register holds the lowest 32-bit of message size in bytes.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_HASH_MSG_SZ_MSGSZ_POS 0 /**< HASH_MSG_SZ_MSGSZ Position */
|
||||
#define MXC_F_TPU_HASH_MSG_SZ_MSGSZ \
|
||||
((uint32_t)(0xFFFFFFFFUL << MXC_F_TPU_HASH_MSG_SZ_MSGSZ_POS)) /**< HASH_MSG_SZ_MSGSZ Mask */
|
||||
|
||||
/**@} end of group HASH_MSG_SZ_Register */
|
||||
|
||||
/**
|
||||
* @ingroup tpu_registers
|
||||
* @defgroup MAA_MAWS_Register
|
||||
* @brief MAA Word Size. This register defines the number of bits for a modular operation.
|
||||
* This register must be set to a valid value prior to the MAA operation start.
|
||||
* Valid values are from 1 to 2048. Invalid values are ignored and will not
|
||||
* initiate a MAA operation.
|
||||
* @{
|
||||
*/
|
||||
#define MXC_F_TPU_MAA_MAWS_MAWS_POS 0 /**< MAA_MAWS_MAWS Position */
|
||||
#define MXC_F_TPU_MAA_MAWS_MAWS ((uint32_t)(0xFFFUL << MXC_F_TPU_MAA_MAWS_MAWS_POS)) /**< MAA_MAWS_MAWS Mask */
|
||||
|
||||
/**@} end of group MAA_MAWS_Register */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _TPU_REGS_H_ */
|
||||
@@ -67,20 +67,20 @@ static bool __pcm_set_core_voltage_level_advanced(uint_fast8_t voltage_level,
|
||||
reg_value = PCM->CTL0;
|
||||
|
||||
switch (pcm_get_power_state()) {
|
||||
case PCM_AM_LF_VCORE1:
|
||||
case PCM_AM_DCDC_VCORE1:
|
||||
case PCM_AM_LDO_VCORE0:
|
||||
PCM->CTL0 = (PCM_KEY | (PCM_AM_LDO_VCORE1)
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK | PCM_CTL0_AMR_MASK)));
|
||||
break;
|
||||
case PCM_AM_LF_VCORE0:
|
||||
case PCM_AM_DCDC_VCORE0:
|
||||
case PCM_AM_LDO_VCORE1:
|
||||
PCM->CTL0 = (PCM_KEY | (PCM_AM_LDO_VCORE0)
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK | PCM_CTL0_AMR_MASK)));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case PCM_AM_LF_VCORE1:
|
||||
case PCM_AM_DCDC_VCORE1:
|
||||
case PCM_AM_LDO_VCORE0:
|
||||
PCM->CTL0 = (PCM_KEY | (PCM_AM_LDO_VCORE1)
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK | PCM_CTL0_AMR_MASK)));
|
||||
break;
|
||||
case PCM_AM_LF_VCORE0:
|
||||
case PCM_AM_DCDC_VCORE0:
|
||||
case PCM_AM_LDO_VCORE1:
|
||||
PCM->CTL0 = (PCM_KEY | (PCM_AM_LDO_VCORE0)
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK | PCM_CTL0_AMR_MASK)));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (blocking) {
|
||||
@@ -117,22 +117,22 @@ uint8_t pcm_get_power_mode(void)
|
||||
current_power_state = pcm_get_power_state();
|
||||
|
||||
switch (current_power_state) {
|
||||
case PCM_AM_LDO_VCORE0:
|
||||
case PCM_AM_LDO_VCORE1:
|
||||
case PCM_LPM0_LDO_VCORE0:
|
||||
case PCM_LPM0_LDO_VCORE1:
|
||||
default:
|
||||
return PCM_LDO_MODE;
|
||||
case PCM_AM_DCDC_VCORE0:
|
||||
case PCM_AM_DCDC_VCORE1:
|
||||
case PCM_LPM0_DCDC_VCORE0:
|
||||
case PCM_LPM0_DCDC_VCORE1:
|
||||
return PCM_DCDC_MODE;
|
||||
case PCM_LPM0_LF_VCORE0:
|
||||
case PCM_LPM0_LF_VCORE1:
|
||||
case PCM_AM_LF_VCORE1:
|
||||
case PCM_AM_LF_VCORE0:
|
||||
return PCM_LF_MODE;
|
||||
case PCM_AM_DCDC_VCORE0:
|
||||
case PCM_AM_DCDC_VCORE1:
|
||||
case PCM_LPM0_DCDC_VCORE0:
|
||||
case PCM_LPM0_DCDC_VCORE1:
|
||||
return PCM_DCDC_MODE;
|
||||
case PCM_LPM0_LF_VCORE0:
|
||||
case PCM_LPM0_LF_VCORE1:
|
||||
case PCM_AM_LF_VCORE1:
|
||||
case PCM_AM_LF_VCORE0:
|
||||
return PCM_LF_MODE;
|
||||
case PCM_AM_LDO_VCORE0:
|
||||
case PCM_AM_LDO_VCORE1:
|
||||
case PCM_LPM0_LDO_VCORE0:
|
||||
case PCM_LPM0_LDO_VCORE1:
|
||||
default:
|
||||
return PCM_LDO_MODE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,23 +141,23 @@ uint8_t pcm_get_core_voltage_level(void)
|
||||
uint8_t current_power_state = pcm_get_power_state();
|
||||
|
||||
switch (current_power_state) {
|
||||
case PCM_AM_LDO_VCORE0:
|
||||
case PCM_AM_DCDC_VCORE0:
|
||||
case PCM_AM_LF_VCORE0:
|
||||
case PCM_LPM0_LDO_VCORE0:
|
||||
case PCM_LPM0_DCDC_VCORE0:
|
||||
case PCM_LPM0_LF_VCORE0:
|
||||
default:
|
||||
return PCM_VCORE0;
|
||||
case PCM_AM_LDO_VCORE1:
|
||||
case PCM_AM_DCDC_VCORE1:
|
||||
case PCM_AM_LF_VCORE1:
|
||||
case PCM_LPM0_LDO_VCORE1:
|
||||
case PCM_LPM0_DCDC_VCORE1:
|
||||
case PCM_LPM0_LF_VCORE1:
|
||||
return PCM_VCORE1;
|
||||
case PCM_LPM3:
|
||||
return PCM_VCORELPM3;
|
||||
case PCM_AM_LDO_VCORE1:
|
||||
case PCM_AM_DCDC_VCORE1:
|
||||
case PCM_AM_LF_VCORE1:
|
||||
case PCM_LPM0_LDO_VCORE1:
|
||||
case PCM_LPM0_DCDC_VCORE1:
|
||||
case PCM_LPM0_LF_VCORE1:
|
||||
return PCM_VCORE1;
|
||||
case PCM_LPM3:
|
||||
return PCM_VCORELPM3;
|
||||
case PCM_AM_LDO_VCORE0:
|
||||
case PCM_AM_DCDC_VCORE0:
|
||||
case PCM_AM_LF_VCORE0:
|
||||
case PCM_LPM0_LDO_VCORE0:
|
||||
case PCM_LPM0_DCDC_VCORE0:
|
||||
case PCM_LPM0_LF_VCORE0:
|
||||
default:
|
||||
return PCM_VCORE0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,44 +186,44 @@ static bool __pcm_set_power_mode_advanced(uint_fast8_t power_mode,
|
||||
reg_value = PCM->CTL0;
|
||||
|
||||
switch (current_power_state) {
|
||||
case PCM_AM_DCDC_VCORE0:
|
||||
case PCM_AM_LF_VCORE0:
|
||||
PCM->CTL0 = (PCM_KEY | PCM_AM_LDO_VCORE0
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK | PCM_CTL0_AMR_MASK)));
|
||||
break;
|
||||
case PCM_AM_LF_VCORE1:
|
||||
case PCM_AM_DCDC_VCORE1:
|
||||
PCM->CTL0 = (PCM_KEY | PCM_AM_LDO_VCORE1
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK | PCM_CTL0_AMR_MASK)));
|
||||
break;
|
||||
case PCM_AM_LDO_VCORE1: {
|
||||
if (power_mode == PCM_DCDC_MODE) {
|
||||
PCM->CTL0 = (PCM_KEY | PCM_AM_DCDC_VCORE1
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK
|
||||
| PCM_CTL0_AMR_MASK)));
|
||||
} else if (power_mode == PCM_LF_MODE) {
|
||||
PCM->CTL0 = (PCM_KEY | PCM_AM_LF_VCORE1
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK
|
||||
| PCM_CTL0_AMR_MASK)));
|
||||
} else
|
||||
return false;
|
||||
break;
|
||||
case PCM_AM_DCDC_VCORE0:
|
||||
case PCM_AM_LF_VCORE0:
|
||||
PCM->CTL0 = (PCM_KEY | PCM_AM_LDO_VCORE0
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK | PCM_CTL0_AMR_MASK)));
|
||||
break;
|
||||
case PCM_AM_LF_VCORE1:
|
||||
case PCM_AM_DCDC_VCORE1:
|
||||
PCM->CTL0 = (PCM_KEY | PCM_AM_LDO_VCORE1
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK | PCM_CTL0_AMR_MASK)));
|
||||
break;
|
||||
case PCM_AM_LDO_VCORE1:
|
||||
if (power_mode == PCM_DCDC_MODE) {
|
||||
PCM->CTL0 = (PCM_KEY | PCM_AM_DCDC_VCORE1
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK
|
||||
| PCM_CTL0_AMR_MASK)));
|
||||
} else if (power_mode == PCM_LF_MODE) {
|
||||
PCM->CTL0 = (PCM_KEY | PCM_AM_LF_VCORE1
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK
|
||||
| PCM_CTL0_AMR_MASK)));
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
case PCM_AM_LDO_VCORE0: {
|
||||
if (power_mode == PCM_DCDC_MODE) {
|
||||
PCM->CTL0 = (PCM_KEY | PCM_AM_DCDC_VCORE0
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK
|
||||
| PCM_CTL0_AMR_MASK)));
|
||||
} else if (power_mode == PCM_LF_MODE) {
|
||||
PCM->CTL0 = (PCM_KEY | PCM_AM_LF_VCORE0
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK
|
||||
| PCM_CTL0_AMR_MASK)));
|
||||
} else
|
||||
return false;
|
||||
break;
|
||||
break;
|
||||
case PCM_AM_LDO_VCORE0:
|
||||
if (power_mode == PCM_DCDC_MODE) {
|
||||
PCM->CTL0 = (PCM_KEY | PCM_AM_DCDC_VCORE0
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK
|
||||
| PCM_CTL0_AMR_MASK)));
|
||||
} else if (power_mode == PCM_LF_MODE) {
|
||||
PCM->CTL0 = (PCM_KEY | PCM_AM_LF_VCORE0
|
||||
| (reg_value & ~(PCM_CTL0_KEY_MASK
|
||||
| PCM_CTL0_AMR_MASK)));
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (blocking) {
|
||||
@@ -231,8 +231,9 @@ static bool __pcm_set_power_mode_advanced(uint_fast8_t power_mode,
|
||||
if (bool_timeout && !(--time_out))
|
||||
return false;
|
||||
}
|
||||
} else
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
|
||||
current_power_mode = pcm_get_power_mode();
|
||||
current_power_state = pcm_get_power_state();
|
||||
@@ -256,76 +257,76 @@ static bool __pcm_set_power_state_advanced(uint_fast8_t power_state,
|
||||
return true;
|
||||
|
||||
switch (power_state) {
|
||||
case PCM_AM_LDO_VCORE0:
|
||||
return __pcm_set_core_voltage_level_advanced(PCM_VCORE0, timeout,
|
||||
blocking) && __pcm_set_power_mode_advanced(PCM_LDO_MODE,
|
||||
timeout, blocking);
|
||||
case PCM_AM_LDO_VCORE1:
|
||||
return __pcm_set_core_voltage_level_advanced(PCM_VCORE1, timeout,
|
||||
blocking) && __pcm_set_power_mode_advanced(PCM_LDO_MODE,
|
||||
timeout, blocking);
|
||||
case PCM_AM_DCDC_VCORE0:
|
||||
return __pcm_set_core_voltage_level_advanced(PCM_VCORE0, timeout,
|
||||
blocking) && __pcm_set_power_mode_advanced(PCM_DCDC_MODE,
|
||||
timeout, blocking);
|
||||
case PCM_AM_DCDC_VCORE1:
|
||||
return __pcm_set_core_voltage_level_advanced(PCM_VCORE1, timeout,
|
||||
blocking) && __pcm_set_power_mode_advanced(PCM_DCDC_MODE,
|
||||
timeout, blocking);
|
||||
case PCM_AM_LF_VCORE0:
|
||||
return __pcm_set_core_voltage_level_advanced(PCM_VCORE0, timeout,
|
||||
blocking) && __pcm_set_power_mode_advanced(PCM_LF_MODE,
|
||||
timeout, blocking);
|
||||
case PCM_AM_LF_VCORE1:
|
||||
return __pcm_set_core_voltage_level_advanced(PCM_VCORE1, timeout,
|
||||
blocking) && __pcm_set_power_mode_advanced(PCM_LF_MODE,
|
||||
timeout, blocking);
|
||||
case PCM_LPM0_LDO_VCORE0:
|
||||
if (!__pcm_set_core_voltage_level_advanced(PCM_VCORE0, timeout,
|
||||
blocking) || !__pcm_set_power_mode_advanced(PCM_LDO_MODE,
|
||||
timeout, blocking))
|
||||
break;
|
||||
return pcm_goto_lpm0();
|
||||
case PCM_LPM0_LDO_VCORE1:
|
||||
if (!__pcm_set_core_voltage_level_advanced(PCM_VCORE1, timeout,
|
||||
blocking) || !__pcm_set_power_mode_advanced(PCM_LDO_MODE,
|
||||
timeout, blocking))
|
||||
break;
|
||||
return pcm_goto_lpm0();
|
||||
case PCM_LPM0_DCDC_VCORE0:
|
||||
if (!__pcm_set_core_voltage_level_advanced(PCM_VCORE0, timeout,
|
||||
blocking) || !__pcm_set_power_mode_advanced(PCM_DCDC_MODE,
|
||||
timeout, blocking))
|
||||
break;
|
||||
return pcm_goto_lpm0();
|
||||
case PCM_LPM0_DCDC_VCORE1:
|
||||
if (!__pcm_set_core_voltage_level_advanced(PCM_VCORE1, timeout,
|
||||
blocking) || !__pcm_set_power_mode_advanced(PCM_DCDC_MODE,
|
||||
timeout, blocking))
|
||||
break;
|
||||
return pcm_goto_lpm0();
|
||||
case PCM_LPM0_LF_VCORE0:
|
||||
if (!__pcm_set_core_voltage_level_advanced(PCM_VCORE0, timeout,
|
||||
blocking) || !__pcm_set_power_mode_advanced(PCM_LF_MODE,
|
||||
timeout, blocking))
|
||||
break;
|
||||
return pcm_goto_lpm0();
|
||||
case PCM_LPM0_LF_VCORE1:
|
||||
if (!__pcm_set_core_voltage_level_advanced(PCM_VCORE1, timeout,
|
||||
blocking) || !__pcm_set_power_mode_advanced(PCM_LF_MODE,
|
||||
timeout, blocking))
|
||||
break;
|
||||
return pcm_goto_lpm0();
|
||||
case PCM_LPM3:
|
||||
return pcm_goto_lpm3();
|
||||
case PCM_LPM4:
|
||||
return pcm_goto_lpm4();
|
||||
case PCM_LPM45:
|
||||
return pcm_shutdown_device(PCM_LPM45);
|
||||
case PCM_LPM35_VCORE0:
|
||||
return pcm_shutdown_device(PCM_LPM35_VCORE0);
|
||||
default:
|
||||
return false;
|
||||
case PCM_AM_LDO_VCORE0:
|
||||
return __pcm_set_core_voltage_level_advanced(PCM_VCORE0, timeout,
|
||||
blocking) && __pcm_set_power_mode_advanced(PCM_LDO_MODE,
|
||||
timeout, blocking);
|
||||
case PCM_AM_LDO_VCORE1:
|
||||
return __pcm_set_core_voltage_level_advanced(PCM_VCORE1, timeout,
|
||||
blocking) && __pcm_set_power_mode_advanced(PCM_LDO_MODE,
|
||||
timeout, blocking);
|
||||
case PCM_AM_DCDC_VCORE0:
|
||||
return __pcm_set_core_voltage_level_advanced(PCM_VCORE0, timeout,
|
||||
blocking) && __pcm_set_power_mode_advanced(PCM_DCDC_MODE,
|
||||
timeout, blocking);
|
||||
case PCM_AM_DCDC_VCORE1:
|
||||
return __pcm_set_core_voltage_level_advanced(PCM_VCORE1, timeout,
|
||||
blocking) && __pcm_set_power_mode_advanced(PCM_DCDC_MODE,
|
||||
timeout, blocking);
|
||||
case PCM_AM_LF_VCORE0:
|
||||
return __pcm_set_core_voltage_level_advanced(PCM_VCORE0, timeout,
|
||||
blocking) && __pcm_set_power_mode_advanced(PCM_LF_MODE,
|
||||
timeout, blocking);
|
||||
case PCM_AM_LF_VCORE1:
|
||||
return __pcm_set_core_voltage_level_advanced(PCM_VCORE1, timeout,
|
||||
blocking) && __pcm_set_power_mode_advanced(PCM_LF_MODE,
|
||||
timeout, blocking);
|
||||
case PCM_LPM0_LDO_VCORE0:
|
||||
if (!__pcm_set_core_voltage_level_advanced(PCM_VCORE0, timeout,
|
||||
blocking) || !__pcm_set_power_mode_advanced(PCM_LDO_MODE,
|
||||
timeout, blocking))
|
||||
break;
|
||||
return pcm_goto_lpm0();
|
||||
case PCM_LPM0_LDO_VCORE1:
|
||||
if (!__pcm_set_core_voltage_level_advanced(PCM_VCORE1, timeout,
|
||||
blocking) || !__pcm_set_power_mode_advanced(PCM_LDO_MODE,
|
||||
timeout, blocking))
|
||||
break;
|
||||
return pcm_goto_lpm0();
|
||||
case PCM_LPM0_DCDC_VCORE0:
|
||||
if (!__pcm_set_core_voltage_level_advanced(PCM_VCORE0, timeout,
|
||||
blocking) || !__pcm_set_power_mode_advanced(PCM_DCDC_MODE,
|
||||
timeout, blocking))
|
||||
break;
|
||||
return pcm_goto_lpm0();
|
||||
case PCM_LPM0_DCDC_VCORE1:
|
||||
if (!__pcm_set_core_voltage_level_advanced(PCM_VCORE1, timeout,
|
||||
blocking) || !__pcm_set_power_mode_advanced(PCM_DCDC_MODE,
|
||||
timeout, blocking))
|
||||
break;
|
||||
return pcm_goto_lpm0();
|
||||
case PCM_LPM0_LF_VCORE0:
|
||||
if (!__pcm_set_core_voltage_level_advanced(PCM_VCORE0, timeout,
|
||||
blocking) || !__pcm_set_power_mode_advanced(PCM_LF_MODE,
|
||||
timeout, blocking))
|
||||
break;
|
||||
return pcm_goto_lpm0();
|
||||
case PCM_LPM0_LF_VCORE1:
|
||||
if (!__pcm_set_core_voltage_level_advanced(PCM_VCORE1, timeout,
|
||||
blocking) || !__pcm_set_power_mode_advanced(PCM_LF_MODE,
|
||||
timeout, blocking))
|
||||
break;
|
||||
return pcm_goto_lpm0();
|
||||
case PCM_LPM3:
|
||||
return pcm_goto_lpm3();
|
||||
case PCM_LPM4:
|
||||
return pcm_goto_lpm4();
|
||||
case PCM_LPM45:
|
||||
return pcm_shutdown_device(PCM_LPM45);
|
||||
case PCM_LPM35_VCORE0:
|
||||
return pcm_shutdown_device(PCM_LPM35_VCORE0);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -30,37 +30,37 @@ int main(void)
|
||||
|
||||
while (1) {
|
||||
switch (FLASH_LOADER->FLASH_FUNCTION) {
|
||||
case FLASH_INIT:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_init();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_MASS_ERASE:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_mass_erase();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_SECTOR_ERASE:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_sector_erase();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_PROGRAM:
|
||||
case FLASH_CONTINUOUS_PROGRAM:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_continous_write();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_EXIT:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_exit();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_NO_COMMAND:
|
||||
break;
|
||||
default:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_WRONG_COMMAND;
|
||||
break;
|
||||
case FLASH_INIT:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_init();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_MASS_ERASE:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_mass_erase();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_SECTOR_ERASE:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_sector_erase();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_PROGRAM:
|
||||
case FLASH_CONTINUOUS_PROGRAM:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_continous_write();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_EXIT:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_exit();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_NO_COMMAND:
|
||||
break;
|
||||
default:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_WRONG_COMMAND;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,41 +49,41 @@ int main(void)
|
||||
|
||||
while (1) {
|
||||
switch (FLASH_LOADER->FLASH_FUNCTION) {
|
||||
case FLASH_INIT:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_init();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_MASS_ERASE:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_mass_erase();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_SECTOR_ERASE:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_sector_erase();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_PROGRAM:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_write();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_CONTINUOUS_PROGRAM:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_continous_write();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_EXIT:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_exit();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_NO_COMMAND:
|
||||
break;
|
||||
default:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_WRONG_COMMAND;
|
||||
break;
|
||||
case FLASH_INIT:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_init();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_MASS_ERASE:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_mass_erase();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_SECTOR_ERASE:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_sector_erase();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_PROGRAM:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_write();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_CONTINUOUS_PROGRAM:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_continous_write();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_EXIT:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_exit();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_NO_COMMAND:
|
||||
break;
|
||||
default:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_WRONG_COMMAND;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,41 +52,41 @@ int main(void)
|
||||
|
||||
while (1) {
|
||||
switch (FLASH_LOADER->FLASH_FUNCTION) {
|
||||
case FLASH_INIT:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_init();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_MASS_ERASE:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_mass_erase();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_SECTOR_ERASE:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_sector_erase();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_PROGRAM:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_write();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_CONTINUOUS_PROGRAM:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_continous_write();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_EXIT:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_exit();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_NO_COMMAND:
|
||||
break;
|
||||
default:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_WRONG_COMMAND;
|
||||
break;
|
||||
case FLASH_INIT:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_init();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_MASS_ERASE:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_mass_erase();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_SECTOR_ERASE:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_sector_erase();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_PROGRAM:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_write();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_CONTINUOUS_PROGRAM:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_continous_write();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_EXIT:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_BUSY;
|
||||
msp432_flash_exit();
|
||||
FLASH_LOADER->FLASH_FUNCTION = 0;
|
||||
break;
|
||||
case FLASH_NO_COMMAND:
|
||||
break;
|
||||
default:
|
||||
FLASH_LOADER->RETURN_CODE = FLASH_WRONG_COMMAND;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,60 +1,70 @@
|
||||
/* Autogenerated with ../../../../src/helper/bin2char.sh */
|
||||
0x08,0xb5,0xdf,0xf8,0x08,0xd0,0x00,0xf0,0x2f,0xf9,0x00,0x00,0x48,0x15,0x0c,0x20,
|
||||
0x03,0x4b,0x18,0x70,0x19,0x72,0x08,0x33,0x1a,0x78,0xd2,0x09,0xfc,0xd1,0x70,0x47,
|
||||
0x16,0x00,0x02,0x40,0x70,0xb5,0x11,0x4c,0x23,0x78,0x03,0xf0,0xfd,0x03,0x23,0x70,
|
||||
0xc0,0x21,0x05,0x20,0xff,0xf7,0xec,0xff,0x0d,0x4a,0x0e,0x49,0x6f,0xf0,0x7f,0x43,
|
||||
0x6f,0xf0,0x2e,0x05,0x10,0x46,0x15,0x70,0x06,0x78,0xf6,0x09,0xfc,0xd1,0x0e,0x78,
|
||||
0xf6,0x07,0x01,0xd5,0x01,0x3b,0xf6,0xd1,0x22,0x78,0x42,0xf0,0x02,0x02,0x00,0x2b,
|
||||
0x22,0x70,0x0c,0xbf,0x03,0x20,0x00,0x20,0x70,0xbd,0x00,0xbf,0x1f,0x00,0x02,0x40,
|
||||
0x08,0xb5,0xdf,0xf8,0x08,0xd0,0x00,0xf0,0x95,0xf9,0x00,0x00,0xec,0x15,0x0c,0x20,
|
||||
0x03,0x4b,0x18,0x70,0x08,0x33,0x19,0x70,0x1a,0x78,0xd2,0x09,0xfc,0xd1,0x70,0x47,
|
||||
0x16,0x00,0x02,0x40,0x13,0x4b,0x14,0x49,0x1a,0x68,0xea,0xb1,0x1a,0x68,0x01,0x2a,
|
||||
0x1e,0xd0,0x1b,0x68,0x02,0x2b,0x1b,0xd1,0x10,0x4b,0x1a,0x78,0x50,0xb1,0x02,0xf0,
|
||||
0xf7,0x02,0x1a,0x70,0x01,0x22,0x08,0x78,0x01,0x23,0x93,0x40,0x03,0x43,0xdb,0xb2,
|
||||
0x0b,0x70,0x70,0x47,0x42,0xf0,0x08,0x02,0x1a,0x70,0x01,0x22,0x08,0x78,0x01,0x23,
|
||||
0x93,0x40,0x20,0xea,0x03,0x03,0xf3,0xe7,0x01,0x22,0x00,0x28,0xf6,0xd0,0xea,0xe7,
|
||||
0x00,0x22,0xfa,0xe7,0x00,0x00,0x0c,0x20,0x1f,0x00,0x02,0x40,0x43,0x00,0x02,0x40,
|
||||
0x73,0xb5,0x04,0x46,0x00,0x20,0x15,0x46,0x0e,0x46,0xff,0xf7,0xcb,0xff,0x0f,0x4b,
|
||||
0x01,0x94,0xc4,0xf3,0x07,0x44,0x1c,0x70,0x9d,0xf8,0x05,0x20,0x5a,0x70,0x9d,0xf8,
|
||||
0x04,0x20,0x9a,0x70,0xf3,0x21,0x02,0x20,0xff,0xf7,0xb2,0xff,0x2c,0x46,0x63,0x1b,
|
||||
0xb3,0x42,0x05,0xd3,0x01,0x20,0x02,0xb0,0xbd,0xe8,0x70,0x40,0xff,0xf7,0xb2,0xbf,
|
||||
0xe0,0x21,0x14,0xf8,0x01,0x0b,0xff,0xf7,0xa3,0xff,0xf0,0xe7,0x1a,0x00,0x02,0x40,
|
||||
0x08,0x4b,0x1b,0x68,0x02,0x2b,0x08,0x4b,0x07,0xd1,0x08,0x4a,0x80,0x21,0x11,0x70,
|
||||
0xc0,0x22,0x1a,0x70,0x00,0x22,0x1a,0x71,0x70,0x47,0x1a,0x78,0x42,0xf0,0x80,0x02,
|
||||
0x1a,0x70,0x70,0x47,0x00,0x00,0x0c,0x20,0x10,0x30,0x0c,0x40,0x00,0x30,0x0c,0x40,
|
||||
0x38,0xb5,0x00,0x20,0xff,0xf7,0x8e,0xff,0xc0,0x21,0x05,0x20,0xff,0xf7,0x80,0xff,
|
||||
0x0b,0x4b,0x0c,0x4a,0x6f,0xf0,0x7f,0x44,0x6f,0xf0,0x2e,0x00,0x19,0x46,0x18,0x70,
|
||||
0x0d,0x78,0xed,0x09,0xfc,0xd1,0x15,0x78,0xed,0x07,0x01,0xd5,0x01,0x3c,0xf6,0xd1,
|
||||
0x01,0x20,0xff,0xf7,0x77,0xff,0x00,0x2c,0x0c,0xbf,0x03,0x20,0x00,0x20,0x38,0xbd,
|
||||
0x1e,0x00,0x02,0x40,0x1a,0x00,0x02,0x40,0x08,0xb5,0xc0,0x21,0x06,0x20,0xff,0xf7,
|
||||
0xc7,0xff,0xff,0xf7,0xcf,0xff,0x28,0xb9,0x03,0x4b,0x1b,0x78,0x13,0xf0,0x02,0x0f,
|
||||
0x08,0xbf,0x02,0x20,0x08,0xbd,0x00,0xbf,0x1a,0x00,0x02,0x40,0xf8,0xb5,0x12,0x4c,
|
||||
0x23,0x78,0x03,0xf0,0xfd,0x03,0x23,0x70,0x10,0x4b,0x17,0x46,0xc0,0xf3,0x07,0x42,
|
||||
0x1a,0x70,0xc0,0xf3,0x07,0x22,0xc0,0xb2,0x03,0xf8,0x01,0x2c,0x0e,0x46,0x03,0xf8,
|
||||
0x02,0x0c,0xe8,0x21,0x02,0x20,0xff,0xf7,0xa3,0xff,0x00,0x25,0xae,0x42,0x04,0xd8,
|
||||
0x23,0x78,0x43,0xf0,0x02,0x03,0x23,0x70,0xf8,0xbd,0x78,0x5d,0xe0,0x21,0xff,0xf7,
|
||||
0x97,0xff,0x01,0x35,0xf2,0xe7,0x00,0xbf,0x1f,0x00,0x02,0x40,0x19,0x00,0x02,0x40,
|
||||
0x70,0x47,0x2d,0xe9,0xf0,0x41,0x00,0xf1,0xff,0x06,0x26,0xf0,0xff,0x06,0x34,0x1a,
|
||||
0x8c,0x42,0x28,0xbf,0x0c,0x46,0x80,0x46,0x0d,0x46,0x17,0x46,0x5c,0xb1,0xff,0xf7,
|
||||
0xb3,0xff,0x58,0xb9,0x3a,0x46,0xa1,0xb2,0x40,0x46,0xff,0xf7,0xbf,0xff,0xff,0xf7,
|
||||
0x81,0xff,0x18,0xb9,0x27,0x44,0x2c,0x1b,0x14,0xb9,0x20,0x46,0xbd,0xe8,0xf0,0x81,
|
||||
0xb4,0xf5,0x80,0x7f,0x25,0x46,0x28,0xbf,0x4f,0xf4,0x80,0x75,0xff,0xf7,0x9c,0xff,
|
||||
0x00,0x28,0xf3,0xd1,0x3a,0x46,0xa9,0xb2,0x30,0x46,0xff,0xf7,0xa7,0xff,0xff,0xf7,
|
||||
0x69,0xff,0x00,0x28,0xea,0xd1,0x2f,0x44,0x2e,0x44,0x64,0x1b,0xe4,0xe7,0x00,0x00,
|
||||
0x2d,0xe9,0xf0,0x47,0x14,0x4e,0x15,0x4f,0xdf,0xf8,0x54,0x80,0x05,0x46,0x0c,0x46,
|
||||
0x8a,0x46,0x05,0xeb,0x04,0x09,0xa9,0xeb,0x0a,0x09,0xba,0xf1,0x00,0x0f,0x02,0xd1,
|
||||
0x50,0x46,0xbd,0xe8,0xf0,0x87,0xff,0xf7,0x77,0xff,0x00,0x28,0xf9,0xd1,0xc9,0xf3,
|
||||
0x07,0x43,0x33,0x70,0xc9,0xf3,0x07,0x23,0x5f,0xfa,0x89,0xf9,0x3b,0x70,0xc8,0x21,
|
||||
0x20,0x20,0x88,0xf8,0x00,0x90,0xff,0xf7,0x33,0xff,0xff,0xf7,0x3b,0xff,0x00,0x28,
|
||||
0xe7,0xd1,0xaa,0xf5,0x80,0x5a,0xdc,0xe7,0x19,0x00,0x02,0x40,0x18,0x00,0x02,0x40,
|
||||
0x17,0x00,0x02,0x40,0x08,0xb5,0xff,0xf7,0x57,0xff,0x38,0xb9,0xc0,0x21,0xc7,0x20,
|
||||
0xff,0xf7,0x1e,0xff,0xbd,0xe8,0x08,0x40,0xff,0xf7,0x24,0xbf,0x08,0xbd,0x00,0x00,
|
||||
0x38,0xb5,0xff,0xf7,0x49,0xff,0x04,0x46,0xc0,0xb9,0x0d,0x4b,0x0d,0x4d,0xf2,0x21,
|
||||
0x28,0x70,0x18,0x70,0x01,0x20,0xff,0xf7,0x0b,0xff,0xff,0xf7,0x13,0xff,0x04,0x46,
|
||||
0x60,0xb9,0xc1,0x21,0x05,0x20,0xff,0xf7,0x03,0xff,0x2b,0x78,0x2b,0xb9,0xc1,0x21,
|
||||
0x35,0x20,0xff,0xf7,0xfd,0xfe,0x2b,0x78,0x03,0xb1,0x02,0x24,0x20,0x46,0x38,0xbd,
|
||||
0x1b,0x00,0x02,0x40,0x1a,0x00,0x02,0x40,0x10,0xb5,0xc3,0x21,0x04,0x46,0x9f,0x20,
|
||||
0xff,0xf7,0xee,0xfe,0x06,0x4b,0x07,0x4a,0x19,0x78,0x01,0x33,0x00,0x20,0x1b,0x78,
|
||||
0x12,0x78,0x1b,0x02,0x43,0xea,0x01,0x43,0x13,0x43,0x23,0x60,0x10,0xbd,0x00,0xbf,
|
||||
0x1a,0x00,0x02,0x40,0x1c,0x00,0x02,0x40,0x08,0xb5,0x10,0x22,0x00,0x21,0x00,0xf0,
|
||||
0x4d,0xf8,0x00,0x20,0x08,0xbd,0x00,0x00,0x73,0xb5,0x21,0x48,0x20,0x4c,0xff,0xf7,
|
||||
0xf3,0xff,0x20,0x4a,0x13,0x78,0x43,0xf0,0x80,0x03,0x13,0x70,0xff,0xf7,0xb0,0xff,
|
||||
0x05,0x46,0x58,0xb9,0x1c,0x4e,0xe3,0x68,0x00,0x2b,0xfc,0xd0,0xa3,0x68,0x01,0x3b,
|
||||
0x03,0x2b,0x2a,0xd8,0xdf,0xe8,0x03,0xf0,0x04,0x18,0x20,0x23,0xe5,0x60,0xfd,0xe7,
|
||||
0x01,0xa8,0xff,0xf7,0xc1,0xff,0xa8,0xb9,0x01,0x9b,0x33,0x70,0x1a,0x0a,0x1b,0x0c,
|
||||
0x72,0x70,0xb3,0x70,0xf0,0x70,0x23,0x7b,0x25,0x73,0x63,0x7b,0x65,0x73,0xa3,0x7b,
|
||||
0xa5,0x73,0xe3,0x7b,0xe5,0x73,0xde,0xe7,0x20,0x68,0x61,0x68,0xff,0xf7,0x48,0xff,
|
||||
0x00,0x28,0xf0,0xd0,0xe0,0x60,0xfe,0xe7,0xff,0xf7,0x74,0xff,0xf8,0xe7,0x20,0x68,
|
||||
0x61,0x68,0x32,0x46,0xff,0xf7,0x05,0xff,0xf2,0xe7,0x01,0x20,0xf2,0xe7,0x00,0xbf,
|
||||
0x00,0x00,0x0c,0x20,0x10,0x30,0x0c,0x40,0x10,0x00,0x0c,0x20,0xf0,0xb5,0x05,0x00,
|
||||
0x83,0x07,0x4e,0xd0,0x54,0x1e,0x00,0x2a,0x46,0xd0,0x0a,0x06,0x12,0x0e,0x03,0x00,
|
||||
0x03,0x26,0x02,0xe0,0x01,0x35,0x01,0x3c,0x3e,0xd3,0x01,0x33,0x2a,0x70,0x33,0x42,
|
||||
0xf8,0xd1,0x03,0x2c,0x2f,0xd9,0xff,0x22,0x0a,0x40,0x15,0x02,0x15,0x43,0x2a,0x04,
|
||||
0x15,0x43,0x0f,0x2c,0x38,0xd9,0x27,0x00,0x10,0x3f,0x3f,0x09,0x3e,0x01,0xb4,0x46,
|
||||
0x1e,0x00,0x1a,0x00,0x10,0x36,0x66,0x44,0x15,0x60,0x55,0x60,0x95,0x60,0xd5,0x60,
|
||||
0x10,0x32,0xb2,0x42,0xf8,0xd1,0x0f,0x26,0x0c,0x22,0x01,0x37,0x3f,0x01,0x26,0x40,
|
||||
0xdb,0x19,0x37,0x00,0x22,0x42,0x1a,0xd0,0x3e,0x1f,0xb6,0x08,0xb4,0x00,0xa4,0x46,
|
||||
0x1a,0x00,0x1c,0x1d,0x64,0x44,0x20,0xc2,0xa2,0x42,0xfc,0xd1,0x03,0x24,0x01,0x36,
|
||||
0xb6,0x00,0x9b,0x19,0x3c,0x40,0x00,0x2c,0x06,0xd0,0x09,0x06,0x1c,0x19,0x09,0x0e,
|
||||
0x19,0x70,0x01,0x33,0x9c,0x42,0xfb,0xd1,0xf0,0xbc,0x02,0xbc,0x08,0x47,0x34,0x00,
|
||||
0xf1,0xe7,0x14,0x00,0x03,0x00,0xbc,0xe7,0x27,0x00,0xdd,0xe7,
|
||||
0x5f,0xff,0xff,0xf7,0xd5,0xff,0x28,0xb9,0x03,0x4b,0x1b,0x78,0x13,0xf0,0x02,0x0f,
|
||||
0x08,0xbf,0x02,0x20,0x08,0xbd,0x00,0xbf,0x1a,0x00,0x02,0x40,0x70,0x47,0x00,0x00,
|
||||
0x38,0xb5,0x17,0x4c,0xc1,0x21,0x05,0x20,0xff,0xf7,0x4a,0xff,0x25,0x78,0xc1,0x21,
|
||||
0x35,0x20,0xff,0xf7,0x45,0xff,0x23,0x78,0xed,0xb2,0xdb,0xb2,0x05,0xb9,0xd3,0xb1,
|
||||
0xff,0xf7,0xda,0xff,0xd0,0xb9,0x0f,0x4b,0x20,0x70,0xf2,0x21,0x18,0x70,0x01,0x20,
|
||||
0xff,0xf7,0x36,0xff,0xff,0xf7,0xac,0xff,0x80,0xb9,0xc1,0x21,0x05,0x20,0xff,0xf7,
|
||||
0x2f,0xff,0x25,0x78,0xc1,0x21,0x35,0x20,0xff,0xf7,0x2a,0xff,0x23,0x78,0xed,0xb2,
|
||||
0xdb,0xb2,0x15,0xb9,0x0b,0xb9,0x00,0x20,0x38,0xbd,0x02,0x20,0x38,0xbd,0x00,0xbf,
|
||||
0x1a,0x00,0x02,0x40,0x1b,0x00,0x02,0x40,0x2d,0xe9,0xf8,0x43,0x81,0x46,0x0d,0x46,
|
||||
0x90,0x46,0xff,0xf7,0x75,0xff,0xff,0xf7,0xc3,0xff,0x06,0x46,0xb8,0xb9,0x09,0xf1,
|
||||
0xff,0x07,0x27,0xf0,0xff,0x07,0xa7,0xeb,0x09,0x04,0xac,0x42,0x28,0xbf,0x2c,0x46,
|
||||
0x5c,0xb1,0xff,0xf7,0xa1,0xff,0x10,0xbb,0x42,0x46,0xa1,0xb2,0x48,0x46,0xff,0xf7,
|
||||
0x37,0xff,0xff,0xf7,0x75,0xff,0xd0,0xb9,0xa0,0x44,0x2c,0x1b,0x14,0xb9,0x30,0x46,
|
||||
0xbd,0xe8,0xf8,0x83,0xff,0xf7,0x90,0xff,0x88,0xb9,0xb4,0xf5,0x80,0x7f,0x25,0x46,
|
||||
0x28,0xbf,0x4f,0xf4,0x80,0x75,0x42,0x46,0xa9,0xb2,0x38,0x46,0xff,0xf7,0x20,0xff,
|
||||
0xff,0xf7,0x5e,0xff,0x18,0xb9,0xa8,0x44,0x2f,0x44,0x64,0x1b,0xe6,0xe7,0x06,0x46,
|
||||
0xe5,0xe7,0x00,0x00,0x2d,0xe9,0xf7,0x4f,0x06,0x46,0x0d,0x46,0xff,0xf7,0x38,0xff,
|
||||
0xff,0xf7,0x86,0xff,0x82,0x46,0x58,0xb9,0x15,0x4f,0xdf,0xf8,0x58,0x80,0xdf,0xf8,
|
||||
0x58,0x90,0xab,0x46,0x74,0x19,0xa4,0xeb,0x0b,0x04,0xbb,0xf1,0x00,0x0f,0x03,0xd1,
|
||||
0x50,0x46,0x03,0xb0,0xbd,0xe8,0xf0,0x8f,0xff,0xf7,0x5e,0xff,0xa8,0xb9,0x01,0x94,
|
||||
0xc4,0xf3,0x07,0x44,0x3c,0x70,0x9d,0xf8,0x05,0x30,0x88,0xf8,0x00,0x30,0x9d,0xf8,
|
||||
0x04,0x30,0x89,0xf8,0x00,0x30,0xf3,0x21,0x20,0x20,0xff,0xf7,0xb1,0xfe,0xff,0xf7,
|
||||
0x27,0xff,0x10,0xb9,0xab,0xf5,0x80,0x5b,0xdc,0xe7,0x82,0x46,0xe0,0xe7,0x00,0xbf,
|
||||
0x1a,0x00,0x02,0x40,0x1b,0x00,0x02,0x40,0x1c,0x00,0x02,0x40,0x08,0xb5,0xff,0xf7,
|
||||
0xff,0xfe,0xff,0xf7,0x4d,0xff,0x50,0xb9,0xff,0xf7,0x36,0xff,0x38,0xb9,0xc0,0x21,
|
||||
0xc7,0x20,0xff,0xf7,0x95,0xfe,0xbd,0xe8,0x08,0x40,0xff,0xf7,0x09,0xbf,0x08,0xbd,
|
||||
0x10,0xb5,0x04,0x46,0xff,0xf7,0xec,0xfe,0xc3,0x21,0x9f,0x20,0xff,0xf7,0x88,0xfe,
|
||||
0x06,0x4b,0x07,0x4a,0x19,0x78,0x01,0x33,0x00,0x20,0x1b,0x78,0x12,0x78,0x1b,0x02,
|
||||
0x43,0xea,0x01,0x43,0x13,0x43,0x23,0x60,0x10,0xbd,0x00,0xbf,0x1a,0x00,0x02,0x40,
|
||||
0x1c,0x00,0x02,0x40,0x08,0xb5,0x14,0x22,0x00,0x21,0x00,0xf0,0x41,0xf8,0x00,0x20,
|
||||
0x08,0xbd,0x00,0x00,0x73,0xb5,0x1c,0x48,0x1b,0x4e,0x1c,0x4d,0xff,0xf7,0xf2,0xff,
|
||||
0x34,0x46,0x33,0x69,0x00,0x2b,0xfc,0xd0,0xf3,0x68,0x01,0x3b,0x03,0x2b,0x29,0xd8,
|
||||
0xdf,0xe8,0x03,0xf0,0x02,0x17,0x1f,0x22,0x01,0xa8,0xff,0xf7,0xc9,0xff,0xb0,0xb9,
|
||||
0x01,0x9b,0x2b,0x70,0x19,0x0a,0x1b,0x0c,0x69,0x70,0xab,0x70,0xe8,0x70,0x23,0x7c,
|
||||
0x00,0x23,0x23,0x74,0x62,0x7c,0x63,0x74,0xa2,0x7c,0xa3,0x74,0xe2,0x7c,0xe3,0x74,
|
||||
0xdf,0xe7,0x60,0x68,0xa1,0x68,0xff,0xf7,0x65,0xff,0x00,0x28,0xef,0xd0,0x20,0x61,
|
||||
0xfe,0xe7,0xff,0xf7,0x9b,0xff,0xf8,0xe7,0x60,0x68,0xa1,0x68,0x2a,0x46,0xff,0xf7,
|
||||
0x1b,0xff,0xf2,0xe7,0x01,0x20,0xf2,0xe7,0x00,0x00,0x0c,0x20,0x14,0x00,0x0c,0x20,
|
||||
0xf0,0xb5,0x83,0x07,0x47,0xd0,0x54,0x1e,0x00,0x2a,0x41,0xd0,0x0d,0x06,0x2d,0x0e,
|
||||
0x02,0x00,0x03,0x26,0x02,0xe0,0x1a,0x00,0x01,0x3c,0x39,0xd3,0x53,0x1c,0x15,0x70,
|
||||
0x33,0x42,0xf8,0xd1,0x03,0x2c,0x2a,0xd9,0xff,0x22,0x0a,0x40,0x15,0x02,0x15,0x43,
|
||||
0x2a,0x04,0x15,0x43,0x0f,0x2c,0x14,0xd9,0x27,0x00,0x1a,0x00,0x10,0x3f,0x3e,0x09,
|
||||
0x01,0x36,0x36,0x01,0x9e,0x19,0x15,0x60,0x55,0x60,0x95,0x60,0xd5,0x60,0x10,0x32,
|
||||
0x96,0x42,0xf8,0xd1,0x0f,0x22,0x97,0x43,0x10,0x37,0xdb,0x19,0x14,0x40,0x03,0x2c,
|
||||
0x0d,0xd9,0x1a,0x00,0x27,0x1f,0xbe,0x08,0x01,0x36,0xb6,0x00,0x9e,0x19,0x20,0xc2,
|
||||
0xb2,0x42,0xfc,0xd1,0x03,0x22,0x97,0x43,0x04,0x37,0xdb,0x19,0x14,0x40,0x00,0x2c,
|
||||
0x06,0xd0,0x09,0x06,0x1c,0x19,0x09,0x0e,0x19,0x70,0x01,0x33,0x9c,0x42,0xfb,0xd1,
|
||||
0xf0,0xbc,0x02,0xbc,0x08,0x47,0x14,0x00,0x03,0x00,0xc3,0xe7,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user