0e1612319283ed431545438844fe3c7106d69be5
[device/hardware/nvidia/soc/tegra.git] / kernel-include / dt-bindings / memory / tegra-swgroup.h
1 /*
2  * This header provides constants for binding nvidia,swgroup ID
3  *
4  * Copyright (c) 2014-2018 NVIDIA CORPORATION, All rights reserved.
5  *
6  * This software is licensed under the terms of the GNU General Public
7  * License version 2, as published by the Free Software Foundation, and
8  * may be copied, distributed, and modified under those terms.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  */
15
16 #ifndef _DT_BINDINGS_MEMORY_TEGRA_SWGROUP_H
17 #define _DT_BINDINGS_MEMORY_TEGRA_SWGROUP_H
18
19 #define TEGRA_SWGROUP_INVALID   0xff    /* 0x238 */
20 #define TEGRA_SWGROUP_AFI       0       /* 0x238 */
21 #define TEGRA_SWGROUP_AVPC      1       /* 0x23c */
22 #define TEGRA_SWGROUP_DC        2       /* 0x240 */
23 #define TEGRA_SWGROUP_DCB       3       /* 0x244 */
24 #define TEGRA_SWGROUP_EPP       4       /* 0x248 */
25 #define TEGRA_SWGROUP_G2        5       /* 0x24c */
26 #define TEGRA_SWGROUP_HC        6       /* 0x250 */
27 #define TEGRA_SWGROUP_HDA       7       /* 0x254 */
28 #define TEGRA_SWGROUP_ISP       8       /* 0x258 */
29 #define TEGRA_SWGROUP_ISP2      8
30 #define TEGRA_SWGROUP_DC14      9       /* 0x490 *//* Exceptional non-linear */
31 #define TEGRA_SWGROUP_DC12      10      /* 0xa88 *//* Exceptional non-linear */
32 #define TEGRA_SWGROUP_MPE       11      /* 0x264 */
33 #define TEGRA_SWGROUP_MSENC     11
34 #define TEGRA_SWGROUP_NVENC     11
35 #define TEGRA_SWGROUP_NV        12      /* 0x268 */
36 #define TEGRA_SWGROUP_NV2       13      /* 0x26c */
37 #define TEGRA_SWGROUP_PPCS      14      /* 0x270 */
38 #define TEGRA_SWGROUP_SATA2     15      /* 0x274 */
39 #define TEGRA_SWGROUP_SATA      16      /* 0x278 */
40 #define TEGRA_SWGROUP_VDE       17      /* 0x27c */
41 #define TEGRA_SWGROUP_VI        18      /* 0x280 */
42 #define TEGRA_SWGROUP_VII2C     18      /* 0x280 */
43 #define TEGRA_SWGROUP_VIC       19      /* 0x284 */
44 #define TEGRA_SWGROUP_XUSB_HOST 20      /* 0x288 */
45 #define TEGRA_SWGROUP_XUSB_DEV  21      /* 0x28c */
46 #define TEGRA_SWGROUP_A9AVP     22      /* 0x290 */
47 #define TEGRA_SWGROUP_TSEC      23      /* 0x294 */
48 #define TEGRA_SWGROUP_PPCS1     24      /* 0x298 */
49 #define TEGRA_SWGROUP_SDMMC1A   25      /* 0xa94 *//* Linear shift again */
50 #define TEGRA_SWGROUP_SDMMC2A   26      /* 0xa98 */
51 #define TEGRA_SWGROUP_SDMMC3A   27      /* 0xa9c */
52 #define TEGRA_SWGROUP_SDMMC4A   28      /* 0xaa0 */
53 #define TEGRA_SWGROUP_ISP2B     29      /* 0xaa4 */
54 #define TEGRA_SWGROUP_GPU       30      /* 0xaa8, DO NOT USE THIS */
55 #define TEGRA_SWGROUP_GPUB      31      /* 0xaac */
56 #define TEGRA_SWGROUP_PPCS2     32      /* 0xab0 */
57 #define TEGRA_SWGROUP_NVDEC     33      /* 0xab4 */
58 #define TEGRA_SWGROUP_APE       34      /* 0xab8 */
59 #define TEGRA_SWGROUP_SE        35      /* 0xabc */
60 #define TEGRA_SWGROUP_NVJPG     36      /* 0xac0 */
61 #define TEGRA_SWGROUP_HC1       37      /* 0xac4 */
62 #define TEGRA_SWGROUP_SE1       38      /* 0xac8 */
63 #define TEGRA_SWGROUP_AXIAP     39      /* 0xacc */
64 #define TEGRA_SWGROUP_ETR       40      /* 0xad0 */
65 #define TEGRA_SWGROUP_TSECB     41      /* 0xad4 */
66 #define TEGRA_SWGROUP_TSEC1     42      /* 0xad8 */
67 #define TEGRA_SWGROUP_TSECB1    43      /* 0xadc */
68 #define TEGRA_SWGROUP_NVDEC1    44      /* 0xae0 */
69 /*      Reserved                45 */
70 #define TEGRA_SWGROUP_AXIS      46      /* 0xae8 */
71 #define TEGRA_SWGROUP_EQOS      47      /* 0xaec */
72 #define TEGRA_SWGROUP_UFSHC     48      /* 0xaf0 */
73 #define TEGRA_SWGROUP_NVDISPLAY 49      /* 0xaf4 */
74 #define TEGRA_SWGROUP_BPMP      50      /* 0xaf8 */
75 #define TEGRA_SWGROUP_AON       51      /* 0xafc */
76 #define TEGRA_SWGROUP_SMMU_TEST 52
77 #define TEGRA_SWGROUP_ISP2B1    53      /* 0x808, SE2 on t214 */
78 /*      Reserved                50 */
79
80 #define TWO_U32_OF_U64(x)       ((x) & 0xffffffff) ((x) >> 32)
81 #define TEGRA_SWGROUP_BIT(x)    (1ULL << TEGRA_SWGROUP_##x)
82 #define TEGRA_SWGROUP_CELLS(x)  TWO_U32_OF_U64(TEGRA_SWGROUP_BIT(x))
83
84 #define TEGRA_SWGROUP_CELLS2(x1, x2)     \
85                                 TWO_U32_OF_U64( TEGRA_SWGROUP_BIT(x1) | \
86                                                 TEGRA_SWGROUP_BIT(x2))
87 #define TEGRA_SWGROUP_CELLS3(x1, x2, x3)         \
88                                 TWO_U32_OF_U64( TEGRA_SWGROUP_BIT(x1) | \
89                                                 TEGRA_SWGROUP_BIT(x2) | \
90                                                 TEGRA_SWGROUP_BIT(x3))
91 #define TEGRA_SWGROUP_CELLS4(x1, x2, x3, x4)     \
92                                 TWO_U32_OF_U64( TEGRA_SWGROUP_BIT(x1) | \
93                                                 TEGRA_SWGROUP_BIT(x2) | \
94                                                 TEGRA_SWGROUP_BIT(x3) | \
95                                                 TEGRA_SWGROUP_BIT(x4))
96 #define TEGRA_SWGROUP_CELLS5(x1, x2, x3, x4, x5)        \
97                                 TWO_U32_OF_U64( TEGRA_SWGROUP_BIT(x1) | \
98                                                 TEGRA_SWGROUP_BIT(x2) | \
99                                                 TEGRA_SWGROUP_BIT(x3) | \
100                                                 TEGRA_SWGROUP_BIT(x4) | \
101                                                 TEGRA_SWGROUP_BIT(x5))
102 #define TEGRA_SWGROUP_CELLS9(x1, x2, x3, x4, x5, x6, x7, x8, x9) \
103                                 TWO_U32_OF_U64( TEGRA_SWGROUP_BIT(x1) | \
104                                                 TEGRA_SWGROUP_BIT(x2) | \
105                                                 TEGRA_SWGROUP_BIT(x3) | \
106                                                 TEGRA_SWGROUP_BIT(x4) | \
107                                                 TEGRA_SWGROUP_BIT(x5) | \
108                                                 TEGRA_SWGROUP_BIT(x6) | \
109                                                 TEGRA_SWGROUP_BIT(x7) | \
110                                                 TEGRA_SWGROUP_BIT(x8) | \
111                                                 TEGRA_SWGROUP_BIT(x9))
112 #define TEGRA_SWGROUP_CELLS12(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12) \
113                                 TWO_U32_OF_U64( TEGRA_SWGROUP_BIT(x1) | \
114                                                 TEGRA_SWGROUP_BIT(x2) | \
115                                                 TEGRA_SWGROUP_BIT(x3) | \
116                                                 TEGRA_SWGROUP_BIT(x4) | \
117                                                 TEGRA_SWGROUP_BIT(x5) | \
118                                                 TEGRA_SWGROUP_BIT(x6) | \
119                                                 TEGRA_SWGROUP_BIT(x7) | \
120                                                 TEGRA_SWGROUP_BIT(x8) | \
121                                                 TEGRA_SWGROUP_BIT(x9) | \
122                                                 TEGRA_SWGROUP_BIT(x10)| \
123                                                 TEGRA_SWGROUP_BIT(x11)| \
124                                                 TEGRA_SWGROUP_BIT(x12))
125 #define TEGRA_SWGROUP_MAX       64
126
127 #define SWGIDS_ERROR_CODE       (~0ULL)
128 #define swgids_is_error(x)      ((x) == SWGIDS_ERROR_CODE)
129
130 /*
131  * The above definitions are for the older tegra chips using the Tegra SMMU. For
132  * tegra chips using the ARM SMMU the following is used. The notion of bit maps
133  * is removed since they are not very scalable.
134  */
135
136 /* Host clients. */
137 #define TEGRA_SID_HC            0x1     /* 1 */
138 #define TEGRA_SID_VIC           0x3     /* 3 */
139 #define TEGRA_SID_VI            0x4     /* 4 */
140 #define TEGRA_SID_ISP           0x5     /* 5 */
141 #define TEGRA_SID_NVDEC         0x6     /* 6 */
142 #define TEGRA_SID_NVENC         0x7     /* 7 */
143 #define TEGRA_SID_NVJPG         0x8     /* 8 */
144 #define TEGRA_SID_NVDISPLAY     0x9     /* 9 */
145 #define TEGRA_SID_TSEC          0xa     /* 10 */
146 #define TEGRA_SID_TSECB         0xb     /* 11 */
147 #define TEGRA_SID_SE            0xc     /* 12 */
148 #define TEGRA_SID_SE1           0xd     /* 13 */
149
150 /* GPU clients. */
151 #define TEGRA_SID_GPUB          0x10    /* 16 */
152
153 /* Other SoC clients */
154 #define TEGRA_SID_AFI           0x11    /* 17 */
155 #define TEGRA_SID_HDA           0x12    /* 18 */
156 #define TEGRA_SID_ETR           0x13    /* 19 */
157 #define TEGRA_SID_EQOS          0x14    /* 20 */
158 #define TEGRA_SID_UFSHC         0x15    /* 21 */
159 #define TEGRA_SID_AON           0x16    /* 22 */
160 #define TEGRA_SID_SDMMC4A       0x17    /* 23 */
161 #define TEGRA_SID_SDMMC3A       0x18    /* 24 */
162 #define TEGRA_SID_SDMMC2A       0x19    /* 25 */
163 #define TEGRA_SID_SDMMC1A       0x1a    /* 26 */
164 #define TEGRA_SID_XUSB_HOST     0x1b    /* 27 */
165 #define TEGRA_SID_XUSB_DEV      0x1c    /* 28 */
166 #define TEGRA_SID_SATA2         0x1d    /* 29 */
167 #define TEGRA_SID_APE           0x1e    /* 30 */
168
169 /*
170  * The BPMP has hard coded their SID value in their FW which is not built
171  * in the normal Linux tree. As a result, changing the SID requires a
172  * considerable amount of work.
173  */
174 #define TEGRA_SID_BPMP          0x32    /* 50 */
175
176 /* For smmu tests */
177 #define TEGRA_SID_SMMU_TEST     0x33    /* 51 */
178
179 /*
180  * This is the t18x specific component of the new SID dt-binding.
181  */
182 #define TEGRA_SID_NVCSI         0x2     /* 2 */
183 #define TEGRA_SID_SE2           0xe     /* 14 */
184 #define TEGRA_SID_SE3           0xf     /* 15 */
185 #define TEGRA_SID_SCE           0x1f    /* 31 */
186
187 /* The GPC DMA clients. */
188 #define TEGRA_SID_GPCDMA_0      0x20    /* 32 */
189 #define TEGRA_SID_GPCDMA_1      0x21    /* 33 */
190 #define TEGRA_SID_GPCDMA_2      0x22    /* 34 */
191 #define TEGRA_SID_GPCDMA_3      0x23    /* 35 */
192 #define TEGRA_SID_GPCDMA_4      0x24    /* 36 */
193 #define TEGRA_SID_GPCDMA_5      0x25    /* 37 */
194 #define TEGRA_SID_GPCDMA_6      0x26    /* 38 */
195 #define TEGRA_SID_GPCDMA_7      0x27    /* 39 */
196
197 /* The APE DMA Clients. */
198 #define TEGRA_SID_APE_1         0x28    /* 40 */
199 #define TEGRA_SID_APE_2         0x29    /* 41 */
200
201 /* The Camera RTCPU. */
202 #define TEGRA_SID_RCE           0x2a    /* 42 */
203
204 /* The Camera RTCPU on Host1x address space. */
205 #define TEGRA_SID_RCE_1X        0x2b    /* 43 */
206
207 /* The APE DMA Clients. */
208 #define TEGRA_SID_APE_3         0x2c    /* 44 */
209
210 /* The Camera RTCPU running on APE */
211 #define TEGRA_SID_APE_CAM       0x2d    /* 45 */
212 #define TEGRA_SID_APE_CAM_1X    0x2e    /* 46 */
213
214 /* Host1x virtualization clients. */
215 #define TEGRA_SID_HOST1X_CTX0   0x38    /* 56 */
216 #define TEGRA_SID_HOST1X_CTX1   0x39    /* 57 */
217 #define TEGRA_SID_HOST1X_CTX2   0x3a    /* 58 */
218 #define TEGRA_SID_HOST1X_CTX3   0x3b    /* 59 */
219 #define TEGRA_SID_HOST1X_CTX4   0x3c    /* 60 */
220 #define TEGRA_SID_HOST1X_CTX5   0x3d    /* 61 */
221 #define TEGRA_SID_HOST1X_CTX6   0x3e    /* 62 */
222 #define TEGRA_SID_HOST1X_CTX7   0x3f    /* 63 */
223
224 /* Host1x command buffers */
225 #define TEGRA_SID_HC_VM0        0x40
226 #define TEGRA_SID_HC_VM1        0x41
227 #define TEGRA_SID_HC_VM2        0x42
228 #define TEGRA_SID_HC_VM3        0x43
229 #define TEGRA_SID_HC_VM4        0x44
230 #define TEGRA_SID_HC_VM5        0x45
231 #define TEGRA_SID_HC_VM6        0x46
232 #define TEGRA_SID_HC_VM7        0x47
233
234 /* SE data buffers */
235 #define TEGRA_SID_SE_VM0        0x48
236 #define TEGRA_SID_SE_VM1        0x49
237 #define TEGRA_SID_SE_VM2        0x4a
238 #define TEGRA_SID_SE_VM3        0x4b
239 #define TEGRA_SID_SE_VM4        0x4c
240 #define TEGRA_SID_SE_VM5        0x4d
241 #define TEGRA_SID_SE_VM6        0x4e
242 #define TEGRA_SID_SE_VM7        0x4f
243
244 /* XUSB virtual functions */
245 #define TEGRA_SID_XUSB_VF0      0x5d
246 #define TEGRA_SID_XUSB_VF1      0x5e
247 #define TEGRA_SID_XUSB_VF2      0x5f
248 #define TEGRA_SID_XUSB_VF3      0x60
249
250 /* Special clients */
251 #define TEGRA_SID_PASSTHROUGH   0x7f
252 #define TEGRA_SID_INVALID       0x0
253
254 /*
255  * These macros will be removed once the bitmap problem is sorted out. Until
256  * then this is equivalent to TEGRA_SWGROUP_CELLS() only with TEGRA_SID_*
257  * instead of TEGRA_SWGROUP_*.
258  */
259 #define TEGRA_SID(x)            (TEGRA_SID_ ## x)
260
261 /*
262  * These are unique id's that the IOMMU uses to put different
263  * devices into the same IOMMU group and shared address space
264  * Add this to a devices iommu-group-id property
265  */
266 #define TEGRA_IOMMU_GROUP_HOST1X                0x1
267 #define TEGRA_IOMMU_GROUP_APE                   0x2
268 #define TEGRA_IOMMU_GROUP_RTCPU                 0x3
269 #define TEGRA_IOMMU_GROUP_SE                    0x4
270
271
272 #endif /* _DT_BINDINGS_MEMORY_TEGRA_SWGROUP_H */