mirror of
https://github.com/tinygrad/tinygrad.git
synced 2026-08-17 15:58:27 +00:00
Compare commits
755
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dd51728795 | ||
|
|
a59b1ed970 | ||
|
|
147fc0e648 | ||
|
|
17f7b226cb | ||
|
|
9c34d9eb6e | ||
|
|
95261b6193 | ||
|
|
1e2becfeae | ||
|
|
e18cdbcbe2 | ||
|
|
f3cb4c3eef | ||
|
|
6ecaf11224 | ||
|
|
8b24f9cb0d | ||
|
|
797e512c00 | ||
|
|
f600482982 | ||
|
|
da35edbb55 | ||
|
|
661431ee75 | ||
|
|
8340d9c1c2 | ||
|
|
910cddbbca | ||
|
|
e6e0c0ec86 | ||
|
|
d0eedb5a79 | ||
|
|
f69deddbd4 | ||
|
|
be11fbbf78 | ||
|
|
812c391617 | ||
|
|
3306083f42 | ||
|
|
18d7e9d3f1 | ||
|
|
1c3f249ecf | ||
|
|
bb7b89475c | ||
|
|
8005e6c974 | ||
|
|
a3d61a0372 | ||
|
|
c73e35aa24 | ||
|
|
0b4b9f61b9 | ||
|
|
ee3ddfcdc1 | ||
|
|
220d682489 | ||
|
|
9c388c3539 | ||
|
|
4b3a4c8c46 | ||
|
|
eb606d7230 | ||
|
|
49d52a2763 | ||
|
|
a59c3dd09a | ||
|
|
a640292aed | ||
|
|
2f48c12441 | ||
|
|
e4c545b396 | ||
|
|
be3b5efc64 | ||
|
|
996d0ac1d2 | ||
|
|
ec405b919f | ||
|
|
77e897b3b1 | ||
|
|
49b1c46d16 | ||
|
|
273dde69bd | ||
|
|
a64030d8c8 | ||
|
|
9d67d3a2f3 | ||
|
|
9b19129e87 | ||
|
|
48221d9024 | ||
|
|
bcfcd60f55 | ||
|
|
60eb0c4ed7 | ||
|
|
abc90024ac | ||
|
|
5012ba3f04 | ||
|
|
d8d7ac1bb1 | ||
|
|
ff984c807d | ||
|
|
f0e6d8394c | ||
|
|
c206a7ae6d | ||
|
|
6652003839 | ||
|
|
d52e91db7b | ||
|
|
962c0f65f8 | ||
|
|
2a4247b8c2 | ||
|
|
a08b07b4da | ||
|
|
7ef02d0e1c | ||
|
|
f1a35bbb54 | ||
|
|
54e1e59b44 | ||
|
|
118bd1cbed | ||
|
|
5908b89f71 | ||
|
|
77f0d09ecf | ||
|
|
a1c1ecd597 | ||
|
|
162f286a0e | ||
|
|
dd9aae02c3 | ||
|
|
3e1168ff5e | ||
|
|
489a5e24c4 | ||
|
|
a8ff85369e | ||
|
|
fa0ebbd237 | ||
|
|
e0fd84dd64 | ||
|
|
1a9d7a1628 | ||
|
|
45646fe102 | ||
|
|
9c928afafe | ||
|
|
d4f1c5049b | ||
|
|
11b478f85d | ||
|
|
0aa7031b5f | ||
|
|
ab67d5ff6e | ||
|
|
392a311312 | ||
|
|
cbe23e13c2 | ||
|
|
d1e8598c81 | ||
|
|
9bbd12dc65 | ||
|
|
b4ea45b4a6 | ||
|
|
b09142a893 | ||
|
|
1d7faf4777 | ||
|
|
59438be39b | ||
|
|
cc23836a38 | ||
|
|
e4354effa2 | ||
|
|
50dee4a7b3 | ||
|
|
5358b0904b | ||
|
|
a187dfd3df | ||
|
|
088a677e25 | ||
|
|
3737821b9e | ||
|
|
d180e909a3 | ||
|
|
52364231dc | ||
|
|
d32ad080c3 | ||
|
|
a8bd26d9bc | ||
|
|
6d860389f4 | ||
|
|
5d5286489d | ||
|
|
917e0e925b | ||
|
|
6081f8427e | ||
|
|
23035bf028 | ||
|
|
5e33163ef3 | ||
|
|
cee9fc7540 | ||
|
|
bf94924d5a | ||
|
|
c011751b41 | ||
|
|
9041072dea | ||
|
|
444d6279ac | ||
|
|
0877497bad | ||
|
|
e5ff7b23d7 | ||
|
|
f27f484621 | ||
|
|
38488ec3b0 | ||
|
|
62888614f6 | ||
|
|
dc9da1d917 | ||
|
|
8b717c345c | ||
|
|
ff96f0adae | ||
|
|
5dd59a6096 | ||
|
|
6bec82b918 | ||
|
|
a436d7542f | ||
|
|
5d98688de6 | ||
|
|
09d877ed8c | ||
|
|
d62ced8981 | ||
|
|
6ff894d674 | ||
|
|
da03b4520a | ||
|
|
8aaa5e1ec5 | ||
|
|
013c6e0b10 | ||
|
|
31ffa1607e | ||
|
|
5c6cd884e3 | ||
|
|
928994c6ea | ||
|
|
1e6e75e39a | ||
|
|
e283bec62e | ||
|
|
c4f5db8467 | ||
|
|
bf0d928417 | ||
|
|
e88a640ca5 | ||
|
|
7b865ed03d | ||
|
|
f823324eb9 | ||
|
|
6995e0c91b | ||
|
|
9115ce8860 | ||
|
|
b934b5b907 | ||
|
|
290ba9ee37 | ||
|
|
e0d63696d7 | ||
|
|
acafd57f14 | ||
|
|
e799df537e | ||
|
|
905f847d10 | ||
|
|
9e19cdfbbe | ||
|
|
f7b38fa94c | ||
|
|
bd03942bd8 | ||
|
|
880b4a5e47 | ||
|
|
2e4cae342b | ||
|
|
8660fecb02 | ||
|
|
e3e43df0c9 | ||
|
|
a47e61b097 | ||
|
|
f1ff18acec | ||
|
|
ccbcdca473 | ||
|
|
c03dadfcb9 | ||
|
|
93bcb974c5 | ||
|
|
60cbfe4222 | ||
|
|
2c32126fc8 | ||
|
|
cddd750d68 | ||
|
|
4cf2b68ca8 | ||
|
|
a6a5c0aec5 | ||
|
|
311df3ff21 | ||
|
|
f6e64a5e8e | ||
|
|
622ff115a3 | ||
|
|
5a6e8ee268 | ||
|
|
a9f1227625 | ||
|
|
74c2587ef4 | ||
|
|
bce252e0b8 | ||
|
|
66a90a3c92 | ||
|
|
b60d9976b4 | ||
|
|
0d76b0d461 | ||
|
|
5e4505d363 | ||
|
|
29920b74d5 | ||
|
|
ccd18a803c | ||
|
|
943bde47ab | ||
|
|
faf3b5b245 | ||
|
|
52301fe68e | ||
|
|
0d10c7ae2f | ||
|
|
262f5a2bd3 | ||
|
|
6427272bf6 | ||
|
|
b0e070e737 | ||
|
|
d7c754ce49 | ||
|
|
f90001e1a6 | ||
|
|
4f5e03bd60 | ||
|
|
1c40873962 | ||
|
|
efaee75656 | ||
|
|
1cfe6d02fe | ||
|
|
3cab6a3d4a | ||
|
|
22a56cbaea | ||
|
|
afd61730b4 | ||
|
|
536556434b | ||
|
|
52bff5f39d | ||
|
|
64d0f14d3d | ||
|
|
edf9e1bf8d | ||
|
|
1b61cc6ec3 | ||
|
|
6f792e8045 | ||
|
|
b1f8018bf4 | ||
|
|
2eb9241329 | ||
|
|
554a490751 | ||
|
|
74d98eafb8 | ||
|
|
de7d6cec3a | ||
|
|
651c678edf | ||
|
|
ba41076e94 | ||
|
|
c965f4c20b | ||
|
|
d734e24c01 | ||
|
|
7ce7fe0574 | ||
|
|
c631c72f22 | ||
|
|
d5667419af | ||
|
|
3274bd2d81 | ||
|
|
309afa20b7 | ||
|
|
30f4d64148 | ||
|
|
2634975d5a | ||
|
|
fd73ec2b1b | ||
|
|
e1d2bec4a4 | ||
|
|
1b4e9f5e91 | ||
|
|
25c023bcbe | ||
|
|
07abf9e6bc | ||
|
|
26b02a037c | ||
|
|
5089a601c6 | ||
|
|
6b49a63c48 | ||
|
|
bdd44d4255 | ||
|
|
dca95428a5 | ||
|
|
eddafb84e5 | ||
|
|
6da78164f9 | ||
|
|
c33679c47b | ||
|
|
1a1087e3a0 | ||
|
|
8cbe4009fc | ||
|
|
e6389184c5 | ||
|
|
ee3d313b34 | ||
|
|
b46b8ee15e | ||
|
|
eb95825eea | ||
|
|
58206fa8a9 | ||
|
|
d8d65e2747 | ||
|
|
8a477ba4e1 | ||
|
|
264dd91b8a | ||
|
|
bdf716b915 | ||
|
|
cf41c803d0 | ||
|
|
3cf9224df5 | ||
|
|
af94addb3a | ||
|
|
ee3ed73ed1 | ||
|
|
dc1469a188 | ||
|
|
0416b0998d | ||
|
|
c715c25420 | ||
|
|
8e555c586c | ||
|
|
f66b03f0a6 | ||
|
|
2729a46ca6 | ||
|
|
a35b0a88bf | ||
|
|
8a131ab271 | ||
|
|
dbb50e4a00 | ||
|
|
71c7c455a6 | ||
|
|
ff3438be4e | ||
|
|
bc5e23061b | ||
|
|
5ce951fb34 | ||
|
|
4a49d05a3f | ||
|
|
c3c85c64ee | ||
|
|
3ad3ac4d1e | ||
|
|
b9fab9b914 | ||
|
|
61c02ca634 | ||
|
|
325044bcaf | ||
|
|
91ac508878 | ||
|
|
2ed30f5366 | ||
|
|
d0b9c7e7ca | ||
|
|
f6ed8f4a27 | ||
|
|
87718170d2 | ||
|
|
b67af4049c | ||
|
|
16e425a4c0 | ||
|
|
c867a48ab4 | ||
|
|
2dc82c0604 | ||
|
|
e7402e6643 | ||
|
|
e5ccd9e846 | ||
|
|
624197f169 | ||
|
|
d42350a401 | ||
|
|
3c5161b4cb | ||
|
|
0b20f91ce7 | ||
|
|
9302738263 | ||
|
|
223feb2118 | ||
|
|
68053d0510 | ||
|
|
2223b93338 | ||
|
|
1839e8c9b3 | ||
|
|
bd731a8624 | ||
|
|
8c0d0a122c | ||
|
|
189f62d44f | ||
|
|
a5c971ff3a | ||
|
|
1e5d9ad8f7 | ||
|
|
865f23dd7b | ||
|
|
2c87a22cf2 | ||
|
|
1d71436e6a | ||
|
|
a95b489a55 | ||
|
|
f8976dd2eb | ||
|
|
ae688e4103 | ||
|
|
e4dad99145 | ||
|
|
1ea4876dfa | ||
|
|
f7506c6c25 | ||
|
|
5c56cac0a0 | ||
|
|
5500887eed | ||
|
|
cde4fd3be3 | ||
|
|
117b7a16ef | ||
|
|
935cd01f56 | ||
|
|
d20494e6d7 | ||
|
|
3be228182f | ||
|
|
b44f9c409a | ||
|
|
a82c9332d3 | ||
|
|
b100fc0b20 | ||
|
|
5e58f4b65b | ||
|
|
9fcef4d009 | ||
|
|
4f8eac59ea | ||
|
|
6dd8e5ba7c | ||
|
|
53d6f1e1bb | ||
|
|
f53be010d7 | ||
|
|
e03c0aacf2 | ||
|
|
8eb9093fb8 | ||
|
|
45f7c08111 | ||
|
|
3b00a778ba | ||
|
|
58fc77fdb3 | ||
|
|
e57258b17b | ||
|
|
31cd00e72f | ||
|
|
b00ccc08c3 | ||
|
|
94d578aec5 | ||
|
|
45010f7eff | ||
|
|
249141026e | ||
|
|
813f713edc | ||
|
|
a913c1aab7 | ||
|
|
bd1f71c1e2 | ||
|
|
469ec6b6b4 | ||
|
|
e26caf4c3a | ||
|
|
1a84d504b7 | ||
|
|
14c9f14125 | ||
|
|
824c5f41ac | ||
|
|
cc0041cb8c | ||
|
|
e4615e0cd9 | ||
|
|
242daa4f9a | ||
|
|
52ae9af4dd | ||
|
|
15ee742afa | ||
|
|
d2cfbd8a4d | ||
|
|
09e7708b49 | ||
|
|
be2161652b | ||
|
|
cb7a7f69c7 | ||
|
|
ca5064a5b6 | ||
|
|
0e591baf43 | ||
|
|
b0f63d3c04 | ||
|
|
14018050c1 | ||
|
|
2a50e6440d | ||
|
|
3af7a08a06 | ||
|
|
bd4ae5ac53 | ||
|
|
77a8430616 | ||
|
|
5ff90cb261 | ||
|
|
459d0cd14f | ||
|
|
357e364ab8 | ||
|
|
99b0287e4e | ||
|
|
90ffa9bd45 | ||
|
|
4df2b6347d | ||
|
|
931436204c | ||
|
|
bfc68d1953 | ||
|
|
0bed9b6cd2 | ||
|
|
4992958dae | ||
|
|
12978f0d05 | ||
|
|
5f6d5b057d | ||
|
|
815ad0b7a8 | ||
|
|
4714c4f9ad | ||
|
|
22fc0a2e36 | ||
|
|
f995b465b8 | ||
|
|
95e0f069be | ||
|
|
78ebade125 | ||
|
|
e174c6c3bc | ||
|
|
69fac5fe89 | ||
|
|
4d09ea4c06 | ||
|
|
fa69fd3afc | ||
|
|
68f062c8be | ||
|
|
e85001b6ee | ||
|
|
2780e2027e | ||
|
|
beed00eabe | ||
|
|
01e8b60911 | ||
|
|
59dfb234eb | ||
|
|
796c3bbb23 | ||
|
|
2afc7759a7 | ||
|
|
25847080f0 | ||
|
|
1d64c12f2b | ||
|
|
a1f41fadf6 | ||
|
|
b6fe5ab4dd | ||
|
|
456697d0be | ||
|
|
286b480f82 | ||
|
|
ecfccdea8e | ||
|
|
0d2762c010 | ||
|
|
bde0347618 | ||
|
|
243078dda9 | ||
|
|
46720294d6 | ||
|
|
dc89dae994 | ||
|
|
088d86691b | ||
|
|
3565c08df5 | ||
|
|
304afe0d55 | ||
|
|
136cf7b8b1 | ||
|
|
dbdefbbe54 | ||
|
|
77f7ddf62a | ||
|
|
c8a74b11ed | ||
|
|
9bd13de44c | ||
|
|
b75f307234 | ||
|
|
2cb2fce8d9 | ||
|
|
b3ac60ce53 | ||
|
|
c6d76770e4 | ||
|
|
cd9d74f7ea | ||
|
|
2af129c078 | ||
|
|
d550583657 | ||
|
|
f048256341 | ||
|
|
ad72269f08 | ||
|
|
7576a1da23 | ||
|
|
9eb45eb629 | ||
|
|
14c88abf27 | ||
|
|
993ef42bd5 | ||
|
|
e301f21f63 | ||
|
|
01f7a4fadc | ||
|
|
94db8426cb | ||
|
|
019417743c | ||
|
|
f9e4c638f1 | ||
|
|
40619a4bbc | ||
|
|
bafa40fe12 | ||
|
|
0d4ba7dd87 | ||
|
|
b4028e48ae | ||
|
|
23084fd850 | ||
|
|
ece0a0f305 | ||
|
|
27e899aea5 | ||
|
|
2cc4cb74f0 | ||
|
|
146eb73790 | ||
|
|
a73d8717f3 | ||
|
|
ba4b8c2c23 | ||
|
|
06ef9cc9f4 | ||
|
|
ac9c96dae1 | ||
|
|
cd03458ab3 | ||
|
|
8cae00833c | ||
|
|
91c421fb7d | ||
|
|
00028e87bb | ||
|
|
ba97fd0b9c | ||
|
|
cc2bbb0bf1 | ||
|
|
d9ec05cea6 | ||
|
|
a8a6e22cbd | ||
|
|
f4148ac46a | ||
|
|
845814f396 | ||
|
|
80b8756150 | ||
|
|
fe0f860209 | ||
|
|
38d7aae3b7 | ||
|
|
7c7db78feb | ||
|
|
90808e2dd0 | ||
|
|
3ae66e59a3 | ||
|
|
3210b656b6 | ||
|
|
5a9c788ae6 | ||
|
|
052722a7bc | ||
|
|
d657d5f754 | ||
|
|
8ae215dd3d | ||
|
|
5aa80cb602 | ||
|
|
ac40316692 | ||
|
|
b32595dbbc | ||
|
|
c977781b3c | ||
|
|
3b9950241e | ||
|
|
184030168d | ||
|
|
0de6585df0 | ||
|
|
8ee2b460ee | ||
|
|
cdf66cc67f | ||
|
|
43e60914f3 | ||
|
|
387ea41e99 | ||
|
|
a0764f0dc0 | ||
|
|
67ba073c55 | ||
|
|
9088125a6a | ||
|
|
b6a14911c8 | ||
|
|
4342300eff | ||
|
|
c4c29c8acc | ||
|
|
6350725e2d | ||
|
|
86b737a120 | ||
|
|
cd822bbe11 | ||
|
|
49ca90df75 | ||
|
|
aaf0a8069f | ||
|
|
2158dc4849 | ||
|
|
f60f997bf7 | ||
|
|
bfd1e55bda | ||
|
|
f70bad42ce | ||
|
|
7780393460 | ||
|
|
b3755370ae | ||
|
|
941559098b | ||
|
|
e162aa862d | ||
|
|
b603af373e | ||
|
|
3f4eb9006a | ||
|
|
9c4d9d9f10 | ||
|
|
979e84f30e | ||
|
|
2676c9d46e | ||
|
|
70db8c3003 | ||
|
|
6610ad58ab | ||
|
|
bba9c22f53 | ||
|
|
48dfed064a | ||
|
|
b4c3780df0 | ||
|
|
8c7be428e5 | ||
|
|
990c240b82 | ||
|
|
731d14e718 | ||
|
|
cbfe95d306 | ||
|
|
90c3ed17c5 | ||
|
|
f0b24d230c | ||
|
|
56288243e6 | ||
|
|
687d157906 | ||
|
|
c9493e41a6 | ||
|
|
14aa2395d0 | ||
|
|
1d06d61b16 | ||
|
|
fc32ff80d6 | ||
|
|
24615db5f5 | ||
|
|
fd731e740a | ||
|
|
f2dd9c1562 | ||
|
|
d12efc95d4 | ||
|
|
b3ae664d5d | ||
|
|
12b5b83821 | ||
|
|
9db0ec46a7 | ||
|
|
898aafe6fd | ||
|
|
05e3202fba | ||
|
|
81a71ae0f6 | ||
|
|
e0adb1fc76 | ||
|
|
e6d20c47e3 | ||
|
|
4578c3e8fd | ||
|
|
b711c6343a | ||
|
|
97bc723538 | ||
|
|
f92820d30d | ||
|
|
4e6665bda5 | ||
|
|
041b6d5678 | ||
|
|
1db4341e9f | ||
|
|
6587c7879b | ||
|
|
2318d7ac51 | ||
|
|
8bb80b6e5e | ||
|
|
2eab8021fb | ||
|
|
e87be0131e | ||
|
|
d3a21cced2 | ||
|
|
2e7c2780a9 | ||
|
|
f986e12f91 | ||
|
|
3e22747799 | ||
|
|
287de4ecc6 | ||
|
|
574a905291 | ||
|
|
1692087db5 | ||
|
|
bf36967883 | ||
|
|
3b37cc898b | ||
|
|
5662c898f1 | ||
|
|
b1ddb2a1a6 | ||
|
|
1bb9d78c7a | ||
|
|
975c318dbc | ||
|
|
e4a8bf28ea | ||
|
|
cf315d544b | ||
|
|
2fc8bf115d | ||
|
|
a2afa523a0 | ||
|
|
0f94b98646 | ||
|
|
4bc708a9b0 | ||
|
|
1c4e9bc363 | ||
|
|
2a5fe3e700 | ||
|
|
a773ff73e3 | ||
|
|
9a20063837 | ||
|
|
1c92534bff | ||
|
|
a330f3338c | ||
|
|
ff05bff221 | ||
|
|
679291e26a | ||
|
|
4f592eeea6 | ||
|
|
ff9b985d9f | ||
|
|
30f470eaa3 | ||
|
|
38f5ea2132 | ||
|
|
ddddcc165b | ||
|
|
6d62966bf7 | ||
|
|
caee42e8a6 | ||
|
|
28897be9a2 | ||
|
|
a4dab3ec3f | ||
|
|
2db8b4046a | ||
|
|
df3b320f46 | ||
|
|
5dc1257ce0 | ||
|
|
751c517b6c | ||
|
|
465421b525 | ||
|
|
36741cbbc1 | ||
|
|
e9ff4ef4f7 | ||
|
|
96cc9f59e0 | ||
|
|
df6781332e | ||
|
|
35e9c4657b | ||
|
|
a7f91224eb | ||
|
|
2b787c3b17 | ||
|
|
660c034da6 | ||
|
|
ec80df5115 | ||
|
|
7b09a72682 | ||
|
|
4dd10d03b7 | ||
|
|
22c571d3cb | ||
|
|
1bf66d62cf | ||
|
|
bd694faf6c | ||
|
|
5bdf0c7951 | ||
|
|
2be4529f14 | ||
|
|
7eea9b639d | ||
|
|
af9d8d39d2 | ||
|
|
638d925e4e | ||
|
|
9289425170 | ||
|
|
fe260ac4d7 | ||
|
|
a38b47e026 | ||
|
|
edf7213f34 | ||
|
|
59fe45f947 | ||
|
|
84dc331dd1 | ||
|
|
6a9e5598f9 | ||
|
|
b3127f38e6 | ||
|
|
8926bac00a | ||
|
|
97cb9cb1ed | ||
|
|
1fda98d14f | ||
|
|
c1dfe5c00d | ||
|
|
2e97022e5e | ||
|
|
fd95543ff1 | ||
|
|
c954419bc8 | ||
|
|
8dfa0024f0 | ||
|
|
d129ccda4c | ||
|
|
2e19976d03 | ||
|
|
81f5a7af7d | ||
|
|
41d143d27c | ||
|
|
4672d9af73 | ||
|
|
7e09057afa | ||
|
|
8824f7e9df | ||
|
|
81597ddd96 | ||
|
|
3ad39b247b | ||
|
|
1f1362fd27 | ||
|
|
2dc8f1867c | ||
|
|
b58e7b1898 | ||
|
|
82ad0d2e65 | ||
|
|
65297066c2 | ||
|
|
73af42aeab | ||
|
|
2d04a75a40 | ||
|
|
5ef48bbe0a | ||
|
|
e83905696e | ||
|
|
9e91898941 | ||
|
|
e02e3b94c3 | ||
|
|
947c97e6ff | ||
|
|
49abc09f77 | ||
|
|
2573d0621a | ||
|
|
1f9d2442b9 | ||
|
|
2b9ce1235a | ||
|
|
765a936b81 | ||
|
|
33a1151f2f | ||
|
|
a66b8250e0 | ||
|
|
19ae829bd1 | ||
|
|
095504d094 | ||
|
|
74742c018f | ||
|
|
d2ff55e9c6 | ||
|
|
f4f56d7c15 | ||
|
|
c15486cf39 | ||
|
|
b3eab03055 | ||
|
|
f53b819648 | ||
|
|
6811688d29 | ||
|
|
7b5ac2c15e | ||
|
|
916d5e7f08 | ||
|
|
aaed315fee | ||
|
|
0c97c10814 | ||
|
|
d581afd873 | ||
|
|
2845f8797a | ||
|
|
101652a55c | ||
|
|
45aae8a6bc | ||
|
|
17fa6e7619 | ||
|
|
166670a2f2 | ||
|
|
c80603285e | ||
|
|
9209b85c91 | ||
|
|
a521260b7a | ||
|
|
d0d58a6771 | ||
|
|
fb698920f1 | ||
|
|
16e9e4db37 | ||
|
|
bec4f59ce8 | ||
|
|
b741a9aae7 | ||
|
|
04e64765c4 | ||
|
|
6c39aa4a6b | ||
|
|
dfc9d6827f | ||
|
|
bf0bcb2d5a | ||
|
|
586e48d696 | ||
|
|
f9898f7554 | ||
|
|
c52cd2b437 | ||
|
|
25fa5e4d5f | ||
|
|
d426f1ad6e | ||
|
|
cfd3db7862 | ||
|
|
3e005ca0c2 | ||
|
|
07cb7e701c | ||
|
|
f91409f038 | ||
|
|
cd77e51810 | ||
|
|
b17ec42b56 | ||
|
|
0568720a68 | ||
|
|
fd9f9ec772 | ||
|
|
910ae260cd | ||
|
|
e618efce22 | ||
|
|
2983285315 | ||
|
|
9119716761 | ||
|
|
88add71c25 | ||
|
|
7eba5fb413 | ||
|
|
44479f8ad6 | ||
|
|
c6c2373bc0 | ||
|
|
55351ebb31 | ||
|
|
e5a3f60fc2 | ||
|
|
52a69dd5e9 | ||
|
|
0b26cee2f1 | ||
|
|
208097d488 | ||
|
|
6ffee2fca9 | ||
|
|
ac3765c043 | ||
|
|
308516e439 | ||
|
|
107e616857 | ||
|
|
79de980565 | ||
|
|
0cac941af1 | ||
|
|
e7182bbb2c | ||
|
|
9b9c1e14da | ||
|
|
a3c78d47b3 | ||
|
|
5bdd6a1cc4 | ||
|
|
11d50324d8 | ||
|
|
cfd28517df | ||
|
|
c2b4c43edb | ||
|
|
cf21e27d78 | ||
|
|
329013f577 | ||
|
|
4de084a835 | ||
|
|
6090cbe3be | ||
|
|
67b70e4f6c | ||
|
|
9ed2d0dfa2 | ||
|
|
133cacadde | ||
|
|
dbda72f91d | ||
|
|
b1e1319972 | ||
|
|
3b67712892 | ||
|
|
f54242849d | ||
|
|
ee1a0fb8ec | ||
|
|
a092b6395d | ||
|
|
d5183e1584 | ||
|
|
00d72a5144 | ||
|
|
81e241150a | ||
|
|
eb1144be8b | ||
|
|
3cc05081f4 | ||
|
|
8b16c65bca | ||
|
|
79fb5c6470 | ||
|
|
1249e8dd3b | ||
|
|
86feb98dcd | ||
|
|
ae45826758 | ||
|
|
1c53e8bf27 | ||
|
|
c3f99a727e | ||
|
|
a2e7e49fe1 | ||
|
|
89d7480b0c | ||
|
|
0cbb7d7f1e | ||
|
|
a8e54df363 | ||
|
|
3e082d4a9d | ||
|
|
b05c536f74 | ||
|
|
44e0eab8fd | ||
|
|
30695da256 | ||
|
|
d09b5f801c | ||
|
|
759b3f86bf | ||
|
|
09ec33a578 | ||
|
|
488200f16c | ||
|
|
76671381aa | ||
|
|
cad44f5f42 | ||
|
|
17f9b1cef6 | ||
|
|
189bfa164e | ||
|
|
9307572fe3 | ||
|
|
bff7c70eef | ||
|
|
aec3b8d515 | ||
|
|
e71497aabc | ||
|
|
0f6109ec00 | ||
|
|
15f94ac964 | ||
|
|
e7edadda54 | ||
|
|
ef7ad3f077 | ||
|
|
6f0cc2e9c5 | ||
|
|
6fb0e5751b | ||
|
|
c1c5227acb |
@@ -0,0 +1,15 @@
|
||||
name: Run process replay tests
|
||||
description: Verify process replay compared to master
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Run process replay tests
|
||||
shell: bash
|
||||
run: |
|
||||
export PR_TITLE=$(jq -r .pull_request.title "$GITHUB_EVENT_PATH")
|
||||
export CURRENT_SHA=${{ github.event.pull_request && github.event.pull_request.head.sha || github.sha }}
|
||||
git fetch origin $CURRENT_SHA
|
||||
export COMMIT_MESSAGE=$(git show -s --format=%B "$CURRENT_SHA")
|
||||
export CURRENT_HEAD=$(git rev-parse HEAD)
|
||||
cp test/external/process_replay/process_replay.py ./process_replay.py && git fetch origin master && git -c advice.detachedHead=false checkout origin/master && PYTHONPATH=. python3 process_replay.py
|
||||
git checkout $CURRENT_HEAD # restore to branch
|
||||
@@ -0,0 +1,224 @@
|
||||
name: Setup Python & Install
|
||||
description: Sets up Python and installs project dependencies.
|
||||
inputs:
|
||||
python-version:
|
||||
description: 'Python version to use'
|
||||
required: false
|
||||
default: '3.12'
|
||||
key:
|
||||
description: 'Key for the python cache'
|
||||
required: false
|
||||
default: '' # if you don't set a key, it doesn't cache
|
||||
deps:
|
||||
description: 'Extra dependency groups (comma separated)'
|
||||
required: false
|
||||
default: ''
|
||||
pydeps:
|
||||
description: 'Extra Python dependency groups (space separated)'
|
||||
required: false
|
||||
default: ''
|
||||
opencl:
|
||||
description: "Install OpenCL?"
|
||||
required: false
|
||||
default: 'false'
|
||||
amd:
|
||||
description: "Install AMD?"
|
||||
required: false
|
||||
default: 'false'
|
||||
cuda:
|
||||
description: "Install CUDA?"
|
||||
required: false
|
||||
default: 'false'
|
||||
webgpu:
|
||||
description: "Install webgpu?"
|
||||
required: false
|
||||
default: 'false'
|
||||
llvm:
|
||||
description: "Install LLVM?"
|
||||
required: false
|
||||
default: 'false'
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Set up Python ${{ inputs.python-version }}
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ inputs.python-version }}
|
||||
|
||||
# **** Caching packages ****
|
||||
# TODO: key should include input.deps, but it can't since it can't contain commas
|
||||
|
||||
- name: Cache Python packages (Linux)
|
||||
if: inputs.key != '' && runner.os == 'Linux'
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.Python3_ROOT_DIR }}/lib/python${{ inputs.python-version }}/site-packages
|
||||
key: python-package-${{ inputs.key }}-${{ hashFiles('**/setup.py') }}
|
||||
- name: Cache Python packages (macOS)
|
||||
if: inputs.key != '' && runner.os == 'macOS'
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: /Users/runner/Library/Python/${{ inputs.python-version }}/lib/python/site-packages
|
||||
key: osx-python-package-${{ inputs.key }}-${{ hashFiles('**/setup.py') }}
|
||||
- name: Cache Python packages (Windows)
|
||||
if: inputs.key != '' && runner.os == 'Windows'
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.Python3_ROOT_DIR }}\Lib\site-packages
|
||||
key: windows-python-package-${{ inputs.key }}-${{ hashFiles('**/setup.py') }}
|
||||
|
||||
# **** Caching downloads ****
|
||||
|
||||
- name: Cache downloads (Linux)
|
||||
if: inputs.key != '' && runner.os == 'Linux'
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cache/tinygrad/downloads/
|
||||
key: downloads-cache-${{ inputs.key }}-${{ env.DOWNLOAD_CACHE_VERSION }}
|
||||
- name: Cache downloads (macOS)
|
||||
if: inputs.key != '' && runner.os == 'macOS'
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/Library/Caches/tinygrad/downloads/
|
||||
key: osx-downloads-cache-${{ inputs.key }}-${{ env.DOWNLOAD_CACHE_VERSION }}
|
||||
|
||||
# **** Python deps ****
|
||||
|
||||
- name: Install dependencies (with extra)
|
||||
if: inputs.deps != ''
|
||||
shell: bash
|
||||
run: pip install ${{ (runner.os == 'macOS' && '--user') || (runner.os != 'macOS' && '') }} -e ".[${{ inputs.deps }}]" ${{ inputs.pydeps }} --extra-index-url https://download.pytorch.org/whl/cpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/Triton-Nightly/pypi/simple/
|
||||
- name: Install dependencies (without extra)
|
||||
if: inputs.deps == ''
|
||||
shell: bash
|
||||
run: pip install ${{ (runner.os == 'macOS' && '--user') || (runner.os != 'macOS' && '') }} -e . ${{ inputs.pydeps }}
|
||||
|
||||
# **** OpenCL ****
|
||||
|
||||
- name: Install OpenCL
|
||||
if: inputs.opencl == 'true'
|
||||
shell: bash
|
||||
run: |
|
||||
echo 'Acquire::http::Pipeline-Depth "5";' | sudo tee -a /etc/apt/apt.conf.d/99parallel
|
||||
echo "deb [ allow-insecure=yes ] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
|
||||
sudo apt update || true
|
||||
sudo apt install --allow-unauthenticated -y --no-install-recommends opencl-headers \
|
||||
intel-oneapi-runtime-openmp=2023.2.1-16 intel-oneapi-runtime-compilers-common=2023.2.1-16 intel-oneapi-runtime-compilers=2023.2.1-16 \
|
||||
intel-oneapi-runtime-dpcpp-sycl-opencl-cpu=2023.2.1-16 intel-oneapi-runtime-tbb-common=2021.10.0-49541 \
|
||||
intel-oneapi-runtime-tbb=2021.10.0-49541 intel-oneapi-runtime-opencl=2023.2.1-16
|
||||
|
||||
# **** AMD ****
|
||||
|
||||
- name: Install AMD (Linux)
|
||||
if: inputs.amd == 'true' && runner.os == 'Linux'
|
||||
shell: bash
|
||||
run: |
|
||||
echo 'Acquire::http::Pipeline-Depth "5";' | sudo tee -a /etc/apt/apt.conf.d/99parallel
|
||||
wget https://repo.radeon.com/rocm/rocm.gpg.key -O - | gpg --dearmor | sudo tee /etc/apt/keyrings/rocm.gpg > /dev/null
|
||||
sudo tee /etc/apt/sources.list.d/rocm.list <<'EOF'
|
||||
deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/6.1.2 jammy main
|
||||
EOF
|
||||
echo -e 'Package: *\nPin: release o=repo.radeon.com\nPin-Priority: 600' | sudo tee /etc/apt/preferences.d/rocm-pin-600
|
||||
sudo apt update || true
|
||||
sudo apt install --no-install-recommends --allow-unauthenticated -y hsa-rocr comgr hsa-rocr-dev liburing-dev libc6-dev
|
||||
curl -s https://api.github.com/repos/Qazalin/remu/releases/latest | \
|
||||
jq -r '.assets[] | select(.name == "libremu.so").browser_download_url' | \
|
||||
sudo xargs curl -L -o /usr/local/lib/libremu.so
|
||||
sudo tee --append /etc/ld.so.conf.d/rocm.conf <<'EOF'
|
||||
/opt/rocm/lib
|
||||
/opt/rocm/lib64
|
||||
EOF
|
||||
sudo ldconfig
|
||||
- name: Install AMD comgr+remu (macOS)
|
||||
if: inputs.amd == 'true' && runner.os == 'macOS'
|
||||
shell: bash
|
||||
run: |
|
||||
sudo mkdir -p /usr/local/lib
|
||||
curl -s -H "Authorization: token $GH_TOKEN" curl -s https://api.github.com/repos/nimlgen/amdcomgr_dylib/releases/latest | \
|
||||
jq -r '.assets[] | select(.name == "libamd_comgr.dylib").browser_download_url' | \
|
||||
sudo xargs curl -L -o /usr/local/lib/libamd_comgr.dylib
|
||||
curl -s -H "Authorization: token $GH_TOKEN" curl -s https://api.github.com/repos/Qazalin/remu/releases/latest | \
|
||||
jq -r '.assets[] | select(.name == "libremu.dylib").browser_download_url' | \
|
||||
sudo xargs curl -L -o /usr/local/lib/libremu.dylib
|
||||
|
||||
# **** CUDA ****
|
||||
|
||||
- name: Install cuda packages (Linux)
|
||||
if: inputs.cuda == 'true' && runner.os == 'Linux'
|
||||
shell: bash
|
||||
run: |
|
||||
echo 'Acquire::http::Pipeline-Depth "5";' | sudo tee -a /etc/apt/apt.conf.d/99parallel
|
||||
sudo apt update -y || true
|
||||
sudo apt install -y --no-install-recommends git g++ cmake ninja-build llvm-15-dev zlib1g-dev libglew-dev \
|
||||
flex bison libfl-dev libboost-thread-dev libboost-filesystem-dev nvidia-cuda-toolkit-gcc libzstd-dev
|
||||
- name: Install gpuocelot dependencies (MacOS)
|
||||
if: inputs.cuda == 'true' && runner.os == 'macOS'
|
||||
shell: bash
|
||||
run: |
|
||||
brew update
|
||||
brew install cmake ninja llvm@15 zlib glew flex bison boost zstd ncurses
|
||||
- name: Cache gpuocelot
|
||||
if: inputs.cuda == 'true'
|
||||
id: cache-build
|
||||
uses: actions/cache@v4
|
||||
env:
|
||||
cache-name: cache-gpuocelot-build
|
||||
with:
|
||||
path: ${{ github.workspace }}/gpuocelot/ocelot
|
||||
key: ${{ runner.os }}-gpuocelot-b16039dc940dc6bc4ea0a98380495769ff35ed99-rebuild-0
|
||||
- name: Clone/compile gpuocelot
|
||||
if: inputs.cuda == 'true' && steps.cache-build.outputs.cache-hit != 'true'
|
||||
shell: bash
|
||||
run: |
|
||||
git clone --recurse-submodules https://github.com/gpuocelot/gpuocelot.git ${{ github.workspace }}/gpuocelot
|
||||
cd ${{ github.workspace }}/gpuocelot/ocelot
|
||||
git checkout b16039dc940dc6bc4ea0a98380495769ff35ed99
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -Wno-dev -G Ninja -DOCELOT_BUILD_TOOLS=OFF -DCMAKE_BUILD_ALWAYS=0 -DBUILD_TESTS_CUDA=OFF
|
||||
ninja
|
||||
- name: Install gpuocelot
|
||||
if: inputs.cuda == 'true'
|
||||
shell: bash
|
||||
run: |
|
||||
cd ${{ github.workspace }}/gpuocelot/ocelot/build
|
||||
sudo cp libgpuocelot.${{ runner.os == 'macOS' && 'dylib' || 'so' }} /usr/${{ runner.os == 'macOS' && 'local/' || ''}}lib/
|
||||
|
||||
# **** WebGPU ****
|
||||
|
||||
- name: Install WebGPU dawn (Linux)
|
||||
if: inputs.webgpu == 'true' && runner.os == 'Linux'
|
||||
shell: bash
|
||||
run: |
|
||||
sudo curl -L https://github.com/wpmed92/pydawn/releases/download/v0.1.6/libwebgpu_dawn.so -o /usr/local/lib/libwebgpu_dawn.so
|
||||
- name: Install dependencies for software-based vulkan
|
||||
if: inputs.webgpu == 'true' && runner.os == 'Linux'
|
||||
shell: bash
|
||||
run: |
|
||||
sudo apt update -y || true
|
||||
sudo apt install -y libegl1-mesa libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers
|
||||
|
||||
- name: Install WebGPU dawn (macOS)
|
||||
if: inputs.webgpu == 'true' && runner.os == 'macOS'
|
||||
shell: bash
|
||||
run: |
|
||||
brew tap wpmed92/dawn
|
||||
brew install dawn
|
||||
|
||||
# **** LLVM ****
|
||||
|
||||
- name: Install LLVM (Linux)
|
||||
if: inputs.llvm == 'true' && runner.os == 'Linux'
|
||||
shell: bash
|
||||
run: |
|
||||
echo 'Acquire::http::Pipeline-Depth "5";' | sudo tee -a /etc/apt/apt.conf.d/99parallel
|
||||
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
|
||||
echo "deb http://apt.llvm.org/$(lsb_release -cs)/ llvm-toolchain-$(lsb_release -cs)-19 main" | sudo tee /etc/apt/sources.list.d/llvm.list
|
||||
sudo apt update -y || true
|
||||
sudo apt install -y --no-install-recommends libllvm19 clang-19 lld-19
|
||||
|
||||
- name: Install LLVM (macOS)
|
||||
if: inputs.llvm == 'true' && runner.os == 'macOS'
|
||||
shell: bash
|
||||
run: |
|
||||
brew install llvm
|
||||
@@ -63,7 +63,9 @@ jobs:
|
||||
- name: Test tensor cores
|
||||
run: METAL=1 python3.11 test/test_linearizer.py TestLinearizer.test_tensor_cores TestLinearizer.test_tensor_cores_padded
|
||||
- name: Test AMX tensor cores
|
||||
run: DEBUG=2 CLANG=1 AMX=1 python3.11 test/test_linearizer.py TestLinearizer.test_tensor_cores TestLinearizer.test_tensor_cores_padded
|
||||
run: |
|
||||
DEBUG=2 CPU=1 AMX=1 python3.11 test/test_linearizer.py TestLinearizer.test_tensor_cores TestLinearizer.test_tensor_cores_padded
|
||||
DEBUG=2 LLVM=1 AMX=1 python3.11 test/test_linearizer.py TestLinearizer.test_tensor_cores TestLinearizer.test_tensor_cores_padded
|
||||
- name: Run Tensor Core GEMM (float)
|
||||
run: DEBUG=2 python3.11 extra/gemm/simple_matmul.py | tee matmul.txt
|
||||
- name: Run Tensor Core GEMM (half)
|
||||
@@ -82,8 +84,8 @@ jobs:
|
||||
run: |
|
||||
python3.11 examples/llama.py --gen 1 --prompt "Hello." --count 10 --temperature 0 --timing --quantize int8 | tee llama_int8.txt
|
||||
python3.11 examples/llama.py --gen 1 --prompt "Hello." --count 10 --temperature 0 --timing --quantize nf4 | tee llama_nf4.txt
|
||||
- name: Run LLaMA 7B on 4 (virtual) GPUs
|
||||
run: python3.11 examples/llama.py --gen 1 --size 7B --shard 4 --prompt "Hello." --count 10 --temperature 0 --timing | tee llama_four_gpu.txt
|
||||
#- name: Run LLaMA 7B on 4 (virtual) GPUs
|
||||
# run: python3.11 examples/llama.py --gen 1 --size 7B --shard 4 --prompt "Hello." --count 10 --temperature 0 --timing | tee llama_four_gpu.txt
|
||||
- name: Run GPT2
|
||||
run: |
|
||||
JIT=0 python3.11 examples/gpt2.py --prompt "Hello." --count 10 --temperature 0 --timing | tee gpt2_unjitted.txt
|
||||
@@ -445,7 +447,7 @@ jobs:
|
||||
testmoreamdbenchmark:
|
||||
name: tinybox red Training Benchmark
|
||||
runs-on: [self-hosted, Linux, tinybox]
|
||||
timeout-minutes: 20
|
||||
timeout-minutes: 30
|
||||
defaults:
|
||||
run:
|
||||
shell: bash -o pipefail {0}
|
||||
@@ -453,8 +455,8 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
- name: Insert amdgpu
|
||||
run: sudo modprobe amdgpu
|
||||
- name: Remove amdgpu
|
||||
run: sudo rmmod amdgpu || true
|
||||
- name: Symlink models and datasets
|
||||
run: |
|
||||
mkdir -p weights
|
||||
@@ -472,10 +474,6 @@ jobs:
|
||||
rm -f /tmp/staging.db /tmp/staging.db-shm /tmp/staging.db-wal
|
||||
- name: reset process replay
|
||||
run: test/external/process_replay/reset.py
|
||||
- name: setup perflevel
|
||||
run: |
|
||||
examples/mlperf/training_submission_v4.1/tinycorp/benchmarks/bert/implementations/tinybox_red/setup.sh
|
||||
rocm-smi
|
||||
- name: Train MNIST
|
||||
run: time PYTHONPATH=. AMD=1 TARGET_EVAL_ACC_PCT=96.0 python3 examples/beautiful_mnist.py | tee beautiful_mnist.txt
|
||||
- name: Run 10 CIFAR training steps
|
||||
|
||||
+441
-473
File diff suppressed because it is too large
Load Diff
+4
-1
@@ -10,6 +10,7 @@ notebooks
|
||||
*.so
|
||||
*.txt
|
||||
build
|
||||
!examples/tinychat/assets/cdn.jsdelivr.net/npm/[email protected]/build/
|
||||
/dist
|
||||
*.egg-info
|
||||
/env
|
||||
@@ -33,6 +34,8 @@ extra/datasets/open-images-v6-mlperf
|
||||
extra/datasets/kits/
|
||||
extra/datasets/COCO/
|
||||
extra/datasets/audio*
|
||||
extra/huggingface_onnx/models/*
|
||||
extra/huggingface_onnx/*.yaml
|
||||
extra/weights
|
||||
venv
|
||||
examples/**/net.*[js,json]
|
||||
@@ -55,5 +58,5 @@ weights
|
||||
comgr_*
|
||||
*.pkl
|
||||
site/
|
||||
master_schedule.py
|
||||
profile_stats
|
||||
*.log
|
||||
|
||||
@@ -81,7 +81,7 @@ See [examples/beautiful_mnist.py](examples/beautiful_mnist.py) for the full vers
|
||||
tinygrad already supports numerous accelerators, including:
|
||||
|
||||
- [x] [GPU (OpenCL)](tinygrad/runtime/ops_gpu.py)
|
||||
- [x] [CLANG (C Code)](tinygrad/runtime/ops_clang.py)
|
||||
- [x] [CPU (C Code)](tinygrad/runtime/ops_cpu.py)
|
||||
- [x] [LLVM](tinygrad/runtime/ops_llvm.py)
|
||||
- [x] [METAL](tinygrad/runtime/ops_metal.py)
|
||||
- [x] [CUDA](tinygrad/runtime/ops_cuda.py)
|
||||
@@ -151,7 +151,7 @@ We'll start with what will get your PR closed with a pointer to this section:
|
||||
|
||||
- No code golf! While low line count is a guiding light of this project, anything that remotely looks like code golf will be closed. The true goal is reducing complexity and increasing readability, and deleting `\n`s does nothing to help with that.
|
||||
- All docs and whitespace changes will be closed unless you are a well-known contributor. The people writing the docs should be those who know the codebase the absolute best. People who have not demonstrated that shouldn't be messing with docs. Whitespace changes are both useless *and* carry a risk of introducing bugs.
|
||||
- Anything you claim is a "speedup" must be benchmarked. In general, the goal is simplicity, so even if your PR makes things marginally faster, you have to consider the tradeoff with maintainablity and readablity.
|
||||
- Anything you claim is a "speedup" must be benchmarked. In general, the goal is simplicity, so even if your PR makes things marginally faster, you have to consider the tradeoff with maintainability and readability.
|
||||
- In general, the code outside the core `tinygrad/` folder is not well tested, so unless the current code there is broken, you shouldn't be changing it.
|
||||
- If your PR looks "complex", is a big diff, or adds lots of lines, it won't be reviewed or merged. Consider breaking it up into smaller PRs that are individually clear wins. A common pattern I see is prerequisite refactors before adding new functionality. If you can (cleanly) refactor to the point that the feature is a 3 line change, this is great, and something easy for us to review.
|
||||
|
||||
|
||||
+176
-10
@@ -171,6 +171,7 @@ generate_amd() {
|
||||
extra/hip_gpu_driver/sdma_v6_0_0_pkt_open.h \
|
||||
extra/hip_gpu_driver/gc_11_0_0_offset.h \
|
||||
extra/hip_gpu_driver/gc_10_3_0_offset.h \
|
||||
extra/hip_gpu_driver/sienna_cichlid_ip_offset.h \
|
||||
--clang-args="-I/opt/rocm/include -x c++" \
|
||||
-o $BASE/amd_gpu.py
|
||||
|
||||
@@ -211,8 +212,10 @@ generate_libc() {
|
||||
clang2py -k cdefstum \
|
||||
$(dpkg -L libc6-dev | grep sys/mman.h) \
|
||||
$(dpkg -L libc6-dev | grep sys/syscall.h) \
|
||||
/usr/include/string.h \
|
||||
/usr/include/elf.h \
|
||||
/usr/include/unistd.h \
|
||||
/usr/include/asm-generic/mman-common.h \
|
||||
-o $BASE/libc.py
|
||||
|
||||
sed -i "s\import ctypes\import ctypes, ctypes.util, os\g" $BASE/libc.py
|
||||
@@ -270,15 +273,11 @@ generate_qcom() {
|
||||
python3 -c "import tinygrad.runtime.autogen.qcom_dsp"
|
||||
}
|
||||
|
||||
generate_pciaccess() {
|
||||
generate_pci() {
|
||||
clang2py -k cdefstum \
|
||||
/usr/include/pciaccess.h \
|
||||
/usr/include/linux/pci_regs.h \
|
||||
-l /usr/lib/x86_64-linux-gnu/libpciaccess.so \
|
||||
-o $BASE/libpciaccess.py
|
||||
sed -i "s\import ctypes\import ctypes, os\g" $BASE/libpciaccess.py
|
||||
fixup $BASE/libpciaccess.py
|
||||
sed -i "s/ctypes\.CDLL('\([^']*\)')/ctypes.CDLL('\1') if os.path.exists('\1') else None/g" $BASE/libpciaccess.py
|
||||
-o $BASE/pci.py
|
||||
fixup $BASE/pci.py
|
||||
}
|
||||
|
||||
generate_vfio() {
|
||||
@@ -295,17 +294,52 @@ generate_vfio() {
|
||||
generate_am() {
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/v11_structs.h \
|
||||
extra/amdpci/headers/v12_structs.h \
|
||||
extra/amdpci/headers/amdgpu_vm.h \
|
||||
extra/amdpci/headers/discovery.h \
|
||||
extra/amdpci/headers/amdgpu_ucode.h \
|
||||
extra/amdpci/headers/soc21_enum.h \
|
||||
extra/amdpci/headers/psp_gfx_if.h \
|
||||
extra/amdpci/headers/amdgpu_psp.h \
|
||||
extra/amdpci/headers/amdgpu_irq.h \
|
||||
extra/amdpci/headers/amdgpu_doorbell.h \
|
||||
extra/amdpci/headers/soc15_ih_clientid.h \
|
||||
--clang-args="-include stdint.h" \
|
||||
-o $BASE/am/am.py
|
||||
fixup $BASE/am/am.py
|
||||
sed -i "s\(int64_t)\ \g" $BASE/am/am.py
|
||||
sed -i "s\AMDGPU_PTE_MTYPE_VG10(2)\AMDGPU_PTE_MTYPE_VG10(0, 2)\g" $BASE/am/am.py # incorrect parsing (TODO: remove when clang2py is gone).
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/hip_gpu_driver/kfd_pm4_headers_ai.h \
|
||||
extra/hip_gpu_driver/soc15d.h \
|
||||
-o $BASE/am/pm4_soc15.py
|
||||
fixup $BASE/am/pm4_soc15.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/hip_gpu_driver/kfd_pm4_headers_ai.h \
|
||||
extra/hip_gpu_driver/nvd.h \
|
||||
-o $BASE/am/pm4_nv.py
|
||||
fixup $BASE/am/pm4_nv.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/vega10_enum.h \
|
||||
-o $BASE/am/vega10.py
|
||||
fixup $BASE/am/vega10.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/navi10_enum.h \
|
||||
-o $BASE/am/navi10.py
|
||||
fixup $BASE/am/navi10.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/soc21_enum.h \
|
||||
-o $BASE/am/soc21.py
|
||||
fixup $BASE/am/soc21.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/soc24_enum.h \
|
||||
-o $BASE/am/soc24.py
|
||||
fixup $BASE/am/soc24.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/mp_13_0_0_offset.h \
|
||||
@@ -313,42 +347,172 @@ generate_am() {
|
||||
-o $BASE/am/mp_13_0_0.py
|
||||
fixup $BASE/am/mp_13_0_0.py
|
||||
|
||||
# 14_0_3 reuses 14_0_2
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/mp_14_0_2_offset.h \
|
||||
extra/amdpci/headers/mp_14_0_2_sh_mask.h \
|
||||
-o $BASE/am/mp_14_0_3.py
|
||||
fixup $BASE/am/mp_14_0_3.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/mp_11_0_offset.h \
|
||||
extra/amdpci/headers/mp_11_0_sh_mask.h \
|
||||
-o $BASE/am/mp_11_0.py
|
||||
fixup $BASE/am/mp_11_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/gc_9_4_3_offset.h \
|
||||
extra/amdpci/headers/gc_9_4_3_sh_mask.h \
|
||||
extra/amdpci/overlay/gc_9_4_3.h \
|
||||
-o $BASE/am/gc_9_4_3.py
|
||||
fixup $BASE/am/gc_9_4_3.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/gc_10_3_0_offset.h \
|
||||
extra/amdpci/headers/gc_10_3_0_sh_mask.h \
|
||||
-o $BASE/am/gc_10_3_0.py
|
||||
fixup $BASE/am/gc_10_3_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/gc_11_0_0_offset.h \
|
||||
extra/amdpci/headers/gc_11_0_0_sh_mask.h \
|
||||
-o $BASE/am/gc_11_0_0.py
|
||||
fixup $BASE/am/gc_11_0_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/gc_12_0_0_offset.h \
|
||||
extra/amdpci/headers/gc_12_0_0_sh_mask.h \
|
||||
-o $BASE/am/gc_12_0_0.py
|
||||
fixup $BASE/am/gc_12_0_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/hip_gpu_driver/sdma_registers.h \
|
||||
extra/hip_gpu_driver/vega10_sdma_pkt_open.h \
|
||||
--clang-args="-I/opt/rocm/include -x c++" \
|
||||
-o $BASE/am/sdma_4_0_0.py
|
||||
fixup $BASE/am/sdma_4_0_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/hip_gpu_driver/sdma_registers.h \
|
||||
extra/hip_gpu_driver/navi10_sdma_pkt_open.h \
|
||||
--clang-args="-I/opt/rocm/include -x c++" \
|
||||
-o $BASE/am/sdma_5_0_0.py
|
||||
fixup $BASE/am/sdma_5_0_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/hip_gpu_driver/sdma_registers.h \
|
||||
extra/hip_gpu_driver/sdma_v6_0_0_pkt_open.h \
|
||||
--clang-args="-I/opt/rocm/include -x c++" \
|
||||
-o $BASE/am/sdma_6_0_0.py
|
||||
fixup $BASE/am/sdma_6_0_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/mmhub_3_0_0_offset.h \
|
||||
extra/amdpci/headers/mmhub_3_0_0_sh_mask.h \
|
||||
-o $BASE/am/mmhub_3_0_0.py
|
||||
fixup $BASE/am/mmhub_3_0_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/mmhub_3_0_2_offset.h \
|
||||
extra/amdpci/headers/mmhub_3_0_2_sh_mask.h \
|
||||
-o $BASE/am/mmhub_3_0_2.py
|
||||
fixup $BASE/am/mmhub_3_0_2.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/nbio_2_3_offset.h \
|
||||
extra/amdpci/headers/nbio_2_3_sh_mask.h \
|
||||
-o $BASE/am/nbio_2_3_0.py
|
||||
fixup $BASE/am/nbio_2_3_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/mmhub_4_1_0_offset.h \
|
||||
extra/amdpci/headers/mmhub_4_1_0_sh_mask.h \
|
||||
-o $BASE/am/mmhub_4_1_0.py
|
||||
fixup $BASE/am/mmhub_4_1_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/nbio_4_3_0_offset.h \
|
||||
extra/amdpci/headers/nbio_4_3_0_sh_mask.h \
|
||||
-o $BASE/am/nbio_4_3_0.py
|
||||
fixup $BASE/am/nbio_4_3_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/nbif_6_3_1_offset.h \
|
||||
extra/amdpci/headers/nbif_6_3_1_sh_mask.h \
|
||||
-o $BASE/am/nbif_6_3_1.py
|
||||
fixup $BASE/am/nbif_6_3_1.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/nbio_7_9_0_offset.h \
|
||||
extra/amdpci/headers/nbio_7_9_0_sh_mask.h \
|
||||
-o $BASE/am/nbio_7_9_0.py
|
||||
fixup $BASE/am/nbio_7_9_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/nbio_7_11_0_offset.h \
|
||||
extra/amdpci/headers/nbio_7_11_0_sh_mask.h \
|
||||
-o $BASE/am/nbio_7_11_0.py
|
||||
fixup $BASE/am/nbio_7_11_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/osssys_6_0_0_offset.h \
|
||||
extra/amdpci/headers/osssys_6_0_0_sh_mask.h \
|
||||
-o $BASE/am/osssys_6_0_0.py
|
||||
fixup $BASE/am/osssys_6_0_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/osssys_7_0_0_offset.h \
|
||||
extra/amdpci/headers/osssys_7_0_0_sh_mask.h \
|
||||
-o $BASE/am/osssys_7_0_0.py
|
||||
fixup $BASE/am/osssys_7_0_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/smu_v13_0_0_ppsmc.h \
|
||||
extra/amdpci/headers/smu13_driver_if_v13_0_0.h \
|
||||
extra/amdpci/headers/amdgpu_smu.h \
|
||||
-o $BASE/am/smu_v13_0_0.py
|
||||
fixup $BASE/am/smu_v13_0_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/smu_v14_0_0_pmfw.h \
|
||||
extra/amdpci/headers/smu_v14_0_2_ppsmc.h \
|
||||
extra/amdpci/headers/smu14_driver_if_v14_0_0.h \
|
||||
extra/amdpci/headers/smu14_driver_if_v14_0.h \
|
||||
extra/amdpci/headers/amdgpu_smu.h \
|
||||
--clang-args="-include stdint.h" \
|
||||
-o $BASE/am/smu_v14_0_3.py
|
||||
fixup $BASE/am/smu_v14_0_3.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/hdp_6_0_0_offset.h \
|
||||
extra/amdpci/headers/hdp_6_0_0_sh_mask.h \
|
||||
-o $BASE/am/hdp_6_0_0.py
|
||||
fixup $BASE/am/hdp_6_0_0.py
|
||||
|
||||
clang2py -k cdefstum \
|
||||
extra/amdpci/headers/hdp_7_0_0_offset.h \
|
||||
extra/amdpci/headers/hdp_7_0_0_sh_mask.h \
|
||||
-o $BASE/am/hdp_7_0_0.py
|
||||
fixup $BASE/am/hdp_7_0_0.py
|
||||
}
|
||||
|
||||
generate_sqtt() {
|
||||
clang2py -k cdefstum \
|
||||
extra/sqtt/sqtt.h \
|
||||
-o $BASE/sqtt.py
|
||||
|
||||
fixup $BASE/sqtt.py
|
||||
sed -i "s\import ctypes\import ctypes, os\g" $BASE/sqtt.py
|
||||
python3 -c "import tinygrad.runtime.autogen.sqtt"
|
||||
}
|
||||
|
||||
generate_webgpu() {
|
||||
clang2py extra/webgpu/webgpu.h -o $BASE/webgpu.py
|
||||
fixup $BASE/webgpu.py
|
||||
sed -i "s/FIXME_STUB/webgpu/g" "$BASE/webgpu.py"
|
||||
sed -i "s/FunctionFactoryStub()/ctypes.CDLL(webgpu_support.WEBGPU_PATH)/g" "$BASE/webgpu.py"
|
||||
sed -i "s/import ctypes/import ctypes, tinygrad.runtime.support.webgpu as webgpu_support/g" "$BASE/webgpu.py"
|
||||
python3 -c "import tinygrad.runtime.autogen.webgpu"
|
||||
}
|
||||
|
||||
if [ "$1" == "opencl" ]; then generate_opencl
|
||||
@@ -361,14 +525,16 @@ elif [ "$1" == "kfd" ]; then generate_kfd
|
||||
elif [ "$1" == "nv" ]; then generate_nv
|
||||
elif [ "$1" == "amd" ]; then generate_amd
|
||||
elif [ "$1" == "am" ]; then generate_am
|
||||
elif [ "$1" == "sqtt" ]; then generate_sqtt
|
||||
elif [ "$1" == "qcom" ]; then generate_qcom
|
||||
elif [ "$1" == "io_uring" ]; then generate_io_uring
|
||||
elif [ "$1" == "libc" ]; then generate_libc
|
||||
elif [ "$1" == "llvm" ]; then generate_llvm
|
||||
elif [ "$1" == "kgsl" ]; then generate_kgsl
|
||||
elif [ "$1" == "adreno" ]; then generate_adreno
|
||||
elif [ "$1" == "pci" ]; then generate_pciaccess
|
||||
elif [ "$1" == "pci" ]; then generate_pci
|
||||
elif [ "$1" == "vfio" ]; then generate_vfio
|
||||
elif [ "$1" == "all" ]; then generate_opencl; generate_hip; generate_comgr; generate_cuda; generate_nvrtc; generate_hsa; generate_kfd; generate_nv; generate_amd; generate_io_uring; generate_libc; generate_am
|
||||
elif [ "$1" == "webgpu" ]; then generate_webgpu
|
||||
elif [ "$1" == "all" ]; then generate_opencl; generate_hip; generate_comgr; generate_cuda; generate_nvrtc; generate_hsa; generate_kfd; generate_nv; generate_amd; generate_io_uring; generate_libc; generate_am; generate_webgpu
|
||||
else echo "usage: $0 <type>"
|
||||
fi
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
print("******** first, the runtime ***********")
|
||||
|
||||
from tinygrad.runtime.ops_clang import ClangJITCompiler, MallocAllocator, CPUProgram
|
||||
from tinygrad.runtime.ops_cpu import ClangJITCompiler, MallocAllocator, CPUProgram
|
||||
|
||||
# allocate some buffers
|
||||
out = MallocAllocator.alloc(4)
|
||||
@@ -34,7 +34,7 @@ assert val == 5
|
||||
|
||||
print("******** second, the Device ***********")
|
||||
|
||||
DEVICE = "CLANG" # NOTE: you can change this!
|
||||
DEVICE = "CPU" # NOTE: you can change this!
|
||||
|
||||
import struct
|
||||
from tinygrad.dtype import dtypes
|
||||
@@ -90,7 +90,7 @@ out = a.alu(Ops.ADD, b)
|
||||
|
||||
# schedule the computation as a list of kernels
|
||||
sched, _, becomes_map = create_schedule_with_vars(out.sink())
|
||||
for si in sched: print(si.ast.op) # NOTE: the first two convert it to CLANG
|
||||
for si in sched: print(si.ast.op) # NOTE: the first two convert it to CPU
|
||||
# NOTE: UOps are no longer mutable, the scheduler gives you a map to lookup which BUFFER the result was written to
|
||||
out = becomes_map[out]
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@ The tinygrad framework has four pieces
|
||||
|
||||
There is a good [bunch of tutorials](https://mesozoic-egg.github.io/tinygrad-notes/) by Di Zhu that go over tinygrad internals.
|
||||
|
||||
There's also a [doc describing speed](../developer/speed.md)
|
||||
|
||||
## Frontend
|
||||
|
||||
Everything in [Tensor](../tensor/index.md) is syntactic sugar around constructing a graph of [UOps](../developer/uop.md).
|
||||
|
||||
@@ -115,9 +115,8 @@ HCQ-compatible devices use a global timeline signal for synchronizing all operat
|
||||
```python
|
||||
HWQueue().wait(your_device.timeline_signal, your_device.timeline_value - 1) \
|
||||
.exec(...)
|
||||
.signal(your_device.timeline_signal, your_device.timeline_value) \
|
||||
.signal(your_device.timeline_signal, your_device.next_timeline()) \
|
||||
.submit(your_device)
|
||||
your_device.timeline_value += 1
|
||||
|
||||
# Optionally wait for execution
|
||||
your_device.timeline_signal.wait(your_device.timeline_value - 1)
|
||||
|
||||
@@ -38,7 +38,7 @@ The `Allocator` class is responsible for managing memory on the device. There is
|
||||
|
||||
The `Program` class is created for each loaded program. It is responsible for executing the program on the device. As an example, here is a `CPUProgram` implementation which loads program and runs it.
|
||||
|
||||
::: tinygrad.runtime.ops_clang.CPUProgram
|
||||
::: tinygrad.runtime.ops_cpu.CPUProgram
|
||||
options:
|
||||
members: true
|
||||
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
# speed in tinygrad
|
||||
|
||||
## Overview
|
||||
|
||||
Speed refers to many different things. To break it down to four, there's:
|
||||
|
||||
- Compile Speed (Python)
|
||||
- Execution Speed (driver)
|
||||
- Model Speed (scheduler)
|
||||
- Kernel Speed (codegen)
|
||||
|
||||
## Compile Speed (Python)
|
||||
|
||||
This is how long the first run of your model takes. It's limited largely by the runtime of the Python doing UOp rewrites. Currently it's a bit slow, but on par with torch.compile. It gets even slower if you are using BEAM, since that's compiling many variants of each kernel.
|
||||
|
||||
This will be improved by writing faster graph_rewrite, doing less graph_rewrite, and better parallelization.
|
||||
|
||||
## Execution Speed (driver)
|
||||
|
||||
After your model is compiled, you are often using the `TinyJIT`. tinygrad has the best execution speed of any framework because it usually bypasses the GPU driver and prebuilds the command queue. It's tons faster than normal CUDA, and often even faster than CUDA Graph.
|
||||
|
||||
There's very little to improve here, as this is almost never the bottleneck.
|
||||
|
||||
## Model Speed (scheduler)
|
||||
|
||||
The scheduler determines how operations are grouped into kernels and which Tensors are written to memory. This is currently a big bottleneck of training speed.
|
||||
|
||||
The decisions are often not obvious. For example, when is it worth recomputing an arithmetic operation instead of storing and loading from memory? Example:
|
||||
|
||||
```python
|
||||
from tinygrad import Tensor
|
||||
a = Tensor.rand(100)
|
||||
b = Tensor.rand(100)
|
||||
c = Tensor.rand(100)
|
||||
d = Tensor.rand(100)
|
||||
out1 = a+b+c
|
||||
out2 = a+b+d
|
||||
Tensor.realize(out1, out2)
|
||||
```
|
||||
|
||||
The real answer is obvious, compute both `out1` and `out2` in the same kernel. But you can't always do that. If you can't, should `a+b` first be saved to a subbuffer? Or should both the `out1` and `out2` kernels recompute `a+b`?
|
||||
|
||||
In this case: with recompute (6 reads + 2 writes), no recompute (6 reads + 3 writes), so we should probably recompute. However, once you add movement ops and casts this is even harder to figure out. tinygrad doesn't yet have a systematic way to do it.
|
||||
|
||||
## Kernel Speed (codegen)
|
||||
|
||||
Given that you have decided how the model ops will be grouped and what will be written to memory, kernel speed determines how fast that operation is done. This is what BEAM changes, it searches over a set of equivalent kernels which all perform the same operation and finds the one which performs the task the fastest.
|
||||
|
||||
In `kernel.py` we have a set of `OptOps`, these control the parameters of the speed optimizations applied to the kernel.
|
||||
|
||||
### Memory
|
||||
|
||||
The main bottleneck in most kernels is accessing memory. In a freshman algorithms class, you'll learn about cache aware matrix multiplication, and this is all forms of that. While the same math is run, the order in which you run it can have large impacts on the speed depending on if the data you are loading. OptOps will change this order.
|
||||
|
||||
Memory, even cache, is often much slower than accessing the register file. The amount of times data is used in math is called the "arithmetic intensity". For operations like BS=1 GEMV, the arithmetic intensity is 1, but for GEMMs and convs it can be much higher. OptOps like UPCAST and UNROLL can increase this, but be careful of making them too large, as if there's too much register pressure on the GPU the warp scheduler may not be able to fit many warps, or even worse, it could be spilling to local memory.
|
||||
|
||||
4090s have 1 TB/s of ram bandwidth and ~160 TFLOPS of compute, so you need to use each loaded value ~100 times. The L1 cache has around 40 TB/s of bandwidth, so in order to get full compute utilization you need to use each value ~4 times.
|
||||
|
||||
A lot of work can still be done here. For example, we never copy the inputs to on chip SRAM, but this is often quite helpful for kernel speed. Also, we aren't doing a good job with L2 cache awareness (the locals handle L1 quite well)
|
||||
|
||||
### Tensor Cores
|
||||
|
||||
Many accelerators have Tensor Cores / MAC arrays / systolic arrays. The main value of these is that, since they are 2-D, they create an n^2 ratio between the compute and the input data.
|
||||
|
||||
GPUs use Tensor Cores instead of MAC arrays to fit better in the GPU warp paradigm. This is because the output of Tensor Cores is O(n) wrt the input, while the output of MAC arrays like the AMX is O(n^2)
|
||||
|
||||
We have a simple framework in tinygrad for adding these ALU blocks and achieving good performance from them.
|
||||
|
||||
### Indexing
|
||||
|
||||
Indexing determines the address of the memory we need to load. GPUs often have less integer math resources than floating point math, so this can sometimes be the bottleneck. We have a symbolic math engine in our rewrite rules to simplifiy indexing before it's emitted to the kernel. Newer NVIDIA GPUs have a "Tensor Memory Accelerator" to assist with fast indexing, however, this is not supported in tinygrad yet.
|
||||
+4
-3
@@ -31,13 +31,13 @@ These control the behavior of core tinygrad even when used as a library.
|
||||
Variable | Possible Value(s) | Description
|
||||
---|---|---
|
||||
DEBUG | [1-6] | enable debugging output, with 4 you get operations, timings, speed, generated code and more
|
||||
GPU | [1] | enable the GPU backend
|
||||
GPU | [1] | enable the GPU (OpenCL) backend
|
||||
CUDA | [1] | enable CUDA backend
|
||||
AMD | [1] | enable AMD backend
|
||||
NV | [1] | enable NV backend
|
||||
METAL | [1] | enable Metal backend (for Mac M1 and after)
|
||||
METAL_XCODE | [1] | enable Metal using macOS Xcode SDK
|
||||
CLANG | [1] | enable Clang backend
|
||||
CPU | [1] | enable CPU (Clang) backend
|
||||
LLVM | [1] | enable LLVM backend
|
||||
BEAM | [#] | number of beams in kernel beam search
|
||||
DEFAULT_FLOAT | [HALF, ...]| specify the default float dtype (FLOAT32, HALF, BFLOAT16, FLOAT64, ...), default to FLOAT32
|
||||
@@ -48,4 +48,5 @@ PROFILE | [1] | enable profiling. This feature is supported i
|
||||
VISIBLE_DEVICES | [list[int]]| restricts the NV/AMD devices that are available. The format is a comma-separated list of identifiers (indexing starts with 0).
|
||||
JIT | [0-2] | 0=disabled, 1=[jit enabled](quickstart.md#jit) (default), 2=jit enabled, but graphs are disabled
|
||||
VIZ | [1] | 0=disabled, 1=[viz enabled](https://github.com/tinygrad/tinygrad/tree/master/tinygrad/viz)
|
||||
ALLOW_TF32 | [1] | enable TensorFloat-32 tensor cores on Ampere or newer GPUs.
|
||||
ALLOW_TF32 | [1] | enable TensorFloat-32 tensor cores on Ampere or newer GPUs.
|
||||
WEBGPU_BACKEND | [WGPUBackendType_Metal, ...] | Force select a backend for WebGPU (Metal, DirectX, OpenGL, Vulkan...)
|
||||
+1
-1
@@ -17,7 +17,7 @@ from tinygrad import Device
|
||||
print(Device.DEFAULT)
|
||||
```
|
||||
|
||||
You will see `CUDA` here on a GPU instance, or `CLANG` here on a CPU instance.
|
||||
You will see `CUDA` here on a GPU instance, or `CPU` here on a CPU instance.
|
||||
|
||||
## A simple model
|
||||
|
||||
|
||||
@@ -29,5 +29,12 @@
|
||||
::: tinygrad.nn.state.get_state_dict
|
||||
::: tinygrad.nn.state.get_parameters
|
||||
::: tinygrad.nn.state.load_state_dict
|
||||
::: tinygrad.nn.state.tar_extract
|
||||
options:
|
||||
show_signature: false
|
||||
separate_signature: false
|
||||
::: tinygrad.nn.state.torch_load
|
||||
options:
|
||||
show_signature: false
|
||||
separate_signature: false
|
||||
::: tinygrad.nn.state.gguf_load
|
||||
|
||||
+2
-2
@@ -110,7 +110,7 @@ class TinyNet:
|
||||
|
||||
def __call__(self, x):
|
||||
x = self.l1(x)
|
||||
x = x.leakyrelu()
|
||||
x = x.leaky_relu()
|
||||
x = self.l2(x)
|
||||
return x
|
||||
|
||||
@@ -118,7 +118,7 @@ net = TinyNet()
|
||||
```
|
||||
|
||||
We can see that the forward pass of our neural network is just the sequence of operations performed on the input tensor `x`.
|
||||
We can also see that functional operations like `leakyrelu` are not defined as classes and instead are just methods we can just call.
|
||||
We can also see that functional operations like `leaky_relu` are not defined as classes and instead are just methods we can just call.
|
||||
Finally, we just initialize an instance of our neural network, and we are ready to start training it.
|
||||
|
||||
## Training
|
||||
|
||||
+54
-2
@@ -1,6 +1,6 @@
|
||||
# Runtimes
|
||||
|
||||
tinygrad supports various runtimes, enabling your code to scale across a wide range of devices. The default runtime can be automatically selected based on the available hardware, or you can force a specific runtime to be default using environment variables (e.g., `CLANG=1`).
|
||||
tinygrad supports various runtimes, enabling your code to scale across a wide range of devices. The default runtime can be automatically selected based on the available hardware, or you can force a specific runtime to be default using environment variables (e.g., `CPU=1`).
|
||||
|
||||
| Runtime | Description | Requirements |
|
||||
|---------|-------------|--------------|
|
||||
@@ -10,5 +10,57 @@ tinygrad supports various runtimes, enabling your code to scale across a wide ra
|
||||
| [METAL](https://github.com/tinygrad/tinygrad/tree/master/tinygrad/runtime/ops_metal.py) | Utilizes Metal for acceleration on Apple devices | M1+ Macs; Metal 3.0+ for `bfloat` support |
|
||||
| [CUDA](https://github.com/tinygrad/tinygrad/tree/master/tinygrad/runtime/ops_cuda.py) | Utilizes CUDA for acceleration on NVIDIA GPUs | NVIDIA GPU with CUDA support |
|
||||
| [GPU (OpenCL)](https://github.com/tinygrad/tinygrad/tree/master/tinygrad/runtime/ops_gpu.py) | Accelerates computations using OpenCL on GPUs | OpenCL 2.0 compatible device |
|
||||
| [CLANG (C Code)](https://github.com/tinygrad/tinygrad/tree/master/tinygrad/runtime/ops_clang.py) | Runs on CPU using the clang compiler | `clang` compiler in system `PATH` |
|
||||
| [CPU (C Code)](https://github.com/tinygrad/tinygrad/tree/master/tinygrad/runtime/ops_cpu.py) | Runs on CPU using the clang compiler | `clang` compiler in system `PATH` |
|
||||
| [LLVM (LLVM IR)](https://github.com/tinygrad/tinygrad/tree/master/tinygrad/runtime/ops_llvm.py) | Runs on CPU using the LLVM compiler infrastructure | llvm libraries installed and findable |
|
||||
| [WEBGPU](https://github.com/tinygrad/tinygrad/tree/master/tinygrad/runtime/ops_webgpu.py) | Runs on GPU using the Dawn WebGPU engine (used in Google Chrome) | Dawn library installed and findable. Download binaries [here](https://github.com/wpmed92/pydawn/releases/tag/v0.1.6). |
|
||||
|
||||
## Interoperability
|
||||
|
||||
tinygrad provides interoperability with OpenCL and PyTorch, allowing efficient tensor data sharing between frameworks through the `Tensor.from_blob` API. This enables zero-copy operations by working directly with external memory pointers.
|
||||
|
||||
**Important**: When using external memory pointers with tinygrad tensors, you must ensure these pointers remain valid throughout the entire lifetime of the tinygrad tensor to prevent memory corruption.
|
||||
|
||||
### `CUDA`/`METAL` PyTorch Interoperability
|
||||
|
||||
You can seamlessly work with CUDA/MPS tensors between PyTorch and tinygrad without data copying:
|
||||
```python
|
||||
from tinygrad.dtype import _from_torch_dtype
|
||||
tensor1 = torch.tensor([1.0, 2.0, 3.0], device=torch.device("cuda"))
|
||||
tiny_tensor1 = Tensor.from_blob(tensor1.data_ptr(), tensor1.shape, dtype=_from_torch_dtype(tensor1.dtype), device='CUDA')
|
||||
|
||||
# Before tinygrad calculations, mps needs to be synchronized to make sure data is valid.
|
||||
if data.device.type == "mps": torch.mps.synchronize()
|
||||
else: torch.cuda.synchronize()
|
||||
|
||||
x = (tiny_tensor1 + 1).realize()
|
||||
```
|
||||
|
||||
### `QCOM` OpenCL Interoperability
|
||||
|
||||
tinygrad supports OpenCL interoperability on `QCOM` backend.
|
||||
|
||||
Buffer interop allows direct access to OpenCL memory buffers:
|
||||
```python
|
||||
# create raw opencl buffer.
|
||||
cl_buf = cl.clCreateBuffer(cl_context, cl.CL_MEM_READ_WRITE, 0x100, None, status := ctypes.c_int32())
|
||||
|
||||
# extract pointers
|
||||
cl_buf_desc_ptr = to_mv(ctypes.addressof(cl_buf), 8).cast('Q')[0]
|
||||
rawbuf_ptr = to_mv(cl_buf_desc_ptr, 0x100).cast('Q')[20] # offset 0xA0 is a raw gpu pointer.
|
||||
|
||||
# create tiny tensor
|
||||
tiny = Tensor.from_blob(rawbuf_ptr, (8, 8), dtype=dtypes.int, device='QCOM')
|
||||
```
|
||||
|
||||
And the same for the images:
|
||||
```python
|
||||
# create cl image.
|
||||
cl_img = cl.clCreateImage2D(cl_context, cl.CL_MEM_READ_WRITE, cl.cl_image_format(cl.CL_RGBA, cl.CL_FLOAT), w, h, 0, None, status := ctypes.c_int32())
|
||||
|
||||
# extract pointers
|
||||
cl_buf_desc_ptr = to_mv(ctypes.addressof(cl_img), 8).cast('Q')[0]
|
||||
rawbuf_ptr = to_mv(cl_buf_desc_ptr, 0x100).cast('Q')[20] # offset 0xA0 is a raw gpu pointer.
|
||||
|
||||
# create tiny tensor
|
||||
tiny = Tensor.from_blob(rawbuf_ptr, (h*w*4,), dtype=dtypes.imagef((h,w)), device='QCOM')
|
||||
```
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
::: tinygrad.Tensor.manual_seed
|
||||
::: tinygrad.Tensor.rand
|
||||
::: tinygrad.Tensor.rand_like
|
||||
::: tinygrad.Tensor.randn
|
||||
::: tinygrad.Tensor.randint
|
||||
::: tinygrad.Tensor.normal
|
||||
|
||||
@@ -22,6 +22,7 @@ Elementwise ops operate on a per element basis. They don't change the shape of t
|
||||
::: tinygrad.Tensor.round
|
||||
::: tinygrad.Tensor.isinf
|
||||
::: tinygrad.Tensor.isnan
|
||||
::: tinygrad.Tensor.isfinite
|
||||
::: tinygrad.Tensor.lerp
|
||||
::: tinygrad.Tensor.square
|
||||
::: tinygrad.Tensor.clamp
|
||||
@@ -52,7 +53,7 @@ Elementwise ops operate on a per element basis. They don't change the shape of t
|
||||
::: tinygrad.Tensor.erf
|
||||
::: tinygrad.Tensor.gelu
|
||||
::: tinygrad.Tensor.quick_gelu
|
||||
::: tinygrad.Tensor.leakyrelu
|
||||
::: tinygrad.Tensor.leaky_relu
|
||||
::: tinygrad.Tensor.mish
|
||||
::: tinygrad.Tensor.softplus
|
||||
::: tinygrad.Tensor.softsign
|
||||
@@ -65,13 +66,17 @@ Elementwise ops operate on a per element basis. They don't change the shape of t
|
||||
::: tinygrad.Tensor.div
|
||||
::: tinygrad.Tensor.idiv
|
||||
::: tinygrad.Tensor.mod
|
||||
::: tinygrad.Tensor.xor
|
||||
::: tinygrad.Tensor.bitwise_xor
|
||||
::: tinygrad.Tensor.bitwise_and
|
||||
::: tinygrad.Tensor.bitwise_or
|
||||
::: tinygrad.Tensor.bitwise_not
|
||||
::: tinygrad.Tensor.lshift
|
||||
::: tinygrad.Tensor.rshift
|
||||
::: tinygrad.Tensor.pow
|
||||
::: tinygrad.Tensor.maximum
|
||||
::: tinygrad.Tensor.minimum
|
||||
::: tinygrad.Tensor.where
|
||||
::: tinygrad.Tensor.copysign
|
||||
|
||||
## Casting Ops
|
||||
|
||||
|
||||
@@ -6,8 +6,10 @@
|
||||
::: tinygrad.Tensor.min
|
||||
::: tinygrad.Tensor.any
|
||||
::: tinygrad.Tensor.all
|
||||
::: tinygrad.Tensor.isclose
|
||||
::: tinygrad.Tensor.mean
|
||||
::: tinygrad.Tensor.var
|
||||
::: tinygrad.Tensor.var_mean
|
||||
::: tinygrad.Tensor.std
|
||||
::: tinygrad.Tensor.std_mean
|
||||
::: tinygrad.Tensor.softmax
|
||||
@@ -21,6 +23,7 @@
|
||||
|
||||
::: tinygrad.Tensor.avg_pool2d
|
||||
::: tinygrad.Tensor.max_pool2d
|
||||
::: tinygrad.Tensor.max_unpool2d
|
||||
::: tinygrad.Tensor.conv2d
|
||||
::: tinygrad.Tensor.conv_transpose2d
|
||||
::: tinygrad.Tensor.dot
|
||||
@@ -32,6 +35,10 @@
|
||||
::: tinygrad.Tensor.tril
|
||||
::: tinygrad.Tensor.interpolate
|
||||
::: tinygrad.Tensor.scatter
|
||||
::: tinygrad.Tensor.scatter_reduce
|
||||
::: tinygrad.Tensor.masked_select
|
||||
::: tinygrad.Tensor.sort
|
||||
::: tinygrad.Tensor.topk
|
||||
|
||||
## Neural Network (functional)
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
::: tinygrad.Tensor.replace
|
||||
::: tinygrad.Tensor.assign
|
||||
::: tinygrad.Tensor.detach
|
||||
::: tinygrad.Tensor.clone
|
||||
::: tinygrad.Tensor.to
|
||||
::: tinygrad.Tensor.to_
|
||||
::: tinygrad.Tensor.shard
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import sys, onnx, time
|
||||
import sys, onnx, time, pickle
|
||||
from tinygrad import TinyJit, Device, GlobalCounters, fetch, getenv
|
||||
from extra.onnx import OnnxRunner
|
||||
from tinygrad.frontend.onnx import OnnxRunner
|
||||
from extra.onnx_helpers import get_example_inputs, validate
|
||||
|
||||
def load_onnx_model(onnx_file):
|
||||
@@ -33,4 +33,9 @@ if __name__ == "__main__":
|
||||
|
||||
if getenv("ORT"):
|
||||
validate(onnx_file, new_inputs, rtol=1e-3, atol=1e-3)
|
||||
print("model validated")
|
||||
print("model validated")
|
||||
|
||||
if (fn:=getenv("SAVE_PKL", "")) != "":
|
||||
with open(fn, "wb") as f:
|
||||
pickle.dump(run_onnx_jit, f)
|
||||
print(f"pkl saved to {fn}")
|
||||
|
||||
@@ -15,9 +15,9 @@ if __name__ == "__main__":
|
||||
if getenv("WEBGPU"):
|
||||
safe_save(get_state_dict(model), (dirname / "net.safetensors").as_posix())
|
||||
load_state_dict(model, safe_load(str(dirname / "net.safetensors")))
|
||||
mode = "clang" if getenv("CLANG", "") != "" else "webgpu" if getenv("WEBGPU", "") != "" else ""
|
||||
mode = "clang" if getenv("CPU", "") != "" else "webgpu" if getenv("WEBGPU", "") != "" else ""
|
||||
prg, inp_sizes, out_sizes, state = export_model(model, mode, Tensor.randn(1,3,224,224))
|
||||
if getenv("CLANG", "") == "":
|
||||
if getenv("CPU", "") == "":
|
||||
ext = "js" if getenv("WEBGPU", "") != "" else "json"
|
||||
with open(dirname / f"net.{ext}", "w") as text_file:
|
||||
text_file.write(prg)
|
||||
@@ -68,6 +68,6 @@ if __name__ == "__main__":
|
||||
else printf("%s\\n", lbls[best_idx]);
|
||||
}""")
|
||||
|
||||
# CLANG=1 python3 examples/compile_efficientnet.py | clang -O2 -lm -x c - -o recognize && DEBUG=1 time ./recognize docs/showcase/stable_diffusion_by_tinygrad.jpg
|
||||
# CPU=1 python3 examples/compile_efficientnet.py | clang -O2 -lm -x c - -o recognize && DEBUG=1 time ./recognize docs/showcase/stable_diffusion_by_tinygrad.jpg
|
||||
# category : 281 (tabby, tabby cat) with 9.452788
|
||||
print('\n'.join(cprog))
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
# An example to compile a small Tensorflow model to extremely portable C code
|
||||
|
||||
import os, sys
|
||||
os.environ["CLANG"] = '1'
|
||||
os.environ["CPU"] = '1'
|
||||
os.environ["JIT"] = '2'
|
||||
|
||||
import numpy as np
|
||||
import subprocess
|
||||
import tensorflow as tf
|
||||
import tf2onnx
|
||||
from extra.onnx import OnnxRunner
|
||||
from tinygrad.frontend.onnx import OnnxRunner
|
||||
from tinygrad.tensor import Tensor
|
||||
from extra.export_model import export_model_clang, compile_net, jit_model
|
||||
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
import os, argparse
|
||||
import os, argparse, contextlib
|
||||
from typing import Optional, Union
|
||||
import tiktoken
|
||||
with contextlib.suppress(ImportError): import tiktoken
|
||||
from tinygrad import Tensor, TinyJit, Device, GlobalCounters, Variable, dtypes
|
||||
from tinygrad.ops import UOp
|
||||
from tinygrad.helpers import Timing, DEBUG, JIT, getenv, fetch, colored, trange
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
from typing import List, Tuple
|
||||
from extra.models.resnet import ResNet50
|
||||
from extra.mcts_search import mcts_search
|
||||
from examples.mlperf.helpers import get_mlperf_bert_model
|
||||
@@ -6,8 +5,9 @@ from tinygrad import Tensor, Device, dtypes, nn
|
||||
from tinygrad.codegen.kernel import Kernel
|
||||
from tinygrad.ops import Ops, sym_infer
|
||||
from tinygrad.device import Compiled
|
||||
from tinygrad.engine.search import time_linearizer, beam_search, bufs_from_lin
|
||||
from tinygrad.engine.search import beam_search, bufs_from_lin
|
||||
from tinygrad.helpers import DEBUG, ansilen, getenv, colored, TRACEMETA
|
||||
from extra.optimization.helpers import time_linearizer
|
||||
|
||||
def get_sched_resnet():
|
||||
mdl = ResNet50()
|
||||
@@ -79,7 +79,7 @@ if __name__ == "__main__":
|
||||
rawbufs = bufs_from_lin(Kernel(si.ast))
|
||||
|
||||
# "linearize" the op into uops in different ways
|
||||
lins: List[Tuple[Kernel, str]] = []
|
||||
lins: list[tuple[Kernel, str]] = []
|
||||
|
||||
# always try hand coded opt
|
||||
lin = Kernel(si.ast, opts=device.renderer)
|
||||
|
||||
+27
-13
@@ -47,7 +47,7 @@ def concat_weights(models, device=None):
|
||||
disk_tensors: List[Tensor] = [model[name] for model in models]
|
||||
if len(disk_tensors) == 1 or len(disk_tensors[0].shape) == 1:
|
||||
return disk_tensors[0].to(device=device)
|
||||
axis = 1 if name.endswith(".attention.wo.weight") or name.endswith(".feed_forward.w2.weight") else 0
|
||||
axis = 1 if name.endswith((".attention.wo.weight", ".feed_forward.w2.weight")) else 0
|
||||
lazy_tensors = [data.to(device=device) for data in disk_tensors]
|
||||
return lazy_tensors[0].cat(*lazy_tensors[1:], dim=axis)
|
||||
return {name: convert(name) for name in {name: None for model in models for name in model}}
|
||||
@@ -73,16 +73,17 @@ class Int8Linear:
|
||||
self.scale = Tensor.ones(out_features, dtype=dtypes.half)
|
||||
|
||||
def __call__(self, x):
|
||||
return x.dot(self.weight.cast(dtype=dtypes.half).T*self.scale)
|
||||
return x.dot(self.weight.cast(self.scale.dtype).T*self.scale)
|
||||
|
||||
@staticmethod
|
||||
def quantize(tensors, device):
|
||||
def quantize(tensors, device, scale_dtype=dtypes.float16, quantize_embeds=False):
|
||||
new_tensors = {}
|
||||
for name,v in tensors.items():
|
||||
if "feed_forward" in name or "attention.w" in name:
|
||||
if "feed_forward" in name or "attention.w" in name or (quantize_embeds and "tok_embeddings.weight" in name):
|
||||
assert "weight" in name, name
|
||||
v = v.cast(scale_dtype)
|
||||
scale = v.abs().max(axis=1) / 127.0
|
||||
int8_weight = (v.T/scale).T.cast(dtype=dtypes.int8)
|
||||
int8_weight = (v.T/scale).T.round().cast(dtype=dtypes.int8) # without round(), cast truncates -34.9 to -34
|
||||
new_tensors[name] = int8_weight
|
||||
new_tensors[name.replace('weight', 'scale')] = scale
|
||||
if isinstance(device, tuple):
|
||||
@@ -90,8 +91,20 @@ class Int8Linear:
|
||||
new_tensors[name.replace('weight', 'scale')].shard_(device, axis=None)
|
||||
else:
|
||||
new_tensors[name] = v
|
||||
if quantize_embeds: new_tensors.update({"output.weight": new_tensors["tok_embeddings.weight"], "output.scale": new_tensors["tok_embeddings.scale"]})
|
||||
return new_tensors
|
||||
|
||||
class Int8Embedding:
|
||||
def __init__(self, vocab_size:int, embed_size:int):
|
||||
self.vocab_sz, self.embed_sz = vocab_size, embed_size
|
||||
self.weight, self.scale = Tensor.ones(vocab_size, embed_size, dtype=dtypes.int8), Tensor.ones(vocab_size, dtype=dtypes.half)
|
||||
|
||||
def __call__(self, idx:Tensor) -> Tensor:
|
||||
if not hasattr(self, 'arange'): self.arange = Tensor.arange(self.vocab_sz, requires_grad=False, device=self.weight.device).unsqueeze(-1)
|
||||
big_shp = idx.shape+(self.vocab_sz, self.embed_sz)
|
||||
arange, idx, vals = self.arange.expand(big_shp), idx.reshape(idx.shape+(1, 1)).expand(big_shp), (self.weight.cast(self.scale.dtype).T*self.scale).T
|
||||
return (arange == idx).mul(vals).sum(-2, dtype=vals.dtype)
|
||||
|
||||
def NF4Linear(block_size):
|
||||
_CODE = [
|
||||
-1.0, -0.6961928009986877, -0.5250730514526367, -0.39491748809814453, -0.28444138169288635, -0.18477343022823334, -0.09105003625154495, 0.0,
|
||||
@@ -113,7 +126,7 @@ def NF4Linear(block_size):
|
||||
return x.linear(unscaled.reshape(self.out_features, self.in_features).T)
|
||||
|
||||
@staticmethod
|
||||
def quantize(state_dict: dict[str, Tensor], device) -> dict[str, Tensor]:
|
||||
def quantize(state_dict: dict[str, Tensor], device, scale_dtype=dtypes.float16) -> dict[str, Tensor]:
|
||||
new_state_dict = {}
|
||||
for k, v in state_dict.items():
|
||||
if "feed_forward" in k or "attention.w" in k:
|
||||
@@ -121,7 +134,7 @@ def NF4Linear(block_size):
|
||||
scale = (grouped.abs().max(axis=1, keepdim=True))
|
||||
coded = ((grouped / scale).unsqueeze(-1) - CODE.to(v.device)).abs().argmin(axis=-1).cast(dtypes.uint8).flatten()
|
||||
new_state_dict[k] = coded[::2] * 2 ** 4 + coded[1::2]
|
||||
new_state_dict[k.replace(".weight", ".scale")] = scale.cast(dtypes.float16)
|
||||
new_state_dict[k.replace(".weight", ".scale")] = scale.cast(scale_dtype)
|
||||
if isinstance(device, tuple):
|
||||
new_state_dict[k].shard_(device, axis=-1)
|
||||
new_state_dict[k.replace('weight', 'scale')].shard_(device, axis=None)
|
||||
@@ -144,13 +157,14 @@ MODEL_PARAMS = {
|
||||
"files": 8
|
||||
}
|
||||
}
|
||||
def build_transformer(model_path: Path, model_size="8B", quantize=None, device=None):
|
||||
def build_transformer(model_path: Path, model_size="8B", quantize=None, scale_dtype=dtypes.float16, device=None, max_context=8192, load_weights=True):
|
||||
# build model
|
||||
if quantize == "int8": linear = Int8Linear
|
||||
elif quantize == "nf4": linear = NF4Linear(64)
|
||||
else: linear = nn.Linear
|
||||
model = Transformer(**MODEL_PARAMS[model_size]["args"], linear=linear, max_context=8192, jit=True)
|
||||
if quantize == "int8": linear, embedding, quantize_embeds = Int8Linear, Int8Embedding, True
|
||||
elif quantize == "nf4": linear, embedding, quantize_embeds = NF4Linear(64), nn.Embedding, False
|
||||
else: linear, embedding, quantize_embeds = nn.Linear, nn.Embedding, False
|
||||
model = Transformer(**MODEL_PARAMS[model_size]["args"], linear=linear, embedding=embedding, max_context=max_context, jit=True)
|
||||
|
||||
if not load_weights: return model
|
||||
# load weights
|
||||
if model_path.is_dir():
|
||||
if (model_path / "model.safetensors.index.json").exists(): weights = load(str(model_path / "model.safetensors.index.json"))
|
||||
@@ -168,7 +182,7 @@ def build_transformer(model_path: Path, model_size="8B", quantize=None, device=N
|
||||
# quantize
|
||||
if quantize == "float16": weights = {k:v.cast(quantize).contiguous() for k,v in weights.items()}
|
||||
elif quantize is not None:
|
||||
weights = linear.quantize(weights, device)
|
||||
weights = linear.quantize(weights, device, scale_dtype, quantize_embeds)
|
||||
for _,v in weights.items(): v.realize()
|
||||
|
||||
# shard
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import os
|
||||
if "NOOPT" not in os.environ: os.environ["NOOPT"] = "1"
|
||||
from tinygrad import Device, nn, Tensor, dtypes, Variable
|
||||
Device.DEFAULT = "CLANG"
|
||||
Device.DEFAULT = "CPU"
|
||||
from train_gpt2 import GPT, GPTConfig
|
||||
from tinygrad.helpers import dedup, to_function_name, flatten, getenv, GlobalCounters, ansilen, to_function_name
|
||||
from tinygrad.engine.realize import get_kernel, run_schedule
|
||||
@@ -43,9 +43,9 @@ if __name__ == "__main__":
|
||||
ast_dedup = dedup([si.ast for si in sched if si.ast.op is Ops.SINK])
|
||||
srcs = {}
|
||||
for ast in ast_dedup:
|
||||
k = get_kernel(Device["CLANG"].renderer, ast)
|
||||
k = get_kernel(Device["CPU"].renderer, ast)
|
||||
k.linearize()
|
||||
src = Device["CLANG"].renderer.render(to_function_name(k.name), k.uops)
|
||||
src = Device["CPU"].renderer.render(to_function_name(k.name), k.uops)
|
||||
srcs[ast] = (k.name, src)
|
||||
print("functions:", len(srcs))
|
||||
used_buffers = dedup(flatten([si.bufs for si in sched]))
|
||||
|
||||
@@ -170,13 +170,13 @@ def batch_load_resnet(batch_size=64, val=False, shuffle=True, seed=None, pad_fir
|
||||
|
||||
def process_batch_bert(data: List[dict]) -> dict[str, Tensor]:
|
||||
return {
|
||||
"input_ids": Tensor(np.concatenate([s["input_ids"] for s in data], axis=0), dtype=dtypes.float32),
|
||||
"input_mask": Tensor(np.concatenate([s["input_mask"] for s in data], axis=0), dtype=dtypes.default_float),
|
||||
"segment_ids": Tensor(np.concatenate([s["segment_ids"] for s in data], axis=0), dtype=dtypes.float32),
|
||||
"masked_lm_positions": Tensor(np.concatenate([s["masked_lm_positions"] for s in data], axis=0), dtype=dtypes.float32),
|
||||
"masked_lm_ids": Tensor(np.concatenate([s["masked_lm_ids"] for s in data], axis=0), dtype=dtypes.float32),
|
||||
"masked_lm_weights": Tensor(np.concatenate([s["masked_lm_weights"] for s in data], axis=0), dtype=dtypes.float32),
|
||||
"next_sentence_labels": Tensor(np.concatenate([s["next_sentence_labels"] for s in data], axis=0), dtype=dtypes.float32),
|
||||
"input_ids": Tensor(np.concatenate([s["input_ids"] for s in data], axis=0), dtype=dtypes.int32, device="CPU"),
|
||||
"input_mask": Tensor(np.concatenate([s["input_mask"] for s in data], axis=0), dtype=dtypes.int32, device="CPU"),
|
||||
"segment_ids": Tensor(np.concatenate([s["segment_ids"] for s in data], axis=0), dtype=dtypes.int32, device="CPU"),
|
||||
"masked_lm_positions": Tensor(np.concatenate([s["masked_lm_positions"] for s in data], axis=0), dtype=dtypes.int32, device="CPU"),
|
||||
"masked_lm_ids": Tensor(np.concatenate([s["masked_lm_ids"] for s in data], axis=0), dtype=dtypes.int32, device="CPU"),
|
||||
"masked_lm_weights": Tensor(np.concatenate([s["masked_lm_weights"] for s in data], axis=0), dtype=dtypes.float32, device="CPU"),
|
||||
"next_sentence_labels": Tensor(np.concatenate([s["next_sentence_labels"] for s in data], axis=0), dtype=dtypes.int32, device="CPU"),
|
||||
}
|
||||
|
||||
def load_file(file: str):
|
||||
@@ -348,6 +348,167 @@ def batch_load_unet3d(preprocessed_dataset_dir:Path, batch_size:int=6, val:bool=
|
||||
# happens with BENCHMARK set
|
||||
pass
|
||||
|
||||
### RetinaNet
|
||||
|
||||
def load_retinanet_data(base_dir:Path, val:bool, queue_in:Queue, queue_out:Queue,
|
||||
imgs:Tensor, boxes:Tensor, labels:Tensor, matches:Tensor|None=None,
|
||||
anchors:Tensor|None=None, seed:int|None=None):
|
||||
from extra.datasets.openimages import image_load, random_horizontal_flip, resize
|
||||
from examples.mlperf.helpers import box_iou, find_matches, generate_anchors
|
||||
import torch
|
||||
|
||||
while (data:=queue_in.get()) is not None:
|
||||
idx, img, tgt = data
|
||||
img = image_load(base_dir, img["subset"], img["file_name"])
|
||||
|
||||
if val:
|
||||
img = resize(img)[0]
|
||||
else:
|
||||
if seed is not None:
|
||||
np.random.seed(seed)
|
||||
random.seed(seed)
|
||||
torch.manual_seed(seed)
|
||||
|
||||
img, tgt = random_horizontal_flip(img, tgt)
|
||||
img, tgt, _ = resize(img, tgt=tgt)
|
||||
match_quality_matrix = box_iou(tgt["boxes"], (anchor := np.concatenate(generate_anchors((800, 800)))))
|
||||
match_idxs = find_matches(match_quality_matrix, allow_low_quality_matches=True)
|
||||
clipped_match_idxs = np.clip(match_idxs, 0, None)
|
||||
clipped_boxes, clipped_labels = tgt["boxes"][clipped_match_idxs], tgt["labels"][clipped_match_idxs]
|
||||
|
||||
boxes[idx].contiguous().realize().lazydata.base.realized.as_buffer(force_zero_copy=True)[:] = clipped_boxes.tobytes()
|
||||
labels[idx].contiguous().realize().lazydata.base.realized.as_buffer(force_zero_copy=True)[:] = clipped_labels.tobytes()
|
||||
matches[idx].contiguous().realize().lazydata.base.realized.as_buffer(force_zero_copy=True)[:] = match_idxs.tobytes()
|
||||
anchors[idx].contiguous().realize().lazydata.base.realized.as_buffer(force_zero_copy=True)[:] = anchor.tobytes()
|
||||
|
||||
imgs[idx].contiguous().realize().lazydata.base.realized.as_buffer(force_zero_copy=True)[:] = img.tobytes()
|
||||
|
||||
queue_out.put(idx)
|
||||
queue_out.put(None)
|
||||
|
||||
def batch_load_retinanet(dataset, val:bool, base_dir:Path, batch_size:int=32, shuffle:bool=True, seed:int|None=None):
|
||||
def _enqueue_batch(bc):
|
||||
from extra.datasets.openimages import prepare_target
|
||||
for idx in range(bc * batch_size, (bc+1) * batch_size):
|
||||
img = dataset.loadImgs(next(dataset_iter))[0]
|
||||
ann = dataset.loadAnns(dataset.getAnnIds(img_id:=img["id"]))
|
||||
tgt = prepare_target(ann, img_id, (img["height"], img["width"]))
|
||||
|
||||
if img_ids is not None:
|
||||
img_ids[idx] = img_id
|
||||
|
||||
if img_sizes is not None:
|
||||
img_sizes[idx] = tgt["image_size"]
|
||||
|
||||
queue_in.put((idx, img, tgt))
|
||||
|
||||
def _setup_shared_mem(shm_name:str, size:tuple[int, ...], dtype:dtypes) -> tuple[shared_memory.SharedMemory, Tensor]:
|
||||
if os.path.exists(f"/dev/shm/{shm_name}"): os.unlink(f"/dev/shm/{shm_name}")
|
||||
shm = shared_memory.SharedMemory(name=shm_name, create=True, size=prod(size))
|
||||
shm_tensor = Tensor.empty(*size, dtype=dtype, device=f"disk:/dev/shm/{shm_name}")
|
||||
return shm, shm_tensor
|
||||
|
||||
image_ids = sorted(dataset.imgs.keys())
|
||||
batch_count = min(32, len(image_ids) // batch_size)
|
||||
|
||||
queue_in, queue_out = Queue(), Queue()
|
||||
procs, data_out_count = [], [0] * batch_count
|
||||
|
||||
shm_imgs, imgs = _setup_shared_mem("retinanet_imgs", (batch_size * batch_count, 800, 800, 3), dtypes.uint8)
|
||||
|
||||
if val:
|
||||
boxes, labels, matches, anchors = None, None, None, None
|
||||
img_ids, img_sizes = [None] * (batch_size * batch_count), [None] * (batch_size * batch_count)
|
||||
else:
|
||||
img_ids, img_sizes = None, None
|
||||
shm_boxes, boxes = _setup_shared_mem("retinanet_boxes", (batch_size * batch_count, 120087, 4), dtypes.float32)
|
||||
shm_labels, labels = _setup_shared_mem("retinanet_labels", (batch_size * batch_count, 120087), dtypes.int64)
|
||||
shm_matches, matches = _setup_shared_mem("retinanet_matches", (batch_size * batch_count, 120087), dtypes.int64)
|
||||
shm_anchors, anchors = _setup_shared_mem("retinanet_anchors", (batch_size * batch_count, 120087, 4), dtypes.float64)
|
||||
|
||||
shutdown = False
|
||||
class Cookie:
|
||||
def __init__(self, bc):
|
||||
self.bc = bc
|
||||
def __del__(self):
|
||||
if not shutdown:
|
||||
try: _enqueue_batch(self.bc)
|
||||
except StopIteration: pass
|
||||
|
||||
def shuffle_indices(indices, seed):
|
||||
rng = random.Random(seed)
|
||||
rng.shuffle(indices)
|
||||
|
||||
if shuffle: shuffle_indices(image_ids, seed=seed)
|
||||
dataset_iter = iter(image_ids)
|
||||
|
||||
try:
|
||||
for _ in range(cpu_count()):
|
||||
proc = Process(
|
||||
target=load_retinanet_data,
|
||||
args=(base_dir, val, queue_in, queue_out, imgs, boxes, labels),
|
||||
kwargs={"matches": matches, "anchors": anchors, "seed": seed}
|
||||
)
|
||||
proc.daemon = True
|
||||
proc.start()
|
||||
procs.append(proc)
|
||||
|
||||
for bc in range(batch_count):
|
||||
_enqueue_batch(bc)
|
||||
|
||||
for _ in range(len(image_ids) // batch_size):
|
||||
while True:
|
||||
bc = queue_out.get() // batch_size
|
||||
data_out_count[bc] += 1
|
||||
if data_out_count[bc] == batch_size: break
|
||||
|
||||
data_out_count[bc] = 0
|
||||
|
||||
if val:
|
||||
yield (imgs[bc * batch_size:(bc + 1) * batch_size],
|
||||
img_ids[bc * batch_size:(bc + 1) * batch_size],
|
||||
img_sizes[bc * batch_size:(bc + 1) * batch_size],
|
||||
Cookie(bc))
|
||||
else:
|
||||
yield (imgs[bc * batch_size:(bc + 1) * batch_size],
|
||||
boxes[bc * batch_size:(bc + 1) * batch_size],
|
||||
labels[bc * batch_size:(bc + 1) * batch_size],
|
||||
matches[bc * batch_size:(bc + 1) * batch_size],
|
||||
anchors[bc * batch_size:(bc + 1) * batch_size],
|
||||
Cookie(bc))
|
||||
finally:
|
||||
shutdown = True
|
||||
|
||||
for _ in procs: queue_in.put(None)
|
||||
queue_in.close()
|
||||
|
||||
for _ in procs:
|
||||
while queue_out.get() is not None: pass
|
||||
queue_out.close()
|
||||
|
||||
# shutdown processes
|
||||
for proc in procs: proc.join()
|
||||
|
||||
shm_imgs.close()
|
||||
|
||||
if not val:
|
||||
shm_boxes.close()
|
||||
shm_labels.close()
|
||||
shm_matches.close()
|
||||
shm_anchors.close()
|
||||
|
||||
try:
|
||||
shm_imgs.unlink()
|
||||
|
||||
if not val:
|
||||
shm_boxes.unlink()
|
||||
shm_labels.unlink()
|
||||
shm_matches.unlink()
|
||||
shm_anchors.unlink()
|
||||
except FileNotFoundError:
|
||||
# happens with BENCHMARK set
|
||||
pass
|
||||
|
||||
if __name__ == "__main__":
|
||||
def load_unet3d(val):
|
||||
assert not val, "validation set is not supported due to different sizes on inputs"
|
||||
@@ -368,6 +529,14 @@ if __name__ == "__main__":
|
||||
for x,y,c in batch_load_resnet(val=val):
|
||||
pbar.update(x.shape[0])
|
||||
|
||||
def load_retinanet(val):
|
||||
from extra.datasets.openimages import BASEDIR, download_dataset
|
||||
from pycocotools.coco import COCO
|
||||
dataset = COCO(download_dataset(base_dir:=getenv("BASE_DIR", BASEDIR), "validation" if val else "train"))
|
||||
with tqdm(total=len(dataset.imgs.keys())) as pbar:
|
||||
for x in batch_load_retinanet(dataset, val, base_dir):
|
||||
pbar.update(x[0].shape[0])
|
||||
|
||||
load_fn_name = f"load_{getenv('MODEL', 'resnet')}"
|
||||
if load_fn_name in globals():
|
||||
globals()[load_fn_name](getenv("VAL", 1))
|
||||
|
||||
+85
-28
@@ -1,6 +1,7 @@
|
||||
from collections import OrderedDict
|
||||
import unicodedata
|
||||
from typing import Optional
|
||||
import math
|
||||
import numpy as np
|
||||
from tinygrad.nn import state
|
||||
from tinygrad.tensor import Tensor, dtypes
|
||||
@@ -195,20 +196,18 @@ def get_bert_qa_prediction(features, example, start_end_logits):
|
||||
return "empty"
|
||||
|
||||
def get_mlperf_bert_config():
|
||||
"""Config is BERT-large"""
|
||||
return {
|
||||
"attention_probs_dropout_prob": 0.1,
|
||||
"hidden_dropout_prob": 0.1,
|
||||
"hidden_size": 1024,
|
||||
"intermediate_size": 4096,
|
||||
"max_position_embeddings": 512,
|
||||
"num_attention_heads": 16,
|
||||
"num_hidden_layers": getenv("BERT_LAYERS", 24),
|
||||
"type_vocab_size": 2,
|
||||
"vocab_size": 30522
|
||||
}
|
||||
"""benchmark is BERT-large"""
|
||||
ret = {"attention_probs_dropout_prob": 0.1, "hidden_dropout_prob": 0.1, "vocab_size": 30522, "type_vocab_size": 2, "max_position_embeddings": 512}
|
||||
|
||||
def get_mlperf_bert_model(checkpoint_path:Optional[str]=None):
|
||||
match (bert_size:=getenv("BERT_SIZE", "large")):
|
||||
case "large": ret.update({"hidden_size": 1024, "intermediate_size": 4096, "num_attention_heads": 16, "num_hidden_layers": 24})
|
||||
case "tiny": ret.update({"hidden_size": 128, "intermediate_size": 512, "num_attention_heads": 2, "num_hidden_layers": 2})
|
||||
case _: raise RuntimeError(f"unhandled {bert_size=}")
|
||||
|
||||
if (bert_layers:=getenv("BERT_LAYERS")): ret["num_hidden_layers"] = bert_layers
|
||||
return ret
|
||||
|
||||
def get_mlperf_bert_model():
|
||||
from extra.models import bert
|
||||
from examples.mlperf.initializers import LinearBert, EmbeddingBert, LayerNormBert
|
||||
|
||||
@@ -220,21 +219,79 @@ def get_mlperf_bert_model(checkpoint_path:Optional[str]=None):
|
||||
config = get_mlperf_bert_config()
|
||||
if getenv("DISABLE_DROPOUT", 0):
|
||||
config["hidden_dropout_prob"] = config["attention_probs_dropout_prob"] = 0.0
|
||||
model = BertForPretraining(**config)
|
||||
return model.load_from_pretrained(checkpoint_path) if checkpoint_path else model
|
||||
return BertForPretraining(**config)
|
||||
|
||||
def get_data_bert(GPUS:list[str], it):
|
||||
data: dict[str, Tensor] = next(it)
|
||||
for key in data.keys(): data[key].shard_(GPUS, axis=0)
|
||||
return data
|
||||
|
||||
def get_fake_data_bert(GPUS:list[str], BS:int):
|
||||
def get_fake_data_bert(BS:int):
|
||||
return {
|
||||
"input_ids": Tensor.empty((BS, 512), dtype=dtypes.float32).contiguous().shard_(GPUS, axis=0),
|
||||
"input_mask": Tensor.empty((BS, 512), dtype=dtypes.default_float).contiguous().shard_(GPUS, axis=0),
|
||||
"segment_ids": Tensor.empty((BS, 512), dtype=dtypes.float32).contiguous().shard_(GPUS, axis=0),
|
||||
"masked_lm_positions": Tensor.empty((BS, 76), dtype=dtypes.float32).contiguous().shard_(GPUS, axis=0),
|
||||
"masked_lm_ids": Tensor.empty((BS, 76), dtype=dtypes.float32).contiguous().shard_(GPUS, axis=0),
|
||||
"masked_lm_weights": Tensor.empty((BS, 76), dtype=dtypes.float32).contiguous().shard_(GPUS, axis=0),
|
||||
"next_sentence_labels": Tensor.empty((BS, 1), dtype=dtypes.float32).contiguous().shard_(GPUS, axis=0),
|
||||
"input_ids": Tensor.empty((BS, 512), dtype=dtypes.int32, device="CPU"),
|
||||
"input_mask": Tensor.empty((BS, 512), dtype=dtypes.int32, device="CPU"),
|
||||
"segment_ids": Tensor.empty((BS, 512), dtype=dtypes.int32, device="CPU"),
|
||||
"masked_lm_positions": Tensor.empty((BS, 76), dtype=dtypes.int32, device="CPU"),
|
||||
"masked_lm_ids": Tensor.empty((BS, 76), dtype=dtypes.int32, device="CPU"),
|
||||
"masked_lm_weights": Tensor.empty((BS, 76), dtype=dtypes.float32, device="CPU"),
|
||||
"next_sentence_labels": Tensor.empty((BS, 1), dtype=dtypes.int32, device="CPU"),
|
||||
}
|
||||
|
||||
def find_matches(match_quality_matrix:np.ndarray, high_threshold:float=0.5, low_threshold:float=0.4, allow_low_quality_matches:bool=False) -> np.ndarray:
|
||||
BELOW_LOW_THRESHOLD, BETWEEN_THRESHOLDS = -1, -2
|
||||
|
||||
def _set_low_quality_matches_(matches:np.ndarray, all_matches:np.ndarray, match_quality_matrix:np.ndarray):
|
||||
highest_quality_foreach_gt = np.max(match_quality_matrix, axis=1)
|
||||
pred_inds_to_update = np.nonzero(match_quality_matrix == highest_quality_foreach_gt[:, None])[1]
|
||||
matches[pred_inds_to_update] = all_matches[pred_inds_to_update]
|
||||
|
||||
assert low_threshold <= high_threshold
|
||||
|
||||
matched_vals, matches = match_quality_matrix.max(axis=0), match_quality_matrix.argmax(axis=0)
|
||||
all_matches = np.copy(matches) if allow_low_quality_matches else None
|
||||
below_low_threshold = matched_vals < low_threshold
|
||||
between_thresholds = (matched_vals >= low_threshold) & (matched_vals < high_threshold)
|
||||
matches[below_low_threshold] = BELOW_LOW_THRESHOLD
|
||||
matches[between_thresholds] = BETWEEN_THRESHOLDS
|
||||
|
||||
if allow_low_quality_matches:
|
||||
assert all_matches is not None
|
||||
_set_low_quality_matches_(matches, all_matches, match_quality_matrix)
|
||||
|
||||
return matches
|
||||
|
||||
def box_iou(boxes1:np.ndarray, boxes2:np.ndarray) -> np.ndarray:
|
||||
def _box_area(boxes:np.ndarray) -> np.ndarray: return (boxes[:, 2] - boxes[:, 0]) * (boxes[:, 3] - boxes[:, 1])
|
||||
|
||||
def _box_inter_union(boxes1:np.ndarray, boxes2:np.ndarray) -> tuple[np.ndarray, np.ndarray]:
|
||||
area1, area2 = _box_area(boxes1), _box_area(boxes2)
|
||||
lt, rb = np.maximum(boxes1[:, None, :2], boxes2[:, :2]), np.minimum(boxes1[:, None, 2:], boxes2[:, 2:])
|
||||
wh = np.clip(rb - lt, a_min=0, a_max=None)
|
||||
inter = wh[:, :, 0] * wh[:, :, 1]
|
||||
union = area1[:, None] + area2 - inter
|
||||
return inter, union
|
||||
|
||||
inter, union = _box_inter_union(boxes1, boxes2)
|
||||
return inter / union
|
||||
|
||||
def generate_anchors(input_size:tuple[int, int], scales:Optional[tuple[Tensor, ...]]=None, aspect_ratios:Optional[tuple[Tensor, ...]]=None) -> list[np.ndarray]:
|
||||
def _compute_grid_sizes(input_size:tuple[int, int]) -> np.ndarray:
|
||||
return np.ceil(np.array(input_size)[None, :] / 2 ** np.arange(3, 8)[:, None])
|
||||
|
||||
scales = tuple((i, int(i * 2 ** (1/3)), int(i * 2 ** (2/3))) for i in 2 ** np.arange(5, 10)) if scales is None else scales
|
||||
aspect_ratios = ((0.5, 1.0, 2.0),) * len(scales) if aspect_ratios is None else aspect_ratios
|
||||
aspect_ratios = tuple(ar for ar in aspect_ratios)
|
||||
grid_sizes = _compute_grid_sizes(input_size)
|
||||
|
||||
assert len(scales) == len(aspect_ratios) == len(grid_sizes), "scales, aspect_ratios, and grid_sizes must have the same length"
|
||||
|
||||
anchors = []
|
||||
for s, ar, gs in zip(scales, aspect_ratios, grid_sizes):
|
||||
s, ar = np.array(s), np.array(ar)
|
||||
h_ratios = np.sqrt(ar)
|
||||
w_ratios = 1 / h_ratios
|
||||
ws = (w_ratios[:, None] * s[None, :]).reshape(-1)
|
||||
hs = (h_ratios[:, None] * s[None, :]).reshape(-1)
|
||||
base_anchors = (np.stack([-ws, -hs, ws, hs], axis=1) / 2).round()
|
||||
stride_h, stride_w = input_size[0] // gs[0], input_size[1] // gs[1]
|
||||
shifts_x, shifts_y = np.meshgrid(np.arange(gs[1]) * stride_w, np.arange(gs[0]) * stride_h)
|
||||
shifts_x, shifts_y = shifts_x.reshape(-1), shifts_y.reshape(-1)
|
||||
shifts = np.stack([shifts_x, shifts_y, shifts_x, shifts_y], axis=1, dtype=np.float32)
|
||||
anchors.append((shifts[:, None] + base_anchors[None, :]).reshape(-1, 4))
|
||||
|
||||
return anchors
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import math
|
||||
from typing import Union, Tuple
|
||||
from typing import Union
|
||||
|
||||
from tinygrad import Tensor, nn, dtypes
|
||||
from tinygrad.helpers import prod, argfix
|
||||
@@ -53,10 +53,10 @@ class EmbeddingBert(nn.Embedding):
|
||||
arange_shp, weight_shp, big_shp = (1, 1, self.vocab_sz, 1), (1, 1, self.vocab_sz, self.embed_sz), idx.shape+(self.vocab_sz, self.embed_sz,)
|
||||
if not hasattr(self, 'arange'): self.arange = Tensor.arange(self.vocab_sz, requires_grad=False, device=self.weight.device).reshape(arange_shp)
|
||||
arange, idx, vals = self.arange.expand(big_shp), idx.reshape(idx.shape+(1, 1,)).expand(big_shp), self.weight.cast(dtypes.default_float).reshape(weight_shp).expand(big_shp)
|
||||
return (arange == idx).mul(vals).sum(2, acc_dtype=vals.dtype)
|
||||
return (arange == idx).mul(vals).sum(2, dtype=vals.dtype)
|
||||
|
||||
class LayerNormBert:
|
||||
def __init__(self, normalized_shape:Union[int, Tuple[int, ...]], eps:float=1e-12, elementwise_affine:bool=True):
|
||||
def __init__(self, normalized_shape:Union[int, tuple[int, ...]], eps:float=1e-12, elementwise_affine:bool=True):
|
||||
self.normalized_shape = (normalized_shape,) if isinstance(normalized_shape, int) else tuple(normalized_shape)
|
||||
self.axis, self.eps, self.elementwise_affine = tuple(-1-i for i in range(len(self.normalized_shape))), eps, elementwise_affine
|
||||
self.weight, self.bias = (Tensor.ones(*self.normalized_shape, dtype=dtypes.float32), Tensor.zeros(*self.normalized_shape, dtype=dtypes.float32)) if elementwise_affine else (None, None)
|
||||
|
||||
@@ -1,6 +1,29 @@
|
||||
from examples.mlperf.metrics import dice_score
|
||||
from tinygrad import Tensor
|
||||
|
||||
def dice_ce_loss(pred, tgt):
|
||||
ce = pred.permute(0, 2, 3, 4, 1).sparse_categorical_crossentropy(tgt.squeeze(1))
|
||||
dice = (1.0 - dice_score(pred, tgt, argmax=False, to_one_hot_x=False)).mean()
|
||||
return (dice + ce) / 2
|
||||
|
||||
def sigmoid_focal_loss(pred:Tensor, tgt:Tensor, alpha:float=0.25, gamma:float=2.0, reduction:str="none") -> Tensor:
|
||||
assert reduction in ["mean", "sum", "none"], f"unsupported reduction {reduction}"
|
||||
p, ce_loss = pred.sigmoid(), pred.binary_crossentropy_logits(tgt, reduction="none")
|
||||
p_t = p * tgt + (1 - p) * (1 - tgt)
|
||||
loss = ce_loss * ((1 - p_t) ** gamma)
|
||||
|
||||
if alpha >= 0:
|
||||
alpha_t = alpha * tgt + (1 - alpha) * (1 - tgt)
|
||||
loss = loss * alpha_t
|
||||
|
||||
if reduction == "mean": loss = loss.mean()
|
||||
elif reduction == "sum": loss = loss.sum()
|
||||
return loss
|
||||
|
||||
def l1_loss(pred:Tensor, tgt:Tensor, reduction:str="none") -> Tensor:
|
||||
assert reduction in ["mean", "sum", "none"], f"unsupported reduction {reduction}"
|
||||
loss = (pred - tgt).abs()
|
||||
|
||||
if reduction == "mean": loss = loss.mean()
|
||||
elif reduction == "sum": loss = loss.sum()
|
||||
return loss
|
||||
@@ -273,7 +273,7 @@ def train_resnet():
|
||||
else:
|
||||
it = iter(tqdm(batch_load_resnet(batch_size=EVAL_BS, val=True, shuffle=False, pad_first_batch=True), total=steps_in_val_epoch))
|
||||
i, proc = 0, data_get(it)
|
||||
|
||||
|
||||
prev_cookies = []
|
||||
while proc is not None:
|
||||
GlobalCounters.reset()
|
||||
@@ -446,7 +446,7 @@ def train_unet3d():
|
||||
loss.backward()
|
||||
optim.step()
|
||||
return loss.realize()
|
||||
|
||||
|
||||
@Tensor.train(mode=False)
|
||||
@Tensor.test()
|
||||
def eval_step(model, x, y):
|
||||
@@ -455,7 +455,7 @@ def train_unet3d():
|
||||
loss = dice_ce_loss(y_hat, y)
|
||||
score = dice_score(y_hat, y)
|
||||
return loss.realize(), score.realize()
|
||||
|
||||
|
||||
if WANDB: wandb.init(config=config, project=PROJ_NAME)
|
||||
|
||||
step_times, start_epoch = [], 1
|
||||
@@ -464,7 +464,7 @@ def train_unet3d():
|
||||
next_eval_at = start_eval_at
|
||||
|
||||
print(f"Training on {GPUS}")
|
||||
|
||||
|
||||
if BENCHMARK: print("Benchmarking UNet3D")
|
||||
else: print(f"Start evaluation at epoch {start_eval_at} and every {evaluate_every} epoch(s) afterwards")
|
||||
|
||||
@@ -573,7 +573,10 @@ def train_rnnt():
|
||||
|
||||
@TinyJit
|
||||
def train_step_bert(model, optimizer, scheduler, loss_scaler:float, input_ids:Tensor, segment_ids:Tensor, attention_mask:Tensor,
|
||||
masked_positions:Tensor, masked_lm_ids:Tensor, masked_lm_weights:Tensor, next_sentence_labels:Tensor):
|
||||
masked_positions:Tensor, masked_lm_ids:Tensor, masked_lm_weights:Tensor, next_sentence_labels:Tensor, GPUS):
|
||||
for t in [input_ids, segment_ids, attention_mask, masked_positions, masked_lm_ids, masked_lm_weights, next_sentence_labels]:
|
||||
if len(GPUS) > 1: t.shard_(GPUS, axis=0)
|
||||
else: t.to_(GPUS[0])
|
||||
optimizer.zero_grad()
|
||||
|
||||
lm_logits, seq_relationship_logits = model(input_ids, attention_mask, masked_positions, segment_ids)
|
||||
@@ -581,7 +584,7 @@ def train_step_bert(model, optimizer, scheduler, loss_scaler:float, input_ids:Te
|
||||
(loss * loss_scaler).backward()
|
||||
|
||||
global_norm = Tensor([0.0], dtype=dtypes.float32, device=optimizer[0].device).realize()
|
||||
for p in optimizer.params:
|
||||
for p in optimizer.params:
|
||||
p.grad = p.grad / loss_scaler
|
||||
global_norm += p.grad.float().square().sum()
|
||||
global_norm = global_norm.sqrt()
|
||||
@@ -589,20 +592,28 @@ def train_step_bert(model, optimizer, scheduler, loss_scaler:float, input_ids:Te
|
||||
|
||||
optimizer.step()
|
||||
scheduler.step()
|
||||
return loss.realize(), global_norm.realize()
|
||||
# TODO: no to("CPU") here because it blocks and messes the python time
|
||||
Tensor.realize(loss, global_norm, optimizer.optimizers[0].lr)
|
||||
return loss, global_norm, optimizer.optimizers[0].lr
|
||||
|
||||
@TinyJit
|
||||
def eval_step_bert(model, input_ids:Tensor, segment_ids:Tensor, attention_mask:Tensor, masked_positions:Tensor, masked_lm_ids:Tensor,
|
||||
masked_lm_weights:Tensor, next_sentence_labels:Tensor):
|
||||
masked_lm_weights:Tensor, next_sentence_labels:Tensor, GPUS):
|
||||
for t in [input_ids, segment_ids, attention_mask, masked_positions, masked_lm_ids, masked_lm_weights, next_sentence_labels]:
|
||||
if len(GPUS) > 1: t.shard_(GPUS, axis=0)
|
||||
else: t.to_(GPUS[0])
|
||||
lm_logits, seq_relationship_logits = model(input_ids, attention_mask, masked_positions, segment_ids)
|
||||
masked_lm_accuracy, seq_relationship_accuracy, masked_lm_loss, next_sentence_loss = \
|
||||
model.accuracy(lm_logits, seq_relationship_logits, masked_lm_ids, masked_lm_weights, next_sentence_labels)
|
||||
return masked_lm_accuracy.realize(), seq_relationship_accuracy.realize(), masked_lm_loss.realize(), next_sentence_loss.realize()
|
||||
for t in [masked_lm_accuracy, seq_relationship_accuracy, masked_lm_loss, next_sentence_loss]:
|
||||
t.to_("CPU")
|
||||
Tensor.realize(masked_lm_accuracy, seq_relationship_accuracy, masked_lm_loss, next_sentence_loss)
|
||||
return masked_lm_accuracy, seq_relationship_accuracy, masked_lm_loss, next_sentence_loss
|
||||
|
||||
def train_bert():
|
||||
# NOTE: pip install tensorflow, wandb required
|
||||
from examples.mlperf.dataloader import batch_load_train_bert, batch_load_val_bert
|
||||
from examples.mlperf.helpers import get_mlperf_bert_model, get_data_bert, get_fake_data_bert
|
||||
from examples.mlperf.helpers import get_mlperf_bert_model, get_fake_data_bert
|
||||
from examples.mlperf.lr_schedulers import PolynomialDecayWithWarmup
|
||||
|
||||
config = {}
|
||||
@@ -647,9 +658,9 @@ def train_bert():
|
||||
# ** hyperparameters **
|
||||
BS = config["GLOBAL_BATCH_SIZE"] = getenv("BS", 11 * len(GPUS) if dtypes.default_float in (dtypes.float16, dtypes.bfloat16) else 8 * len(GPUS))
|
||||
EVAL_BS = config["EVAL_BS"] = getenv("EVAL_BS", 1 * len(GPUS))
|
||||
max_lr = config["OPT_BASE_LEARNING_RATE"] = getenv("OPT_BASE_LEARNING_RATE", 0.0001 * math.sqrt(BS/66))
|
||||
max_lr = config["OPT_BASE_LEARNING_RATE"] = getenv("OPT_BASE_LEARNING_RATE", 0.000175 * math.sqrt(BS/96))
|
||||
|
||||
train_steps = config["TRAIN_STEPS"] = getenv("TRAIN_STEPS", 3630000 // BS)
|
||||
train_steps = config["TRAIN_STEPS"] = getenv("TRAIN_STEPS", 3300000 // BS)
|
||||
warmup_steps = config["NUM_WARMUP_STEPS"] = getenv("NUM_WARMUP_STEPS", 1)
|
||||
max_eval_steps = config["MAX_EVAL_STEPS"] = getenv("MAX_EVAL_STEPS", (10000 + EVAL_BS - 1) // EVAL_BS) # EVAL_BS * MAX_EVAL_STEPS >= 10000
|
||||
eval_step_freq = config["EVAL_STEP_FREQ"] = getenv("EVAL_STEP_FREQ", int((math.floor(0.05 * (230.23 * BS + 3000000) / 25000) * 25000) / BS)) # Round down
|
||||
@@ -658,7 +669,7 @@ def train_bert():
|
||||
save_ckpt_dir = config["SAVE_CKPT_DIR"] = getenv("SAVE_CKPT_DIR", "./ckpts")
|
||||
init_ckpt = config["INIT_CKPT_DIR"] = getenv("INIT_CKPT_DIR", BASEDIR)
|
||||
|
||||
loss_scaler = config["LOSS_SCALER"] = getenv("LOSS_SCALER", 2.0**10 if dtypes.default_float == dtypes.float16 else 1.0)
|
||||
loss_scaler = config["LOSS_SCALER"] = getenv("LOSS_SCALER", 2.0**11 if dtypes.default_float == dtypes.float16 else 1.0)
|
||||
decay = config["DECAY"] = getenv("DECAY", 0.01)
|
||||
epsilon = config["EPSILON"] = getenv("EPSILON", 1e-6)
|
||||
poly_power = config["POLY_POWER"] = getenv("POLY_POWER", 1.0)
|
||||
@@ -683,11 +694,18 @@ def train_bert():
|
||||
|
||||
# ** init model **
|
||||
|
||||
model = get_mlperf_bert_model(init_ckpt if RUNMLPERF else None)
|
||||
|
||||
model = get_mlperf_bert_model()
|
||||
if RUNMLPERF:
|
||||
model.load_from_pretrained(init_ckpt)
|
||||
else:
|
||||
# for init, zero out all weights
|
||||
for p in get_parameters(model):
|
||||
p = p.assign(Tensor.zeros_like(p).contiguous()).realize()
|
||||
|
||||
parameters = get_parameters(model)
|
||||
for p in parameters:
|
||||
p.to_(GPUS)
|
||||
if len(GPUS) > 1:
|
||||
for p in parameters:
|
||||
p.to_(GPUS)
|
||||
|
||||
# ** Log run config **
|
||||
for key, value in config.items(): print(f'HParam: "{key}": {value}')
|
||||
@@ -741,70 +759,74 @@ def train_bert():
|
||||
eval_it = iter(batch_load_val_bert(EVAL_BS))
|
||||
train_it = iter(tqdm(batch_load_train_bert(BS), total=train_steps, disable=BENCHMARK))
|
||||
for _ in range(start_step): next(train_it) # Fast forward
|
||||
|
||||
else:
|
||||
# repeat fake data
|
||||
def repeat_fake(bs):
|
||||
while True: yield get_fake_data_bert(bs)
|
||||
eval_it = iter(repeat_fake(EVAL_BS))
|
||||
train_it = iter(repeat_fake(BS))
|
||||
|
||||
step_times = []
|
||||
# ** train loop **
|
||||
wc_start = time.perf_counter()
|
||||
|
||||
i, train_data = start_step, next(train_it)
|
||||
|
||||
if RUNMLPERF:
|
||||
# only load real data with RUNMLPERF
|
||||
i, train_data = start_step, get_data_bert(GPUS, train_it)
|
||||
if MLLOGGER:
|
||||
MLLOGGER.start(key=mllog_constants.EPOCH_START, value=i*BS, metadata={"epoch_num": i*BS})
|
||||
else:
|
||||
i, train_data = start_step, get_fake_data_bert(GPUS, BS)
|
||||
|
||||
while train_data is not None and i < train_steps and not achieved:
|
||||
Tensor.training = True
|
||||
BEAM.value = TRAIN_BEAM
|
||||
st = time.perf_counter()
|
||||
GlobalCounters.reset()
|
||||
loss, global_norm = train_step_bert(model, optimizer_group, scheduler_group, loss_scaler,
|
||||
train_data["input_ids"], train_data["segment_ids"], train_data["input_mask"], train_data["masked_lm_positions"], \
|
||||
train_data["masked_lm_ids"], train_data["masked_lm_weights"], train_data["next_sentence_labels"])
|
||||
if getenv("TRAIN", 1):
|
||||
Tensor.training = True
|
||||
BEAM.value = TRAIN_BEAM
|
||||
st = time.perf_counter()
|
||||
GlobalCounters.reset()
|
||||
loss, global_norm, lr = train_step_bert(model, optimizer_group, scheduler_group, loss_scaler,
|
||||
train_data["input_ids"], train_data["segment_ids"], train_data["input_mask"], train_data["masked_lm_positions"], \
|
||||
train_data["masked_lm_ids"], train_data["masked_lm_weights"], train_data["next_sentence_labels"], GPUS)
|
||||
|
||||
pt = time.perf_counter()
|
||||
pt = time.perf_counter()
|
||||
|
||||
try:
|
||||
if RUNMLPERF:
|
||||
next_data = get_data_bert(GPUS, train_it)
|
||||
else:
|
||||
next_data = get_fake_data_bert(GPUS, BS)
|
||||
except StopIteration:
|
||||
next_data = None
|
||||
try:
|
||||
next_data = next(train_it)
|
||||
except StopIteration:
|
||||
next_data = None
|
||||
|
||||
dt = time.perf_counter()
|
||||
dt = time.perf_counter()
|
||||
|
||||
device_str = loss.device if isinstance(loss.device, str) else f"{loss.device[0]} * {len(loss.device)}"
|
||||
loss = loss.item()
|
||||
device_str = parameters[0].device if isinstance(parameters[0].device, str) else f"{parameters[0].device[0]} * {len(parameters[0].device)}"
|
||||
loss = loss.item()
|
||||
lr = lr.item()
|
||||
|
||||
cl = time.perf_counter()
|
||||
if BENCHMARK: step_times.append(cl - st)
|
||||
cl = time.perf_counter()
|
||||
if BENCHMARK: step_times.append(cl - st)
|
||||
|
||||
tqdm.write(
|
||||
f"{i:5} {((cl - st)) * 1000.0:7.2f} ms run, {(pt - st) * 1000.0:7.2f} ms python, {(dt - pt) * 1000.0:6.2f} ms fetch data, "
|
||||
f"{(cl - dt) * 1000.0:7.2f} ms {device_str}, {loss:5.2f} loss, {optimizer_wd.lr.numpy()[0]:.6f} LR, "
|
||||
f"{GlobalCounters.mem_used / 1e9:.2f} GB used, {GlobalCounters.global_ops * 1e-9 / (cl - st):9.2f} GFLOPS")
|
||||
if WANDB:
|
||||
wandb.log({"lr": optimizer_wd.lr.numpy(), "train/loss": loss, "train/global_norm": global_norm.item(), "train/step_time": cl - st,
|
||||
"train/python_time": pt - st, "train/data_time": dt - pt, "train/cl_time": cl - dt,
|
||||
"train/GFLOPS": GlobalCounters.global_ops * 1e-9 / (cl - st), "epoch": (i+1)*BS})
|
||||
tqdm.write(
|
||||
f"{i:5} {((cl - st)) * 1000.0:7.2f} ms run, {(pt - st) * 1000.0:7.2f} ms python, {(dt - pt) * 1000.0:6.2f} ms fetch data, "
|
||||
f"{(cl - dt) * 1000.0:7.2f} ms {device_str}, {loss:5.2f} loss, {lr:.6f} LR, "
|
||||
f"{GlobalCounters.mem_used / 1e9:.2f} GB used, {GlobalCounters.global_ops * 1e-9 / (cl - st):9.2f} GFLOPS")
|
||||
if WANDB:
|
||||
wandb.log({"lr": lr, "train/loss": loss, "train/global_norm": global_norm.item(), "train/step_time": cl - st,
|
||||
"train/python_time": pt - st, "train/data_time": dt - pt, "train/cl_time": cl - dt,
|
||||
"train/GFLOPS": GlobalCounters.global_ops * 1e-9 / (cl - st), "epoch": (i+1)*BS})
|
||||
|
||||
train_data, next_data = next_data, None
|
||||
i += 1
|
||||
train_data, next_data = next_data, None
|
||||
i += 1
|
||||
|
||||
if i == BENCHMARK:
|
||||
median_step_time = sorted(step_times)[(BENCHMARK + 1) // 2] # in seconds
|
||||
estimated_total_minutes = int(median_step_time * train_steps / 60)
|
||||
print(f"Estimated training time: {estimated_total_minutes // 60}h{estimated_total_minutes % 60}m")
|
||||
print(f"epoch global_ops: {train_steps * GlobalCounters.global_ops:_}, "
|
||||
f"epoch global_mem: {train_steps * GlobalCounters.global_mem:_}")
|
||||
if i == BENCHMARK:
|
||||
median_step_time = sorted(step_times)[(BENCHMARK + 1) // 2] # in seconds
|
||||
estimated_total_minutes = int(median_step_time * train_steps / 60)
|
||||
print(f"Estimated training time: {estimated_total_minutes // 60}h{estimated_total_minutes % 60}m")
|
||||
print(f"epoch global_ops: {train_steps * GlobalCounters.global_ops:_}, "
|
||||
f"epoch global_mem: {train_steps * GlobalCounters.global_mem:_}")
|
||||
|
||||
# ** eval loop **
|
||||
if i % eval_step_freq == 0 or (BENCHMARK and i == BENCHMARK):
|
||||
if i % eval_step_freq == 0 or (BENCHMARK and i == BENCHMARK) or i == train_steps:
|
||||
if MLLOGGER and RUNMLPERF:
|
||||
MLLOGGER.start(key=mllog_constants.EVAL_START, value=None, metadata={"epoch_num": i*BS, "step_num": i})
|
||||
if getenv("RESET_STEP", 1): train_step_bert.reset()
|
||||
if getenv("RESET_STEP", 0): train_step_bert.reset()
|
||||
elif train_step_bert.captured is not None: train_step_bert.captured.free_intermediates()
|
||||
eval_lm_losses = []
|
||||
eval_clsf_losses = []
|
||||
eval_lm_accs = []
|
||||
@@ -814,16 +836,13 @@ def train_bert():
|
||||
BEAM.value = EVAL_BEAM
|
||||
|
||||
for j in tqdm(range(max_eval_steps), desc="Evaluating", total=max_eval_steps, disable=BENCHMARK):
|
||||
if RUNMLPERF:
|
||||
eval_data = get_data_bert(GPUS, eval_it)
|
||||
else:
|
||||
eval_data = get_fake_data_bert(GPUS, EVAL_BS)
|
||||
eval_data = next(eval_it)
|
||||
GlobalCounters.reset()
|
||||
st = time.time()
|
||||
|
||||
lm_acc, clsf_acc, lm_loss, clsf_loss = eval_step_bert(model,
|
||||
eval_data["input_ids"], eval_data["segment_ids"], eval_data["input_mask"], eval_data["masked_lm_positions"],
|
||||
eval_data["masked_lm_ids"], eval_data["masked_lm_weights"], eval_data["next_sentence_labels"])
|
||||
eval_data["masked_lm_ids"], eval_data["masked_lm_weights"], eval_data["next_sentence_labels"], GPUS)
|
||||
lm_acc, clsf_acc, lm_loss, clsf_loss = lm_acc.item(), clsf_acc.item(), lm_loss.item(), clsf_loss.item()
|
||||
|
||||
eval_lm_losses.append(lm_loss)
|
||||
@@ -840,7 +859,8 @@ def train_bert():
|
||||
MLLOGGER.event(key=mllog_constants.INIT_STOP, value=None)
|
||||
return
|
||||
|
||||
if getenv("RESET_STEP", 1): eval_step_bert.reset()
|
||||
if getenv("RESET_STEP", 0): eval_step_bert.reset()
|
||||
elif eval_step_bert.captured is not None: eval_step_bert.captured.free_intermediates()
|
||||
del eval_data
|
||||
avg_lm_loss = sum(eval_lm_losses) / len(eval_lm_losses)
|
||||
avg_clsf_loss = sum(eval_clsf_losses) / len(eval_clsf_losses)
|
||||
|
||||
+3
-4
@@ -2,13 +2,12 @@
|
||||
|
||||
export PYTHONPATH="."
|
||||
export MODEL="bert"
|
||||
export DEFAULT_FLOAT="HALF" GPUS=6 BS=66 EVAL_BS=36
|
||||
export DEFAULT_FLOAT="HALF" SUM_DTYPE="HALF" GPUS=6 BS=96 EVAL_BS=24
|
||||
|
||||
export BEAM=4 BEAM_UOPS_MAX=2000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024
|
||||
export BEAM=4 BEAM_UOPS_MAX=4000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
|
||||
export IGNORE_JIT_FIRST_BEAM=1
|
||||
export BEAM_LOG_SURPASS_MAX=1
|
||||
export BASEDIR="/raid/datasets/wiki"
|
||||
# TODO: remove DISABLE_DROPOUT=1
|
||||
export DISABLE_DROPOUT=1
|
||||
|
||||
export BENCHMARK=10 DEBUG=2
|
||||
|
||||
|
||||
+2
-4
@@ -2,13 +2,11 @@
|
||||
|
||||
export PYTHONPATH="."
|
||||
export MODEL="bert"
|
||||
export DEFAULT_FLOAT="HALF" GPUS=6 BS=66 EVAL_BS=36
|
||||
export DEFAULT_FLOAT="HALF" SUM_DTYPE="HALF" GPUS=6 BS=96 EVAL_BS=24
|
||||
|
||||
export BEAM=4 BEAM_UOPS_MAX=2000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024
|
||||
export BEAM=4 BEAM_UOPS_MAX=4000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
|
||||
export IGNORE_JIT_FIRST_BEAM=1
|
||||
export BASEDIR="/raid/datasets/wiki"
|
||||
# TODO: remove DISABLE_DROPOUT=1
|
||||
export DISABLE_DROPOUT=1
|
||||
|
||||
export WANDB=1 PARALLEL=0
|
||||
|
||||
|
||||
+3
-5
@@ -3,13 +3,11 @@
|
||||
export PYTHONPATH="."
|
||||
export MODEL="bert"
|
||||
export SUBMISSION_PLATFORM="tinybox_green"
|
||||
export DEFAULT_FLOAT="HALF" GPUS=6 BS=66 EVAL_BS=36
|
||||
export DEFAULT_FLOAT="HALF" SUM_DTYPE="HALF" GPUS=6 BS=96 EVAL_BS=24
|
||||
|
||||
export BEAM=4 BEAM_UOPS_MAX=2000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024
|
||||
export BEAM=4 BEAM_UOPS_MAX=4000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
|
||||
export IGNORE_JIT_FIRST_BEAM=1
|
||||
export BASEDIR="/raid/datasets/wiki"
|
||||
# TODO: remove DISABLE_DROPOUT=1
|
||||
export DISABLE_DROPOUT=1
|
||||
|
||||
# pip install -e ".[mlperf]"
|
||||
export LOGMLPERF=1
|
||||
@@ -19,7 +17,7 @@ DATETIME=$(date "+%m%d%H%M")
|
||||
LOGFILE="bert_green_${DATETIME}_${SEED}.log"
|
||||
|
||||
# init
|
||||
BENCHMARK=10 INITMLPERF=1 python3 examples/mlperf/model_train.py | tee $LOGFILE
|
||||
BENCHMARK=10 INITMLPERF=1 BEAM_LOG_SURPASS_MAX=1 python3 examples/mlperf/model_train.py | tee $LOGFILE
|
||||
|
||||
# run
|
||||
PARALLEL=0 RUNMLPERF=1 python3 examples/mlperf/model_train.py | tee -a $LOGFILE
|
||||
|
||||
+4
-4
@@ -2,14 +2,14 @@
|
||||
|
||||
export PYTHONPATH="."
|
||||
export MODEL="bert"
|
||||
export DEFAULT_FLOAT="HALF" GPUS=6 BS=66 EVAL_BS=36
|
||||
export DEFAULT_FLOAT="HALF" SUM_DTYPE="HALF" GPUS=6 BS=96 EVAL_BS=96
|
||||
|
||||
export BEAM=3 BEAM_UOPS_MAX=3000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024
|
||||
export BEAM=3 BEAM_UOPS_MAX=4000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
|
||||
export IGNORE_JIT_FIRST_BEAM=1
|
||||
export BEAM_LOG_SURPASS_MAX=1
|
||||
export BASEDIR="/raid/datasets/wiki"
|
||||
# TODO: remove DISABLE_DROPOUT=1
|
||||
export DISABLE_DROPOUT=1
|
||||
|
||||
export RESET_STEP=1
|
||||
export BENCHMARK=10 DEBUG=2
|
||||
|
||||
python3 examples/mlperf/model_train.py
|
||||
|
||||
+2
-4
@@ -2,13 +2,11 @@
|
||||
|
||||
export PYTHONPATH="."
|
||||
export MODEL="bert"
|
||||
export DEFAULT_FLOAT="HALF" GPUS=6 BS=66 EVAL_BS=36
|
||||
export DEFAULT_FLOAT="HALF" SUM_DTYPE="HALF" GPUS=6 BS=96 EVAL_BS=96
|
||||
|
||||
export BEAM=3 BEAM_UOPS_MAX=3000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024
|
||||
export BEAM=3 BEAM_UOPS_MAX=4000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
|
||||
export IGNORE_JIT_FIRST_BEAM=1
|
||||
export BASEDIR="/raid/datasets/wiki"
|
||||
# TODO: remove DISABLE_DROPOUT=1
|
||||
export DISABLE_DROPOUT=1
|
||||
|
||||
export WANDB=1 PARALLEL=0
|
||||
|
||||
|
||||
+7
-5
@@ -3,13 +3,11 @@
|
||||
export PYTHONPATH="."
|
||||
export MODEL="bert"
|
||||
export SUBMISSION_PLATFORM="tinybox_red"
|
||||
export DEFAULT_FLOAT="HALF" GPUS=6 BS=66 EVAL_BS=36
|
||||
export DEFAULT_FLOAT="HALF" SUM_DTYPE="HALF" GPUS=6 BS=96 EVAL_BS=96
|
||||
|
||||
export BEAM=3 BEAM_UOPS_MAX=3000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024
|
||||
export BEAM=3 BEAM_UOPS_MAX=4000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
|
||||
export IGNORE_JIT_FIRST_BEAM=1
|
||||
export BASEDIR="/raid/datasets/wiki"
|
||||
# TODO: remove DISABLE_DROPOUT=1
|
||||
export DISABLE_DROPOUT=1
|
||||
|
||||
# pip install -e ".[mlperf]"
|
||||
export LOGMLPERF=1
|
||||
@@ -19,7 +17,11 @@ DATETIME=$(date "+%m%d%H%M")
|
||||
LOGFILE="bert_red_${DATETIME}_${SEED}.log"
|
||||
|
||||
# init
|
||||
BENCHMARK=10 INITMLPERF=1 python3 examples/mlperf/model_train.py | tee $LOGFILE
|
||||
sudo rmmod amdgpu || true
|
||||
BENCHMARK=10 INITMLPERF=1 BEAM_LOG_SURPASS_MAX=1 python3 examples/mlperf/model_train.py | tee $LOGFILE
|
||||
|
||||
# run
|
||||
# TODO: AMD driver hangs during init, but is 5% faster per step in real run.
|
||||
sudo modprobe amdgpu
|
||||
PARALLEL=0 RUNMLPERF=1 python3 examples/mlperf/model_train.py | tee -a $LOGFILE
|
||||
sudo rmmod amdgpu || true
|
||||
@@ -16,9 +16,9 @@ class LinearGen:
|
||||
self.l4 = Tensor.scaled_uniform(1024, 784)
|
||||
|
||||
def forward(self, x):
|
||||
x = x.dot(self.l1).leakyrelu(0.2)
|
||||
x = x.dot(self.l2).leakyrelu(0.2)
|
||||
x = x.dot(self.l3).leakyrelu(0.2)
|
||||
x = x.dot(self.l1).leaky_relu(0.2)
|
||||
x = x.dot(self.l2).leaky_relu(0.2)
|
||||
x = x.dot(self.l3).leaky_relu(0.2)
|
||||
x = x.dot(self.l4).tanh()
|
||||
return x
|
||||
|
||||
@@ -31,9 +31,9 @@ class LinearDisc:
|
||||
|
||||
def forward(self, x):
|
||||
# balance the discriminator inputs with const bias (.add(1))
|
||||
x = x.dot(self.l1).add(1).leakyrelu(0.2).dropout(0.3)
|
||||
x = x.dot(self.l2).leakyrelu(0.2).dropout(0.3)
|
||||
x = x.dot(self.l3).leakyrelu(0.2).dropout(0.3)
|
||||
x = x.dot(self.l1).add(1).leaky_relu(0.2).dropout(0.3)
|
||||
x = x.dot(self.l2).leaky_relu(0.2).dropout(0.3)
|
||||
x = x.dot(self.l3).leaky_relu(0.2).dropout(0.3)
|
||||
x = x.dot(self.l4).log_softmax()
|
||||
return x
|
||||
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
# https://arxiv.org/pdf/2409.02060
|
||||
import time
|
||||
import numpy as np
|
||||
np.set_printoptions(suppress=True, linewidth=1000)
|
||||
import functools
|
||||
from tinygrad import Tensor, nn, Device, GlobalCounters
|
||||
from tinygrad.helpers import Timing, getenv
|
||||
from extra.models.llama import Transformer, convert_from_huggingface
|
||||
|
||||
class MixtureFeedForward:
|
||||
def __init__(self, num_experts:int, activated_experts:int, dim:int, hidden_dim:int, linear=nn.Linear):
|
||||
self.activated_experts = activated_experts
|
||||
self.gate = nn.Linear(dim, num_experts, bias=False)
|
||||
self.up_proj = Tensor.zeros(num_experts, hidden_dim, dim, dtype='bfloat16')
|
||||
self.down_proj = Tensor.zeros(num_experts, dim, hidden_dim, dtype='bfloat16')
|
||||
self.gate_proj = Tensor.zeros(num_experts, hidden_dim, dim, dtype='bfloat16')
|
||||
def __call__(self, x:Tensor) -> Tensor:
|
||||
assert x.shape[0] == 1, "only BS=1"
|
||||
assert x.shape[1] == 1, "only length=1"
|
||||
g = self.gate(x).float().softmax(-1)
|
||||
|
||||
g = g.squeeze() # (BS, length, num_experts) -> (num_experts,)
|
||||
probs, sel = g.topk(self.activated_experts)
|
||||
|
||||
# run MoE
|
||||
x_up_gate = x.dot(self.gate_proj[sel].permute(0,2,1)).silu() * x.dot(self.up_proj[sel].permute(0,2,1))
|
||||
x_down = x_up_gate.dot(self.down_proj[sel].permute(0,2,1))
|
||||
return (x_down.float() * probs.reshape(self.activated_experts, 1, 1)).sum(axis=0)
|
||||
|
||||
# model is bf16, 1.3B active, 6.9B total
|
||||
# M3 Max is 400 GB/s, so 400/2.6 = ~154 tok/s
|
||||
|
||||
def fetch_weights() -> dict[str, Tensor]:
|
||||
# TODO: make this lazy so the 3 fetches can happen in parallel
|
||||
m1 = Tensor.from_url("https://huggingface.co/allenai/OLMoE-1B-7B-0924/resolve/main/model-00001-of-00003.safetensors").to(Device.DEFAULT)
|
||||
m2 = Tensor.from_url("https://huggingface.co/allenai/OLMoE-1B-7B-0924/resolve/main/model-00002-of-00003.safetensors").to(Device.DEFAULT)
|
||||
m3 = Tensor.from_url("https://huggingface.co/allenai/OLMoE-1B-7B-0924/resolve/main/model-00003-of-00003.safetensors").to(Device.DEFAULT)
|
||||
return {**nn.state.safe_load(m1), **nn.state.safe_load(m2), **nn.state.safe_load(m3)}
|
||||
|
||||
if __name__ == "__main__":
|
||||
if getenv("TORCH"):
|
||||
from transformers import OlmoeForCausalLM, AutoTokenizer
|
||||
model = OlmoeForCausalLM.from_pretrained("allenai/OLMoE-1B-7B-0924")
|
||||
tokenizer = AutoTokenizer.from_pretrained("allenai/OLMoE-1B-7B-0924")
|
||||
inputs = tokenizer("Hello", return_tensors="pt")
|
||||
generate_ids = model.generate(inputs.input_ids, max_length=30)
|
||||
out = tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
|
||||
print(out)
|
||||
exit(0)
|
||||
|
||||
with Timing("create model: "):
|
||||
model = Transformer(n_layers=16, dim=2048, hidden_dim=1024, n_heads=16, norm_eps=1e-5, qk_norm=1e-5, max_context=1024,
|
||||
vocab_size=50304, feed_forward=functools.partial(MixtureFeedForward, 64, 8))
|
||||
model_state_dict = nn.state.get_state_dict(model)
|
||||
del model_state_dict['freqs_cis']
|
||||
|
||||
with Timing("load weights to GPU: "):
|
||||
nhf_state = convert_from_huggingface(fetch_weights(), model, 16, 16)
|
||||
# NOTE: i'm not sure this actually needs float32, it may just change the type of things downstream from it. but doesn't match torch w/o this
|
||||
for needs_float32 in ['tok_embeddings.weight']: nhf_state[needs_float32] = nhf_state[needs_float32].float()
|
||||
print(f"ram used: {GlobalCounters.mem_used/1e9:.2f} GB")
|
||||
|
||||
with Timing("unpack weights: "):
|
||||
nn.state.load_state_dict(model, nhf_state, verbose=False, strict=False, consume=True, realize=False)
|
||||
assert len(nhf_state) == 0
|
||||
Tensor.realize(*list(nn.state.get_state_dict(model).values()))
|
||||
print(f"ram used: {GlobalCounters.mem_used/1e9:.2f} GB")
|
||||
|
||||
count = 30
|
||||
temperature = 0
|
||||
|
||||
with Timing("load tokenizer: "):
|
||||
from transformers import AutoTokenizer
|
||||
tokenizer = AutoTokenizer.from_pretrained("allenai/OLMoE-1B-7B-0924")
|
||||
|
||||
toks = [12092]
|
||||
start_pos = 0
|
||||
timings = []
|
||||
for i in range(count):
|
||||
GlobalCounters.reset()
|
||||
st = time.perf_counter()
|
||||
tok = model(Tensor([toks[start_pos:]]), start_pos, temperature).item()
|
||||
timings.append(time.perf_counter()-st)
|
||||
toks.append(tok)
|
||||
start_pos += 1
|
||||
print(toks)
|
||||
print(tokenizer.decode(toks))
|
||||
print(f"fastest token {min(timings)*1e3:.2f} ms, {1/min(timings):.1f} tok/s")
|
||||
|
||||
if temperature == 0:
|
||||
# Hello, I am a newbie to this forum and I am trying to get a better understanding of the different types of data that can be stored in a
|
||||
assert toks == [12092, 13, 309, 717, 247, 747, 17782, 281, 436, 12209, 285, 309, 717, 2820, 281, 755,
|
||||
247, 1805, 4685, 273, 253, 1027, 3510, 273, 941, 326, 476, 320, 7141, 275, 247], "BAD OUTPUT!"
|
||||
|
||||
@@ -12,7 +12,7 @@ from tinygrad.engine.realize import CompiledRunner
|
||||
|
||||
import onnx
|
||||
from onnx.helper import tensor_dtype_to_np_dtype
|
||||
from extra.onnx import OnnxRunner # TODO: port to main tinygrad
|
||||
from tinygrad.frontend.onnx import OnnxRunner
|
||||
|
||||
OPENPILOT_MODEL = sys.argv[1] if len(sys.argv) > 1 else "https://github.com/commaai/openpilot/raw/v0.9.7/selfdrive/modeld/models/supercombo.onnx"
|
||||
OUTPUT = sys.argv[2] if len(sys.argv) > 2 else "/tmp/openpilot.pkl"
|
||||
@@ -92,32 +92,44 @@ def test_vs_compile(run, new_inputs, test_val=None):
|
||||
print("**** test done ****")
|
||||
|
||||
# test that changing the numpy changes the model outputs
|
||||
for v in new_inputs_numpy.values(): v *= 2
|
||||
out = run(**inputs)
|
||||
changed_val = out.numpy()
|
||||
np.testing.assert_raises(AssertionError, np.testing.assert_array_equal, val, changed_val)
|
||||
if any([x.device == 'NPY' for x in inputs.values()]):
|
||||
for v in new_inputs_numpy.values(): v *= 2
|
||||
out = run(**inputs)
|
||||
changed_val = out.numpy()
|
||||
np.testing.assert_raises(AssertionError, np.testing.assert_array_equal, val, changed_val)
|
||||
return val
|
||||
|
||||
def test_vs_onnx(new_inputs, test_val, onnx_file):
|
||||
def test_vs_onnx(new_inputs, test_val, onnx_file, ort=False):
|
||||
new_inputs_numpy = {k:v.numpy() for k,v in new_inputs.items()}
|
||||
onnx_model = onnx.load(onnx_file)
|
||||
|
||||
if getenv("ORT"):
|
||||
timings = []
|
||||
if ort:
|
||||
# test with onnxruntime
|
||||
import onnxruntime as ort
|
||||
onnx_session = ort.InferenceSession(onnx_file)
|
||||
onnx_output = onnx_session.run([onnx_model.graph.output[0].name], {k:v.astype(np.float16) for k,v in new_inputs_numpy.items()})
|
||||
for _ in range(1 if test_val is not None else 5):
|
||||
st = time.perf_counter()
|
||||
onnx_output = onnx_session.run([onnx_model.graph.output[0].name], {k:v.astype(np.float16) for k,v in new_inputs_numpy.items()})
|
||||
timings.append(time.perf_counter() - st)
|
||||
new_torch_out = onnx_output[0]
|
||||
print("got ort outputs")
|
||||
else:
|
||||
# test with torch
|
||||
from test.models.test_onnx import run_onnx_torch
|
||||
# NOTE: we have to correct the order here
|
||||
new_torch_out = run_onnx_torch(onnx_model, {k.name:new_inputs_numpy[k.name] for k in onnx_model.graph.input}).numpy()
|
||||
print("got torch outputs")
|
||||
import torch
|
||||
from onnx2torch import convert
|
||||
inputs = {k.name:new_inputs_numpy[k.name] for k in onnx_model.graph.input}
|
||||
torch_model = convert(onnx_model).float()
|
||||
with torch.no_grad():
|
||||
for _ in range(1 if test_val is not None else 5):
|
||||
st = time.perf_counter()
|
||||
torch_out = torch_model(*[torch.tensor(x) for x in inputs.values()])
|
||||
timings.append(time.perf_counter() - st)
|
||||
new_torch_out = torch_out.numpy()
|
||||
|
||||
np.testing.assert_allclose(new_torch_out.reshape(test_val.shape), test_val, atol=1e-4, rtol=1e-2)
|
||||
print("test vs onnx passed")
|
||||
if test_val is not None:
|
||||
np.testing.assert_allclose(new_torch_out.reshape(test_val.shape), test_val, atol=1e-4, rtol=1e-2)
|
||||
print("test vs onnx passed")
|
||||
return timings
|
||||
|
||||
if __name__ == "__main__":
|
||||
onnx_file = fetch(OPENPILOT_MODEL)
|
||||
@@ -131,4 +143,12 @@ if __name__ == "__main__":
|
||||
sorted(zip(pickle_loaded.captured.expected_names, pickle_loaded.captured.expected_st_vars_dtype_device))}
|
||||
|
||||
test_val = test_vs_compile(pickle_loaded, new_inputs, test_val)
|
||||
if not getenv("FLOAT16"): test_vs_onnx(new_inputs, test_val, onnx_file)
|
||||
if getenv("BENCHMARK"):
|
||||
for be in ["torch", "ort"]:
|
||||
try:
|
||||
timings = test_vs_onnx(new_inputs, None, onnx_file, be=="ort")
|
||||
print(f"timing {be}: {min(timings)*1000:.2f} ms")
|
||||
except Exception as e:
|
||||
print(f"{be} fail with {e}")
|
||||
if not getenv("FLOAT16"): test_vs_onnx(new_inputs, test_val, onnx_file, getenv("ORT"))
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from tinygrad import dtypes
|
||||
from tinygrad.helpers import trange
|
||||
from tinygrad import dtypes, getenv, Device
|
||||
from tinygrad.helpers import trange, colored, DEBUG, temp
|
||||
from tinygrad.nn.datasets import mnist
|
||||
import torch
|
||||
from torch import nn, optim
|
||||
@@ -26,14 +26,20 @@ class Model(nn.Module):
|
||||
return self.lin(torch.flatten(x, 1))
|
||||
|
||||
if __name__ == "__main__":
|
||||
mps_device = torch.device("mps")
|
||||
if getenv("TINY_BACKEND"):
|
||||
import tinygrad.frontend.torch
|
||||
device = torch.device("tiny")
|
||||
else:
|
||||
device = torch.device({"METAL":"mps","NV":"cuda"}.get(Device.DEFAULT, "cpu"))
|
||||
if DEBUG >= 1: print(f"using torch backend {device}")
|
||||
X_train, Y_train, X_test, Y_test = mnist()
|
||||
X_train = torch.tensor(X_train.float().numpy(), device=mps_device)
|
||||
Y_train = torch.tensor(Y_train.cast(dtypes.int64).numpy(), device=mps_device)
|
||||
X_test = torch.tensor(X_test.float().numpy(), device=mps_device)
|
||||
Y_test = torch.tensor(Y_test.cast(dtypes.int64).numpy(), device=mps_device)
|
||||
X_train = torch.tensor(X_train.float().numpy(), device=device)
|
||||
Y_train = torch.tensor(Y_train.cast(dtypes.int64).numpy(), device=device)
|
||||
X_test = torch.tensor(X_test.float().numpy(), device=device)
|
||||
Y_test = torch.tensor(Y_test.cast(dtypes.int64).numpy(), device=device)
|
||||
|
||||
model = Model().to(mps_device)
|
||||
if getenv("TORCHVIZ"): torch.cuda.memory._record_memory_history()
|
||||
model = Model().to(device)
|
||||
optimizer = optim.Adam(model.parameters(), 1e-3)
|
||||
|
||||
loss_fn = nn.CrossEntropyLoss()
|
||||
@@ -53,3 +59,11 @@ if __name__ == "__main__":
|
||||
loss = step(samples)
|
||||
if i%10 == 9: test_acc = ((model(X_test).argmax(axis=-1) == Y_test).sum() * 100 / X_test.shape[0]).item()
|
||||
t.set_description(f"loss: {loss.item():6.2f} test_accuracy: {test_acc:5.2f}%")
|
||||
|
||||
# verify eval acc
|
||||
if target := getenv("TARGET_EVAL_ACC_PCT", 0.0):
|
||||
if test_acc >= target and test_acc != 100.0: print(colored(f"{test_acc=} >= {target}", "green"))
|
||||
else: raise ValueError(colored(f"{test_acc=} < {target}", "red"))
|
||||
if getenv("TORCHVIZ"):
|
||||
torch.cuda.memory._dump_snapshot(fp:=temp("torchviz.pkl", append_user=True))
|
||||
print(f"saved torch memory snapshot to {fp}, view in https://pytorch.org/memory_viz")
|
||||
|
||||
@@ -437,14 +437,14 @@ class Generator:
|
||||
x = self.conv_pre(x)
|
||||
if g is not None: x = x + self.cond(g)
|
||||
for i in range(self.num_upsamples):
|
||||
x, xs = self.ups[i](x.leakyrelu(LRELU_SLOPE)), None
|
||||
x, xs = self.ups[i](x.leaky_relu(LRELU_SLOPE)), None
|
||||
x_source = self.noise_convs[i](har_source)
|
||||
x = x + x_source
|
||||
for j in range(self.num_kernels):
|
||||
if xs is None: xs = self.resblocks[i * self.num_kernels + j].forward(x)
|
||||
else: xs += self.resblocks[i * self.num_kernels + j].forward(x)
|
||||
x = xs / self.num_kernels
|
||||
return self.conv_post(x.leakyrelu()).tanh()
|
||||
return self.conv_post(x.leaky_relu()).tanh()
|
||||
|
||||
# **** helpers ****
|
||||
|
||||
@@ -504,7 +504,7 @@ def load_checkpoint_enc(checkpoint_path, model: ContentVec, optimizer=None, skip
|
||||
obj, v = getattr(parent, "weight"), weight_norm(weight_v, weight_g, 0)
|
||||
weight_g, weight_v, parent, skip = None, None, None, False
|
||||
if not skip and obj.shape == v.shape:
|
||||
if "feature_extractor" in key and (isinstance(parent, nn.GroupNorm) or isinstance(parent, nn.LayerNorm)): # cast
|
||||
if "feature_extractor" in key and (isinstance(parent, (nn.GroupNorm, nn.LayerNorm))): # cast
|
||||
obj.assign(v.to(obj.device).float())
|
||||
else:
|
||||
obj.assign(v.to(obj.device))
|
||||
|
||||
@@ -3,7 +3,7 @@ import numpy as np
|
||||
from extra.datasets.imagenet import get_imagenet_categories, get_val_files, center_crop
|
||||
from examples.benchmark_onnx import load_onnx_model
|
||||
from PIL import Image
|
||||
from tinygrad import Tensor, dtypes
|
||||
from tinygrad import Tensor, dtypes, GlobalCounters
|
||||
from tinygrad.helpers import fetch, getenv
|
||||
|
||||
# works:
|
||||
@@ -19,6 +19,7 @@ from tinygrad.helpers import fetch, getenv
|
||||
|
||||
# QUANT=1 python3 examples/test_onnx_imagenet.py
|
||||
# https://github.com/xamcat/mobcat-samples/raw/refs/heads/master/onnx_runtime/InferencingSample/InferencingSample/mobilenetv2-7.onnx
|
||||
# DONT_REALIZE_EXPAND=1 python3 examples/test_onnx_imagenet.py /tmp/model.quant.onnx
|
||||
# VIZ=1 DONT_REALIZE_EXPAND=1 python3 examples/benchmark_onnx.py /tmp/model.quant.onnx
|
||||
|
||||
def imagenet_dataloader(cnt=0):
|
||||
@@ -57,17 +58,24 @@ if __name__ == "__main__":
|
||||
return None
|
||||
return {"input": img.numpy()}
|
||||
quantize_static(model_fp32, fn, ImagenetReader(), quant_format=QuantFormat.QDQ, per_channel=False,
|
||||
activation_type=QuantType.QInt8, weight_type=QuantType.QInt8,
|
||||
extra_options={"ActivationSymmetric": True})
|
||||
activation_type=QuantType.QUInt8, weight_type=QuantType.QUInt8,
|
||||
extra_options={"ActivationSymmetric": False})
|
||||
|
||||
run_onnx_jit, input_specs = load_onnx_model(fn)
|
||||
run_onnx_jit, input_specs = load_onnx_model(fetch(fn))
|
||||
t_name, t_spec = list(input_specs.items())[0]
|
||||
assert t_spec.shape[1:] == (3,224,224), f"shape is {t_spec.shape}"
|
||||
|
||||
hit = 0
|
||||
for i,(img,y) in enumerate(imagenet_dataloader(cnt=100)):
|
||||
for i,(img,y) in enumerate(imagenet_dataloader(cnt=getenv("CNT", 100))):
|
||||
GlobalCounters.reset()
|
||||
p = run_onnx_jit(**{t_name:img})
|
||||
assert p.shape == (1,1000)
|
||||
t = p.argmax().item()
|
||||
t = p.to('cpu').argmax().item()
|
||||
hit += y==t
|
||||
print(f"target: {y:3d} pred: {t:3d} acc: {hit/(i+1)*100:.2f}%")
|
||||
|
||||
MS_TARGET = 13.4
|
||||
print(f"need {GlobalCounters.global_ops/1e9*(1000/MS_TARGET):.2f} GFLOPS for {MS_TARGET:.2f} ms")
|
||||
|
||||
import pickle
|
||||
with open("/tmp/im.pkl", "wb") as f: pickle.dump(run_onnx_jit, f)
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
import sys, pickle
|
||||
from tinygrad import GlobalCounters
|
||||
from tinygrad.helpers import fetch, getenv
|
||||
from examples.test_onnx_imagenet import imagenet_dataloader
|
||||
|
||||
if __name__ == "__main__":
|
||||
with open(fetch(sys.argv[1]), "rb") as f:
|
||||
run_onnx_jit = pickle.load(f)
|
||||
input_name = run_onnx_jit.captured.expected_names[0]
|
||||
device = run_onnx_jit.captured.expected_st_vars_dtype_device[0][-1]
|
||||
print(f"input goes into {input_name=} on {device=}")
|
||||
hit = 0
|
||||
for i,(img,y) in enumerate(imagenet_dataloader(cnt=getenv("CNT", 100))):
|
||||
GlobalCounters.reset()
|
||||
p = run_onnx_jit(**{input_name:img.to(device)})
|
||||
assert p.shape == (1,1000)
|
||||
t = p.argmax().item()
|
||||
hit += y==t
|
||||
print(f"target: {y:3d} pred: {t:3d} acc: {hit/(i+1)*100:.2f}%")
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
/*!
|
||||
Pure v3.0.0
|
||||
Copyright 2013 Yahoo!
|
||||
Licensed under the BSD License.
|
||||
https://github.com/pure-css/pure/blob/master/LICENSE
|
||||
*/
|
||||
/*!
|
||||
normalize.css v | MIT License | https://necolas.github.io/normalize.css/
|
||||
Copyright (c) Nicolas Gallagher and Jonathan Neal
|
||||
*/
|
||||
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html{font-family:sans-serif}.hidden,[hidden]{display:none!important}.pure-img{max-width:100%;height:auto;display:block}
|
||||
@@ -0,0 +1,5 @@
|
||||
net_*
|
||||
llama3-2.tiktoken
|
||||
tiktoken.js
|
||||
tiktoken_bg.wasm
|
||||
transformer*
|
||||
@@ -0,0 +1,8 @@
|
||||
# How to build and run tinychat in browser (WebGPU and WASM)
|
||||
- `PYTHONPATH=. python examples/tinychat/tinychat-browser/compile.py`
|
||||
- `./examples/tinychat/tinychat-browser/compile_wasm.sh`
|
||||
- Prerequisite: [install emscripten](https://emscripten.org/docs/getting_started/downloads.html). This script looks for `~/emsdk/emsdk_env.sh`, adjust this based on your installation.
|
||||
- `./examples/tinychat/tinychat-browser/make_tiktoken_js.sh`
|
||||
- Prerequisite: install `npm`, `webpack`.
|
||||
- `cd examples/tinychat && python -m http.server 7776`
|
||||
- In browser: open either `localhost:7776/tinychat-browser` (WebGPU), or `localhost:7776/tinychat-browser/?backend=wasm` (WASM)
|
||||
@@ -0,0 +1,149 @@
|
||||
import os, json, hashlib, math
|
||||
from extra.export_model import export_model
|
||||
from examples.llama3 import build_transformer, Tokenizer
|
||||
from tinygrad.nn.state import get_state_dict, load_state_dict
|
||||
from tinygrad import Device, Variable, Tensor, dtypes, TinyJit
|
||||
from tinygrad.helpers import fetch, Context
|
||||
from tiktoken.load import load_tiktoken_bpe, dump_tiktoken_bpe
|
||||
|
||||
def prepare_browser_chunks(model):
|
||||
# split weights into browser-friendly chunks
|
||||
state_dict = get_state_dict(model)
|
||||
del state_dict['output.weight'], state_dict['output.scale'] # same as tok_embeddings; ensures consistency with model export
|
||||
chunk_size = 16 * 1024 * 1024 # small chunks based on iphone browser constraints
|
||||
metadata = {}
|
||||
# We won't export cache_kv bytes (because we start inference on client at start_pos=0), but we will tell the client how big cache_kv needs to be
|
||||
t_infos = [(v.lazydata.base.realized.nbytes, k, v.dtype) for k,v in state_dict.items() if "cache_kv" not in k]
|
||||
empty_t_infos = [(v.lazydata.base.realized.nbytes, k, v.dtype) for k,v in state_dict.items() if "cache_kv" in k]
|
||||
|
||||
split_t_infos = []
|
||||
for size, name, dtype in t_infos:
|
||||
if size <= chunk_size:
|
||||
split_t_infos.append((size, name, dtype, ()))
|
||||
else: # split large weights into multiple parts
|
||||
for i in range(0, size, chunk_size):
|
||||
split_t_infos.append((min(chunk_size, size-i), f"{name}_part{math.ceil(i/chunk_size)}", dtype, (i, min(i+chunk_size, size))))
|
||||
|
||||
files = []
|
||||
# pack weights into files with FFD bin packing
|
||||
split_t_infos = sorted(split_t_infos, reverse=True)
|
||||
for info in split_t_infos:
|
||||
placed = False
|
||||
for file in files:
|
||||
if sum(i[0] for i in file) + info[0] <= chunk_size:
|
||||
if info[3] and any(i[3] for i in file): continue # no two split tensors can touch the same file, due to wasm loading constraints
|
||||
file.append(info)
|
||||
placed = True
|
||||
break
|
||||
if not placed:
|
||||
files.append([info])
|
||||
|
||||
tinygrad_dtypes = {dtypes.float32: "float32", dtypes.float16: "float16", dtypes.int8: "int8", dtypes.int32: "int32"}
|
||||
for i, file in enumerate(files):
|
||||
cursor = 0
|
||||
with open(os.path.join(os.path.dirname(__file__), f'./net_part{i}.chunk'), "wb+") as writer:
|
||||
for size, name, dtype, offsets in file:
|
||||
name, part_num = (name, 0) if "_part" not in name else (name.split("_part")[0], int(name.split("_part")[1]))
|
||||
default = {"parts": {}, "dtype": tinygrad_dtypes[dtype]}
|
||||
weight_metadata = metadata.get(name, default)
|
||||
weight_metadata["parts"][part_num] = {"file": i, "file_start_pos": cursor, "size": size}
|
||||
metadata[name] = weight_metadata
|
||||
data = bytes(state_dict[name].lazydata.base.realized.as_buffer())
|
||||
data = data if not offsets else data[offsets[0]:offsets[1]]
|
||||
writer.write(data)
|
||||
cursor += size
|
||||
|
||||
metadata.update({name: {"parts": {0: {"empty": True, "size": size}}, "dtype": tinygrad_dtypes[dtype]} for size, name, dtype in empty_t_infos})
|
||||
|
||||
for k in metadata:
|
||||
metadata[k]["parts"] = [part for part_num, part in sorted(metadata[k]["parts"].items(), key = lambda x: x[0])]
|
||||
cursor = 0
|
||||
for i, part in enumerate(metadata[k]["parts"]):
|
||||
metadata[k]["parts"][i]["target_start_pos"] = cursor
|
||||
cursor += part["size"]
|
||||
metadata[k]["size"] = cursor
|
||||
|
||||
# compute hashes, which client app will check to determine whether to update with new weights and/or detect integrity issues
|
||||
state_dict_hash = hashlib.sha256(json.dumps(metadata, sort_keys=True).encode("utf-8")).hexdigest()
|
||||
metadata = {"state_dict": metadata, "state_dict_hash": state_dict_hash, "files": []}
|
||||
hashes = set()
|
||||
for i in range(len(files)):
|
||||
with open(os.path.join(os.path.dirname(__file__), f'./net_part{i}.chunk'), "rb") as reader:
|
||||
hash = hashlib.sha256(reader.read()).hexdigest()
|
||||
hashes.add(hash)
|
||||
metadata["files"].append({"name": f'net_part{i}.chunk', "hash": hash})
|
||||
if len(hashes) != len(files): print(f"WARNING: {len(files)} files were exported, but only {len(hashes)} are unique: something may have gone wrong")
|
||||
metadata_hash = hashlib.sha256(json.dumps(metadata, sort_keys=True).encode("utf-8")).hexdigest()
|
||||
metadata = {"metadata": metadata, "metadata_hash": metadata_hash}
|
||||
|
||||
with open(os.path.join(os.path.dirname(__file__), f'./net_metadata.json'), "w") as writer: json.dump(metadata, writer, indent=4)
|
||||
return metadata
|
||||
|
||||
def validate_model(model, tokenizer):
|
||||
prompt = "yo"
|
||||
toks = [tokenizer.bos_id]
|
||||
toks += [tokenizer.special_tokens["<|start_header_id|>"]] + tokenizer.encode("user") + [tokenizer.special_tokens["<|end_header_id|>"]] + tokenizer.encode("\n\n")
|
||||
toks += tokenizer.encode(prompt) + [tokenizer.special_tokens["<|eot_id|>"]]
|
||||
toks += [tokenizer.special_tokens["<|start_header_id|>"]] + tokenizer.encode("assistant") + [tokenizer.special_tokens["<|end_header_id|>"]] + tokenizer.encode("\n\n")
|
||||
start_pos = 0
|
||||
run = TinyJit(model.forward)
|
||||
for tok in toks[:-1]:
|
||||
run(Tensor([[tok]]), Variable("start_pos", 0, model.max_context).bind(start_pos), 0.0, 0, 0.0, 0.0, 0.0).realize()
|
||||
start_pos += 1
|
||||
tok = toks[-1]
|
||||
result = ""
|
||||
expected = "How's it going?"
|
||||
while True:
|
||||
tok = run(Tensor([[tok]]), Variable("start_pos", 0, model.max_context).bind(start_pos), 0.0, 0, 0.0, 0.0, 0.0).item()
|
||||
start_pos += 1
|
||||
if tok in tokenizer.stop_tokens or len(result) > len(expected): break
|
||||
result += tokenizer.decode([tok])
|
||||
assert result == expected, f"Model validation failed, expected output: {expected}, actual output: {result}"
|
||||
|
||||
if __name__=="__main__":
|
||||
# Export BPE data for use with tiktoken.js
|
||||
tokenizer_path = fetch("https://huggingface.co/bofenghuang/Meta-Llama-3-8B/resolve/main/original/tokenizer.model", "tokenizer.model", subdir="llama3-1b-instruct")
|
||||
mergeable_ranks = load_tiktoken_bpe(str(tokenizer_path))
|
||||
bpe_path = os.path.join(os.path.dirname(__file__), "llama3-2.tiktoken")
|
||||
dump_tiktoken_bpe(mergeable_ranks, bpe_path)
|
||||
tokenizer = Tokenizer(str(tokenizer_path))
|
||||
|
||||
model_path = fetch("https://huggingface.co/bartowski/Llama-3.2-1B-Instruct-GGUF/resolve/main/Llama-3.2-1B-Instruct-f16.gguf", "Llama-3.2-1B-Instruct-f16.gguf", subdir="llama3-1b-instruct")
|
||||
Tensor.no_grad = True
|
||||
max_context=1024
|
||||
tok = 128000
|
||||
TEMPERATURE, TOP_K, TOP_P, ALPHA_F, ALPHA_P = 0.95, 0, 0.0, 0.0, 0.0
|
||||
start_pos = Variable("start_pos", 0, max_context).bind(0)
|
||||
model_input = lambda: [Tensor([[tok]]), start_pos, TEMPERATURE, TOP_K, TOP_P, ALPHA_F, ALPHA_P]
|
||||
|
||||
Device.DEFAULT="CPU"
|
||||
model = build_transformer(model_path, model_size="1B", quantize="int8", scale_dtype=dtypes.float32, device=Device.DEFAULT, max_context=max_context)
|
||||
state_dict = get_state_dict(model)
|
||||
validate_model(model, tokenizer)
|
||||
model_name = "transformer"
|
||||
|
||||
with Context(BEAM=3):
|
||||
cprog, js_wrapper = export_model(model, "wasm", *model_input(), model_name=model_name)
|
||||
# ensure consistency with exported weights
|
||||
js_wrapper = js_wrapper.replace("output.weight", "tok_embeddings.weight").replace("output.scale", "tok_embeddings.scale")
|
||||
|
||||
with open(os.path.join(os.path.dirname(__file__), f"{model_name}.c"), "w") as f: f.write(cprog)
|
||||
with open(os.path.join(os.path.dirname(__file__), "net_clang.js"), "w") as f: f.write(js_wrapper)
|
||||
|
||||
Device.DEFAULT="WEBGPU"
|
||||
# float16 is not yet supported for dawn/Vulkan/NVIDIA stack, see: https://issues.chromium.org/issues/42251215
|
||||
# therefore for now, we used CLANG to quantize the float16 llama to int8 with float32 scales, then load to WEBGPU
|
||||
model = build_transformer(model_path, model_size="1B", quantize="int8", max_context=max_context, load_weights=False)
|
||||
load_state_dict(model, state_dict)
|
||||
# these were the same before load_state_dict
|
||||
model.output.weight, model.output.scale = model.tok_embeddings.weight, model.tok_embeddings.scale
|
||||
|
||||
validate_model(model, tokenizer)
|
||||
metadata = prepare_browser_chunks(model) # export weights to disk
|
||||
|
||||
with Context(BEAM=3):
|
||||
prg, input_sizes, output_sizes, state = export_model(model, "webgpu", *model_input(), model_name=model_name, stream_weights=True)
|
||||
# ensure consistency with exported weights
|
||||
prg = prg.replace("output.weight", "tok_embeddings.weight").replace("output.scale", "tok_embeddings.scale")
|
||||
|
||||
with open(os.path.join(os.path.dirname(__file__), "net.js"), "w") as f: f.write(prg)
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env bash
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
# prereq: install emscripten: https://emscripten.org/docs/getting_started/downloads.html
|
||||
EMSCRIPTEN_PATH=~/emsdk/emsdk_env.sh
|
||||
source $EMSCRIPTEN_PATH
|
||||
step="transformer"
|
||||
initial_memory=6553600
|
||||
max_memory=1500053504
|
||||
exported_functions='["_net", "_malloc", "_free", "_set_buf"]'
|
||||
|
||||
emcc "${step}.c" \
|
||||
-O3 -msimd128 -ffast-math -flto \
|
||||
-o "${step}.js" \
|
||||
-s MODULARIZE=1 \
|
||||
-s EXPORT_ES6=1 \
|
||||
-s EXPORTED_FUNCTIONS="${exported_functions}" \
|
||||
-s ENVIRONMENT='worker' \
|
||||
-s FILESYSTEM=0 \
|
||||
-s EVAL_CTORS \
|
||||
-s ALLOW_MEMORY_GROWTH=1 \
|
||||
-s INITIAL_MEMORY="$initial_memory" \
|
||||
-s MAXIMUM_MEMORY="$max_memory"
|
||||
@@ -0,0 +1,322 @@
|
||||
/* define colors */
|
||||
:root {
|
||||
--primary-color: #fff;
|
||||
--secondary-color: #2a2a2a;
|
||||
--secondary-color-transparent: #ffffff66;
|
||||
--primary-bg-color: #1a1a1a;
|
||||
--foreground-color: #f0f0f0;
|
||||
}
|
||||
|
||||
main {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
place-items: center;
|
||||
}
|
||||
|
||||
.home {
|
||||
width: 100%;
|
||||
height: 90%;
|
||||
|
||||
margin-bottom: 10rem;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 3rem;
|
||||
margin: 1rem 0;
|
||||
margin-top: 3rem;
|
||||
}
|
||||
|
||||
.histories-container-container {
|
||||
width: 100%;
|
||||
max-height: 75%;
|
||||
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.histories-container {
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
align-items: center;
|
||||
|
||||
margin: 0;
|
||||
padding: 3rem 1rem;
|
||||
}
|
||||
|
||||
.histories-start {
|
||||
height: 3rem;
|
||||
width: 100%;
|
||||
|
||||
z-index: 999;
|
||||
top: 0;
|
||||
position: absolute;
|
||||
|
||||
background: linear-gradient(
|
||||
180deg,
|
||||
var(--primary-bg-color) 0%,
|
||||
transparent 100%
|
||||
);
|
||||
}
|
||||
.histories-end {
|
||||
height: 3rem;
|
||||
width: 100%;
|
||||
|
||||
z-index: 999;
|
||||
bottom: 0;
|
||||
position: absolute;
|
||||
|
||||
background: linear-gradient(
|
||||
0deg,
|
||||
var(--primary-bg-color) 0%,
|
||||
transparent 100%
|
||||
);
|
||||
}
|
||||
|
||||
.history {
|
||||
padding: 1rem;
|
||||
width: 100%;
|
||||
max-width: 40rem;
|
||||
|
||||
background-color: var(--secondary-color);
|
||||
border-radius: 10px;
|
||||
border-left: 2px solid var(--primary-color);
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
transform: translateX(calc(1px * var(--tx, 0)));
|
||||
opacity: var(--opacity, 1);
|
||||
}
|
||||
.history:hover {
|
||||
background-color: var(--secondary-color);
|
||||
}
|
||||
|
||||
.history-delete-button {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
padding: 0.5rem;
|
||||
margin: 0;
|
||||
outline: none;
|
||||
border: none;
|
||||
background-color: var(--secondary-color);
|
||||
color: var(--foreground-color);
|
||||
border-radius: 0 0 0 10px;
|
||||
cursor: pointer;
|
||||
transition: 0.2s;
|
||||
}
|
||||
.history-delete-button:hover {
|
||||
background-color: var(--secondary-color);
|
||||
padding: 0.75rem;
|
||||
}
|
||||
|
||||
.messages {
|
||||
overflow-y: auto;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
max-width: 1200px;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
align-items: center;
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 11rem;
|
||||
}
|
||||
|
||||
.message {
|
||||
max-width: 75%;
|
||||
padding: 0.5rem 1rem;
|
||||
border-radius: 20px;
|
||||
}
|
||||
.message-role-assistant {
|
||||
background-color: var(--secondary-color);
|
||||
margin-right: auto;
|
||||
color: #fff;
|
||||
}
|
||||
.message-role-user {
|
||||
margin-left: auto;
|
||||
background-color: var(--primary-color);
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.message > pre {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.hljs {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
border-radius: 10px;
|
||||
/* wrap code blocks */
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
/* put clipboard button in the top right corner of the code block */
|
||||
.clipboard-button {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
padding: 0.5rem;
|
||||
margin: 0;
|
||||
outline: none;
|
||||
border: none;
|
||||
background-color: var(--secondary-color);
|
||||
color: var(--foreground-color);
|
||||
border-radius: 0 0 0 10px;
|
||||
cursor: pointer;
|
||||
transition: 0.2s;
|
||||
}
|
||||
.clipboard-button:hover {
|
||||
background-color: var(--secondary-color);
|
||||
padding: 0.75rem;
|
||||
}
|
||||
|
||||
.input-container {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
|
||||
/* linear gradient from background-color to transparent on the top */
|
||||
background: linear-gradient(
|
||||
0deg,
|
||||
var(--primary-bg-color) 55%,
|
||||
transparent 100%
|
||||
);
|
||||
|
||||
width: 100%;
|
||||
max-width: 1200px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
.input-performance {
|
||||
margin-top: 4rem;
|
||||
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.input-performance-point {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
place-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
.input-performance-point > p {
|
||||
height: 1rem;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
.input {
|
||||
width: 90%;
|
||||
min-height: 3rem;
|
||||
flex-shrink: 0;
|
||||
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
gap: 0.5rem;
|
||||
|
||||
align-items: flex-end;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.input-form {
|
||||
width: 100%;
|
||||
padding: 1rem;
|
||||
min-height: 3rem;
|
||||
max-height: 8rem;
|
||||
|
||||
background-color: var(--secondary-color);
|
||||
color: var(--foreground-color);
|
||||
border-radius: 10px;
|
||||
border: none;
|
||||
resize: none;
|
||||
outline: none;
|
||||
}
|
||||
.mobile .input-form { /* prevent auto-zoom on touching prompt box */
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.input-button {
|
||||
height: 3rem;
|
||||
width: 4rem;
|
||||
|
||||
background-color: var(--primary-color);
|
||||
color: var(--secondary-color);
|
||||
border-radius: 10px;
|
||||
padding: 0.5rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
.input-button:hover {
|
||||
background-color: var(--secondary-color-transparent);
|
||||
}
|
||||
.input-button:disabled {
|
||||
background-color: var(--secondary-color);
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
/* wrap text */
|
||||
p {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
/* fonts */
|
||||
.megrim-regular {
|
||||
font-family: monospace;
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.monospace {
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
.loading-bar {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
width: 100%;
|
||||
min-height: 3rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.loading-text {
|
||||
color: var(--foreground-color);
|
||||
font-size: 1rem;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#progress-percentage {
|
||||
color: var(--foreground-color);
|
||||
font-size: 1rem;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.progress-bar {
|
||||
flex-grow: 1;
|
||||
height: 0.5rem;
|
||||
background-color: var(--secondary-color);
|
||||
border-radius: 5px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.progress {
|
||||
width: 0%;
|
||||
height: 100%;
|
||||
background-color: var(--primary-color);
|
||||
transition: width 0.2s ease-in-out;
|
||||
}
|
||||
@@ -0,0 +1,182 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<head>
|
||||
<title>tinychat</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="icon" href="../favicon.svg" type="image/svg+xml">
|
||||
|
||||
<script defer src="../assets/cdn.jsdelivr.net/npm/@alpine-collective/[email protected]/dist/cdn.min.js"></script>
|
||||
<script defer src="../assets/cdn.jsdelivr.net/npm/@alpinejs/[email protected]/dist/cdn.min.js"></script>
|
||||
<script defer src="../assets/cdn.jsdelivr.net/npm/@alpinejs/[email protected]/dist/cdn.min.js"></script>
|
||||
<script defer src="../assets/unpkg.com/@marcreichel/[email protected]/dist/alpine-autosize.min.js"></script>
|
||||
<script defer src="../assets/unpkg.com/[email protected]/dist/cdn.min.js"></script>
|
||||
|
||||
<script src="../assets/unpkg.com/[email protected]/dist/purify.min.js"></script>
|
||||
<script src="../assets/unpkg.com/[email protected]/marked.min.js"></script>
|
||||
<script src="../assets/unpkg.com/[email protected]/lib/index.umd.js"></script>
|
||||
<script src="../assets/unpkg.com/@highlightjs/[email protected]/highlight.min.js"></script>
|
||||
|
||||
<script src="index.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="../assets/cdn.jsdelivr.net/npm/[email protected]/build/base-min.css">
|
||||
<link rel="stylesheet" href="../assets/cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css"
|
||||
integrity="sha512-SnH5WK+bZxgPHs44uWIX+LLJAJ9/2PkPKZ5QiAj6Ta86w+fsb2TkcmfRyVX3pBnMFcV7oQPJkl9QevSCWr3W6A=="
|
||||
crossorigin="anonymous" referrerpolicy="no-referrer" />
|
||||
<link rel="stylesheet" href="../assets/unpkg.com/@highlightjs/[email protected]/styles/vs2015.min.css">
|
||||
|
||||
<link rel="stylesheet" href="index.css">
|
||||
<link rel="stylesheet" href="../common.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main x-data="state" x-init="console.log(endpoint)">
|
||||
<div class="home centered" x-show="home === 0" x-transition x-effect="
|
||||
$refs.inputForm.focus();
|
||||
if (home === 1) setTimeout(() => home = 2, 100);
|
||||
if (home === -1) setTimeout(() => home = 0, 100);
|
||||
" @popstate.window="
|
||||
if (home === 2) {
|
||||
cancelGeneration = true;
|
||||
if (maxContextReached) generating = false;
|
||||
if (!generating) cstate = { time: null, messages: [] };
|
||||
home = -1;
|
||||
time_till_first = 0;
|
||||
tokens_per_second = 0;
|
||||
total_tokens = 0;
|
||||
}
|
||||
">
|
||||
<h1 class="title megrim-regular">tinychat</h1>
|
||||
<div class="histories-container-container">
|
||||
<template x-if="histories.length">
|
||||
<div class="histories-start"></div>
|
||||
</template>
|
||||
<div class="histories-container" x-intersect="
|
||||
$el.scrollTo({ top: 0, behavior: 'smooth' });
|
||||
">
|
||||
<template x-for="_state in histories.toSorted((a, b) => b.time - a.time)">
|
||||
<div x-data="{ otx: 0, trigger: 75 }" class="history" @click="
|
||||
cstate = _state;
|
||||
updateTotalTokens(cstate.messages);
|
||||
home = 1;
|
||||
// ensure that going back in history will go back to home
|
||||
window.history.pushState({}, '', window.TINYCHAT_ROOT || '/');
|
||||
" @touchstart="
|
||||
otx = $event.changedTouches[0].clientX;
|
||||
" @touchmove="
|
||||
$el.style.setProperty('--tx', $event.changedTouches[0].clientX - otx);
|
||||
$el.style.setProperty('--opacity', 1 - (Math.abs($event.changedTouches[0].clientX - otx) / trigger));
|
||||
" @touchend="
|
||||
if (Math.abs($event.changedTouches[0].clientX - otx) > trigger) removeHistory(_state);
|
||||
$el.style.setProperty('--tx', 0);
|
||||
$el.style.setProperty('--opacity', 1);
|
||||
">
|
||||
<h3 x-text="new Date(_state.time).toLocaleString()"></h3>
|
||||
<p x-text="$truncate(_state.messages[0].content, 80)"></p>
|
||||
<!-- delete button -->
|
||||
<button class="history-delete-button" @click.stop="removeHistory(_state);">
|
||||
<i class=" fas fa-trash"></i>
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
<template x-if="histories.length">
|
||||
<div class="histories-end"></div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div x-ref="messages" class="messages" x-init="
|
||||
$watch('cstate', value => {
|
||||
$el.innerHTML = '';
|
||||
value.messages.forEach(({ role, content }) => {
|
||||
const div = document.createElement('div');
|
||||
div.className = `message message-role-${role}`;
|
||||
try {
|
||||
div.innerHTML = DOMPurify.sanitize(marked.parse(content));
|
||||
} catch (e) {
|
||||
console.log(content);
|
||||
console.error(e);
|
||||
}
|
||||
|
||||
// add a clipboard button to all code blocks
|
||||
const codeBlocks = div.querySelectorAll('.hljs');
|
||||
codeBlocks.forEach(codeBlock => {
|
||||
const button = document.createElement('button');
|
||||
button.className = 'clipboard-button';
|
||||
button.innerHTML = '<i class=\'fas fa-clipboard\'></i>';
|
||||
button.onclick = () => {
|
||||
// navigator.clipboard.writeText(codeBlock.textContent);
|
||||
const range = document.createRange();
|
||||
range.setStartBefore(codeBlock);
|
||||
range.setEndAfter(codeBlock);
|
||||
window.getSelection()?.removeAllRanges();
|
||||
window.getSelection()?.addRange(range);
|
||||
document.execCommand('copy');
|
||||
window.getSelection()?.removeAllRanges();
|
||||
|
||||
button.innerHTML = '<i class=\'fas fa-check\'></i>';
|
||||
setTimeout(() => button.innerHTML = '<i class=\'fas fa-clipboard\'></i>', 1000);
|
||||
};
|
||||
codeBlock.appendChild(button);
|
||||
});
|
||||
|
||||
$el.appendChild(div);
|
||||
});
|
||||
|
||||
$el.scrollTo({ top: $el.scrollHeight, behavior: 'smooth' });
|
||||
});
|
||||
" x-intersect="
|
||||
$el.scrollTo({ top: $el.scrollHeight, behavior: 'smooth' });
|
||||
" x-show="home === 2" x-transition>
|
||||
</div>
|
||||
<div class="input-container">
|
||||
<div class="input-performance">
|
||||
<span class="input-performance-point">
|
||||
<p class="monospace" x-text="(time_till_first / 1000).toFixed(2)"></p>
|
||||
<p class="megrim-regular">SEC TO FIRST TOKEN</p>
|
||||
</span>
|
||||
<span class="input-performance-point">
|
||||
<p class="monospace" x-text="tokens_per_second.toFixed(1)"></p>
|
||||
<p class="megrim-regular">TOKENS/SEC</p>
|
||||
</span>
|
||||
<span class="input-performance-point">
|
||||
<p class="monospace" x-text="total_tokens"></p>
|
||||
<p class="megrim-regular">TOKENS</p>
|
||||
</span>
|
||||
</div>
|
||||
<div class="loading-bar" x-show="loadingMessage !== ''">
|
||||
<p class="loading-text" id="loading-message">Loading:</p>
|
||||
<span id="progress-percentage">0%</span>
|
||||
<div class="progress-bar">
|
||||
<div class="progress"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input" x-show="loadingMessage === ''">
|
||||
<textarea x-ref="inputForm" id="input-form" class="input-form" autofocus rows=1 x-autosize
|
||||
:placeholder="generating ? placeholderText : 'Say something'" :disabled="generating" @input="
|
||||
home = (home === 0) ? 1 : home
|
||||
if (cstate.messages.length === 0 && $el.value === '') home = -1;
|
||||
|
||||
if ($el.value !== '') {
|
||||
const messages = [...cstate.messages];
|
||||
messages.push({ role: 'user', content: $el.value });
|
||||
updateTotalTokens(messages);
|
||||
} else {
|
||||
if (cstate.messages.length === 0) total_tokens = 0;
|
||||
else updateTotalTokens(cstate.messages);
|
||||
}
|
||||
" x-effect="
|
||||
console.log(generating);
|
||||
if (!generating) $nextTick(() => {
|
||||
$el.focus();
|
||||
setTimeout(() => $refs.messages.scrollTo({ top: $refs.messages.scrollHeight, behavior: 'smooth' }), 100);
|
||||
});
|
||||
" @keydown.enter="await handleEnter($event)" @keydown.escape.window="$focus.focus($el)"></textarea>
|
||||
<button class="input-button" :disabled="generating" @click="await handleSend()">
|
||||
<i class="fas" :class="generating ? 'fa-spinner fa-spin' : 'fa-paper-plane'"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,927 @@
|
||||
window.TINYCHAT_ROOT = "/tinychat-browser/";
|
||||
const queryParams = new URLSearchParams(window.location.search);
|
||||
const normalizedParams = Object.fromEntries([...queryParams].map(([key, value]) => [key.toUpperCase(), value.toUpperCase()]));
|
||||
window.BACKEND = (normalizedParams["BACKEND"] === "WASM") ? "WASM" : "WebGPU";
|
||||
const isMobileAgent = /Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
|
||||
const hasTouchScreen = 'ontouchstart' in window || navigator.maxTouchPoints > 0;
|
||||
window.isMobile = isMobileAgent || hasTouchScreen;
|
||||
if (window.isMobile) document.documentElement.classList.add('mobile'); // prevent annoying auto-zoom when entering prompt on mobile
|
||||
// MODEL_BASE_URL is where the weights are hosted, WEBGPU_EXPORT is the JS-wrapped WebGPU code exported from tinygrad
|
||||
window.PC_MODEL_BASE_URL = ".";
|
||||
window.PC_WEBGPU_EXPORT = './net.js'
|
||||
window.PC_MAX_CONTEXT = 1024;
|
||||
window.MOBILE_MODEL_BASE_URL = ".";
|
||||
window.MOBILE_WEBGPU_EXPORT = './net.js'
|
||||
window.MOBILE_MAX_CONTEXT = 1024;
|
||||
|
||||
const tiktokenReady = (async () => {
|
||||
const { init, get_encoding, Tiktoken, load } = await import('./tiktoken.js');
|
||||
window.Tiktoken = Tiktoken;
|
||||
window.tiktokenInit = init;
|
||||
window.tiktokenGetEncoding = get_encoding;
|
||||
window.tiktokenLoad = load;
|
||||
})();
|
||||
|
||||
async function getDevice() {
|
||||
let adapter;
|
||||
try {
|
||||
adapter = await navigator.gpu.requestAdapter();
|
||||
if (!adapter) {
|
||||
this.loadingMessage = "Loading WASM (WebGPU not enabled):";
|
||||
throw new Error("No WebGPU adapter found");
|
||||
}
|
||||
} catch(error) {
|
||||
this.loadingMessage = "Loading WASM (WebGPU not enabled):";
|
||||
throw error;
|
||||
}
|
||||
const requiredLimits = {};
|
||||
const maxBufferSize = 322122544;
|
||||
requiredLimits.maxStorageBufferBindingSize = maxBufferSize;
|
||||
requiredLimits.maxBufferSize = maxBufferSize;
|
||||
requiredLimits.maxComputeInvocationsPerWorkgroup = 512; // may need to vary based on what the WEBGPU backend produces
|
||||
|
||||
try {
|
||||
return await adapter.requestDevice({ requiredLimits });
|
||||
} catch(error) {
|
||||
this.loadingMessage = "Loading WASM (WebGPU error):";
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
// copied from examples/webgpu/stable_diffusion/index.html
|
||||
function initDb() {
|
||||
return new Promise((resolve, reject) => {
|
||||
let db;
|
||||
const request = indexedDB.open('tinydb', 1);
|
||||
request.onerror = (event) => {
|
||||
console.error('Database error:', event.target.error);
|
||||
resolve(null);
|
||||
};
|
||||
|
||||
request.onsuccess = (event) => {
|
||||
db = event.target.result;
|
||||
console.log("Db initialized.");
|
||||
resolve(db);
|
||||
};
|
||||
|
||||
request.onupgradeneeded = (event) => {
|
||||
db = event.target.result;
|
||||
if (!db.objectStoreNames.contains('tensors')) {
|
||||
db.createObjectStore('tensors', { keyPath: 'id' });
|
||||
}
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
// copied from examples/webgpu/stable_diffusion/index.html
|
||||
function readTensorFromDb(db, id) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (db == null) {
|
||||
resolve(null);
|
||||
}
|
||||
|
||||
const transaction = db.transaction(['tensors'], 'readonly');
|
||||
const store = transaction.objectStore('tensors');
|
||||
const request = store.get(id);
|
||||
|
||||
transaction.onabort = (event) => {
|
||||
console.log("Transaction error while reading tensor: " + event.target.error);
|
||||
resolve(null);
|
||||
};
|
||||
|
||||
request.onsuccess = (event) => {
|
||||
const result = event.target.result;
|
||||
if (result) {
|
||||
resolve(result);
|
||||
} else {
|
||||
resolve(null);
|
||||
}
|
||||
};
|
||||
|
||||
request.onerror = (event) => {
|
||||
console.error('Tensor retrieve failed: ', event.target.error);
|
||||
resolve(null);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function getAllKeysFromDb(db) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (db == null) {resolve([]);}
|
||||
const transaction = db.transaction(['tensors'], 'readonly');
|
||||
const store = transaction.objectStore('tensors');
|
||||
const request = store.getAllKeys();
|
||||
transaction.onabort = (event) => {
|
||||
console.log("Transaction error while reading IndexedDB keys: " + event.target.error);
|
||||
resolve([]);
|
||||
};
|
||||
request.onsuccess = function (event) {resolve(event.target.result);};
|
||||
request.onerror = (event) => {
|
||||
console.error('Retrieval of IndexedDB keys failed: ', event.target.error);
|
||||
resolve([]);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
// modified from examples/webgpu/stable_diffusion/index.html
|
||||
function saveTensorToDb(db, id, tensor) {
|
||||
return readTensorFromDb(db, id).then((result) => {
|
||||
if (!result) {
|
||||
new Promise((resolve, reject) => {
|
||||
if (db == null) {
|
||||
resolve(null);
|
||||
}
|
||||
|
||||
const transaction = db.transaction(['tensors'], 'readwrite');
|
||||
const store = transaction.objectStore('tensors');
|
||||
const request = store.put({ id: id, content: tensor });
|
||||
|
||||
transaction.onabort = (event) => {
|
||||
console.log("Transaction error while saving tensor: " + event.target.error);
|
||||
resolve(null);
|
||||
};
|
||||
|
||||
request.onsuccess = () => {
|
||||
console.log('Tensor saved successfully.');
|
||||
resolve();
|
||||
};
|
||||
|
||||
request.onerror = (event) => {
|
||||
console.error('Tensor save failed:', event.target.error);
|
||||
resolve(null);
|
||||
};
|
||||
});
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}).catch(()=> null);
|
||||
}
|
||||
|
||||
function deleteTensorFromDb(db, id) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (db == null) {
|
||||
console.error("Database is not initialized.");
|
||||
resolve(null);
|
||||
return;
|
||||
}
|
||||
|
||||
const transaction = db.transaction(['tensors'], 'readwrite');
|
||||
const store = transaction.objectStore('tensors');
|
||||
const request = store.delete(id);
|
||||
|
||||
transaction.oncomplete = () => {
|
||||
console.log(`Tensor with ID '${id}' deleted successfully.`);
|
||||
resolve();
|
||||
};
|
||||
|
||||
transaction.onerror = (event) => {
|
||||
console.error("Transaction error while deleting tensor:", event.target.error);
|
||||
resolve(null);
|
||||
};
|
||||
|
||||
request.onerror = (event) => {
|
||||
console.error('Tensor deletion failed:', event.target.error);
|
||||
resolve(null);
|
||||
};
|
||||
|
||||
request.onsuccess = () => {
|
||||
console.log(`Delete request for tensor with ID '${id}' succeeded.`);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function makeProgress(total) {
|
||||
let acc = 0;
|
||||
const ret = function progress(amount, message) {
|
||||
if (amount >= 0) { // allow updating message only
|
||||
acc += amount;
|
||||
const percentage = total ? Math.trunc((acc / total) * 100) : 0;
|
||||
document.querySelector('.progress').style.width = `${percentage}%`;
|
||||
document.getElementById('progress-percentage').textContent = `${percentage}%`;
|
||||
}
|
||||
if (message) {
|
||||
this.loadingMessage = message;
|
||||
document.getElementById('loading-message').textContent = this.loadingMessage;
|
||||
}
|
||||
}.bind(this);
|
||||
ret.total = total;
|
||||
return ret;
|
||||
}
|
||||
|
||||
function sendMessageToWorker(worker, message) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const onMessage = (event) => {
|
||||
resolve(event.data);
|
||||
worker.removeEventListener('message', onMessage);
|
||||
worker.removeEventListener('error', onError);
|
||||
};
|
||||
|
||||
const onError = (error) => {
|
||||
reject(error);
|
||||
worker.removeEventListener('message', onMessage);
|
||||
worker.removeEventListener('error', onError);
|
||||
};
|
||||
|
||||
worker.addEventListener('message', onMessage);
|
||||
worker.addEventListener('error', onError);
|
||||
|
||||
if (message.header === "token") worker.postMessage(message.data);
|
||||
else if (message.header === "load_state_dict") {
|
||||
if (message.data === "done") worker.postMessage(message.data);
|
||||
else worker.postMessage(message.data, message.data.map(file => file.bytes.buffer));
|
||||
}
|
||||
else if (message.header === "init") worker.postMessage("init");
|
||||
});
|
||||
}
|
||||
|
||||
async function load_state_dict (data, device, progress) {
|
||||
let state_dict = data.metadata.state_dict;
|
||||
let completed = 0;
|
||||
|
||||
// modified from examples/webgpu/stable_diffusion/index.html getProgressDlForPart
|
||||
const loadPart = async (part) => {
|
||||
const response = await fetch(part);
|
||||
const res = new Response(new ReadableStream({
|
||||
async start(controller) {
|
||||
const reader = response.body.getReader();
|
||||
for (;;) {
|
||||
const { done, value } = await reader.read();
|
||||
if (done) break;
|
||||
progress(value.byteLength);
|
||||
controller.enqueue(value);
|
||||
}
|
||||
controller.close();
|
||||
},
|
||||
}));
|
||||
|
||||
return res.arrayBuffer();
|
||||
};
|
||||
|
||||
let db = await initDb();
|
||||
|
||||
const getPart = async(filename, hash) => {
|
||||
let part = await readTensorFromDb(db, hash);
|
||||
|
||||
if (part) {
|
||||
console.log(`Cache hit: ${filename}, hash: ${hash}`);
|
||||
progress(part.content.byteLength);
|
||||
return Promise.resolve(part.content);
|
||||
} else {
|
||||
console.log(`Cache miss: ${filename}, hash: ${hash}`);
|
||||
return loadPart(`${window.MODEL_BASE_URL}/${filename}`);
|
||||
}
|
||||
}
|
||||
|
||||
const correctHashes = data.metadata.files.map(file => file.hash)
|
||||
// delete unused cached buffers to free disk space -- if we update weights, user will otherwise have obsolete cached buffers
|
||||
const dbKeys = await getAllKeysFromDb(db);
|
||||
const correctHashesSet = new Set(correctHashes);
|
||||
const notInCorrectHashes = dbKeys.filter(key => !correctHashesSet.has(key));
|
||||
// await these right before starting to save new stuff
|
||||
const deletionPromises = notInCorrectHashes.map(async (hash) => deleteTensorFromDb(db, hash));
|
||||
|
||||
// instantiates empty weight buffers on WebGPU, attaches buffers to state_dict
|
||||
let model;
|
||||
if (window.BACKEND === "WebGPU") {
|
||||
//model = await transformer().setup(device, state_dict, progress);
|
||||
model = await transformer.setupNet(device, state_dict);
|
||||
progress(0.15 * progress.total);
|
||||
|
||||
}
|
||||
else if (window.BACKEND === "WASM") {
|
||||
progress(0.02 * progress.total);
|
||||
model = new Worker(`./worker.js?version=${Date.now()}`);
|
||||
await sendMessageToWorker(model, {header: "init"});
|
||||
progress(0.02 * progress.total);
|
||||
progress(0.11 * progress.total);
|
||||
}
|
||||
|
||||
const downloaded = [];
|
||||
const triggerChainDownload = async (toDownload) => {
|
||||
const numDownloaders = window.isMobile ? 4 : toDownload.length; // TODO: dynamically base this on DL file size? current assumption is 16 MiB chunks
|
||||
|
||||
const chainDownload = async() => {
|
||||
const file = toDownload.shift();
|
||||
loadPart(`${window.MODEL_BASE_URL}/${file.name}`) // triggers download
|
||||
.then(async (arraybuf) => {
|
||||
downloaded.push({ ...file, bytes: new Uint8Array(arraybuf)});
|
||||
// pause downloads if further processing is a bottleneck
|
||||
while (toDownload.length && downloaded.length >= numDownloaders) await new Promise(resolve => setTimeout(resolve, 5));
|
||||
if (toDownload.length && downloaded.length < numDownloaders) chainDownload(); // start next download
|
||||
})
|
||||
}
|
||||
for (let i=0; i<numDownloaders; i++) if (toDownload.length) chainDownload();
|
||||
}
|
||||
|
||||
const loadFileToStateDict = async(file) => {
|
||||
if (window.BACKEND === "WebGPU") {
|
||||
for (const part of file.parts) {
|
||||
if (part.empty) continue;
|
||||
part.bytes = (part.size === file.bytes.length) ? file.bytes : file.bytes.slice(part.file_start_pos, part.file_start_pos + part.size);
|
||||
device.queue.writeBuffer(state_dict[part.key].bytes, part.target_start_pos, part.bytes); // improves stability over mappedAtCreation writing
|
||||
part.bytes = null;
|
||||
}
|
||||
}
|
||||
else if (window.BACKEND === "WASM") {
|
||||
await sendMessageToWorker(model, {header: "load_state_dict", data: [file]});
|
||||
}
|
||||
file.bytes = null;
|
||||
}
|
||||
|
||||
if (window.BACKEND === "WebGPU") { // contiguous loading not needed for WebGPU stability
|
||||
const files = data.tensor_file_groups.flatMap(obj => obj.files);
|
||||
data.tensor_file_groups = [{contiguous: false, files: files}];
|
||||
}
|
||||
|
||||
for (const group of data.tensor_file_groups) {
|
||||
const contiguous = group.contiguous;
|
||||
const files = group.files;
|
||||
const tensor_file_indices = files.map(file => file.index);
|
||||
const contiguousFiles = [];
|
||||
const fileHashes = new Set(files.map(file => file.hash));
|
||||
const cachedFileHashes = new Set(dbKeys.filter(key => fileHashes.has(key)));
|
||||
const cachedFiles = files.filter(file => cachedFileHashes.has(file.hash));
|
||||
const toDownload = files.filter(file => !cachedFileHashes.has(file.hash));
|
||||
triggerChainDownload(toDownload);
|
||||
|
||||
const loadDelay = 5;
|
||||
await Promise.all(deletionPromises);
|
||||
|
||||
while (completed < files.length) {
|
||||
const start = performance.now();
|
||||
// prioritize files from downloaded queue, so we can continue downloading more files
|
||||
if (downloaded.length) {
|
||||
const file = downloaded.shift();
|
||||
await saveTensorToDb(db, file.hash, file.bytes); // for wasm, must await to prevent race between indexedDB and transfer to worker
|
||||
if (!contiguous) await loadFileToStateDict(file);
|
||||
else contiguousFiles.push(file);
|
||||
completed += 1;
|
||||
}
|
||||
else if (!downloaded.length && cachedFiles.length) {
|
||||
const file = cachedFiles.shift();
|
||||
file.bytes = await getPart(file.name, file.hash); // reads data from IndexedDB
|
||||
if (!contiguous) await loadFileToStateDict(file);
|
||||
else contiguousFiles.push(file);
|
||||
completed += 1;
|
||||
}
|
||||
const end = performance.now();
|
||||
const elapsed = end - start;
|
||||
if (elapsed < loadDelay) await new Promise(resolve => setTimeout(resolve, loadDelay - elapsed));
|
||||
}
|
||||
if (contiguous) {
|
||||
const orderMap = tensor_file_indices.reduce((acc, id, index) => {acc[id] = index; return acc;}, {});
|
||||
contiguousFiles.sort((a, b) => orderMap[a.index] - orderMap[b.index]); // glue files together in the right order
|
||||
await sendMessageToWorker(model, {header: "load_state_dict", data: contiguousFiles});
|
||||
}
|
||||
completed = 0;
|
||||
}
|
||||
|
||||
// initialize empty kv_caches, which were part of exported model's state_dict, but which we didn't want to package/download
|
||||
if (window.BACKEND === "WASM") {
|
||||
for (const [k, v] of Object.entries(state_dict).filter(([_, v]) => v.empty === true)) {
|
||||
v.parts[0].file_start_pos = 0;
|
||||
const file = { parts: v.parts, size: v.size, bytes: new Uint8Array(v.size).fill(0) };
|
||||
await loadFileToStateDict(file);
|
||||
}
|
||||
}
|
||||
|
||||
return model;
|
||||
};
|
||||
|
||||
document.addEventListener("alpine:init", () => {
|
||||
Alpine.data("state", () => ({
|
||||
// loadingMessage updates the user on page load progress, including weights download and decompression
|
||||
// if loadingMessage is not '', then prompt box will be hidden: this is default behavior on page load
|
||||
placeholderText: "Generating...",
|
||||
loadingMessage: `Loading ${window.BACKEND} model:`,
|
||||
// model
|
||||
nets: {},
|
||||
tokenizer: null,
|
||||
max_context: 1024,
|
||||
lastSeenToks: [],
|
||||
|
||||
progress: null,
|
||||
|
||||
async init() {
|
||||
var device = null;
|
||||
var webgpuErrorMessage = null;
|
||||
if (window.BACKEND === "WebGPU") {
|
||||
try {
|
||||
device = await getDevice.call(this);
|
||||
console.log("WebGPU device initialized");
|
||||
} catch (error) {
|
||||
window.BACKEND = "WASM";
|
||||
console.log(`error: ${error}\nFailed to launch WebGPU. Loading WASM model instead...`); // return;
|
||||
webgpuErrorMessage = this.loadingMessage;
|
||||
}
|
||||
}
|
||||
|
||||
window.MODEL_BASE_URL = (window.BACKEND === "WebGPU" && !window.isMobile) ? window.PC_MODEL_BASE_URL : window.MOBILE_MODEL_BASE_URL;
|
||||
this.max_context = (window.BACKEND === "WebGPU" && !window.isMobile) ? window.PC_MAX_CONTEXT : window.MOBILE_MAX_CONTEXT;
|
||||
|
||||
const kernelsReady = (async () => {
|
||||
if (window.BACKEND === "WASM") {var exports = await import(`./net_clang.js?version=${Date.now()}`);}
|
||||
else if (window.BACKEND === "WebGPU" && !window.isMobile) {var exports = await import(`${PC_WEBGPU_EXPORT}?version=${Date.now()}`);}
|
||||
else if (window.BACKEND === "WebGPU" && window.isMobile) {var exports = await import(`${MOBILE_WEBGPU_EXPORT}?version=${Date.now()}`);}
|
||||
self.transformer = exports.default;
|
||||
})();
|
||||
|
||||
const response = await fetch(`${window.MODEL_BASE_URL}/net_metadata.json`);
|
||||
// TODO: cache metadata (and everything else, including tokenizer)
|
||||
// TODO: use service worker to reload page when offline
|
||||
const data = await response.json();
|
||||
data.metadata.files = data.metadata.files.map((file, index) => ({...file, index}));
|
||||
const state_dict = data.metadata.state_dict;
|
||||
|
||||
/*
|
||||
- allocating memory to WASM on mobile has longstanding issues: https://github.com/WebAssembly/design/issues/1397
|
||||
|
||||
- the below pattern, while yielding a succesfully-functioning model when it doesn't crash, causes regular crashes on iOS Safari (iphone 15 iOS 18.3):
|
||||
- call WASM malloc (to fit all tensors, or one per tensor) for all tensors up front, then load tensor byte chunks into the buffers in random order
|
||||
|
||||
- the below pattern has been stable on iOS Safari (iphone 15 iOS 18.3):
|
||||
- call only one WASM malloc at a time before filling the allocated bytes, as small as possible (malloc up to 256 MiB has been tested)
|
||||
- fill the malloc'd memory in linear order from start to end (what has been tested is calling wasm.HEAPU8.set on 16 MiB chunks from start to end)
|
||||
- use ALLOW_MEMORY_GROWTH=1 in wasm compilation, minimize initial memory
|
||||
|
||||
- additional considerations affecting loading design, for WASM:
|
||||
- it seems that copying bytes into wasm memory cannot be zero-copy without sharedarraybuffer, which isn't currently used due to increased hosting complexity
|
||||
- non-zero copies create memory pressure, which is not reliably capped because of lack of control over garbage collection
|
||||
- to minimize peak memory pressure if GC is delayed, we process (i.e. download + copy into WASM) large tensors (> 16 MiB) one at a time, in descending size order
|
||||
*/
|
||||
data.tensor_file_groups = []; // see above: for WASM, limit processing of multi-file Tensors to one at a time, in descending order based on Tensor size
|
||||
const unsplit_tensors = [];
|
||||
const sortedEntries = Object.entries(state_dict).sort(([, objA], [, objB]) => objB.size - objA.size);
|
||||
|
||||
let totalSize = 0;
|
||||
const seen = new Set();
|
||||
for (const [k,v] of sortedEntries) {
|
||||
const files_in_tensor = [];
|
||||
for (const part of v.parts) {
|
||||
part.key = k;
|
||||
if (part.empty) state_dict[k].empty = true; // assumes no other parts of this weight exist and are non-empty
|
||||
else {
|
||||
const file = data.metadata.files[part.file];
|
||||
if (!seen.has(file.index)) {
|
||||
seen.add(file.index);
|
||||
files_in_tensor.push(file);
|
||||
}
|
||||
totalSize += part.size;
|
||||
part.dtype = v.dtype;
|
||||
if (!data.metadata.files[part.file].parts) data.metadata.files[part.file].parts = [];
|
||||
data.metadata.files[part.file].size ??= 0;
|
||||
data.metadata.files[part.file].size += part.size;
|
||||
data.metadata.files[part.file].parts.push(part);
|
||||
}
|
||||
}
|
||||
if (files_in_tensor.length > 1) data.tensor_file_groups.push({contiguous: true, files: files_in_tensor}); // [tensorN_file0, tensorN_file1, ...]
|
||||
else if (files_in_tensor.length > 0) unsplit_tensors.push(files_in_tensor[0]);
|
||||
}
|
||||
data.tensor_file_groups.push({contiguous: false, files: unsplit_tensors});
|
||||
|
||||
data.totalSize = totalSize;
|
||||
totalSize = totalSize / 0.8; // give space in progress bar for initializing model bufs, and tokenizer
|
||||
this.progress = makeProgress.call(this, totalSize); // creates closure with totalSize
|
||||
|
||||
try {
|
||||
this.progress(0.01 * totalSize, "Loading tokenizer:");
|
||||
const wasmResponse = await fetch(`${window.MODEL_BASE_URL}/tiktoken_bg.wasm`);
|
||||
this.progress(0.01 * totalSize);
|
||||
const wasmBytes = await wasmResponse.arrayBuffer();
|
||||
await tiktokenReady;
|
||||
await window.tiktokenInit((imports) => WebAssembly.instantiate(wasmBytes, imports));
|
||||
this.progress(0.01 * totalSize);
|
||||
|
||||
this.tokenizer = await createTokenizer(`${window.MODEL_BASE_URL}/llama3-2.tiktoken`);
|
||||
const tokenizer_works = (new TextDecoder().decode(this.tokenizer.decode(this.tokenizer.encode("hello world"))) === "hello world");
|
||||
console.log("tokenizer works:", tokenizer_works)
|
||||
this.progress(0.01 * totalSize);
|
||||
} catch (error) {this.progress(-1, `Error launching tokenizer: ${error}`); console.log(error); return;}
|
||||
|
||||
try {
|
||||
const loadModelMessage = (webgpuErrorMessage) ? webgpuErrorMessage : `Loading ${window.BACKEND} model:`
|
||||
this.progress(0, loadModelMessage);
|
||||
await kernelsReady;
|
||||
const model = await load_state_dict(data, device, this.progress);
|
||||
|
||||
if (window.BACKEND === "WebGPU") {
|
||||
this.nets = {"transformer": model};
|
||||
}
|
||||
else if (window.BACKEND === "WASM") {
|
||||
const msg = await sendMessageToWorker(model, {header: "load_state_dict", data: "done"});
|
||||
this.nets = {"transformer": async (tok, start_pos) => sendMessageToWorker(model, {header: "token", data: [tok, start_pos]})};
|
||||
}
|
||||
this.progress(0.01 * totalSize, `Launching ${window.BACKEND} model:`);
|
||||
this.loadingMessage = ""; // Triggers removal of loading bar, display of prompt box
|
||||
} catch (error) {this.progress(-1, `Error launching model: ${error}`); console.log(error); return;}
|
||||
},
|
||||
|
||||
// current state
|
||||
cstate: {
|
||||
time: null,
|
||||
messages: [],
|
||||
},
|
||||
|
||||
// historical state
|
||||
histories: JSON.parse(localStorage.getItem("histories")) || [],
|
||||
|
||||
home: 0,
|
||||
generating: false,
|
||||
maxContextReached: false,
|
||||
cancelGeneration: false,
|
||||
endpoint: `${window.location.origin}/v1`,
|
||||
|
||||
// performance tracking
|
||||
time_till_first: 0,
|
||||
tokens_per_second: 0,
|
||||
total_tokens: 0,
|
||||
max_context: 0,
|
||||
|
||||
removeHistory(cstate) {
|
||||
const index = this.histories.findIndex((state) => {
|
||||
return state.time === cstate.time;
|
||||
});
|
||||
if (index !== -1) {
|
||||
this.histories.splice(index, 1);
|
||||
localStorage.setItem("histories", JSON.stringify(this.histories));
|
||||
}
|
||||
},
|
||||
|
||||
async handleSend() {
|
||||
const el = document.getElementById("input-form");
|
||||
const value = el.value.trim();
|
||||
if (!value) return;
|
||||
|
||||
if (this.generating) return;
|
||||
this.maxContextReached = false;
|
||||
this.placeholderText = "Generating...";
|
||||
this.generating = true;
|
||||
this.cancelGeneration = false;
|
||||
if (this.home === 0) this.home = 1;
|
||||
|
||||
// ensure that going back in history will go back to home
|
||||
window.history.pushState({}, "", window.TINYCHAT_ROOT || "/");
|
||||
|
||||
// add message to list
|
||||
this.cstate.messages.push({ role: "user", content: value });
|
||||
|
||||
// clear textarea
|
||||
el.value = "";
|
||||
el.style.height = "auto";
|
||||
el.style.height = el.scrollHeight + "px";
|
||||
|
||||
// reset performance tracking
|
||||
const prefill_start = Date.now();
|
||||
let start_time = 0;
|
||||
let tokens = 0;
|
||||
this.tokens_per_second = 0;
|
||||
|
||||
let gottenFirstChunk = false;
|
||||
try {
|
||||
for await (
|
||||
const chunk of this.openaiChatCompletion(this.cstate.messages)
|
||||
) {
|
||||
if (!gottenFirstChunk) {
|
||||
this.cstate.messages.push({ role: "assistant", content: "" });
|
||||
gottenFirstChunk = true;
|
||||
}
|
||||
|
||||
// add chunk to the last message
|
||||
// TODO: handle localStorage overflow
|
||||
// possible example: this.cstate.messages[...] was undefined when trying to prompt within an old cstate (chat session)
|
||||
this.cstate.messages[this.cstate.messages.length - 1].content += chunk;
|
||||
|
||||
// calculate performance tracking
|
||||
tokens += 1;
|
||||
this.total_tokens += 1;
|
||||
if (start_time === 0) {
|
||||
start_time = Date.now();
|
||||
this.time_till_first = start_time - prefill_start;
|
||||
} else {
|
||||
const diff = Date.now() - start_time;
|
||||
if (diff > 0) {
|
||||
this.tokens_per_second = tokens / (diff / 1000);
|
||||
}
|
||||
}
|
||||
this.checkMaxContext(this.total_tokens);
|
||||
if (this.cancelGeneration) break;
|
||||
}
|
||||
} finally {
|
||||
// update the state in histories or add it if it doesn't exist
|
||||
const index = this.histories.findIndex((cstate) => {
|
||||
return cstate.time === this.cstate.time;
|
||||
});
|
||||
this.cstate.time = Date.now();
|
||||
if (index !== -1) {
|
||||
// update the time
|
||||
this.histories[index] = this.cstate;
|
||||
} else {
|
||||
this.histories.push(this.cstate);
|
||||
}
|
||||
// update in local storage
|
||||
localStorage.setItem("histories", JSON.stringify(this.histories));
|
||||
|
||||
if (!this.maxContextReached) this.generating = false;
|
||||
if (this.cancelGeneration && !this.maxContextReached) this.cstate = { time: null, messages: [] };
|
||||
}
|
||||
},
|
||||
|
||||
async handleEnter(event) {
|
||||
// if shift is not pressed
|
||||
if (!event.shiftKey) {
|
||||
event.preventDefault();
|
||||
await this.handleSend();
|
||||
}
|
||||
},
|
||||
|
||||
updateTotalTokens(messages) {
|
||||
try {
|
||||
let toks = [this.tokenizer.bos_id];
|
||||
messages.forEach((message) => {
|
||||
if (!message.role || !message.content) {
|
||||
throw new Error("Each message must have a 'role' and 'content' property.");
|
||||
}
|
||||
toks = toks.concat(this.tokenizer.encodeMessage(message.role, message.content));
|
||||
|
||||
if (messages.length > 0 && messages[messages.length - 1].role === "user") {
|
||||
toks = toks.concat(this.tokenizer.encodeRole("assistant"));
|
||||
}
|
||||
this.total_tokens = toks.length;
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Error updating total tokens:", error);
|
||||
}
|
||||
},
|
||||
|
||||
checkMaxContext(num_tokens) {
|
||||
if (num_tokens >= this.max_context) {
|
||||
this.cancelGeneration = true;
|
||||
this.maxContextReached = true;
|
||||
this.placeholderText = `Max context reached: ${this.max_context} tokens`;
|
||||
}
|
||||
},
|
||||
|
||||
async *openaiChatCompletion(messages) {
|
||||
let tokens = [this.tokenizer.bos_id];
|
||||
for (const message of messages) {
|
||||
tokens = tokens.concat(this.tokenizer.encodeMessage(message.role, message.content));
|
||||
}
|
||||
tokens = tokens.concat(this.tokenizer.encodeRole("assistant"));
|
||||
this.checkMaxContext(tokens.length); // don't waste time prefilling if we know we're over the token limit
|
||||
let startPos = 0
|
||||
const prefillToks = tokens.slice(0, -1);
|
||||
|
||||
// Skip the largest possible sequence of tokens already represented at the beginning of the model's kv caches
|
||||
for (let i=0; i <= prefillToks.length; i++) {
|
||||
startPos = i;
|
||||
if (i == prefillToks.length) break;
|
||||
if (i == this.lastSeenToks.length) break;
|
||||
if (prefillToks[i] !== this.lastSeenToks[i]) break;
|
||||
}
|
||||
//this.lastSeenToks = prefillToks;
|
||||
//prefillToks = prefillToks.slice(startPos);
|
||||
const unprocessedPrefillToks = prefillToks.slice(startPos);
|
||||
this.lastSeenToks = prefillToks.slice(0, startPos);
|
||||
|
||||
this.progress = makeProgress(unprocessedPrefillToks.length);
|
||||
this.loadingMessage = (window.BACKEND === "WebGPU") ? "Reading input:" : "Loading (enable WebGPU for speed):";
|
||||
this.progress(0, this.loadingMessage);
|
||||
for (const tok of unprocessedPrefillToks) {
|
||||
if (this.cancelGeneration) {this.loadingMessage=""; return;}
|
||||
if (window.BACKEND === "WebGPU") {await this.nets["transformer"](new Int32Array([tok]), new Int32Array([startPos]));}
|
||||
else {await this.nets["transformer"](tok, startPos);}
|
||||
this.lastSeenToks.push(tok)
|
||||
startPos += 1;
|
||||
this.progress(1);
|
||||
}
|
||||
this.loadingMessage = ""; // hides progress bar
|
||||
|
||||
let lastTok = tokens[tokens.length - 1];
|
||||
while (true) {
|
||||
if (window.BACKEND === "WebGPU") {var tok = await this.nets["transformer"](new Int32Array([lastTok]), new Int32Array([startPos])); tok = tok[0][0];}
|
||||
else {var tok = await this.nets["transformer"](lastTok, startPos);}
|
||||
this.lastSeenToks.push(lastTok); // lets us skip prefilling with these tokens at the next prompt in this chain
|
||||
startPos += 1;
|
||||
lastTok = tok;
|
||||
if (this.tokenizer.stop_tokens.has(lastTok)) break;
|
||||
yield new TextDecoder().decode(this.tokenizer.decode([lastTok]));
|
||||
}
|
||||
},
|
||||
}));
|
||||
});
|
||||
|
||||
const { markedHighlight } = globalThis.markedHighlight;
|
||||
marked.use(markedHighlight({
|
||||
langPrefix: "hljs language-",
|
||||
highlight(code, lang, _info) {
|
||||
const language = hljs.getLanguage(lang) ? lang : "plaintext";
|
||||
return hljs.highlight(code, { language }).value;
|
||||
},
|
||||
}));
|
||||
|
||||
// **** eventsource-parser ****
|
||||
class EventSourceParserStream extends TransformStream {
|
||||
constructor() {
|
||||
let parser;
|
||||
|
||||
super({
|
||||
start(controller) {
|
||||
parser = createParser((event) => {
|
||||
if (event.type === "event") {
|
||||
controller.enqueue(event);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
transform(chunk) {
|
||||
parser.feed(chunk);
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function createParser(onParse) {
|
||||
let isFirstChunk;
|
||||
let buffer;
|
||||
let startingPosition;
|
||||
let startingFieldLength;
|
||||
let eventId;
|
||||
let eventName;
|
||||
let data;
|
||||
reset();
|
||||
return {
|
||||
feed,
|
||||
reset,
|
||||
};
|
||||
function reset() {
|
||||
isFirstChunk = true;
|
||||
buffer = "";
|
||||
startingPosition = 0;
|
||||
startingFieldLength = -1;
|
||||
eventId = void 0;
|
||||
eventName = void 0;
|
||||
data = "";
|
||||
}
|
||||
function feed(chunk) {
|
||||
buffer = buffer ? buffer + chunk : chunk;
|
||||
if (isFirstChunk && hasBom(buffer)) {
|
||||
buffer = buffer.slice(BOM.length);
|
||||
}
|
||||
isFirstChunk = false;
|
||||
const length = buffer.length;
|
||||
let position = 0;
|
||||
let discardTrailingNewline = false;
|
||||
while (position < length) {
|
||||
if (discardTrailingNewline) {
|
||||
if (buffer[position] === "\n") {
|
||||
++position;
|
||||
}
|
||||
discardTrailingNewline = false;
|
||||
}
|
||||
let lineLength = -1;
|
||||
let fieldLength = startingFieldLength;
|
||||
let character;
|
||||
for (
|
||||
let index = startingPosition;
|
||||
lineLength < 0 && index < length;
|
||||
++index
|
||||
) {
|
||||
character = buffer[index];
|
||||
if (character === ":" && fieldLength < 0) {
|
||||
fieldLength = index - position;
|
||||
} else if (character === "\r") {
|
||||
discardTrailingNewline = true;
|
||||
lineLength = index - position;
|
||||
} else if (character === "\n") {
|
||||
lineLength = index - position;
|
||||
}
|
||||
}
|
||||
if (lineLength < 0) {
|
||||
startingPosition = length - position;
|
||||
startingFieldLength = fieldLength;
|
||||
break;
|
||||
} else {
|
||||
startingPosition = 0;
|
||||
startingFieldLength = -1;
|
||||
}
|
||||
parseEventStreamLine(buffer, position, fieldLength, lineLength);
|
||||
position += lineLength + 1;
|
||||
}
|
||||
if (position === length) {
|
||||
buffer = "";
|
||||
} else if (position > 0) {
|
||||
buffer = buffer.slice(position);
|
||||
}
|
||||
}
|
||||
function parseEventStreamLine(lineBuffer, index, fieldLength, lineLength) {
|
||||
if (lineLength === 0) {
|
||||
if (data.length > 0) {
|
||||
onParse({
|
||||
type: "event",
|
||||
id: eventId,
|
||||
event: eventName || void 0,
|
||||
data: data.slice(0, -1),
|
||||
// remove trailing newline
|
||||
});
|
||||
|
||||
data = "";
|
||||
eventId = void 0;
|
||||
}
|
||||
eventName = void 0;
|
||||
return;
|
||||
}
|
||||
const noValue = fieldLength < 0;
|
||||
const field = lineBuffer.slice(
|
||||
index,
|
||||
index + (noValue ? lineLength : fieldLength),
|
||||
);
|
||||
let step = 0;
|
||||
if (noValue) {
|
||||
step = lineLength;
|
||||
} else if (lineBuffer[index + fieldLength + 1] === " ") {
|
||||
step = fieldLength + 2;
|
||||
} else {
|
||||
step = fieldLength + 1;
|
||||
}
|
||||
const position = index + step;
|
||||
const valueLength = lineLength - step;
|
||||
const value = lineBuffer.slice(position, position + valueLength).toString();
|
||||
if (field === "data") {
|
||||
data += value ? "".concat(value, "\n") : "\n";
|
||||
} else if (field === "event") {
|
||||
eventName = value;
|
||||
} else if (field === "id" && !value.includes("\0")) {
|
||||
eventId = value;
|
||||
} else if (field === "retry") {
|
||||
const retry = parseInt(value, 10);
|
||||
if (!Number.isNaN(retry)) {
|
||||
onParse({
|
||||
type: "reconnect-interval",
|
||||
value: retry,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
const BOM = [239, 187, 191];
|
||||
function hasBom(buffer) {
|
||||
return BOM.every((charCode, index) => buffer.charCodeAt(index) === charCode);
|
||||
}
|
||||
|
||||
const PAT_STR = "(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\r\n\\p{L}\\p{N}]?\\p{L}+|\\p{N}{1,3}| ?[^\\s\\p{L}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+";
|
||||
|
||||
async function createTokenizer(bpeUrl) {
|
||||
const num_base_tokens = 128000;
|
||||
const special_tokens = {
|
||||
"<|begin_of_text|>": 128000,
|
||||
"<|end_of_text|>": 128001,
|
||||
"<|start_header_id|>": 128006,
|
||||
"<|end_header_id|>": 128007,
|
||||
"<|eot_id|>": 128009
|
||||
};
|
||||
const model = await window.tiktokenLoad({
|
||||
"load_tiktoken_bpe": bpeUrl,
|
||||
"special_tokens": special_tokens,
|
||||
"pat_str": PAT_STR
|
||||
});
|
||||
const tokenizer = new window.Tiktoken(model.bpe_ranks, model.special_tokens, model.pat_str)
|
||||
|
||||
return {
|
||||
get bos_id() {
|
||||
return special_tokens["<|begin_of_text|>"];
|
||||
},
|
||||
|
||||
get stop_tokens() {
|
||||
return new Set([
|
||||
special_tokens["<|end_of_text|>"],
|
||||
special_tokens["<|eot_id|>"],
|
||||
]);
|
||||
},
|
||||
|
||||
decode(toks) {
|
||||
const filtered = toks.filter((t) => t < num_base_tokens);
|
||||
return tokenizer.decode(filtered);
|
||||
},
|
||||
|
||||
encode(text, allow_special = false) {
|
||||
const allowedSpecial = allow_special ? "all" : new Set();
|
||||
const disallowedSpecial = new Set();
|
||||
return tokenizer.encode(text, allowedSpecial, disallowedSpecial);
|
||||
},
|
||||
|
||||
encodeRole(role) {
|
||||
const tokens = [];
|
||||
tokens.push(special_tokens["<|start_header_id|>"]);
|
||||
tokens.push(...this.encode(role));
|
||||
tokens.push(special_tokens["<|end_header_id|>"]);
|
||||
tokens.push(...this.encode("\n\n"));
|
||||
return tokens;
|
||||
},
|
||||
|
||||
encodeMessage(role, content) {
|
||||
const roleTokens = this.encodeRole(role);
|
||||
const contentTokens = this.encode(content.trim());
|
||||
return [...roleTokens, ...contentTokens, special_tokens["<|eot_id|>"]];
|
||||
},
|
||||
};
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
cd "$(dirname "$0")"
|
||||
npm init -y && \
|
||||
npm install --save-dev webpack webpack-cli && \
|
||||
npm install tiktoken && \
|
||||
jq '.scripts.build = "webpack"' package.json > package.tmp.json && \
|
||||
mv package.tmp.json package.json && \
|
||||
npm run build && \
|
||||
mv dist/*.wasm ./tiktoken_bg.wasm && \
|
||||
mv dist/* ./ && \
|
||||
rm -rf dist node_modules package-lock.json package.json
|
||||
@@ -0,0 +1,5 @@
|
||||
// Force Webpack to copy the WASM
|
||||
import 'tiktoken/tiktoken_bg.wasm';
|
||||
import { init, get_encoding, encoding_for_model, Tiktoken } from 'tiktoken/init';
|
||||
import { load } from 'tiktoken/load';
|
||||
export { init, get_encoding, encoding_for_model, Tiktoken, load };
|
||||
@@ -0,0 +1,25 @@
|
||||
const path = require("path");
|
||||
|
||||
module.exports = {
|
||||
mode: "production",
|
||||
entry: "./tiktoken-export.js",
|
||||
output: {
|
||||
filename: "tiktoken.js",
|
||||
path: path.resolve(__dirname, "dist"),
|
||||
library: {
|
||||
type: "module"
|
||||
}
|
||||
},
|
||||
experiments: {
|
||||
outputModule: true,
|
||||
asyncWebAssembly: true
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.wasm$/,
|
||||
type: "asset/resource",
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,62 @@
|
||||
const kernelsReady = (async () => {
|
||||
// can't get browser to use updated versions except with cache-busting query string
|
||||
const exports = await import(`./net_clang.js?version=${Date.now()}`);
|
||||
Object.assign(self, exports);
|
||||
})();
|
||||
|
||||
async function init(event) {
|
||||
await kernelsReady;
|
||||
self.model = await self.transformer();
|
||||
self.addEventListener("message", loadStateDict);
|
||||
self.removeEventListener("message", init);
|
||||
self.postMessage("success");
|
||||
}
|
||||
|
||||
function loadStateDict(event) {
|
||||
if (event.data === "done") {
|
||||
self.addEventListener("message", inference);
|
||||
self.removeEventListener("message", loadStateDict);
|
||||
}
|
||||
else {
|
||||
if (event.data.length > 1) {
|
||||
// the bytes from files are set contiguously in WASM memory
|
||||
const malloc_size = event.data.reduce((sum, file) => sum + file.bytes.length, 0);
|
||||
const malloc_ptr = self.model.wasm._malloc(malloc_size);
|
||||
let cursor = 0;
|
||||
for (const file of event.data) {
|
||||
self.model.wasm.HEAPU8.set(file.bytes, malloc_ptr + cursor);
|
||||
for (const part of file.parts) {
|
||||
if (part.target_start_pos === 0) {
|
||||
// tell WASM code where the tensor is in memory
|
||||
self.model.wasm._set_buf(self.transformer_name_to_id[part.key], malloc_ptr + cursor);
|
||||
}
|
||||
cursor += part.size;
|
||||
}
|
||||
file.bytes = null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// the bytes from files are not guaranteed to be set contiguously in WASM memory
|
||||
const file = event.data[0];
|
||||
const malloc_ptr = self.model.wasm._malloc(file.size);
|
||||
self.model.wasm.HEAPU8.set(file.bytes, malloc_ptr);
|
||||
for (const part of file.parts) {
|
||||
if (part.target_start_pos === 0) {
|
||||
self.model.wasm._set_buf(self.transformer_name_to_id[part.key], malloc_ptr + part.file_start_pos);
|
||||
}
|
||||
}
|
||||
file.bytes = null;
|
||||
}
|
||||
}
|
||||
self.postMessage("success");
|
||||
}
|
||||
|
||||
function inference(event) {
|
||||
const [tok, start_pos] = event.data;
|
||||
const int32tok = new Int32Array([tok]);
|
||||
const model_out = self.model.run(new Uint8Array(int32tok.buffer), start_pos);
|
||||
const int32nextTok = new Int32Array(model_out[0].buffer);
|
||||
self.postMessage(int32nextTok[0]);
|
||||
}
|
||||
|
||||
self.addEventListener("message", init);
|
||||
@@ -0,0 +1,38 @@
|
||||
#!POPCORN leaderboard grayscale
|
||||
#!POPCORN gpu A100
|
||||
# not a stable API, but works
|
||||
|
||||
import torch, functools
|
||||
from tinygrad import Tensor, TinyJit, Device
|
||||
from tinygrad.engine.realize import CompiledRunner
|
||||
from tinygrad.helpers import get_single_element, Context, OSX
|
||||
from tinygrad.dtype import _from_torch_dtype
|
||||
|
||||
@TinyJit
|
||||
def f(tg_out, tg_data): return tg_out.assign(tg_data[:, :, 0] * 0.2989 + tg_data[:, :, 1] * 0.5870 + tg_data[:, :, 2] * 0.1140).realize()
|
||||
|
||||
def custom_kernel(data: torch.Tensor, device="CUDA") -> torch.Tensor:
|
||||
assert data.dtype == torch.float32
|
||||
tg_data = Tensor.from_blob(data.data_ptr(), data.shape, dtype=_from_torch_dtype(data.dtype), device=device)
|
||||
|
||||
out = torch.empty((data.shape[0], data.shape[1]), dtype=data.dtype, device=data.device)
|
||||
tg_out = Tensor.from_blob(out.data_ptr(), out.shape, dtype=_from_torch_dtype(out.dtype), device=device)
|
||||
|
||||
# Need to sync torch to make sure the data is valid.
|
||||
if data.device.type == "mps": torch.mps.synchronize()
|
||||
else: torch.cuda.synchronize()
|
||||
|
||||
with Context(BEAM=2): f(tg_out, tg_data)
|
||||
|
||||
# Wait for computation to finish and the data is valid.
|
||||
Device[device].synchronize()
|
||||
|
||||
return out
|
||||
|
||||
if __name__ == "__main__":
|
||||
for i in range(3):
|
||||
if OSX:
|
||||
out = custom_kernel(inp:=torch.rand(16, 16, 3, device=torch.device("mps")), device="METAL")
|
||||
else:
|
||||
out = custom_kernel(inp:=torch.rand(16, 16, 3, device=torch.device("cuda")), device="CUDA")
|
||||
assert torch.allclose(out, inp[:, :, 0] * 0.2989 + inp[:, :, 1] * 0.5870 + inp[:, :, 2] * 0.1140)
|
||||
@@ -105,12 +105,12 @@ class Vgg7:
|
||||
Output format: (1, 3, Y - 14, X - 14)
|
||||
(the - 14 represents the 7-pixel context border that is lost)
|
||||
"""
|
||||
x = self.conv1.forward(x).leakyrelu(0.1)
|
||||
x = self.conv2.forward(x).leakyrelu(0.1)
|
||||
x = self.conv3.forward(x).leakyrelu(0.1)
|
||||
x = self.conv4.forward(x).leakyrelu(0.1)
|
||||
x = self.conv5.forward(x).leakyrelu(0.1)
|
||||
x = self.conv6.forward(x).leakyrelu(0.1)
|
||||
x = self.conv1.forward(x).leaky_relu(0.1)
|
||||
x = self.conv2.forward(x).leaky_relu(0.1)
|
||||
x = self.conv3.forward(x).leaky_relu(0.1)
|
||||
x = self.conv4.forward(x).leaky_relu(0.1)
|
||||
x = self.conv5.forward(x).leaky_relu(0.1)
|
||||
x = self.conv6.forward(x).leaky_relu(0.1)
|
||||
x = self.conv7.forward(x)
|
||||
return x
|
||||
|
||||
|
||||
+4
-4
@@ -193,10 +193,10 @@ class Generator:
|
||||
x = self.conv_pre(x)
|
||||
if g is not None: x = x + self.cond(g)
|
||||
for i in range(self.num_upsamples):
|
||||
x = self.ups[i](x.leakyrelu(LRELU_SLOPE))
|
||||
x = self.ups[i](x.leaky_relu(LRELU_SLOPE))
|
||||
xs = sum(self.resblocks[i * self.num_kernels + j].forward(x) for j in range(self.num_kernels))
|
||||
x = (xs / self.num_kernels).realize()
|
||||
res = self.conv_post(x.leakyrelu()).tanh().realize()
|
||||
res = self.conv_post(x.leaky_relu()).tanh().realize()
|
||||
return res
|
||||
|
||||
class LayerNorm(nn.LayerNorm):
|
||||
@@ -238,8 +238,8 @@ class ResBlock1:
|
||||
self.convs2 = [nn.Conv1d(channels, channels, kernel_size, 1, dilation=1, padding=get_padding(kernel_size, 1)) for _ in range(3)]
|
||||
def forward(self, x: Tensor, x_mask=None):
|
||||
for c1, c2 in zip(self.convs1, self.convs2):
|
||||
xt = x.leakyrelu(LRELU_SLOPE)
|
||||
xt = c1(xt if x_mask is None else xt * x_mask).leakyrelu(LRELU_SLOPE)
|
||||
xt = x.leaky_relu(LRELU_SLOPE)
|
||||
xt = c1(xt if x_mask is None else xt * x_mask).leaky_relu(LRELU_SLOPE)
|
||||
x = c2(xt if x_mask is None else xt * x_mask) + x
|
||||
return x if x_mask is None else x * x_mask
|
||||
|
||||
|
||||
@@ -18,10 +18,6 @@ canvas { display: none; }
|
||||
</style>
|
||||
<title>tinygrad has WebGPU</title>
|
||||
<link rel="icon" type="image/x-icon" href="https://raw.githubusercontent.com/tinygrad/tinygrad/master/docs/logo.png">
|
||||
<script type="module">
|
||||
import model from "../../net.js";
|
||||
window.model = model;
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>WebGPU <a href="https://github.com/geohot/tinygrad">tinygrad</a> EfficientNet!</h1>
|
||||
@@ -49,7 +45,10 @@ canvas { display: none; }
|
||||
const getDevice = async () => {
|
||||
if (!navigator.gpu) error("WebGPU not supported.");
|
||||
const adapter = await navigator.gpu.requestAdapter();
|
||||
return await adapter.requestDevice();
|
||||
return await adapter.requestDevice({
|
||||
requiredFeatures: ["shader-f16"],
|
||||
powerPreference: "high-performance"
|
||||
});
|
||||
};
|
||||
|
||||
const timer = async (func, label = "") => {
|
||||
@@ -99,6 +98,7 @@ canvas { display: none; }
|
||||
resultText.innerHTML = "loading..."
|
||||
labels = await getLabels();
|
||||
const device = await getDevice();
|
||||
const model = (await import("../../net.js")).default;
|
||||
net = await timer(() => model.load(device, '../../net.safetensors'), "(compilation)");
|
||||
resultText.innerHTML = "ready"
|
||||
} catch (e) {
|
||||
|
||||
@@ -322,7 +322,9 @@
|
||||
requiredLimits.maxBufferSize = maxBufferSizeInSDModel;
|
||||
|
||||
return await adapter.requestDevice({
|
||||
requiredLimits
|
||||
requiredLimits,
|
||||
requiredFeatures: ["shader-f16"],
|
||||
powerPreference: "high-performance"
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -251,7 +251,10 @@
|
||||
const getDevice = async () => {
|
||||
if (!navigator.gpu) return false;
|
||||
const adapter = await navigator.gpu.requestAdapter();
|
||||
return await adapter.requestDevice();
|
||||
return await adapter.requestDevice({
|
||||
requiredFeatures: ["shader-f16"],
|
||||
powerPreference: "high-performance"
|
||||
});
|
||||
};
|
||||
|
||||
function processOutput(output, img_width, img_height) {
|
||||
|
||||
+1
-1
@@ -228,7 +228,7 @@ class Darknet:
|
||||
module.append(BatchNorm2d(filters, eps=1e-05, track_running_stats=True))
|
||||
# LeakyReLU activation
|
||||
if activation == "leaky":
|
||||
module.append(lambda x: x.leakyrelu(0.1))
|
||||
module.append(lambda x: x.leaky_relu(0.1))
|
||||
elif module_type == "maxpool":
|
||||
size, stride = int(x["size"]), int(x["stride"])
|
||||
module.append(lambda x: x.max_pool2d(kernel_size=(size, size), stride=stride))
|
||||
|
||||
@@ -3,7 +3,7 @@ import os
|
||||
from ultralytics import YOLO
|
||||
import onnx
|
||||
from pathlib import Path
|
||||
from extra.onnx import OnnxRunner
|
||||
from tinygrad.frontend.onnx import OnnxRunner
|
||||
from extra.onnx_helpers import get_example_inputs
|
||||
from tinygrad.tensor import Tensor
|
||||
|
||||
|
||||
Regular → Executable
+93
-15
@@ -1,14 +1,21 @@
|
||||
import time, mmap, sys, shutil, os, glob
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import time, mmap, sys, shutil, os, glob, subprocess
|
||||
from tinygrad.helpers import to_mv, DEBUG, colored, ansilen
|
||||
from tinygrad.runtime.autogen import libc
|
||||
from tinygrad.runtime.autogen.am import smu_v13_0_0
|
||||
from tinygrad.runtime.support.am.amdev import AMDev, AMMemoryManager
|
||||
from tinygrad.runtime.support.am.ip import AM_SOC21, AM_GMC, AM_IH, AM_PSP, AM_SMU, AM_GFX, AM_SDMA
|
||||
from tinygrad.runtime.support.am.ip import AM_SOC, AM_GMC, AM_IH, AM_PSP, AM_SMU, AM_GFX, AM_SDMA
|
||||
|
||||
AM_VERSION = 0xA0000002
|
||||
SMU_11_0_GFX_BUSY_THRESHOLD = 15
|
||||
|
||||
def bold(s): return f"\033[1m{s}\033[0m"
|
||||
|
||||
def trim(s:str, length:int) -> str:
|
||||
if len(s) > length: return s[:length-3] + "..."
|
||||
return s
|
||||
|
||||
def color_temp(temp):
|
||||
if temp >= 87: return colored(f"{temp:>3}", "red")
|
||||
elif temp >= 80: return colored(f"{temp:>3}", "yellow")
|
||||
@@ -21,7 +28,10 @@ def draw_bar(percentage, width=40, fill='█', empty='░'):
|
||||
bar = fill * filled_width + empty * (width - filled_width)
|
||||
return f'[{bar}] {percentage*100:5.1f}%'
|
||||
|
||||
def same_line(strs:list[list[str]], split=8) -> list[str]:
|
||||
def same_line(strs:list[list[str]|None], split=8) -> list[str]:
|
||||
strs = [s for s in strs if s is not None]
|
||||
if len(strs) == 0: return []
|
||||
|
||||
ret = []
|
||||
max_width_in_block = [max(ansilen(line) for line in block) for block in strs]
|
||||
max_height = max(len(block) for block in strs)
|
||||
@@ -48,7 +58,10 @@ class AMSMI(AMDev):
|
||||
def __init__(self, pcibus, vram_bar:memoryview, doorbell_bar:memoryview, mmio_bar:memoryview):
|
||||
self.pcibus = pcibus
|
||||
self.vram, self.doorbell64, self.mmio = vram_bar, doorbell_bar, mmio_bar
|
||||
self.pci_state = self.read_pci_state()
|
||||
if self.pci_state == "D0": self._init_from_d0()
|
||||
|
||||
def _init_from_d0(self):
|
||||
self._run_discovery()
|
||||
self._build_regs()
|
||||
|
||||
@@ -60,18 +73,30 @@ class AMSMI(AMDev):
|
||||
self.mm = AMMemoryManager(self, self.vram_size)
|
||||
|
||||
# Initialize IP blocks
|
||||
self.soc21:AM_SOC21 = AM_SOC21(self)
|
||||
self.soc:AM_SOC = AM_SOC(self)
|
||||
self.gmc:AM_GMC = AM_GMC(self)
|
||||
self.ih:AM_IH = AM_IH(self)
|
||||
self.psp:AM_PSP = AM_PSP(self)
|
||||
self.smu:AM_SMU = AM_SMU(self)
|
||||
|
||||
for ip in [self.soc, self.gmc, self.ih, self.psp, self.smu]: ip.init_sw()
|
||||
|
||||
def read_pci_state(self):
|
||||
with open(f"/sys/bus/pci/devices/{self.pcibus}/power_state", "r") as f: return f.read().strip().rstrip()
|
||||
|
||||
class SMICtx:
|
||||
def __init__(self):
|
||||
self.devs = []
|
||||
self.opened_pcidevs = []
|
||||
self.opened_pci_resources = {}
|
||||
self.prev_lines_cnt = 0
|
||||
self.prev_terminal_width = 0
|
||||
|
||||
remove_parts = ["Advanced Micro Devices, Inc. [AMD/ATI]", "VGA compatible controller:"]
|
||||
lspci = subprocess.check_output(["lspci"]).decode("utf-8").splitlines()
|
||||
self.lspci = {l.split()[0]: l.split(" ", 1)[1] for l in lspci}
|
||||
for k,v in self.lspci.items():
|
||||
for part in remove_parts: self.lspci[k] = self.lspci[k].replace(part, "").strip().rstrip()
|
||||
|
||||
def _open_am_device(self, pcibus):
|
||||
if pcibus not in self.opened_pci_resources:
|
||||
@@ -98,36 +123,67 @@ class SMICtx:
|
||||
self._open_am_device(d)
|
||||
|
||||
for d in self.devs:
|
||||
if d.reg("regSCRATCH_REG7").read() != AM_VERSION:
|
||||
if d.read_pci_state() != d.pci_state:
|
||||
d.pci_state = d.read_pci_state()
|
||||
if d.pci_state == "D0": d._init_from_d0()
|
||||
os.system('clear')
|
||||
|
||||
if d.pci_state == "D0" and d.reg("regSCRATCH_REG7").read() != AM_VERSION:
|
||||
self.devs.remove(d)
|
||||
self.opened_pcidevs.remove(d.pcibus)
|
||||
os.system('clear')
|
||||
if DEBUG >= 2: print(f"Removed AM device {d.pcibus}")
|
||||
|
||||
def collect(self): return {d: d.smu.read_metrics() for d in self.devs}
|
||||
def collect(self): return {d: d.smu.read_metrics() if d.pci_state == "D0" else None for d in self.devs}
|
||||
|
||||
def draw(self):
|
||||
terminal_width, _ = shutil.get_terminal_size()
|
||||
terminal_width, terminal_height = shutil.get_terminal_size()
|
||||
if self.prev_terminal_width != terminal_width or self.prev_terminal_height != terminal_height:
|
||||
os.system('clear')
|
||||
self.prev_terminal_width, self.prev_terminal_height = terminal_width, terminal_height
|
||||
|
||||
activity_line_width = 50 if self.prev_terminal_width > 170 else \
|
||||
(30 if self.prev_terminal_width > 130 else \
|
||||
(16 if self.prev_terminal_width > 92 else \
|
||||
max(0, self.prev_terminal_width - 77)))
|
||||
max_col_size = terminal_width // 2
|
||||
|
||||
dev_metrics = self.collect()
|
||||
dev_content = []
|
||||
for dev, metrics in dev_metrics.items():
|
||||
device_line = [f"PCIe device: {bold(dev.pcibus)}"] + [""]
|
||||
activity_line = [f"GFX Activity {draw_bar(metrics.SmuMetrics.AverageGfxActivity / 100, 50)}"] \
|
||||
+ [f"MEM Activity {draw_bar(metrics.SmuMetrics.AverageUclkActivity / 100, 50)}"] + [""]
|
||||
if dev.pci_state != "D0":
|
||||
dev_content.append([f"{colored('(sleep)', 'yellow')} {bold(dev.pcibus)}: {self.lspci[dev.pcibus[5:]]}"] +
|
||||
[f"PCI State: {dev.pci_state}"] + [" "*107])
|
||||
continue
|
||||
|
||||
device_line = [f"{bold(dev.pcibus)} {trim(self.lspci[dev.pcibus[5:]], max_col_size - 24)}"] + [""]
|
||||
activity_line = [f"GFX Activity {draw_bar(metrics.SmuMetrics.AverageGfxActivity / 100, activity_line_width)}"] \
|
||||
+ [f"MEM Activity {draw_bar(metrics.SmuMetrics.AverageUclkActivity / 100, activity_line_width)}"]
|
||||
|
||||
# draw_metrics_table(metrics, dev)
|
||||
temps_keys = [(k, name) for k, name in smu_v13_0_0.c__EA_TEMP_e__enumvalues.items()
|
||||
if k < smu_v13_0_0.TEMP_COUNT and metrics.SmuMetrics.AvgTemperature[k] != 0]
|
||||
temps_table = ["=== Temps (C) ==="] + [f"{name:<15}: {color_temp(metrics.SmuMetrics.AvgTemperature[k])}" for k, name in temps_keys]
|
||||
temps_table = ["=== Temps (°C) ==="] + [f"{name:<15}: {color_temp(metrics.SmuMetrics.AvgTemperature[k])}" for k, name in temps_keys]
|
||||
temps_table_compact = [f"Temps (°C): {color_temp(metrics.SmuMetrics.AvgTemperature[smu_v13_0_0.TEMP_HOTSPOT])} hotspot /" \
|
||||
+ f"{color_temp(metrics.SmuMetrics.AvgTemperature[smu_v13_0_0.TEMP_MEM])} mem"]
|
||||
|
||||
voltage_keys = [(k, name) for k, name in smu_v13_0_0.c__EA_SVI_PLANE_e__enumvalues.items() if k < smu_v13_0_0.SVI_PLANE_COUNT]
|
||||
power_table = ["=== Power ==="] \
|
||||
+ [f"Fan Speed: {metrics.SmuMetrics.AvgFanRpm} RPM"] \
|
||||
+ [f"Fan Power: {metrics.SmuMetrics.AvgFanPwm}%"] \
|
||||
+ [f"Power: {metrics.SmuMetrics.AverageSocketPower:>3}W " +
|
||||
draw_bar(metrics.SmuMetrics.AverageSocketPower / metrics.SmuMetrics.dGPU_W_MAX, 16)] \
|
||||
+ ["", "=== Voltages ==="] + [f"{name:<20}: {color_voltage(metrics.SmuMetrics.AvgVoltage[k])}" for k, name in voltage_keys]
|
||||
+ [f"Fan Power: {metrics.SmuMetrics.AvgFanPwm}%"]
|
||||
power_line = [f"Power: {metrics.SmuMetrics.AverageSocketPower:>3}W " +
|
||||
draw_bar(metrics.SmuMetrics.AverageSocketPower / metrics.SmuMetrics.dGPU_W_MAX, 16)]
|
||||
power_line_compact = [f"Power: {metrics.SmuMetrics.AverageSocketPower:>3}W " +
|
||||
draw_bar(metrics.SmuMetrics.AverageSocketPower / metrics.SmuMetrics.dGPU_W_MAX, activity_line_width)]
|
||||
|
||||
voltage_table = ["=== Voltages ==="] + [f"{name:<20}: {color_voltage(metrics.SmuMetrics.AvgVoltage[k])}" for k, name in voltage_keys]
|
||||
|
||||
gfx_freq = (metrics.SmuMetrics.AverageGfxclkFrequencyPostDs if metrics.SmuMetrics.AverageGfxActivity <= SMU_11_0_GFX_BUSY_THRESHOLD else \
|
||||
metrics.SmuMetrics.AverageGfxclkFrequencyPreDs)
|
||||
fclk_freq = (metrics.SmuMetrics.AverageFclkFrequencyPostDs if metrics.SmuMetrics.AverageUclkActivity <= SMU_11_0_GFX_BUSY_THRESHOLD else \
|
||||
metrics.SmuMetrics.AverageFclkFrequencyPreDs)
|
||||
mclk_freq = (metrics.SmuMetrics.AverageMemclkFrequencyPostDs if metrics.SmuMetrics.AverageUclkActivity <= SMU_11_0_GFX_BUSY_THRESHOLD else \
|
||||
metrics.SmuMetrics.AverageMemclkFrequencyPreDs)
|
||||
|
||||
frequency_table = ["=== Frequencies ===",
|
||||
f"GFXCLK Target : {metrics.SmuMetrics.AverageGfxclkFrequencyTarget:>4} MHz",
|
||||
@@ -142,6 +198,28 @@ class SMICtx:
|
||||
f"VCLK1 : {metrics.SmuMetrics.AverageVclk1Frequency:>4} MHz",
|
||||
f"DCLK1 : {metrics.SmuMetrics.AverageDclk1Frequency:>4} MHz"]
|
||||
|
||||
frequency_table_compact = ["=== Frequencies ===",
|
||||
f"GFXCLK: {gfx_freq:>4} MHz",
|
||||
f"FCLK : {fclk_freq:>4} MHz",
|
||||
f"MCLK : {mclk_freq:>4} MHz"]
|
||||
|
||||
if self.prev_terminal_width >= 231:
|
||||
power_table += power_line + [""] + voltage_table
|
||||
activity_line += [""]
|
||||
elif self.prev_terminal_width >= 171:
|
||||
power_table += power_line + [""] + frequency_table_compact
|
||||
activity_line += [""]
|
||||
frequency_table = None
|
||||
elif self.prev_terminal_width >= 121:
|
||||
temps_table = None
|
||||
frequency_table = frequency_table_compact
|
||||
activity_line += power_line_compact
|
||||
else:
|
||||
temps_table = None
|
||||
power_table = None
|
||||
frequency_table = None
|
||||
activity_line += power_line_compact
|
||||
|
||||
dev_content.append(device_line + activity_line + same_line([temps_table, power_table, frequency_table]))
|
||||
|
||||
raw_text = 'AM Monitor'.center(terminal_width) + "\n" + "=" * terminal_width + "\n\n"
|
||||
|
||||
+422
-389
@@ -21,395 +21,426 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _DISCOVERY_H_
|
||||
#define _DISCOVERY_H_
|
||||
|
||||
#define uint32_t unsigned int
|
||||
#define uint8_t unsigned char
|
||||
#define uint16_t unsigned short
|
||||
#define uint64_t unsigned long long
|
||||
#define u32 unsigned int
|
||||
#define u8 unsigned char
|
||||
#define u16 unsigned short
|
||||
#define u64 unsigned long long
|
||||
#define bool unsigned char
|
||||
|
||||
#define PSP_HEADER_SIZE 256
|
||||
#define BINARY_SIGNATURE 0x28211407
|
||||
#define DISCOVERY_TABLE_SIGNATURE 0x53445049
|
||||
#define GC_TABLE_ID 0x4347
|
||||
#define HARVEST_TABLE_SIGNATURE 0x56524148
|
||||
#define VCN_INFO_TABLE_ID 0x004E4356
|
||||
#define MALL_INFO_TABLE_ID 0x4C4C414D
|
||||
#define NPS_INFO_TABLE_ID 0x0053504E
|
||||
|
||||
typedef enum {
|
||||
IP_DISCOVERY = 0,
|
||||
GC,
|
||||
HARVEST_INFO,
|
||||
VCN_INFO,
|
||||
MALL_INFO,
|
||||
NPS_INFO,
|
||||
TOTAL_TABLES = 6
|
||||
} table;
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
typedef struct table_info
|
||||
{
|
||||
uint16_t offset; /* Byte offset */
|
||||
uint16_t checksum; /* Byte sum of the table */
|
||||
uint16_t size; /* Table size */
|
||||
uint16_t padding;
|
||||
} table_info;
|
||||
|
||||
typedef struct binary_header
|
||||
{
|
||||
/* psp structure should go at the top of this structure */
|
||||
uint32_t binary_signature; /* 0x7, 0x14, 0x21, 0x28 */
|
||||
uint16_t version_major;
|
||||
uint16_t version_minor;
|
||||
uint16_t binary_checksum; /* Byte sum of the binary after this field */
|
||||
uint16_t binary_size; /* Binary Size*/
|
||||
table_info table_list[TOTAL_TABLES];
|
||||
} binary_header;
|
||||
|
||||
typedef struct die_info
|
||||
{
|
||||
uint16_t die_id;
|
||||
uint16_t die_offset; /* Points to the corresponding die_header structure */
|
||||
} die_info;
|
||||
|
||||
|
||||
typedef struct ip_discovery_header
|
||||
{
|
||||
uint32_t signature; /* Table Signature */
|
||||
uint16_t version; /* Table Version */
|
||||
uint16_t size; /* Table Size */
|
||||
uint32_t id; /* Table ID */
|
||||
uint16_t num_dies; /* Number of Dies */
|
||||
die_info die_info[16]; /* list die information for up to 16 dies */
|
||||
union {
|
||||
uint16_t padding[1]; /* version <= 3 */
|
||||
struct { /* version == 4 */
|
||||
uint8_t base_addr_64_bit : 1; /* ip structures are using 64 bit base address */
|
||||
uint8_t reserved : 7;
|
||||
uint8_t reserved2;
|
||||
};
|
||||
};
|
||||
} ip_discovery_header;
|
||||
|
||||
typedef struct ip
|
||||
{
|
||||
uint16_t hw_id; /* Hardware ID */
|
||||
uint8_t number_instance; /* instance of the IP */
|
||||
uint8_t num_base_address; /* Number of Base Addresses */
|
||||
uint8_t major; /* HCID Major */
|
||||
uint8_t minor; /* HCID Minor */
|
||||
uint8_t revision; /* HCID Revision */
|
||||
#if defined(__BIG_ENDIAN)
|
||||
uint8_t reserved : 4; /* Placeholder field */
|
||||
uint8_t harvest : 4; /* Harvest */
|
||||
#else
|
||||
uint8_t harvest : 4; /* Harvest */
|
||||
uint8_t reserved : 4; /* Placeholder field */
|
||||
#endif
|
||||
uint32_t base_address[1]; /* variable number of Addresses */
|
||||
} ip;
|
||||
|
||||
typedef struct ip_v3
|
||||
{
|
||||
uint16_t hw_id; /* Hardware ID */
|
||||
uint8_t instance_number; /* Instance number for the IP */
|
||||
uint8_t num_base_address; /* Number of base addresses*/
|
||||
uint8_t major; /* Hardware ID.major version */
|
||||
uint8_t minor; /* Hardware ID.minor version */
|
||||
uint8_t revision; /* Hardware ID.revision version */
|
||||
#if defined(__BIG_ENDIAN)
|
||||
uint8_t variant : 4; /* HW variant */
|
||||
uint8_t sub_revision : 4; /* HCID Sub-Revision */
|
||||
#else
|
||||
uint8_t sub_revision : 4; /* HCID Sub-Revision */
|
||||
uint8_t variant : 4; /* HW variant */
|
||||
#endif
|
||||
uint32_t base_address[1]; /* Base Address list. Corresponds to the num_base_address field*/
|
||||
} ip_v3;
|
||||
|
||||
typedef struct ip_v4 {
|
||||
uint16_t hw_id; /* Hardware ID */
|
||||
uint8_t instance_number; /* Instance number for the IP */
|
||||
uint8_t num_base_address; /* Number of base addresses*/
|
||||
uint8_t major; /* Hardware ID.major version */
|
||||
uint8_t minor; /* Hardware ID.minor version */
|
||||
uint8_t revision; /* Hardware ID.revision version */
|
||||
#if defined(LITTLEENDIAN_CPU)
|
||||
uint8_t sub_revision : 4; /* HCID Sub-Revision */
|
||||
uint8_t variant : 4; /* HW variant */
|
||||
#elif defined(BIGENDIAN_CPU)
|
||||
uint8_t variant : 4; /* HW variant */
|
||||
uint8_t sub_revision : 4; /* HCID Sub-Revision */
|
||||
#endif
|
||||
uint64_t base_address_64[1];
|
||||
} ip_v4;
|
||||
|
||||
typedef struct die_header
|
||||
{
|
||||
uint16_t die_id;
|
||||
uint16_t num_ips;
|
||||
} die_header;
|
||||
|
||||
typedef struct ip_structure
|
||||
{
|
||||
ip_discovery_header* header;
|
||||
struct die
|
||||
{
|
||||
die_header *die_header;
|
||||
union
|
||||
{
|
||||
ip *ip_list;
|
||||
ip_v3 *ip_v3_list;
|
||||
ip_v4 *ip_v4_list;
|
||||
}; /* IP list. Variable size*/
|
||||
} die;
|
||||
} ip_structure;
|
||||
|
||||
struct gpu_info_header {
|
||||
uint32_t table_id; /* table ID */
|
||||
uint16_t version_major; /* table version */
|
||||
uint16_t version_minor; /* table version */
|
||||
uint32_t size; /* size of the entire header+data in bytes */
|
||||
};
|
||||
|
||||
struct gc_info_v1_0 {
|
||||
struct gpu_info_header header;
|
||||
|
||||
uint32_t gc_num_se;
|
||||
uint32_t gc_num_wgp0_per_sa;
|
||||
uint32_t gc_num_wgp1_per_sa;
|
||||
uint32_t gc_num_rb_per_se;
|
||||
uint32_t gc_num_gl2c;
|
||||
uint32_t gc_num_gprs;
|
||||
uint32_t gc_num_max_gs_thds;
|
||||
uint32_t gc_gs_table_depth;
|
||||
uint32_t gc_gsprim_buff_depth;
|
||||
uint32_t gc_parameter_cache_depth;
|
||||
uint32_t gc_double_offchip_lds_buffer;
|
||||
uint32_t gc_wave_size;
|
||||
uint32_t gc_max_waves_per_simd;
|
||||
uint32_t gc_max_scratch_slots_per_cu;
|
||||
uint32_t gc_lds_size;
|
||||
uint32_t gc_num_sc_per_se;
|
||||
uint32_t gc_num_sa_per_se;
|
||||
uint32_t gc_num_packer_per_sc;
|
||||
uint32_t gc_num_gl2a;
|
||||
};
|
||||
|
||||
struct gc_info_v1_1 {
|
||||
struct gpu_info_header header;
|
||||
|
||||
uint32_t gc_num_se;
|
||||
uint32_t gc_num_wgp0_per_sa;
|
||||
uint32_t gc_num_wgp1_per_sa;
|
||||
uint32_t gc_num_rb_per_se;
|
||||
uint32_t gc_num_gl2c;
|
||||
uint32_t gc_num_gprs;
|
||||
uint32_t gc_num_max_gs_thds;
|
||||
uint32_t gc_gs_table_depth;
|
||||
uint32_t gc_gsprim_buff_depth;
|
||||
uint32_t gc_parameter_cache_depth;
|
||||
uint32_t gc_double_offchip_lds_buffer;
|
||||
uint32_t gc_wave_size;
|
||||
uint32_t gc_max_waves_per_simd;
|
||||
uint32_t gc_max_scratch_slots_per_cu;
|
||||
uint32_t gc_lds_size;
|
||||
uint32_t gc_num_sc_per_se;
|
||||
uint32_t gc_num_sa_per_se;
|
||||
uint32_t gc_num_packer_per_sc;
|
||||
uint32_t gc_num_gl2a;
|
||||
uint32_t gc_num_tcp_per_sa;
|
||||
uint32_t gc_num_sdp_interface;
|
||||
uint32_t gc_num_tcps;
|
||||
};
|
||||
|
||||
struct gc_info_v1_2 {
|
||||
struct gpu_info_header header;
|
||||
uint32_t gc_num_se;
|
||||
uint32_t gc_num_wgp0_per_sa;
|
||||
uint32_t gc_num_wgp1_per_sa;
|
||||
uint32_t gc_num_rb_per_se;
|
||||
uint32_t gc_num_gl2c;
|
||||
uint32_t gc_num_gprs;
|
||||
uint32_t gc_num_max_gs_thds;
|
||||
uint32_t gc_gs_table_depth;
|
||||
uint32_t gc_gsprim_buff_depth;
|
||||
uint32_t gc_parameter_cache_depth;
|
||||
uint32_t gc_double_offchip_lds_buffer;
|
||||
uint32_t gc_wave_size;
|
||||
uint32_t gc_max_waves_per_simd;
|
||||
uint32_t gc_max_scratch_slots_per_cu;
|
||||
uint32_t gc_lds_size;
|
||||
uint32_t gc_num_sc_per_se;
|
||||
uint32_t gc_num_sa_per_se;
|
||||
uint32_t gc_num_packer_per_sc;
|
||||
uint32_t gc_num_gl2a;
|
||||
uint32_t gc_num_tcp_per_sa;
|
||||
uint32_t gc_num_sdp_interface;
|
||||
uint32_t gc_num_tcps;
|
||||
uint32_t gc_num_tcp_per_wpg;
|
||||
uint32_t gc_tcp_l1_size;
|
||||
uint32_t gc_num_sqc_per_wgp;
|
||||
uint32_t gc_l1_instruction_cache_size_per_sqc;
|
||||
uint32_t gc_l1_data_cache_size_per_sqc;
|
||||
uint32_t gc_gl1c_per_sa;
|
||||
uint32_t gc_gl1c_size_per_instance;
|
||||
uint32_t gc_gl2c_per_gpu;
|
||||
};
|
||||
|
||||
struct gc_info_v2_0 {
|
||||
struct gpu_info_header header;
|
||||
|
||||
uint32_t gc_num_se;
|
||||
uint32_t gc_num_cu_per_sh;
|
||||
uint32_t gc_num_sh_per_se;
|
||||
uint32_t gc_num_rb_per_se;
|
||||
uint32_t gc_num_tccs;
|
||||
uint32_t gc_num_gprs;
|
||||
uint32_t gc_num_max_gs_thds;
|
||||
uint32_t gc_gs_table_depth;
|
||||
uint32_t gc_gsprim_buff_depth;
|
||||
uint32_t gc_parameter_cache_depth;
|
||||
uint32_t gc_double_offchip_lds_buffer;
|
||||
uint32_t gc_wave_size;
|
||||
uint32_t gc_max_waves_per_simd;
|
||||
uint32_t gc_max_scratch_slots_per_cu;
|
||||
uint32_t gc_lds_size;
|
||||
uint32_t gc_num_sc_per_se;
|
||||
uint32_t gc_num_packer_per_sc;
|
||||
};
|
||||
|
||||
struct gc_info_v2_1 {
|
||||
struct gpu_info_header header;
|
||||
|
||||
uint32_t gc_num_se;
|
||||
uint32_t gc_num_cu_per_sh;
|
||||
uint32_t gc_num_sh_per_se;
|
||||
uint32_t gc_num_rb_per_se;
|
||||
uint32_t gc_num_tccs;
|
||||
uint32_t gc_num_gprs;
|
||||
uint32_t gc_num_max_gs_thds;
|
||||
uint32_t gc_gs_table_depth;
|
||||
uint32_t gc_gsprim_buff_depth;
|
||||
uint32_t gc_parameter_cache_depth;
|
||||
uint32_t gc_double_offchip_lds_buffer;
|
||||
uint32_t gc_wave_size;
|
||||
uint32_t gc_max_waves_per_simd;
|
||||
uint32_t gc_max_scratch_slots_per_cu;
|
||||
uint32_t gc_lds_size;
|
||||
uint32_t gc_num_sc_per_se;
|
||||
uint32_t gc_num_packer_per_sc;
|
||||
/* new for v2_1 */
|
||||
uint32_t gc_num_tcp_per_sh;
|
||||
uint32_t gc_tcp_size_per_cu;
|
||||
uint32_t gc_num_sdp_interface;
|
||||
uint32_t gc_num_cu_per_sqc;
|
||||
uint32_t gc_instruction_cache_size_per_sqc;
|
||||
uint32_t gc_scalar_data_cache_size_per_sqc;
|
||||
uint32_t gc_tcc_size;
|
||||
};
|
||||
|
||||
typedef struct harvest_info_header {
|
||||
uint32_t signature; /* Table Signature */
|
||||
uint32_t version; /* Table Version */
|
||||
} harvest_info_header;
|
||||
|
||||
typedef struct harvest_info {
|
||||
uint16_t hw_id; /* Hardware ID */
|
||||
uint8_t number_instance; /* Instance of the IP */
|
||||
uint8_t reserved; /* Reserved for alignment */
|
||||
} harvest_info;
|
||||
|
||||
typedef struct harvest_table {
|
||||
harvest_info_header header;
|
||||
harvest_info list[32];
|
||||
} harvest_table;
|
||||
|
||||
struct mall_info_header {
|
||||
uint32_t table_id; /* table ID */
|
||||
uint16_t version_major; /* table version */
|
||||
uint16_t version_minor; /* table version */
|
||||
uint32_t size_bytes; /* size of the entire header+data in bytes */
|
||||
};
|
||||
|
||||
struct mall_info_v1_0 {
|
||||
struct mall_info_header header;
|
||||
uint32_t mall_size_per_m;
|
||||
uint32_t m_s_present;
|
||||
uint32_t m_half_use;
|
||||
uint32_t m_mall_config;
|
||||
uint32_t reserved[5];
|
||||
};
|
||||
|
||||
struct mall_info_v2_0 {
|
||||
struct mall_info_header header;
|
||||
uint32_t mall_size_per_umc;
|
||||
uint32_t reserved[8];
|
||||
};
|
||||
|
||||
#define VCN_INFO_TABLE_MAX_NUM_INSTANCES 4
|
||||
|
||||
struct vcn_info_header {
|
||||
uint32_t table_id; /* table ID */
|
||||
uint16_t version_major; /* table version */
|
||||
uint16_t version_minor; /* table version */
|
||||
uint32_t size_bytes; /* size of the entire header+data in bytes */
|
||||
};
|
||||
|
||||
struct vcn_instance_info_v1_0
|
||||
{
|
||||
uint32_t instance_num; /* VCN IP instance number. 0 - VCN0; 1 - VCN1 etc*/
|
||||
union _fuse_data {
|
||||
struct {
|
||||
uint32_t av1_disabled : 1;
|
||||
uint32_t vp9_disabled : 1;
|
||||
uint32_t hevc_disabled : 1;
|
||||
uint32_t h264_disabled : 1;
|
||||
uint32_t reserved : 28;
|
||||
} bits;
|
||||
uint32_t all_bits;
|
||||
} fuse_data;
|
||||
uint32_t reserved[2];
|
||||
};
|
||||
|
||||
struct vcn_info_v1_0 {
|
||||
struct vcn_info_header header;
|
||||
uint32_t num_of_instances; /* number of entries used in instance_info below*/
|
||||
struct vcn_instance_info_v1_0 instance_info[VCN_INFO_TABLE_MAX_NUM_INSTANCES];
|
||||
uint32_t reserved[4];
|
||||
};
|
||||
|
||||
#define NPS_INFO_TABLE_MAX_NUM_INSTANCES 12
|
||||
|
||||
struct nps_info_header {
|
||||
uint32_t table_id; /* table ID */
|
||||
uint16_t version_major; /* table version */
|
||||
uint16_t version_minor; /* table version */
|
||||
uint32_t size_bytes; /* size of the entire header+data in bytes = 0x000000D4 (212) */
|
||||
};
|
||||
|
||||
struct nps_instance_info_v1_0 {
|
||||
uint64_t base_address;
|
||||
uint64_t limit_address;
|
||||
};
|
||||
|
||||
struct nps_info_v1_0 {
|
||||
struct nps_info_header header;
|
||||
uint32_t nps_type;
|
||||
uint32_t count;
|
||||
struct nps_instance_info_v1_0
|
||||
instance_info[NPS_INFO_TABLE_MAX_NUM_INSTANCES];
|
||||
};
|
||||
|
||||
enum amd_hw_ip_block_type {
|
||||
#ifndef _DISCOVERY_H_
|
||||
#define _DISCOVERY_H_
|
||||
|
||||
#define PSP_HEADER_SIZE 256
|
||||
#define BINARY_SIGNATURE 0x28211407
|
||||
#define DISCOVERY_TABLE_SIGNATURE 0x53445049
|
||||
#define GC_TABLE_ID 0x4347
|
||||
#define HARVEST_TABLE_SIGNATURE 0x56524148
|
||||
#define VCN_INFO_TABLE_ID 0x004E4356
|
||||
#define MALL_INFO_TABLE_ID 0x4C4C414D
|
||||
#define NPS_INFO_TABLE_ID 0x0053504E
|
||||
|
||||
typedef enum {
|
||||
IP_DISCOVERY = 0,
|
||||
GC,
|
||||
HARVEST_INFO,
|
||||
VCN_INFO,
|
||||
MALL_INFO,
|
||||
NPS_INFO,
|
||||
TOTAL_TABLES = 6
|
||||
} table;
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
typedef struct table_info
|
||||
{
|
||||
uint16_t offset; /* Byte offset */
|
||||
uint16_t checksum; /* Byte sum of the table */
|
||||
uint16_t size; /* Table size */
|
||||
uint16_t padding;
|
||||
} table_info;
|
||||
|
||||
typedef struct binary_header
|
||||
{
|
||||
/* psp structure should go at the top of this structure */
|
||||
uint32_t binary_signature; /* 0x7, 0x14, 0x21, 0x28 */
|
||||
uint16_t version_major;
|
||||
uint16_t version_minor;
|
||||
uint16_t binary_checksum; /* Byte sum of the binary after this field */
|
||||
uint16_t binary_size; /* Binary Size*/
|
||||
table_info table_list[TOTAL_TABLES];
|
||||
} binary_header;
|
||||
|
||||
typedef struct die_info
|
||||
{
|
||||
uint16_t die_id;
|
||||
uint16_t die_offset; /* Points to the corresponding die_header structure */
|
||||
} die_info;
|
||||
|
||||
|
||||
typedef struct ip_discovery_header
|
||||
{
|
||||
uint32_t signature; /* Table Signature */
|
||||
uint16_t version; /* Table Version */
|
||||
uint16_t size; /* Table Size */
|
||||
uint32_t id; /* Table ID */
|
||||
uint16_t num_dies; /* Number of Dies */
|
||||
die_info die_info[16]; /* list die information for up to 16 dies */
|
||||
union {
|
||||
uint16_t padding[1]; /* version <= 3 */
|
||||
struct { /* version == 4 */
|
||||
uint8_t base_addr_64_bit : 1; /* ip structures are using 64 bit base address */
|
||||
uint8_t reserved : 7;
|
||||
uint8_t reserved2;
|
||||
};
|
||||
};
|
||||
} ip_discovery_header;
|
||||
|
||||
typedef struct ip
|
||||
{
|
||||
uint16_t hw_id; /* Hardware ID */
|
||||
uint8_t number_instance; /* instance of the IP */
|
||||
uint8_t num_base_address; /* Number of Base Addresses */
|
||||
uint8_t major; /* HCID Major */
|
||||
uint8_t minor; /* HCID Minor */
|
||||
uint8_t revision; /* HCID Revision */
|
||||
#if defined(__BIG_ENDIAN)
|
||||
uint8_t reserved : 4; /* Placeholder field */
|
||||
uint8_t harvest : 4; /* Harvest */
|
||||
#else
|
||||
uint8_t harvest : 4; /* Harvest */
|
||||
uint8_t reserved : 4; /* Placeholder field */
|
||||
#endif
|
||||
uint32_t base_address[]; /* variable number of Addresses */
|
||||
} ip;
|
||||
|
||||
typedef struct ip_v3
|
||||
{
|
||||
uint16_t hw_id; /* Hardware ID */
|
||||
uint8_t instance_number; /* Instance number for the IP */
|
||||
uint8_t num_base_address; /* Number of base addresses*/
|
||||
uint8_t major; /* Hardware ID.major version */
|
||||
uint8_t minor; /* Hardware ID.minor version */
|
||||
uint8_t revision; /* Hardware ID.revision version */
|
||||
#if defined(__BIG_ENDIAN)
|
||||
uint8_t variant : 4; /* HW variant */
|
||||
uint8_t sub_revision : 4; /* HCID Sub-Revision */
|
||||
#else
|
||||
uint8_t sub_revision : 4; /* HCID Sub-Revision */
|
||||
uint8_t variant : 4; /* HW variant */
|
||||
#endif
|
||||
uint32_t base_address[]; /* Base Address list. Corresponds to the num_base_address field*/
|
||||
} ip_v3;
|
||||
|
||||
typedef struct ip_v4 {
|
||||
uint16_t hw_id; /* Hardware ID */
|
||||
uint8_t instance_number; /* Instance number for the IP */
|
||||
uint8_t num_base_address; /* Number of base addresses*/
|
||||
uint8_t major; /* Hardware ID.major version */
|
||||
uint8_t minor; /* Hardware ID.minor version */
|
||||
uint8_t revision; /* Hardware ID.revision version */
|
||||
#if defined(LITTLEENDIAN_CPU)
|
||||
uint8_t sub_revision : 4; /* HCID Sub-Revision */
|
||||
uint8_t variant : 4; /* HW variant */
|
||||
#elif defined(BIGENDIAN_CPU)
|
||||
uint8_t variant : 4; /* HW variant */
|
||||
uint8_t sub_revision : 4; /* HCID Sub-Revision */
|
||||
#endif
|
||||
} ip_v4;
|
||||
|
||||
typedef struct die_header
|
||||
{
|
||||
uint16_t die_id;
|
||||
uint16_t num_ips;
|
||||
} die_header;
|
||||
|
||||
typedef struct ip_structure
|
||||
{
|
||||
ip_discovery_header* header;
|
||||
struct die
|
||||
{
|
||||
die_header *die_header;
|
||||
union
|
||||
{
|
||||
ip *ip_list;
|
||||
ip_v3 *ip_v3_list;
|
||||
ip_v4 *ip_v4_list;
|
||||
}; /* IP list. Variable size*/
|
||||
} die;
|
||||
} ip_structure;
|
||||
|
||||
struct gpu_info_header {
|
||||
uint32_t table_id; /* table ID */
|
||||
uint16_t version_major; /* table version */
|
||||
uint16_t version_minor; /* table version */
|
||||
uint32_t size; /* size of the entire header+data in bytes */
|
||||
};
|
||||
|
||||
struct gc_info_v1_0 {
|
||||
struct gpu_info_header header;
|
||||
|
||||
uint32_t gc_num_se;
|
||||
uint32_t gc_num_wgp0_per_sa;
|
||||
uint32_t gc_num_wgp1_per_sa;
|
||||
uint32_t gc_num_rb_per_se;
|
||||
uint32_t gc_num_gl2c;
|
||||
uint32_t gc_num_gprs;
|
||||
uint32_t gc_num_max_gs_thds;
|
||||
uint32_t gc_gs_table_depth;
|
||||
uint32_t gc_gsprim_buff_depth;
|
||||
uint32_t gc_parameter_cache_depth;
|
||||
uint32_t gc_double_offchip_lds_buffer;
|
||||
uint32_t gc_wave_size;
|
||||
uint32_t gc_max_waves_per_simd;
|
||||
uint32_t gc_max_scratch_slots_per_cu;
|
||||
uint32_t gc_lds_size;
|
||||
uint32_t gc_num_sc_per_se;
|
||||
uint32_t gc_num_sa_per_se;
|
||||
uint32_t gc_num_packer_per_sc;
|
||||
uint32_t gc_num_gl2a;
|
||||
};
|
||||
|
||||
struct gc_info_v1_1 {
|
||||
struct gpu_info_header header;
|
||||
|
||||
uint32_t gc_num_se;
|
||||
uint32_t gc_num_wgp0_per_sa;
|
||||
uint32_t gc_num_wgp1_per_sa;
|
||||
uint32_t gc_num_rb_per_se;
|
||||
uint32_t gc_num_gl2c;
|
||||
uint32_t gc_num_gprs;
|
||||
uint32_t gc_num_max_gs_thds;
|
||||
uint32_t gc_gs_table_depth;
|
||||
uint32_t gc_gsprim_buff_depth;
|
||||
uint32_t gc_parameter_cache_depth;
|
||||
uint32_t gc_double_offchip_lds_buffer;
|
||||
uint32_t gc_wave_size;
|
||||
uint32_t gc_max_waves_per_simd;
|
||||
uint32_t gc_max_scratch_slots_per_cu;
|
||||
uint32_t gc_lds_size;
|
||||
uint32_t gc_num_sc_per_se;
|
||||
uint32_t gc_num_sa_per_se;
|
||||
uint32_t gc_num_packer_per_sc;
|
||||
uint32_t gc_num_gl2a;
|
||||
uint32_t gc_num_tcp_per_sa;
|
||||
uint32_t gc_num_sdp_interface;
|
||||
uint32_t gc_num_tcps;
|
||||
};
|
||||
|
||||
struct gc_info_v1_2 {
|
||||
struct gpu_info_header header;
|
||||
uint32_t gc_num_se;
|
||||
uint32_t gc_num_wgp0_per_sa;
|
||||
uint32_t gc_num_wgp1_per_sa;
|
||||
uint32_t gc_num_rb_per_se;
|
||||
uint32_t gc_num_gl2c;
|
||||
uint32_t gc_num_gprs;
|
||||
uint32_t gc_num_max_gs_thds;
|
||||
uint32_t gc_gs_table_depth;
|
||||
uint32_t gc_gsprim_buff_depth;
|
||||
uint32_t gc_parameter_cache_depth;
|
||||
uint32_t gc_double_offchip_lds_buffer;
|
||||
uint32_t gc_wave_size;
|
||||
uint32_t gc_max_waves_per_simd;
|
||||
uint32_t gc_max_scratch_slots_per_cu;
|
||||
uint32_t gc_lds_size;
|
||||
uint32_t gc_num_sc_per_se;
|
||||
uint32_t gc_num_sa_per_se;
|
||||
uint32_t gc_num_packer_per_sc;
|
||||
uint32_t gc_num_gl2a;
|
||||
uint32_t gc_num_tcp_per_sa;
|
||||
uint32_t gc_num_sdp_interface;
|
||||
uint32_t gc_num_tcps;
|
||||
uint32_t gc_num_tcp_per_wpg;
|
||||
uint32_t gc_tcp_l1_size;
|
||||
uint32_t gc_num_sqc_per_wgp;
|
||||
uint32_t gc_l1_instruction_cache_size_per_sqc;
|
||||
uint32_t gc_l1_data_cache_size_per_sqc;
|
||||
uint32_t gc_gl1c_per_sa;
|
||||
uint32_t gc_gl1c_size_per_instance;
|
||||
uint32_t gc_gl2c_per_gpu;
|
||||
};
|
||||
|
||||
struct gc_info_v1_3 {
|
||||
struct gpu_info_header header;
|
||||
uint32_t gc_num_se;
|
||||
uint32_t gc_num_wgp0_per_sa;
|
||||
uint32_t gc_num_wgp1_per_sa;
|
||||
uint32_t gc_num_rb_per_se;
|
||||
uint32_t gc_num_gl2c;
|
||||
uint32_t gc_num_gprs;
|
||||
uint32_t gc_num_max_gs_thds;
|
||||
uint32_t gc_gs_table_depth;
|
||||
uint32_t gc_gsprim_buff_depth;
|
||||
uint32_t gc_parameter_cache_depth;
|
||||
uint32_t gc_double_offchip_lds_buffer;
|
||||
uint32_t gc_wave_size;
|
||||
uint32_t gc_max_waves_per_simd;
|
||||
uint32_t gc_max_scratch_slots_per_cu;
|
||||
uint32_t gc_lds_size;
|
||||
uint32_t gc_num_sc_per_se;
|
||||
uint32_t gc_num_sa_per_se;
|
||||
uint32_t gc_num_packer_per_sc;
|
||||
uint32_t gc_num_gl2a;
|
||||
uint32_t gc_num_tcp_per_sa;
|
||||
uint32_t gc_num_sdp_interface;
|
||||
uint32_t gc_num_tcps;
|
||||
uint32_t gc_num_tcp_per_wpg;
|
||||
uint32_t gc_tcp_l1_size;
|
||||
uint32_t gc_num_sqc_per_wgp;
|
||||
uint32_t gc_l1_instruction_cache_size_per_sqc;
|
||||
uint32_t gc_l1_data_cache_size_per_sqc;
|
||||
uint32_t gc_gl1c_per_sa;
|
||||
uint32_t gc_gl1c_size_per_instance;
|
||||
uint32_t gc_gl2c_per_gpu;
|
||||
uint32_t gc_tcp_size_per_cu;
|
||||
uint32_t gc_tcp_cache_line_size;
|
||||
uint32_t gc_instruction_cache_size_per_sqc;
|
||||
uint32_t gc_instruction_cache_line_size;
|
||||
uint32_t gc_scalar_data_cache_size_per_sqc;
|
||||
uint32_t gc_scalar_data_cache_line_size;
|
||||
uint32_t gc_tcc_size;
|
||||
uint32_t gc_tcc_cache_line_size;
|
||||
};
|
||||
|
||||
struct gc_info_v2_0 {
|
||||
struct gpu_info_header header;
|
||||
|
||||
uint32_t gc_num_se;
|
||||
uint32_t gc_num_cu_per_sh;
|
||||
uint32_t gc_num_sh_per_se;
|
||||
uint32_t gc_num_rb_per_se;
|
||||
uint32_t gc_num_tccs;
|
||||
uint32_t gc_num_gprs;
|
||||
uint32_t gc_num_max_gs_thds;
|
||||
uint32_t gc_gs_table_depth;
|
||||
uint32_t gc_gsprim_buff_depth;
|
||||
uint32_t gc_parameter_cache_depth;
|
||||
uint32_t gc_double_offchip_lds_buffer;
|
||||
uint32_t gc_wave_size;
|
||||
uint32_t gc_max_waves_per_simd;
|
||||
uint32_t gc_max_scratch_slots_per_cu;
|
||||
uint32_t gc_lds_size;
|
||||
uint32_t gc_num_sc_per_se;
|
||||
uint32_t gc_num_packer_per_sc;
|
||||
};
|
||||
|
||||
struct gc_info_v2_1 {
|
||||
struct gpu_info_header header;
|
||||
|
||||
uint32_t gc_num_se;
|
||||
uint32_t gc_num_cu_per_sh;
|
||||
uint32_t gc_num_sh_per_se;
|
||||
uint32_t gc_num_rb_per_se;
|
||||
uint32_t gc_num_tccs;
|
||||
uint32_t gc_num_gprs;
|
||||
uint32_t gc_num_max_gs_thds;
|
||||
uint32_t gc_gs_table_depth;
|
||||
uint32_t gc_gsprim_buff_depth;
|
||||
uint32_t gc_parameter_cache_depth;
|
||||
uint32_t gc_double_offchip_lds_buffer;
|
||||
uint32_t gc_wave_size;
|
||||
uint32_t gc_max_waves_per_simd;
|
||||
uint32_t gc_max_scratch_slots_per_cu;
|
||||
uint32_t gc_lds_size;
|
||||
uint32_t gc_num_sc_per_se;
|
||||
uint32_t gc_num_packer_per_sc;
|
||||
/* new for v2_1 */
|
||||
uint32_t gc_num_tcp_per_sh;
|
||||
uint32_t gc_tcp_size_per_cu;
|
||||
uint32_t gc_num_sdp_interface;
|
||||
uint32_t gc_num_cu_per_sqc;
|
||||
uint32_t gc_instruction_cache_size_per_sqc;
|
||||
uint32_t gc_scalar_data_cache_size_per_sqc;
|
||||
uint32_t gc_tcc_size;
|
||||
};
|
||||
|
||||
typedef struct harvest_info_header {
|
||||
uint32_t signature; /* Table Signature */
|
||||
uint32_t version; /* Table Version */
|
||||
} harvest_info_header;
|
||||
|
||||
typedef struct harvest_info {
|
||||
uint16_t hw_id; /* Hardware ID */
|
||||
uint8_t number_instance; /* Instance of the IP */
|
||||
uint8_t reserved; /* Reserved for alignment */
|
||||
} harvest_info;
|
||||
|
||||
typedef struct harvest_table {
|
||||
harvest_info_header header;
|
||||
harvest_info list[32];
|
||||
} harvest_table;
|
||||
|
||||
struct mall_info_header {
|
||||
uint32_t table_id; /* table ID */
|
||||
uint16_t version_major; /* table version */
|
||||
uint16_t version_minor; /* table version */
|
||||
uint32_t size_bytes; /* size of the entire header+data in bytes */
|
||||
};
|
||||
|
||||
struct mall_info_v1_0 {
|
||||
struct mall_info_header header;
|
||||
uint32_t mall_size_per_m;
|
||||
uint32_t m_s_present;
|
||||
uint32_t m_half_use;
|
||||
uint32_t m_mall_config;
|
||||
uint32_t reserved[5];
|
||||
};
|
||||
|
||||
struct mall_info_v2_0 {
|
||||
struct mall_info_header header;
|
||||
uint32_t mall_size_per_umc;
|
||||
uint32_t reserved[8];
|
||||
};
|
||||
|
||||
#define VCN_INFO_TABLE_MAX_NUM_INSTANCES 4
|
||||
|
||||
struct vcn_info_header {
|
||||
uint32_t table_id; /* table ID */
|
||||
uint16_t version_major; /* table version */
|
||||
uint16_t version_minor; /* table version */
|
||||
uint32_t size_bytes; /* size of the entire header+data in bytes */
|
||||
};
|
||||
|
||||
struct vcn_instance_info_v1_0
|
||||
{
|
||||
uint32_t instance_num; /* VCN IP instance number. 0 - VCN0; 1 - VCN1 etc*/
|
||||
union _fuse_data {
|
||||
struct {
|
||||
uint32_t av1_disabled : 1;
|
||||
uint32_t vp9_disabled : 1;
|
||||
uint32_t hevc_disabled : 1;
|
||||
uint32_t h264_disabled : 1;
|
||||
uint32_t reserved : 28;
|
||||
} bits;
|
||||
uint32_t all_bits;
|
||||
} fuse_data;
|
||||
uint32_t reserved[2];
|
||||
};
|
||||
|
||||
struct vcn_info_v1_0 {
|
||||
struct vcn_info_header header;
|
||||
uint32_t num_of_instances; /* number of entries used in instance_info below*/
|
||||
struct vcn_instance_info_v1_0 instance_info[VCN_INFO_TABLE_MAX_NUM_INSTANCES];
|
||||
uint32_t reserved[4];
|
||||
};
|
||||
|
||||
#define NPS_INFO_TABLE_MAX_NUM_INSTANCES 12
|
||||
|
||||
struct nps_info_header {
|
||||
uint32_t table_id; /* table ID */
|
||||
uint16_t version_major; /* table version */
|
||||
uint16_t version_minor; /* table version */
|
||||
uint32_t size_bytes; /* size of the entire header+data in bytes = 0x000000D4 (212) */
|
||||
};
|
||||
|
||||
struct nps_instance_info_v1_0 {
|
||||
uint64_t base_address;
|
||||
uint64_t limit_address;
|
||||
};
|
||||
|
||||
struct nps_info_v1_0 {
|
||||
struct nps_info_header header;
|
||||
uint32_t nps_type;
|
||||
uint32_t count;
|
||||
struct nps_instance_info_v1_0
|
||||
instance_info[NPS_INFO_TABLE_MAX_NUM_INSTANCES];
|
||||
};
|
||||
|
||||
enum amd_hw_ip_block_type {
|
||||
GC_HWIP = 1,
|
||||
HDP_HWIP,
|
||||
SDMA0_HWIP,
|
||||
@@ -565,3 +596,5 @@ static int hw_id_map[MAX_HWIP] = {
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,209 @@
|
||||
/*
|
||||
* Copyright 2021 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
#ifndef _hdp_6_0_0_OFFSET_HEADER
|
||||
#define _hdp_6_0_0_OFFSET_HEADER
|
||||
|
||||
|
||||
|
||||
// addressBlock: hdp_hdpdec
|
||||
// base address: 0x3c80
|
||||
#define regHDP_NONSURFACE_BASE 0x0040
|
||||
#define regHDP_NONSURFACE_BASE_BASE_IDX 0
|
||||
#define regHDP_NONSURFACE_INFO 0x0041
|
||||
#define regHDP_NONSURFACE_INFO_BASE_IDX 0
|
||||
#define regHDP_NONSURFACE_BASE_HI 0x0042
|
||||
#define regHDP_NONSURFACE_BASE_HI_BASE_IDX 0
|
||||
#define regHDP_SURFACE_WRITE_FLAGS 0x00c4
|
||||
#define regHDP_SURFACE_WRITE_FLAGS_BASE_IDX 0
|
||||
#define regHDP_SURFACE_READ_FLAGS 0x00c5
|
||||
#define regHDP_SURFACE_READ_FLAGS_BASE_IDX 0
|
||||
#define regHDP_SURFACE_WRITE_FLAGS_CLR 0x00c6
|
||||
#define regHDP_SURFACE_WRITE_FLAGS_CLR_BASE_IDX 0
|
||||
#define regHDP_SURFACE_READ_FLAGS_CLR 0x00c7
|
||||
#define regHDP_SURFACE_READ_FLAGS_CLR_BASE_IDX 0
|
||||
#define regHDP_NONSURF_FLAGS 0x00c8
|
||||
#define regHDP_NONSURF_FLAGS_BASE_IDX 0
|
||||
#define regHDP_NONSURF_FLAGS_CLR 0x00c9
|
||||
#define regHDP_NONSURF_FLAGS_CLR_BASE_IDX 0
|
||||
#define regHDP_HOST_PATH_CNTL 0x00cc
|
||||
#define regHDP_HOST_PATH_CNTL_BASE_IDX 0
|
||||
#define regHDP_SW_SEMAPHORE 0x00cd
|
||||
#define regHDP_SW_SEMAPHORE_BASE_IDX 0
|
||||
#define regHDP_DEBUG0 0x00ce
|
||||
#define regHDP_DEBUG0_BASE_IDX 0
|
||||
#define regHDP_LAST_SURFACE_HIT 0x00d0
|
||||
#define regHDP_LAST_SURFACE_HIT_BASE_IDX 0
|
||||
#define regHDP_OUTSTANDING_REQ 0x00d2
|
||||
#define regHDP_OUTSTANDING_REQ_BASE_IDX 0
|
||||
#define regHDP_MISC_CNTL 0x00d3
|
||||
#define regHDP_MISC_CNTL_BASE_IDX 0
|
||||
#define regHDP_MEM_POWER_CTRL 0x00d4
|
||||
#define regHDP_MEM_POWER_CTRL_BASE_IDX 0
|
||||
#define regHDP_MMHUB_CNTL 0x00d5
|
||||
#define regHDP_MMHUB_CNTL_BASE_IDX 0
|
||||
#define regHDP_VERSION 0x00d7
|
||||
#define regHDP_VERSION_BASE_IDX 0
|
||||
#define regHDP_CLK_CNTL 0x00d8
|
||||
#define regHDP_CLK_CNTL_BASE_IDX 0
|
||||
#define regHDP_MEMIO_CNTL 0x00f6
|
||||
#define regHDP_MEMIO_CNTL_BASE_IDX 0
|
||||
#define regHDP_MEMIO_ADDR 0x00f7
|
||||
#define regHDP_MEMIO_ADDR_BASE_IDX 0
|
||||
#define regHDP_MEMIO_STATUS 0x00f8
|
||||
#define regHDP_MEMIO_STATUS_BASE_IDX 0
|
||||
#define regHDP_MEMIO_WR_DATA 0x00f9
|
||||
#define regHDP_MEMIO_WR_DATA_BASE_IDX 0
|
||||
#define regHDP_MEMIO_RD_DATA 0x00fa
|
||||
#define regHDP_MEMIO_RD_DATA_BASE_IDX 0
|
||||
#define regHDP_XDP_DIRECT2HDP_FIRST 0x0100
|
||||
#define regHDP_XDP_DIRECT2HDP_FIRST_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_FLUSH 0x0101
|
||||
#define regHDP_XDP_D2H_FLUSH_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_BAR_UPDATE 0x0102
|
||||
#define regHDP_XDP_D2H_BAR_UPDATE_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_3 0x0103
|
||||
#define regHDP_XDP_D2H_RSVD_3_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_4 0x0104
|
||||
#define regHDP_XDP_D2H_RSVD_4_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_5 0x0105
|
||||
#define regHDP_XDP_D2H_RSVD_5_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_6 0x0106
|
||||
#define regHDP_XDP_D2H_RSVD_6_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_7 0x0107
|
||||
#define regHDP_XDP_D2H_RSVD_7_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_8 0x0108
|
||||
#define regHDP_XDP_D2H_RSVD_8_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_9 0x0109
|
||||
#define regHDP_XDP_D2H_RSVD_9_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_10 0x010a
|
||||
#define regHDP_XDP_D2H_RSVD_10_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_11 0x010b
|
||||
#define regHDP_XDP_D2H_RSVD_11_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_12 0x010c
|
||||
#define regHDP_XDP_D2H_RSVD_12_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_13 0x010d
|
||||
#define regHDP_XDP_D2H_RSVD_13_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_14 0x010e
|
||||
#define regHDP_XDP_D2H_RSVD_14_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_15 0x010f
|
||||
#define regHDP_XDP_D2H_RSVD_15_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_16 0x0110
|
||||
#define regHDP_XDP_D2H_RSVD_16_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_17 0x0111
|
||||
#define regHDP_XDP_D2H_RSVD_17_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_18 0x0112
|
||||
#define regHDP_XDP_D2H_RSVD_18_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_19 0x0113
|
||||
#define regHDP_XDP_D2H_RSVD_19_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_20 0x0114
|
||||
#define regHDP_XDP_D2H_RSVD_20_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_21 0x0115
|
||||
#define regHDP_XDP_D2H_RSVD_21_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_22 0x0116
|
||||
#define regHDP_XDP_D2H_RSVD_22_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_23 0x0117
|
||||
#define regHDP_XDP_D2H_RSVD_23_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_24 0x0118
|
||||
#define regHDP_XDP_D2H_RSVD_24_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_25 0x0119
|
||||
#define regHDP_XDP_D2H_RSVD_25_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_26 0x011a
|
||||
#define regHDP_XDP_D2H_RSVD_26_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_27 0x011b
|
||||
#define regHDP_XDP_D2H_RSVD_27_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_28 0x011c
|
||||
#define regHDP_XDP_D2H_RSVD_28_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_29 0x011d
|
||||
#define regHDP_XDP_D2H_RSVD_29_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_30 0x011e
|
||||
#define regHDP_XDP_D2H_RSVD_30_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_31 0x011f
|
||||
#define regHDP_XDP_D2H_RSVD_31_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_32 0x0120
|
||||
#define regHDP_XDP_D2H_RSVD_32_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_33 0x0121
|
||||
#define regHDP_XDP_D2H_RSVD_33_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_34 0x0122
|
||||
#define regHDP_XDP_D2H_RSVD_34_BASE_IDX 0
|
||||
#define regHDP_XDP_DIRECT2HDP_LAST 0x0123
|
||||
#define regHDP_XDP_DIRECT2HDP_LAST_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR_CFG 0x0124
|
||||
#define regHDP_XDP_P2P_BAR_CFG_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_OFFSET 0x0125
|
||||
#define regHDP_XDP_P2P_MBX_OFFSET_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_ADDR0 0x0126
|
||||
#define regHDP_XDP_P2P_MBX_ADDR0_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_ADDR1 0x0127
|
||||
#define regHDP_XDP_P2P_MBX_ADDR1_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_ADDR2 0x0128
|
||||
#define regHDP_XDP_P2P_MBX_ADDR2_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_ADDR3 0x0129
|
||||
#define regHDP_XDP_P2P_MBX_ADDR3_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_ADDR4 0x012a
|
||||
#define regHDP_XDP_P2P_MBX_ADDR4_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_ADDR5 0x012b
|
||||
#define regHDP_XDP_P2P_MBX_ADDR5_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_ADDR6 0x012c
|
||||
#define regHDP_XDP_P2P_MBX_ADDR6_BASE_IDX 0
|
||||
#define regHDP_XDP_HDP_MBX_MC_CFG 0x012d
|
||||
#define regHDP_XDP_HDP_MBX_MC_CFG_BASE_IDX 0
|
||||
#define regHDP_XDP_HDP_MC_CFG 0x012e
|
||||
#define regHDP_XDP_HDP_MC_CFG_BASE_IDX 0
|
||||
#define regHDP_XDP_HST_CFG 0x012f
|
||||
#define regHDP_XDP_HST_CFG_BASE_IDX 0
|
||||
#define regHDP_XDP_HDP_IPH_CFG 0x0131
|
||||
#define regHDP_XDP_HDP_IPH_CFG_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR0 0x0134
|
||||
#define regHDP_XDP_P2P_BAR0_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR1 0x0135
|
||||
#define regHDP_XDP_P2P_BAR1_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR2 0x0136
|
||||
#define regHDP_XDP_P2P_BAR2_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR3 0x0137
|
||||
#define regHDP_XDP_P2P_BAR3_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR4 0x0138
|
||||
#define regHDP_XDP_P2P_BAR4_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR5 0x0139
|
||||
#define regHDP_XDP_P2P_BAR5_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR6 0x013a
|
||||
#define regHDP_XDP_P2P_BAR6_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR7 0x013b
|
||||
#define regHDP_XDP_P2P_BAR7_BASE_IDX 0
|
||||
#define regHDP_XDP_FLUSH_ARMED_STS 0x013c
|
||||
#define regHDP_XDP_FLUSH_ARMED_STS_BASE_IDX 0
|
||||
#define regHDP_XDP_FLUSH_CNTR0_STS 0x013d
|
||||
#define regHDP_XDP_FLUSH_CNTR0_STS_BASE_IDX 0
|
||||
#define regHDP_XDP_BUSY_STS 0x013e
|
||||
#define regHDP_XDP_BUSY_STS_BASE_IDX 0
|
||||
#define regHDP_XDP_STICKY 0x013f
|
||||
#define regHDP_XDP_STICKY_BASE_IDX 0
|
||||
#define regHDP_XDP_CHKN 0x0140
|
||||
#define regHDP_XDP_CHKN_BASE_IDX 0
|
||||
#define regHDP_XDP_BARS_ADDR_39_36 0x0144
|
||||
#define regHDP_XDP_BARS_ADDR_39_36_BASE_IDX 0
|
||||
#define regHDP_XDP_MC_VM_FB_LOCATION_BASE 0x0145
|
||||
#define regHDP_XDP_MC_VM_FB_LOCATION_BASE_BASE_IDX 0
|
||||
#define regHDP_XDP_MMHUB_ERROR 0x014a
|
||||
#define regHDP_XDP_MMHUB_ERROR_BASE_IDX 0
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,646 @@
|
||||
/*
|
||||
* Copyright 2021 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
#ifndef _hdp_6_0_0_SH_MASK_HEADER
|
||||
#define _hdp_6_0_0_SH_MASK_HEADER
|
||||
|
||||
|
||||
// addressBlock: hdp_hdpdec
|
||||
//HDP_NONSURFACE_BASE
|
||||
#define HDP_NONSURFACE_BASE__NONSURF_BASE_39_8__SHIFT 0x0
|
||||
#define HDP_NONSURFACE_BASE__NONSURF_BASE_39_8_MASK 0xFFFFFFFFL
|
||||
//HDP_NONSURFACE_INFO
|
||||
#define HDP_NONSURFACE_INFO__NONSURF_SWAP__SHIFT 0x4
|
||||
#define HDP_NONSURFACE_INFO__NONSURF_VMID__SHIFT 0x8
|
||||
#define HDP_NONSURFACE_INFO__NONSURF_SWAP_MASK 0x00000030L
|
||||
#define HDP_NONSURFACE_INFO__NONSURF_VMID_MASK 0x00000F00L
|
||||
//HDP_NONSURFACE_BASE_HI
|
||||
#define HDP_NONSURFACE_BASE_HI__NONSURF_BASE_47_40__SHIFT 0x0
|
||||
#define HDP_NONSURFACE_BASE_HI__NONSURF_BASE_47_40_MASK 0x000000FFL
|
||||
//HDP_SURFACE_WRITE_FLAGS
|
||||
#define HDP_SURFACE_WRITE_FLAGS__SURF0_WRITE_FLAG__SHIFT 0x0
|
||||
#define HDP_SURFACE_WRITE_FLAGS__SURF1_WRITE_FLAG__SHIFT 0x1
|
||||
#define HDP_SURFACE_WRITE_FLAGS__SURF0_WRITE_FLAG_MASK 0x00000001L
|
||||
#define HDP_SURFACE_WRITE_FLAGS__SURF1_WRITE_FLAG_MASK 0x00000002L
|
||||
//HDP_SURFACE_READ_FLAGS
|
||||
#define HDP_SURFACE_READ_FLAGS__SURF0_READ_FLAG__SHIFT 0x0
|
||||
#define HDP_SURFACE_READ_FLAGS__SURF1_READ_FLAG__SHIFT 0x1
|
||||
#define HDP_SURFACE_READ_FLAGS__SURF0_READ_FLAG_MASK 0x00000001L
|
||||
#define HDP_SURFACE_READ_FLAGS__SURF1_READ_FLAG_MASK 0x00000002L
|
||||
//HDP_SURFACE_WRITE_FLAGS_CLR
|
||||
#define HDP_SURFACE_WRITE_FLAGS_CLR__SURF0_WRITE_FLAG_CLR__SHIFT 0x0
|
||||
#define HDP_SURFACE_WRITE_FLAGS_CLR__SURF1_WRITE_FLAG_CLR__SHIFT 0x1
|
||||
#define HDP_SURFACE_WRITE_FLAGS_CLR__SURF0_WRITE_FLAG_CLR_MASK 0x00000001L
|
||||
#define HDP_SURFACE_WRITE_FLAGS_CLR__SURF1_WRITE_FLAG_CLR_MASK 0x00000002L
|
||||
//HDP_SURFACE_READ_FLAGS_CLR
|
||||
#define HDP_SURFACE_READ_FLAGS_CLR__SURF0_READ_FLAG_CLR__SHIFT 0x0
|
||||
#define HDP_SURFACE_READ_FLAGS_CLR__SURF1_READ_FLAG_CLR__SHIFT 0x1
|
||||
#define HDP_SURFACE_READ_FLAGS_CLR__SURF0_READ_FLAG_CLR_MASK 0x00000001L
|
||||
#define HDP_SURFACE_READ_FLAGS_CLR__SURF1_READ_FLAG_CLR_MASK 0x00000002L
|
||||
//HDP_NONSURF_FLAGS
|
||||
#define HDP_NONSURF_FLAGS__NONSURF_WRITE_FLAG__SHIFT 0x0
|
||||
#define HDP_NONSURF_FLAGS__NONSURF_READ_FLAG__SHIFT 0x1
|
||||
#define HDP_NONSURF_FLAGS__NONSURF_WRITE_FLAG_MASK 0x00000001L
|
||||
#define HDP_NONSURF_FLAGS__NONSURF_READ_FLAG_MASK 0x00000002L
|
||||
//HDP_NONSURF_FLAGS_CLR
|
||||
#define HDP_NONSURF_FLAGS_CLR__NONSURF_WRITE_FLAG_CLR__SHIFT 0x0
|
||||
#define HDP_NONSURF_FLAGS_CLR__NONSURF_READ_FLAG_CLR__SHIFT 0x1
|
||||
#define HDP_NONSURF_FLAGS_CLR__NONSURF_WRITE_FLAG_CLR_MASK 0x00000001L
|
||||
#define HDP_NONSURF_FLAGS_CLR__NONSURF_READ_FLAG_CLR_MASK 0x00000002L
|
||||
//HDP_HOST_PATH_CNTL
|
||||
#define HDP_HOST_PATH_CNTL__WR_STALL_TIMER__SHIFT 0x9
|
||||
#define HDP_HOST_PATH_CNTL__RD_STALL_TIMER__SHIFT 0xb
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_TIMER_PRELOAD_CFG__SHIFT 0x12
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_TIMER__SHIFT 0x13
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_EN__SHIFT 0x15
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_64B_EN__SHIFT 0x16
|
||||
#define HDP_HOST_PATH_CNTL__ALL_SURFACES_DIS__SHIFT 0x1d
|
||||
#define HDP_HOST_PATH_CNTL__WR_STALL_TIMER_MASK 0x00000600L
|
||||
#define HDP_HOST_PATH_CNTL__RD_STALL_TIMER_MASK 0x00001800L
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_TIMER_PRELOAD_CFG_MASK 0x00040000L
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_TIMER_MASK 0x00180000L
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_EN_MASK 0x00200000L
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_64B_EN_MASK 0x00400000L
|
||||
#define HDP_HOST_PATH_CNTL__ALL_SURFACES_DIS_MASK 0x20000000L
|
||||
//HDP_SW_SEMAPHORE
|
||||
#define HDP_SW_SEMAPHORE__SW_SEMAPHORE__SHIFT 0x0
|
||||
#define HDP_SW_SEMAPHORE__SW_SEMAPHORE_MASK 0xFFFFFFFFL
|
||||
//HDP_DEBUG0
|
||||
#define HDP_DEBUG0__HDP_DEBUG__SHIFT 0x0
|
||||
#define HDP_DEBUG0__HDP_DEBUG_MASK 0xFFFFFFFFL
|
||||
//HDP_LAST_SURFACE_HIT
|
||||
#define HDP_LAST_SURFACE_HIT__LAST_SURFACE_HIT__SHIFT 0x0
|
||||
#define HDP_LAST_SURFACE_HIT__LAST_SURFACE_HIT_MASK 0x00000003L
|
||||
//HDP_OUTSTANDING_REQ
|
||||
#define HDP_OUTSTANDING_REQ__WRITE_REQ__SHIFT 0x0
|
||||
#define HDP_OUTSTANDING_REQ__READ_REQ__SHIFT 0x8
|
||||
#define HDP_OUTSTANDING_REQ__WRITE_REQ_MASK 0x000000FFL
|
||||
#define HDP_OUTSTANDING_REQ__READ_REQ_MASK 0x0000FF00L
|
||||
//HDP_MISC_CNTL
|
||||
#define HDP_MISC_CNTL__IDLE_HYSTERESIS_CNTL__SHIFT 0x2
|
||||
#define HDP_MISC_CNTL__OUTSTANDING_WRITE_COUNT_1024__SHIFT 0x5
|
||||
#define HDP_MISC_CNTL__MMHUB_EARLY_WRACK_ENABLE__SHIFT 0x8
|
||||
#define HDP_MISC_CNTL__SIMULTANEOUS_READS_WRITES__SHIFT 0xb
|
||||
#define HDP_MISC_CNTL__READ_BUFFER_WATERMARK__SHIFT 0xe
|
||||
#define HDP_MISC_CNTL__NACK_ENABLE__SHIFT 0x13
|
||||
#define HDP_MISC_CNTL__ATOMIC_NACK_ENABLE__SHIFT 0x14
|
||||
#define HDP_MISC_CNTL__FED_ENABLE__SHIFT 0x15
|
||||
#define HDP_MISC_CNTL__ATOMIC_FED_ENABLE__SHIFT 0x16
|
||||
#define HDP_MISC_CNTL__MMHUB_WRBURST_ENABLE__SHIFT 0x18
|
||||
#define HDP_MISC_CNTL__MMHUB_WRBURST_SIZE__SHIFT 0x1e
|
||||
#define HDP_MISC_CNTL__IDLE_HYSTERESIS_CNTL_MASK 0x0000000CL
|
||||
#define HDP_MISC_CNTL__OUTSTANDING_WRITE_COUNT_1024_MASK 0x00000020L
|
||||
#define HDP_MISC_CNTL__MMHUB_EARLY_WRACK_ENABLE_MASK 0x00000100L
|
||||
#define HDP_MISC_CNTL__SIMULTANEOUS_READS_WRITES_MASK 0x00000800L
|
||||
#define HDP_MISC_CNTL__READ_BUFFER_WATERMARK_MASK 0x0000C000L
|
||||
#define HDP_MISC_CNTL__NACK_ENABLE_MASK 0x00080000L
|
||||
#define HDP_MISC_CNTL__ATOMIC_NACK_ENABLE_MASK 0x00100000L
|
||||
#define HDP_MISC_CNTL__FED_ENABLE_MASK 0x00200000L
|
||||
#define HDP_MISC_CNTL__ATOMIC_FED_ENABLE_MASK 0x00400000L
|
||||
#define HDP_MISC_CNTL__MMHUB_WRBURST_ENABLE_MASK 0x01000000L
|
||||
#define HDP_MISC_CNTL__MMHUB_WRBURST_SIZE_MASK 0x40000000L
|
||||
//HDP_MEM_POWER_CTRL
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_CTRL_EN__SHIFT 0x0
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_LS_EN__SHIFT 0x1
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_DS_EN__SHIFT 0x2
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_SD_EN__SHIFT 0x3
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_IDLE_HYSTERESIS__SHIFT 0x4
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_UP_RECOVER_DELAY__SHIFT 0x8
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_DOWN_ENTER_DELAY__SHIFT 0xe
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_CTRL_EN__SHIFT 0x10
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_LS_EN__SHIFT 0x11
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_DS_EN__SHIFT 0x12
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_SD_EN__SHIFT 0x13
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_IDLE_HYSTERESIS__SHIFT 0x14
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_UP_RECOVER_DELAY__SHIFT 0x18
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_DOWN_ENTER_DELAY__SHIFT 0x1e
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_CTRL_EN_MASK 0x00000001L
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_LS_EN_MASK 0x00000002L
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_DS_EN_MASK 0x00000004L
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_SD_EN_MASK 0x00000008L
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_IDLE_HYSTERESIS_MASK 0x00000070L
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_UP_RECOVER_DELAY_MASK 0x00003F00L
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_DOWN_ENTER_DELAY_MASK 0x0000C000L
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_CTRL_EN_MASK 0x00010000L
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_LS_EN_MASK 0x00020000L
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_DS_EN_MASK 0x00040000L
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_SD_EN_MASK 0x00080000L
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_IDLE_HYSTERESIS_MASK 0x00700000L
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_UP_RECOVER_DELAY_MASK 0x3F000000L
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_DOWN_ENTER_DELAY_MASK 0xC0000000L
|
||||
//HDP_MMHUB_CNTL
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_RO__SHIFT 0x0
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_GCC__SHIFT 0x1
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_SNOOP__SHIFT 0x2
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_RO_MASK 0x00000001L
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_GCC_MASK 0x00000002L
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_SNOOP_MASK 0x00000004L
|
||||
//HDP_VERSION
|
||||
#define HDP_VERSION__MINVER__SHIFT 0x0
|
||||
#define HDP_VERSION__MAJVER__SHIFT 0x8
|
||||
#define HDP_VERSION__REV__SHIFT 0x10
|
||||
#define HDP_VERSION__MINVER_MASK 0x000000FFL
|
||||
#define HDP_VERSION__MAJVER_MASK 0x0000FF00L
|
||||
#define HDP_VERSION__REV_MASK 0x00FF0000L
|
||||
//HDP_CLK_CNTL
|
||||
#define HDP_CLK_CNTL__REG_CLK_ENABLE_COUNT__SHIFT 0x0
|
||||
#define HDP_CLK_CNTL__ATOMIC_MEM_CLK_SOFT_OVERRIDE__SHIFT 0x1a
|
||||
#define HDP_CLK_CNTL__RC_MEM_CLK_SOFT_OVERRIDE__SHIFT 0x1b
|
||||
#define HDP_CLK_CNTL__DBUS_CLK_SOFT_OVERRIDE__SHIFT 0x1c
|
||||
#define HDP_CLK_CNTL__DYN_CLK_SOFT_OVERRIDE__SHIFT 0x1d
|
||||
#define HDP_CLK_CNTL__XDP_REG_CLK_SOFT_OVERRIDE__SHIFT 0x1e
|
||||
#define HDP_CLK_CNTL__HDP_REG_CLK_SOFT_OVERRIDE__SHIFT 0x1f
|
||||
#define HDP_CLK_CNTL__REG_CLK_ENABLE_COUNT_MASK 0x0000000FL
|
||||
#define HDP_CLK_CNTL__ATOMIC_MEM_CLK_SOFT_OVERRIDE_MASK 0x04000000L
|
||||
#define HDP_CLK_CNTL__RC_MEM_CLK_SOFT_OVERRIDE_MASK 0x08000000L
|
||||
#define HDP_CLK_CNTL__DBUS_CLK_SOFT_OVERRIDE_MASK 0x10000000L
|
||||
#define HDP_CLK_CNTL__DYN_CLK_SOFT_OVERRIDE_MASK 0x20000000L
|
||||
#define HDP_CLK_CNTL__XDP_REG_CLK_SOFT_OVERRIDE_MASK 0x40000000L
|
||||
#define HDP_CLK_CNTL__HDP_REG_CLK_SOFT_OVERRIDE_MASK 0x80000000L
|
||||
//HDP_MEMIO_CNTL
|
||||
#define HDP_MEMIO_CNTL__MEMIO_SEND__SHIFT 0x0
|
||||
#define HDP_MEMIO_CNTL__MEMIO_OP__SHIFT 0x1
|
||||
#define HDP_MEMIO_CNTL__MEMIO_BE__SHIFT 0x2
|
||||
#define HDP_MEMIO_CNTL__MEMIO_WR_STROBE__SHIFT 0x6
|
||||
#define HDP_MEMIO_CNTL__MEMIO_RD_STROBE__SHIFT 0x7
|
||||
#define HDP_MEMIO_CNTL__MEMIO_ADDR_UPPER__SHIFT 0x8
|
||||
#define HDP_MEMIO_CNTL__MEMIO_CLR_WR_ERROR__SHIFT 0xe
|
||||
#define HDP_MEMIO_CNTL__MEMIO_CLR_RD_ERROR__SHIFT 0xf
|
||||
#define HDP_MEMIO_CNTL__MEMIO_VF__SHIFT 0x10
|
||||
#define HDP_MEMIO_CNTL__MEMIO_VFID__SHIFT 0x11
|
||||
#define HDP_MEMIO_CNTL__MEMIO_SEND_MASK 0x00000001L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_OP_MASK 0x00000002L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_BE_MASK 0x0000003CL
|
||||
#define HDP_MEMIO_CNTL__MEMIO_WR_STROBE_MASK 0x00000040L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_RD_STROBE_MASK 0x00000080L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_ADDR_UPPER_MASK 0x00003F00L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_CLR_WR_ERROR_MASK 0x00004000L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_CLR_RD_ERROR_MASK 0x00008000L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_VF_MASK 0x00010000L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_VFID_MASK 0x003E0000L
|
||||
//HDP_MEMIO_ADDR
|
||||
#define HDP_MEMIO_ADDR__MEMIO_ADDR_LOWER__SHIFT 0x0
|
||||
#define HDP_MEMIO_ADDR__MEMIO_ADDR_LOWER_MASK 0xFFFFFFFFL
|
||||
//HDP_MEMIO_STATUS
|
||||
#define HDP_MEMIO_STATUS__MEMIO_WR_STATUS__SHIFT 0x0
|
||||
#define HDP_MEMIO_STATUS__MEMIO_RD_STATUS__SHIFT 0x1
|
||||
#define HDP_MEMIO_STATUS__MEMIO_WR_ERROR__SHIFT 0x2
|
||||
#define HDP_MEMIO_STATUS__MEMIO_RD_ERROR__SHIFT 0x3
|
||||
#define HDP_MEMIO_STATUS__MEMIO_WR_STATUS_MASK 0x00000001L
|
||||
#define HDP_MEMIO_STATUS__MEMIO_RD_STATUS_MASK 0x00000002L
|
||||
#define HDP_MEMIO_STATUS__MEMIO_WR_ERROR_MASK 0x00000004L
|
||||
#define HDP_MEMIO_STATUS__MEMIO_RD_ERROR_MASK 0x00000008L
|
||||
//HDP_MEMIO_WR_DATA
|
||||
#define HDP_MEMIO_WR_DATA__MEMIO_WR_DATA__SHIFT 0x0
|
||||
#define HDP_MEMIO_WR_DATA__MEMIO_WR_DATA_MASK 0xFFFFFFFFL
|
||||
//HDP_MEMIO_RD_DATA
|
||||
#define HDP_MEMIO_RD_DATA__MEMIO_RD_DATA__SHIFT 0x0
|
||||
#define HDP_MEMIO_RD_DATA__MEMIO_RD_DATA_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_DIRECT2HDP_FIRST
|
||||
#define HDP_XDP_DIRECT2HDP_FIRST__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_DIRECT2HDP_FIRST__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_FLUSH
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_FLUSH_NUM__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_MBX_ENC_DATA__SHIFT 0x4
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_MBX_ADDR_SEL__SHIFT 0x8
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_XPB_CLG__SHIFT 0xb
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_SEND_HOST__SHIFT 0x10
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_ALTER_FLUSH_NUM__SHIFT 0x12
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_RSVD_0__SHIFT 0x13
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_RSVD_1__SHIFT 0x14
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_FLUSH_NUM_MASK 0x0000000FL
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_MBX_ENC_DATA_MASK 0x000000F0L
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_MBX_ADDR_SEL_MASK 0x00000700L
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_XPB_CLG_MASK 0x0000F800L
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_SEND_HOST_MASK 0x00010000L
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_ALTER_FLUSH_NUM_MASK 0x00040000L
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_RSVD_0_MASK 0x00080000L
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_RSVD_1_MASK 0x00100000L
|
||||
//HDP_XDP_D2H_BAR_UPDATE
|
||||
#define HDP_XDP_D2H_BAR_UPDATE__D2H_BAR_UPDATE_ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_BAR_UPDATE__D2H_BAR_UPDATE_FLUSH_NUM__SHIFT 0x10
|
||||
#define HDP_XDP_D2H_BAR_UPDATE__D2H_BAR_UPDATE_BAR_NUM__SHIFT 0x14
|
||||
#define HDP_XDP_D2H_BAR_UPDATE__D2H_BAR_UPDATE_ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_D2H_BAR_UPDATE__D2H_BAR_UPDATE_FLUSH_NUM_MASK 0x000F0000L
|
||||
#define HDP_XDP_D2H_BAR_UPDATE__D2H_BAR_UPDATE_BAR_NUM_MASK 0x00700000L
|
||||
//HDP_XDP_D2H_RSVD_3
|
||||
#define HDP_XDP_D2H_RSVD_3__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_3__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_4
|
||||
#define HDP_XDP_D2H_RSVD_4__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_4__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_5
|
||||
#define HDP_XDP_D2H_RSVD_5__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_5__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_6
|
||||
#define HDP_XDP_D2H_RSVD_6__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_6__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_7
|
||||
#define HDP_XDP_D2H_RSVD_7__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_7__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_8
|
||||
#define HDP_XDP_D2H_RSVD_8__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_8__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_9
|
||||
#define HDP_XDP_D2H_RSVD_9__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_9__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_10
|
||||
#define HDP_XDP_D2H_RSVD_10__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_10__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_11
|
||||
#define HDP_XDP_D2H_RSVD_11__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_11__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_12
|
||||
#define HDP_XDP_D2H_RSVD_12__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_12__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_13
|
||||
#define HDP_XDP_D2H_RSVD_13__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_13__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_14
|
||||
#define HDP_XDP_D2H_RSVD_14__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_14__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_15
|
||||
#define HDP_XDP_D2H_RSVD_15__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_15__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_16
|
||||
#define HDP_XDP_D2H_RSVD_16__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_16__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_17
|
||||
#define HDP_XDP_D2H_RSVD_17__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_17__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_18
|
||||
#define HDP_XDP_D2H_RSVD_18__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_18__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_19
|
||||
#define HDP_XDP_D2H_RSVD_19__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_19__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_20
|
||||
#define HDP_XDP_D2H_RSVD_20__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_20__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_21
|
||||
#define HDP_XDP_D2H_RSVD_21__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_21__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_22
|
||||
#define HDP_XDP_D2H_RSVD_22__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_22__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_23
|
||||
#define HDP_XDP_D2H_RSVD_23__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_23__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_24
|
||||
#define HDP_XDP_D2H_RSVD_24__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_24__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_25
|
||||
#define HDP_XDP_D2H_RSVD_25__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_25__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_26
|
||||
#define HDP_XDP_D2H_RSVD_26__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_26__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_27
|
||||
#define HDP_XDP_D2H_RSVD_27__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_27__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_28
|
||||
#define HDP_XDP_D2H_RSVD_28__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_28__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_29
|
||||
#define HDP_XDP_D2H_RSVD_29__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_29__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_30
|
||||
#define HDP_XDP_D2H_RSVD_30__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_30__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_31
|
||||
#define HDP_XDP_D2H_RSVD_31__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_31__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_32
|
||||
#define HDP_XDP_D2H_RSVD_32__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_32__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_33
|
||||
#define HDP_XDP_D2H_RSVD_33__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_33__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_34
|
||||
#define HDP_XDP_D2H_RSVD_34__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_34__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_DIRECT2HDP_LAST
|
||||
#define HDP_XDP_DIRECT2HDP_LAST__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_DIRECT2HDP_LAST__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_P2P_BAR_CFG
|
||||
#define HDP_XDP_P2P_BAR_CFG__P2P_BAR_CFG_ADDR_SIZE__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR_CFG__P2P_BAR_CFG_BAR_FROM__SHIFT 0x4
|
||||
#define HDP_XDP_P2P_BAR_CFG__P2P_BAR_CFG_ADDR_SIZE_MASK 0x0000000FL
|
||||
#define HDP_XDP_P2P_BAR_CFG__P2P_BAR_CFG_BAR_FROM_MASK 0x00000030L
|
||||
//HDP_XDP_P2P_MBX_OFFSET
|
||||
#define HDP_XDP_P2P_MBX_OFFSET__P2P_MBX_OFFSET__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_OFFSET__P2P_MBX_OFFSET_MASK 0x0001FFFFL
|
||||
//HDP_XDP_P2P_MBX_ADDR0
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__VALID__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__ADDR_35_19__SHIFT 0x3
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__ADDR_47_40__SHIFT 0x18
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__VALID_MASK 0x00000001L
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__ADDR_35_19_MASK 0x000FFFF8L
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__ADDR_47_40_MASK 0xFF000000L
|
||||
//HDP_XDP_P2P_MBX_ADDR1
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__VALID__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__ADDR_35_19__SHIFT 0x3
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__ADDR_47_40__SHIFT 0x18
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__VALID_MASK 0x00000001L
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__ADDR_35_19_MASK 0x000FFFF8L
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__ADDR_47_40_MASK 0xFF000000L
|
||||
//HDP_XDP_P2P_MBX_ADDR2
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__VALID__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__ADDR_35_19__SHIFT 0x3
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__ADDR_47_40__SHIFT 0x18
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__VALID_MASK 0x00000001L
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__ADDR_35_19_MASK 0x000FFFF8L
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__ADDR_47_40_MASK 0xFF000000L
|
||||
//HDP_XDP_P2P_MBX_ADDR3
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__VALID__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__ADDR_35_19__SHIFT 0x3
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__ADDR_47_40__SHIFT 0x18
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__VALID_MASK 0x00000001L
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__ADDR_35_19_MASK 0x000FFFF8L
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__ADDR_47_40_MASK 0xFF000000L
|
||||
//HDP_XDP_P2P_MBX_ADDR4
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__VALID__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__ADDR_35_19__SHIFT 0x3
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__ADDR_47_40__SHIFT 0x18
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__VALID_MASK 0x00000001L
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__ADDR_35_19_MASK 0x000FFFF8L
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__ADDR_47_40_MASK 0xFF000000L
|
||||
//HDP_XDP_P2P_MBX_ADDR5
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__VALID__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__ADDR_35_19__SHIFT 0x3
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__ADDR_47_40__SHIFT 0x18
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__VALID_MASK 0x00000001L
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__ADDR_35_19_MASK 0x000FFFF8L
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__ADDR_47_40_MASK 0xFF000000L
|
||||
//HDP_XDP_P2P_MBX_ADDR6
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__VALID__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__ADDR_35_19__SHIFT 0x3
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__ADDR_47_40__SHIFT 0x18
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__VALID_MASK 0x00000001L
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__ADDR_35_19_MASK 0x000FFFF8L
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__ADDR_47_40_MASK 0xFF000000L
|
||||
//HDP_XDP_HDP_MBX_MC_CFG
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_QOS__SHIFT 0x0
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_SWAP__SHIFT 0x4
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_VMID__SHIFT 0x8
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_RO__SHIFT 0xc
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_GCC__SHIFT 0xd
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_SNOOP__SHIFT 0xe
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_QOS_MASK 0x0000000FL
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_SWAP_MASK 0x00000030L
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_VMID_MASK 0x00000F00L
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_RO_MASK 0x00001000L
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_GCC_MASK 0x00002000L
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_SNOOP_MASK 0x00004000L
|
||||
//HDP_XDP_HDP_MC_CFG
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_SNOOP__SHIFT 0x3
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_SWAP__SHIFT 0x4
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_VMID__SHIFT 0x8
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_RO__SHIFT 0xc
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_GCC__SHIFT 0xd
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_XDP_HIGHER_PRI_THRESH__SHIFT 0xe
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_SNOOP_MASK 0x00000008L
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_SWAP_MASK 0x00000030L
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_VMID_MASK 0x00000F00L
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_RO_MASK 0x00001000L
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_GCC_MASK 0x00002000L
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_XDP_HIGHER_PRI_THRESH_MASK 0x000FC000L
|
||||
//HDP_XDP_HST_CFG
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_EN__SHIFT 0x0
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_TIMER__SHIFT 0x1
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_BURST_EN__SHIFT 0x3
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_64B_EN__SHIFT 0x4
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_TIMER_PRELOAD_CFG__SHIFT 0x5
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_EN_MASK 0x00000001L
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_TIMER_MASK 0x00000006L
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_BURST_EN_MASK 0x00000008L
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_64B_EN_MASK 0x00000010L
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_TIMER_PRELOAD_CFG_MASK 0x00000020L
|
||||
//HDP_XDP_HDP_IPH_CFG
|
||||
#define HDP_XDP_HDP_IPH_CFG__HDP_IPH_CFG_INVERSE_PEER_TAG_MATCHING__SHIFT 0xc
|
||||
#define HDP_XDP_HDP_IPH_CFG__HDP_IPH_CFG_P2P_RD_EN__SHIFT 0xd
|
||||
#define HDP_XDP_HDP_IPH_CFG__HDP_IPH_CFG_INVERSE_PEER_TAG_MATCHING_MASK 0x00001000L
|
||||
#define HDP_XDP_HDP_IPH_CFG__HDP_IPH_CFG_P2P_RD_EN_MASK 0x00002000L
|
||||
//HDP_XDP_P2P_BAR0
|
||||
#define HDP_XDP_P2P_BAR0__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR0__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR0__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR0__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR0__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR0__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_P2P_BAR1
|
||||
#define HDP_XDP_P2P_BAR1__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR1__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR1__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR1__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR1__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR1__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_P2P_BAR2
|
||||
#define HDP_XDP_P2P_BAR2__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR2__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR2__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR2__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR2__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR2__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_P2P_BAR3
|
||||
#define HDP_XDP_P2P_BAR3__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR3__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR3__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR3__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR3__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR3__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_P2P_BAR4
|
||||
#define HDP_XDP_P2P_BAR4__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR4__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR4__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR4__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR4__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR4__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_P2P_BAR5
|
||||
#define HDP_XDP_P2P_BAR5__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR5__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR5__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR5__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR5__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR5__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_P2P_BAR6
|
||||
#define HDP_XDP_P2P_BAR6__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR6__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR6__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR6__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR6__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR6__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_P2P_BAR7
|
||||
#define HDP_XDP_P2P_BAR7__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR7__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR7__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR7__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR7__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR7__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_FLUSH_ARMED_STS
|
||||
#define HDP_XDP_FLUSH_ARMED_STS__FLUSH_ARMED_STS__SHIFT 0x0
|
||||
#define HDP_XDP_FLUSH_ARMED_STS__FLUSH_ARMED_STS_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_FLUSH_CNTR0_STS
|
||||
#define HDP_XDP_FLUSH_CNTR0_STS__FLUSH_CNTR0_STS__SHIFT 0x0
|
||||
#define HDP_XDP_FLUSH_CNTR0_STS__FLUSH_CNTR0_STS_MASK 0x03FFFFFFL
|
||||
//HDP_XDP_BUSY_STS
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_0__SHIFT 0x0
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_1__SHIFT 0x1
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_2__SHIFT 0x2
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_3__SHIFT 0x3
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_4__SHIFT 0x4
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_5__SHIFT 0x5
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_6__SHIFT 0x6
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_7__SHIFT 0x7
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_8__SHIFT 0x8
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_9__SHIFT 0x9
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_10__SHIFT 0xa
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_11__SHIFT 0xb
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_12__SHIFT 0xc
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_13__SHIFT 0xd
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_14__SHIFT 0xe
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_15__SHIFT 0xf
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_16__SHIFT 0x10
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_17__SHIFT 0x11
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_18__SHIFT 0x12
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_19__SHIFT 0x13
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_20__SHIFT 0x14
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_21__SHIFT 0x15
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_22__SHIFT 0x16
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_23__SHIFT 0x17
|
||||
#define HDP_XDP_BUSY_STS__Z_FENCE_BIT__SHIFT 0x18
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_0_MASK 0x00000001L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_1_MASK 0x00000002L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_2_MASK 0x00000004L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_3_MASK 0x00000008L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_4_MASK 0x00000010L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_5_MASK 0x00000020L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_6_MASK 0x00000040L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_7_MASK 0x00000080L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_8_MASK 0x00000100L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_9_MASK 0x00000200L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_10_MASK 0x00000400L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_11_MASK 0x00000800L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_12_MASK 0x00001000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_13_MASK 0x00002000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_14_MASK 0x00004000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_15_MASK 0x00008000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_16_MASK 0x00010000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_17_MASK 0x00020000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_18_MASK 0x00040000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_19_MASK 0x00080000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_20_MASK 0x00100000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_21_MASK 0x00200000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_22_MASK 0x00400000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_23_MASK 0x00800000L
|
||||
#define HDP_XDP_BUSY_STS__Z_FENCE_BIT_MASK 0x01000000L
|
||||
//HDP_XDP_STICKY
|
||||
#define HDP_XDP_STICKY__STICKY_STS__SHIFT 0x0
|
||||
#define HDP_XDP_STICKY__STICKY_W1C__SHIFT 0x10
|
||||
#define HDP_XDP_STICKY__STICKY_STS_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_STICKY__STICKY_W1C_MASK 0xFFFF0000L
|
||||
//HDP_XDP_CHKN
|
||||
#define HDP_XDP_CHKN__CHKN_0_RSVD__SHIFT 0x0
|
||||
#define HDP_XDP_CHKN__CHKN_1_RSVD__SHIFT 0x8
|
||||
#define HDP_XDP_CHKN__CHKN_2_RSVD__SHIFT 0x10
|
||||
#define HDP_XDP_CHKN__CHKN_3_RSVD__SHIFT 0x18
|
||||
#define HDP_XDP_CHKN__CHKN_0_RSVD_MASK 0x000000FFL
|
||||
#define HDP_XDP_CHKN__CHKN_1_RSVD_MASK 0x0000FF00L
|
||||
#define HDP_XDP_CHKN__CHKN_2_RSVD_MASK 0x00FF0000L
|
||||
#define HDP_XDP_CHKN__CHKN_3_RSVD_MASK 0xFF000000L
|
||||
//HDP_XDP_BARS_ADDR_39_36
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR0_ADDR_39_36__SHIFT 0x0
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR1_ADDR_39_36__SHIFT 0x4
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR2_ADDR_39_36__SHIFT 0x8
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR3_ADDR_39_36__SHIFT 0xc
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR4_ADDR_39_36__SHIFT 0x10
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR5_ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR6_ADDR_39_36__SHIFT 0x18
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR7_ADDR_39_36__SHIFT 0x1c
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR0_ADDR_39_36_MASK 0x0000000FL
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR1_ADDR_39_36_MASK 0x000000F0L
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR2_ADDR_39_36_MASK 0x00000F00L
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR3_ADDR_39_36_MASK 0x0000F000L
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR4_ADDR_39_36_MASK 0x000F0000L
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR5_ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR6_ADDR_39_36_MASK 0x0F000000L
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR7_ADDR_39_36_MASK 0xF0000000L
|
||||
//HDP_XDP_MC_VM_FB_LOCATION_BASE
|
||||
#define HDP_XDP_MC_VM_FB_LOCATION_BASE__FB_BASE__SHIFT 0x0
|
||||
#define HDP_XDP_MC_VM_FB_LOCATION_BASE__FB_BASE_MASK 0x03FFFFFFL
|
||||
//HDP_XDP_MMHUB_ERROR
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BRESP_01__SHIFT 0x1
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BRESP_10__SHIFT 0x2
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BRESP_11__SHIFT 0x3
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BUSER_FED__SHIFT 0x4
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BUSER_NACK_01__SHIFT 0x5
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BUSER_NACK_10__SHIFT 0x6
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BUSER_NACK_11__SHIFT 0x7
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RRESP_01__SHIFT 0x9
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RRESP_10__SHIFT 0xa
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RRESP_11__SHIFT 0xb
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RUSER_FED__SHIFT 0xc
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RUSER_NACK_01__SHIFT 0xd
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RUSER_NACK_10__SHIFT 0xe
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RUSER_NACK_11__SHIFT 0xf
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BRESP_01__SHIFT 0x11
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BRESP_10__SHIFT 0x12
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BRESP_11__SHIFT 0x13
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BUSER_NACK_01__SHIFT 0x15
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BUSER_NACK_10__SHIFT 0x16
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BUSER_NACK_11__SHIFT 0x17
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BRESP_01_MASK 0x00000002L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BRESP_10_MASK 0x00000004L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BRESP_11_MASK 0x00000008L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BUSER_FED_MASK 0x00000010L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BUSER_NACK_01_MASK 0x00000020L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BUSER_NACK_10_MASK 0x00000040L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BUSER_NACK_11_MASK 0x00000080L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RRESP_01_MASK 0x00000200L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RRESP_10_MASK 0x00000400L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RRESP_11_MASK 0x00000800L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RUSER_FED_MASK 0x00001000L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RUSER_NACK_01_MASK 0x00002000L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RUSER_NACK_10_MASK 0x00004000L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RUSER_NACK_11_MASK 0x00008000L
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BRESP_01_MASK 0x00020000L
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BRESP_10_MASK 0x00040000L
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BRESP_11_MASK 0x00080000L
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BUSER_NACK_01_MASK 0x00200000L
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BUSER_NACK_10_MASK 0x00400000L
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BUSER_NACK_11_MASK 0x00800000L
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,219 @@
|
||||
/*
|
||||
* Copyright 2023 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
#ifndef _hdp_7_0_0_OFFSET_HEADER
|
||||
#define _hdp_7_0_0_OFFSET_HEADER
|
||||
|
||||
|
||||
|
||||
// addressBlock: hdp_hdpdec
|
||||
// base address: 0x3c80
|
||||
#define regHDP_MMHUB_TLVL 0x0008
|
||||
#define regHDP_MMHUB_TLVL_BASE_IDX 0
|
||||
#define regHDP_MMHUB_UNITID 0x0009
|
||||
#define regHDP_MMHUB_UNITID_BASE_IDX 0
|
||||
#define regHDP_NONSURFACE_BASE 0x0040
|
||||
#define regHDP_NONSURFACE_BASE_BASE_IDX 0
|
||||
#define regHDP_NONSURFACE_INFO 0x0041
|
||||
#define regHDP_NONSURFACE_INFO_BASE_IDX 0
|
||||
#define regHDP_NONSURFACE_BASE_HI 0x0042
|
||||
#define regHDP_NONSURFACE_BASE_HI_BASE_IDX 0
|
||||
#define regHDP_SURFACE_WRITE_FLAGS 0x00c4
|
||||
#define regHDP_SURFACE_WRITE_FLAGS_BASE_IDX 0
|
||||
#define regHDP_SURFACE_READ_FLAGS 0x00c5
|
||||
#define regHDP_SURFACE_READ_FLAGS_BASE_IDX 0
|
||||
#define regHDP_SURFACE_WRITE_FLAGS_CLR 0x00c6
|
||||
#define regHDP_SURFACE_WRITE_FLAGS_CLR_BASE_IDX 0
|
||||
#define regHDP_SURFACE_READ_FLAGS_CLR 0x00c7
|
||||
#define regHDP_SURFACE_READ_FLAGS_CLR_BASE_IDX 0
|
||||
#define regHDP_NONSURF_FLAGS 0x00c8
|
||||
#define regHDP_NONSURF_FLAGS_BASE_IDX 0
|
||||
#define regHDP_NONSURF_FLAGS_CLR 0x00c9
|
||||
#define regHDP_NONSURF_FLAGS_CLR_BASE_IDX 0
|
||||
#define regHDP_SW_SEMAPHORE 0x00cd
|
||||
#define regHDP_SW_SEMAPHORE_BASE_IDX 0
|
||||
#define regHDP_DEBUG0 0x00ce
|
||||
#define regHDP_DEBUG0_BASE_IDX 0
|
||||
#define regHDP_LAST_SURFACE_HIT 0x00d0
|
||||
#define regHDP_LAST_SURFACE_HIT_BASE_IDX 0
|
||||
#define regHDP_OUTSTANDING_REQ 0x00d1
|
||||
#define regHDP_OUTSTANDING_REQ_BASE_IDX 0
|
||||
#define regHDP_HOST_PATH_CNTL 0x00d2
|
||||
#define regHDP_HOST_PATH_CNTL_BASE_IDX 0
|
||||
#define regHDP_MISC_CNTL 0x00d3
|
||||
#define regHDP_MISC_CNTL_BASE_IDX 0
|
||||
#define regHDP_MEM_POWER_CTRL 0x00d4
|
||||
#define regHDP_MEM_POWER_CTRL_BASE_IDX 0
|
||||
#define regHDP_CLK_CNTL 0x00d5
|
||||
#define regHDP_CLK_CNTL_BASE_IDX 0
|
||||
#define regHDP_MMHUB_CNTL 0x00d6
|
||||
#define regHDP_MMHUB_CNTL_BASE_IDX 0
|
||||
#define regHDP_XDP_BUSY_STS 0x00d7
|
||||
#define regHDP_XDP_BUSY_STS_BASE_IDX 0
|
||||
#define regHDP_XDP_MMHUB_ERROR 0x00d8
|
||||
#define regHDP_XDP_MMHUB_ERROR_BASE_IDX 0
|
||||
#define regHDP_XDP_MMHUB_ERROR_CLR 0x00da
|
||||
#define regHDP_XDP_MMHUB_ERROR_CLR_BASE_IDX 0
|
||||
#define regHDP_VERSION 0x00db
|
||||
#define regHDP_VERSION_BASE_IDX 0
|
||||
#define regHDP_MEMIO_CNTL 0x00f6
|
||||
#define regHDP_MEMIO_CNTL_BASE_IDX 0
|
||||
#define regHDP_MEMIO_ADDR 0x00f7
|
||||
#define regHDP_MEMIO_ADDR_BASE_IDX 0
|
||||
#define regHDP_MEMIO_STATUS 0x00f8
|
||||
#define regHDP_MEMIO_STATUS_BASE_IDX 0
|
||||
#define regHDP_MEMIO_WR_DATA 0x00f9
|
||||
#define regHDP_MEMIO_WR_DATA_BASE_IDX 0
|
||||
#define regHDP_MEMIO_RD_DATA 0x00fa
|
||||
#define regHDP_MEMIO_RD_DATA_BASE_IDX 0
|
||||
#define regHDP_XDP_DIRECT2HDP_FIRST 0x0100
|
||||
#define regHDP_XDP_DIRECT2HDP_FIRST_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_FLUSH 0x0101
|
||||
#define regHDP_XDP_D2H_FLUSH_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_BAR_UPDATE 0x0102
|
||||
#define regHDP_XDP_D2H_BAR_UPDATE_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_3 0x0103
|
||||
#define regHDP_XDP_D2H_RSVD_3_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_4 0x0104
|
||||
#define regHDP_XDP_D2H_RSVD_4_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_5 0x0105
|
||||
#define regHDP_XDP_D2H_RSVD_5_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_6 0x0106
|
||||
#define regHDP_XDP_D2H_RSVD_6_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_7 0x0107
|
||||
#define regHDP_XDP_D2H_RSVD_7_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_8 0x0108
|
||||
#define regHDP_XDP_D2H_RSVD_8_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_9 0x0109
|
||||
#define regHDP_XDP_D2H_RSVD_9_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_10 0x010a
|
||||
#define regHDP_XDP_D2H_RSVD_10_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_11 0x010b
|
||||
#define regHDP_XDP_D2H_RSVD_11_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_12 0x010c
|
||||
#define regHDP_XDP_D2H_RSVD_12_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_13 0x010d
|
||||
#define regHDP_XDP_D2H_RSVD_13_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_14 0x010e
|
||||
#define regHDP_XDP_D2H_RSVD_14_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_15 0x010f
|
||||
#define regHDP_XDP_D2H_RSVD_15_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_16 0x0110
|
||||
#define regHDP_XDP_D2H_RSVD_16_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_17 0x0111
|
||||
#define regHDP_XDP_D2H_RSVD_17_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_18 0x0112
|
||||
#define regHDP_XDP_D2H_RSVD_18_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_19 0x0113
|
||||
#define regHDP_XDP_D2H_RSVD_19_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_20 0x0114
|
||||
#define regHDP_XDP_D2H_RSVD_20_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_21 0x0115
|
||||
#define regHDP_XDP_D2H_RSVD_21_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_22 0x0116
|
||||
#define regHDP_XDP_D2H_RSVD_22_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_23 0x0117
|
||||
#define regHDP_XDP_D2H_RSVD_23_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_24 0x0118
|
||||
#define regHDP_XDP_D2H_RSVD_24_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_25 0x0119
|
||||
#define regHDP_XDP_D2H_RSVD_25_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_26 0x011a
|
||||
#define regHDP_XDP_D2H_RSVD_26_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_27 0x011b
|
||||
#define regHDP_XDP_D2H_RSVD_27_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_28 0x011c
|
||||
#define regHDP_XDP_D2H_RSVD_28_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_29 0x011d
|
||||
#define regHDP_XDP_D2H_RSVD_29_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_30 0x011e
|
||||
#define regHDP_XDP_D2H_RSVD_30_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_31 0x011f
|
||||
#define regHDP_XDP_D2H_RSVD_31_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_32 0x0120
|
||||
#define regHDP_XDP_D2H_RSVD_32_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_33 0x0121
|
||||
#define regHDP_XDP_D2H_RSVD_33_BASE_IDX 0
|
||||
#define regHDP_XDP_D2H_RSVD_34 0x0122
|
||||
#define regHDP_XDP_D2H_RSVD_34_BASE_IDX 0
|
||||
#define regHDP_XDP_DIRECT2HDP_LAST 0x0123
|
||||
#define regHDP_XDP_DIRECT2HDP_LAST_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR_CFG 0x0124
|
||||
#define regHDP_XDP_P2P_BAR_CFG_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_OFFSET 0x0125
|
||||
#define regHDP_XDP_P2P_MBX_OFFSET_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_ADDR0 0x0126
|
||||
#define regHDP_XDP_P2P_MBX_ADDR0_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_ADDR1 0x0127
|
||||
#define regHDP_XDP_P2P_MBX_ADDR1_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_ADDR2 0x0128
|
||||
#define regHDP_XDP_P2P_MBX_ADDR2_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_ADDR3 0x0129
|
||||
#define regHDP_XDP_P2P_MBX_ADDR3_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_ADDR4 0x012a
|
||||
#define regHDP_XDP_P2P_MBX_ADDR4_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_ADDR5 0x012b
|
||||
#define regHDP_XDP_P2P_MBX_ADDR5_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_MBX_ADDR6 0x012c
|
||||
#define regHDP_XDP_P2P_MBX_ADDR6_BASE_IDX 0
|
||||
#define regHDP_XDP_HDP_MBX_MC_CFG 0x012d
|
||||
#define regHDP_XDP_HDP_MBX_MC_CFG_BASE_IDX 0
|
||||
#define regHDP_XDP_HDP_MC_CFG 0x012e
|
||||
#define regHDP_XDP_HDP_MC_CFG_BASE_IDX 0
|
||||
#define regHDP_XDP_HST_CFG 0x012f
|
||||
#define regHDP_XDP_HST_CFG_BASE_IDX 0
|
||||
#define regHDP_XDP_HDP_IPH_CFG 0x0131
|
||||
#define regHDP_XDP_HDP_IPH_CFG_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR0 0x0134
|
||||
#define regHDP_XDP_P2P_BAR0_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR1 0x0135
|
||||
#define regHDP_XDP_P2P_BAR1_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR2 0x0136
|
||||
#define regHDP_XDP_P2P_BAR2_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR3 0x0137
|
||||
#define regHDP_XDP_P2P_BAR3_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR4 0x0138
|
||||
#define regHDP_XDP_P2P_BAR4_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR5 0x0139
|
||||
#define regHDP_XDP_P2P_BAR5_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR6 0x013a
|
||||
#define regHDP_XDP_P2P_BAR6_BASE_IDX 0
|
||||
#define regHDP_XDP_P2P_BAR7 0x013b
|
||||
#define regHDP_XDP_P2P_BAR7_BASE_IDX 0
|
||||
#define regHDP_XDP_FLUSH_ARMED_STS 0x013c
|
||||
#define regHDP_XDP_FLUSH_ARMED_STS_BASE_IDX 0
|
||||
#define regHDP_XDP_FLUSH_CNTR0_STS 0x013d
|
||||
#define regHDP_XDP_FLUSH_CNTR0_STS_BASE_IDX 0
|
||||
#define regHDP_XDP_STICKY 0x013f
|
||||
#define regHDP_XDP_STICKY_BASE_IDX 0
|
||||
#define regHDP_XDP_CHKN 0x0140
|
||||
#define regHDP_XDP_CHKN_BASE_IDX 0
|
||||
#define regHDP_XDP_BARS_ADDR_39_36 0x0144
|
||||
#define regHDP_XDP_BARS_ADDR_39_36_BASE_IDX 0
|
||||
#define regHDP_XDP_MC_VM_FB_LOCATION_BASE 0x0145
|
||||
#define regHDP_XDP_MC_VM_FB_LOCATION_BASE_BASE_IDX 0
|
||||
#define regHDP_XDP_GPU_IOV_VIOLATION_LOG 0x0148
|
||||
#define regHDP_XDP_GPU_IOV_VIOLATION_LOG_BASE_IDX 0
|
||||
#define regHDP_XDP_GPU_IOV_VIOLATION_LOG2 0x0149
|
||||
#define regHDP_XDP_GPU_IOV_VIOLATION_LOG2_BASE_IDX 0
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,735 @@
|
||||
/*
|
||||
* Copyright 2023 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
#ifndef _hdp_7_0_0_SH_MASK_HEADER
|
||||
#define _hdp_7_0_0_SH_MASK_HEADER
|
||||
|
||||
|
||||
// addressBlock: hdp_hdpdec
|
||||
//HDP_MMHUB_TLVL
|
||||
#define HDP_MMHUB_TLVL__HDP_WR_TLVL__SHIFT 0x0
|
||||
#define HDP_MMHUB_TLVL__HDP_RD_TLVL__SHIFT 0x4
|
||||
#define HDP_MMHUB_TLVL__XDP_WR_TLVL__SHIFT 0x8
|
||||
#define HDP_MMHUB_TLVL__XDP_RD_TLVL__SHIFT 0xc
|
||||
#define HDP_MMHUB_TLVL__XDP_MBX_WR_TLVL__SHIFT 0x10
|
||||
#define HDP_MMHUB_TLVL__HDP_WR_TLVL_MASK 0x0000000FL
|
||||
#define HDP_MMHUB_TLVL__HDP_RD_TLVL_MASK 0x000000F0L
|
||||
#define HDP_MMHUB_TLVL__XDP_WR_TLVL_MASK 0x00000F00L
|
||||
#define HDP_MMHUB_TLVL__XDP_RD_TLVL_MASK 0x0000F000L
|
||||
#define HDP_MMHUB_TLVL__XDP_MBX_WR_TLVL_MASK 0x000F0000L
|
||||
//HDP_MMHUB_UNITID
|
||||
#define HDP_MMHUB_UNITID__HDP_UNITID__SHIFT 0x0
|
||||
#define HDP_MMHUB_UNITID__XDP_UNITID__SHIFT 0x8
|
||||
#define HDP_MMHUB_UNITID__XDP_MBX_UNITID__SHIFT 0x10
|
||||
#define HDP_MMHUB_UNITID__HDP_UNITID_MASK 0x0000003FL
|
||||
#define HDP_MMHUB_UNITID__XDP_UNITID_MASK 0x00003F00L
|
||||
#define HDP_MMHUB_UNITID__XDP_MBX_UNITID_MASK 0x003F0000L
|
||||
//HDP_NONSURFACE_BASE
|
||||
#define HDP_NONSURFACE_BASE__NONSURF_BASE_39_8__SHIFT 0x0
|
||||
#define HDP_NONSURFACE_BASE__NONSURF_BASE_39_8_MASK 0xFFFFFFFFL
|
||||
//HDP_NONSURFACE_INFO
|
||||
#define HDP_NONSURFACE_INFO__NONSURF_SWAP__SHIFT 0x4
|
||||
#define HDP_NONSURFACE_INFO__NONSURF_VMID__SHIFT 0x8
|
||||
#define HDP_NONSURFACE_INFO__NONSURF_SWAP_MASK 0x00000030L
|
||||
#define HDP_NONSURFACE_INFO__NONSURF_VMID_MASK 0x00000F00L
|
||||
//HDP_NONSURFACE_BASE_HI
|
||||
#define HDP_NONSURFACE_BASE_HI__NONSURF_BASE_47_40__SHIFT 0x0
|
||||
#define HDP_NONSURFACE_BASE_HI__NONSURF_BASE_47_40_MASK 0x000000FFL
|
||||
//HDP_SURFACE_WRITE_FLAGS
|
||||
#define HDP_SURFACE_WRITE_FLAGS__SURF0_WRITE_FLAG__SHIFT 0x0
|
||||
#define HDP_SURFACE_WRITE_FLAGS__SURF1_WRITE_FLAG__SHIFT 0x1
|
||||
#define HDP_SURFACE_WRITE_FLAGS__SURF0_WRITE_FLAG_MASK 0x00000001L
|
||||
#define HDP_SURFACE_WRITE_FLAGS__SURF1_WRITE_FLAG_MASK 0x00000002L
|
||||
//HDP_SURFACE_READ_FLAGS
|
||||
#define HDP_SURFACE_READ_FLAGS__SURF0_READ_FLAG__SHIFT 0x0
|
||||
#define HDP_SURFACE_READ_FLAGS__SURF1_READ_FLAG__SHIFT 0x1
|
||||
#define HDP_SURFACE_READ_FLAGS__SURF0_READ_FLAG_MASK 0x00000001L
|
||||
#define HDP_SURFACE_READ_FLAGS__SURF1_READ_FLAG_MASK 0x00000002L
|
||||
//HDP_SURFACE_WRITE_FLAGS_CLR
|
||||
#define HDP_SURFACE_WRITE_FLAGS_CLR__SURF0_WRITE_FLAG_CLR__SHIFT 0x0
|
||||
#define HDP_SURFACE_WRITE_FLAGS_CLR__SURF1_WRITE_FLAG_CLR__SHIFT 0x1
|
||||
#define HDP_SURFACE_WRITE_FLAGS_CLR__SURF0_WRITE_FLAG_CLR_MASK 0x00000001L
|
||||
#define HDP_SURFACE_WRITE_FLAGS_CLR__SURF1_WRITE_FLAG_CLR_MASK 0x00000002L
|
||||
//HDP_SURFACE_READ_FLAGS_CLR
|
||||
#define HDP_SURFACE_READ_FLAGS_CLR__SURF0_READ_FLAG_CLR__SHIFT 0x0
|
||||
#define HDP_SURFACE_READ_FLAGS_CLR__SURF1_READ_FLAG_CLR__SHIFT 0x1
|
||||
#define HDP_SURFACE_READ_FLAGS_CLR__SURF0_READ_FLAG_CLR_MASK 0x00000001L
|
||||
#define HDP_SURFACE_READ_FLAGS_CLR__SURF1_READ_FLAG_CLR_MASK 0x00000002L
|
||||
//HDP_NONSURF_FLAGS
|
||||
#define HDP_NONSURF_FLAGS__NONSURF_WRITE_FLAG__SHIFT 0x0
|
||||
#define HDP_NONSURF_FLAGS__NONSURF_READ_FLAG__SHIFT 0x1
|
||||
#define HDP_NONSURF_FLAGS__NONSURF_WRITE_FLAG_MASK 0x00000001L
|
||||
#define HDP_NONSURF_FLAGS__NONSURF_READ_FLAG_MASK 0x00000002L
|
||||
//HDP_NONSURF_FLAGS_CLR
|
||||
#define HDP_NONSURF_FLAGS_CLR__NONSURF_WRITE_FLAG_CLR__SHIFT 0x0
|
||||
#define HDP_NONSURF_FLAGS_CLR__NONSURF_READ_FLAG_CLR__SHIFT 0x1
|
||||
#define HDP_NONSURF_FLAGS_CLR__NONSURF_WRITE_FLAG_CLR_MASK 0x00000001L
|
||||
#define HDP_NONSURF_FLAGS_CLR__NONSURF_READ_FLAG_CLR_MASK 0x00000002L
|
||||
//HDP_SW_SEMAPHORE
|
||||
#define HDP_SW_SEMAPHORE__SW_SEMAPHORE__SHIFT 0x0
|
||||
#define HDP_SW_SEMAPHORE__SW_SEMAPHORE_MASK 0xFFFFFFFFL
|
||||
//HDP_DEBUG0
|
||||
#define HDP_DEBUG0__HDP_DEBUG__SHIFT 0x0
|
||||
#define HDP_DEBUG0__HDP_DEBUG_MASK 0xFFFFFFFFL
|
||||
//HDP_LAST_SURFACE_HIT
|
||||
#define HDP_LAST_SURFACE_HIT__LAST_SURFACE_HIT__SHIFT 0x0
|
||||
#define HDP_LAST_SURFACE_HIT__LAST_SURFACE_HIT_MASK 0x00000003L
|
||||
//HDP_OUTSTANDING_REQ
|
||||
#define HDP_OUTSTANDING_REQ__WRITE_REQ__SHIFT 0x0
|
||||
#define HDP_OUTSTANDING_REQ__READ_REQ__SHIFT 0x8
|
||||
#define HDP_OUTSTANDING_REQ__WRITE_REQ_MASK 0x000000FFL
|
||||
#define HDP_OUTSTANDING_REQ__READ_REQ_MASK 0x0000FF00L
|
||||
//HDP_HOST_PATH_CNTL
|
||||
#define HDP_HOST_PATH_CNTL__WR_STALL_TIMER__SHIFT 0x9
|
||||
#define HDP_HOST_PATH_CNTL__RD_STALL_TIMER__SHIFT 0xb
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_TIMER_PRELOAD_CFG__SHIFT 0x12
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_TIMER__SHIFT 0x13
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_EN__SHIFT 0x15
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_64B_EN__SHIFT 0x16
|
||||
#define HDP_HOST_PATH_CNTL__ALL_SURFACES_DIS__SHIFT 0x1d
|
||||
#define HDP_HOST_PATH_CNTL__WR_STALL_TIMER_MASK 0x00000600L
|
||||
#define HDP_HOST_PATH_CNTL__RD_STALL_TIMER_MASK 0x00001800L
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_TIMER_PRELOAD_CFG_MASK 0x00040000L
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_TIMER_MASK 0x00180000L
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_EN_MASK 0x00200000L
|
||||
#define HDP_HOST_PATH_CNTL__WRITE_COMBINE_64B_EN_MASK 0x00400000L
|
||||
#define HDP_HOST_PATH_CNTL__ALL_SURFACES_DIS_MASK 0x20000000L
|
||||
//HDP_MISC_CNTL
|
||||
#define HDP_MISC_CNTL__IDLE_HYSTERESIS_CNTL__SHIFT 0x2
|
||||
#define HDP_MISC_CNTL__OUTSTANDING_WRITE_COUNT_1024__SHIFT 0x5
|
||||
#define HDP_MISC_CNTL__MMHUB_EARLY_WRACK_ENABLE__SHIFT 0x8
|
||||
#define HDP_MISC_CNTL__EARLY_WRACK_MISSING_PROTECT_ENABLE__SHIFT 0x9
|
||||
#define HDP_MISC_CNTL__SIMULTANEOUS_READS_WRITES__SHIFT 0xb
|
||||
#define HDP_MISC_CNTL__READ_BUFFER_WATERMARK__SHIFT 0xe
|
||||
#define HDP_MISC_CNTL__NACK_ENABLE__SHIFT 0x13
|
||||
#define HDP_MISC_CNTL__ATOMIC_NACK_ENABLE__SHIFT 0x14
|
||||
#define HDP_MISC_CNTL__FED_ENABLE__SHIFT 0x15
|
||||
#define HDP_MISC_CNTL__ATOMIC_FED_ENABLE__SHIFT 0x16
|
||||
#define HDP_MISC_CNTL__SYSHUB_CHANNEL_PRIORITY__SHIFT 0x17
|
||||
#define HDP_MISC_CNTL__MMHUB_WRBURST_ENABLE__SHIFT 0x18
|
||||
#define HDP_MISC_CNTL__MMHUB_WRBURST_SIZE__SHIFT 0x1e
|
||||
#define HDP_MISC_CNTL__IDLE_HYSTERESIS_CNTL_MASK 0x0000000CL
|
||||
#define HDP_MISC_CNTL__OUTSTANDING_WRITE_COUNT_1024_MASK 0x00000020L
|
||||
#define HDP_MISC_CNTL__MMHUB_EARLY_WRACK_ENABLE_MASK 0x00000100L
|
||||
#define HDP_MISC_CNTL__EARLY_WRACK_MISSING_PROTECT_ENABLE_MASK 0x00000200L
|
||||
#define HDP_MISC_CNTL__SIMULTANEOUS_READS_WRITES_MASK 0x00000800L
|
||||
#define HDP_MISC_CNTL__READ_BUFFER_WATERMARK_MASK 0x0000C000L
|
||||
#define HDP_MISC_CNTL__NACK_ENABLE_MASK 0x00080000L
|
||||
#define HDP_MISC_CNTL__ATOMIC_NACK_ENABLE_MASK 0x00100000L
|
||||
#define HDP_MISC_CNTL__FED_ENABLE_MASK 0x00200000L
|
||||
#define HDP_MISC_CNTL__ATOMIC_FED_ENABLE_MASK 0x00400000L
|
||||
#define HDP_MISC_CNTL__SYSHUB_CHANNEL_PRIORITY_MASK 0x00800000L
|
||||
#define HDP_MISC_CNTL__MMHUB_WRBURST_ENABLE_MASK 0x01000000L
|
||||
#define HDP_MISC_CNTL__MMHUB_WRBURST_SIZE_MASK 0x40000000L
|
||||
//HDP_MEM_POWER_CTRL
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_CTRL_EN__SHIFT 0x0
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_LS_EN__SHIFT 0x1
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_DS_EN__SHIFT 0x2
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_SD_EN__SHIFT 0x3
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_IDLE_HYSTERESIS__SHIFT 0x4
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_UP_RECOVER_DELAY__SHIFT 0x8
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_DOWN_ENTER_DELAY__SHIFT 0xe
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_CTRL_EN__SHIFT 0x10
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_LS_EN__SHIFT 0x11
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_DS_EN__SHIFT 0x12
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_SD_EN__SHIFT 0x13
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_IDLE_HYSTERESIS__SHIFT 0x14
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_UP_RECOVER_DELAY__SHIFT 0x18
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_DOWN_ENTER_DELAY__SHIFT 0x1e
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_CTRL_EN_MASK 0x00000001L
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_LS_EN_MASK 0x00000002L
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_DS_EN_MASK 0x00000004L
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_SD_EN_MASK 0x00000008L
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_IDLE_HYSTERESIS_MASK 0x00000070L
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_UP_RECOVER_DELAY_MASK 0x00003F00L
|
||||
#define HDP_MEM_POWER_CTRL__ATOMIC_MEM_POWER_DOWN_ENTER_DELAY_MASK 0x0000C000L
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_CTRL_EN_MASK 0x00010000L
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_LS_EN_MASK 0x00020000L
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_DS_EN_MASK 0x00040000L
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_SD_EN_MASK 0x00080000L
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_IDLE_HYSTERESIS_MASK 0x00700000L
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_UP_RECOVER_DELAY_MASK 0x3F000000L
|
||||
#define HDP_MEM_POWER_CTRL__RC_MEM_POWER_DOWN_ENTER_DELAY_MASK 0xC0000000L
|
||||
//HDP_CLK_CNTL
|
||||
#define HDP_CLK_CNTL__REG_CLK_ENABLE_COUNT__SHIFT 0x0
|
||||
#define HDP_CLK_CNTL__ATOMIC_MEM_CLK_SOFT_OVERRIDE__SHIFT 0x1a
|
||||
#define HDP_CLK_CNTL__RC_MEM_CLK_SOFT_OVERRIDE__SHIFT 0x1b
|
||||
#define HDP_CLK_CNTL__DBUS_CLK_SOFT_OVERRIDE__SHIFT 0x1c
|
||||
#define HDP_CLK_CNTL__DYN_CLK_SOFT_OVERRIDE__SHIFT 0x1d
|
||||
#define HDP_CLK_CNTL__XDP_REG_CLK_SOFT_OVERRIDE__SHIFT 0x1e
|
||||
#define HDP_CLK_CNTL__HDP_REG_CLK_SOFT_OVERRIDE__SHIFT 0x1f
|
||||
#define HDP_CLK_CNTL__REG_CLK_ENABLE_COUNT_MASK 0x0000000FL
|
||||
#define HDP_CLK_CNTL__ATOMIC_MEM_CLK_SOFT_OVERRIDE_MASK 0x04000000L
|
||||
#define HDP_CLK_CNTL__RC_MEM_CLK_SOFT_OVERRIDE_MASK 0x08000000L
|
||||
#define HDP_CLK_CNTL__DBUS_CLK_SOFT_OVERRIDE_MASK 0x10000000L
|
||||
#define HDP_CLK_CNTL__DYN_CLK_SOFT_OVERRIDE_MASK 0x20000000L
|
||||
#define HDP_CLK_CNTL__XDP_REG_CLK_SOFT_OVERRIDE_MASK 0x40000000L
|
||||
#define HDP_CLK_CNTL__HDP_REG_CLK_SOFT_OVERRIDE_MASK 0x80000000L
|
||||
//HDP_MMHUB_CNTL
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_RO__SHIFT 0x0
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_GCC__SHIFT 0x1
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_SNOOP__SHIFT 0x2
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_RO_OVERRIDE__SHIFT 0x4
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_GCC_OVERRIDE__SHIFT 0x5
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_SNOOP_OVERRIDE__SHIFT 0x6
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_RO_MASK 0x00000001L
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_GCC_MASK 0x00000002L
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_SNOOP_MASK 0x00000004L
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_RO_OVERRIDE_MASK 0x00000010L
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_GCC_OVERRIDE_MASK 0x00000020L
|
||||
#define HDP_MMHUB_CNTL__HDP_MMHUB_SNOOP_OVERRIDE_MASK 0x00000040L
|
||||
//HDP_XDP_BUSY_STS
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_0__SHIFT 0x0
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_1__SHIFT 0x1
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_2__SHIFT 0x2
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_3__SHIFT 0x3
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_4__SHIFT 0x4
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_5__SHIFT 0x5
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_6__SHIFT 0x6
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_7__SHIFT 0x7
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_8__SHIFT 0x8
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_9__SHIFT 0x9
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_10__SHIFT 0xa
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_11__SHIFT 0xb
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_12__SHIFT 0xc
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_13__SHIFT 0xd
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_14__SHIFT 0xe
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_15__SHIFT 0xf
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_16__SHIFT 0x10
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_17__SHIFT 0x11
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_18__SHIFT 0x12
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_19__SHIFT 0x13
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_20__SHIFT 0x14
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_21__SHIFT 0x15
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_22__SHIFT 0x16
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_23__SHIFT 0x17
|
||||
#define HDP_XDP_BUSY_STS__Z_FENCE_BIT__SHIFT 0x18
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_0_MASK 0x00000001L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_1_MASK 0x00000002L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_2_MASK 0x00000004L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_3_MASK 0x00000008L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_4_MASK 0x00000010L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_5_MASK 0x00000020L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_6_MASK 0x00000040L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_7_MASK 0x00000080L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_8_MASK 0x00000100L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_9_MASK 0x00000200L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_10_MASK 0x00000400L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_11_MASK 0x00000800L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_12_MASK 0x00001000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_13_MASK 0x00002000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_14_MASK 0x00004000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_15_MASK 0x00008000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_16_MASK 0x00010000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_17_MASK 0x00020000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_18_MASK 0x00040000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_19_MASK 0x00080000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_20_MASK 0x00100000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_21_MASK 0x00200000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_22_MASK 0x00400000L
|
||||
#define HDP_XDP_BUSY_STS__BUSY_BITS_23_MASK 0x00800000L
|
||||
#define HDP_XDP_BUSY_STS__Z_FENCE_BIT_MASK 0x01000000L
|
||||
//HDP_XDP_MMHUB_ERROR
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BRESP_01__SHIFT 0x1
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BRESP_10__SHIFT 0x2
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BRESP_11__SHIFT 0x3
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BUSER_NACK_01__SHIFT 0x5
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BUSER_NACK_10__SHIFT 0x6
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BUSER_NACK_11__SHIFT 0x7
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RRESP_01__SHIFT 0x9
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RRESP_10__SHIFT 0xa
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RRESP_11__SHIFT 0xb
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RUSER_NACK_01__SHIFT 0xd
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RUSER_NACK_10__SHIFT 0xe
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RUSER_NACK_11__SHIFT 0xf
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BRESP_01__SHIFT 0x11
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BRESP_10__SHIFT 0x12
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BRESP_11__SHIFT 0x13
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BUSER_NACK_01__SHIFT 0x15
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BUSER_NACK_10__SHIFT 0x16
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BUSER_NACK_11__SHIFT 0x17
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BRESP_01_MASK 0x00000002L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BRESP_10_MASK 0x00000004L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BRESP_11_MASK 0x00000008L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BUSER_NACK_01_MASK 0x00000020L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BUSER_NACK_10_MASK 0x00000040L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_BUSER_NACK_11_MASK 0x00000080L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RRESP_01_MASK 0x00000200L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RRESP_10_MASK 0x00000400L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RRESP_11_MASK 0x00000800L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RUSER_NACK_01_MASK 0x00002000L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RUSER_NACK_10_MASK 0x00004000L
|
||||
#define HDP_XDP_MMHUB_ERROR__HDP_RUSER_NACK_11_MASK 0x00008000L
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BRESP_01_MASK 0x00020000L
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BRESP_10_MASK 0x00040000L
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BRESP_11_MASK 0x00080000L
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BUSER_NACK_01_MASK 0x00200000L
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BUSER_NACK_10_MASK 0x00400000L
|
||||
#define HDP_XDP_MMHUB_ERROR__XDP_BUSER_NACK_11_MASK 0x00800000L
|
||||
//HDP_XDP_MMHUB_ERROR_CLR
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_BRESP_01_CLR__SHIFT 0x1
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_BRESP_10_CLR__SHIFT 0x2
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_BRESP_11_CLR__SHIFT 0x3
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_BUSER_FED_CLR__SHIFT 0x4
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_BUSER_NACK_01_CLR__SHIFT 0x5
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_BUSER_NACK_10_CLR__SHIFT 0x6
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_BUSER_NACK_11_CLR__SHIFT 0x7
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_RRESP_01_CLR__SHIFT 0x9
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_RRESP_10_CLR__SHIFT 0xa
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_RRESP_11_CLR__SHIFT 0xb
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_RUSER_FED_CLR__SHIFT 0xc
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_RUSER_NACK_01_CLR__SHIFT 0xd
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_RUSER_NACK_10_CLR__SHIFT 0xe
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_RUSER_NACK_11_CLR__SHIFT 0xf
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_WUSER_FED_CLR__SHIFT 0x10
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__XDP_BRESP_01_CLR__SHIFT 0x11
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__XDP_BRESP_10_CLR__SHIFT 0x12
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__XDP_BRESP_11_CLR__SHIFT 0x13
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__XDP_BUSER_NACK_01_CLR__SHIFT 0x15
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__XDP_BUSER_NACK_10_CLR__SHIFT 0x16
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__XDP_BUSER_NACK_11_CLR__SHIFT 0x17
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_BRESP_01_CLR_MASK 0x00000002L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_BRESP_10_CLR_MASK 0x00000004L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_BRESP_11_CLR_MASK 0x00000008L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_BUSER_FED_CLR_MASK 0x00000010L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_BUSER_NACK_01_CLR_MASK 0x00000020L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_BUSER_NACK_10_CLR_MASK 0x00000040L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_BUSER_NACK_11_CLR_MASK 0x00000080L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_RRESP_01_CLR_MASK 0x00000200L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_RRESP_10_CLR_MASK 0x00000400L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_RRESP_11_CLR_MASK 0x00000800L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_RUSER_FED_CLR_MASK 0x00001000L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_RUSER_NACK_01_CLR_MASK 0x00002000L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_RUSER_NACK_10_CLR_MASK 0x00004000L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_RUSER_NACK_11_CLR_MASK 0x00008000L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__HDP_WUSER_FED_CLR_MASK 0x00010000L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__XDP_BRESP_01_CLR_MASK 0x00020000L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__XDP_BRESP_10_CLR_MASK 0x00040000L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__XDP_BRESP_11_CLR_MASK 0x00080000L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__XDP_BUSER_NACK_01_CLR_MASK 0x00200000L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__XDP_BUSER_NACK_10_CLR_MASK 0x00400000L
|
||||
#define HDP_XDP_MMHUB_ERROR_CLR__XDP_BUSER_NACK_11_CLR_MASK 0x00800000L
|
||||
//HDP_VERSION
|
||||
#define HDP_VERSION__MINVER__SHIFT 0x0
|
||||
#define HDP_VERSION__MAJVER__SHIFT 0x8
|
||||
#define HDP_VERSION__REV__SHIFT 0x10
|
||||
#define HDP_VERSION__MINVER_MASK 0x000000FFL
|
||||
#define HDP_VERSION__MAJVER_MASK 0x0000FF00L
|
||||
#define HDP_VERSION__REV_MASK 0x00FF0000L
|
||||
//HDP_MEMIO_CNTL
|
||||
#define HDP_MEMIO_CNTL__MEMIO_SEND__SHIFT 0x0
|
||||
#define HDP_MEMIO_CNTL__MEMIO_OP__SHIFT 0x1
|
||||
#define HDP_MEMIO_CNTL__MEMIO_BE__SHIFT 0x2
|
||||
#define HDP_MEMIO_CNTL__MEMIO_WR_STROBE__SHIFT 0x6
|
||||
#define HDP_MEMIO_CNTL__MEMIO_RD_STROBE__SHIFT 0x7
|
||||
#define HDP_MEMIO_CNTL__MEMIO_ADDR_UPPER__SHIFT 0x8
|
||||
#define HDP_MEMIO_CNTL__MEMIO_CLR_WR_ERROR__SHIFT 0xe
|
||||
#define HDP_MEMIO_CNTL__MEMIO_CLR_RD_ERROR__SHIFT 0xf
|
||||
#define HDP_MEMIO_CNTL__MEMIO_VF__SHIFT 0x10
|
||||
#define HDP_MEMIO_CNTL__MEMIO_VFID__SHIFT 0x11
|
||||
#define HDP_MEMIO_CNTL__MEMIO_SEND_MASK 0x00000001L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_OP_MASK 0x00000002L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_BE_MASK 0x0000003CL
|
||||
#define HDP_MEMIO_CNTL__MEMIO_WR_STROBE_MASK 0x00000040L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_RD_STROBE_MASK 0x00000080L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_ADDR_UPPER_MASK 0x00003F00L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_CLR_WR_ERROR_MASK 0x00004000L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_CLR_RD_ERROR_MASK 0x00008000L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_VF_MASK 0x00010000L
|
||||
#define HDP_MEMIO_CNTL__MEMIO_VFID_MASK 0x003E0000L
|
||||
//HDP_MEMIO_ADDR
|
||||
#define HDP_MEMIO_ADDR__MEMIO_ADDR_LOWER__SHIFT 0x0
|
||||
#define HDP_MEMIO_ADDR__MEMIO_ADDR_LOWER_MASK 0xFFFFFFFFL
|
||||
//HDP_MEMIO_STATUS
|
||||
#define HDP_MEMIO_STATUS__MEMIO_WR_STATUS__SHIFT 0x0
|
||||
#define HDP_MEMIO_STATUS__MEMIO_RD_STATUS__SHIFT 0x1
|
||||
#define HDP_MEMIO_STATUS__MEMIO_WR_ERROR__SHIFT 0x2
|
||||
#define HDP_MEMIO_STATUS__MEMIO_RD_ERROR__SHIFT 0x3
|
||||
#define HDP_MEMIO_STATUS__MEMIO_WR_STATUS_MASK 0x00000001L
|
||||
#define HDP_MEMIO_STATUS__MEMIO_RD_STATUS_MASK 0x00000002L
|
||||
#define HDP_MEMIO_STATUS__MEMIO_WR_ERROR_MASK 0x00000004L
|
||||
#define HDP_MEMIO_STATUS__MEMIO_RD_ERROR_MASK 0x00000008L
|
||||
//HDP_MEMIO_WR_DATA
|
||||
#define HDP_MEMIO_WR_DATA__MEMIO_WR_DATA__SHIFT 0x0
|
||||
#define HDP_MEMIO_WR_DATA__MEMIO_WR_DATA_MASK 0xFFFFFFFFL
|
||||
//HDP_MEMIO_RD_DATA
|
||||
#define HDP_MEMIO_RD_DATA__MEMIO_RD_DATA__SHIFT 0x0
|
||||
#define HDP_MEMIO_RD_DATA__MEMIO_RD_DATA_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_DIRECT2HDP_FIRST
|
||||
#define HDP_XDP_DIRECT2HDP_FIRST__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_DIRECT2HDP_FIRST__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_FLUSH
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_FLUSH_NUM__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_MBX_ENC_DATA__SHIFT 0x4
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_MBX_ADDR_SEL__SHIFT 0x8
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_XPB_CLG__SHIFT 0xb
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_SEND_HOST__SHIFT 0x10
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_ALTER_FLUSH_NUM__SHIFT 0x12
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_RSVD_0__SHIFT 0x13
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_RSVD_1__SHIFT 0x14
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_FLUSH_NUM_MASK 0x0000000FL
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_MBX_ENC_DATA_MASK 0x000000F0L
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_MBX_ADDR_SEL_MASK 0x00000700L
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_XPB_CLG_MASK 0x0000F800L
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_SEND_HOST_MASK 0x00010000L
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_ALTER_FLUSH_NUM_MASK 0x00040000L
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_RSVD_0_MASK 0x00080000L
|
||||
#define HDP_XDP_D2H_FLUSH__D2H_FLUSH_RSVD_1_MASK 0x00100000L
|
||||
//HDP_XDP_D2H_BAR_UPDATE
|
||||
#define HDP_XDP_D2H_BAR_UPDATE__D2H_BAR_UPDATE_ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_BAR_UPDATE__D2H_BAR_UPDATE_FLUSH_NUM__SHIFT 0x10
|
||||
#define HDP_XDP_D2H_BAR_UPDATE__D2H_BAR_UPDATE_BAR_NUM__SHIFT 0x14
|
||||
#define HDP_XDP_D2H_BAR_UPDATE__D2H_BAR_UPDATE_ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_D2H_BAR_UPDATE__D2H_BAR_UPDATE_FLUSH_NUM_MASK 0x000F0000L
|
||||
#define HDP_XDP_D2H_BAR_UPDATE__D2H_BAR_UPDATE_BAR_NUM_MASK 0x00700000L
|
||||
//HDP_XDP_D2H_RSVD_3
|
||||
#define HDP_XDP_D2H_RSVD_3__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_3__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_4
|
||||
#define HDP_XDP_D2H_RSVD_4__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_4__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_5
|
||||
#define HDP_XDP_D2H_RSVD_5__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_5__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_6
|
||||
#define HDP_XDP_D2H_RSVD_6__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_6__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_7
|
||||
#define HDP_XDP_D2H_RSVD_7__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_7__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_8
|
||||
#define HDP_XDP_D2H_RSVD_8__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_8__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_9
|
||||
#define HDP_XDP_D2H_RSVD_9__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_9__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_10
|
||||
#define HDP_XDP_D2H_RSVD_10__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_10__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_11
|
||||
#define HDP_XDP_D2H_RSVD_11__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_11__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_12
|
||||
#define HDP_XDP_D2H_RSVD_12__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_12__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_13
|
||||
#define HDP_XDP_D2H_RSVD_13__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_13__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_14
|
||||
#define HDP_XDP_D2H_RSVD_14__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_14__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_15
|
||||
#define HDP_XDP_D2H_RSVD_15__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_15__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_16
|
||||
#define HDP_XDP_D2H_RSVD_16__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_16__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_17
|
||||
#define HDP_XDP_D2H_RSVD_17__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_17__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_18
|
||||
#define HDP_XDP_D2H_RSVD_18__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_18__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_19
|
||||
#define HDP_XDP_D2H_RSVD_19__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_19__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_20
|
||||
#define HDP_XDP_D2H_RSVD_20__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_20__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_21
|
||||
#define HDP_XDP_D2H_RSVD_21__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_21__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_22
|
||||
#define HDP_XDP_D2H_RSVD_22__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_22__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_23
|
||||
#define HDP_XDP_D2H_RSVD_23__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_23__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_24
|
||||
#define HDP_XDP_D2H_RSVD_24__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_24__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_25
|
||||
#define HDP_XDP_D2H_RSVD_25__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_25__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_26
|
||||
#define HDP_XDP_D2H_RSVD_26__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_26__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_27
|
||||
#define HDP_XDP_D2H_RSVD_27__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_27__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_28
|
||||
#define HDP_XDP_D2H_RSVD_28__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_28__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_29
|
||||
#define HDP_XDP_D2H_RSVD_29__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_29__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_30
|
||||
#define HDP_XDP_D2H_RSVD_30__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_30__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_31
|
||||
#define HDP_XDP_D2H_RSVD_31__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_31__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_32
|
||||
#define HDP_XDP_D2H_RSVD_32__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_32__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_33
|
||||
#define HDP_XDP_D2H_RSVD_33__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_33__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_D2H_RSVD_34
|
||||
#define HDP_XDP_D2H_RSVD_34__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_D2H_RSVD_34__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_DIRECT2HDP_LAST
|
||||
#define HDP_XDP_DIRECT2HDP_LAST__RESERVED__SHIFT 0x0
|
||||
#define HDP_XDP_DIRECT2HDP_LAST__RESERVED_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_P2P_BAR_CFG
|
||||
#define HDP_XDP_P2P_BAR_CFG__P2P_BAR_CFG_ADDR_SIZE__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR_CFG__P2P_BAR_CFG_BAR_FROM__SHIFT 0x4
|
||||
#define HDP_XDP_P2P_BAR_CFG__P2P_BAR_CFG_ADDR_SIZE_MASK 0x0000000FL
|
||||
#define HDP_XDP_P2P_BAR_CFG__P2P_BAR_CFG_BAR_FROM_MASK 0x00000030L
|
||||
//HDP_XDP_P2P_MBX_OFFSET
|
||||
#define HDP_XDP_P2P_MBX_OFFSET__P2P_MBX_OFFSET__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_OFFSET__P2P_MBX_OFFSET_MASK 0x0001FFFFL
|
||||
//HDP_XDP_P2P_MBX_ADDR0
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__VALID__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__ADDR_35_19__SHIFT 0x3
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__ADDR_47_40__SHIFT 0x18
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__VALID_MASK 0x00000001L
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__ADDR_35_19_MASK 0x000FFFF8L
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_P2P_MBX_ADDR0__ADDR_47_40_MASK 0xFF000000L
|
||||
//HDP_XDP_P2P_MBX_ADDR1
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__VALID__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__ADDR_35_19__SHIFT 0x3
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__ADDR_47_40__SHIFT 0x18
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__VALID_MASK 0x00000001L
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__ADDR_35_19_MASK 0x000FFFF8L
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_P2P_MBX_ADDR1__ADDR_47_40_MASK 0xFF000000L
|
||||
//HDP_XDP_P2P_MBX_ADDR2
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__VALID__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__ADDR_35_19__SHIFT 0x3
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__ADDR_47_40__SHIFT 0x18
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__VALID_MASK 0x00000001L
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__ADDR_35_19_MASK 0x000FFFF8L
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_P2P_MBX_ADDR2__ADDR_47_40_MASK 0xFF000000L
|
||||
//HDP_XDP_P2P_MBX_ADDR3
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__VALID__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__ADDR_35_19__SHIFT 0x3
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__ADDR_47_40__SHIFT 0x18
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__VALID_MASK 0x00000001L
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__ADDR_35_19_MASK 0x000FFFF8L
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_P2P_MBX_ADDR3__ADDR_47_40_MASK 0xFF000000L
|
||||
//HDP_XDP_P2P_MBX_ADDR4
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__VALID__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__ADDR_35_19__SHIFT 0x3
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__ADDR_47_40__SHIFT 0x18
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__VALID_MASK 0x00000001L
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__ADDR_35_19_MASK 0x000FFFF8L
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_P2P_MBX_ADDR4__ADDR_47_40_MASK 0xFF000000L
|
||||
//HDP_XDP_P2P_MBX_ADDR5
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__VALID__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__ADDR_35_19__SHIFT 0x3
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__ADDR_47_40__SHIFT 0x18
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__VALID_MASK 0x00000001L
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__ADDR_35_19_MASK 0x000FFFF8L
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_P2P_MBX_ADDR5__ADDR_47_40_MASK 0xFF000000L
|
||||
//HDP_XDP_P2P_MBX_ADDR6
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__VALID__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__ADDR_35_19__SHIFT 0x3
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__ADDR_47_40__SHIFT 0x18
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__VALID_MASK 0x00000001L
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__ADDR_35_19_MASK 0x000FFFF8L
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_P2P_MBX_ADDR6__ADDR_47_40_MASK 0xFF000000L
|
||||
//HDP_XDP_HDP_MBX_MC_CFG
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_QOS__SHIFT 0x0
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_SWAP__SHIFT 0x4
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_VMID__SHIFT 0x8
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_RO__SHIFT 0xc
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_GCC__SHIFT 0xd
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_SNOOP__SHIFT 0xe
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_QOS_MASK 0x0000000FL
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_SWAP_MASK 0x00000030L
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_VMID_MASK 0x00000F00L
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_RO_MASK 0x00001000L
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_GCC_MASK 0x00002000L
|
||||
#define HDP_XDP_HDP_MBX_MC_CFG__HDP_MBX_MC_CFG_TAP_WRREQ_SNOOP_MASK 0x00004000L
|
||||
//HDP_XDP_HDP_MC_CFG
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_SNOOP_OVERRIDE__SHIFT 0x0
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_GCC_OVERRIDE__SHIFT 0x1
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_RO_OVERRIDE__SHIFT 0x2
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_SNOOP__SHIFT 0x3
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_SWAP__SHIFT 0x4
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_VMID__SHIFT 0x8
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_RO__SHIFT 0xc
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_GCC__SHIFT 0xd
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_XDP_HIGHER_PRI_THRESH__SHIFT 0xe
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_SNOOP_OVERRIDE_MASK 0x00000001L
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_GCC_OVERRIDE_MASK 0x00000002L
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_RO_OVERRIDE_MASK 0x00000004L
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_SNOOP_MASK 0x00000008L
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_SWAP_MASK 0x00000030L
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_VMID_MASK 0x00000F00L
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_RO_MASK 0x00001000L
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_HST_TAP_REQ_GCC_MASK 0x00002000L
|
||||
#define HDP_XDP_HDP_MC_CFG__HDP_MC_CFG_XDP_HIGHER_PRI_THRESH_MASK 0x000FC000L
|
||||
//HDP_XDP_HST_CFG
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_EN__SHIFT 0x0
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_TIMER__SHIFT 0x1
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_BURST_EN__SHIFT 0x3
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_64B_EN__SHIFT 0x4
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_TIMER_PRELOAD_CFG__SHIFT 0x5
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_EN_MASK 0x00000001L
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_TIMER_MASK 0x00000006L
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_BURST_EN_MASK 0x00000008L
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_64B_EN_MASK 0x00000010L
|
||||
#define HDP_XDP_HST_CFG__HST_CFG_WR_COMBINE_TIMER_PRELOAD_CFG_MASK 0x00000020L
|
||||
//HDP_XDP_HDP_IPH_CFG
|
||||
#define HDP_XDP_HDP_IPH_CFG__HDP_IPH_CFG_INVERSE_PEER_TAG_MATCHING__SHIFT 0xc
|
||||
#define HDP_XDP_HDP_IPH_CFG__HDP_IPH_CFG_P2P_RD_EN__SHIFT 0xd
|
||||
#define HDP_XDP_HDP_IPH_CFG__HDP_IPH_CFG_INVERSE_PEER_TAG_MATCHING_MASK 0x00001000L
|
||||
#define HDP_XDP_HDP_IPH_CFG__HDP_IPH_CFG_P2P_RD_EN_MASK 0x00002000L
|
||||
//HDP_XDP_P2P_BAR0
|
||||
#define HDP_XDP_P2P_BAR0__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR0__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR0__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR0__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR0__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR0__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_P2P_BAR1
|
||||
#define HDP_XDP_P2P_BAR1__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR1__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR1__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR1__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR1__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR1__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_P2P_BAR2
|
||||
#define HDP_XDP_P2P_BAR2__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR2__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR2__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR2__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR2__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR2__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_P2P_BAR3
|
||||
#define HDP_XDP_P2P_BAR3__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR3__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR3__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR3__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR3__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR3__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_P2P_BAR4
|
||||
#define HDP_XDP_P2P_BAR4__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR4__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR4__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR4__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR4__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR4__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_P2P_BAR5
|
||||
#define HDP_XDP_P2P_BAR5__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR5__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR5__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR5__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR5__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR5__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_P2P_BAR6
|
||||
#define HDP_XDP_P2P_BAR6__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR6__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR6__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR6__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR6__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR6__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_P2P_BAR7
|
||||
#define HDP_XDP_P2P_BAR7__ADDR__SHIFT 0x0
|
||||
#define HDP_XDP_P2P_BAR7__FLUSH__SHIFT 0x10
|
||||
#define HDP_XDP_P2P_BAR7__VALID__SHIFT 0x14
|
||||
#define HDP_XDP_P2P_BAR7__ADDR_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_P2P_BAR7__FLUSH_MASK 0x000F0000L
|
||||
#define HDP_XDP_P2P_BAR7__VALID_MASK 0x00100000L
|
||||
//HDP_XDP_FLUSH_ARMED_STS
|
||||
#define HDP_XDP_FLUSH_ARMED_STS__FLUSH_ARMED_STS__SHIFT 0x0
|
||||
#define HDP_XDP_FLUSH_ARMED_STS__FLUSH_ARMED_STS_MASK 0xFFFFFFFFL
|
||||
//HDP_XDP_FLUSH_CNTR0_STS
|
||||
#define HDP_XDP_FLUSH_CNTR0_STS__FLUSH_CNTR0_STS__SHIFT 0x0
|
||||
#define HDP_XDP_FLUSH_CNTR0_STS__FLUSH_CNTR0_STS_MASK 0x03FFFFFFL
|
||||
//HDP_XDP_STICKY
|
||||
#define HDP_XDP_STICKY__STICKY_STS__SHIFT 0x0
|
||||
#define HDP_XDP_STICKY__STICKY_W1C__SHIFT 0x10
|
||||
#define HDP_XDP_STICKY__STICKY_STS_MASK 0x0000FFFFL
|
||||
#define HDP_XDP_STICKY__STICKY_W1C_MASK 0xFFFF0000L
|
||||
//HDP_XDP_CHKN
|
||||
#define HDP_XDP_CHKN__CHKN_0_RSVD__SHIFT 0x0
|
||||
#define HDP_XDP_CHKN__CHKN_1_RSVD__SHIFT 0x8
|
||||
#define HDP_XDP_CHKN__CHKN_2_RSVD__SHIFT 0x10
|
||||
#define HDP_XDP_CHKN__CHKN_3_RSVD__SHIFT 0x18
|
||||
#define HDP_XDP_CHKN__CHKN_0_RSVD_MASK 0x000000FFL
|
||||
#define HDP_XDP_CHKN__CHKN_1_RSVD_MASK 0x0000FF00L
|
||||
#define HDP_XDP_CHKN__CHKN_2_RSVD_MASK 0x00FF0000L
|
||||
#define HDP_XDP_CHKN__CHKN_3_RSVD_MASK 0xFF000000L
|
||||
//HDP_XDP_BARS_ADDR_39_36
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR0_ADDR_39_36__SHIFT 0x0
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR1_ADDR_39_36__SHIFT 0x4
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR2_ADDR_39_36__SHIFT 0x8
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR3_ADDR_39_36__SHIFT 0xc
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR4_ADDR_39_36__SHIFT 0x10
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR5_ADDR_39_36__SHIFT 0x14
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR6_ADDR_39_36__SHIFT 0x18
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR7_ADDR_39_36__SHIFT 0x1c
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR0_ADDR_39_36_MASK 0x0000000FL
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR1_ADDR_39_36_MASK 0x000000F0L
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR2_ADDR_39_36_MASK 0x00000F00L
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR3_ADDR_39_36_MASK 0x0000F000L
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR4_ADDR_39_36_MASK 0x000F0000L
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR5_ADDR_39_36_MASK 0x00F00000L
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR6_ADDR_39_36_MASK 0x0F000000L
|
||||
#define HDP_XDP_BARS_ADDR_39_36__BAR7_ADDR_39_36_MASK 0xF0000000L
|
||||
//HDP_XDP_MC_VM_FB_LOCATION_BASE
|
||||
#define HDP_XDP_MC_VM_FB_LOCATION_BASE__FB_BASE__SHIFT 0x0
|
||||
#define HDP_XDP_MC_VM_FB_LOCATION_BASE__FB_BASE_MASK 0x03FFFFFFL
|
||||
//HDP_XDP_GPU_IOV_VIOLATION_LOG
|
||||
#define HDP_XDP_GPU_IOV_VIOLATION_LOG__VIOLATION_STATUS__SHIFT 0x0
|
||||
#define HDP_XDP_GPU_IOV_VIOLATION_LOG__MULTIPLE_VIOLATION_STATUS__SHIFT 0x1
|
||||
#define HDP_XDP_GPU_IOV_VIOLATION_LOG__ADDRESS__SHIFT 0x2
|
||||
#define HDP_XDP_GPU_IOV_VIOLATION_LOG__OPCODE__SHIFT 0x12
|
||||
#define HDP_XDP_GPU_IOV_VIOLATION_LOG__VF__SHIFT 0x13
|
||||
#define HDP_XDP_GPU_IOV_VIOLATION_LOG__VFID__SHIFT 0x14
|
||||
#define HDP_XDP_GPU_IOV_VIOLATION_LOG__VIOLATION_STATUS_MASK 0x00000001L
|
||||
#define HDP_XDP_GPU_IOV_VIOLATION_LOG__MULTIPLE_VIOLATION_STATUS_MASK 0x00000002L
|
||||
#define HDP_XDP_GPU_IOV_VIOLATION_LOG__ADDRESS_MASK 0x0003FFFCL
|
||||
#define HDP_XDP_GPU_IOV_VIOLATION_LOG__OPCODE_MASK 0x00040000L
|
||||
#define HDP_XDP_GPU_IOV_VIOLATION_LOG__VF_MASK 0x00080000L
|
||||
#define HDP_XDP_GPU_IOV_VIOLATION_LOG__VFID_MASK 0x01F00000L
|
||||
//HDP_XDP_GPU_IOV_VIOLATION_LOG2
|
||||
#define HDP_XDP_GPU_IOV_VIOLATION_LOG2__INITIATOR_ID__SHIFT 0x0
|
||||
#define HDP_XDP_GPU_IOV_VIOLATION_LOG2__INITIATOR_ID_MASK 0x000003FFL
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,359 @@
|
||||
/*
|
||||
* Copyright 2023 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*
|
||||
*/
|
||||
#ifndef _mp_14_0_0_OFFSET_HEADER
|
||||
#define _mp_14_0_0_OFFSET_HEADER
|
||||
|
||||
// addressBlock: mp_SmuMp1_SmnDec
|
||||
// base address: 0x0
|
||||
#define regMP1_SMN_C2PMSG_0 0x0240
|
||||
#define regMP1_SMN_C2PMSG_0_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_1 0x0241
|
||||
#define regMP1_SMN_C2PMSG_1_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_2 0x0242
|
||||
#define regMP1_SMN_C2PMSG_2_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_3 0x0243
|
||||
#define regMP1_SMN_C2PMSG_3_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_4 0x0244
|
||||
#define regMP1_SMN_C2PMSG_4_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_5 0x0245
|
||||
#define regMP1_SMN_C2PMSG_5_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_6 0x0246
|
||||
#define regMP1_SMN_C2PMSG_6_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_7 0x0247
|
||||
#define regMP1_SMN_C2PMSG_7_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_8 0x0248
|
||||
#define regMP1_SMN_C2PMSG_8_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_9 0x0249
|
||||
#define regMP1_SMN_C2PMSG_9_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_10 0x024a
|
||||
#define regMP1_SMN_C2PMSG_10_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_11 0x024b
|
||||
#define regMP1_SMN_C2PMSG_11_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_12 0x024c
|
||||
#define regMP1_SMN_C2PMSG_12_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_13 0x024d
|
||||
#define regMP1_SMN_C2PMSG_13_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_14 0x024e
|
||||
#define regMP1_SMN_C2PMSG_14_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_15 0x024f
|
||||
#define regMP1_SMN_C2PMSG_15_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_16 0x0250
|
||||
#define regMP1_SMN_C2PMSG_16_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_17 0x0251
|
||||
#define regMP1_SMN_C2PMSG_17_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_18 0x0252
|
||||
#define regMP1_SMN_C2PMSG_18_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_19 0x0253
|
||||
#define regMP1_SMN_C2PMSG_19_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_20 0x0254
|
||||
#define regMP1_SMN_C2PMSG_20_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_21 0x0255
|
||||
#define regMP1_SMN_C2PMSG_21_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_22 0x0256
|
||||
#define regMP1_SMN_C2PMSG_22_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_23 0x0257
|
||||
#define regMP1_SMN_C2PMSG_23_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_24 0x0258
|
||||
#define regMP1_SMN_C2PMSG_24_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_25 0x0259
|
||||
#define regMP1_SMN_C2PMSG_25_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_26 0x025a
|
||||
#define regMP1_SMN_C2PMSG_26_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_27 0x025b
|
||||
#define regMP1_SMN_C2PMSG_27_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_28 0x025c
|
||||
#define regMP1_SMN_C2PMSG_28_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_29 0x025d
|
||||
#define regMP1_SMN_C2PMSG_29_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_30 0x025e
|
||||
#define regMP1_SMN_C2PMSG_30_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_31 0x025f
|
||||
#define regMP1_SMN_C2PMSG_31_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_32 0x0260
|
||||
#define regMP1_SMN_C2PMSG_32_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_33 0x0261
|
||||
#define regMP1_SMN_C2PMSG_33_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_34 0x0262
|
||||
#define regMP1_SMN_C2PMSG_34_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_35 0x0263
|
||||
#define regMP1_SMN_C2PMSG_35_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_36 0x0264
|
||||
#define regMP1_SMN_C2PMSG_36_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_37 0x0265
|
||||
#define regMP1_SMN_C2PMSG_37_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_38 0x0266
|
||||
#define regMP1_SMN_C2PMSG_38_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_39 0x0267
|
||||
#define regMP1_SMN_C2PMSG_39_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_40 0x0268
|
||||
#define regMP1_SMN_C2PMSG_40_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_41 0x0269
|
||||
#define regMP1_SMN_C2PMSG_41_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_42 0x026a
|
||||
#define regMP1_SMN_C2PMSG_42_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_43 0x026b
|
||||
#define regMP1_SMN_C2PMSG_43_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_44 0x026c
|
||||
#define regMP1_SMN_C2PMSG_44_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_45 0x026d
|
||||
#define regMP1_SMN_C2PMSG_45_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_46 0x026e
|
||||
#define regMP1_SMN_C2PMSG_46_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_47 0x026f
|
||||
#define regMP1_SMN_C2PMSG_47_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_48 0x0270
|
||||
#define regMP1_SMN_C2PMSG_48_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_49 0x0271
|
||||
#define regMP1_SMN_C2PMSG_49_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_50 0x0272
|
||||
#define regMP1_SMN_C2PMSG_50_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_51 0x0273
|
||||
#define regMP1_SMN_C2PMSG_51_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_52 0x0274
|
||||
#define regMP1_SMN_C2PMSG_52_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_53 0x0275
|
||||
#define regMP1_SMN_C2PMSG_53_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_54 0x0276
|
||||
#define regMP1_SMN_C2PMSG_54_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_55 0x0277
|
||||
#define regMP1_SMN_C2PMSG_55_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_56 0x0278
|
||||
#define regMP1_SMN_C2PMSG_56_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_57 0x0279
|
||||
#define regMP1_SMN_C2PMSG_57_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_58 0x027a
|
||||
#define regMP1_SMN_C2PMSG_58_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_59 0x027b
|
||||
#define regMP1_SMN_C2PMSG_59_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_60 0x027c
|
||||
#define regMP1_SMN_C2PMSG_60_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_61 0x027d
|
||||
#define regMP1_SMN_C2PMSG_61_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_62 0x027e
|
||||
#define regMP1_SMN_C2PMSG_62_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_63 0x027f
|
||||
#define regMP1_SMN_C2PMSG_63_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_64 0x0280
|
||||
#define regMP1_SMN_C2PMSG_64_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_65 0x0281
|
||||
#define regMP1_SMN_C2PMSG_65_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_66 0x0282
|
||||
#define regMP1_SMN_C2PMSG_66_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_67 0x0283
|
||||
#define regMP1_SMN_C2PMSG_67_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_68 0x0284
|
||||
#define regMP1_SMN_C2PMSG_68_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_69 0x0285
|
||||
#define regMP1_SMN_C2PMSG_69_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_70 0x0286
|
||||
#define regMP1_SMN_C2PMSG_70_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_71 0x0287
|
||||
#define regMP1_SMN_C2PMSG_71_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_72 0x0288
|
||||
#define regMP1_SMN_C2PMSG_72_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_73 0x0289
|
||||
#define regMP1_SMN_C2PMSG_73_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_74 0x028a
|
||||
#define regMP1_SMN_C2PMSG_74_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_75 0x028b
|
||||
#define regMP1_SMN_C2PMSG_75_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_76 0x028c
|
||||
#define regMP1_SMN_C2PMSG_76_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_77 0x028d
|
||||
#define regMP1_SMN_C2PMSG_77_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_78 0x028e
|
||||
#define regMP1_SMN_C2PMSG_78_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_79 0x028f
|
||||
#define regMP1_SMN_C2PMSG_79_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_80 0x0290
|
||||
#define regMP1_SMN_C2PMSG_80_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_81 0x0291
|
||||
#define regMP1_SMN_C2PMSG_81_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_82 0x0292
|
||||
#define regMP1_SMN_C2PMSG_82_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_83 0x0293
|
||||
#define regMP1_SMN_C2PMSG_83_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_84 0x0294
|
||||
#define regMP1_SMN_C2PMSG_84_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_85 0x0295
|
||||
#define regMP1_SMN_C2PMSG_85_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_86 0x0296
|
||||
#define regMP1_SMN_C2PMSG_86_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_87 0x0297
|
||||
#define regMP1_SMN_C2PMSG_87_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_88 0x0298
|
||||
#define regMP1_SMN_C2PMSG_88_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_89 0x0299
|
||||
#define regMP1_SMN_C2PMSG_89_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_90 0x029a
|
||||
#define regMP1_SMN_C2PMSG_90_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_91 0x029b
|
||||
#define regMP1_SMN_C2PMSG_91_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_92 0x029c
|
||||
#define regMP1_SMN_C2PMSG_92_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_93 0x029d
|
||||
#define regMP1_SMN_C2PMSG_93_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_94 0x029e
|
||||
#define regMP1_SMN_C2PMSG_94_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_95 0x029f
|
||||
#define regMP1_SMN_C2PMSG_95_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_96 0x02a0
|
||||
#define regMP1_SMN_C2PMSG_96_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_97 0x02a1
|
||||
#define regMP1_SMN_C2PMSG_97_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_98 0x02a2
|
||||
#define regMP1_SMN_C2PMSG_98_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_99 0x02a3
|
||||
#define regMP1_SMN_C2PMSG_99_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_100 0x02a4
|
||||
#define regMP1_SMN_C2PMSG_100_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_101 0x02a5
|
||||
#define regMP1_SMN_C2PMSG_101_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_102 0x02a6
|
||||
#define regMP1_SMN_C2PMSG_102_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_103 0x02a7
|
||||
#define regMP1_SMN_C2PMSG_103_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_104 0x02a8
|
||||
#define regMP1_SMN_C2PMSG_104_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_105 0x02a9
|
||||
#define regMP1_SMN_C2PMSG_105_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_106 0x02aa
|
||||
#define regMP1_SMN_C2PMSG_106_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_107 0x02ab
|
||||
#define regMP1_SMN_C2PMSG_107_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_108 0x02ac
|
||||
#define regMP1_SMN_C2PMSG_108_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_109 0x02ad
|
||||
#define regMP1_SMN_C2PMSG_109_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_110 0x02ae
|
||||
#define regMP1_SMN_C2PMSG_110_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_111 0x02af
|
||||
#define regMP1_SMN_C2PMSG_111_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_112 0x02b0
|
||||
#define regMP1_SMN_C2PMSG_112_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_113 0x02b1
|
||||
#define regMP1_SMN_C2PMSG_113_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_114 0x02b2
|
||||
#define regMP1_SMN_C2PMSG_114_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_115 0x02b3
|
||||
#define regMP1_SMN_C2PMSG_115_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_116 0x02b4
|
||||
#define regMP1_SMN_C2PMSG_116_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_117 0x02b5
|
||||
#define regMP1_SMN_C2PMSG_117_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_118 0x02b6
|
||||
#define regMP1_SMN_C2PMSG_118_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_119 0x02b7
|
||||
#define regMP1_SMN_C2PMSG_119_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_120 0x02b8
|
||||
#define regMP1_SMN_C2PMSG_120_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_121 0x02b9
|
||||
#define regMP1_SMN_C2PMSG_121_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_122 0x02ba
|
||||
#define regMP1_SMN_C2PMSG_122_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_123 0x02bb
|
||||
#define regMP1_SMN_C2PMSG_123_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_124 0x02bc
|
||||
#define regMP1_SMN_C2PMSG_124_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_125 0x02bd
|
||||
#define regMP1_SMN_C2PMSG_125_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_126 0x02be
|
||||
#define regMP1_SMN_C2PMSG_126_BASE_IDX 0
|
||||
#define regMP1_SMN_C2PMSG_127 0x02bf
|
||||
#define regMP1_SMN_C2PMSG_127_BASE_IDX 0
|
||||
#define regMP1_SMN_IH_CREDIT 0x0340
|
||||
#define regMP1_SMN_IH_CREDIT_BASE_IDX 0
|
||||
#define regMP1_SMN_IH_SW_INT 0x0341
|
||||
#define regMP1_SMN_IH_SW_INT_BASE_IDX 0
|
||||
#define regMP1_SMN_IH_SW_INT_CTRL 0x0342
|
||||
#define regMP1_SMN_IH_SW_INT_CTRL_BASE_IDX 0
|
||||
#define regMP1_SMN_FPS_CNT 0x0343
|
||||
#define regMP1_SMN_FPS_CNT_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH0 0x03c0
|
||||
#define regMP1_SMN_EXT_SCRATCH0_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH1 0x03c1
|
||||
#define regMP1_SMN_EXT_SCRATCH1_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH2 0x03c2
|
||||
#define regMP1_SMN_EXT_SCRATCH2_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH3 0x03c3
|
||||
#define regMP1_SMN_EXT_SCRATCH3_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH4 0x03c4
|
||||
#define regMP1_SMN_EXT_SCRATCH4_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH5 0x03c5
|
||||
#define regMP1_SMN_EXT_SCRATCH5_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH6 0x03c6
|
||||
#define regMP1_SMN_EXT_SCRATCH6_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH7 0x03c7
|
||||
#define regMP1_SMN_EXT_SCRATCH7_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH8 0x03c8
|
||||
#define regMP1_SMN_EXT_SCRATCH8_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH9 0x03c9
|
||||
#define regMP1_SMN_EXT_SCRATCH9_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH10 0x03ca
|
||||
#define regMP1_SMN_EXT_SCRATCH10_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH11 0x03cb
|
||||
#define regMP1_SMN_EXT_SCRATCH11_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH12 0x03cc
|
||||
#define regMP1_SMN_EXT_SCRATCH12_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH13 0x03cd
|
||||
#define regMP1_SMN_EXT_SCRATCH13_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH14 0x03ce
|
||||
#define regMP1_SMN_EXT_SCRATCH14_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH15 0x03cf
|
||||
#define regMP1_SMN_EXT_SCRATCH15_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH16 0x03d0
|
||||
#define regMP1_SMN_EXT_SCRATCH16_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH17 0x03d1
|
||||
#define regMP1_SMN_EXT_SCRATCH17_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH18 0x03d2
|
||||
#define regMP1_SMN_EXT_SCRATCH18_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH19 0x03d3
|
||||
#define regMP1_SMN_EXT_SCRATCH19_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH20 0x03d4
|
||||
#define regMP1_SMN_EXT_SCRATCH20_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH21 0x03d5
|
||||
#define regMP1_SMN_EXT_SCRATCH21_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH22 0x03d6
|
||||
#define regMP1_SMN_EXT_SCRATCH22_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH23 0x03d7
|
||||
#define regMP1_SMN_EXT_SCRATCH23_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH24 0x03d8
|
||||
#define regMP1_SMN_EXT_SCRATCH24_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH25 0x03d9
|
||||
#define regMP1_SMN_EXT_SCRATCH25_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH26 0x03da
|
||||
#define regMP1_SMN_EXT_SCRATCH26_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH27 0x03db
|
||||
#define regMP1_SMN_EXT_SCRATCH27_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH28 0x03dc
|
||||
#define regMP1_SMN_EXT_SCRATCH28_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH29 0x03dd
|
||||
#define regMP1_SMN_EXT_SCRATCH29_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH30 0x03de
|
||||
#define regMP1_SMN_EXT_SCRATCH30_BASE_IDX 0
|
||||
#define regMP1_SMN_EXT_SCRATCH31 0x03df
|
||||
#define regMP1_SMN_EXT_SCRATCH31_BASE_IDX 0
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,534 @@
|
||||
/*
|
||||
* Copyright 2023 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
#ifndef _mp_14_0_0_SH_MASK_HEADER
|
||||
#define _mp_14_0_0_SH_MASK_HEADER
|
||||
|
||||
// addressBlock: mp_SmuMp1Pub_CruDec
|
||||
//MP1_CRU1_MP1_FIRMWARE_FLAGS
|
||||
#define MP1_CRU1_MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED__SHIFT 0x0
|
||||
#define MP1_CRU1_MP1_FIRMWARE_FLAGS__RESERVED__SHIFT 0x1
|
||||
#define MP1_CRU1_MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED_MASK 0x00000001L
|
||||
#define MP1_CRU1_MP1_FIRMWARE_FLAGS__RESERVED_MASK 0xFFFFFFFEL
|
||||
|
||||
|
||||
// addressBlock: mp_SmuMp1_SmnDec
|
||||
//MP1_SMN_C2PMSG_0
|
||||
#define MP1_SMN_C2PMSG_0__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_0__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_1
|
||||
#define MP1_SMN_C2PMSG_1__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_1__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_2
|
||||
#define MP1_SMN_C2PMSG_2__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_2__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_3
|
||||
#define MP1_SMN_C2PMSG_3__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_3__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_4
|
||||
#define MP1_SMN_C2PMSG_4__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_4__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_5
|
||||
#define MP1_SMN_C2PMSG_5__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_5__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_6
|
||||
#define MP1_SMN_C2PMSG_6__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_6__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_7
|
||||
#define MP1_SMN_C2PMSG_7__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_7__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_8
|
||||
#define MP1_SMN_C2PMSG_8__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_8__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_9
|
||||
#define MP1_SMN_C2PMSG_9__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_9__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_10
|
||||
#define MP1_SMN_C2PMSG_10__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_10__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_11
|
||||
#define MP1_SMN_C2PMSG_11__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_11__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_12
|
||||
#define MP1_SMN_C2PMSG_12__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_12__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_13
|
||||
#define MP1_SMN_C2PMSG_13__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_13__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_14
|
||||
#define MP1_SMN_C2PMSG_14__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_14__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_15
|
||||
#define MP1_SMN_C2PMSG_15__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_15__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_16
|
||||
#define MP1_SMN_C2PMSG_16__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_16__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_17
|
||||
#define MP1_SMN_C2PMSG_17__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_17__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_18
|
||||
#define MP1_SMN_C2PMSG_18__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_18__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_19
|
||||
#define MP1_SMN_C2PMSG_19__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_19__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_20
|
||||
#define MP1_SMN_C2PMSG_20__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_20__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_21
|
||||
#define MP1_SMN_C2PMSG_21__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_21__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_22
|
||||
#define MP1_SMN_C2PMSG_22__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_22__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_23
|
||||
#define MP1_SMN_C2PMSG_23__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_23__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_24
|
||||
#define MP1_SMN_C2PMSG_24__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_24__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_25
|
||||
#define MP1_SMN_C2PMSG_25__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_25__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_26
|
||||
#define MP1_SMN_C2PMSG_26__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_26__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_27
|
||||
#define MP1_SMN_C2PMSG_27__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_27__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_28
|
||||
#define MP1_SMN_C2PMSG_28__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_28__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_29
|
||||
#define MP1_SMN_C2PMSG_29__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_29__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_30
|
||||
#define MP1_SMN_C2PMSG_30__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_30__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_31
|
||||
#define MP1_SMN_C2PMSG_31__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_31__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_32
|
||||
#define MP1_SMN_C2PMSG_32__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_32__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_33
|
||||
#define MP1_SMN_C2PMSG_33__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_33__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_34
|
||||
#define MP1_SMN_C2PMSG_34__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_34__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_35
|
||||
#define MP1_SMN_C2PMSG_35__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_35__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_36
|
||||
#define MP1_SMN_C2PMSG_36__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_36__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_37
|
||||
#define MP1_SMN_C2PMSG_37__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_37__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_38
|
||||
#define MP1_SMN_C2PMSG_38__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_38__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_39
|
||||
#define MP1_SMN_C2PMSG_39__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_39__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_40
|
||||
#define MP1_SMN_C2PMSG_40__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_40__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_41
|
||||
#define MP1_SMN_C2PMSG_41__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_41__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_42
|
||||
#define MP1_SMN_C2PMSG_42__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_42__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_43
|
||||
#define MP1_SMN_C2PMSG_43__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_43__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_44
|
||||
#define MP1_SMN_C2PMSG_44__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_44__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_45
|
||||
#define MP1_SMN_C2PMSG_45__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_45__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_46
|
||||
#define MP1_SMN_C2PMSG_46__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_46__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_47
|
||||
#define MP1_SMN_C2PMSG_47__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_47__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_48
|
||||
#define MP1_SMN_C2PMSG_48__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_48__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_49
|
||||
#define MP1_SMN_C2PMSG_49__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_49__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_50
|
||||
#define MP1_SMN_C2PMSG_50__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_50__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_51
|
||||
#define MP1_SMN_C2PMSG_51__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_51__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_52
|
||||
#define MP1_SMN_C2PMSG_52__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_52__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_53
|
||||
#define MP1_SMN_C2PMSG_53__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_53__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_54
|
||||
#define MP1_SMN_C2PMSG_54__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_54__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_55
|
||||
#define MP1_SMN_C2PMSG_55__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_55__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_56
|
||||
#define MP1_SMN_C2PMSG_56__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_56__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_57
|
||||
#define MP1_SMN_C2PMSG_57__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_57__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_58
|
||||
#define MP1_SMN_C2PMSG_58__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_58__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_59
|
||||
#define MP1_SMN_C2PMSG_59__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_59__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_60
|
||||
#define MP1_SMN_C2PMSG_60__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_60__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_61
|
||||
#define MP1_SMN_C2PMSG_61__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_61__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_62
|
||||
#define MP1_SMN_C2PMSG_62__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_62__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_63
|
||||
#define MP1_SMN_C2PMSG_63__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_63__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_64
|
||||
#define MP1_SMN_C2PMSG_64__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_64__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_65
|
||||
#define MP1_SMN_C2PMSG_65__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_65__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_66
|
||||
#define MP1_SMN_C2PMSG_66__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_66__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_67
|
||||
#define MP1_SMN_C2PMSG_67__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_67__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_68
|
||||
#define MP1_SMN_C2PMSG_68__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_68__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_69
|
||||
#define MP1_SMN_C2PMSG_69__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_69__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_70
|
||||
#define MP1_SMN_C2PMSG_70__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_70__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_71
|
||||
#define MP1_SMN_C2PMSG_71__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_71__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_72
|
||||
#define MP1_SMN_C2PMSG_72__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_72__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_73
|
||||
#define MP1_SMN_C2PMSG_73__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_73__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_74
|
||||
#define MP1_SMN_C2PMSG_74__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_74__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_75
|
||||
#define MP1_SMN_C2PMSG_75__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_75__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_76
|
||||
#define MP1_SMN_C2PMSG_76__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_76__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_77
|
||||
#define MP1_SMN_C2PMSG_77__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_77__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_78
|
||||
#define MP1_SMN_C2PMSG_78__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_78__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_79
|
||||
#define MP1_SMN_C2PMSG_79__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_79__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_80
|
||||
#define MP1_SMN_C2PMSG_80__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_80__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_81
|
||||
#define MP1_SMN_C2PMSG_81__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_81__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_82
|
||||
#define MP1_SMN_C2PMSG_82__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_82__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_83
|
||||
#define MP1_SMN_C2PMSG_83__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_83__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_84
|
||||
#define MP1_SMN_C2PMSG_84__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_84__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_85
|
||||
#define MP1_SMN_C2PMSG_85__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_85__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_86
|
||||
#define MP1_SMN_C2PMSG_86__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_86__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_87
|
||||
#define MP1_SMN_C2PMSG_87__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_87__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_88
|
||||
#define MP1_SMN_C2PMSG_88__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_88__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_89
|
||||
#define MP1_SMN_C2PMSG_89__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_89__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_90
|
||||
#define MP1_SMN_C2PMSG_90__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_90__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_91
|
||||
#define MP1_SMN_C2PMSG_91__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_91__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_92
|
||||
#define MP1_SMN_C2PMSG_92__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_92__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_93
|
||||
#define MP1_SMN_C2PMSG_93__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_93__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_94
|
||||
#define MP1_SMN_C2PMSG_94__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_94__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_95
|
||||
#define MP1_SMN_C2PMSG_95__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_95__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_96
|
||||
#define MP1_SMN_C2PMSG_96__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_96__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_97
|
||||
#define MP1_SMN_C2PMSG_97__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_97__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_98
|
||||
#define MP1_SMN_C2PMSG_98__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_98__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_99
|
||||
#define MP1_SMN_C2PMSG_99__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_99__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_100
|
||||
#define MP1_SMN_C2PMSG_100__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_100__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_101
|
||||
#define MP1_SMN_C2PMSG_101__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_101__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_102
|
||||
#define MP1_SMN_C2PMSG_102__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_102__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_103
|
||||
#define MP1_SMN_C2PMSG_103__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_103__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_104
|
||||
#define MP1_SMN_C2PMSG_104__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_104__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_105
|
||||
#define MP1_SMN_C2PMSG_105__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_105__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_106
|
||||
#define MP1_SMN_C2PMSG_106__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_106__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_107
|
||||
#define MP1_SMN_C2PMSG_107__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_107__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_108
|
||||
#define MP1_SMN_C2PMSG_108__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_108__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_109
|
||||
#define MP1_SMN_C2PMSG_109__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_109__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_110
|
||||
#define MP1_SMN_C2PMSG_110__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_110__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_111
|
||||
#define MP1_SMN_C2PMSG_111__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_111__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_112
|
||||
#define MP1_SMN_C2PMSG_112__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_112__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_113
|
||||
#define MP1_SMN_C2PMSG_113__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_113__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_114
|
||||
#define MP1_SMN_C2PMSG_114__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_114__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_115
|
||||
#define MP1_SMN_C2PMSG_115__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_115__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_116
|
||||
#define MP1_SMN_C2PMSG_116__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_116__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_117
|
||||
#define MP1_SMN_C2PMSG_117__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_117__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_118
|
||||
#define MP1_SMN_C2PMSG_118__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_118__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_119
|
||||
#define MP1_SMN_C2PMSG_119__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_119__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_120
|
||||
#define MP1_SMN_C2PMSG_120__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_120__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_121
|
||||
#define MP1_SMN_C2PMSG_121__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_121__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_122
|
||||
#define MP1_SMN_C2PMSG_122__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_122__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_123
|
||||
#define MP1_SMN_C2PMSG_123__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_123__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_124
|
||||
#define MP1_SMN_C2PMSG_124__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_124__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_125
|
||||
#define MP1_SMN_C2PMSG_125__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_125__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_126
|
||||
#define MP1_SMN_C2PMSG_126__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_126__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_127
|
||||
#define MP1_SMN_C2PMSG_127__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_127__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_IH_CREDIT
|
||||
#define MP1_SMN_IH_CREDIT__CREDIT_VALUE__SHIFT 0x0
|
||||
#define MP1_SMN_IH_CREDIT__CLIENT_ID__SHIFT 0x10
|
||||
#define MP1_SMN_IH_CREDIT__CREDIT_VALUE_MASK 0x00000003L
|
||||
#define MP1_SMN_IH_CREDIT__CLIENT_ID_MASK 0x00FF0000L
|
||||
//MP1_SMN_IH_SW_INT
|
||||
#define MP1_SMN_IH_SW_INT__ID__SHIFT 0x0
|
||||
#define MP1_SMN_IH_SW_INT__VALID__SHIFT 0x8
|
||||
#define MP1_SMN_IH_SW_INT__ID_MASK 0x000000FFL
|
||||
#define MP1_SMN_IH_SW_INT__VALID_MASK 0x00000100L
|
||||
//MP1_SMN_IH_SW_INT_CTRL
|
||||
#define MP1_SMN_IH_SW_INT_CTRL__INT_MASK__SHIFT 0x0
|
||||
#define MP1_SMN_IH_SW_INT_CTRL__INT_ACK__SHIFT 0x8
|
||||
#define MP1_SMN_IH_SW_INT_CTRL__INT_MASK_MASK 0x00000001L
|
||||
#define MP1_SMN_IH_SW_INT_CTRL__INT_ACK_MASK 0x00000100L
|
||||
//MP1_SMN_FPS_CNT
|
||||
#define MP1_SMN_FPS_CNT__COUNT__SHIFT 0x0
|
||||
#define MP1_SMN_FPS_CNT__COUNT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH0
|
||||
#define MP1_SMN_EXT_SCRATCH0__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH0__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH1
|
||||
#define MP1_SMN_EXT_SCRATCH1__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH1__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH2
|
||||
#define MP1_SMN_EXT_SCRATCH2__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH2__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH3
|
||||
#define MP1_SMN_EXT_SCRATCH3__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH3__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH4
|
||||
#define MP1_SMN_EXT_SCRATCH4__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH4__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH5
|
||||
#define MP1_SMN_EXT_SCRATCH5__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH5__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH6
|
||||
#define MP1_SMN_EXT_SCRATCH6__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH6__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH7
|
||||
#define MP1_SMN_EXT_SCRATCH7__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH7__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH8
|
||||
#define MP1_SMN_EXT_SCRATCH8__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH8__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH9
|
||||
#define MP1_SMN_EXT_SCRATCH9__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH9__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH10
|
||||
#define MP1_SMN_EXT_SCRATCH10__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH10__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH11
|
||||
#define MP1_SMN_EXT_SCRATCH11__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH11__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH12
|
||||
#define MP1_SMN_EXT_SCRATCH12__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH12__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH13
|
||||
#define MP1_SMN_EXT_SCRATCH13__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH13__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH14
|
||||
#define MP1_SMN_EXT_SCRATCH14__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH14__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH15
|
||||
#define MP1_SMN_EXT_SCRATCH15__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH15__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH16
|
||||
#define MP1_SMN_EXT_SCRATCH16__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH16__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH17
|
||||
#define MP1_SMN_EXT_SCRATCH17__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH17__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH18
|
||||
#define MP1_SMN_EXT_SCRATCH18__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH18__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH19
|
||||
#define MP1_SMN_EXT_SCRATCH19__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH19__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH20
|
||||
#define MP1_SMN_EXT_SCRATCH20__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH20__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH21
|
||||
#define MP1_SMN_EXT_SCRATCH21__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH21__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH22
|
||||
#define MP1_SMN_EXT_SCRATCH22__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH22__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH23
|
||||
#define MP1_SMN_EXT_SCRATCH23__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH23__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH24
|
||||
#define MP1_SMN_EXT_SCRATCH24__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH24__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH25
|
||||
#define MP1_SMN_EXT_SCRATCH25__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH25__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH26
|
||||
#define MP1_SMN_EXT_SCRATCH26__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH26__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH27
|
||||
#define MP1_SMN_EXT_SCRATCH27__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH27__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH28
|
||||
#define MP1_SMN_EXT_SCRATCH28__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH28__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH29
|
||||
#define MP1_SMN_EXT_SCRATCH29__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH29__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH30
|
||||
#define MP1_SMN_EXT_SCRATCH30__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH30__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH31
|
||||
#define MP1_SMN_EXT_SCRATCH31__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH31__DATA_MASK 0xFFFFFFFFL
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,468 @@
|
||||
/*
|
||||
* Copyright 2023 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
#ifndef _mp_14_0_2_OFFSET_HEADER
|
||||
#define _mp_14_0_2_OFFSET_HEADER
|
||||
|
||||
|
||||
// addressBlock: mp_SmuMp1_SmnDec
|
||||
// base address: 0x0
|
||||
#define regMP1_SMN_C2PMSG_0 0x0040
|
||||
#define regMP1_SMN_C2PMSG_0_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_1 0x0041
|
||||
#define regMP1_SMN_C2PMSG_1_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_2 0x0042
|
||||
#define regMP1_SMN_C2PMSG_2_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_3 0x0043
|
||||
#define regMP1_SMN_C2PMSG_3_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_4 0x0044
|
||||
#define regMP1_SMN_C2PMSG_4_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_5 0x0045
|
||||
#define regMP1_SMN_C2PMSG_5_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_6 0x0046
|
||||
#define regMP1_SMN_C2PMSG_6_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_7 0x0047
|
||||
#define regMP1_SMN_C2PMSG_7_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_8 0x0048
|
||||
#define regMP1_SMN_C2PMSG_8_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_9 0x0049
|
||||
#define regMP1_SMN_C2PMSG_9_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_10 0x004a
|
||||
#define regMP1_SMN_C2PMSG_10_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_11 0x004b
|
||||
#define regMP1_SMN_C2PMSG_11_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_12 0x004c
|
||||
#define regMP1_SMN_C2PMSG_12_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_13 0x004d
|
||||
#define regMP1_SMN_C2PMSG_13_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_14 0x004e
|
||||
#define regMP1_SMN_C2PMSG_14_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_15 0x004f
|
||||
#define regMP1_SMN_C2PMSG_15_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_16 0x0050
|
||||
#define regMP1_SMN_C2PMSG_16_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_17 0x0051
|
||||
#define regMP1_SMN_C2PMSG_17_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_18 0x0052
|
||||
#define regMP1_SMN_C2PMSG_18_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_19 0x0053
|
||||
#define regMP1_SMN_C2PMSG_19_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_20 0x0054
|
||||
#define regMP1_SMN_C2PMSG_20_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_21 0x0055
|
||||
#define regMP1_SMN_C2PMSG_21_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_22 0x0056
|
||||
#define regMP1_SMN_C2PMSG_22_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_23 0x0057
|
||||
#define regMP1_SMN_C2PMSG_23_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_24 0x0058
|
||||
#define regMP1_SMN_C2PMSG_24_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_25 0x0059
|
||||
#define regMP1_SMN_C2PMSG_25_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_26 0x005a
|
||||
#define regMP1_SMN_C2PMSG_26_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_27 0x005b
|
||||
#define regMP1_SMN_C2PMSG_27_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_28 0x005c
|
||||
#define regMP1_SMN_C2PMSG_28_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_29 0x005d
|
||||
#define regMP1_SMN_C2PMSG_29_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_30 0x005e
|
||||
#define regMP1_SMN_C2PMSG_30_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_31 0x005f
|
||||
#define regMP1_SMN_C2PMSG_31_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_32 0x0060
|
||||
#define regMP1_SMN_C2PMSG_32_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_33 0x0061
|
||||
#define regMP1_SMN_C2PMSG_33_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_34 0x0062
|
||||
#define regMP1_SMN_C2PMSG_34_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_35 0x0063
|
||||
#define regMP1_SMN_C2PMSG_35_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_36 0x0064
|
||||
#define regMP1_SMN_C2PMSG_36_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_37 0x0065
|
||||
#define regMP1_SMN_C2PMSG_37_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_38 0x0066
|
||||
#define regMP1_SMN_C2PMSG_38_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_39 0x0067
|
||||
#define regMP1_SMN_C2PMSG_39_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_40 0x0068
|
||||
#define regMP1_SMN_C2PMSG_40_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_41 0x0069
|
||||
#define regMP1_SMN_C2PMSG_41_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_42 0x006a
|
||||
#define regMP1_SMN_C2PMSG_42_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_43 0x006b
|
||||
#define regMP1_SMN_C2PMSG_43_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_44 0x006c
|
||||
#define regMP1_SMN_C2PMSG_44_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_45 0x006d
|
||||
#define regMP1_SMN_C2PMSG_45_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_46 0x006e
|
||||
#define regMP1_SMN_C2PMSG_46_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_47 0x006f
|
||||
#define regMP1_SMN_C2PMSG_47_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_48 0x0070
|
||||
#define regMP1_SMN_C2PMSG_48_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_49 0x0071
|
||||
#define regMP1_SMN_C2PMSG_49_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_50 0x0072
|
||||
#define regMP1_SMN_C2PMSG_50_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_51 0x0073
|
||||
#define regMP1_SMN_C2PMSG_51_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_52 0x0074
|
||||
#define regMP1_SMN_C2PMSG_52_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_53 0x0075
|
||||
#define regMP1_SMN_C2PMSG_53_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_54 0x0076
|
||||
#define regMP1_SMN_C2PMSG_54_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_55 0x0077
|
||||
#define regMP1_SMN_C2PMSG_55_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_56 0x0078
|
||||
#define regMP1_SMN_C2PMSG_56_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_57 0x0079
|
||||
#define regMP1_SMN_C2PMSG_57_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_58 0x007a
|
||||
#define regMP1_SMN_C2PMSG_58_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_59 0x007b
|
||||
#define regMP1_SMN_C2PMSG_59_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_60 0x007c
|
||||
#define regMP1_SMN_C2PMSG_60_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_61 0x007d
|
||||
#define regMP1_SMN_C2PMSG_61_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_62 0x007e
|
||||
#define regMP1_SMN_C2PMSG_62_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_63 0x007f
|
||||
#define regMP1_SMN_C2PMSG_63_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_64 0x0080
|
||||
#define regMP1_SMN_C2PMSG_64_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_65 0x0081
|
||||
#define regMP1_SMN_C2PMSG_65_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_66 0x0082
|
||||
#define regMP1_SMN_C2PMSG_66_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_67 0x0083
|
||||
#define regMP1_SMN_C2PMSG_67_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_68 0x0084
|
||||
#define regMP1_SMN_C2PMSG_68_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_69 0x0085
|
||||
#define regMP1_SMN_C2PMSG_69_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_70 0x0086
|
||||
#define regMP1_SMN_C2PMSG_70_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_71 0x0087
|
||||
#define regMP1_SMN_C2PMSG_71_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_72 0x0088
|
||||
#define regMP1_SMN_C2PMSG_72_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_73 0x0089
|
||||
#define regMP1_SMN_C2PMSG_73_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_74 0x008a
|
||||
#define regMP1_SMN_C2PMSG_74_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_75 0x008b
|
||||
#define regMP1_SMN_C2PMSG_75_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_76 0x008c
|
||||
#define regMP1_SMN_C2PMSG_76_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_77 0x008d
|
||||
#define regMP1_SMN_C2PMSG_77_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_78 0x008e
|
||||
#define regMP1_SMN_C2PMSG_78_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_79 0x008f
|
||||
#define regMP1_SMN_C2PMSG_79_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_80 0x0090
|
||||
#define regMP1_SMN_C2PMSG_80_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_81 0x0091
|
||||
#define regMP1_SMN_C2PMSG_81_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_82 0x0092
|
||||
#define regMP1_SMN_C2PMSG_82_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_83 0x0093
|
||||
#define regMP1_SMN_C2PMSG_83_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_84 0x0094
|
||||
#define regMP1_SMN_C2PMSG_84_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_85 0x0095
|
||||
#define regMP1_SMN_C2PMSG_85_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_86 0x0096
|
||||
#define regMP1_SMN_C2PMSG_86_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_87 0x0097
|
||||
#define regMP1_SMN_C2PMSG_87_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_88 0x0098
|
||||
#define regMP1_SMN_C2PMSG_88_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_89 0x0099
|
||||
#define regMP1_SMN_C2PMSG_89_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_90 0x009a
|
||||
#define regMP1_SMN_C2PMSG_90_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_91 0x009b
|
||||
#define regMP1_SMN_C2PMSG_91_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_92 0x009c
|
||||
#define regMP1_SMN_C2PMSG_92_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_93 0x009d
|
||||
#define regMP1_SMN_C2PMSG_93_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_94 0x009e
|
||||
#define regMP1_SMN_C2PMSG_94_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_95 0x009f
|
||||
#define regMP1_SMN_C2PMSG_95_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_96 0x00a0
|
||||
#define regMP1_SMN_C2PMSG_96_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_97 0x00a1
|
||||
#define regMP1_SMN_C2PMSG_97_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_98 0x00a2
|
||||
#define regMP1_SMN_C2PMSG_98_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_99 0x00a3
|
||||
#define regMP1_SMN_C2PMSG_99_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_100 0x00a4
|
||||
#define regMP1_SMN_C2PMSG_100_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_101 0x00a5
|
||||
#define regMP1_SMN_C2PMSG_101_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_102 0x00a6
|
||||
#define regMP1_SMN_C2PMSG_102_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_103 0x00a7
|
||||
#define regMP1_SMN_C2PMSG_103_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_104 0x00a8
|
||||
#define regMP1_SMN_C2PMSG_104_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_105 0x00a9
|
||||
#define regMP1_SMN_C2PMSG_105_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_106 0x00aa
|
||||
#define regMP1_SMN_C2PMSG_106_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_107 0x00ab
|
||||
#define regMP1_SMN_C2PMSG_107_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_108 0x00ac
|
||||
#define regMP1_SMN_C2PMSG_108_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_109 0x00ad
|
||||
#define regMP1_SMN_C2PMSG_109_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_110 0x00ae
|
||||
#define regMP1_SMN_C2PMSG_110_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_111 0x00af
|
||||
#define regMP1_SMN_C2PMSG_111_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_112 0x00b0
|
||||
#define regMP1_SMN_C2PMSG_112_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_113 0x00b1
|
||||
#define regMP1_SMN_C2PMSG_113_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_114 0x00b2
|
||||
#define regMP1_SMN_C2PMSG_114_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_115 0x00b3
|
||||
#define regMP1_SMN_C2PMSG_115_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_116 0x00b4
|
||||
#define regMP1_SMN_C2PMSG_116_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_117 0x00b5
|
||||
#define regMP1_SMN_C2PMSG_117_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_118 0x00b6
|
||||
#define regMP1_SMN_C2PMSG_118_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_119 0x00b7
|
||||
#define regMP1_SMN_C2PMSG_119_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_120 0x00b8
|
||||
#define regMP1_SMN_C2PMSG_120_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_121 0x00b9
|
||||
#define regMP1_SMN_C2PMSG_121_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_122 0x00ba
|
||||
#define regMP1_SMN_C2PMSG_122_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_123 0x00bb
|
||||
#define regMP1_SMN_C2PMSG_123_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_124 0x00bc
|
||||
#define regMP1_SMN_C2PMSG_124_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_125 0x00bd
|
||||
#define regMP1_SMN_C2PMSG_125_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_126 0x00be
|
||||
#define regMP1_SMN_C2PMSG_126_BASE_IDX 1
|
||||
#define regMP1_SMN_C2PMSG_127 0x00bf
|
||||
#define regMP1_SMN_C2PMSG_127_BASE_IDX 1
|
||||
#define regMP1_SMN_IH_CREDIT 0x0140
|
||||
#define regMP1_SMN_IH_CREDIT_BASE_IDX 1
|
||||
#define regMP1_SMN_IH_SW_INT 0x0141
|
||||
#define regMP1_SMN_IH_SW_INT_BASE_IDX 1
|
||||
#define regMP1_SMN_IH_SW_INT_CTRL 0x0142
|
||||
#define regMP1_SMN_IH_SW_INT_CTRL_BASE_IDX 1
|
||||
#define regMP1_SMN_FPS_CNT 0x0143
|
||||
#define regMP1_SMN_FPS_CNT_BASE_IDX 1
|
||||
#define regMP1_SMN_PUB_CTRL 0x0144
|
||||
#define regMP1_SMN_PUB_CTRL_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH0 0x01c0
|
||||
#define regMP1_SMN_EXT_SCRATCH0_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH1 0x01c1
|
||||
#define regMP1_SMN_EXT_SCRATCH1_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH2 0x01c2
|
||||
#define regMP1_SMN_EXT_SCRATCH2_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH3 0x01c3
|
||||
#define regMP1_SMN_EXT_SCRATCH3_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH4 0x01c4
|
||||
#define regMP1_SMN_EXT_SCRATCH4_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH5 0x01c5
|
||||
#define regMP1_SMN_EXT_SCRATCH5_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH6 0x01c6
|
||||
#define regMP1_SMN_EXT_SCRATCH6_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH7 0x01c7
|
||||
#define regMP1_SMN_EXT_SCRATCH7_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH8 0x01c8
|
||||
#define regMP1_SMN_EXT_SCRATCH8_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH9 0x01c9
|
||||
#define regMP1_SMN_EXT_SCRATCH9_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH10 0x01ca
|
||||
#define regMP1_SMN_EXT_SCRATCH10_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH11 0x01cb
|
||||
#define regMP1_SMN_EXT_SCRATCH11_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH12 0x01cc
|
||||
#define regMP1_SMN_EXT_SCRATCH12_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH13 0x01cd
|
||||
#define regMP1_SMN_EXT_SCRATCH13_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH14 0x01ce
|
||||
#define regMP1_SMN_EXT_SCRATCH14_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH15 0x01cf
|
||||
#define regMP1_SMN_EXT_SCRATCH15_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH16 0x01d0
|
||||
#define regMP1_SMN_EXT_SCRATCH16_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH17 0x01d1
|
||||
#define regMP1_SMN_EXT_SCRATCH17_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH18 0x01d2
|
||||
#define regMP1_SMN_EXT_SCRATCH18_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH19 0x01d3
|
||||
#define regMP1_SMN_EXT_SCRATCH19_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH20 0x01d4
|
||||
#define regMP1_SMN_EXT_SCRATCH20_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH21 0x01d5
|
||||
#define regMP1_SMN_EXT_SCRATCH21_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH22 0x01d6
|
||||
#define regMP1_SMN_EXT_SCRATCH22_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH23 0x01d7
|
||||
#define regMP1_SMN_EXT_SCRATCH23_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH24 0x01d8
|
||||
#define regMP1_SMN_EXT_SCRATCH24_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH25 0x01d9
|
||||
#define regMP1_SMN_EXT_SCRATCH25_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH26 0x01da
|
||||
#define regMP1_SMN_EXT_SCRATCH26_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH27 0x01db
|
||||
#define regMP1_SMN_EXT_SCRATCH27_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH28 0x01dc
|
||||
#define regMP1_SMN_EXT_SCRATCH28_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH29 0x01dd
|
||||
#define regMP1_SMN_EXT_SCRATCH29_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH30 0x01de
|
||||
#define regMP1_SMN_EXT_SCRATCH30_BASE_IDX 1
|
||||
#define regMP1_SMN_EXT_SCRATCH31 0x01df
|
||||
#define regMP1_SMN_EXT_SCRATCH31_BASE_IDX 1
|
||||
|
||||
|
||||
// addressBlock: mp_SmuMpASP_SmnDec
|
||||
// base address: 0x0
|
||||
#define regMPASP_SMN_C2PMSG_32 0x0060
|
||||
#define regMPASP_SMN_C2PMSG_32_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_33 0x0061
|
||||
#define regMPASP_SMN_C2PMSG_33_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_34 0x0062
|
||||
#define regMPASP_SMN_C2PMSG_34_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_35 0x0063
|
||||
#define regMPASP_SMN_C2PMSG_35_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_36 0x0064
|
||||
#define regMPASP_SMN_C2PMSG_36_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_37 0x0065
|
||||
#define regMPASP_SMN_C2PMSG_37_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_38 0x0066
|
||||
#define regMPASP_SMN_C2PMSG_38_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_39 0x0067
|
||||
#define regMPASP_SMN_C2PMSG_39_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_60 0x007c
|
||||
#define regMPASP_SMN_C2PMSG_60_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_61 0x007d
|
||||
#define regMPASP_SMN_C2PMSG_61_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_62 0x007e
|
||||
#define regMPASP_SMN_C2PMSG_62_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_63 0x007f
|
||||
#define regMPASP_SMN_C2PMSG_63_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_64 0x0080
|
||||
#define regMPASP_SMN_C2PMSG_64_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_65 0x0081
|
||||
#define regMPASP_SMN_C2PMSG_65_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_66 0x0082
|
||||
#define regMPASP_SMN_C2PMSG_66_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_67 0x0083
|
||||
#define regMPASP_SMN_C2PMSG_67_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_68 0x0084
|
||||
#define regMPASP_SMN_C2PMSG_68_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_69 0x0085
|
||||
#define regMPASP_SMN_C2PMSG_69_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_70 0x0086
|
||||
#define regMPASP_SMN_C2PMSG_70_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_71 0x0087
|
||||
#define regMPASP_SMN_C2PMSG_71_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_72 0x0088
|
||||
#define regMPASP_SMN_C2PMSG_72_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_73 0x0089
|
||||
#define regMPASP_SMN_C2PMSG_73_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_74 0x008a
|
||||
#define regMPASP_SMN_C2PMSG_74_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_75 0x008b
|
||||
#define regMPASP_SMN_C2PMSG_75_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_76 0x008c
|
||||
#define regMPASP_SMN_C2PMSG_76_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_77 0x008d
|
||||
#define regMPASP_SMN_C2PMSG_77_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_78 0x008e
|
||||
#define regMPASP_SMN_C2PMSG_78_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_79 0x008f
|
||||
#define regMPASP_SMN_C2PMSG_79_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_80 0x0090
|
||||
#define regMPASP_SMN_C2PMSG_80_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_81 0x0091
|
||||
#define regMPASP_SMN_C2PMSG_81_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_82 0x0092
|
||||
#define regMPASP_SMN_C2PMSG_82_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_83 0x0093
|
||||
#define regMPASP_SMN_C2PMSG_83_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_84 0x0094
|
||||
#define regMPASP_SMN_C2PMSG_84_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_85 0x0095
|
||||
#define regMPASP_SMN_C2PMSG_85_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_86 0x0096
|
||||
#define regMPASP_SMN_C2PMSG_86_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_87 0x0097
|
||||
#define regMPASP_SMN_C2PMSG_87_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_88 0x0098
|
||||
#define regMPASP_SMN_C2PMSG_88_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_89 0x0099
|
||||
#define regMPASP_SMN_C2PMSG_89_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_100 0x00a4
|
||||
#define regMPASP_SMN_C2PMSG_100_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_101 0x00a5
|
||||
#define regMPASP_SMN_C2PMSG_101_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_102 0x00a6
|
||||
#define regMPASP_SMN_C2PMSG_102_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_103 0x00a7
|
||||
#define regMPASP_SMN_C2PMSG_103_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_109 0x00ad
|
||||
#define regMPASP_SMN_C2PMSG_109_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_115 0x00b3
|
||||
#define regMPASP_SMN_C2PMSG_115_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_116 0x00b4
|
||||
#define regMPASP_SMN_C2PMSG_116_BASE_IDX 0
|
||||
#define regMPASP_SMN_C2PMSG_119_BASE_IDX 0
|
||||
#define regMPASP_SMN_IH_CREDIT 0x0140
|
||||
#define regMPASP_SMN_IH_CREDIT_BASE_IDX 0
|
||||
#define regMPASP_SMN_IH_SW_INT 0x0141
|
||||
#define regMPASP_SMN_IH_SW_INT_BASE_IDX 0
|
||||
#define regMPASP_SMN_IH_SW_INT_CTRL 0x0142
|
||||
#define regMPASP_SMN_IH_SW_INT_CTRL_BASE_IDX 0
|
||||
|
||||
|
||||
// addressBlock: Mp1MmioPublic_SmuMp1Pub_CruDec
|
||||
// base address: 0x3b00000
|
||||
#define regMP1_CRU1_MP1_FIRMWARE_FLAGS 0x4009
|
||||
#define regMP1_CRU1_MP1_FIRMWARE_FLAGS_BASE_IDX 7
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,692 @@
|
||||
/*
|
||||
* Copyright 2023 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
#ifndef _mp_14_0_2_SH_MASK_HEADER
|
||||
#define _mp_14_0_2_SH_MASK_HEADER
|
||||
|
||||
|
||||
// addressBlock: mp_SmuMp1_SmnDec
|
||||
//MP1_SMN_C2PMSG_0
|
||||
#define MP1_SMN_C2PMSG_0__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_0__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_1
|
||||
#define MP1_SMN_C2PMSG_1__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_1__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_2
|
||||
#define MP1_SMN_C2PMSG_2__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_2__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_3
|
||||
#define MP1_SMN_C2PMSG_3__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_3__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_4
|
||||
#define MP1_SMN_C2PMSG_4__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_4__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_5
|
||||
#define MP1_SMN_C2PMSG_5__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_5__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_6
|
||||
#define MP1_SMN_C2PMSG_6__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_6__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_7
|
||||
#define MP1_SMN_C2PMSG_7__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_7__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_8
|
||||
#define MP1_SMN_C2PMSG_8__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_8__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_9
|
||||
#define MP1_SMN_C2PMSG_9__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_9__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_10
|
||||
#define MP1_SMN_C2PMSG_10__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_10__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_11
|
||||
#define MP1_SMN_C2PMSG_11__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_11__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_12
|
||||
#define MP1_SMN_C2PMSG_12__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_12__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_13
|
||||
#define MP1_SMN_C2PMSG_13__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_13__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_14
|
||||
#define MP1_SMN_C2PMSG_14__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_14__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_15
|
||||
#define MP1_SMN_C2PMSG_15__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_15__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_16
|
||||
#define MP1_SMN_C2PMSG_16__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_16__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_17
|
||||
#define MP1_SMN_C2PMSG_17__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_17__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_18
|
||||
#define MP1_SMN_C2PMSG_18__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_18__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_19
|
||||
#define MP1_SMN_C2PMSG_19__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_19__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_20
|
||||
#define MP1_SMN_C2PMSG_20__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_20__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_21
|
||||
#define MP1_SMN_C2PMSG_21__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_21__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_22
|
||||
#define MP1_SMN_C2PMSG_22__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_22__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_23
|
||||
#define MP1_SMN_C2PMSG_23__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_23__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_24
|
||||
#define MP1_SMN_C2PMSG_24__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_24__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_25
|
||||
#define MP1_SMN_C2PMSG_25__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_25__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_26
|
||||
#define MP1_SMN_C2PMSG_26__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_26__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_27
|
||||
#define MP1_SMN_C2PMSG_27__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_27__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_28
|
||||
#define MP1_SMN_C2PMSG_28__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_28__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_29
|
||||
#define MP1_SMN_C2PMSG_29__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_29__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_30
|
||||
#define MP1_SMN_C2PMSG_30__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_30__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_31
|
||||
#define MP1_SMN_C2PMSG_31__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_31__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_32
|
||||
#define MP1_SMN_C2PMSG_32__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_32__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_33
|
||||
#define MP1_SMN_C2PMSG_33__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_33__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_34
|
||||
#define MP1_SMN_C2PMSG_34__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_34__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_35
|
||||
#define MP1_SMN_C2PMSG_35__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_35__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_36
|
||||
#define MP1_SMN_C2PMSG_36__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_36__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_37
|
||||
#define MP1_SMN_C2PMSG_37__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_37__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_38
|
||||
#define MP1_SMN_C2PMSG_38__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_38__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_39
|
||||
#define MP1_SMN_C2PMSG_39__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_39__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_40
|
||||
#define MP1_SMN_C2PMSG_40__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_40__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_41
|
||||
#define MP1_SMN_C2PMSG_41__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_41__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_42
|
||||
#define MP1_SMN_C2PMSG_42__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_42__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_43
|
||||
#define MP1_SMN_C2PMSG_43__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_43__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_44
|
||||
#define MP1_SMN_C2PMSG_44__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_44__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_45
|
||||
#define MP1_SMN_C2PMSG_45__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_45__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_46
|
||||
#define MP1_SMN_C2PMSG_46__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_46__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_47
|
||||
#define MP1_SMN_C2PMSG_47__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_47__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_48
|
||||
#define MP1_SMN_C2PMSG_48__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_48__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_49
|
||||
#define MP1_SMN_C2PMSG_49__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_49__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_50
|
||||
#define MP1_SMN_C2PMSG_50__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_50__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_51
|
||||
#define MP1_SMN_C2PMSG_51__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_51__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_52
|
||||
#define MP1_SMN_C2PMSG_52__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_52__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_53
|
||||
#define MP1_SMN_C2PMSG_53__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_53__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_54
|
||||
#define MP1_SMN_C2PMSG_54__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_54__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_55
|
||||
#define MP1_SMN_C2PMSG_55__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_55__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_56
|
||||
#define MP1_SMN_C2PMSG_56__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_56__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_57
|
||||
#define MP1_SMN_C2PMSG_57__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_57__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_58
|
||||
#define MP1_SMN_C2PMSG_58__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_58__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_59
|
||||
#define MP1_SMN_C2PMSG_59__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_59__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_60
|
||||
#define MP1_SMN_C2PMSG_60__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_60__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_61
|
||||
#define MP1_SMN_C2PMSG_61__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_61__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_62
|
||||
#define MP1_SMN_C2PMSG_62__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_62__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_63
|
||||
#define MP1_SMN_C2PMSG_63__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_63__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_64
|
||||
#define MP1_SMN_C2PMSG_64__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_64__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_65
|
||||
#define MP1_SMN_C2PMSG_65__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_65__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_66
|
||||
#define MP1_SMN_C2PMSG_66__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_66__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_67
|
||||
#define MP1_SMN_C2PMSG_67__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_67__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_68
|
||||
#define MP1_SMN_C2PMSG_68__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_68__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_69
|
||||
#define MP1_SMN_C2PMSG_69__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_69__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_70
|
||||
#define MP1_SMN_C2PMSG_70__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_70__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_71
|
||||
#define MP1_SMN_C2PMSG_71__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_71__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_72
|
||||
#define MP1_SMN_C2PMSG_72__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_72__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_73
|
||||
#define MP1_SMN_C2PMSG_73__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_73__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_74
|
||||
#define MP1_SMN_C2PMSG_74__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_74__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_75
|
||||
#define MP1_SMN_C2PMSG_75__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_75__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_76
|
||||
#define MP1_SMN_C2PMSG_76__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_76__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_77
|
||||
#define MP1_SMN_C2PMSG_77__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_77__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_78
|
||||
#define MP1_SMN_C2PMSG_78__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_78__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_79
|
||||
#define MP1_SMN_C2PMSG_79__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_79__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_80
|
||||
#define MP1_SMN_C2PMSG_80__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_80__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_81
|
||||
#define MP1_SMN_C2PMSG_81__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_81__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_82
|
||||
#define MP1_SMN_C2PMSG_82__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_82__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_83
|
||||
#define MP1_SMN_C2PMSG_83__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_83__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_84
|
||||
#define MP1_SMN_C2PMSG_84__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_84__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_85
|
||||
#define MP1_SMN_C2PMSG_85__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_85__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_86
|
||||
#define MP1_SMN_C2PMSG_86__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_86__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_87
|
||||
#define MP1_SMN_C2PMSG_87__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_87__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_88
|
||||
#define MP1_SMN_C2PMSG_88__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_88__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_89
|
||||
#define MP1_SMN_C2PMSG_89__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_89__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_90
|
||||
#define MP1_SMN_C2PMSG_90__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_90__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_91
|
||||
#define MP1_SMN_C2PMSG_91__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_91__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_92
|
||||
#define MP1_SMN_C2PMSG_92__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_92__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_93
|
||||
#define MP1_SMN_C2PMSG_93__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_93__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_94
|
||||
#define MP1_SMN_C2PMSG_94__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_94__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_95
|
||||
#define MP1_SMN_C2PMSG_95__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_95__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_96
|
||||
#define MP1_SMN_C2PMSG_96__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_96__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_97
|
||||
#define MP1_SMN_C2PMSG_97__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_97__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_98
|
||||
#define MP1_SMN_C2PMSG_98__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_98__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_99
|
||||
#define MP1_SMN_C2PMSG_99__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_99__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_100
|
||||
#define MP1_SMN_C2PMSG_100__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_100__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_101
|
||||
#define MP1_SMN_C2PMSG_101__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_101__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_102
|
||||
#define MP1_SMN_C2PMSG_102__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_102__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_103
|
||||
#define MP1_SMN_C2PMSG_103__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_103__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_104
|
||||
#define MP1_SMN_C2PMSG_104__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_104__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_105
|
||||
#define MP1_SMN_C2PMSG_105__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_105__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_106
|
||||
#define MP1_SMN_C2PMSG_106__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_106__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_107
|
||||
#define MP1_SMN_C2PMSG_107__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_107__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_108
|
||||
#define MP1_SMN_C2PMSG_108__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_108__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_109
|
||||
#define MP1_SMN_C2PMSG_109__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_109__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_110
|
||||
#define MP1_SMN_C2PMSG_110__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_110__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_111
|
||||
#define MP1_SMN_C2PMSG_111__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_111__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_112
|
||||
#define MP1_SMN_C2PMSG_112__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_112__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_113
|
||||
#define MP1_SMN_C2PMSG_113__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_113__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_114
|
||||
#define MP1_SMN_C2PMSG_114__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_114__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_115
|
||||
#define MP1_SMN_C2PMSG_115__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_115__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_116
|
||||
#define MP1_SMN_C2PMSG_116__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_116__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_117
|
||||
#define MP1_SMN_C2PMSG_117__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_117__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_118
|
||||
#define MP1_SMN_C2PMSG_118__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_118__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_119
|
||||
#define MP1_SMN_C2PMSG_119__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_119__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_120
|
||||
#define MP1_SMN_C2PMSG_120__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_120__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_121
|
||||
#define MP1_SMN_C2PMSG_121__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_121__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_122
|
||||
#define MP1_SMN_C2PMSG_122__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_122__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_123
|
||||
#define MP1_SMN_C2PMSG_123__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_123__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_124
|
||||
#define MP1_SMN_C2PMSG_124__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_124__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_125
|
||||
#define MP1_SMN_C2PMSG_125__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_125__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_126
|
||||
#define MP1_SMN_C2PMSG_126__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_126__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_C2PMSG_127
|
||||
#define MP1_SMN_C2PMSG_127__CONTENT__SHIFT 0x0
|
||||
#define MP1_SMN_C2PMSG_127__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_IH_CREDIT
|
||||
#define MP1_SMN_IH_CREDIT__CREDIT_VALUE__SHIFT 0x0
|
||||
#define MP1_SMN_IH_CREDIT__CLIENT_ID__SHIFT 0x10
|
||||
#define MP1_SMN_IH_CREDIT__CREDIT_VALUE_MASK 0x00000003L
|
||||
#define MP1_SMN_IH_CREDIT__CLIENT_ID_MASK 0x00FF0000L
|
||||
//MP1_SMN_IH_SW_INT
|
||||
#define MP1_SMN_IH_SW_INT__ID__SHIFT 0x0
|
||||
#define MP1_SMN_IH_SW_INT__VALID__SHIFT 0x8
|
||||
#define MP1_SMN_IH_SW_INT__ID_MASK 0x000000FFL
|
||||
#define MP1_SMN_IH_SW_INT__VALID_MASK 0x00000100L
|
||||
//MP1_SMN_IH_SW_INT_CTRL
|
||||
#define MP1_SMN_IH_SW_INT_CTRL__INT_MASK__SHIFT 0x0
|
||||
#define MP1_SMN_IH_SW_INT_CTRL__INT_ACK__SHIFT 0x8
|
||||
#define MP1_SMN_IH_SW_INT_CTRL__INT_MASK_MASK 0x00000001L
|
||||
#define MP1_SMN_IH_SW_INT_CTRL__INT_ACK_MASK 0x00000100L
|
||||
//MP1_SMN_FPS_CNT
|
||||
#define MP1_SMN_FPS_CNT__COUNT__SHIFT 0x0
|
||||
#define MP1_SMN_FPS_CNT__COUNT_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_PUB_CTRL
|
||||
#define MP1_SMN_PUB_CTRL__LX3_RESET__SHIFT 0x0
|
||||
#define MP1_SMN_PUB_CTRL__LX3_RESET_MASK 0x00000001L
|
||||
//MP1_SMN_EXT_SCRATCH0
|
||||
#define MP1_SMN_EXT_SCRATCH0__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH0__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH1
|
||||
#define MP1_SMN_EXT_SCRATCH1__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH1__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH2
|
||||
#define MP1_SMN_EXT_SCRATCH2__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH2__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH3
|
||||
#define MP1_SMN_EXT_SCRATCH3__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH3__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH4
|
||||
#define MP1_SMN_EXT_SCRATCH4__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH4__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH5
|
||||
#define MP1_SMN_EXT_SCRATCH5__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH5__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH6
|
||||
#define MP1_SMN_EXT_SCRATCH6__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH6__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH7
|
||||
#define MP1_SMN_EXT_SCRATCH7__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH7__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH8
|
||||
#define MP1_SMN_EXT_SCRATCH8__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH8__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH9
|
||||
#define MP1_SMN_EXT_SCRATCH9__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH9__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH10
|
||||
#define MP1_SMN_EXT_SCRATCH10__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH10__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH11
|
||||
#define MP1_SMN_EXT_SCRATCH11__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH11__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH12
|
||||
#define MP1_SMN_EXT_SCRATCH12__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH12__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH13
|
||||
#define MP1_SMN_EXT_SCRATCH13__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH13__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH14
|
||||
#define MP1_SMN_EXT_SCRATCH14__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH14__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH15
|
||||
#define MP1_SMN_EXT_SCRATCH15__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH15__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH16
|
||||
#define MP1_SMN_EXT_SCRATCH16__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH16__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH17
|
||||
#define MP1_SMN_EXT_SCRATCH17__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH17__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH18
|
||||
#define MP1_SMN_EXT_SCRATCH18__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH18__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH19
|
||||
#define MP1_SMN_EXT_SCRATCH19__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH19__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH20
|
||||
#define MP1_SMN_EXT_SCRATCH20__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH20__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH21
|
||||
#define MP1_SMN_EXT_SCRATCH21__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH21__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH22
|
||||
#define MP1_SMN_EXT_SCRATCH22__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH22__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH23
|
||||
#define MP1_SMN_EXT_SCRATCH23__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH23__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH24
|
||||
#define MP1_SMN_EXT_SCRATCH24__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH24__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH25
|
||||
#define MP1_SMN_EXT_SCRATCH25__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH25__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH26
|
||||
#define MP1_SMN_EXT_SCRATCH26__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH26__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH27
|
||||
#define MP1_SMN_EXT_SCRATCH27__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH27__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH28
|
||||
#define MP1_SMN_EXT_SCRATCH28__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH28__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH29
|
||||
#define MP1_SMN_EXT_SCRATCH29__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH29__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH30
|
||||
#define MP1_SMN_EXT_SCRATCH30__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH30__DATA_MASK 0xFFFFFFFFL
|
||||
//MP1_SMN_EXT_SCRATCH31
|
||||
#define MP1_SMN_EXT_SCRATCH31__DATA__SHIFT 0x0
|
||||
#define MP1_SMN_EXT_SCRATCH31__DATA_MASK 0xFFFFFFFFL
|
||||
|
||||
|
||||
// addressBlock: mp_SmuMpASP_SmnDec
|
||||
//MPASP_SMN_C2PMSG_32
|
||||
#define MPASP_SMN_C2PMSG_32__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_32__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_33
|
||||
#define MPASP_SMN_C2PMSG_33__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_33__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_34
|
||||
#define MPASP_SMN_C2PMSG_34__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_34__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_35
|
||||
#define MPASP_SMN_C2PMSG_35__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_35__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_36
|
||||
#define MPASP_SMN_C2PMSG_36__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_36__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_37
|
||||
#define MPASP_SMN_C2PMSG_37__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_37__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_38
|
||||
#define MPASP_SMN_C2PMSG_38__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_38__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_39
|
||||
#define MPASP_SMN_C2PMSG_39__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_39__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_60
|
||||
#define MPASP_SMN_C2PMSG_60__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_60__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_61
|
||||
#define MPASP_SMN_C2PMSG_61__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_61__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_62
|
||||
#define MPASP_SMN_C2PMSG_62__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_62__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_63
|
||||
#define MPASP_SMN_C2PMSG_63__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_63__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_64
|
||||
#define MPASP_SMN_C2PMSG_64__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_64__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_65
|
||||
#define MPASP_SMN_C2PMSG_65__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_65__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_66
|
||||
#define MPASP_SMN_C2PMSG_66__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_66__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_67
|
||||
#define MPASP_SMN_C2PMSG_67__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_67__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_68
|
||||
#define MPASP_SMN_C2PMSG_68__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_68__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_69
|
||||
#define MPASP_SMN_C2PMSG_69__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_69__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_70
|
||||
#define MPASP_SMN_C2PMSG_70__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_70__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_71
|
||||
#define MPASP_SMN_C2PMSG_71__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_71__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_72
|
||||
#define MPASP_SMN_C2PMSG_72__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_72__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_73
|
||||
#define MPASP_SMN_C2PMSG_73__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_73__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_74
|
||||
#define MPASP_SMN_C2PMSG_74__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_74__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_75
|
||||
#define MPASP_SMN_C2PMSG_75__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_75__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_76
|
||||
#define MPASP_SMN_C2PMSG_76__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_76__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_77
|
||||
#define MPASP_SMN_C2PMSG_77__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_77__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_78
|
||||
#define MPASP_SMN_C2PMSG_78__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_78__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_79
|
||||
#define MPASP_SMN_C2PMSG_79__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_79__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_80
|
||||
#define MPASP_SMN_C2PMSG_80__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_80__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_81
|
||||
#define MPASP_SMN_C2PMSG_81__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_81__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_82
|
||||
#define MPASP_SMN_C2PMSG_82__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_82__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_83
|
||||
#define MPASP_SMN_C2PMSG_83__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_83__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_84
|
||||
#define MPASP_SMN_C2PMSG_84__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_84__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_85
|
||||
#define MPASP_SMN_C2PMSG_85__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_85__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_86
|
||||
#define MPASP_SMN_C2PMSG_86__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_86__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_87
|
||||
#define MPASP_SMN_C2PMSG_87__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_87__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_88
|
||||
#define MPASP_SMN_C2PMSG_88__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_88__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_89
|
||||
#define MPASP_SMN_C2PMSG_89__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_89__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_100
|
||||
#define MPASP_SMN_C2PMSG_100__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_100__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_101
|
||||
#define MPASP_SMN_C2PMSG_101__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_101__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_102
|
||||
#define MPASP_SMN_C2PMSG_102__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_102__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_103
|
||||
#define MPASP_SMN_C2PMSG_103__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_103__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_109
|
||||
#define MPASP_SMN_C2PMSG_109__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_109__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_115
|
||||
#define MPASP_SMN_C2PMSG_115__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_115__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_C2PMSG_116
|
||||
#define MPASP_SMN_C2PMSG_116__CONTENT__SHIFT 0x0
|
||||
#define MPASP_SMN_C2PMSG_116__CONTENT_MASK 0xFFFFFFFFL
|
||||
//MPASP_SMN_IH_CREDIT
|
||||
#define MPASP_SMN_IH_CREDIT__CREDIT_VALUE__SHIFT 0x0
|
||||
#define MPASP_SMN_IH_CREDIT__CLIENT_ID__SHIFT 0x10
|
||||
#define MPASP_SMN_IH_CREDIT__CREDIT_VALUE_MASK 0x00000003L
|
||||
#define MPASP_SMN_IH_CREDIT__CLIENT_ID_MASK 0x00FF0000L
|
||||
//MPASP_SMN_IH_SW_INT
|
||||
#define MPASP_SMN_IH_SW_INT__ID__SHIFT 0x0
|
||||
#define MPASP_SMN_IH_SW_INT__VALID__SHIFT 0x8
|
||||
#define MPASP_SMN_IH_SW_INT__ID_MASK 0x000000FFL
|
||||
#define MPASP_SMN_IH_SW_INT__VALID_MASK 0x00000100L
|
||||
//MPASP_SMN_IH_SW_INT_CTRL
|
||||
#define MPASP_SMN_IH_SW_INT_CTRL__INT_MASK__SHIFT 0x0
|
||||
#define MPASP_SMN_IH_SW_INT_CTRL__INT_ACK__SHIFT 0x8
|
||||
#define MPASP_SMN_IH_SW_INT_CTRL__INT_MASK_MASK 0x00000001L
|
||||
#define MPASP_SMN_IH_SW_INT_CTRL__INT_ACK_MASK 0x00000100L
|
||||
|
||||
|
||||
// addressBlock: Mp1MmioPublic_SmuMp1Pub_CruDec
|
||||
//MP1_CRU1_MP1_FIRMWARE_FLAGS
|
||||
#define MP1_CRU1_MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED__SHIFT 0x0
|
||||
#define MP1_CRU1_MP1_FIRMWARE_FLAGS__RESERVED__SHIFT 0x1
|
||||
#define MP1_CRU1_MP1_FIRMWARE_FLAGS__INTERRUPTS_ENABLED_MASK 0x00000001L
|
||||
#define MP1_CRU1_MP1_FIRMWARE_FLAGS__RESERVED_MASK 0xFFFFFFFEL
|
||||
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,279 @@
|
||||
/*
|
||||
* Copyright 2023 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
#ifndef _osssys_7_0_0_OFFSET_HEADER
|
||||
#define _osssys_7_0_0_OFFSET_HEADER
|
||||
|
||||
|
||||
|
||||
// addressBlock: osssys_osssysdec
|
||||
// base address: 0x4280
|
||||
#define regIH_VMID_0_LUT 0x0000
|
||||
#define regIH_VMID_0_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_1_LUT 0x0001
|
||||
#define regIH_VMID_1_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_2_LUT 0x0002
|
||||
#define regIH_VMID_2_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_3_LUT 0x0003
|
||||
#define regIH_VMID_3_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_4_LUT 0x0004
|
||||
#define regIH_VMID_4_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_5_LUT 0x0005
|
||||
#define regIH_VMID_5_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_6_LUT 0x0006
|
||||
#define regIH_VMID_6_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_7_LUT 0x0007
|
||||
#define regIH_VMID_7_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_8_LUT 0x0008
|
||||
#define regIH_VMID_8_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_9_LUT 0x0009
|
||||
#define regIH_VMID_9_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_10_LUT 0x000a
|
||||
#define regIH_VMID_10_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_11_LUT 0x000b
|
||||
#define regIH_VMID_11_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_12_LUT 0x000c
|
||||
#define regIH_VMID_12_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_13_LUT 0x000d
|
||||
#define regIH_VMID_13_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_14_LUT 0x000e
|
||||
#define regIH_VMID_14_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_15_LUT 0x000f
|
||||
#define regIH_VMID_15_LUT_BASE_IDX 0
|
||||
#define regIH_VMID_0_LUT_MM 0x0010
|
||||
#define regIH_VMID_0_LUT_MM_BASE_IDX 0
|
||||
#define regIH_VMID_1_LUT_MM 0x0011
|
||||
#define regIH_VMID_1_LUT_MM_BASE_IDX 0
|
||||
#define regIH_VMID_2_LUT_MM 0x0012
|
||||
#define regIH_VMID_2_LUT_MM_BASE_IDX 0
|
||||
#define regIH_VMID_3_LUT_MM 0x0013
|
||||
#define regIH_VMID_3_LUT_MM_BASE_IDX 0
|
||||
#define regIH_VMID_4_LUT_MM 0x0014
|
||||
#define regIH_VMID_4_LUT_MM_BASE_IDX 0
|
||||
#define regIH_VMID_5_LUT_MM 0x0015
|
||||
#define regIH_VMID_5_LUT_MM_BASE_IDX 0
|
||||
#define regIH_VMID_6_LUT_MM 0x0016
|
||||
#define regIH_VMID_6_LUT_MM_BASE_IDX 0
|
||||
#define regIH_VMID_7_LUT_MM 0x0017
|
||||
#define regIH_VMID_7_LUT_MM_BASE_IDX 0
|
||||
#define regIH_VMID_8_LUT_MM 0x0018
|
||||
#define regIH_VMID_8_LUT_MM_BASE_IDX 0
|
||||
#define regIH_VMID_9_LUT_MM 0x0019
|
||||
#define regIH_VMID_9_LUT_MM_BASE_IDX 0
|
||||
#define regIH_VMID_10_LUT_MM 0x001a
|
||||
#define regIH_VMID_10_LUT_MM_BASE_IDX 0
|
||||
#define regIH_VMID_11_LUT_MM 0x001b
|
||||
#define regIH_VMID_11_LUT_MM_BASE_IDX 0
|
||||
#define regIH_VMID_12_LUT_MM 0x001c
|
||||
#define regIH_VMID_12_LUT_MM_BASE_IDX 0
|
||||
#define regIH_VMID_13_LUT_MM 0x001d
|
||||
#define regIH_VMID_13_LUT_MM_BASE_IDX 0
|
||||
#define regIH_VMID_14_LUT_MM 0x001e
|
||||
#define regIH_VMID_14_LUT_MM_BASE_IDX 0
|
||||
#define regIH_VMID_15_LUT_MM 0x001f
|
||||
#define regIH_VMID_15_LUT_MM_BASE_IDX 0
|
||||
#define regIH_COOKIE_0 0x0020
|
||||
#define regIH_COOKIE_0_BASE_IDX 0
|
||||
#define regIH_COOKIE_1 0x0021
|
||||
#define regIH_COOKIE_1_BASE_IDX 0
|
||||
#define regIH_COOKIE_2 0x0022
|
||||
#define regIH_COOKIE_2_BASE_IDX 0
|
||||
#define regIH_COOKIE_3 0x0023
|
||||
#define regIH_COOKIE_3_BASE_IDX 0
|
||||
#define regIH_COOKIE_4 0x0024
|
||||
#define regIH_COOKIE_4_BASE_IDX 0
|
||||
#define regIH_COOKIE_5 0x0025
|
||||
#define regIH_COOKIE_5_BASE_IDX 0
|
||||
#define regIH_COOKIE_6 0x0026
|
||||
#define regIH_COOKIE_6_BASE_IDX 0
|
||||
#define regIH_COOKIE_7 0x0027
|
||||
#define regIH_COOKIE_7_BASE_IDX 0
|
||||
#define regIH_REGISTER_LAST_PART0 0x003f
|
||||
#define regIH_REGISTER_LAST_PART0_BASE_IDX 0
|
||||
#define regIH_RB_CNTL 0x0080
|
||||
#define regIH_RB_CNTL_BASE_IDX 0
|
||||
#define regIH_RB_RPTR 0x0081
|
||||
#define regIH_RB_RPTR_BASE_IDX 0
|
||||
#define regIH_RB_WPTR 0x0082
|
||||
#define regIH_RB_WPTR_BASE_IDX 0
|
||||
#define regIH_RB_BASE 0x0083
|
||||
#define regIH_RB_BASE_BASE_IDX 0
|
||||
#define regIH_RB_BASE_HI 0x0084
|
||||
#define regIH_RB_BASE_HI_BASE_IDX 0
|
||||
#define regIH_RB_WPTR_ADDR_HI 0x0085
|
||||
#define regIH_RB_WPTR_ADDR_HI_BASE_IDX 0
|
||||
#define regIH_RB_WPTR_ADDR_LO 0x0086
|
||||
#define regIH_RB_WPTR_ADDR_LO_BASE_IDX 0
|
||||
#define regIH_DOORBELL_RPTR 0x0087
|
||||
#define regIH_DOORBELL_RPTR_BASE_IDX 0
|
||||
#define regIH_DOORBELL_RETRY_CAM 0x0088
|
||||
#define regIH_DOORBELL_RETRY_CAM_BASE_IDX 0
|
||||
#define regIH_RB_CNTL_RING1 0x008c
|
||||
#define regIH_RB_CNTL_RING1_BASE_IDX 0
|
||||
#define regIH_RB_RPTR_RING1 0x008d
|
||||
#define regIH_RB_RPTR_RING1_BASE_IDX 0
|
||||
#define regIH_RB_WPTR_RING1 0x008e
|
||||
#define regIH_RB_WPTR_RING1_BASE_IDX 0
|
||||
#define regIH_RB_BASE_RING1 0x008f
|
||||
#define regIH_RB_BASE_RING1_BASE_IDX 0
|
||||
#define regIH_RB_BASE_HI_RING1 0x0090
|
||||
#define regIH_RB_BASE_HI_RING1_BASE_IDX 0
|
||||
#define regIH_DOORBELL_RPTR_RING1 0x0093
|
||||
#define regIH_DOORBELL_RPTR_RING1_BASE_IDX 0
|
||||
#define regIH_RETRY_CAM_ACK 0x00a4
|
||||
#define regIH_RETRY_CAM_ACK_BASE_IDX 0
|
||||
#define regIH_VERSION 0x00a5
|
||||
#define regIH_VERSION_BASE_IDX 0
|
||||
#define regIH_CNTL 0x00a8
|
||||
#define regIH_CNTL_BASE_IDX 0
|
||||
#define regIH_CLK_CTRL 0x00a9
|
||||
#define regIH_CLK_CTRL_BASE_IDX 0
|
||||
#define regIH_STORM_CLIENT_LIST_CNTL 0x00aa
|
||||
#define regIH_STORM_CLIENT_LIST_CNTL_BASE_IDX 0
|
||||
#define regIH_LIMIT_INT_RATE_CNTL 0x00ab
|
||||
#define regIH_LIMIT_INT_RATE_CNTL_BASE_IDX 0
|
||||
#define regIH_RETRY_INT_CAM_CNTL 0x00ac
|
||||
#define regIH_RETRY_INT_CAM_CNTL_BASE_IDX 0
|
||||
#define regIH_MEM_POWER_CTRL 0x00ad
|
||||
#define regIH_MEM_POWER_CTRL_BASE_IDX 0
|
||||
#define regIH_MEM_POWER_CTRL2 0x00ae
|
||||
#define regIH_MEM_POWER_CTRL2_BASE_IDX 0
|
||||
#define regIH_CNTL2 0x00c1
|
||||
#define regIH_CNTL2_BASE_IDX 0
|
||||
#define regIH_STATUS 0x00c2
|
||||
#define regIH_STATUS_BASE_IDX 0
|
||||
#define regIH_PERFMON_CNTL 0x00c3
|
||||
#define regIH_PERFMON_CNTL_BASE_IDX 0
|
||||
#define regIH_PERFCOUNTER0_RESULT 0x00c4
|
||||
#define regIH_PERFCOUNTER0_RESULT_BASE_IDX 0
|
||||
#define regIH_PERFCOUNTER1_RESULT 0x00c5
|
||||
#define regIH_PERFCOUNTER1_RESULT_BASE_IDX 0
|
||||
#define regIH_DSM_MATCH_VALUE_BIT_31_0 0x00c7
|
||||
#define regIH_DSM_MATCH_VALUE_BIT_31_0_BASE_IDX 0
|
||||
#define regIH_DSM_MATCH_VALUE_BIT_63_32 0x00c8
|
||||
#define regIH_DSM_MATCH_VALUE_BIT_63_32_BASE_IDX 0
|
||||
#define regIH_DSM_MATCH_VALUE_BIT_95_64 0x00c9
|
||||
#define regIH_DSM_MATCH_VALUE_BIT_95_64_BASE_IDX 0
|
||||
#define regIH_DSM_MATCH_FIELD_CONTROL 0x00ca
|
||||
#define regIH_DSM_MATCH_FIELD_CONTROL_BASE_IDX 0
|
||||
#define regIH_DSM_MATCH_DATA_CONTROL 0x00cb
|
||||
#define regIH_DSM_MATCH_DATA_CONTROL_BASE_IDX 0
|
||||
#define regIH_DSM_MATCH_FCN_ID 0x00cc
|
||||
#define regIH_DSM_MATCH_FCN_ID_BASE_IDX 0
|
||||
#define regIH_VF_RB_STATUS 0x00ce
|
||||
#define regIH_VF_RB_STATUS_BASE_IDX 0
|
||||
#define regIH_VF_RB_STATUS2 0x00cf
|
||||
#define regIH_VF_RB_STATUS2_BASE_IDX 0
|
||||
#define regIH_VF_RB1_STATUS 0x00d0
|
||||
#define regIH_VF_RB1_STATUS_BASE_IDX 0
|
||||
#define regIH_VF_RB1_STATUS2 0x00d1
|
||||
#define regIH_VF_RB1_STATUS2_BASE_IDX 0
|
||||
#define regIH_RB_STATUS 0x00d4
|
||||
#define regIH_RB_STATUS_BASE_IDX 0
|
||||
#define regIH_INT_FLOOD_CNTL 0x00d5
|
||||
#define regIH_INT_FLOOD_CNTL_BASE_IDX 0
|
||||
#define regIH_RB0_INT_FLOOD_STATUS 0x00d6
|
||||
#define regIH_RB0_INT_FLOOD_STATUS_BASE_IDX 0
|
||||
#define regIH_RB1_INT_FLOOD_STATUS 0x00d7
|
||||
#define regIH_RB1_INT_FLOOD_STATUS_BASE_IDX 0
|
||||
#define regIH_INT_FLOOD_STATUS 0x00d9
|
||||
#define regIH_INT_FLOOD_STATUS_BASE_IDX 0
|
||||
#define regIH_INT_FLAGS 0x00dc
|
||||
#define regIH_INT_FLAGS_BASE_IDX 0
|
||||
#define regIH_SCRATCH 0x00e0
|
||||
#define regIH_SCRATCH_BASE_IDX 0
|
||||
#define regIH_CLIENT_CREDIT_ERROR 0x00e1
|
||||
#define regIH_CLIENT_CREDIT_ERROR_BASE_IDX 0
|
||||
#define regIH_GPU_IOV_VIOLATION_LOG 0x00e2
|
||||
#define regIH_GPU_IOV_VIOLATION_LOG_BASE_IDX 0
|
||||
#define regIH_GPU_IOV_VIOLATION_LOG2 0x00e3
|
||||
#define regIH_GPU_IOV_VIOLATION_LOG2_BASE_IDX 0
|
||||
#define regIH_COOKIE_REC_VIOLATION_LOG 0x00e4
|
||||
#define regIH_COOKIE_REC_VIOLATION_LOG_BASE_IDX 0
|
||||
#define regIH_CREDIT_STATUS 0x00e5
|
||||
#define regIH_CREDIT_STATUS_BASE_IDX 0
|
||||
#define regIH_MMHUB_ERROR 0x00e6
|
||||
#define regIH_MMHUB_ERROR_BASE_IDX 0
|
||||
#define regIH_VF_RB_STATUS3 0x00ea
|
||||
#define regIH_VF_RB_STATUS3_BASE_IDX 0
|
||||
#define regIH_VF_RB_STATUS4 0x00eb
|
||||
#define regIH_VF_RB_STATUS4_BASE_IDX 0
|
||||
#define regIH_VF_RB1_STATUS3 0x00ec
|
||||
#define regIH_VF_RB1_STATUS3_BASE_IDX 0
|
||||
#define regIH_MSI_STORM_CTRL 0x00f1
|
||||
#define regIH_MSI_STORM_CTRL_BASE_IDX 0
|
||||
#define regIH_MSI_STORM_CLIENT_INDEX 0x00f2
|
||||
#define regIH_MSI_STORM_CLIENT_INDEX_BASE_IDX 0
|
||||
#define regIH_MSI_STORM_CLIENT_DATA 0x00f3
|
||||
#define regIH_MSI_STORM_CLIENT_DATA_BASE_IDX 0
|
||||
#define regIH_LAST_INT_INFO0 0x00f9
|
||||
#define regIH_LAST_INT_INFO0_BASE_IDX 0
|
||||
#define regIH_LAST_INT_INFO1 0x00fa
|
||||
#define regIH_LAST_INT_INFO1_BASE_IDX 0
|
||||
#define regIH_LAST_INT_INFO2 0x00fb
|
||||
#define regIH_LAST_INT_INFO2_BASE_IDX 0
|
||||
#define regIH_REGISTER_LAST_PART2 0x00ff
|
||||
#define regIH_REGISTER_LAST_PART2_BASE_IDX 0
|
||||
#define regSEM_MAILBOX 0x010a
|
||||
#define regSEM_MAILBOX_BASE_IDX 0
|
||||
#define regSEM_MAILBOX_CLEAR 0x010b
|
||||
#define regSEM_MAILBOX_CLEAR_BASE_IDX 0
|
||||
#define regSEM_REGISTER_LAST_PART2 0x017f
|
||||
#define regSEM_REGISTER_LAST_PART2_BASE_IDX 0
|
||||
#define regIH_ACTIVE_FCN_ID 0x0180
|
||||
#define regIH_ACTIVE_FCN_ID_BASE_IDX 0
|
||||
#define regIH_VIRT_RESET_REQ 0x0181
|
||||
#define regIH_VIRT_RESET_REQ_BASE_IDX 0
|
||||
#define regIH_CLIENT_CFG 0x0182
|
||||
#define regIH_CLIENT_CFG_BASE_IDX 0
|
||||
#define regIH_RING1_CLIENT_CFG_INDEX 0x0183
|
||||
#define regIH_RING1_CLIENT_CFG_INDEX_BASE_IDX 0
|
||||
#define regIH_RING1_CLIENT_CFG_DATA 0x0184
|
||||
#define regIH_RING1_CLIENT_CFG_DATA_BASE_IDX 0
|
||||
#define regIH_CLIENT_CFG_INDEX 0x0185
|
||||
#define regIH_CLIENT_CFG_INDEX_BASE_IDX 0
|
||||
#define regIH_CLIENT_CFG_DATA 0x0186
|
||||
#define regIH_CLIENT_CFG_DATA_BASE_IDX 0
|
||||
#define regIH_CLIENT_CFG_DATA2 0x0187
|
||||
#define regIH_CLIENT_CFG_DATA2_BASE_IDX 0
|
||||
#define regIH_CID_REMAP_INDEX 0x0188
|
||||
#define regIH_CID_REMAP_INDEX_BASE_IDX 0
|
||||
#define regIH_CID_REMAP_DATA 0x0189
|
||||
#define regIH_CID_REMAP_DATA_BASE_IDX 0
|
||||
#define regIH_CHICKEN 0x018a
|
||||
#define regIH_CHICKEN_BASE_IDX 0
|
||||
#define regIH_INT_DROP_CNTL 0x018c
|
||||
#define regIH_INT_DROP_CNTL_BASE_IDX 0
|
||||
#define regIH_INT_DROP_MATCH_VALUE0 0x018d
|
||||
#define regIH_INT_DROP_MATCH_VALUE0_BASE_IDX 0
|
||||
#define regIH_INT_DROP_MATCH_VALUE1 0x018e
|
||||
#define regIH_INT_DROP_MATCH_VALUE1_BASE_IDX 0
|
||||
#define regIH_INT_DROP_MATCH_MASK0 0x018f
|
||||
#define regIH_INT_DROP_MATCH_MASK0_BASE_IDX 0
|
||||
#define regIH_INT_DROP_MATCH_MASK1 0x0190
|
||||
#define regIH_INT_DROP_MATCH_MASK1_BASE_IDX 0
|
||||
#define regIH_MMHUB_CNTL 0x01a7
|
||||
#define regIH_MMHUB_CNTL_BASE_IDX 0
|
||||
#define regIH_REGISTER_LAST_PART1 0x01a8
|
||||
#define regIH_REGISTER_LAST_PART1_BASE_IDX 0
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,262 @@
|
||||
/*
|
||||
* Copyright 2023 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SMU14_DRIVER_IF_V14_0_0_H
|
||||
#define SMU14_DRIVER_IF_V14_0_0_H
|
||||
|
||||
typedef struct {
|
||||
int32_t value;
|
||||
uint32_t numFractionalBits;
|
||||
} FloatInIntFormat_t;
|
||||
|
||||
typedef enum {
|
||||
DSPCLK_DCFCLK = 0,
|
||||
DSPCLK_DISPCLK,
|
||||
DSPCLK_PIXCLK,
|
||||
DSPCLK_PHYCLK,
|
||||
DSPCLK_COUNT,
|
||||
} DSPCLK_e;
|
||||
|
||||
typedef struct {
|
||||
uint16_t Freq; // in MHz
|
||||
uint16_t Vid; // min voltage in SVI3 VID
|
||||
} DisplayClockTable_t;
|
||||
|
||||
typedef struct {
|
||||
uint16_t MinClock; // This is either DCFCLK or SOCCLK (in MHz)
|
||||
uint16_t MaxClock; // This is either DCFCLK or SOCCLK (in MHz)
|
||||
uint16_t MinMclk;
|
||||
uint16_t MaxMclk;
|
||||
|
||||
uint8_t WmSetting;
|
||||
uint8_t WmType; // Used for normal pstate change or memory retraining
|
||||
uint8_t Padding[2];
|
||||
} WatermarkRowGeneric_t;
|
||||
|
||||
#define NUM_WM_RANGES 4
|
||||
#define WM_PSTATE_CHG 0
|
||||
#define WM_RETRAINING 1
|
||||
|
||||
typedef enum {
|
||||
WM_SOCCLK = 0,
|
||||
WM_DCFCLK,
|
||||
WM_COUNT,
|
||||
} WM_CLOCK_e;
|
||||
|
||||
typedef struct {
|
||||
// Watermarks
|
||||
WatermarkRowGeneric_t WatermarkRow[WM_COUNT][NUM_WM_RANGES];
|
||||
|
||||
uint32_t MmHubPadding[7]; // SMU internal use
|
||||
} Watermarks_t;
|
||||
|
||||
typedef enum {
|
||||
CUSTOM_DPM_SETTING_GFXCLK,
|
||||
CUSTOM_DPM_SETTING_CCLK,
|
||||
CUSTOM_DPM_SETTING_FCLK_CCX,
|
||||
CUSTOM_DPM_SETTING_FCLK_GFX,
|
||||
CUSTOM_DPM_SETTING_FCLK_STALLS,
|
||||
CUSTOM_DPM_SETTING_LCLK,
|
||||
CUSTOM_DPM_SETTING_COUNT,
|
||||
} CUSTOM_DPM_SETTING_e;
|
||||
|
||||
typedef struct {
|
||||
uint8_t ActiveHystLimit;
|
||||
uint8_t IdleHystLimit;
|
||||
uint8_t FPS;
|
||||
uint8_t MinActiveFreqType;
|
||||
FloatInIntFormat_t MinActiveFreq;
|
||||
FloatInIntFormat_t PD_Data_limit;
|
||||
FloatInIntFormat_t PD_Data_time_constant;
|
||||
FloatInIntFormat_t PD_Data_error_coeff;
|
||||
FloatInIntFormat_t PD_Data_error_rate_coeff;
|
||||
} DpmActivityMonitorCoeffExt_t;
|
||||
|
||||
typedef struct {
|
||||
DpmActivityMonitorCoeffExt_t DpmActivityMonitorCoeff[CUSTOM_DPM_SETTING_COUNT];
|
||||
} CustomDpmSettings_t;
|
||||
|
||||
#define NUM_DCFCLK_DPM_LEVELS 8
|
||||
#define NUM_DISPCLK_DPM_LEVELS 8
|
||||
#define NUM_DPPCLK_DPM_LEVELS 8
|
||||
#define NUM_SOCCLK_DPM_LEVELS 8
|
||||
#define NUM_VCN_DPM_LEVELS 8
|
||||
#define NUM_SOC_VOLTAGE_LEVELS 8
|
||||
#define NUM_VPE_DPM_LEVELS 8
|
||||
#define NUM_FCLK_DPM_LEVELS 8
|
||||
#define NUM_MEM_PSTATE_LEVELS 4
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint32_t UClk;
|
||||
uint32_t MemClk;
|
||||
uint32_t Voltage;
|
||||
uint8_t WckRatio;
|
||||
uint8_t Spare[3];
|
||||
} MemPstateTable_t;
|
||||
|
||||
//Freq in MHz
|
||||
//Voltage in milli volts with 2 fractional bits
|
||||
typedef struct {
|
||||
uint32_t DcfClocks[NUM_DCFCLK_DPM_LEVELS];
|
||||
uint32_t DispClocks[NUM_DISPCLK_DPM_LEVELS];
|
||||
uint32_t DppClocks[NUM_DPPCLK_DPM_LEVELS];
|
||||
uint32_t SocClocks[NUM_SOCCLK_DPM_LEVELS];
|
||||
uint32_t VClocks[NUM_VCN_DPM_LEVELS];
|
||||
uint32_t DClocks[NUM_VCN_DPM_LEVELS];
|
||||
uint32_t VPEClocks[NUM_VPE_DPM_LEVELS];
|
||||
uint32_t FclkClocks_Freq[NUM_FCLK_DPM_LEVELS];
|
||||
uint32_t FclkClocks_Voltage[NUM_FCLK_DPM_LEVELS];
|
||||
uint32_t SocVoltage[NUM_SOC_VOLTAGE_LEVELS];
|
||||
MemPstateTable_t MemPstateTable[NUM_MEM_PSTATE_LEVELS];
|
||||
|
||||
uint8_t NumDcfClkLevelsEnabled;
|
||||
uint8_t NumDispClkLevelsEnabled; //Applies to both Dispclk and Dppclk
|
||||
uint8_t NumSocClkLevelsEnabled;
|
||||
uint8_t VcnClkLevelsEnabled; //Applies to both Vclk and Dclk
|
||||
uint8_t VpeClkLevelsEnabled;
|
||||
|
||||
uint8_t NumMemPstatesEnabled;
|
||||
uint8_t NumFclkLevelsEnabled;
|
||||
uint8_t spare[2];
|
||||
|
||||
uint32_t MinGfxClk;
|
||||
uint32_t MaxGfxClk;
|
||||
} DpmClocks_t;
|
||||
|
||||
//Freq in MHz
|
||||
//Voltage in milli volts with 2 fractional bits
|
||||
typedef struct {
|
||||
uint32_t DcfClocks[NUM_DCFCLK_DPM_LEVELS];
|
||||
uint32_t DispClocks[NUM_DISPCLK_DPM_LEVELS];
|
||||
uint32_t DppClocks[NUM_DPPCLK_DPM_LEVELS];
|
||||
uint32_t SocClocks[NUM_SOCCLK_DPM_LEVELS];
|
||||
uint32_t VClocks0[NUM_VCN_DPM_LEVELS];
|
||||
uint32_t VClocks1[NUM_VCN_DPM_LEVELS];
|
||||
uint32_t DClocks0[NUM_VCN_DPM_LEVELS];
|
||||
uint32_t DClocks1[NUM_VCN_DPM_LEVELS];
|
||||
uint32_t VPEClocks[NUM_VPE_DPM_LEVELS];
|
||||
uint32_t FclkClocks_Freq[NUM_FCLK_DPM_LEVELS];
|
||||
uint32_t FclkClocks_Voltage[NUM_FCLK_DPM_LEVELS];
|
||||
uint32_t SocVoltage[NUM_SOC_VOLTAGE_LEVELS];
|
||||
MemPstateTable_t MemPstateTable[NUM_MEM_PSTATE_LEVELS];
|
||||
|
||||
uint8_t NumDcfClkLevelsEnabled;
|
||||
uint8_t NumDispClkLevelsEnabled; //Applies to both Dispclk and Dppclk
|
||||
uint8_t NumSocClkLevelsEnabled;
|
||||
uint8_t Vcn0ClkLevelsEnabled; //Applies to both Vclk0 and Dclk0
|
||||
uint8_t Vcn1ClkLevelsEnabled; //Applies to both Vclk1 and Dclk1
|
||||
uint8_t VpeClkLevelsEnabled;
|
||||
uint8_t NumMemPstatesEnabled;
|
||||
uint8_t NumFclkLevelsEnabled;
|
||||
|
||||
uint32_t MinGfxClk;
|
||||
uint32_t MaxGfxClk;
|
||||
} DpmClocks_t_v14_0_1;
|
||||
|
||||
typedef struct {
|
||||
uint16_t CoreFrequency[16]; //Target core frequency [MHz]
|
||||
uint16_t CorePower[16]; //CAC calculated core power [mW]
|
||||
uint16_t CoreTemperature[16]; //TSEN measured core temperature [centi-C]
|
||||
uint16_t GfxTemperature; //TSEN measured GFX temperature [centi-C]
|
||||
uint16_t SocTemperature; //TSEN measured SOC temperature [centi-C]
|
||||
uint16_t StapmOpnLimit; //Maximum IRM defined STAPM power limit [mW]
|
||||
uint16_t StapmCurrentLimit; //Time filtered STAPM power limit [mW]
|
||||
uint16_t InfrastructureCpuMaxFreq; //CCLK frequency limit enforced on classic cores [MHz]
|
||||
uint16_t InfrastructureGfxMaxFreq; //GFXCLK frequency limit enforced on GFX [MHz]
|
||||
uint16_t SkinTemp; //Maximum skin temperature reported by APU and HS2 chassis sensors [centi-C]
|
||||
uint16_t GfxclkFrequency; //Time filtered target GFXCLK frequency [MHz]
|
||||
uint16_t FclkFrequency; //Time filtered target FCLK frequency [MHz]
|
||||
uint16_t GfxActivity; //Time filtered GFX busy % [0-100]
|
||||
uint16_t SocclkFrequency; //Time filtered target SOCCLK frequency [MHz]
|
||||
uint16_t VclkFrequency; //Time filtered target VCLK frequency [MHz]
|
||||
uint16_t VcnActivity; //Time filtered VCN busy % [0-100]
|
||||
uint16_t VpeclkFrequency; //Time filtered target VPECLK frequency [MHz]
|
||||
uint16_t IpuclkFrequency; //Time filtered target IPUCLK frequency [MHz]
|
||||
uint16_t IpuBusy[8]; //Time filtered IPU per-column busy % [0-100]
|
||||
uint16_t DRAMReads; //Time filtered DRAM read bandwidth [MB/sec]
|
||||
uint16_t DRAMWrites; //Time filtered DRAM write bandwidth [MB/sec]
|
||||
uint16_t CoreC0Residency[16]; //Time filtered per-core C0 residency % [0-100]
|
||||
uint16_t IpuPower; //Time filtered IPU power [mW]
|
||||
uint32_t ApuPower; //Time filtered APU power [mW]
|
||||
uint32_t GfxPower; //Time filtered GFX power [mW]
|
||||
uint32_t dGpuPower; //Time filtered dGPU power [mW]
|
||||
uint32_t SocketPower; //Time filtered power used for PPT/STAPM [APU+dGPU] [mW]
|
||||
uint32_t AllCorePower; //Time filtered sum of core power across all cores in the socket [mW]
|
||||
uint32_t FilterAlphaValue; //Metrics table alpha filter time constant [us]
|
||||
uint32_t MetricsCounter; //Counter that is incremented on every metrics table update [PM_TIMER cycles]
|
||||
uint16_t MemclkFrequency; //Time filtered target MEMCLK frequency [MHz]
|
||||
uint16_t MpipuclkFrequency; //Time filtered target MPIPUCLK frequency [MHz]
|
||||
uint16_t IpuReads; //Time filtered IPU read bandwidth [MB/sec]
|
||||
uint16_t IpuWrites; //Time filtered IPU write bandwidth [MB/sec]
|
||||
uint32_t ThrottleResidency_PROCHOT; //Counter that is incremented on every metrics table update when PROCHOT was engaged [PM_TIMER cycles]
|
||||
uint32_t ThrottleResidency_SPL; //Counter that is incremented on every metrics table update when SPL was engaged [PM_TIMER cycles]
|
||||
uint32_t ThrottleResidency_FPPT; //Counter that is incremented on every metrics table update when fast PPT was engaged [PM_TIMER cycles]
|
||||
uint32_t ThrottleResidency_SPPT; //Counter that is incremented on every metrics table update when slow PPT was engaged [PM_TIMER cycles]
|
||||
uint32_t ThrottleResidency_THM_CORE; //Counter that is incremented on every metrics table update when CORE thermal throttling was engaged [PM_TIMER cycles]
|
||||
uint32_t ThrottleResidency_THM_GFX; //Counter that is incremented on every metrics table update when GFX thermal throttling was engaged [PM_TIMER cycles]
|
||||
uint32_t ThrottleResidency_THM_SOC; //Counter that is incremented on every metrics table update when SOC thermal throttling was engaged [PM_TIMER cycles]
|
||||
uint16_t Psys; //Time filtered Psys power [mW]
|
||||
uint16_t spare1;
|
||||
uint32_t spare[6];
|
||||
} SmuMetrics_t;
|
||||
|
||||
//ISP tile definitions
|
||||
typedef enum {
|
||||
TILE_XTILE = 0, //ONO0
|
||||
TILE_MTILE, //ONO1
|
||||
TILE_PDP, //ONO2
|
||||
TILE_CSTAT, //ONO2
|
||||
TILE_LME, //ONO3
|
||||
TILE_BYRP, //ONO4
|
||||
TILE_GRBP, //ONO4
|
||||
TILE_MCFP, //ONO4
|
||||
TILE_YUVP, //ONO4
|
||||
TILE_MCSC, //ONO4
|
||||
TILE_GDC, //ONO5
|
||||
TILE_MAX
|
||||
} TILE_NUM_e;
|
||||
|
||||
// Tile Selection (Based on arguments)
|
||||
#define ISP_TILE_SEL(tile) (1<<tile)
|
||||
#define ISP_TILE_SEL_ALL 0x7FF
|
||||
|
||||
// Workload bits
|
||||
#define WORKLOAD_PPLIB_FULL_SCREEN_3D_BIT 0
|
||||
#define WORKLOAD_PPLIB_VIDEO_BIT 2
|
||||
#define WORKLOAD_PPLIB_VR_BIT 3
|
||||
#define WORKLOAD_PPLIB_COMPUTE_BIT 4
|
||||
#define WORKLOAD_PPLIB_CUSTOM_BIT 5
|
||||
#define WORKLOAD_PPLIB_COUNT 6
|
||||
|
||||
#define TABLE_BIOS_IF 0 // Called by BIOS
|
||||
#define TABLE_WATERMARKS 1 // Called by DAL through VBIOS
|
||||
#define TABLE_CUSTOM_DPM 2 // Called by Driver
|
||||
#define TABLE_BIOS_GPIO_CONFIG 3 // Called by BIOS
|
||||
#define TABLE_DPMCLOCKS 4 // Called by Driver and VBIOS
|
||||
#define TABLE_MOMENTARY_PM 5 // Called by Tools
|
||||
#define TABLE_MODERN_STDBY 6 // Called by Tools for Modern Standby Log
|
||||
#define TABLE_SMU_METRICS 7 // Called by Driver and SMF/PMF
|
||||
#define TABLE_COUNT 8
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,194 @@
|
||||
/*
|
||||
* Copyright 2023 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __SMU_V14_0_0_PMFW_H__
|
||||
#define __SMU_V14_0_0_PMFW_H__
|
||||
|
||||
#include "smu14_driver_if_v14_0_0.h"
|
||||
|
||||
#pragma pack(push, 1)
|
||||
|
||||
#define ENABLE_DEBUG_FEATURES
|
||||
|
||||
// Firmware features
|
||||
// Feature Control Defines
|
||||
#define FEATURE_CCLK_DPM_BIT 0
|
||||
#define FEATURE_FAN_CONTROLLER_BIT 1
|
||||
#define FEATURE_DATA_CALCULATION_BIT 2
|
||||
#define FEATURE_PPT_BIT 3
|
||||
#define FEATURE_TDC_BIT 4
|
||||
#define FEATURE_THERMAL_BIT 5
|
||||
#define FEATURE_FIT_BIT 6
|
||||
#define FEATURE_EDC_BIT 7
|
||||
#define FEATURE_PLL_POWER_DOWN_BIT 8
|
||||
#define FEATURE_VDDOFF_BIT 9
|
||||
#define FEATURE_VCN_DPM_BIT 10 /* this is for both VCN0 and VCN1 */
|
||||
#define FEATURE_DS_MPM_BIT 11
|
||||
#define FEATURE_FCLK_DPM_BIT 12
|
||||
#define FEATURE_SOCCLK_DPM_BIT 13
|
||||
#define FEATURE_DS_MPIO_BIT 14
|
||||
#define FEATURE_LCLK_DPM_BIT 15
|
||||
#define FEATURE_SHUBCLK_DPM_BIT 16
|
||||
#define FEATURE_DCFCLK_DPM_BIT 17
|
||||
#define FEATURE_ISP_DPM_BIT 18
|
||||
#define FEATURE_IPU_DPM_BIT 19
|
||||
#define FEATURE_GFX_DPM_BIT 20
|
||||
#define FEATURE_DS_GFXCLK_BIT 21
|
||||
#define FEATURE_DS_SOCCLK_BIT 22
|
||||
#define FEATURE_DS_LCLK_BIT 23
|
||||
#define FEATURE_LOW_POWER_DCNCLKS_BIT 24
|
||||
#define FEATURE_DS_SHUBCLK_BIT 25
|
||||
#define FEATURE_RESERVED0_BIT 26
|
||||
#define FEATURE_ZSTATES_BIT 27
|
||||
#define FEATURE_IOMMUL2_PG_BIT 28
|
||||
#define FEATURE_DS_FCLK_BIT 29
|
||||
#define FEATURE_DS_SMNCLK_BIT 30
|
||||
#define FEATURE_DS_MP1CLK_BIT 31
|
||||
#define FEATURE_WHISPER_MODE_BIT 32
|
||||
#define FEATURE_SMU_LOW_POWER_BIT 33
|
||||
#define FEATURE_RESERVED1_BIT 34 /* v14_0_0 SMART_L3_RINSER; v14_0_1 RESERVED1 */
|
||||
#define FEATURE_GFX_DEM_BIT 35 /* v14_0_0 SPARE; v14_0_1 GFX_DEM */
|
||||
#define FEATURE_PSI_BIT 36
|
||||
#define FEATURE_PROCHOT_BIT 37
|
||||
#define FEATURE_CPUOFF_BIT 38
|
||||
#define FEATURE_STAPM_BIT 39
|
||||
#define FEATURE_S0I3_BIT 40
|
||||
#define FEATURE_DF_LIGHT_CSTATE 41
|
||||
#define FEATURE_PERF_LIMIT_BIT 42
|
||||
#define FEATURE_CORE_DLDO_BIT 43
|
||||
#define FEATURE_DVO_BIT 44
|
||||
#define FEATURE_DS_VCN_BIT 45 /* v14_0_1 this is for both VCN0 and VCN1 */
|
||||
#define FEATURE_CPPC_BIT 46
|
||||
#define FEATURE_CPPC_PREFERRED_CORES 47
|
||||
#define FEATURE_DF_CSTATES_BIT 48
|
||||
#define FEATURE_FAST_PSTATE_CLDO_BIT 49 /* v14_0_0 SPARE */
|
||||
#define FEATURE_ATHUB_PG_BIT 50
|
||||
#define FEATURE_VDDOFF_ECO_BIT 51
|
||||
#define FEATURE_ZSTATES_ECO_BIT 52
|
||||
#define FEATURE_CC6_BIT 53
|
||||
#define FEATURE_DS_UMCCLK_BIT 54
|
||||
#define FEATURE_DS_ISPCLK_BIT 55
|
||||
#define FEATURE_DS_HSPCLK_BIT 56
|
||||
#define FEATURE_P3T_BIT 57
|
||||
#define FEATURE_DS_IPUCLK_BIT 58
|
||||
#define FEATURE_DS_VPECLK_BIT 59
|
||||
#define FEATURE_VPE_DPM_BIT 60
|
||||
#define FEATURE_SMART_L3_RINSER_BIT 61 /* v14_0_0 SPARE*/
|
||||
#define FEATURE_PCC_BIT 62 /* v14_0_0 FP_DIDT v14_0_1 PCC_BIT */
|
||||
#define NUM_FEATURES 63
|
||||
|
||||
// Firmware Header/Footer
|
||||
struct SMU14_Firmware_Footer {
|
||||
uint32_t Signature;
|
||||
};
|
||||
typedef struct SMU14_Firmware_Footer SMU14_Firmware_Footer;
|
||||
|
||||
// PSP3.0 Header Definition
|
||||
typedef struct {
|
||||
uint32_t ImageVersion;
|
||||
uint32_t ImageVersion2; // This is repeated because DW0 cannot be written in SRAM due to HW bug.
|
||||
uint32_t Padding0[3];
|
||||
uint32_t SizeFWSigned;
|
||||
uint32_t Padding1[25];
|
||||
uint32_t FirmwareType;
|
||||
uint32_t Filler[32];
|
||||
} SMU_Firmware_Header;
|
||||
|
||||
typedef struct {
|
||||
// MP1_EXT_SCRATCH0
|
||||
uint32_t DpmHandlerID : 8;
|
||||
uint32_t ActivityMonitorID : 8;
|
||||
uint32_t DpmTimerID : 8;
|
||||
uint32_t DpmHubID : 4;
|
||||
uint32_t DpmHubTask : 4;
|
||||
// MP1_EXT_SCRATCH1
|
||||
uint32_t CclkSyncStatus : 8;
|
||||
uint32_t Ccx0CpuOff : 2;
|
||||
uint32_t Ccx1CpuOff : 2;
|
||||
uint32_t GfxOffStatus : 2;
|
||||
uint32_t VddOff : 1;
|
||||
uint32_t InWhisperMode : 1;
|
||||
uint32_t ZstateStatus : 4;
|
||||
uint32_t spare0 : 4;
|
||||
uint32_t DstateFun : 4;
|
||||
uint32_t DstateDev : 4;
|
||||
// MP1_EXT_SCRATCH2
|
||||
uint32_t P2JobHandler :24;
|
||||
uint32_t RsmuPmiP2PendingCnt : 8;
|
||||
// MP1_EXT_SCRATCH3
|
||||
uint32_t PostCode :32;
|
||||
// MP1_EXT_SCRATCH4
|
||||
uint32_t MsgPortBusy :24;
|
||||
uint32_t RsmuPmiP1Pending : 1;
|
||||
uint32_t DfCstateExitPending : 1;
|
||||
uint32_t Ccx0Pc6ExitPending : 1;
|
||||
uint32_t Ccx1Pc6ExitPending : 1;
|
||||
uint32_t WarmResetPending : 1;
|
||||
uint32_t spare1 : 3;
|
||||
// MP1_EXT_SCRATCH5
|
||||
uint32_t IdleMask :32;
|
||||
// MP1_EXT_SCRATCH6 = RTOS threads' status
|
||||
// MP1_EXT_SCRATCH7 = RTOS Current Job
|
||||
} FwStatus_t;
|
||||
|
||||
typedef struct {
|
||||
// MP1_EXT_SCRATCH0
|
||||
uint32_t DpmHandlerID : 8;
|
||||
uint32_t ActivityMonitorID : 8;
|
||||
uint32_t DpmTimerID : 8;
|
||||
uint32_t DpmHubID : 4;
|
||||
uint32_t DpmHubTask : 4;
|
||||
// MP1_EXT_SCRATCH1
|
||||
uint32_t CclkSyncStatus : 8;
|
||||
uint32_t ZstateStatus : 4;
|
||||
uint32_t Cpu1VddOff : 4;
|
||||
uint32_t DstateFun : 4;
|
||||
uint32_t DstateDev : 4;
|
||||
uint32_t GfxOffStatus : 2;
|
||||
uint32_t Cpu0Off : 2;
|
||||
uint32_t Cpu1Off : 2;
|
||||
uint32_t Cpu0VddOff : 2;
|
||||
// MP1_EXT_SCRATCH2
|
||||
uint32_t P2JobHandler :32;
|
||||
// MP1_EXT_SCRATCH3
|
||||
uint32_t PostCode :32;
|
||||
// MP1_EXT_SCRATCH4
|
||||
uint32_t MsgPortBusy :15;
|
||||
uint32_t RsmuPmiP1Pending : 1;
|
||||
uint32_t RsmuPmiP2PendingCnt : 8;
|
||||
uint32_t DfCstateExitPending : 1;
|
||||
uint32_t Pc6EntryPending : 1;
|
||||
uint32_t Pc6ExitPending : 1;
|
||||
uint32_t WarmResetPending : 1;
|
||||
uint32_t Mp0ClkPending : 1;
|
||||
uint32_t InWhisperMode : 1;
|
||||
uint32_t spare2 : 2;
|
||||
// MP1_EXT_SCRATCH5
|
||||
uint32_t IdleMask :32;
|
||||
// MP1_EXT_SCRATCH6 = RTOS threads' status
|
||||
// MP1_EXT_SCRATCH7 = RTOS Current Job
|
||||
} FwStatus_t_v14_0_1;
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#endif
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user