diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gp10b')
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/fb_gp10b.c | 418 |
1 files changed, 394 insertions, 24 deletions
diff --git a/drivers/gpu/nvgpu/gp10b/fb_gp10b.c b/drivers/gpu/nvgpu/gp10b/fb_gp10b.c index 06cd94f2..8ba9ff8e 100644 --- a/drivers/gpu/nvgpu/gp10b/fb_gp10b.c +++ b/drivers/gpu/nvgpu/gp10b/fb_gp10b.c | |||
@@ -20,8 +20,14 @@ | |||
20 | 20 | ||
21 | #include <nvgpu/hw/gp10b/hw_gmmu_gp10b.h> | 21 | #include <nvgpu/hw/gp10b/hw_gmmu_gp10b.h> |
22 | 22 | ||
23 | static void gp10b_init_uncompressed_kind_map(void) | 23 | static noinline_for_stack void gp10b_init_uncompressed_kind_map(void) |
24 | { | 24 | { |
25 | int i; | ||
26 | |||
27 | for (i = 0; i < 256; i++) | ||
28 | gk20a_uc_kind_map[i] = gmmu_pte_kind_invalid_v(); | ||
29 | |||
30 | /* From gp10b */ | ||
25 | gk20a_uc_kind_map[gmmu_pte_kind_z16_2cz_v()] = | 31 | gk20a_uc_kind_map[gmmu_pte_kind_z16_2cz_v()] = |
26 | gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2cz_v()] = | 32 | gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2cz_v()] = |
27 | gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2cz_v()] = | 33 | gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2cz_v()] = |
@@ -32,55 +38,419 @@ static void gp10b_init_uncompressed_kind_map(void) | |||
32 | gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_4cbra_v()] = | 38 | gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_4cbra_v()] = |
33 | gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_4cbra_v()] = | 39 | gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_4cbra_v()] = |
34 | gmmu_pte_kind_generic_16bx2_v(); | 40 | gmmu_pte_kind_generic_16bx2_v(); |
41 | |||
42 | /* From gm20b */ | ||
43 | gk20a_uc_kind_map[gmmu_pte_kind_s8_v()] = | ||
44 | gk20a_uc_kind_map[gmmu_pte_kind_s8_2s_v()] = | ||
45 | gmmu_pte_kind_s8_v(); | ||
46 | |||
47 | /* From gk20a */ | ||
48 | gk20a_uc_kind_map[gmmu_pte_kind_z16_v()] = | ||
49 | gk20a_uc_kind_map[gmmu_pte_kind_z16_2c_v()] = | ||
50 | gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2c_v()] = | ||
51 | gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2c_v()] = | ||
52 | gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2c_v()] = | ||
53 | gk20a_uc_kind_map[gmmu_pte_kind_z16_2z_v()] = | ||
54 | gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2z_v()] = | ||
55 | gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2z_v()] = | ||
56 | gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2z_v()] = | ||
57 | gmmu_pte_kind_z16_v(); | ||
58 | |||
59 | gk20a_uc_kind_map[gmmu_pte_kind_s8z24_v()] = | ||
60 | gk20a_uc_kind_map[gmmu_pte_kind_s8z24_2cz_v()] = | ||
61 | gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms2_2cz_v()] = | ||
62 | gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms4_2cz_v()] = | ||
63 | gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms8_2cz_v()] = | ||
64 | gk20a_uc_kind_map[gmmu_pte_kind_s8z24_2cs_v()] = | ||
65 | gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms2_2cs_v()] = | ||
66 | gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms4_2cs_v()] = | ||
67 | gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms8_2cs_v()] = | ||
68 | gmmu_pte_kind_s8z24_v(); | ||
69 | |||
70 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_v()] = | ||
71 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2cs_v()] = | ||
72 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2czv_v()] = | ||
73 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2zv_v()] = | ||
74 | gmmu_pte_kind_v8z24_ms4_vc4_v(); | ||
75 | |||
76 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_v()] = | ||
77 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2cs_v()] = | ||
78 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2czv_v()] = | ||
79 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2zv_v()] = | ||
80 | gmmu_pte_kind_v8z24_ms8_vc8_v(); | ||
81 | |||
82 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_v()] = | ||
83 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2cs_v()] = | ||
84 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2czv_v()] = | ||
85 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2zv_v()] = | ||
86 | gmmu_pte_kind_v8z24_ms4_vc12_v(); | ||
87 | |||
88 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_v()] = | ||
89 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()] = | ||
90 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2czv_v()] = | ||
91 | gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2zv_v()] = | ||
92 | gmmu_pte_kind_v8z24_ms8_vc24_v(); | ||
93 | |||
94 | gk20a_uc_kind_map[gmmu_pte_kind_z24s8_v()] = | ||
95 | gk20a_uc_kind_map[gmmu_pte_kind_z24s8_2cs_v()] = | ||
96 | gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms2_2cs_v()] = | ||
97 | gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms4_2cs_v()] = | ||
98 | gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms8_2cs_v()] = | ||
99 | gk20a_uc_kind_map[gmmu_pte_kind_z24s8_2cz_v()] = | ||
100 | gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms2_2cz_v()] = | ||
101 | gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms4_2cz_v()] = | ||
102 | gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms8_2cz_v()] = | ||
103 | gmmu_pte_kind_z24s8_v(); | ||
104 | |||
105 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_v()] = | ||
106 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_2cs_v()] = | ||
107 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms2_2cs_v()] = | ||
108 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms4_2cs_v()] = | ||
109 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms8_2cs_v()] = | ||
110 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_2cz_v()] = | ||
111 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms2_2cz_v()] = | ||
112 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms4_2cz_v()] = | ||
113 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms8_2cz_v()] = | ||
114 | gmmu_pte_kind_zf32_v(); | ||
115 | |||
116 | gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v()] = | ||
117 | gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cs_v()] = | ||
118 | gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cszv_v()] = | ||
119 | gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v(); | ||
120 | |||
121 | gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_v()] = | ||
122 | gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_2cs_v()] = | ||
123 | gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_2cszv_v()] = | ||
124 | gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_v(); | ||
125 | |||
126 | gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_v()] = | ||
127 | gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_2cs_v()] = | ||
128 | gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_2cszv_v()] = | ||
129 | gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_v(); | ||
130 | |||
131 | gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v()] = | ||
132 | gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cs_v()] = | ||
133 | gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v()] = | ||
134 | gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v(); | ||
135 | |||
136 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_v()] = | ||
137 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cs_v()] = | ||
138 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cszv_v()] = | ||
139 | gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_v(); | ||
140 | |||
141 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_v()] = | ||
142 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_2cs_v()] = | ||
143 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_2cszv_v()] = | ||
144 | gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_v(); | ||
145 | |||
146 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_v()] = | ||
147 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_2cs_v()] = | ||
148 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_2cszv_v()] = | ||
149 | gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_v(); | ||
150 | |||
151 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v()] = | ||
152 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cs_v()] = | ||
153 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v()] = | ||
154 | gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v(); | ||
155 | |||
156 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_v()] = | ||
157 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_2cszv_v()] = | ||
158 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms2_2cszv_v()] = | ||
159 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms4_2cszv_v()] = | ||
160 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms8_2cszv_v()] = | ||
161 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_2cs_v()] = | ||
162 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms2_2cs_v()] = | ||
163 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms4_2cs_v()] = | ||
164 | gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms8_2cs_v()] = | ||
165 | gmmu_pte_kind_zf32_x24s8_v(); | ||
166 | |||
167 | gk20a_uc_kind_map[gmmu_pte_kind_c32_2c_v()] = | ||
168 | gk20a_uc_kind_map[gmmu_pte_kind_c32_2cba_v()] = | ||
169 | gk20a_uc_kind_map[gmmu_pte_kind_c32_2cra_v()] = | ||
170 | gk20a_uc_kind_map[gmmu_pte_kind_c32_2bra_v()] = | ||
171 | gk20a_uc_kind_map[gmmu_pte_kind_c32_ms2_2c_v()] = | ||
172 | gk20a_uc_kind_map[gmmu_pte_kind_c32_ms2_2cra_v()] = | ||
173 | gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2c_v()] = | ||
174 | gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cbr_v()] = | ||
175 | gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cba_v()] = | ||
176 | gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cra_v()] = | ||
177 | gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2bra_v()] = | ||
178 | gk20a_uc_kind_map[gmmu_pte_kind_c32_ms8_ms16_2c_v()] = | ||
179 | gk20a_uc_kind_map[gmmu_pte_kind_c32_ms8_ms16_2cra_v()] = | ||
180 | gk20a_uc_kind_map[gmmu_pte_kind_c64_2c_v()] = | ||
181 | gk20a_uc_kind_map[gmmu_pte_kind_c64_2cbr_v()] = | ||
182 | gk20a_uc_kind_map[gmmu_pte_kind_c64_2cba_v()] = | ||
183 | gk20a_uc_kind_map[gmmu_pte_kind_c64_2cra_v()] = | ||
184 | gk20a_uc_kind_map[gmmu_pte_kind_c64_2bra_v()] = | ||
185 | gk20a_uc_kind_map[gmmu_pte_kind_c64_ms2_2c_v()] = | ||
186 | gk20a_uc_kind_map[gmmu_pte_kind_c64_ms2_2cra_v()] = | ||
187 | gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2c_v()] = | ||
188 | gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cbr_v()] = | ||
189 | gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cba_v()] = | ||
190 | gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cra_v()] = | ||
191 | gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2bra_v()] = | ||
192 | gk20a_uc_kind_map[gmmu_pte_kind_c64_ms8_ms16_2c_v()] = | ||
193 | gk20a_uc_kind_map[gmmu_pte_kind_c64_ms8_ms16_2cra_v()] = | ||
194 | gk20a_uc_kind_map[gmmu_pte_kind_c128_2c_v()] = | ||
195 | gk20a_uc_kind_map[gmmu_pte_kind_c128_2cr_v()] = | ||
196 | gk20a_uc_kind_map[gmmu_pte_kind_c128_ms2_2c_v()] = | ||
197 | gk20a_uc_kind_map[gmmu_pte_kind_c128_ms2_2cr_v()] = | ||
198 | gk20a_uc_kind_map[gmmu_pte_kind_c128_ms4_2c_v()] = | ||
199 | gk20a_uc_kind_map[gmmu_pte_kind_c128_ms4_2cr_v()] = | ||
200 | gk20a_uc_kind_map[gmmu_pte_kind_c128_ms8_ms16_2c_v()] = | ||
201 | gk20a_uc_kind_map[gmmu_pte_kind_c128_ms8_ms16_2cr_v()] = | ||
202 | gmmu_pte_kind_generic_16bx2_v(); | ||
203 | |||
204 | gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2czv_v()] = | ||
205 | gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2cs_v()] = | ||
206 | gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2zv_v()] = | ||
207 | gmmu_pte_kind_z24v8_ms4_vc4_v(); | ||
208 | |||
209 | gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2czv_v()] = | ||
210 | gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2cs_v()] = | ||
211 | gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2zv_v()] = | ||
212 | gmmu_pte_kind_z24v8_ms4_vc12_v(); | ||
213 | |||
214 | gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2cs_v()] = | ||
215 | gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2czv_v()] = | ||
216 | gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2zv_v()] = | ||
217 | gmmu_pte_kind_z24v8_ms8_vc8_v(); | ||
218 | |||
219 | gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()] = | ||
220 | gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2czv_v()] = | ||
221 | gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2zv_v()] = | ||
222 | gmmu_pte_kind_z24v8_ms8_vc24_v(); | ||
223 | |||
224 | gk20a_uc_kind_map[gmmu_pte_kind_x8c24_v()] = | ||
225 | gmmu_pte_kind_x8c24_v(); | ||
35 | } | 226 | } |
36 | 227 | ||
37 | static bool gp10b_kind_supported(u8 k) | 228 | static noinline_for_stack bool gp10b_kind_supported(u8 k) |
38 | { | 229 | { |
39 | return (k >= gmmu_pte_kind_z16_2cz_v() && | 230 | return /* From gp10b */ |
40 | k <= gmmu_pte_kind_z16_ms8_2cz_v()) | 231 | (k >= gmmu_pte_kind_z16_2cz_v() && |
232 | k <= gmmu_pte_kind_z16_ms8_2cz_v()) | ||
41 | || k == gmmu_pte_kind_z16_ms16_2cz_v() | 233 | || k == gmmu_pte_kind_z16_ms16_2cz_v() |
42 | || k == gmmu_pte_kind_c32_ms4_4cbra_v() | 234 | || k == gmmu_pte_kind_c32_ms4_4cbra_v() |
43 | || k == gmmu_pte_kind_c64_ms4_4cbra_v(); | 235 | || k == gmmu_pte_kind_c64_ms4_4cbra_v() |
236 | /* From gm20b */ | ||
237 | || (k == gmmu_pte_kind_smsked_message_v()) | ||
238 | || (k >= gmmu_pte_kind_s8_v() && | ||
239 | k <= gmmu_pte_kind_s8_2s_v()) | ||
240 | /* From gk20a */ | ||
241 | || gk20a_kind_work_creation(k) | ||
242 | || (k == gmmu_pte_kind_invalid_v()) | ||
243 | || (k == gmmu_pte_kind_pitch_v()) | ||
244 | || (k >= gmmu_pte_kind_z16_v() && | ||
245 | k <= gmmu_pte_kind_z16_ms8_2c_v()) | ||
246 | || (k >= gmmu_pte_kind_z16_2z_v() && | ||
247 | k <= gmmu_pte_kind_z16_ms8_2z_v()) | ||
248 | || (k == gmmu_pte_kind_s8z24_v()) | ||
249 | || (k >= gmmu_pte_kind_s8z24_2cz_v() && | ||
250 | k <= gmmu_pte_kind_s8z24_ms8_2cz_v()) | ||
251 | || (k >= gmmu_pte_kind_v8z24_ms4_vc12_v() && | ||
252 | k <= gmmu_pte_kind_v8z24_ms8_vc24_v()) | ||
253 | || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && | ||
254 | k <= gmmu_pte_kind_v8z24_ms8_vc24_2zv_v()) | ||
255 | || (k == gmmu_pte_kind_z24s8_v()) | ||
256 | || (k >= gmmu_pte_kind_z24s8_2cz_v() && | ||
257 | k <= gmmu_pte_kind_z24s8_ms8_2cz_v()) | ||
258 | || (k == gmmu_pte_kind_zf32_v()) | ||
259 | || (k >= gmmu_pte_kind_zf32_2cz_v() && | ||
260 | k <= gmmu_pte_kind_zf32_ms8_2cz_v()) | ||
261 | || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v() && | ||
262 | k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v()) | ||
263 | || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cszv_v() && | ||
264 | k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v()) | ||
265 | || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cszv_v() && | ||
266 | k <= gmmu_pte_kind_zf32_x24s8_v()) | ||
267 | || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() && | ||
268 | k <= gmmu_pte_kind_zf32_x24s8_ms8_2cszv_v()) | ||
269 | || (k == gmmu_pte_kind_generic_16bx2_v()) | ||
270 | || (k == gmmu_pte_kind_c32_2c_v()) | ||
271 | || (k == gmmu_pte_kind_c32_2cra_v()) | ||
272 | || (k == gmmu_pte_kind_c32_ms2_2c_v()) | ||
273 | || (k == gmmu_pte_kind_c32_ms2_2cra_v()) | ||
274 | || (k >= gmmu_pte_kind_c32_ms4_2c_v() && | ||
275 | k <= gmmu_pte_kind_c32_ms4_2cbr_v()) | ||
276 | || (k >= gmmu_pte_kind_c32_ms4_2cra_v() && | ||
277 | k <= gmmu_pte_kind_c64_2c_v()) | ||
278 | || (k == gmmu_pte_kind_c64_2cra_v()) | ||
279 | || (k == gmmu_pte_kind_c64_ms2_2c_v()) | ||
280 | || (k == gmmu_pte_kind_c64_ms2_2cra_v()) | ||
281 | || (k >= gmmu_pte_kind_c64_ms4_2c_v() && | ||
282 | k <= gmmu_pte_kind_c64_ms4_2cbr_v()) | ||
283 | || (k >= gmmu_pte_kind_c64_ms4_2cra_v() && | ||
284 | k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v()) | ||
285 | || (k == gmmu_pte_kind_pitch_no_swizzle_v()); | ||
286 | } | ||
287 | |||
288 | static noinline_for_stack bool gp10b_kind_z(u8 k) | ||
289 | { | ||
290 | return /* From gp10b */ | ||
291 | (k >= gmmu_pte_kind_z16_2cz_v() && | ||
292 | k <= gmmu_pte_kind_z16_ms8_2cz_v()) | ||
293 | || (k == gmmu_pte_kind_z16_ms16_2cz_v()) | ||
294 | /* From gm20b */ | ||
295 | || (k >= gmmu_pte_kind_s8_v() && | ||
296 | k <= gmmu_pte_kind_s8_2s_v()) | ||
297 | /* From gk20a */ | ||
298 | || (k >= gmmu_pte_kind_z16_v() && | ||
299 | k <= gmmu_pte_kind_v8z24_ms8_vc24_v()) | ||
300 | || (k >= gmmu_pte_kind_v8z24_ms4_vc12_1zv_v() && | ||
301 | k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()) | ||
302 | || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && | ||
303 | k <= gmmu_pte_kind_z24v8_ms8_vc24_v()) | ||
304 | || (k >= gmmu_pte_kind_z24v8_ms4_vc12_1zv_v() && | ||
305 | k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()) | ||
306 | || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() && | ||
307 | k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v()) | ||
308 | || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1zv_v() && | ||
309 | k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v()) | ||
310 | || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1zv_v() && | ||
311 | k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v()); | ||
44 | } | 312 | } |
45 | 313 | ||
46 | static bool gp10b_kind_z(u8 k) | 314 | static noinline_for_stack bool gp10b_kind_c(u8 k) |
47 | { | 315 | { |
48 | return (k >= gmmu_pte_kind_z16_2cz_v() && | 316 | return gk20a_kind_work_creation(k) |
49 | k <= gmmu_pte_kind_z16_ms8_2cz_v()) || | 317 | || (k == gmmu_pte_kind_pitch_v()) |
50 | k == gmmu_pte_kind_z16_ms16_2cz_v(); | 318 | || (k == gmmu_pte_kind_generic_16bx2_v()) |
319 | || (k >= gmmu_pte_kind_c32_2c_v() && | ||
320 | k <= gmmu_pte_kind_c32_ms2_2cbr_v()) | ||
321 | || (k == gmmu_pte_kind_c32_ms2_2cra_v()) | ||
322 | || (k >= gmmu_pte_kind_c32_ms4_2c_v() && | ||
323 | k <= gmmu_pte_kind_c64_ms2_2cbr_v()) | ||
324 | || (k == gmmu_pte_kind_c64_ms2_2cra_v()) | ||
325 | || (k >= gmmu_pte_kind_c64_ms4_2c_v() && | ||
326 | k <= gmmu_pte_kind_pitch_no_swizzle_v()); | ||
51 | } | 327 | } |
52 | 328 | ||
53 | static bool gp10b_kind_compressible(u8 k) | 329 | static noinline_for_stack bool gp10b_kind_compressible(u8 k) |
54 | { | 330 | { |
55 | return (k >= gmmu_pte_kind_z16_2cz_v() && | 331 | return /* From gp10b */ |
56 | k <= gmmu_pte_kind_z16_ms8_2cz_v()) || | 332 | (k >= gmmu_pte_kind_z16_2cz_v() && |
57 | k == gmmu_pte_kind_z16_ms16_2cz_v() || | 333 | k <= gmmu_pte_kind_z16_ms8_2cz_v()) |
58 | (k >= gmmu_pte_kind_z16_4cz_v() && | 334 | || (k == gmmu_pte_kind_z16_ms16_2cz_v()) |
59 | k <= gmmu_pte_kind_z16_ms16_4cz_v()) || | 335 | || (k >= gmmu_pte_kind_z16_4cz_v() && |
60 | k == gmmu_pte_kind_c32_ms4_4cbra_v() || | 336 | k <= gmmu_pte_kind_z16_ms16_4cz_v()) |
61 | k == gmmu_pte_kind_c64_ms4_4cbra_v(); | 337 | || (k == gmmu_pte_kind_c32_ms4_4cbra_v()) |
338 | || (k == gmmu_pte_kind_c64_ms4_4cbra_v()) | ||
339 | /* From gm20b */ | ||
340 | || (k >= gmmu_pte_kind_s8_v() && | ||
341 | k <= gmmu_pte_kind_s8_2s_v()) | ||
342 | /* From gk20a */ | ||
343 | || (k >= gmmu_pte_kind_z16_2c_v() && | ||
344 | k <= gmmu_pte_kind_z16_ms16_4cz_v()) | ||
345 | || (k >= gmmu_pte_kind_s8z24_1z_v() && | ||
346 | k <= gmmu_pte_kind_s8z24_ms16_4cszv_v()) | ||
347 | || (k >= gmmu_pte_kind_v8z24_ms4_vc12_1zv_v() && | ||
348 | k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()) | ||
349 | || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && | ||
350 | k <= gmmu_pte_kind_v8z24_ms8_vc24_4cszv_v()) | ||
351 | || (k >= gmmu_pte_kind_z24s8_1z_v() && | ||
352 | k <= gmmu_pte_kind_z24s8_ms16_4cszv_v()) | ||
353 | || (k >= gmmu_pte_kind_z24v8_ms4_vc12_1zv_v() && | ||
354 | k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()) | ||
355 | || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() && | ||
356 | k <= gmmu_pte_kind_z24v8_ms8_vc24_4cszv_v()) | ||
357 | || (k >= gmmu_pte_kind_zf32_1z_v() && | ||
358 | k <= gmmu_pte_kind_zf32_ms16_2cz_v()) | ||
359 | || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1cs_v() && | ||
360 | k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v()) | ||
361 | || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1zv_v() && | ||
362 | k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v()) | ||
363 | || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1cs_v() && | ||
364 | k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v()) | ||
365 | || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1zv_v() && | ||
366 | k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v()) | ||
367 | || (k >= gmmu_pte_kind_zf32_x24s8_1cs_v() && | ||
368 | k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v()) | ||
369 | || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() && | ||
370 | k <= gmmu_pte_kind_c32_ms2_2cbr_v()) | ||
371 | || (k == gmmu_pte_kind_c32_ms2_2cra_v()) | ||
372 | || (k >= gmmu_pte_kind_c32_ms4_2c_v() && | ||
373 | k <= gmmu_pte_kind_c64_ms2_2cbr_v()) | ||
374 | || (k == gmmu_pte_kind_c64_ms2_2cra_v()) | ||
375 | || (k >= gmmu_pte_kind_c64_ms4_2c_v() && | ||
376 | k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v()); | ||
62 | } | 377 | } |
63 | 378 | ||
64 | static bool gp10b_kind_zbc(u8 k) | 379 | static noinline_for_stack bool gp10b_kind_zbc(u8 k) |
65 | { | 380 | { |
66 | return (k >= gmmu_pte_kind_z16_2cz_v() && | 381 | return /* From gp10b */ |
67 | k <= gmmu_pte_kind_z16_ms8_2cz_v()) || | 382 | (k >= gmmu_pte_kind_z16_2cz_v() && |
68 | k == gmmu_pte_kind_z16_ms16_2cz_v() || | 383 | k <= gmmu_pte_kind_z16_ms8_2cz_v()) |
69 | k == gmmu_pte_kind_c32_ms4_4cbra_v() || | 384 | || (k == gmmu_pte_kind_z16_ms16_2cz_v()) |
70 | k == gmmu_pte_kind_c64_ms4_4cbra_v(); | 385 | || (k == gmmu_pte_kind_c32_ms4_4cbra_v()) |
386 | || (k == gmmu_pte_kind_c64_ms4_4cbra_v()) | ||
387 | /* From gm20b */ | ||
388 | || (k >= gmmu_pte_kind_s8_v() && | ||
389 | k <= gmmu_pte_kind_s8_2s_v()) | ||
390 | /* From gk20a */ | ||
391 | || (k >= gmmu_pte_kind_z16_2c_v() && | ||
392 | k <= gmmu_pte_kind_z16_ms16_2c_v()) | ||
393 | || (k >= gmmu_pte_kind_z16_4cz_v() && | ||
394 | k <= gmmu_pte_kind_z16_ms16_4cz_v()) | ||
395 | || (k >= gmmu_pte_kind_s8z24_2cz_v() && | ||
396 | k <= gmmu_pte_kind_s8z24_ms16_4cszv_v()) | ||
397 | || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2cs_v() && | ||
398 | k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()) | ||
399 | || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && | ||
400 | k <= gmmu_pte_kind_v8z24_ms8_vc24_2czv_v()) | ||
401 | || (k >= gmmu_pte_kind_v8z24_ms4_vc12_4cszv_v() && | ||
402 | k <= gmmu_pte_kind_v8z24_ms8_vc24_4cszv_v()) | ||
403 | || (k >= gmmu_pte_kind_z24s8_2cs_v() && | ||
404 | k <= gmmu_pte_kind_z24s8_ms16_4cszv_v()) | ||
405 | || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2cs_v() && | ||
406 | k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()) | ||
407 | || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() && | ||
408 | k <= gmmu_pte_kind_z24v8_ms8_vc24_2czv_v()) | ||
409 | || (k >= gmmu_pte_kind_z24v8_ms4_vc12_4cszv_v() && | ||
410 | k <= gmmu_pte_kind_z24v8_ms8_vc24_4cszv_v()) | ||
411 | || (k >= gmmu_pte_kind_zf32_2cs_v() && | ||
412 | k <= gmmu_pte_kind_zf32_ms16_2cz_v()) | ||
413 | || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1cs_v() && | ||
414 | k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v()) | ||
415 | || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1czv_v() && | ||
416 | k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v()) | ||
417 | || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1cs_v() && | ||
418 | k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v()) | ||
419 | || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1czv_v() && | ||
420 | k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v()) | ||
421 | || (k >= gmmu_pte_kind_zf32_x24s8_1cs_v() && | ||
422 | k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v()) | ||
423 | || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() && | ||
424 | k <= gmmu_pte_kind_c32_2cra_v()) | ||
425 | || (k >= gmmu_pte_kind_c32_ms2_2c_v() && | ||
426 | k <= gmmu_pte_kind_c32_ms2_2cbr_v()) | ||
427 | || (k == gmmu_pte_kind_c32_ms2_2cra_v()) | ||
428 | || (k >= gmmu_pte_kind_c32_ms4_2c_v() && | ||
429 | k <= gmmu_pte_kind_c32_ms4_2cra_v()) | ||
430 | || (k >= gmmu_pte_kind_c32_ms8_ms16_2c_v() && | ||
431 | k <= gmmu_pte_kind_c64_2cra_v()) | ||
432 | || (k >= gmmu_pte_kind_c64_ms2_2c_v() && | ||
433 | k <= gmmu_pte_kind_c64_ms2_2cbr_v()) | ||
434 | || (k == gmmu_pte_kind_c64_ms2_2cra_v()) | ||
435 | || (k >= gmmu_pte_kind_c64_ms4_2c_v() && | ||
436 | k <= gmmu_pte_kind_c64_ms4_2cra_v()) | ||
437 | || (k >= gmmu_pte_kind_c64_ms8_ms16_2c_v() && | ||
438 | k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v()); | ||
71 | } | 439 | } |
72 | 440 | ||
73 | static void gp10b_init_kind_attr(void) | 441 | static void gp10b_init_kind_attr(void) |
74 | { | 442 | { |
75 | u16 k; | 443 | u16 k; |
76 | 444 | ||
77 | for (k = 0; k < 256; k++) { | 445 | for (k = 0; k < NV_KIND_ATTR_SIZE; k++) { |
78 | if (gp10b_kind_supported((u8)k)) | 446 | if (gp10b_kind_supported((u8)k)) |
79 | gk20a_kind_attr[k] |= GK20A_KIND_ATTR_SUPPORTED; | 447 | gk20a_kind_attr[k] |= GK20A_KIND_ATTR_SUPPORTED; |
80 | if (gp10b_kind_compressible((u8)k)) | 448 | if (gp10b_kind_compressible((u8)k)) |
81 | gk20a_kind_attr[k] |= GK20A_KIND_ATTR_COMPRESSIBLE; | 449 | gk20a_kind_attr[k] |= GK20A_KIND_ATTR_COMPRESSIBLE; |
82 | if (gp10b_kind_z((u8)k)) | 450 | if (gp10b_kind_z((u8)k)) |
83 | gk20a_kind_attr[k] |= GK20A_KIND_ATTR_Z; | 451 | gk20a_kind_attr[k] |= GK20A_KIND_ATTR_Z; |
452 | if (gp10b_kind_c((u8)k)) | ||
453 | gk20a_kind_attr[k] |= GK20A_KIND_ATTR_C; | ||
84 | if (gp10b_kind_zbc((u8)k)) | 454 | if (gp10b_kind_zbc((u8)k)) |
85 | gk20a_kind_attr[k] |= GK20A_KIND_ATTR_ZBC; | 455 | gk20a_kind_attr[k] |= GK20A_KIND_ATTR_ZBC; |
86 | } | 456 | } |