mirror of
https://github.com/tinygrad/tinygrad.git
synced 2026-08-21 06:46:07 +00:00
Compare commits
529
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 |
@@ -202,8 +202,8 @@ runs:
|
||||
if: inputs.webgpu == 'true' && runner.os == 'macOS'
|
||||
shell: bash
|
||||
run: |
|
||||
sudo mkdir -p /usr/local/lib
|
||||
sudo curl -L https://github.com/wpmed92/pydawn/releases/download/v0.1.6/libwebgpu_dawn.dylib -o /usr/local/lib/libwebgpu_dawn.dylib
|
||||
brew tap wpmed92/dawn
|
||||
brew install dawn
|
||||
|
||||
# **** LLVM ****
|
||||
|
||||
@@ -212,8 +212,10 @@ runs:
|
||||
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 llvm-dev
|
||||
sudo apt install -y --no-install-recommends libllvm19 clang-19 lld-19
|
||||
|
||||
- name: Install LLVM (macOS)
|
||||
if: inputs.llvm == 'true' && runner.os == 'macOS'
|
||||
|
||||
@@ -447,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}
|
||||
@@ -455,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
|
||||
@@ -474,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
|
||||
|
||||
+102
-11
@@ -118,12 +118,15 @@ jobs:
|
||||
cp tinygrad/runtime/autogen/hsa.py /tmp/hsa.py.bak
|
||||
cp tinygrad/runtime/autogen/comgr.py /tmp/comgr.py.bak
|
||||
cp tinygrad/runtime/autogen/amd_gpu.py /tmp/amd_gpu.py.bak
|
||||
cp tinygrad/runtime/autogen/sqtt.py /tmp/sqtt.py.bak
|
||||
./autogen_stubs.sh hsa
|
||||
./autogen_stubs.sh comgr
|
||||
./autogen_stubs.sh amd
|
||||
./autogen_stubs.sh sqtt
|
||||
diff /tmp/hsa.py.bak tinygrad/runtime/autogen/hsa.py
|
||||
diff /tmp/comgr.py.bak tinygrad/runtime/autogen/comgr.py
|
||||
diff /tmp/amd_gpu.py.bak tinygrad/runtime/autogen/amd_gpu.py
|
||||
diff /tmp/sqtt.py.bak tinygrad/runtime/autogen/sqtt.py
|
||||
- name: Verify Linux autogen
|
||||
run: |
|
||||
cp tinygrad/runtime/autogen/libc.py /tmp/libc.py.bak
|
||||
@@ -143,6 +146,65 @@ jobs:
|
||||
./autogen_stubs.sh llvm
|
||||
diff /tmp/llvm.py.bak tinygrad/runtime/autogen/llvm.py
|
||||
|
||||
torchbackend:
|
||||
name: Torch Backend Tests
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 10
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
- name: Setup Environment
|
||||
uses: ./.github/actions/setup-tinygrad
|
||||
with:
|
||||
key: torch-backend-pillow-torchvision-et-pt
|
||||
deps: testing_minimal
|
||||
pydeps: "pillow torchvision expecttest"
|
||||
llvm: 'true'
|
||||
- name: Install ninja
|
||||
run: |
|
||||
sudo apt update || true
|
||||
sudo apt install -y --no-install-recommends ninja-build
|
||||
- name: Lint with ruff
|
||||
run: |
|
||||
pip3 install --upgrade --force-reinstall ruff==0.11.0
|
||||
python3 -m ruff check extra/torch_backend/backend.py
|
||||
- name: Test one op
|
||||
run: PYTHONPATH=. FORWARD_ONLY=1 TINY_BACKEND=1 python3 test/test_ops.py TestOps.test_add
|
||||
- name: Test ResNet-18
|
||||
run: PYTHONPATH=. DEBUG=2 python3 extra/torch_backend/example.py
|
||||
- name: My (custom) tests
|
||||
run: PYTHONPATH=. python3 extra/torch_backend/test.py
|
||||
- name: Test one op in torch tests
|
||||
run: PYTHONPATH=. DEBUG=2 python3 extra/torch_backend/torch_tests.py TestTinyBackendPRIVATEUSE1.test_unary_log_tiny_float32
|
||||
- name: Test Ops with TINY_BACKEND (expect failure)
|
||||
run: PYTHONPATH=. LLVM=1 LLVMOPT=0 TINY_BACKEND=1 python3 -m pytest -n auto test/test_ops.py --durations=20 || true
|
||||
- name: Test in-place operations on views
|
||||
run: PYTHONPATH=. TORCH_DEBUG=1 python3 extra/torch_backend/test_inplace.py
|
||||
- name: Test multi-gpu
|
||||
run: PYTHONPATH=. LLVM=1 GPUS=4 TORCH_DEBUG=1 python3 extra/torch_backend/test_multigpu.py
|
||||
|
||||
torchbackendmore:
|
||||
name: Torch Backend Tests More
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 10
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
- name: Setup Environment
|
||||
uses: ./.github/actions/setup-tinygrad
|
||||
with:
|
||||
key: torch-backend-pillow-torchvision-et-pt
|
||||
deps: testing_minimal
|
||||
llvm: 'true'
|
||||
- name: Install ninja
|
||||
run: |
|
||||
sudo apt update || true
|
||||
sudo apt install -y --no-install-recommends ninja-build
|
||||
- name: Test beautiful_mnist in torch with TINY_BACKEND
|
||||
run: PYTHONPATH=. LLVM=1 TARGET_EVAL_ACC_PCT=96.0 TINY_BACKEND=1 python3 examples/other_mnist/beautiful_mnist_torch.py
|
||||
- name: Test some torch tests (expect failure)
|
||||
run: PYTHONPATH=. python3 -m pytest extra/torch_backend/torch_tests.py -v --tb=no || true
|
||||
|
||||
tc:
|
||||
name: Tensor Core tests
|
||||
runs-on: ubuntu-latest
|
||||
@@ -172,6 +234,10 @@ jobs:
|
||||
PYTHONPATH=. DEBUG=2 EMULATE_AMD=1 FORWARD_ONLY=1 PYTHON=1 N=16 HALF=1 ACC_HALF=1 python3 ./extra/gemm/simple_matmul.py
|
||||
PYTHONPATH=. DEBUG=2 EMULATE_AMD=1 FORWARD_ONLY=1 PYTHON=1 N=64 HALF=1 ACC_HALF=1 python3 ./extra/gemm/simple_matmul.py
|
||||
PYTHONPATH=. DEBUG=2 EMULATE_AMD=1 FORWARD_ONLY=1 PYTHON=1 python3 test/test_linearizer.py TestLinearizer.test_tensor_cores TestLinearizer.test_tensor_cores_padded
|
||||
- name: Test emulated AMD MFMA tensor cores
|
||||
run: |
|
||||
PYTHONPATH=. DEBUG=2 EMULATE_AMD_MFMA=1 FORWARD_ONLY=1 PYTHON=1 N=64 HALF=1 ACC_HALF=0 python3 ./extra/gemm/simple_matmul.py
|
||||
PYTHONPATH=. DEBUG=2 EMULATE_AMD_MFMA=1 FORWARD_ONLY=1 PYTHON=1 python3 test/test_linearizer.py TestLinearizer.test_tensor_cores TestLinearizer.test_tensor_cores_padded
|
||||
- name: Test emulated CUDA tensor cores
|
||||
run: |
|
||||
DEBUG=2 EMULATE_CUDA=1 FORWARD_ONLY=1 PYTHON=1 python3 test/test_ops.py TestOps.test_gemm_fp16
|
||||
@@ -191,6 +257,7 @@ jobs:
|
||||
run: |
|
||||
TC=3 DEBUG=3 EMULATE_METAL=1 FORWARD_ONLY=1 PYTHON=1 python3 test/test_ops.py TestOps.test_gemm
|
||||
TC=3 PYTHONPATH=. DEBUG=3 EMULATE_AMD=1 PYTHON=1 N=16 HALF=1 ACC_HALF=0 python3 ./extra/gemm/simple_matmul.py
|
||||
TC=3 PYTHONPATH=. DEBUG=3 EMULATE_AMD_MFMA=1 PYTHON=1 N=16 HALF=1 ACC_HALF=0 python3 ./extra/gemm/simple_matmul.py
|
||||
TC=3 DEBUG=3 EMULATE_CUDA=1 FORWARD_ONLY=1 PYTHON=1 python3 test/test_ops.py TestOps.test_gemm_fp16
|
||||
TC=3 PYTHONPATH=. DEBUG=3 EMULATE_INTEL=1 PYTHON=1 N=16 HALF=1 python3 ./extra/gemm/simple_matmul.py
|
||||
TC=3 PYTHONPATH=. DEBUG=3 AMX=1 EMULATE_AMX=1 FORWARD_ONLY=1 PYTHON=1 python3 test/test_ops.py TestOps.test_gemm
|
||||
@@ -217,7 +284,7 @@ jobs:
|
||||
- name: Test dtype with Python emulator
|
||||
run: DEBUG=1 PYTHONPATH=. PYTHON=1 python3 -m pytest -n=auto test/test_dtype.py test/test_dtype_alu.py
|
||||
- name: Test ops with Python emulator
|
||||
run: DEBUG=2 PYTHON=1 python3 -m pytest -n=auto test/test_ops.py -k "not (test_split or test_simple_cumsum or test_cumsum or test_einsum or test_dot or test_dot_1d or test_big_gemm or test_broadcastdot or test_multidot or test_var_axis or test_std_axis or test_broadcast_full or test_broadcast_partial or test_simple_conv3d or test_dilated_conv_transpose2d or test_simple_conv_transpose3d or test_large_input_conv2d or test_max_pool2d or test_max_pool2d_simple or test_max_pool2d_bigger_stride or test_avg_pool2d or test_cat or test_scaled_product_attention or test_scaled_product_attention_causal or test_slice_fancy_indexing_dim_inject_none or test_slice_fancy_indexing_list_indices or test_slice_fancy_indexing_no_dim_collapse or test_slice_fancy_indexing_tuple_indices or test_slice_fancy_indexing_list_with_tensors or test_slice_fancy_indexing_dim_collapse_int or test_interpolate_bilinear or test_interpolate_bilinear_corners_aligned or test_scaled_dot_product_attention or test_cummax)" --durations=20
|
||||
run: DEBUG=2 PYTHON=1 python3 -m pytest -n=auto test/test_ops.py -k "not (test_split or test_simple_cumsum or test_cumsum or test_einsum or test_dot or test_dot_1d or test_big_gemm or test_broadcastdot or test_multidot or test_var_axis or test_std_axis or test_broadcast_full or test_broadcast_partial or test_simple_conv3d or test_dilated_conv_transpose2d or test_simple_conv_transpose3d or test_large_input_conv2d or test_max_pool2d or test_max_pool2d_simple or test_max_pool2d_bigger_stride or test_avg_pool2d or test_cat or test_scaled_product_attention or test_scaled_product_attention_causal or test_slice_fancy_indexing_dim_inject_none or test_slice_fancy_indexing_list_indices or test_slice_fancy_indexing_no_dim_collapse or test_slice_fancy_indexing_tuple_indices or test_slice_fancy_indexing_list_with_tensors or test_slice_fancy_indexing_dim_collapse_int or test_interpolate_bilinear or test_interpolate_bilinear_corners_aligned or test_scaled_dot_product_attention or test_cummax or test_simple_cummax or test_logcumsumexp or test_sort or test_cumprod)" --durations=20
|
||||
- name: Test uops with Python emulator
|
||||
run: PYTHON=1 python3 -m pytest test/test_uops.py --durations=20
|
||||
- name: Test symbolic with Python emulator
|
||||
@@ -244,7 +311,7 @@ jobs:
|
||||
run: python -m pylint --disable=all -e W0311 -e C0303 --jobs=0 --indent-string=' ' --recursive=y .
|
||||
- name: Lint with ruff
|
||||
run: |
|
||||
pip3 install --upgrade --force-reinstall ruff
|
||||
pip3 install --upgrade --force-reinstall ruff==0.11.0
|
||||
python3 -m ruff check .
|
||||
- name: Lint tinygrad with pylint
|
||||
run: python -m pylint tinygrad/
|
||||
@@ -268,8 +335,8 @@ jobs:
|
||||
run: awk '/```python/{flag=1;next}/```/{flag=0}flag' README.md > README.py && PYTHONPATH=. python README.py
|
||||
- name: Run unit tests
|
||||
run: PYTHONPATH="." python -m pytest -n=auto test/unit/
|
||||
- name: Repo line count < 11300 lines
|
||||
run: MAX_LINE_COUNT=11300 python sz.py
|
||||
- name: Repo line count < 12000 lines
|
||||
run: MAX_LINE_COUNT=12000 python sz.py
|
||||
|
||||
fuzzing:
|
||||
name: Fuzzing
|
||||
@@ -292,7 +359,7 @@ jobs:
|
||||
|
||||
testgpuimage:
|
||||
name: 'GPU IMAGE Tests'
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
timeout-minutes: 10
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
@@ -316,7 +383,7 @@ jobs:
|
||||
|
||||
testopenpilot:
|
||||
name: 'openpilot Compile Tests'
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
timeout-minutes: 10
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
@@ -329,7 +396,7 @@ jobs:
|
||||
opencl: 'true'
|
||||
- name: Test openpilot model kernel count and gate usage
|
||||
run: |
|
||||
PYTHONPATH="." ALLOWED_KERNEL_COUNT=209 ALLOWED_READ_IMAGE=2105 ALLOWED_GATED_READ_IMAGE=29 FLOAT16=0 GPU=1 IMAGE=2 python examples/openpilot/compile3.py https://github.com/commaai/openpilot/raw/v0.9.4/selfdrive/modeld/models/supercombo.onnx
|
||||
PYTHONPATH="." ALLOWED_KERNEL_COUNT=209 ALLOWED_READ_IMAGE=2138 ALLOWED_GATED_READ_IMAGE=29 FLOAT16=0 GPU=1 IMAGE=2 python examples/openpilot/compile3.py https://github.com/commaai/openpilot/raw/v0.9.4/selfdrive/modeld/models/supercombo.onnx
|
||||
- name: Test openpilot alt model correctness (float32)
|
||||
run: PYTHONPATH="." FLOAT16=0 DEBUGCL=1 GPU=1 IMAGE=2 python examples/openpilot/compile3.py https://github.com/commaai/openpilot/raw/3799fe46b3a629e491d4b8498b8ae83e4c88c304/selfdrive/modeld/models/supercombo.onnx
|
||||
- name: Test openpilot fastvits model correctness (float32)
|
||||
@@ -359,6 +426,10 @@ jobs:
|
||||
run: CPU=1 python -m pytest -n=auto test/external/external_test_onnx_backend.py --durations=20
|
||||
- name: Test ONNX (LLVM)
|
||||
run: LLVM=1 python -m pytest -n=auto test/external/external_test_onnx_backend.py --durations=20
|
||||
- name: Test Additional ONNX Ops (CPU)
|
||||
run: CPU=1 PYTHONPATH=. python3 test/external/external_test_onnx_ops.py
|
||||
- name: Test Quantize ONNX
|
||||
run: CPU=1 PYTHONPATH=. python3 test/test_quantize_onnx.py
|
||||
- name: Run CLOUD=1 Test
|
||||
run: |
|
||||
CLOUDDEV=CPU CLOUD=1 python3 test/test_tiny.py
|
||||
@@ -403,7 +474,7 @@ jobs:
|
||||
testdsp:
|
||||
name: Linux (DSP)
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 10
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
@@ -412,7 +483,7 @@ jobs:
|
||||
with:
|
||||
key: dsp-minimal
|
||||
deps: testing_minimal
|
||||
pydeps: "onnx==1.16.0 onnxruntime"
|
||||
pydeps: "onnx==1.17.0 onnxruntime pillow"
|
||||
llvm: "true"
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
@@ -427,10 +498,14 @@ jobs:
|
||||
cache-to: type=gha,mode=min
|
||||
- name: Run test_tiny on DSP
|
||||
run: DEBUG=2 DSP=1 python test/test_tiny.py
|
||||
- name: Test transcendentals
|
||||
run: CC=clang-19 PYTHONPATH="." DEBUG=2 DSP=1 python test/test_transcendental.py TestTranscendentalVectorized
|
||||
- name: Test quantize onnx
|
||||
run: PYTHONPATH="." DEBUG=2 DSP=1 python3 test/test_quantize_onnx.py
|
||||
- name: Test LLVM=1 DEVECTORIZE=0
|
||||
run: LLVM=1 DEVECTORIZE=0 python3 -m pytest -n auto test/test_tiny.py test/test_ops.py -k "not test_avg_pool3d_failure"
|
||||
- name: Test LLVM=1 DEVECTORIZE=0 for model
|
||||
run: PYTHONPATH="." LLVM=1 DEVECTORIZE=0 python3 test/models/test_efficientnet.py
|
||||
- name: Test CPU=1 DEVECTORIZE=0
|
||||
run: CPU=1 DEVECTORIZE=0 python3 -m pytest -n auto test/test_tiny.py test/test_ops.py -k "not test_avg_pool3d_failure"
|
||||
|
||||
@@ -480,6 +555,7 @@ jobs:
|
||||
deps: testing_minimal${{matrix.backend=='ptx'&&',cuda'||matrix.backend=='triton'&&',triton'||''}}
|
||||
opencl: ${{ matrix.backend == 'gpu' && 'true' }}
|
||||
amd: ${{ matrix.backend == 'amd' && 'true' }}
|
||||
llvm: ${{ (matrix.backend == 'amd' || matrix.backend == 'llvm') && 'true' }}
|
||||
cuda: ${{ (matrix.backend == 'ptx' || matrix.backend == 'triton' || matrix.backend == 'nv') && 'true' }}
|
||||
- name: Set env
|
||||
run: printf "${{ matrix.backend == 'llvm' && 'LLVM=1' || matrix.backend == 'cpu' && 'CPU=1' || matrix.backend == 'gpu' && 'GPU=1' || matrix.backend == 'PTX' && 'FORWARD_ONLY=1\nJIT=1\nOPT=2\nCUDA=1\nPTX=1\nMOCKGPU=1' || matrix.backend == 'triton' && 'FORWARD_ONLY=1\nJIT=1\nOPT=2\nNV=1\nMOCKGPU=1\nTRITON=1\nTRITON_PTXAS_PATH=/usr/bin/ptxas' || matrix.backend == 'amd' && 'AMD=1\nMOCKGPU=1\nFORWARD_ONLY=1' || matrix.backend == 'nv' && 'NV=1\nMOCKGPU=1\nFORWARD_ONLY=1' }}" >> $GITHUB_ENV
|
||||
@@ -496,6 +572,9 @@ jobs:
|
||||
- name: Run pytest (amd)
|
||||
if: matrix.backend=='amd'
|
||||
run: python -m pytest -n=auto test/test_ops.py test/test_dtype.py test/test_dtype_alu.py test/test_linearizer.py test/test_randomness.py test/imported/test_indexing.py test/test_hcq.py test/external/external_test_am.py --durations=20
|
||||
- name: Run pytest (amd with llvm backend)
|
||||
if: matrix.backend=='amd'
|
||||
run: AMD_LLVM=1 python -m pytest -n=auto test/test_ops.py test/test_dtype.py test/test_dtype_alu.py test/test_linearizer.py test/test_randomness.py test/imported/test_indexing.py test/test_hcq.py test/external/external_test_am.py test/test_amd_llvm.py --durations=20
|
||||
- name: Run TRANSCENDENTAL math
|
||||
run: TRANSCENDENTAL=2 python -m pytest -n=auto test/test_ops.py::TestOps::test_sin test/test_ops.py::TestOps::test_cos test/test_ops.py::TestOps::test_tan test/test_ops.py::TestOps::test_exp test/test_ops.py::TestOps::test_log --durations=20
|
||||
- name: Run process replay tests
|
||||
@@ -506,7 +585,7 @@ jobs:
|
||||
testmetal2:
|
||||
name: MacOS (unit)
|
||||
runs-on: macos-14
|
||||
timeout-minutes: 10
|
||||
timeout-minutes: 20
|
||||
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
@@ -519,6 +598,7 @@ jobs:
|
||||
python-version: '3.11'
|
||||
amd: 'true'
|
||||
cuda: 'true'
|
||||
llvm: 'true'
|
||||
- name: Run real world test
|
||||
run: JIT=2 METAL=1 python -m pytest -n=auto test/models/test_real_world.py --durations=20
|
||||
- name: Test models (Metal)
|
||||
@@ -546,6 +626,14 @@ jobs:
|
||||
FORWARD_ONLY: 1
|
||||
run: |
|
||||
python3 -m pytest -n=auto test/test_hcq.py test/test_tiny.py --durations=20
|
||||
- name: Run pytest (amd with llvm backend)
|
||||
env:
|
||||
MOCKGPU: 1
|
||||
AMD: 1
|
||||
AMD_LLVM: 1
|
||||
FORWARD_ONLY: 1
|
||||
run: |
|
||||
python -m pytest -n=auto test/test_hcq.py test/test_tiny.py test/test_amd_llvm.py --durations=20
|
||||
- name: Run pytest (ptx)
|
||||
env:
|
||||
MOCKGPU: 1
|
||||
@@ -585,7 +673,7 @@ jobs:
|
||||
backend: [metal, llvm, cpu]
|
||||
name: MacOS (${{ matrix.backend }})
|
||||
runs-on: macos-15
|
||||
timeout-minutes: 10
|
||||
timeout-minutes: 20
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
@@ -605,6 +693,9 @@ jobs:
|
||||
run: python3 -m pytest -n=auto test/ --ignore=test/models --ignore=test/unit --durations=20
|
||||
- name: Run process replay tests
|
||||
uses: ./.github/actions/process-replay
|
||||
- name: Run macOS-specific unit test
|
||||
if: matrix.backend == 'cpu'
|
||||
run: python3 -m pytest test/unit/test_disk_tensor.py::TestDiskTensor::test_copy_to_cpu_not_truncated
|
||||
|
||||
# ****** Windows Tests ******
|
||||
|
||||
|
||||
+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
|
||||
|
||||
+157
-4
@@ -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
|
||||
|
||||
@@ -293,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 \
|
||||
@@ -311,18 +347,65 @@ 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 \
|
||||
@@ -335,31 +418,100 @@ generate_am() {
|
||||
-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 -l /usr/local/lib/libwebgpu_dawn.so extra/webgpu/webgpu.h -o $BASE/webgpu.py
|
||||
clang2py extra/webgpu/webgpu.h -o $BASE/webgpu.py
|
||||
fixup $BASE/webgpu.py
|
||||
sed -i 's/import ctypes/import ctypes, ctypes.util/g' $BASE/webgpu.py
|
||||
sed -i "s|ctypes.CDLL('/usr/local/lib/libwebgpu_dawn.so')|ctypes.CDLL(ctypes.util.find_library('webgpu_dawn'))|g" $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"
|
||||
}
|
||||
|
||||
@@ -373,6 +525,7 @@ 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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -13,3 +13,54 @@ tinygrad supports various runtimes, enabling your code to scale across a wide ra
|
||||
| [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
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
::: tinygrad.Tensor.isclose
|
||||
::: tinygrad.Tensor.mean
|
||||
::: tinygrad.Tensor.var
|
||||
::: tinygrad.Tensor.var_mean
|
||||
::: tinygrad.Tensor.std
|
||||
::: tinygrad.Tensor.std_mean
|
||||
::: tinygrad.Tensor.softmax
|
||||
@@ -22,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
|
||||
@@ -34,6 +36,9 @@
|
||||
::: 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}")
|
||||
|
||||
@@ -8,7 +8,7 @@ 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
|
||||
|
||||
|
||||
+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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
@@ -230,3 +231,67 @@ def get_fake_data_bert(BS:int):
|
||||
"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
|
||||
|
||||
@@ -53,7 +53,7 @@ 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):
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -575,7 +575,8 @@ def train_rnnt():
|
||||
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, GPUS):
|
||||
for t in [input_ids, segment_ids, attention_mask, masked_positions, masked_lm_ids, masked_lm_weights, next_sentence_labels]:
|
||||
t.shard_(GPUS, axis=0)
|
||||
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)
|
||||
@@ -583,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()
|
||||
@@ -591,17 +592,23 @@ 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, GPUS):
|
||||
for t in [input_ids, segment_ids, attention_mask, masked_positions, masked_lm_ids, masked_lm_weights, next_sentence_labels]:
|
||||
t.shard_(GPUS, axis=0)
|
||||
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
|
||||
@@ -651,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.00011 * 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
|
||||
@@ -662,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)
|
||||
@@ -696,8 +703,9 @@ def train_bert():
|
||||
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}')
|
||||
@@ -769,54 +777,56 @@ def train_bert():
|
||||
MLLOGGER.start(key=mllog_constants.EPOCH_START, value=i*BS, metadata={"epoch_num": i*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"], GPUS)
|
||||
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:
|
||||
next_data = next(train_it)
|
||||
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) 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", 0) or INITMLPERF: train_step_bert.reset()
|
||||
else: train_step_bert.captured.free_intermediates()
|
||||
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 = []
|
||||
@@ -850,7 +860,7 @@ def train_bert():
|
||||
return
|
||||
|
||||
if getenv("RESET_STEP", 0): eval_step_bert.reset()
|
||||
else: eval_step_bert.captured.free_intermediates()
|
||||
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
-2
@@ -2,10 +2,11 @@
|
||||
|
||||
export PYTHONPATH="."
|
||||
export MODEL="bert"
|
||||
export DEFAULT_FLOAT="HALF" GPUS=6 BS=66 EVAL_BS=66
|
||||
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"
|
||||
|
||||
export BENCHMARK=10 DEBUG=2
|
||||
|
||||
+2
-2
@@ -2,9 +2,9 @@
|
||||
|
||||
export PYTHONPATH="."
|
||||
export MODEL="bert"
|
||||
export DEFAULT_FLOAT="HALF" GPUS=6 BS=66 EVAL_BS=66
|
||||
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"
|
||||
|
||||
|
||||
+3
-3
@@ -3,9 +3,9 @@
|
||||
export PYTHONPATH="."
|
||||
export MODEL="bert"
|
||||
export SUBMISSION_PLATFORM="tinybox_green"
|
||||
export DEFAULT_FLOAT="HALF" GPUS=6 BS=66 EVAL_BS=66
|
||||
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"
|
||||
|
||||
@@ -17,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
-2
@@ -2,12 +2,14 @@
|
||||
|
||||
export PYTHONPATH="."
|
||||
export MODEL="bert"
|
||||
export DEFAULT_FLOAT="HALF" GPUS=6 BS=66 EVAL_BS=66
|
||||
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"
|
||||
|
||||
export RESET_STEP=1
|
||||
export BENCHMARK=10 DEBUG=2
|
||||
|
||||
python3 examples/mlperf/model_train.py
|
||||
|
||||
+2
-2
@@ -2,9 +2,9 @@
|
||||
|
||||
export PYTHONPATH="."
|
||||
export MODEL="bert"
|
||||
export DEFAULT_FLOAT="HALF" GPUS=6 BS=66 EVAL_BS=66
|
||||
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"
|
||||
|
||||
|
||||
+7
-3
@@ -3,9 +3,9 @@
|
||||
export PYTHONPATH="."
|
||||
export MODEL="bert"
|
||||
export SUBMISSION_PLATFORM="tinybox_red"
|
||||
export DEFAULT_FLOAT="HALF" GPUS=6 BS=66 EVAL_BS=66
|
||||
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"
|
||||
|
||||
@@ -17,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,10 +92,11 @@ 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, ort=False):
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -58,7 +58,7 @@ 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.QUInt8, weight_type=QuantType.QInt8,
|
||||
activation_type=QuantType.QUInt8, weight_type=QuantType.QUInt8,
|
||||
extra_options={"ActivationSymmetric": False})
|
||||
|
||||
run_onnx_jit, input_specs = load_onnx_model(fetch(fn))
|
||||
@@ -70,9 +70,12 @@ if __name__ == "__main__":
|
||||
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>
|
||||
@@ -102,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) {
|
||||
|
||||
+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
|
||||
|
||||
|
||||
+66
-12
@@ -5,12 +5,17 @@ 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")
|
||||
@@ -23,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)
|
||||
@@ -65,12 +73,14 @@ 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()
|
||||
|
||||
@@ -80,6 +90,7 @@ class SMICtx:
|
||||
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()
|
||||
@@ -126,7 +137,16 @@ class SMICtx:
|
||||
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 = []
|
||||
@@ -136,22 +156,34 @@ class SMICtx:
|
||||
[f"PCI State: {dev.pci_state}"] + [" "*107])
|
||||
continue
|
||||
|
||||
device_line = [f"{bold(dev.pcibus)}: {self.lspci[dev.pcibus[5:]]}"] + [""]
|
||||
activity_line = [f"GFX Activity {draw_bar(metrics.SmuMetrics.AverageGfxActivity / 100, 50)}"] \
|
||||
+ [f"MEM Activity {draw_bar(metrics.SmuMetrics.AverageUclkActivity / 100, 50)}"] + [""]
|
||||
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",
|
||||
@@ -166,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
@@ -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
|
||||
@@ -0,0 +1,141 @@
|
||||
/*
|
||||
* 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_PPSMC_H__
|
||||
#define __SMU_V14_0_0_PPSMC_H__
|
||||
|
||||
/*! @mainpage PMFW-PPS (PPLib) Message Interface
|
||||
This documentation contains the subsections:\n\n
|
||||
@ref ResponseCodes\n
|
||||
@ref definitions\n
|
||||
@ref enums\n
|
||||
*/
|
||||
|
||||
/** @def PPS_PMFW_IF_VER
|
||||
* PPS (PPLib) to PMFW IF version 1.0
|
||||
*/
|
||||
#define PPS_PMFW_IF_VER "1.0" ///< Major.Minor
|
||||
|
||||
/** @defgroup ResponseCodes PMFW Response Codes
|
||||
* @{
|
||||
*/
|
||||
// SMU Response Codes:
|
||||
#define PPSMC_Result_OK 0x1 ///< Message Response OK
|
||||
#define PPSMC_Result_Failed 0xFF ///< Message Response Failed
|
||||
#define PPSMC_Result_UnknownCmd 0xFE ///< Message Response Unknown Command
|
||||
#define PPSMC_Result_CmdRejectedPrereq 0xFD ///< Message Response Command Failed Prerequisite
|
||||
#define PPSMC_Result_CmdRejectedBusy 0xFC ///< Message Response Command Rejected due to PMFW is busy. Sender should retry sending this message
|
||||
/** @}*/
|
||||
|
||||
/** @defgroup definitions Message definitions
|
||||
* @{
|
||||
*/
|
||||
// Message Definitions:
|
||||
#define PPSMC_MSG_TestMessage 0x01 ///< To check if PMFW is alive and responding. Requirement specified by PMFW team
|
||||
#define PPSMC_MSG_GetPmfwVersion 0x02 ///< Get PMFW version
|
||||
#define PPSMC_MSG_GetDriverIfVersion 0x03 ///< Get PMFW_DRIVER_IF version
|
||||
#define PPSMC_MSG_PowerDownVcn1 0x04 ///< Power down VCN1
|
||||
#define PPSMC_MSG_PowerUpVcn1 0x05 ///< Power up VCN1; VCN1 is power gated by default
|
||||
#define PPSMC_MSG_PowerDownVcn0 0x06 ///< Power down VCN0
|
||||
#define PPSMC_MSG_PowerUpVcn0 0x07 ///< Power up VCN0; VCN0 is power gated by default
|
||||
#define PPSMC_MSG_SetHardMinVcn0 0x08 ///< For wireless display
|
||||
#define PPSMC_MSG_SetSoftMinGfxclk 0x09 ///< Set SoftMin for GFXCLK, argument is frequency in MHz
|
||||
#define PPSMC_MSG_SetHardMinVcn1 0x0A ///< For wireless display
|
||||
#define PPSMC_MSG_SetSoftMinVcn1 0x0B ///< Set soft min for VCN1 clocks (VCLK1 and DCLK1)
|
||||
#define PPSMC_MSG_PrepareMp1ForUnload 0x0C ///< Prepare PMFW for GFX driver unload
|
||||
#define PPSMC_MSG_SetDriverDramAddrHigh 0x0D ///< Set high 32 bits of DRAM address for Driver table transfer
|
||||
#define PPSMC_MSG_SetDriverDramAddrLow 0x0E ///< Set low 32 bits of DRAM address for Driver table transfer
|
||||
#define PPSMC_MSG_TransferTableSmu2Dram 0x0F ///< Transfer driver interface table from PMFW SRAM to DRAM
|
||||
#define PPSMC_MSG_TransferTableDram2Smu 0x10 ///< Transfer driver interface table from DRAM to PMFW SRAM
|
||||
#define PPSMC_MSG_GfxDeviceDriverReset 0x11 ///< Request GFX mode 2 reset
|
||||
#define PPSMC_MSG_GetEnabledSmuFeatures 0x12 ///< Get enabled features in PMFW
|
||||
#define PPSMC_MSG_SetHardMinSocclkByFreq 0x13 ///< Set hard min for SOC CLK
|
||||
#define PPSMC_MSG_SetSoftMinFclk 0x14 ///< Set hard min for FCLK
|
||||
#define PPSMC_MSG_SetSoftMinVcn0 0x15 ///< Set soft min for VCN0 clocks (VCLK0 and DCLK0)
|
||||
#define PPSMC_MSG_EnableGfxImu 0x16 ///< Enable GFX IMU
|
||||
#define PPSMC_MSG_spare_0x17 0x17 ///< Get GFX clock frequency
|
||||
#define PPSMC_MSG_spare_0x18 0x18 ///< Get FCLK frequency
|
||||
#define PPSMC_MSG_AllowGfxOff 0x19 ///< Inform PMFW of allowing GFXOFF entry
|
||||
#define PPSMC_MSG_DisallowGfxOff 0x1A ///< Inform PMFW of disallowing GFXOFF entry
|
||||
#define PPSMC_MSG_SetSoftMaxGfxClk 0x1B ///< Set soft max for GFX CLK
|
||||
#define PPSMC_MSG_SetHardMinGfxClk 0x1C ///< Set hard min for GFX CLK
|
||||
#define PPSMC_MSG_SetSoftMaxSocclkByFreq 0x1D ///< Set soft max for SOC CLK
|
||||
#define PPSMC_MSG_SetSoftMaxFclkByFreq 0x1E ///< Set soft max for FCLK
|
||||
#define PPSMC_MSG_SetSoftMaxVcn0 0x1F ///< Set soft max for VCN0 clocks (VCLK0 and DCLK0)
|
||||
#define PPSMC_MSG_spare_0x20 0x20 ///< Set power limit percentage
|
||||
#define PPSMC_MSG_PowerDownJpeg0 0x21 ///< Power down Jpeg of VCN0
|
||||
#define PPSMC_MSG_PowerUpJpeg0 0x22 ///< Power up Jpeg of VCN0; VCN0 is power gated by default
|
||||
#define PPSMC_MSG_SetHardMinFclkByFreq 0x23 ///< Set hard min for FCLK
|
||||
#define PPSMC_MSG_SetSoftMinSocclkByFreq 0x24 ///< Set soft min for SOC CLK
|
||||
#define PPSMC_MSG_AllowZstates 0x25 ///< Inform PMFM of allowing Zstate entry, i.e. no Miracast activity
|
||||
#define PPSMC_MSG_PowerDownJpeg1 0x26 ///< Power down Jpeg of VCN1
|
||||
#define PPSMC_MSG_PowerUpJpeg1 0x27 ///< Power up Jpeg of VCN1; VCN1 is power gated by default
|
||||
#define PPSMC_MSG_SetSoftMaxVcn1 0x28 ///< Set soft max for VCN1 clocks (VCLK1 and DCLK1)
|
||||
#define PPSMC_MSG_PowerDownIspByTile 0x29 ///< ISP is power gated by default
|
||||
#define PPSMC_MSG_PowerUpIspByTile 0x2A ///< This message is used to power up ISP tiles and enable the ISP DPM
|
||||
#define PPSMC_MSG_SetHardMinIspiclkByFreq 0x2B ///< Set HardMin by frequency for ISPICLK
|
||||
#define PPSMC_MSG_SetHardMinIspxclkByFreq 0x2C ///< Set HardMin by frequency for ISPXCLK
|
||||
#define PPSMC_MSG_PowerDownUmsch 0x2D ///< Power down VCN0.UMSCH (aka VSCH) scheduler
|
||||
#define PPSMC_MSG_PowerUpUmsch 0x2E ///< Power up VCN0.UMSCH (aka VSCH) scheduler
|
||||
#define PPSMC_Message_IspStutterOn_MmhubPgDis 0x2F ///< ISP StutterOn mmHub PgDis
|
||||
#define PPSMC_Message_IspStutterOff_MmhubPgEn 0x30 ///< ISP StufferOff mmHub PgEn
|
||||
#define PPSMC_MSG_PowerUpVpe 0x31 ///< Power up VPE
|
||||
#define PPSMC_MSG_PowerDownVpe 0x32 ///< Power down VPE
|
||||
#define PPSMC_MSG_GetVpeDpmTable 0x33 ///< Get VPE DPM table
|
||||
#define PPSMC_MSG_EnableLSdma 0x34 ///< Enable LSDMA
|
||||
#define PPSMC_MSG_DisableLSdma 0x35 ///< Disable LSDMA
|
||||
#define PPSMC_MSG_SetSoftMaxVpe 0x36 ///<
|
||||
#define PPSMC_MSG_SetSoftMinVpe 0x37 ///<
|
||||
#define PPSMC_MSG_MALLPowerController 0x38 ///< Set MALL control
|
||||
#define PPSMC_MSG_MALLPowerState 0x39 ///< Enter/Exit MALL PG
|
||||
#define PPSMC_Message_Count 0x3A ///< Total number of PPSMC messages
|
||||
/** @}*/
|
||||
|
||||
/**
|
||||
* @defgroup enums Enum Definitions
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** @enum Mode_Reset_e
|
||||
* Mode reset type, argument for PPSMC_MSG_GfxDeviceDriverReset
|
||||
*/
|
||||
//argument for PPSMC_MSG_GfxDeviceDriverReset
|
||||
typedef enum {
|
||||
MODE1_RESET = 1, ///< Mode reset type 1
|
||||
MODE2_RESET = 2 ///< Mode reset type 2
|
||||
} Mode_Reset_e;
|
||||
|
||||
/** @}*/
|
||||
|
||||
/** @enum ZStates_e
|
||||
* Zstate types, argument for PPSMC_MSG_AllowZstates
|
||||
*/
|
||||
//Argument for PPSMC_MSG_AllowZstates
|
||||
typedef enum {
|
||||
DISALLOW_ZSTATES = 0, ///< Disallow Zstates
|
||||
ALLOW_ZSTATES_Z8 = 8, ///< Allows Z8 only
|
||||
ALLOW_ZSTATES_Z9 = 9, ///< Allows Z9 and Z8
|
||||
} ZStates_e;
|
||||
|
||||
/** @}*/
|
||||
#endif
|
||||
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* 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_2_PPSMC_H
|
||||
#define SMU_V14_0_2_PPSMC_H
|
||||
|
||||
#define PPSMC_VERSION 0x1
|
||||
|
||||
// SMU Response Codes:
|
||||
#define PPSMC_Result_OK 0x1
|
||||
#define PPSMC_Result_Failed 0xFF
|
||||
#define PPSMC_Result_UnknownCmd 0xFE
|
||||
#define PPSMC_Result_CmdRejectedPrereq 0xFD
|
||||
#define PPSMC_Result_CmdRejectedBusy 0xFC
|
||||
|
||||
// Message Definitions:
|
||||
// BASIC
|
||||
#define PPSMC_MSG_TestMessage 0x1
|
||||
#define PPSMC_MSG_GetSmuVersion 0x2
|
||||
#define PPSMC_MSG_GetDriverIfVersion 0x3
|
||||
#define PPSMC_MSG_SetAllowedFeaturesMaskLow 0x4
|
||||
#define PPSMC_MSG_SetAllowedFeaturesMaskHigh 0x5
|
||||
#define PPSMC_MSG_EnableAllSmuFeatures 0x6
|
||||
#define PPSMC_MSG_DisableAllSmuFeatures 0x7
|
||||
#define PPSMC_MSG_EnableSmuFeaturesLow 0x8
|
||||
#define PPSMC_MSG_EnableSmuFeaturesHigh 0x9
|
||||
#define PPSMC_MSG_DisableSmuFeaturesLow 0xA
|
||||
#define PPSMC_MSG_DisableSmuFeaturesHigh 0xB
|
||||
#define PPSMC_MSG_GetRunningSmuFeaturesLow 0xC
|
||||
#define PPSMC_MSG_GetRunningSmuFeaturesHigh 0xD
|
||||
#define PPSMC_MSG_SetDriverDramAddrHigh 0xE
|
||||
#define PPSMC_MSG_SetDriverDramAddrLow 0xF
|
||||
#define PPSMC_MSG_SetToolsDramAddrHigh 0x10
|
||||
#define PPSMC_MSG_SetToolsDramAddrLow 0x11
|
||||
#define PPSMC_MSG_TransferTableSmu2Dram 0x12
|
||||
#define PPSMC_MSG_TransferTableDram2Smu 0x13
|
||||
#define PPSMC_MSG_UseDefaultPPTable 0x14
|
||||
|
||||
//BACO/BAMACO/BOMACO
|
||||
#define PPSMC_MSG_EnterBaco 0x15
|
||||
#define PPSMC_MSG_ExitBaco 0x16
|
||||
#define PPSMC_MSG_ArmD3 0x17
|
||||
#define PPSMC_MSG_BacoAudioD3PME 0x18
|
||||
|
||||
//DPM
|
||||
#define PPSMC_MSG_SetSoftMinByFreq 0x19
|
||||
#define PPSMC_MSG_SetSoftMaxByFreq 0x1A
|
||||
#define PPSMC_MSG_SetHardMinByFreq 0x1B
|
||||
#define PPSMC_MSG_SetHardMaxByFreq 0x1C
|
||||
#define PPSMC_MSG_GetMinDpmFreq 0x1D
|
||||
#define PPSMC_MSG_GetMaxDpmFreq 0x1E
|
||||
#define PPSMC_MSG_GetDpmFreqByIndex 0x1F
|
||||
#define PPSMC_MSG_OverridePcieParameters 0x20
|
||||
|
||||
//DramLog Set DramAddr
|
||||
#define PPSMC_MSG_DramLogSetDramAddrHigh 0x21
|
||||
#define PPSMC_MSG_DramLogSetDramAddrLow 0x22
|
||||
#define PPSMC_MSG_DramLogSetDramSize 0x23
|
||||
#define PPSMC_MSG_SetWorkloadMask 0x24
|
||||
|
||||
#define PPSMC_MSG_GetVoltageByDpm 0x25 // Can be removed
|
||||
#define PPSMC_MSG_SetVideoFps 0x26 // Can be removed
|
||||
#define PPSMC_MSG_GetDcModeMaxDpmFreq 0x27
|
||||
|
||||
//Power Gating
|
||||
#define PPSMC_MSG_AllowGfxOff 0x28
|
||||
#define PPSMC_MSG_DisallowGfxOff 0x29
|
||||
#define PPSMC_MSG_PowerUpVcn 0x2A
|
||||
#define PPSMC_MSG_PowerDownVcn 0x2B
|
||||
#define PPSMC_MSG_PowerUpJpeg 0x2C
|
||||
#define PPSMC_MSG_PowerDownJpeg 0x2D
|
||||
|
||||
//Resets
|
||||
#define PPSMC_MSG_PrepareMp1ForUnload 0x2E
|
||||
|
||||
//Set SystemVirtual DramAddrHigh
|
||||
#define PPSMC_MSG_SetSystemVirtualDramAddrHigh 0x30
|
||||
#define PPSMC_MSG_SetSystemVirtualDramAddrLow 0x31
|
||||
//ACDC Power Source
|
||||
#define PPSMC_MSG_SetPptLimit 0x32
|
||||
#define PPSMC_MSG_GetPptLimit 0x33
|
||||
#define PPSMC_MSG_ReenableAcDcInterrupt 0x34
|
||||
#define PPSMC_MSG_NotifyPowerSource 0x35
|
||||
|
||||
//BTC
|
||||
#define PPSMC_MSG_RunDcBtc 0x36
|
||||
|
||||
// 0x37
|
||||
|
||||
//Others
|
||||
#define PPSMC_MSG_SetTemperatureInputSelect 0x38 // Can be removed
|
||||
#define PPSMC_MSG_SetFwDstatesMask 0x39
|
||||
#define PPSMC_MSG_SetThrottlerMask 0x3A
|
||||
|
||||
#define PPSMC_MSG_SetExternalClientDfCstateAllow 0x3B
|
||||
|
||||
#define PPSMC_MSG_SetMGpuFanBoostLimitRpm 0x3C
|
||||
|
||||
//STB to dram log
|
||||
#define PPSMC_MSG_DumpSTBtoDram 0x3D
|
||||
#define PPSMC_MSG_STBtoDramLogSetDramAddress 0x3E
|
||||
#define PPSMC_MSG_DummyUndefined 0x3F
|
||||
#define PPSMC_MSG_STBtoDramLogSetDramSize 0x40
|
||||
#define PPSMC_MSG_SetOBMTraceBufferLogging 0x41
|
||||
|
||||
#define PPSMC_MSG_UseProfilingMode 0x42
|
||||
#define PPSMC_MSG_AllowGfxDcs 0x43
|
||||
#define PPSMC_MSG_DisallowGfxDcs 0x44
|
||||
#define PPSMC_MSG_EnableAudioStutterWA 0x45
|
||||
#define PPSMC_MSG_PowerUpUmsch 0x46
|
||||
#define PPSMC_MSG_PowerDownUmsch 0x47
|
||||
#define PPSMC_MSG_SetDcsArch 0x48
|
||||
#define PPSMC_MSG_TriggerVFFLR 0x49
|
||||
#define PPSMC_MSG_SetNumBadMemoryPagesRetired 0x4A
|
||||
#define PPSMC_MSG_SetBadMemoryPagesRetiredFlagsPerChannel 0x4B
|
||||
#define PPSMC_MSG_SetPriorityDeltaGain 0x4C
|
||||
#define PPSMC_MSG_AllowIHHostInterrupt 0x4D
|
||||
#define PPSMC_MSG_EnableShadowDpm 0x4E
|
||||
#define PPSMC_MSG_Mode3Reset 0x4F
|
||||
#define PPSMC_MSG_SetDriverDramAddr 0x50
|
||||
#define PPSMC_MSG_SetToolsDramAddr 0x51
|
||||
#define PPSMC_MSG_TransferTableSmu2DramWithAddr 0x52
|
||||
#define PPSMC_MSG_TransferTableDram2SmuWithAddr 0x53
|
||||
#define PPSMC_MSG_GetAllRunningSmuFeatures 0x54
|
||||
#define PPSMC_MSG_GetSvi3Voltage 0x55
|
||||
#define PPSMC_MSG_UpdatePolicy 0x56
|
||||
#define PPSMC_MSG_ExtPwrConnSupport 0x57
|
||||
#define PPSMC_MSG_PreloadSwPstateForUclkOverDrive 0x58
|
||||
#define PPSMC_Message_Count 0x59
|
||||
#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
@@ -0,0 +1,7 @@
|
||||
// From MQD struct
|
||||
#define regCOMPUTE_CURRENT_LOGIC_XCC_ID 0x0e25
|
||||
#define regCOMPUTE_CURRENT_LOGIC_XCC_ID_BASE_IDX 0
|
||||
// Mask is probably not full register, doesn't matter though
|
||||
#define COMPUTE_CURRENT_LOGIC_XCC_ID__CURRENT_LOGIC_XCC_ID__SHIFT 0x0
|
||||
#define COMPUTE_CURRENT_LOGIC_XCC_ID__CURRENT_LOGIC_XCC_ID_MASK 0xFFFFFFFFL
|
||||
|
||||
@@ -4,6 +4,7 @@ import numpy as np
|
||||
from PIL import Image
|
||||
from pathlib import Path
|
||||
import boto3, botocore
|
||||
from tinygrad import Tensor, dtypes
|
||||
from tinygrad.helpers import fetch, tqdm, getenv
|
||||
import pandas as pd
|
||||
import concurrent.futures
|
||||
@@ -139,11 +140,7 @@ def fetch_openimages(output_fn:str, base_dir:Path, subset:str):
|
||||
|
||||
def image_load(base_dir, subset, fn):
|
||||
img_folder = base_dir / f"{subset}/data"
|
||||
img = Image.open(img_folder / fn).convert('RGB')
|
||||
import torchvision.transforms.functional as F
|
||||
ret = F.resize(img, size=(800, 800))
|
||||
ret = np.array(ret)
|
||||
return ret, img.size[::-1]
|
||||
return Image.open(img_folder / fn).convert('RGB')
|
||||
|
||||
def prepare_target(annotations, img_id, img_size):
|
||||
boxes = [annot["bbox"] for annot in annotations]
|
||||
@@ -164,7 +161,7 @@ def iterate(coco, base_dir, bs=8):
|
||||
X, targets = [], []
|
||||
for img_id in image_ids[i:i+bs]:
|
||||
img_dict = coco.loadImgs(img_id)[0]
|
||||
x, original_size = image_load(base_dir, img_dict['subset'], img_dict["file_name"])
|
||||
x, original_size = resize(image_load(base_dir, img_dict['subset'], img_dict["file_name"]))
|
||||
X.append(x)
|
||||
annotations = coco.loadAnns(coco.getAnnIds(img_id))
|
||||
targets.append(prepare_target(annotations, img_id, original_size))
|
||||
@@ -179,6 +176,34 @@ def download_dataset(base_dir:Path, subset:str) -> Path:
|
||||
|
||||
return ann_file
|
||||
|
||||
def random_horizontal_flip(img, tgt, prob=0.5):
|
||||
import torch
|
||||
import torchvision.transforms.functional as F
|
||||
if torch.rand(1) < prob:
|
||||
w = img.size[0]
|
||||
img = F.hflip(img)
|
||||
tgt["boxes"][:, [0, 2]] = w - tgt["boxes"][:, [2, 0]]
|
||||
return img, tgt
|
||||
|
||||
def resize(img:Image, tgt:dict[str, np.ndarray|tuple]|None=None, size:tuple[int, int]=(800, 800)) -> tuple[np.ndarray, np.ndarray, tuple]|tuple[np.ndarray, tuple]:
|
||||
import torchvision.transforms.functional as F
|
||||
img_size = img.size[::-1]
|
||||
img = F.resize(img, size=size)
|
||||
img = np.array(img)
|
||||
|
||||
if tgt is not None:
|
||||
ratios = [s / s_orig for s, s_orig in zip(size, img_size)]
|
||||
ratio_h, ratio_w = ratios
|
||||
x_min, y_min, x_max, y_max = [tgt["boxes"][:, i] for i in range(tgt["boxes"].shape[-1])]
|
||||
x_min = x_min * ratio_w
|
||||
x_max = x_max * ratio_w
|
||||
y_min = y_min * ratio_h
|
||||
y_max = y_max * ratio_h
|
||||
|
||||
tgt["boxes"] = np.stack([x_min, y_min, x_max, y_max], axis=1)
|
||||
return img, tgt, img_size
|
||||
|
||||
return img, img_size
|
||||
|
||||
if __name__ == "__main__":
|
||||
download_dataset(base_dir:=getenv("BASE_DIR", BASEDIR), "train")
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
import os
|
||||
print("from import")
|
||||
del os.environ["LD_PRELOAD"]
|
||||
import ctypes, ctypes.util
|
||||
from extra.dsp.run import install_hook, ioctl, libc, get_struct, qcom_dsp, format_struct, to_mv, hexdump
|
||||
|
||||
@ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.c_void_p, ctypes.c_size_t, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_long)
|
||||
def _mmap(addr, length, prot, flags, fd, offset):
|
||||
mmap_type = ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.c_void_p, ctypes.c_size_t, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_long)
|
||||
orig_mmap = mmap_type(ctypes.addressof(orig_mmap_mv))
|
||||
ret = orig_mmap(addr, length, prot, flags, fd, offset)
|
||||
# ll = os.readlink(f"/proc/self/fd/{fd}") if fd >= 0 else ""
|
||||
print(f"mmap {addr=}, {length=}, {prot=}, {flags=}, {fd=}, {offset=} {ret=}")
|
||||
return ret
|
||||
|
||||
#install_hook(libc.ioctl, ioctl)
|
||||
#orig_mmap_mv = install_hook(libc.mmap, _mmap)
|
||||
print("import done")
|
||||
import mmap
|
||||
|
||||
alloc_sizes = {}
|
||||
mmaped = {}
|
||||
|
||||
def handle_ioctl(fd, request, argp, ret):
|
||||
fn = os.readlink(f"/proc/self/fd/{fd}")
|
||||
idir, size, itype, nr = (request>>30), (request>>16)&0x3FFF, (request>>8)&0xFF, request&0xFF
|
||||
|
||||
if fn == "/dev/ion":
|
||||
if nr == 0:
|
||||
st = get_struct(argp, qcom_dsp.struct_ion_allocation_data)
|
||||
print(ret, "ION_IOC_ALLOC", format_struct(st))
|
||||
alloc_sizes[st.handle] = st.len
|
||||
elif nr == 1:
|
||||
st = get_struct(argp, qcom_dsp.struct_ion_handle_data)
|
||||
print(ret, "ION_IOC_FREE", format_struct(st))
|
||||
if st.handle in alloc_sizes: del alloc_sizes[st.handle]
|
||||
if st.handle in mmaped: del mmaped[st.handle]
|
||||
elif nr == 2:
|
||||
st = get_struct(argp, qcom_dsp.struct_ion_fd_data)
|
||||
print(ret, "ION_IOC_MAP", format_struct(st))
|
||||
mmaped[st.handle] = mmap.mmap(st.fd, alloc_sizes[st.handle])
|
||||
elif fn == "/dev/adsprpc-smd":
|
||||
assert chr(itype) == 'R'
|
||||
if nr == 8:
|
||||
st = ctypes.c_uint32.from_address(argp)
|
||||
print(ret, "FASTRPC_IOCTL_GETINFO", st.value)
|
||||
elif nr == 2:
|
||||
st = get_struct(argp, qcom_dsp.struct_fastrpc_ioctl_mmap)
|
||||
print(ret, "FASTRPC_IOCTL_MMAP", format_struct(st))
|
||||
elif nr == 1:
|
||||
# https://research.checkpoint.com/2021/pwn2own-qualcomm-dsp/
|
||||
st = get_struct(argp, qcom_dsp.struct_fastrpc_ioctl_invoke)
|
||||
print(ret, "FASTRPC_IOCTL_INVOKE", format_struct(st))
|
||||
# 0xFF000000 = Method index and attribute (the highest byte)
|
||||
# 0x00FF0000 = Number of input arguments
|
||||
# 0x0000FF00 = Number of output arguments
|
||||
# 0x000000F0 = Number of input handles
|
||||
# 0x0000000F = Number of output handles
|
||||
|
||||
method = (st.sc>>24) & 0xFF
|
||||
in_args = (st.sc>>16) & 0xFF
|
||||
out_args = (st.sc>>8) & 0xFF
|
||||
in_h = (st.sc>>4) & 0xF
|
||||
out_h = (st.sc>>0) & 0xF
|
||||
print(f"\tm:{method} ia:{in_args} oa:{out_args} ih:{in_h} oh:{out_h}")
|
||||
"""
|
||||
if in_args or out_args:
|
||||
for arg in range(in_args+out_args):
|
||||
print(arg, format_struct(st.pra[arg]))
|
||||
if st.pra[arg].buf.pv is not None:
|
||||
ww = to_mv(st.pra[arg].buf.pv, st.pra[arg].buf.len)
|
||||
hexdump(to_mv(st.pra[arg].buf.pv, st.pra[arg].buf.len)[:0x40])
|
||||
"""
|
||||
elif nr == 6:
|
||||
print(ret, "FASTRPC_IOCTL_INIT", format_struct(ini:=get_struct(argp, qcom_dsp.struct_fastrpc_ioctl_init)))
|
||||
print(os.readlink(f"/proc/self/fd/{ini.filefd}"))
|
||||
# print(bytearray(to_mv(ini.file, ini.filelen)))
|
||||
elif nr == 7:
|
||||
print(ret, "FASTRPC_IOCTL_INVOKE_ATTRS", format_struct(ini:=get_struct(argp, qcom_dsp.struct_fastrpc_ioctl_invoke_attrs)))
|
||||
elif nr == 12: print(ret, "FASTRPC_IOCTL_CONTROL", format_struct(get_struct(argp, qcom_dsp.struct_fastrpc_ioctl_control)))
|
||||
elif nr == 4:
|
||||
st_fd = get_struct(argp, qcom_dsp.struct_fastrpc_ioctl_invoke_fd)
|
||||
st = st_fd.inv
|
||||
print(ret, "FASTRPC_IOCTL_INVOKE_FD", format_struct(st))
|
||||
|
||||
method = (st.sc>>24) & 0xFF
|
||||
in_args = (st.sc>>16) & 0xFF
|
||||
out_args = (st.sc>>8) & 0xFF
|
||||
in_h = (st.sc>>4) & 0xF
|
||||
out_h = (st.sc>>0) & 0xF
|
||||
print(f"\tm:{method} ia:{in_args} oa:{out_args} ih:{in_h} oh:{out_h}")
|
||||
|
||||
if st.sc in [0x2030200, 0x3040300]:
|
||||
for handle, mapped in mmaped.items():
|
||||
print(f" buffer {handle} {alloc_sizes[handle]:X}")
|
||||
with open(f"/tmp/buf_{st.sc:X}_{handle}_{alloc_sizes[handle]:X}", "wb") as f: f.write(mapped)
|
||||
else:
|
||||
print(f"{ret} UNPARSED {nr}")
|
||||
else:
|
||||
print("ioctl", f"{idir=} {size=} {itype=} {nr=} {fd=} {ret=}", fn)
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
__attribute__((constructor))
|
||||
void preload_init() {
|
||||
Py_Initialize();
|
||||
PyRun_SimpleString("print('hello from c'); import extra.dsp.hook");
|
||||
}
|
||||
|
||||
#define _GNU_SOURCE // Must be defined before any includes for RTLD_NEXT
|
||||
#include <stdio.h>
|
||||
#include <dlfcn.h>
|
||||
#include <Python.h> // Include Python header
|
||||
//#include <sys/ioctl.h>
|
||||
|
||||
// Define the original ioctl function pointer
|
||||
static int (*real_ioctl)(int fd, unsigned long request, void *arg) = NULL;
|
||||
|
||||
// Our custom ioctl hook
|
||||
int ioctl(int fd, unsigned long request, void *arg) {
|
||||
// Initialize the real ioctl function pointer on first call
|
||||
if (!real_ioctl) {
|
||||
real_ioctl = dlsym(RTLD_NEXT, "ioctl");
|
||||
if (!real_ioctl) {
|
||||
fprintf(stderr, "Error: Could not find real ioctl\n");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
// Log the call
|
||||
//printf("Hooked ioctl: tid=%d fd=%d, request=0x%lx, arg=%p\n", gettid(), fd, request, arg);
|
||||
|
||||
// Call a Python function from extra.dsp.hook
|
||||
PyObject *pName, *pModule, *pFunc, *pArgs, *pValue;
|
||||
PyGILState_STATE gstate;
|
||||
|
||||
// Ensure the GIL is held (required for Python calls in multi-threaded apps)
|
||||
//gstate = PyGILState_Ensure();
|
||||
|
||||
// Import the module
|
||||
pName = PyUnicode_FromString("extra.dsp.hook");
|
||||
pModule = PyImport_Import(pName);
|
||||
Py_DECREF(pName);
|
||||
|
||||
// Call the original ioctl
|
||||
int ret = real_ioctl(fd, request, arg);
|
||||
|
||||
if (pModule != NULL) {
|
||||
// Get the function (assume it’s called "handle_ioctl")
|
||||
pFunc = PyObject_GetAttrString(pModule, "handle_ioctl");
|
||||
|
||||
if (pFunc && PyCallable_Check(pFunc)) {
|
||||
// Create arguments tuple (fd, request, arg, ret)
|
||||
pArgs = PyTuple_Pack(4,
|
||||
PyLong_FromLong(fd),
|
||||
PyLong_FromUnsignedLong(request),
|
||||
PyLong_FromVoidPtr(arg),
|
||||
PyLong_FromLong(ret));
|
||||
pValue = PyObject_CallObject(pFunc, pArgs);
|
||||
Py_DECREF(pArgs);
|
||||
|
||||
if (pValue != NULL) {
|
||||
Py_DECREF(pValue);
|
||||
} else {
|
||||
PyErr_Print(); // Print Python error if call fails
|
||||
}
|
||||
Py_DECREF(pFunc);
|
||||
} else {
|
||||
if (PyErr_Occurred()) PyErr_Print();
|
||||
fprintf(stderr, "Cannot find function 'handle_ioctl'\n");
|
||||
}
|
||||
Py_DECREF(pModule);
|
||||
} else {
|
||||
PyErr_Print();
|
||||
fprintf(stderr, "Failed to load 'extra.dsp.hook'\n");
|
||||
}
|
||||
|
||||
// Release the GIL
|
||||
//PyGILState_Release(gstate);
|
||||
return ret;
|
||||
}
|
||||
|
||||
+1
-1
@@ -112,7 +112,7 @@ def install_hook(c_function, python_function):
|
||||
return orig_func
|
||||
|
||||
libc = ctypes.CDLL(ctypes.util.find_library("libc"))
|
||||
install_hook(libc.ioctl, ioctl)
|
||||
#install_hook(libc.ioctl, ioctl)
|
||||
adsp = ctypes.CDLL(ctypes.util.find_library("adsprpc"))
|
||||
|
||||
def send_rpc_invoke(filename):
|
||||
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash -e
|
||||
echo "building"
|
||||
gcc -shared -fPIC -o preload_python.so preload.c -L/usr/local/pyenv/versions/3.11.4/lib -lpython3.11 -I/usr/local/pyenv/versions/3.11.4/include/python3.11
|
||||
echo "compiled"
|
||||
export LD_LIBRARY_PATH="/usr/local/pyenv/versions/3.11.4/lib;/data/snpe"
|
||||
export LD_PRELOAD="$PWD/preload_python.so"
|
||||
export PYTHONPATH="/data/tinygrad"
|
||||
cd /data/snpe
|
||||
#ADSP_LIBRARY_PATH="." strace -f -e ioctl ./snpe-net-run --container MobileNetV2.dlc --input_list hello --use_dsp
|
||||
ADSP_LIBRARY_PATH="." ./snpe-net-run --container MobileNetV2.dlc --input_list hello --use_dsp
|
||||
|
||||
@@ -0,0 +1,715 @@
|
||||
DLC info for: /home/batman/xx/ml_tools/snpe/snpe-1.61.0.3358/mobilenetv2-7.dlc
|
||||
Model Version: N/A
|
||||
Model Copyright:N/A
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------
|
||||
| Id | Name | Type | Inputs | Outputs | Out Dims | Runtimes | Parameters |
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------
|
||||
| 0 | input | data | input | input | 1x224x224x3 | A D G C | input_preprocessing: passthrough |
|
||||
| | | | | | | | input_type: image |
|
||||
| 1 | Conv_0 | convolutional | input | 474 | 1x112x112x32 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 2 |
|
||||
| | | | | | | | stride y: 2 |
|
||||
| | | | | | | | num filters: 32 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | param count: 896 (0.0257%) |
|
||||
| | | | | | | | MACs per inference: 10M (3.6%) |
|
||||
| 2 | Clip_1 | neuron | 474 | 317 | 1x112x112x32 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 3 | Conv_2 | convolutional | 317 | 477 | 1x112x112x32 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 32 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 32 |
|
||||
| | | | | | | | param count: 320 (0.00917%) |
|
||||
| | | | | | | | MACs per inference: 3M (1.2%) |
|
||||
| 4 | Clip_3 | neuron | 477 | 320 | 1x112x112x32 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 5 | Conv_4 | convolutional | 320 | 480 | 1x112x112x16 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 16 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 528 (0.0151%) |
|
||||
| | | | | | | | MACs per inference: 6M (2.13%) |
|
||||
| 6 | Conv_5 | convolutional | 480 | 483 | 1x112x112x96 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 96 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 1k (0.0468%) |
|
||||
| | | | | | | | MACs per inference: 19M (6.4%) |
|
||||
| 7 | Clip_6 | neuron | 483 | 325 | 1x112x112x96 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 8 | Conv_7 | convolutional | 325 | 486 | 1x56x56x96 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 2 |
|
||||
| | | | | | | | stride y: 2 |
|
||||
| | | | | | | | num filters: 96 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 96 |
|
||||
| | | | | | | | param count: 960 (0.0275%) |
|
||||
| | | | | | | | MACs per inference: 2M (0.9%) |
|
||||
| 9 | Clip_8 | neuron | 486 | 328 | 1x56x56x96 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 10 | Conv_9 | convolutional | 328 | 489 | 1x56x56x24 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 24 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 2k (0.0667%) |
|
||||
| | | | | | | | MACs per inference: 7M (2.4%) |
|
||||
| 11 | Conv_10 | convolutional | 489 | 492 | 1x56x56x144 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 144 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 3k (0.103%) |
|
||||
| | | | | | | | MACs per inference: 10M (3.6%) |
|
||||
| 12 | Clip_11 | neuron | 492 | 333 | 1x56x56x144 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 13 | Conv_12 | convolutional | 333 | 495 | 1x56x56x144 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 144 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 144 |
|
||||
| | | | | | | | param count: 1k (0.0413%) |
|
||||
| | | | | | | | MACs per inference: 4M (1.35%) |
|
||||
| 14 | Clip_13 | neuron | 495 | 336 | 1x56x56x144 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 15 | Conv_14 | convolutional | 336 | 498 | 1x56x56x24 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 24 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 3k (0.0998%) |
|
||||
| | | | | | | | MACs per inference: 10M (3.6%) |
|
||||
| 16 | Add_15 | elementwise_binary_op | 489 | 339 | 1x56x56x24 | A D G C | operation: sum |
|
||||
| | | | 498 | | | | MACs per inference: 75k (0.025%) |
|
||||
| 17 | Conv_16 | convolutional | 339 | 501 | 1x56x56x144 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 144 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 3k (0.103%) |
|
||||
| | | | | | | | MACs per inference: 10M (3.6%) |
|
||||
| 18 | Clip_17 | neuron | 501 | 342 | 1x56x56x144 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 19 | Conv_18 | convolutional | 342 | 504 | 1x28x28x144 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 2 |
|
||||
| | | | | | | | stride y: 2 |
|
||||
| | | | | | | | num filters: 144 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 144 |
|
||||
| | | | | | | | param count: 1k (0.0413%) |
|
||||
| | | | | | | | MACs per inference: 1M (0.338%) |
|
||||
| 20 | Clip_19 | neuron | 504 | 345 | 1x28x28x144 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 21 | Conv_20 | convolutional | 345 | 507 | 1x28x28x32 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 32 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 4k (0.133%) |
|
||||
| | | | | | | | MACs per inference: 3M (1.2%) |
|
||||
| 22 | Conv_21 | convolutional | 507 | 510 | 1x28x28x192 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 192 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 6k (0.182%) |
|
||||
| | | | | | | | MACs per inference: 4M (1.6%) |
|
||||
| 23 | Clip_22 | neuron | 510 | 350 | 1x28x28x192 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 24 | Conv_23 | convolutional | 350 | 513 | 1x28x28x192 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 192 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 192 |
|
||||
| | | | | | | | param count: 1k (0.055%) |
|
||||
| | | | | | | | MACs per inference: 1M (0.45%) |
|
||||
| 25 | Clip_24 | neuron | 513 | 353 | 1x28x28x192 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 26 | Conv_25 | convolutional | 353 | 516 | 1x28x28x32 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 32 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 6k (0.177%) |
|
||||
| | | | | | | | MACs per inference: 4M (1.6%) |
|
||||
| 27 | Add_26 | elementwise_binary_op | 507 | 356 | 1x28x28x32 | A D G C | operation: sum |
|
||||
| | | | 516 | | | | MACs per inference: 25k (0.00833%) |
|
||||
| 28 | Conv_27 | convolutional | 356 | 519 | 1x28x28x192 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 192 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 6k (0.182%) |
|
||||
| | | | | | | | MACs per inference: 4M (1.6%) |
|
||||
| 29 | Clip_28 | neuron | 519 | 359 | 1x28x28x192 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 30 | Conv_29 | convolutional | 359 | 522 | 1x28x28x192 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 192 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 192 |
|
||||
| | | | | | | | param count: 1k (0.055%) |
|
||||
| | | | | | | | MACs per inference: 1M (0.45%) |
|
||||
| 31 | Clip_30 | neuron | 522 | 362 | 1x28x28x192 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 32 | Conv_31 | convolutional | 362 | 525 | 1x28x28x32 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 32 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 6k (0.177%) |
|
||||
| | | | | | | | MACs per inference: 4M (1.6%) |
|
||||
| 33 | Add_32 | elementwise_binary_op | 356 | 365 | 1x28x28x32 | A D G C | operation: sum |
|
||||
| | | | 525 | | | | MACs per inference: 25k (0.00833%) |
|
||||
| 34 | Conv_33 | convolutional | 365 | 528 | 1x28x28x192 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 192 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 6k (0.182%) |
|
||||
| | | | | | | | MACs per inference: 4M (1.6%) |
|
||||
| 35 | Clip_34 | neuron | 528 | 368 | 1x28x28x192 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 36 | Conv_35 | convolutional | 368 | 531 | 1x14x14x192 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 2 |
|
||||
| | | | | | | | stride y: 2 |
|
||||
| | | | | | | | num filters: 192 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 192 |
|
||||
| | | | | | | | param count: 1k (0.055%) |
|
||||
| | | | | | | | MACs per inference: 338k (0.113%) |
|
||||
| 37 | Clip_36 | neuron | 531 | 371 | 1x14x14x192 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 38 | Conv_37 | convolutional | 371 | 534 | 1x14x14x64 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 64 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 12k (0.354%) |
|
||||
| | | | | | | | MACs per inference: 2M (0.8%) |
|
||||
| 39 | Conv_38 | convolutional | 534 | 537 | 1x14x14x384 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 384 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 24k (0.716%) |
|
||||
| | | | | | | | MACs per inference: 4M (1.6%) |
|
||||
| 40 | Clip_39 | neuron | 537 | 376 | 1x14x14x384 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 41 | Conv_40 | convolutional | 376 | 540 | 1x14x14x384 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 384 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 384 |
|
||||
| | | | | | | | param count: 3k (0.11%) |
|
||||
| | | | | | | | MACs per inference: 677k (0.225%) |
|
||||
| 42 | Clip_41 | neuron | 540 | 379 | 1x14x14x384 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 43 | Conv_42 | convolutional | 379 | 543 | 1x14x14x64 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 64 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 24k (0.706%) |
|
||||
| | | | | | | | MACs per inference: 4M (1.6%) |
|
||||
| 44 | Add_43 | elementwise_binary_op | 534 | 382 | 1x14x14x64 | A D G C | operation: sum |
|
||||
| | | | 543 | | | | MACs per inference: 12k (0.00417%) |
|
||||
| 45 | Conv_44 | convolutional | 382 | 546 | 1x14x14x384 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 384 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 24k (0.716%) |
|
||||
| | | | | | | | MACs per inference: 4M (1.6%) |
|
||||
| 46 | Clip_45 | neuron | 546 | 385 | 1x14x14x384 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 47 | Conv_46 | convolutional | 385 | 549 | 1x14x14x384 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 384 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 384 |
|
||||
| | | | | | | | param count: 3k (0.11%) |
|
||||
| | | | | | | | MACs per inference: 677k (0.225%) |
|
||||
| 48 | Clip_47 | neuron | 549 | 388 | 1x14x14x384 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 49 | Conv_48 | convolutional | 388 | 552 | 1x14x14x64 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 64 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 24k (0.706%) |
|
||||
| | | | | | | | MACs per inference: 4M (1.6%) |
|
||||
| 50 | Add_49 | elementwise_binary_op | 382 | 391 | 1x14x14x64 | A D G C | operation: sum |
|
||||
| | | | 552 | | | | MACs per inference: 12k (0.00417%) |
|
||||
| 51 | Conv_50 | convolutional | 391 | 555 | 1x14x14x384 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 384 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 24k (0.716%) |
|
||||
| | | | | | | | MACs per inference: 4M (1.6%) |
|
||||
| 52 | Clip_51 | neuron | 555 | 394 | 1x14x14x384 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 53 | Conv_52 | convolutional | 394 | 558 | 1x14x14x384 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 384 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 384 |
|
||||
| | | | | | | | param count: 3k (0.11%) |
|
||||
| | | | | | | | MACs per inference: 677k (0.225%) |
|
||||
| 54 | Clip_53 | neuron | 558 | 397 | 1x14x14x384 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 55 | Conv_54 | convolutional | 397 | 561 | 1x14x14x64 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 64 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 24k (0.706%) |
|
||||
| | | | | | | | MACs per inference: 4M (1.6%) |
|
||||
| 56 | Add_55 | elementwise_binary_op | 391 | 400 | 1x14x14x64 | A D G C | operation: sum |
|
||||
| | | | 561 | | | | MACs per inference: 12k (0.00417%) |
|
||||
| 57 | Conv_56 | convolutional | 400 | 564 | 1x14x14x384 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 384 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 24k (0.716%) |
|
||||
| | | | | | | | MACs per inference: 4M (1.6%) |
|
||||
| 58 | Clip_57 | neuron | 564 | 403 | 1x14x14x384 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 59 | Conv_58 | convolutional | 403 | 567 | 1x14x14x384 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 384 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 384 |
|
||||
| | | | | | | | param count: 3k (0.11%) |
|
||||
| | | | | | | | MACs per inference: 677k (0.225%) |
|
||||
| 60 | Clip_59 | neuron | 567 | 406 | 1x14x14x384 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 61 | Conv_60 | convolutional | 406 | 570 | 1x14x14x96 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 96 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 36k (1.06%) |
|
||||
| | | | | | | | MACs per inference: 7M (2.4%) |
|
||||
| 62 | Conv_61 | convolutional | 570 | 573 | 1x14x14x576 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 576 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 55k (1.6%) |
|
||||
| | | | | | | | MACs per inference: 10M (3.6%) |
|
||||
| 63 | Clip_62 | neuron | 573 | 411 | 1x14x14x576 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 64 | Conv_63 | convolutional | 411 | 576 | 1x14x14x576 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 576 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 576 |
|
||||
| | | | | | | | param count: 5k (0.165%) |
|
||||
| | | | | | | | MACs per inference: 1M (0.338%) |
|
||||
| 65 | Clip_64 | neuron | 576 | 414 | 1x14x14x576 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 66 | Conv_65 | convolutional | 414 | 579 | 1x14x14x96 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 96 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 55k (1.59%) |
|
||||
| | | | | | | | MACs per inference: 10M (3.6%) |
|
||||
| 67 | Add_66 | elementwise_binary_op | 570 | 417 | 1x14x14x96 | A D G C | operation: sum |
|
||||
| | | | 579 | | | | MACs per inference: 18k (0.00625%) |
|
||||
| 68 | Conv_67 | convolutional | 417 | 582 | 1x14x14x576 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 576 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 55k (1.6%) |
|
||||
| | | | | | | | MACs per inference: 10M (3.6%) |
|
||||
| 69 | Clip_68 | neuron | 582 | 420 | 1x14x14x576 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 70 | Conv_69 | convolutional | 420 | 585 | 1x14x14x576 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 576 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 576 |
|
||||
| | | | | | | | param count: 5k (0.165%) |
|
||||
| | | | | | | | MACs per inference: 1M (0.338%) |
|
||||
| 71 | Clip_70 | neuron | 585 | 423 | 1x14x14x576 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 72 | Conv_71 | convolutional | 423 | 588 | 1x14x14x96 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 96 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 55k (1.59%) |
|
||||
| | | | | | | | MACs per inference: 10M (3.6%) |
|
||||
| 73 | Add_72 | elementwise_binary_op | 417 | 426 | 1x14x14x96 | A D G C | operation: sum |
|
||||
| | | | 588 | | | | MACs per inference: 18k (0.00625%) |
|
||||
| 74 | Conv_73 | convolutional | 426 | 591 | 1x14x14x576 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 576 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 55k (1.6%) |
|
||||
| | | | | | | | MACs per inference: 10M (3.6%) |
|
||||
| 75 | Clip_74 | neuron | 591 | 429 | 1x14x14x576 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 76 | Conv_75 | convolutional | 429 | 594 | 1x7x7x576 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 2 |
|
||||
| | | | | | | | stride y: 2 |
|
||||
| | | | | | | | num filters: 576 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 576 |
|
||||
| | | | | | | | param count: 5k (0.165%) |
|
||||
| | | | | | | | MACs per inference: 254k (0.0844%) |
|
||||
| 77 | Clip_76 | neuron | 594 | 432 | 1x7x7x576 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 78 | Conv_77 | convolutional | 432 | 597 | 1x7x7x160 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 160 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 92k (2.65%) |
|
||||
| | | | | | | | MACs per inference: 4M (1.5%) |
|
||||
| 79 | Conv_78 | convolutional | 597 | 600 | 1x7x7x960 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 960 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 154k (4.43%) |
|
||||
| | | | | | | | MACs per inference: 7M (2.5%) |
|
||||
| 80 | Clip_79 | neuron | 600 | 437 | 1x7x7x960 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 81 | Conv_80 | convolutional | 437 | 603 | 1x7x7x960 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 960 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 960 |
|
||||
| | | | | | | | param count: 9k (0.275%) |
|
||||
| | | | | | | | MACs per inference: 423k (0.141%) |
|
||||
| 82 | Clip_81 | neuron | 603 | 440 | 1x7x7x960 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 83 | Conv_82 | convolutional | 440 | 606 | 1x7x7x160 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 160 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 153k (4.41%) |
|
||||
| | | | | | | | MACs per inference: 7M (2.5%) |
|
||||
| 84 | Add_83 | elementwise_binary_op | 597 | 443 | 1x7x7x160 | A D G C | operation: sum |
|
||||
| | | | 606 | | | | MACs per inference: 7k (0.0026%) |
|
||||
| 85 | Conv_84 | convolutional | 443 | 609 | 1x7x7x960 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 960 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 154k (4.43%) |
|
||||
| | | | | | | | MACs per inference: 7M (2.5%) |
|
||||
| 86 | Clip_85 | neuron | 609 | 446 | 1x7x7x960 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 87 | Conv_86 | convolutional | 446 | 612 | 1x7x7x960 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 960 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 960 |
|
||||
| | | | | | | | param count: 9k (0.275%) |
|
||||
| | | | | | | | MACs per inference: 423k (0.141%) |
|
||||
| 88 | Clip_87 | neuron | 612 | 449 | 1x7x7x960 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 89 | Conv_88 | convolutional | 449 | 615 | 1x7x7x160 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 160 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 153k (4.41%) |
|
||||
| | | | | | | | MACs per inference: 7M (2.5%) |
|
||||
| 90 | Add_89 | elementwise_binary_op | 443 | 452 | 1x7x7x160 | A D G C | operation: sum |
|
||||
| | | | 615 | | | | MACs per inference: 7k (0.0026%) |
|
||||
| 91 | Conv_90 | convolutional | 452 | 618 | 1x7x7x960 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 960 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 154k (4.43%) |
|
||||
| | | | | | | | MACs per inference: 7M (2.5%) |
|
||||
| 92 | Clip_91 | neuron | 618 | 455 | 1x7x7x960 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 93 | Conv_92 | convolutional | 455 | 621 | 1x7x7x960 | A D G C | padding x: 1 |
|
||||
| | | | | | | | padding y: 1 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 960 |
|
||||
| | | | | | | | kernel: 3x3 |
|
||||
| | | | | | | | groups: 960 |
|
||||
| | | | | | | | param count: 9k (0.275%) |
|
||||
| | | | | | | | MACs per inference: 423k (0.141%) |
|
||||
| 94 | Clip_93 | neuron | 621 | 458 | 1x7x7x960 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 95 | Conv_94 | convolutional | 458 | 624 | 1x7x7x320 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 320 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 307k (8.82%) |
|
||||
| | | | | | | | MACs per inference: 15M (5%) |
|
||||
| 96 | Conv_95 | convolutional | 624 | 627 | 1x7x7x1280 | A D G C | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | padding mode: zero |
|
||||
| | | | | | | | stride x: 1 |
|
||||
| | | | | | | | stride y: 1 |
|
||||
| | | | | | | | num filters: 1280 |
|
||||
| | | | | | | | kernel: 1x1 |
|
||||
| | | | | | | | param count: 410k (11.8%) |
|
||||
| | | | | | | | MACs per inference: 20M (6.67%) |
|
||||
| 97 | Clip_96 | neuron | 627 | 463 | 1x7x7x1280 | A D G C | a: 0 |
|
||||
| | | | | | | | b: 0 |
|
||||
| | | | | | | | min_clamp: 0 |
|
||||
| | | | | | | | max_clamp: 6 |
|
||||
| | | | | | | | func: relu_min_max |
|
||||
| 98 | GlobalAveragePool_97 | pooling | 463 | 464 | 1x1x1x1280 | A D G C | pool size x: 7 |
|
||||
| | | | | | | | pool size y: 7 |
|
||||
| | | | | | | | stride x: 7 |
|
||||
| | | | | | | | stride y: 7 |
|
||||
| | | | | | | | padding x: 0 |
|
||||
| | | | | | | | padding y: 0 |
|
||||
| | | | | | | | pool_type: POOL_AVG |
|
||||
| | | | | | | | MACs per inference: 62k (0.0208%) |
|
||||
| 99 | 464.ncs | permute | 464 | 464.ncs | 1x1280x1x1 | A D G C | permute_order: [0, 3, 1, 2] |
|
||||
| 100 | Gemm_104 | fully_connected | 464.ncs | output | 1x1000 | A D G C | param count: 1M (36.7%) |
|
||||
| | | | | | | | MACs per inference: 1M (0.425%) |
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------
|
||||
Note: The supported runtimes column assumes a processor target of Snapdragon 835 (8998)
|
||||
Key : A:AIP
|
||||
D:DSP
|
||||
G:GPU
|
||||
C:CPU
|
||||
|
||||
Total parameters: 3487816 (13 MB assuming single precision float)
|
||||
Total MACs per inference: 301M (100%)
|
||||
Converter command: snpe-onnx-to-dlc adjust_nms_features_dims=False align_matmul_ranks=True copyright_file=None custom_op_config_paths=None debug=-1 disable_batchnorm_folding=False disable_chaining_eltwise_ops=False dry_run=None dumpIR=False dump_inferred_model=False dump_value_info=False enable_strict_validation=False extract_color_transform=False force_prune_cast_ops=True handle_gather_negative_indices=False inject_cast_for_gather=False input_dim=[['input', '1,3,224,224']] input_dtype=[] input_encoding=[] input_layout=[] input_type=[['input', 'image']] keep_disconnected_nodes=False keep_quant_nodes=False match_caffe_ssd_to_tf=False model_version=None no_simplification=False out_names=['output'] perform_axes_to_spatial_first_order=True prepare_inputs_as_params=True preprocess_lstm_ops=False preprocess_roi_pool_inputs=False quantization_overrides= squash_box_decoder=False unroll_lstm_time_steps=False use_convert_quantization_nodes=True validation_target=[]
|
||||
Quantizer command: N/A
|
||||
DLC created with converter version: 1.61.0.3358
|
||||
Layers used by DLC: CONVOLUTIONAL, DATA, ELEMENTWISE_BINARY_OP_SUM, FULLY_CONNECTED, NEURON_RELU_MIN_MAX, PERMUTE, POOLING
|
||||
Est. Steady-State Memory Needed to Run: 164.3 MiB
|
||||
-----------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
Log File Created: Tue Mar 18 01:33:12 2025
|
||||
Time Scale: 1e-06
|
||||
Epoch Timestamp: 1742286792883569 Steady Clock Timestamp: 75586845756
|
||||
Software library version: 1.61.0.3358
|
||||
|
||||
Dnn Runtime Load/Deserialize/Create/De-Init Statistics:
|
||||
--------------------------------------------------
|
||||
Load: 333 us
|
||||
Deserialize: 32452 us
|
||||
Create: 143084 us
|
||||
|
||||
Init: 178071 us
|
||||
De-Init: 16710 us
|
||||
|
||||
Create Network(s): 86850 us
|
||||
RPC Init Time: 43213 us
|
||||
Snpe Accelerator Init Time: 42154 us
|
||||
Accelerator Init Time: 39189 us
|
||||
|
||||
Average SNPE Statistics:
|
||||
------------------------------
|
||||
Total Inference Time: 11868 us
|
||||
Forward Propagate Time: 11816 us
|
||||
RPC Execute Time: 9810 us
|
||||
Snpe Accelerator Time: 9129 us
|
||||
Accelerator Time: 8701 us
|
||||
Misc Accelerator Time: 10 us
|
||||
|
||||
Layer Times:
|
||||
---------------
|
||||
0: 42 us : DSP
|
||||
1: 0 us : DSP
|
||||
2: 254 us : DSP
|
||||
3: 0 us : DSP
|
||||
4: 153 us : DSP
|
||||
5: 295 us : DSP
|
||||
6: 0 us : DSP
|
||||
7: 287 us : DSP
|
||||
8: 0 us : DSP
|
||||
9: 162 us : DSP
|
||||
10: 210 us : DSP
|
||||
11: 0 us : DSP
|
||||
12: 138 us : DSP
|
||||
13: 0 us : DSP
|
||||
14: 176 us : DSP
|
||||
15: 293 us : DSP
|
||||
16: 60 us : DSP
|
||||
17: 0 us : DSP
|
||||
18: 157 us : DSP
|
||||
19: 0 us : DSP
|
||||
20: 112 us : DSP
|
||||
21: 134 us : DSP
|
||||
22: 0 us : DSP
|
||||
23: 81 us : DSP
|
||||
24: 0 us : DSP
|
||||
25: 104 us : DSP
|
||||
26: 130 us : DSP
|
||||
27: 37 us : DSP
|
||||
28: 0 us : DSP
|
||||
29: 81 us : DSP
|
||||
30: 0 us : DSP
|
||||
31: 87 us : DSP
|
||||
32: 124 us : DSP
|
||||
33: 30 us : DSP
|
||||
34: 0 us : DSP
|
||||
35: 87 us : DSP
|
||||
36: 0 us : DSP
|
||||
37: 63 us : DSP
|
||||
38: 74 us : DSP
|
||||
39: 0 us : DSP
|
||||
40: 102 us : DSP
|
||||
41: 0 us : DSP
|
||||
42: 82 us : DSP
|
||||
43: 95 us : DSP
|
||||
44: 29 us : DSP
|
||||
45: 0 us : DSP
|
||||
46: 112 us : DSP
|
||||
47: 0 us : DSP
|
||||
48: 88 us : DSP
|
||||
49: 96 us : DSP
|
||||
50: 25 us : DSP
|
||||
51: 0 us : DSP
|
||||
52: 103 us : DSP
|
||||
53: 0 us : DSP
|
||||
54: 80 us : DSP
|
||||
55: 100 us : DSP
|
||||
56: 26 us : DSP
|
||||
57: 0 us : DSP
|
||||
58: 102 us : DSP
|
||||
59: 0 us : DSP
|
||||
60: 85 us : DSP
|
||||
61: 129 us : DSP
|
||||
62: 0 us : DSP
|
||||
63: 155 us : DSP
|
||||
64: 0 us : DSP
|
||||
65: 113 us : DSP
|
||||
66: 194 us : DSP
|
||||
67: 34 us : DSP
|
||||
68: 0 us : DSP
|
||||
69: 157 us : DSP
|
||||
70: 0 us : DSP
|
||||
71: 120 us : DSP
|
||||
72: 198 us : DSP
|
||||
73: 34 us : DSP
|
||||
74: 0 us : DSP
|
||||
75: 155 us : DSP
|
||||
76: 0 us : DSP
|
||||
77: 101 us : DSP
|
||||
78: 121 us : DSP
|
||||
79: 0 us : DSP
|
||||
80: 256 us : DSP
|
||||
81: 0 us : DSP
|
||||
82: 134 us : DSP
|
||||
83: 159 us : DSP
|
||||
84: 31 us : DSP
|
||||
85: 0 us : DSP
|
||||
86: 199 us : DSP
|
||||
87: 0 us : DSP
|
||||
88: 142 us : DSP
|
||||
89: 152 us : DSP
|
||||
90: 26 us : DSP
|
||||
91: 0 us : DSP
|
||||
92: 202 us : DSP
|
||||
93: 0 us : DSP
|
||||
94: 143 us : DSP
|
||||
95: 278 us : DSP
|
||||
96: 0 us : DSP
|
||||
97: 316 us : DSP
|
||||
98: 40 us : DSP
|
||||
99: 12 us : DSP
|
||||
100: 199 us : DSP
|
||||
@@ -0,0 +1,21 @@
|
||||
di = open("dlc_info_2").read().split("\n")
|
||||
layers = {}
|
||||
for l in di:
|
||||
if not l.startswith("| "): continue
|
||||
if l.startswith("| |"): continue
|
||||
ll = [x.strip() for x in l.split("|")]
|
||||
if ll[1] == "Id": continue
|
||||
layers[int(ll[1])] = (ll[2], ll[6])
|
||||
hp = open("high_perf_2").read().split("Layer Times:")[1].strip().split("\n")[2:]
|
||||
sl = 1
|
||||
tms = 0
|
||||
for l in hp:
|
||||
kk, tm, _ = l.split(" ", 2)
|
||||
tm = int(tm)
|
||||
lnum = int(kk.strip(":"))
|
||||
if int(tm) != 0:
|
||||
print(f"{sl:2d} {tm:4d} us {layers[lnum]}")
|
||||
tms += tm
|
||||
sl += 1
|
||||
print(f"total time, {tms/1000:.2f} ms")
|
||||
|
||||
+102
-36
@@ -6,7 +6,9 @@ from tinygrad.engine.jit import TinyJit
|
||||
from tinygrad.nn.state import get_state_dict
|
||||
from tinygrad.helpers import Context
|
||||
from tinygrad.dtype import dtypes
|
||||
from tinygrad.ops import Ops
|
||||
import json
|
||||
from collections import OrderedDict
|
||||
|
||||
EXPORT_SUPPORTED_DEVICE = ["WEBGPU", "CPU", "CUDA", "GPU"]
|
||||
|
||||
@@ -26,6 +28,7 @@ def compile_net(run:TinyJit, special_names:Dict[int,str]) -> Tuple[Dict[str,str]
|
||||
bufnum += 1
|
||||
if i > 0: bufs_to_save[bufs[key][0]] = arg # if first usage of a buffer is not an output, and it's not a special name
|
||||
cargs.append(bufs[key][0])
|
||||
cargs += [var for var in fxn.vars if getattr(var, "op", None) is Ops.DEFINE_VAR] # symbolic vars; is it necessary or sufficient to check for DEFINE_VAR?
|
||||
statements.append((fxn.function_name, cargs, fxn.global_size, fxn.local_size))
|
||||
|
||||
return functions, statements, {name:(size, dtype, key) for (name,size,dtype,key) in bufs.values()}, bufs_to_save
|
||||
@@ -35,7 +38,7 @@ def jit_model(model, *args) -> Tuple[TinyJit,Dict[int,str]]:
|
||||
@TinyJit
|
||||
def run(*x):
|
||||
out = model.forward(*x) if hasattr(model, "forward") else model(*x)
|
||||
assert isinstance(out, tuple) or isinstance(out, list) or isinstance(out, Tensor), "model output must be a Tensor, tuple, or a list of Tensors for export"
|
||||
assert isinstance(out, (tuple, list, Tensor)), "model output must be a Tensor, tuple, or a list of Tensors for export"
|
||||
out = [out] if isinstance(out, Tensor) else out
|
||||
return [o.realize() for o in out]
|
||||
|
||||
@@ -54,60 +57,105 @@ def jit_model(model, *args) -> Tuple[TinyJit,Dict[int,str]]:
|
||||
special_names[id(output.lazydata.base.realized)] = f'output{i}'
|
||||
return run, special_names
|
||||
|
||||
def export_model_clang(functions:Dict[str,str], statements:Dict[str,Tuple[str,int,int]], bufs:Dict[str,Tuple[str,int,int]], bufs_to_save:Dict[str,Tensor], input_names:List[str], output_names:List[str]) -> str:
|
||||
cprog = ["#include <tgmath.h>"]
|
||||
def export_model_clang(functions:Dict[str,str], statements:Dict[str,Tuple[str,int,int]], bufs:Dict[str,Tuple[str,int,int]],
|
||||
bufs_to_save:Dict[str,Tensor], input_names:List[str], output_names:List[str], weight_names={}, model_name="model", symbolic_vars={}, wasm=False) -> str:
|
||||
headers = ["#include <tgmath.h>"]
|
||||
cprog = list(functions.values())
|
||||
dtype_map = {dtypes.int: "int", dtypes.float: "float", dtypes.uchar: "unsigned char", dtypes.char: "signed char", dtypes.half: "__fp16", dtypes.uint: "unsigned int"}
|
||||
inputs = [(name, dtype_map[bufs[name][1]], bufs[name][0]) for name in input_names + list(symbolic_vars.values())]
|
||||
outputs = [(name, dtype_map[bufs[name][1]], bufs[name][0]) for name in output_names]
|
||||
forward_args = ",".join(f"{dtype}{'*' if name not in symbolic_vars.values() else ''} {name}" for name,dtype,_ in (outputs+inputs if wasm else inputs+outputs))
|
||||
|
||||
for name,cl in bufs_to_save.items():
|
||||
weight = ''.join(["\\x%02X"%x for x in bytes(cl._buf)])
|
||||
cprog.append(f"unsigned char {name}_data[] = \"{weight}\";")
|
||||
if not wasm:
|
||||
for name,cl in bufs_to_save.items():
|
||||
weight = ''.join(["\\x%02X"%x for x in bytes(cl._buf)])
|
||||
cprog.append(f"unsigned char {name}_data[] = \"{weight}\";")
|
||||
cprog += [f"{dtype_map[dtype]} {name}[{len}];" if name not in bufs_to_save else f"{dtype_map[dtype]} *{name} = ({dtype_map[dtype]} *){name}_data;" for name,(len,dtype,_key) in bufs.items() if name not in input_names+output_names]
|
||||
cprog += [f"void net({forward_args}) {{"] + [f"{name}({', '.join(args)});" for (name, args, _global_size, _local_size) in statements] + ["}"]
|
||||
return '\n'.join(headers + cprog)
|
||||
else:
|
||||
if bufs_to_save:
|
||||
headers += ["#include <stddef.h>"]
|
||||
bufs_to_save = {k:v for k,v in bufs.items() if v[2] in weight_names} # causes random seeds to be set as zeroes, not exported as a model weight
|
||||
buf_to_name = OrderedDict((buf_name, {"name": weight_names[data[2]], "idx": i}) for i, (buf_name, data) in enumerate(bufs_to_save.items()))
|
||||
cprog.append(f"void* bufs[{len(buf_to_name)}];")
|
||||
cprog.append(f"""void set_buf(size_t index, void* ptr) {{\n bufs[index] = ptr;\n}}""")
|
||||
|
||||
inputs = ", ".join([f'float* {input}' for input in input_names])
|
||||
outputs = ", ".join([f'float* {output}' for output in output_names])
|
||||
cprog += [f"float {name}[{len}];" if name not in bufs_to_save else f"float *{name} = (float *){name}_data;" for name,(len,dtype,_key) in bufs.items() if name not in ['input', 'outputs']]
|
||||
cprog += list(functions.values())
|
||||
cprog += [f"void net({inputs}, {outputs}) {{"] + [f"{name}({', '.join(args)});" for (name, args, _global_size, _local_size) in statements] + ["}"]
|
||||
return '\n'.join(cprog)
|
||||
for name in set(bufs.keys()) - set(bufs_to_save.keys()) - set(input_names + output_names):
|
||||
n_bytes, dtype, _ = bufs[name]
|
||||
cprog += [f"{dtype_map[dtype]} {name}[{n_bytes // dtype.itemsize}];"]
|
||||
|
||||
cprog += [f"void net({forward_args})"] + ["{"]
|
||||
get_weight_ptr = lambda x: f"({dtype_map[bufs_to_save[x][1]]} *)bufs[{buf_to_name[x]['idx']}]" if x in bufs_to_save else x
|
||||
cprog += [f" {name}({', '.join(map(get_weight_ptr, args))});" for (name, args, _global_size, _local_size) in statements] + ["}"]
|
||||
weightMapping = "" if not bufs_to_save else f"""\nconst weightNames = [{", ".join([f'"{weight_name}"' for weight_name in [v["name"] for v in buf_to_name.values()]])}];
|
||||
const {model_name}_name_to_id = Object.fromEntries(weightNames.map((name, index) => [name, index]));\n"""
|
||||
top = f"""import {model_name}Module from './{model_name}.js'{weightMapping}"""
|
||||
whitespace = "\n "
|
||||
js_wrapper = f"""{top}\nvar {model_name} = async function() {{
|
||||
const wasm = await {model_name}Module();
|
||||
{whitespace.join(f"const {name}Ptr = wasm._malloc({n_bytes});" for name, _, n_bytes in outputs+inputs if name not in symbolic_vars.values())}
|
||||
return {{
|
||||
run: ({",".join(name for name,_,_ in inputs)}) => {{
|
||||
{(whitespace + " ").join(f"wasm.HEAPU8.set({name}, {name}Ptr);" for name,_,_ in inputs if name not in symbolic_vars.values())}
|
||||
wasm._net({", ".join(f"{name}{'Ptr' if name not in symbolic_vars.values() else ''}" for name,_,_ in outputs+inputs)});
|
||||
{(whitespace + " ").join(f"const {name} = wasm.HEAPU8.slice({name}Ptr, {name}Ptr + {n_bytes});" for name,_,n_bytes in outputs)}
|
||||
return [{", ".join(f"{name}" for name,_,_ in outputs)}];
|
||||
}},
|
||||
wasm: wasm
|
||||
}}
|
||||
}}\nexport {{ {model_name}, {model_name}_name_to_id }};"""
|
||||
|
||||
return '\n'.join(headers + cprog), js_wrapper
|
||||
|
||||
def dtype_to_js_type(dtype: DType) -> str:
|
||||
return f"{'Uint' if dtype in dtypes.uints else 'Int' if (dtype in dtypes.sints or dtype == dtypes.bool) else 'Float'}{8*dtype.itemsize}Array"
|
||||
|
||||
def export_model_webgpu(functions, statements, bufs, weight_names, input_names, output_names, model_name) -> Tuple[str,int,int]:
|
||||
exported_name = "model" if model_name == None else model_name
|
||||
def export_model_webgpu(functions, statements, bufs, weight_names, input_names, output_names, model_name, symbolic_vars={}, stream_weights=False) -> Tuple[str,int,int]:
|
||||
kernel_code = '\n\n'.join([f"const {key} = `{code.replace(key, 'main')}`;" for key, code in functions.items()])
|
||||
kernel_names = ', '.join([name for (name, _, _, _) in statements])
|
||||
input_names += list(symbolic_vars.values())
|
||||
input_buffer_types = [dtype_to_js_type(bufs[inp_name][1]) for inp_name in input_names]
|
||||
output_buffer_types = [dtype_to_js_type(bufs[out_name][1]) for out_name in output_names]
|
||||
|
||||
buf_type = lambda x: "uniform" if x in set(symbolic_vars.values()) else "storage"
|
||||
create_bind_group_layouts = ",".join([
|
||||
"device.createBindGroupLayout({{entries: [{{binding: 0, visibility: GPUShaderStage.COMPUTE, buffer: {{ type: 'uniform' }}}}, {}]}})".format(
|
||||
",".join([f"{{binding: {argIdx+1}, visibility: GPUShaderStage.COMPUTE, buffer: {{ type: 'storage' }} }}" for argIdx, _ in enumerate(args)])
|
||||
",".join([f"{{binding: {argIdx+1}, visibility: GPUShaderStage.COMPUTE, buffer: {{ type: '{buf_type(argName)}' }} }}" for argIdx, argName in enumerate(args)])
|
||||
)
|
||||
for _, (_, args, _, _) in enumerate(statements)
|
||||
])
|
||||
layouts = f"const layouts=[{create_bind_group_layouts}]"
|
||||
kernel_calls = '\n '.join([f"addComputePass(device, commandEncoder, pipelines[{i}], layouts[{i}], infinityBuf, [{', '.join(args)}], {global_size});" for i, (_name, args, global_size, _local_size) in enumerate(statements) ])
|
||||
_bufs = '\n '.join([f"const {name} = " + (f"createEmptyBuf(device, {size});" if _key not in weight_names else f"createWeightBuf(device, {size}, getTensorBuffer(safetensor, metadata['{weight_names[_key]}']))") + ";" for name,(size,dtype,_key) in bufs.items()])
|
||||
kernel_calls = '\n '.join([f"addComputePass(device, commandEncoder, pipelines[{i}], layouts[{i}], infinityBuf, [{', '.join(args)}], [{', '.join(str(x) for x in global_size)}]);" for i, (_name, args, global_size, _local_size) in enumerate(statements) ])
|
||||
|
||||
buf_type = lambda x: "createUniformBuf" if x in set(uop.arg[0] for uop in symbolic_vars) else "createEmptyBuf"
|
||||
map_to_external_weight = lambda _key: f"state_dict['{weight_names[_key]}']" if stream_weights else f"getTensorBuffer(safetensor, metadata['{weight_names[_key]}'])"
|
||||
_bufs = '\n '.join([f"const {name} = " + (f"{buf_type(_key)}(device, {size});" if _key not in weight_names else f"createWeightBuf(device, {size}, {map_to_external_weight(_key)})") + ";" for name,(size,dtype,_key) in bufs.items()])
|
||||
gpu_write_bufs = '\n '.join([f"const gpuWriteBuffer{i} = device.createBuffer({{size:{input_name}.size, usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE }});" for i,input_name in enumerate(input_names)])
|
||||
input_buffer_types = [dtype_to_js_type(bufs[inp_name][1]) for inp_name in input_names]
|
||||
output_buffer_types = [dtype_to_js_type(bufs[out_name][1]) for out_name in output_names]
|
||||
input_writers = '\n '.join([f"await gpuWriteBuffer{i}.mapAsync(GPUMapMode.WRITE);\n new {input_buffer_types[i]}(gpuWriteBuffer{i}.getMappedRange()).set(" + f'_{inp_name});' + f"\n gpuWriteBuffer{i}.unmap();\n commandEncoder.copyBufferToBuffer(gpuWriteBuffer{i}, 0, {inp_name}, 0, gpuWriteBuffer{i}.size);" for i,inp_name in enumerate(input_names)])
|
||||
gpu_read_bufs = '\n '.join([f"const gpuReadBuffer{i} = device.createBuffer({{size:{output_name}.size, usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ }});" for i,output_name in enumerate(output_names)])
|
||||
outbuf_copies = '\n '.join([f"commandEncoder.copyBufferToBuffer({output_name}, 0, gpuReadBuffer{i}, 0, output{i}.size);" for i,output_name in enumerate(output_names)])
|
||||
output_readers = '\n '.join([f"await gpuReadBuffer{i}.mapAsync(GPUMapMode.READ);\n const resultBuffer{i} = new {output_buffer_types[i]}(gpuReadBuffer{i}.size/{bufs[output_names[i]][1].itemsize});\n resultBuffer{i}.set(new {output_buffer_types[i]}(gpuReadBuffer{i}.getMappedRange()));\n gpuReadBuffer{i}.unmap();" for i in range(len(output_names))])
|
||||
output_return = '[{}]'.format(",".join([f'resultBuffer{i}' for i in range(len(output_names))]))
|
||||
return f"""
|
||||
const {exported_name} = (() => {{
|
||||
const getTensorBuffer = (safetensorBuffer, tensorMetadata) => {{
|
||||
return safetensorBuffer.subarray(...tensorMetadata.data_offsets);
|
||||
}};
|
||||
|
||||
const getTensorMetadata = (safetensorBuffer) => {{
|
||||
getTensorMetadata = f"""\nconst getTensorMetadata = (safetensorBuffer) => {{
|
||||
const metadataLength = Number(new DataView(safetensorBuffer.buffer).getBigUint64(0, true));
|
||||
const metadata = JSON.parse(new TextDecoder("utf8").decode(safetensorBuffer.subarray(8, 8 + metadataLength)));
|
||||
return Object.fromEntries(Object.entries(metadata).filter(([k, v]) => k !== "__metadata__").map(([k, v]) => [k, {{...v, data_offsets: v.data_offsets.map(x => 8 + metadataLength + x)}}]));
|
||||
}};\n""" if not stream_weights else ""
|
||||
return f"""
|
||||
const {model_name} = (() => {{
|
||||
const getTensorBuffer = (safetensorBuffer, tensorMetadata) => {{
|
||||
return safetensorBuffer.subarray(...tensorMetadata.data_offsets);
|
||||
}};
|
||||
|
||||
{getTensorMetadata}
|
||||
const createEmptyBuf = (device, size) => {{
|
||||
return device.createBuffer({{size, usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST }});
|
||||
}};
|
||||
|
||||
const createUniformBuf = (device, size) => {{
|
||||
return device.createBuffer({{size, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST}})
|
||||
}}
|
||||
|
||||
const createInfinityUniformBuf = (device) => {{
|
||||
const size = 4;
|
||||
const buf = device.createBuffer({{
|
||||
@@ -121,9 +169,8 @@ const createInfinityUniformBuf = (device) => {{
|
||||
}};
|
||||
|
||||
const createWeightBuf = (device, size, data) => {{
|
||||
const buf = device.createBuffer({{ mappedAtCreation: true, size, usage: GPUBufferUsage.STORAGE }});
|
||||
new Uint8Array(buf.getMappedRange()).set(data);
|
||||
buf.unmap();
|
||||
const buf = device.createBuffer({{ size, usage: GPUBufferUsage.STORAGE{" | GPUBufferUsage.COPY_DST" if stream_weights else ", mappedAtCreation: true"} }});
|
||||
{"data.bytes = buf;" if stream_weights else "new Uint8Array(buf.getMappedRange()).set(data); buf.unmap();"}
|
||||
return buf;
|
||||
}};
|
||||
|
||||
@@ -145,8 +192,8 @@ const addComputePass = (device, commandEncoder, pipeline, layout, infinityUnifor
|
||||
|
||||
{kernel_code}
|
||||
|
||||
const setupNet = async (device, safetensor) => {{
|
||||
const metadata = getTensorMetadata(safetensor);
|
||||
const setupNet = async (device, {"state_dict" if stream_weights else "safetensor"}) => {{
|
||||
{"const metadata = getTensorMetadata(safetensor);" if not stream_weights else ""}
|
||||
const infinityBuf = createInfinityUniformBuf(device);
|
||||
|
||||
{layouts}
|
||||
@@ -185,12 +232,12 @@ const setupNet = async (device, safetensor) => {{
|
||||
}}
|
||||
}}
|
||||
const load = async (device, weight_path) => {{ return await fetch(weight_path).then(x => x.arrayBuffer()).then(x => setupNet(device, new Uint8Array(x))); }}
|
||||
return {{ load }};
|
||||
return {{ load, setupNet }};
|
||||
}})();
|
||||
export default {exported_name};
|
||||
export default {model_name};
|
||||
"""
|
||||
|
||||
def export_model(model, target:str, *inputs, model_name: Optional[str] = None):
|
||||
def export_model(model, target:str, *inputs, model_name: Optional[str] = "model", stream_weights=False):
|
||||
assert Device.DEFAULT in EXPORT_SUPPORTED_DEVICE, "only WEBGPU, CPU, CUDA, GPU, METAL are supported"
|
||||
with Context(JIT=2): run,special_names = jit_model(model, *inputs)
|
||||
functions, statements, bufs, bufs_to_save = compile_net(run, special_names)
|
||||
@@ -198,11 +245,30 @@ def export_model(model, target:str, *inputs, model_name: Optional[str] = None):
|
||||
weight_names = {id(x.lazydata.base.realized): name for name, x in state.items()}
|
||||
input_names = [name for _,name in special_names.items() if "input" in name]
|
||||
output_names = [name for _,name in special_names.items() if "output" in name]
|
||||
|
||||
# handle symbolic variables; TODO: refactor to fix some of this stuff upstream in tinygrad
|
||||
symbolic_vars = OrderedDict()
|
||||
for i, (_, args, global_size, _) in enumerate(statements):
|
||||
for j, var in enumerate(args):
|
||||
if getattr(var, "op", None) is Ops.DEFINE_VAR and isinstance(getattr(var, "arg", None), tuple) and isinstance(var.arg[0], str):
|
||||
if var not in symbolic_vars:
|
||||
symbolic_vars[var] = var.arg[0]
|
||||
bufs[symbolic_vars[var]] = (var.dtype.itemsize, var.dtype, symbolic_vars[var])
|
||||
statements[i][1][j] = symbolic_vars[var]
|
||||
|
||||
if global_size:
|
||||
for j, dim in enumerate(global_size):
|
||||
if getattr(dim, "op", None) is Ops.ADD and len(dim.src) == 2 and {dim.src[0].op, dim.src[1].op} == {Ops.DEFINE_VAR, Ops.CONST}:
|
||||
name, val = dim.src if dim.src[1].op is Ops.CONST else reversed(dim.src)
|
||||
global_size[j] = f"_{name.arg[0]}[0] + {val.arg}"
|
||||
|
||||
prg = ""
|
||||
if target == "clang":
|
||||
prg = export_model_clang(functions, statements, bufs, bufs_to_save, input_names, output_names)
|
||||
elif target == "wasm":
|
||||
return export_model_clang(functions, statements, bufs, bufs_to_save, input_names, output_names, weight_names, model_name, symbolic_vars, wasm=True)
|
||||
elif target == "webgpu":
|
||||
prg = export_model_webgpu(functions, statements, bufs, weight_names, input_names, output_names, model_name)
|
||||
prg = export_model_webgpu(functions, statements, bufs, weight_names, input_names, output_names, model_name, symbolic_vars, stream_weights)
|
||||
else:
|
||||
prg = json.dumps({
|
||||
"backend": Device.DEFAULT,
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
*.s
|
||||
*.ll
|
||||
fp32_sgemm_amd
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user