xref: /linux/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/nvrm/engine.h (revision ab93e0dd72c37d378dd936f031ffb83ff2bd87ce)
1 /* SPDX-License-Identifier: MIT */
2 
3 /* Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. */
4 
5 #ifndef __NVRM_ENGINE_H__
6 #define __NVRM_ENGINE_H__
7 #include <nvrm/nvtypes.h>
8 
9 /* Excerpt of RM headers from https://github.com/NVIDIA/open-gpu-kernel-modules/tree/535.113.01 */
10 
11 #define MC_ENGINE_IDX_NULL                          0 // This must be 0
12 #define MC_ENGINE_IDX_TMR                           1
13 #define MC_ENGINE_IDX_DISP                          2
14 #define MC_ENGINE_IDX_FB                            3
15 #define MC_ENGINE_IDX_FIFO                          4
16 #define MC_ENGINE_IDX_VIDEO                         5
17 #define MC_ENGINE_IDX_MD                            6
18 #define MC_ENGINE_IDX_BUS                           7
19 #define MC_ENGINE_IDX_PMGR                          8
20 #define MC_ENGINE_IDX_VP2                           9
21 #define MC_ENGINE_IDX_CIPHER                        10
22 #define MC_ENGINE_IDX_BIF                           11
23 #define MC_ENGINE_IDX_PPP                           12
24 #define MC_ENGINE_IDX_PRIVRING                      13
25 #define MC_ENGINE_IDX_PMU                           14
26 #define MC_ENGINE_IDX_CE0                           15
27 #define MC_ENGINE_IDX_CE1                           16
28 #define MC_ENGINE_IDX_CE2                           17
29 #define MC_ENGINE_IDX_CE3                           18
30 #define MC_ENGINE_IDX_CE4                           19
31 #define MC_ENGINE_IDX_CE5                           20
32 #define MC_ENGINE_IDX_CE6                           21
33 #define MC_ENGINE_IDX_CE7                           22
34 #define MC_ENGINE_IDX_CE8                           23
35 #define MC_ENGINE_IDX_CE9                           24
36 #define MC_ENGINE_IDX_CE_MAX                        MC_ENGINE_IDX_CE9
37 #define MC_ENGINE_IDX_VIC                           35
38 #define MC_ENGINE_IDX_ISOHUB                        36
39 #define MC_ENGINE_IDX_VGPU                          37
40 #define MC_ENGINE_IDX_MSENC                         38
41 #define MC_ENGINE_IDX_MSENC1                        39
42 #define MC_ENGINE_IDX_MSENC2                        40
43 #define MC_ENGINE_IDX_C2C                           41
44 #define MC_ENGINE_IDX_LTC                           42
45 #define MC_ENGINE_IDX_FBHUB                         43
46 #define MC_ENGINE_IDX_HDACODEC                      44
47 #define MC_ENGINE_IDX_GMMU                          45
48 #define MC_ENGINE_IDX_SEC2                          46
49 #define MC_ENGINE_IDX_FSP                           47
50 #define MC_ENGINE_IDX_NVLINK                        48
51 #define MC_ENGINE_IDX_GSP                           49
52 #define MC_ENGINE_IDX_NVJPG                         50
53 #define MC_ENGINE_IDX_NVJPEG                        MC_ENGINE_IDX_NVJPG
54 #define MC_ENGINE_IDX_NVJPEG0                       MC_ENGINE_IDX_NVJPEG
55 #define MC_ENGINE_IDX_NVJPEG1                       51
56 #define MC_ENGINE_IDX_NVJPEG2                       52
57 #define MC_ENGINE_IDX_NVJPEG3                       53
58 #define MC_ENGINE_IDX_NVJPEG4                       54
59 #define MC_ENGINE_IDX_NVJPEG5                       55
60 #define MC_ENGINE_IDX_NVJPEG6                       56
61 #define MC_ENGINE_IDX_NVJPEG7                       57
62 #define MC_ENGINE_IDX_REPLAYABLE_FAULT              58
63 #define MC_ENGINE_IDX_ACCESS_CNTR                   59
64 #define MC_ENGINE_IDX_NON_REPLAYABLE_FAULT          60
65 #define MC_ENGINE_IDX_REPLAYABLE_FAULT_ERROR        61
66 #define MC_ENGINE_IDX_NON_REPLAYABLE_FAULT_ERROR    62
67 #define MC_ENGINE_IDX_INFO_FAULT                    63
68 #define MC_ENGINE_IDX_BSP                           64
69 #define MC_ENGINE_IDX_NVDEC                         MC_ENGINE_IDX_BSP
70 #define MC_ENGINE_IDX_NVDEC0                        MC_ENGINE_IDX_NVDEC
71 #define MC_ENGINE_IDX_NVDEC1                        65
72 #define MC_ENGINE_IDX_NVDEC2                        66
73 #define MC_ENGINE_IDX_NVDEC3                        67
74 #define MC_ENGINE_IDX_NVDEC4                        68
75 #define MC_ENGINE_IDX_NVDEC5                        69
76 #define MC_ENGINE_IDX_NVDEC6                        70
77 #define MC_ENGINE_IDX_NVDEC7                        71
78 #define MC_ENGINE_IDX_CPU_DOORBELL                  72
79 #define MC_ENGINE_IDX_PRIV_DOORBELL                 73
80 #define MC_ENGINE_IDX_MMU_ECC_ERROR                 74
81 #define MC_ENGINE_IDX_BLG                           75
82 #define MC_ENGINE_IDX_PERFMON                       76
83 #define MC_ENGINE_IDX_BUF_RESET                     77
84 #define MC_ENGINE_IDX_XBAR                          78
85 #define MC_ENGINE_IDX_ZPW                           79
86 #define MC_ENGINE_IDX_OFA0                          80
87 #define MC_ENGINE_IDX_TEGRA                         81
88 #define MC_ENGINE_IDX_GR                            82
89 #define MC_ENGINE_IDX_GR0                           MC_ENGINE_IDX_GR
90 #define MC_ENGINE_IDX_GR1                           83
91 #define MC_ENGINE_IDX_GR2                           84
92 #define MC_ENGINE_IDX_GR3                           85
93 #define MC_ENGINE_IDX_GR4                           86
94 #define MC_ENGINE_IDX_GR5                           87
95 #define MC_ENGINE_IDX_GR6                           88
96 #define MC_ENGINE_IDX_GR7                           89
97 #define MC_ENGINE_IDX_ESCHED                        90
98 #define MC_ENGINE_IDX_ESCHED__SIZE                  64
99 #define MC_ENGINE_IDX_GR_FECS_LOG                   154
100 #define MC_ENGINE_IDX_GR0_FECS_LOG                  MC_ENGINE_IDX_GR_FECS_LOG
101 #define MC_ENGINE_IDX_GR1_FECS_LOG                  155
102 #define MC_ENGINE_IDX_GR2_FECS_LOG                  156
103 #define MC_ENGINE_IDX_GR3_FECS_LOG                  157
104 #define MC_ENGINE_IDX_GR4_FECS_LOG                  158
105 #define MC_ENGINE_IDX_GR5_FECS_LOG                  159
106 #define MC_ENGINE_IDX_GR6_FECS_LOG                  160
107 #define MC_ENGINE_IDX_GR7_FECS_LOG                  161
108 #define MC_ENGINE_IDX_TMR_SWRL                      162
109 #define MC_ENGINE_IDX_DISP_GSP                      163
110 #define MC_ENGINE_IDX_REPLAYABLE_FAULT_CPU          164
111 #define MC_ENGINE_IDX_NON_REPLAYABLE_FAULT_CPU      165
112 #define MC_ENGINE_IDX_PXUC                          166
113 #define MC_ENGINE_IDX_MAX                           167 // This must be kept as the max bit if
114 #define MC_ENGINE_IDX_INVALID                0xFFFFFFFF
115 #define MC_ENGINE_IDX_GRn(x)            (MC_ENGINE_IDX_GR0 + (x))
116 #define MC_ENGINE_IDX_GRn_FECS_LOG(x)   (MC_ENGINE_IDX_GR0_FECS_LOG + (x))
117 #define MC_ENGINE_IDX_CE(x)             (MC_ENGINE_IDX_CE0 + (x))
118 #define MC_ENGINE_IDX_MSENCn(x)         (MC_ENGINE_IDX_MSENC + (x))
119 #define MC_ENGINE_IDX_NVDECn(x)         (MC_ENGINE_IDX_NVDEC + (x))
120 #define MC_ENGINE_IDX_NVJPEGn(x)        (MC_ENGINE_IDX_NVJPEG + (x))
121 #define MC_ENGINE_IDX_ESCHEDn(x)        (MC_ENGINE_IDX_ESCHED + (x))
122 
123 typedef enum
124 {
125     RM_ENGINE_TYPE_NULL                 =       (0x00000000),
126     RM_ENGINE_TYPE_GR0                  =       (0x00000001),
127     RM_ENGINE_TYPE_GR1                  =       (0x00000002),
128     RM_ENGINE_TYPE_GR2                  =       (0x00000003),
129     RM_ENGINE_TYPE_GR3                  =       (0x00000004),
130     RM_ENGINE_TYPE_GR4                  =       (0x00000005),
131     RM_ENGINE_TYPE_GR5                  =       (0x00000006),
132     RM_ENGINE_TYPE_GR6                  =       (0x00000007),
133     RM_ENGINE_TYPE_GR7                  =       (0x00000008),
134     RM_ENGINE_TYPE_COPY0                =       (0x00000009),
135     RM_ENGINE_TYPE_COPY1                =       (0x0000000a),
136     RM_ENGINE_TYPE_COPY2                =       (0x0000000b),
137     RM_ENGINE_TYPE_COPY3                =       (0x0000000c),
138     RM_ENGINE_TYPE_COPY4                =       (0x0000000d),
139     RM_ENGINE_TYPE_COPY5                =       (0x0000000e),
140     RM_ENGINE_TYPE_COPY6                =       (0x0000000f),
141     RM_ENGINE_TYPE_COPY7                =       (0x00000010),
142     RM_ENGINE_TYPE_COPY8                =       (0x00000011),
143     RM_ENGINE_TYPE_COPY9                =       (0x00000012),
144     RM_ENGINE_TYPE_NVDEC0               =       (0x0000001d),
145     RM_ENGINE_TYPE_NVDEC1               =       (0x0000001e),
146     RM_ENGINE_TYPE_NVDEC2               =       (0x0000001f),
147     RM_ENGINE_TYPE_NVDEC3               =       (0x00000020),
148     RM_ENGINE_TYPE_NVDEC4               =       (0x00000021),
149     RM_ENGINE_TYPE_NVDEC5               =       (0x00000022),
150     RM_ENGINE_TYPE_NVDEC6               =       (0x00000023),
151     RM_ENGINE_TYPE_NVDEC7               =       (0x00000024),
152     RM_ENGINE_TYPE_NVENC0               =       (0x00000025),
153     RM_ENGINE_TYPE_NVENC1               =       (0x00000026),
154     RM_ENGINE_TYPE_NVENC2               =       (0x00000027),
155     RM_ENGINE_TYPE_VP                   =       (0x00000028),
156     RM_ENGINE_TYPE_ME                   =       (0x00000029),
157     RM_ENGINE_TYPE_PPP                  =       (0x0000002a),
158     RM_ENGINE_TYPE_MPEG                 =       (0x0000002b),
159     RM_ENGINE_TYPE_SW                   =       (0x0000002c),
160     RM_ENGINE_TYPE_TSEC                 =       (0x0000002d),
161     RM_ENGINE_TYPE_VIC                  =       (0x0000002e),
162     RM_ENGINE_TYPE_MP                   =       (0x0000002f),
163     RM_ENGINE_TYPE_SEC2                 =       (0x00000030),
164     RM_ENGINE_TYPE_HOST                 =       (0x00000031),
165     RM_ENGINE_TYPE_DPU                  =       (0x00000032),
166     RM_ENGINE_TYPE_PMU                  =       (0x00000033),
167     RM_ENGINE_TYPE_FBFLCN               =       (0x00000034),
168     RM_ENGINE_TYPE_NVJPEG0              =       (0x00000035),
169     RM_ENGINE_TYPE_NVJPEG1              =       (0x00000036),
170     RM_ENGINE_TYPE_NVJPEG2              =       (0x00000037),
171     RM_ENGINE_TYPE_NVJPEG3              =       (0x00000038),
172     RM_ENGINE_TYPE_NVJPEG4              =       (0x00000039),
173     RM_ENGINE_TYPE_NVJPEG5              =       (0x0000003a),
174     RM_ENGINE_TYPE_NVJPEG6              =       (0x0000003b),
175     RM_ENGINE_TYPE_NVJPEG7              =       (0x0000003c),
176     RM_ENGINE_TYPE_OFA                  =       (0x0000003d),
177     RM_ENGINE_TYPE_LAST                 =       (0x0000003e),
178 } RM_ENGINE_TYPE;
179 
180 #define NV2080_ENGINE_TYPE_NULL                       (0x00000000)
181 #define NV2080_ENGINE_TYPE_GRAPHICS                   (0x00000001)
182 #define NV2080_ENGINE_TYPE_GR0                        NV2080_ENGINE_TYPE_GRAPHICS
183 #define NV2080_ENGINE_TYPE_GR1                        (0x00000002)
184 #define NV2080_ENGINE_TYPE_GR2                        (0x00000003)
185 #define NV2080_ENGINE_TYPE_GR3                        (0x00000004)
186 #define NV2080_ENGINE_TYPE_GR4                        (0x00000005)
187 #define NV2080_ENGINE_TYPE_GR5                        (0x00000006)
188 #define NV2080_ENGINE_TYPE_GR6                        (0x00000007)
189 #define NV2080_ENGINE_TYPE_GR7                        (0x00000008)
190 #define NV2080_ENGINE_TYPE_COPY0                      (0x00000009)
191 #define NV2080_ENGINE_TYPE_COPY1                      (0x0000000a)
192 #define NV2080_ENGINE_TYPE_COPY2                      (0x0000000b)
193 #define NV2080_ENGINE_TYPE_COPY3                      (0x0000000c)
194 #define NV2080_ENGINE_TYPE_COPY4                      (0x0000000d)
195 #define NV2080_ENGINE_TYPE_COPY5                      (0x0000000e)
196 #define NV2080_ENGINE_TYPE_COPY6                      (0x0000000f)
197 #define NV2080_ENGINE_TYPE_COPY7                      (0x00000010)
198 #define NV2080_ENGINE_TYPE_COPY8                      (0x00000011)
199 #define NV2080_ENGINE_TYPE_COPY9                      (0x00000012)
200 #define NV2080_ENGINE_TYPE_BSP                        (0x00000013)
201 #define NV2080_ENGINE_TYPE_NVDEC0                     NV2080_ENGINE_TYPE_BSP
202 #define NV2080_ENGINE_TYPE_NVDEC1                     (0x00000014)
203 #define NV2080_ENGINE_TYPE_NVDEC2                     (0x00000015)
204 #define NV2080_ENGINE_TYPE_NVDEC3                     (0x00000016)
205 #define NV2080_ENGINE_TYPE_NVDEC4                     (0x00000017)
206 #define NV2080_ENGINE_TYPE_NVDEC5                     (0x00000018)
207 #define NV2080_ENGINE_TYPE_NVDEC6                     (0x00000019)
208 #define NV2080_ENGINE_TYPE_NVDEC7                     (0x0000001a)
209 #define NV2080_ENGINE_TYPE_MSENC                      (0x0000001b)
210 #define NV2080_ENGINE_TYPE_NVENC0                      NV2080_ENGINE_TYPE_MSENC  /* Mutually exclusive alias */
211 #define NV2080_ENGINE_TYPE_NVENC1                     (0x0000001c)
212 #define NV2080_ENGINE_TYPE_NVENC2                     (0x0000001d)
213 #define NV2080_ENGINE_TYPE_VP                         (0x0000001e)
214 #define NV2080_ENGINE_TYPE_ME                         (0x0000001f)
215 #define NV2080_ENGINE_TYPE_PPP                        (0x00000020)
216 #define NV2080_ENGINE_TYPE_MPEG                       (0x00000021)
217 #define NV2080_ENGINE_TYPE_SW                         (0x00000022)
218 #define NV2080_ENGINE_TYPE_CIPHER                     (0x00000023)
219 #define NV2080_ENGINE_TYPE_TSEC                       NV2080_ENGINE_TYPE_CIPHER
220 #define NV2080_ENGINE_TYPE_VIC                        (0x00000024)
221 #define NV2080_ENGINE_TYPE_MP                         (0x00000025)
222 #define NV2080_ENGINE_TYPE_SEC2                       (0x00000026)
223 #define NV2080_ENGINE_TYPE_HOST                       (0x00000027)
224 #define NV2080_ENGINE_TYPE_DPU                        (0x00000028)
225 #define NV2080_ENGINE_TYPE_PMU                        (0x00000029)
226 #define NV2080_ENGINE_TYPE_FBFLCN                     (0x0000002a)
227 #define NV2080_ENGINE_TYPE_NVJPG                      (0x0000002b)
228 #define NV2080_ENGINE_TYPE_NVJPEG0                     NV2080_ENGINE_TYPE_NVJPG
229 #define NV2080_ENGINE_TYPE_NVJPEG1                    (0x0000002c)
230 #define NV2080_ENGINE_TYPE_NVJPEG2                    (0x0000002d)
231 #define NV2080_ENGINE_TYPE_NVJPEG3                    (0x0000002e)
232 #define NV2080_ENGINE_TYPE_NVJPEG4                    (0x0000002f)
233 #define NV2080_ENGINE_TYPE_NVJPEG5                    (0x00000030)
234 #define NV2080_ENGINE_TYPE_NVJPEG6                    (0x00000031)
235 #define NV2080_ENGINE_TYPE_NVJPEG7                    (0x00000032)
236 #define NV2080_ENGINE_TYPE_OFA                        (0x00000033)
237 #define NV2080_ENGINE_TYPE_LAST                       (0x0000003e)
238 #define NV2080_ENGINE_TYPE_ALLENGINES                 (0xffffffff)
239 #define NV2080_ENGINE_TYPE_COPY_SIZE 10
240 #define NV2080_ENGINE_TYPE_NVENC_SIZE 3
241 #define NV2080_ENGINE_TYPE_NVJPEG_SIZE 8
242 #define NV2080_ENGINE_TYPE_NVDEC_SIZE 8
243 #define NV2080_ENGINE_TYPE_GR_SIZE 8
244 #define NV2080_ENGINE_TYPE_COPY(i)     (NV2080_ENGINE_TYPE_COPY0+(i))
245 #define NV2080_ENGINE_TYPE_IS_COPY(i)  (((i) >= NV2080_ENGINE_TYPE_COPY0) && ((i) <= NV2080_ENGINE_TYPE_COPY9))
246 #define NV2080_ENGINE_TYPE_COPY_IDX(i) ((i) - NV2080_ENGINE_TYPE_COPY0)
247 #define NV2080_ENGINE_TYPE_NVENC(i)    (NV2080_ENGINE_TYPE_NVENC0+(i))
248 #define NV2080_ENGINE_TYPE_IS_NVENC(i)  (((i) >= NV2080_ENGINE_TYPE_NVENC0) && ((i) < NV2080_ENGINE_TYPE_NVENC(NV2080_ENGINE_TYPE_NVENC_SIZE)))
249 #define NV2080_ENGINE_TYPE_NVENC_IDX(i) ((i) - NV2080_ENGINE_TYPE_NVENC0)
250 #define NV2080_ENGINE_TYPE_NVDEC(i)    (NV2080_ENGINE_TYPE_NVDEC0+(i))
251 #define NV2080_ENGINE_TYPE_IS_NVDEC(i)  (((i) >= NV2080_ENGINE_TYPE_NVDEC0) && ((i) < NV2080_ENGINE_TYPE_NVDEC(NV2080_ENGINE_TYPE_NVDEC_SIZE)))
252 #define NV2080_ENGINE_TYPE_NVDEC_IDX(i) ((i) - NV2080_ENGINE_TYPE_NVDEC0)
253 #define NV2080_ENGINE_TYPE_NVJPEG(i)    (NV2080_ENGINE_TYPE_NVJPEG0+(i))
254 #define NV2080_ENGINE_TYPE_IS_NVJPEG(i)  (((i) >= NV2080_ENGINE_TYPE_NVJPEG0) && ((i) < NV2080_ENGINE_TYPE_NVJPEG(NV2080_ENGINE_TYPE_NVJPEG_SIZE)))
255 #define NV2080_ENGINE_TYPE_NVJPEG_IDX(i) ((i) - NV2080_ENGINE_TYPE_NVJPEG0)
256 #define NV2080_ENGINE_TYPE_GR(i)       (NV2080_ENGINE_TYPE_GR0 + (i))
257 #define NV2080_ENGINE_TYPE_IS_GR(i)    (((i) >= NV2080_ENGINE_TYPE_GR0) && ((i) < NV2080_ENGINE_TYPE_GR(NV2080_ENGINE_TYPE_GR_SIZE)))
258 #define NV2080_ENGINE_TYPE_GR_IDX(i)   ((i) - NV2080_ENGINE_TYPE_GR0)
259 #define NV2080_ENGINE_TYPE_IS_VALID(i) (((i) > (NV2080_ENGINE_TYPE_NULL)) && ((i) < (NV2080_ENGINE_TYPE_LAST)))
260 #endif
261