1 /*
2  * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 #ifndef _REO_UNBLOCK_CACHE_STATUS_H_
20 #define _REO_UNBLOCK_CACHE_STATUS_H_
21 #if !defined(__ASSEMBLER__)
22 #endif
23 
24 #include "uniform_reo_status_header.h"
25 
26 // ################ START SUMMARY #################
27 //
28 //	Dword	Fields
29 //	0-1	struct uniform_reo_status_header status_header;
30 //	2	error_detected[0], unblock_type[1], reserved_2a[31:2]
31 //	3	reserved_3a[31:0]
32 //	4	reserved_4a[31:0]
33 //	5	reserved_5a[31:0]
34 //	6	reserved_6a[31:0]
35 //	7	reserved_7a[31:0]
36 //	8	reserved_8a[31:0]
37 //	9	reserved_9a[31:0]
38 //	10	reserved_10a[31:0]
39 //	11	reserved_11a[31:0]
40 //	12	reserved_12a[31:0]
41 //	13	reserved_13a[31:0]
42 //	14	reserved_14a[31:0]
43 //	15	reserved_15a[31:0]
44 //	16	reserved_16a[31:0]
45 //	17	reserved_17a[31:0]
46 //	18	reserved_18a[31:0]
47 //	19	reserved_19a[31:0]
48 //	20	reserved_20a[31:0]
49 //	21	reserved_21a[31:0]
50 //	22	reserved_22a[31:0]
51 //	23	reserved_23a[31:0]
52 //	24	reserved_24a[27:0], looping_count[31:28]
53 //
54 // ################ END SUMMARY #################
55 
56 #define NUM_OF_DWORDS_REO_UNBLOCK_CACHE_STATUS 25
57 
58 struct reo_unblock_cache_status {
59     struct            uniform_reo_status_header                       status_header;
60              uint32_t error_detected                  :  1, //[0]
61                       unblock_type                    :  1, //[1]
62                       reserved_2a                     : 30; //[31:2]
63              uint32_t reserved_3a                     : 32; //[31:0]
64              uint32_t reserved_4a                     : 32; //[31:0]
65              uint32_t reserved_5a                     : 32; //[31:0]
66              uint32_t reserved_6a                     : 32; //[31:0]
67              uint32_t reserved_7a                     : 32; //[31:0]
68              uint32_t reserved_8a                     : 32; //[31:0]
69              uint32_t reserved_9a                     : 32; //[31:0]
70              uint32_t reserved_10a                    : 32; //[31:0]
71              uint32_t reserved_11a                    : 32; //[31:0]
72              uint32_t reserved_12a                    : 32; //[31:0]
73              uint32_t reserved_13a                    : 32; //[31:0]
74              uint32_t reserved_14a                    : 32; //[31:0]
75              uint32_t reserved_15a                    : 32; //[31:0]
76              uint32_t reserved_16a                    : 32; //[31:0]
77              uint32_t reserved_17a                    : 32; //[31:0]
78              uint32_t reserved_18a                    : 32; //[31:0]
79              uint32_t reserved_19a                    : 32; //[31:0]
80              uint32_t reserved_20a                    : 32; //[31:0]
81              uint32_t reserved_21a                    : 32; //[31:0]
82              uint32_t reserved_22a                    : 32; //[31:0]
83              uint32_t reserved_23a                    : 32; //[31:0]
84              uint32_t reserved_24a                    : 28, //[27:0]
85                       looping_count                   :  4; //[31:28]
86 };
87 
88 /*
89 
90 struct uniform_reo_status_header status_header
91 
92 			Consumer: SW
93 
94 			Producer: REO
95 
96 
97 
98 			Details that can link this status with the original
99 			command. It also contains info on how long REO took to
100 			execute this command.
101 
102 error_detected
103 
104 			Status for blocking resource handling
105 
106 
107 
108 			0: No error has been detected while executing this
109 			command
110 
111 			1: The blocking resource was not in use, and therefor it
112 			could not be 'unblocked'
113 
114 unblock_type
115 
116 			Reference to the type of Unblock command type...
117 
118 
119 
120 			<enum 0 unblock_resource_index> Unblock a blocking
121 			resource
122 
123 
124 
125 			<enum 1 unblock_cache> The entire cache usage is
126 			unblock.
127 
128 
129 
130 			<legal all>
131 
132 reserved_2a
133 
134 			<legal 0>
135 
136 reserved_3a
137 
138 			<legal 0>
139 
140 reserved_4a
141 
142 			<legal 0>
143 
144 reserved_5a
145 
146 			<legal 0>
147 
148 reserved_6a
149 
150 			<legal 0>
151 
152 reserved_7a
153 
154 			<legal 0>
155 
156 reserved_8a
157 
158 			<legal 0>
159 
160 reserved_9a
161 
162 			<legal 0>
163 
164 reserved_10a
165 
166 			<legal 0>
167 
168 reserved_11a
169 
170 			<legal 0>
171 
172 reserved_12a
173 
174 			<legal 0>
175 
176 reserved_13a
177 
178 			<legal 0>
179 
180 reserved_14a
181 
182 			<legal 0>
183 
184 reserved_15a
185 
186 			<legal 0>
187 
188 reserved_16a
189 
190 			<legal 0>
191 
192 reserved_17a
193 
194 			<legal 0>
195 
196 reserved_18a
197 
198 			<legal 0>
199 
200 reserved_19a
201 
202 			<legal 0>
203 
204 reserved_20a
205 
206 			<legal 0>
207 
208 reserved_21a
209 
210 			<legal 0>
211 
212 reserved_22a
213 
214 			<legal 0>
215 
216 reserved_23a
217 
218 			<legal 0>
219 
220 reserved_24a
221 
222 			<legal 0>
223 
224 looping_count
225 
226 			A count value that indicates the number of times the
227 			producer of entries into this Ring has looped around the
228 			ring.
229 
230 			At initialization time, this value is set to 0. On the
231 			first loop, this value is set to 1. After the max value is
232 			reached allowed by the number of bits for this field, the
233 			count value continues with 0 again.
234 
235 
236 
237 			In case SW is the consumer of the ring entries, it can
238 			use this field to figure out up to where the producer of
239 			entries has created new entries. This eliminates the need to
240 			check where the head pointer' of the ring is located once
241 			the SW starts processing an interrupt indicating that new
242 			entries have been put into this ring...
243 
244 
245 
246 			Also note that SW if it wants only needs to look at the
247 			LSB bit of this count value.
248 
249 			<legal all>
250 */
251 
252 #define REO_UNBLOCK_CACHE_STATUS_0_UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_OFFSET 0x00000000
253 #define REO_UNBLOCK_CACHE_STATUS_0_UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_LSB 28
254 #define REO_UNBLOCK_CACHE_STATUS_0_UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_MASK 0xffffffff
255 #define REO_UNBLOCK_CACHE_STATUS_1_UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_OFFSET 0x00000004
256 #define REO_UNBLOCK_CACHE_STATUS_1_UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_LSB 28
257 #define REO_UNBLOCK_CACHE_STATUS_1_UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_MASK 0xffffffff
258 
259 /* Description		REO_UNBLOCK_CACHE_STATUS_2_ERROR_DETECTED
260 
261 			Status for blocking resource handling
262 
263 
264 
265 			0: No error has been detected while executing this
266 			command
267 
268 			1: The blocking resource was not in use, and therefor it
269 			could not be 'unblocked'
270 */
271 #define REO_UNBLOCK_CACHE_STATUS_2_ERROR_DETECTED_OFFSET             0x00000008
272 #define REO_UNBLOCK_CACHE_STATUS_2_ERROR_DETECTED_LSB                0
273 #define REO_UNBLOCK_CACHE_STATUS_2_ERROR_DETECTED_MASK               0x00000001
274 
275 /* Description		REO_UNBLOCK_CACHE_STATUS_2_UNBLOCK_TYPE
276 
277 			Reference to the type of Unblock command type...
278 
279 
280 
281 			<enum 0 unblock_resource_index> Unblock a blocking
282 			resource
283 
284 
285 
286 			<enum 1 unblock_cache> The entire cache usage is
287 			unblock.
288 
289 
290 
291 			<legal all>
292 */
293 #define REO_UNBLOCK_CACHE_STATUS_2_UNBLOCK_TYPE_OFFSET               0x00000008
294 #define REO_UNBLOCK_CACHE_STATUS_2_UNBLOCK_TYPE_LSB                  1
295 #define REO_UNBLOCK_CACHE_STATUS_2_UNBLOCK_TYPE_MASK                 0x00000002
296 
297 /* Description		REO_UNBLOCK_CACHE_STATUS_2_RESERVED_2A
298 
299 			<legal 0>
300 */
301 #define REO_UNBLOCK_CACHE_STATUS_2_RESERVED_2A_OFFSET                0x00000008
302 #define REO_UNBLOCK_CACHE_STATUS_2_RESERVED_2A_LSB                   2
303 #define REO_UNBLOCK_CACHE_STATUS_2_RESERVED_2A_MASK                  0xfffffffc
304 
305 /* Description		REO_UNBLOCK_CACHE_STATUS_3_RESERVED_3A
306 
307 			<legal 0>
308 */
309 #define REO_UNBLOCK_CACHE_STATUS_3_RESERVED_3A_OFFSET                0x0000000c
310 #define REO_UNBLOCK_CACHE_STATUS_3_RESERVED_3A_LSB                   0
311 #define REO_UNBLOCK_CACHE_STATUS_3_RESERVED_3A_MASK                  0xffffffff
312 
313 /* Description		REO_UNBLOCK_CACHE_STATUS_4_RESERVED_4A
314 
315 			<legal 0>
316 */
317 #define REO_UNBLOCK_CACHE_STATUS_4_RESERVED_4A_OFFSET                0x00000010
318 #define REO_UNBLOCK_CACHE_STATUS_4_RESERVED_4A_LSB                   0
319 #define REO_UNBLOCK_CACHE_STATUS_4_RESERVED_4A_MASK                  0xffffffff
320 
321 /* Description		REO_UNBLOCK_CACHE_STATUS_5_RESERVED_5A
322 
323 			<legal 0>
324 */
325 #define REO_UNBLOCK_CACHE_STATUS_5_RESERVED_5A_OFFSET                0x00000014
326 #define REO_UNBLOCK_CACHE_STATUS_5_RESERVED_5A_LSB                   0
327 #define REO_UNBLOCK_CACHE_STATUS_5_RESERVED_5A_MASK                  0xffffffff
328 
329 /* Description		REO_UNBLOCK_CACHE_STATUS_6_RESERVED_6A
330 
331 			<legal 0>
332 */
333 #define REO_UNBLOCK_CACHE_STATUS_6_RESERVED_6A_OFFSET                0x00000018
334 #define REO_UNBLOCK_CACHE_STATUS_6_RESERVED_6A_LSB                   0
335 #define REO_UNBLOCK_CACHE_STATUS_6_RESERVED_6A_MASK                  0xffffffff
336 
337 /* Description		REO_UNBLOCK_CACHE_STATUS_7_RESERVED_7A
338 
339 			<legal 0>
340 */
341 #define REO_UNBLOCK_CACHE_STATUS_7_RESERVED_7A_OFFSET                0x0000001c
342 #define REO_UNBLOCK_CACHE_STATUS_7_RESERVED_7A_LSB                   0
343 #define REO_UNBLOCK_CACHE_STATUS_7_RESERVED_7A_MASK                  0xffffffff
344 
345 /* Description		REO_UNBLOCK_CACHE_STATUS_8_RESERVED_8A
346 
347 			<legal 0>
348 */
349 #define REO_UNBLOCK_CACHE_STATUS_8_RESERVED_8A_OFFSET                0x00000020
350 #define REO_UNBLOCK_CACHE_STATUS_8_RESERVED_8A_LSB                   0
351 #define REO_UNBLOCK_CACHE_STATUS_8_RESERVED_8A_MASK                  0xffffffff
352 
353 /* Description		REO_UNBLOCK_CACHE_STATUS_9_RESERVED_9A
354 
355 			<legal 0>
356 */
357 #define REO_UNBLOCK_CACHE_STATUS_9_RESERVED_9A_OFFSET                0x00000024
358 #define REO_UNBLOCK_CACHE_STATUS_9_RESERVED_9A_LSB                   0
359 #define REO_UNBLOCK_CACHE_STATUS_9_RESERVED_9A_MASK                  0xffffffff
360 
361 /* Description		REO_UNBLOCK_CACHE_STATUS_10_RESERVED_10A
362 
363 			<legal 0>
364 */
365 #define REO_UNBLOCK_CACHE_STATUS_10_RESERVED_10A_OFFSET              0x00000028
366 #define REO_UNBLOCK_CACHE_STATUS_10_RESERVED_10A_LSB                 0
367 #define REO_UNBLOCK_CACHE_STATUS_10_RESERVED_10A_MASK                0xffffffff
368 
369 /* Description		REO_UNBLOCK_CACHE_STATUS_11_RESERVED_11A
370 
371 			<legal 0>
372 */
373 #define REO_UNBLOCK_CACHE_STATUS_11_RESERVED_11A_OFFSET              0x0000002c
374 #define REO_UNBLOCK_CACHE_STATUS_11_RESERVED_11A_LSB                 0
375 #define REO_UNBLOCK_CACHE_STATUS_11_RESERVED_11A_MASK                0xffffffff
376 
377 /* Description		REO_UNBLOCK_CACHE_STATUS_12_RESERVED_12A
378 
379 			<legal 0>
380 */
381 #define REO_UNBLOCK_CACHE_STATUS_12_RESERVED_12A_OFFSET              0x00000030
382 #define REO_UNBLOCK_CACHE_STATUS_12_RESERVED_12A_LSB                 0
383 #define REO_UNBLOCK_CACHE_STATUS_12_RESERVED_12A_MASK                0xffffffff
384 
385 /* Description		REO_UNBLOCK_CACHE_STATUS_13_RESERVED_13A
386 
387 			<legal 0>
388 */
389 #define REO_UNBLOCK_CACHE_STATUS_13_RESERVED_13A_OFFSET              0x00000034
390 #define REO_UNBLOCK_CACHE_STATUS_13_RESERVED_13A_LSB                 0
391 #define REO_UNBLOCK_CACHE_STATUS_13_RESERVED_13A_MASK                0xffffffff
392 
393 /* Description		REO_UNBLOCK_CACHE_STATUS_14_RESERVED_14A
394 
395 			<legal 0>
396 */
397 #define REO_UNBLOCK_CACHE_STATUS_14_RESERVED_14A_OFFSET              0x00000038
398 #define REO_UNBLOCK_CACHE_STATUS_14_RESERVED_14A_LSB                 0
399 #define REO_UNBLOCK_CACHE_STATUS_14_RESERVED_14A_MASK                0xffffffff
400 
401 /* Description		REO_UNBLOCK_CACHE_STATUS_15_RESERVED_15A
402 
403 			<legal 0>
404 */
405 #define REO_UNBLOCK_CACHE_STATUS_15_RESERVED_15A_OFFSET              0x0000003c
406 #define REO_UNBLOCK_CACHE_STATUS_15_RESERVED_15A_LSB                 0
407 #define REO_UNBLOCK_CACHE_STATUS_15_RESERVED_15A_MASK                0xffffffff
408 
409 /* Description		REO_UNBLOCK_CACHE_STATUS_16_RESERVED_16A
410 
411 			<legal 0>
412 */
413 #define REO_UNBLOCK_CACHE_STATUS_16_RESERVED_16A_OFFSET              0x00000040
414 #define REO_UNBLOCK_CACHE_STATUS_16_RESERVED_16A_LSB                 0
415 #define REO_UNBLOCK_CACHE_STATUS_16_RESERVED_16A_MASK                0xffffffff
416 
417 /* Description		REO_UNBLOCK_CACHE_STATUS_17_RESERVED_17A
418 
419 			<legal 0>
420 */
421 #define REO_UNBLOCK_CACHE_STATUS_17_RESERVED_17A_OFFSET              0x00000044
422 #define REO_UNBLOCK_CACHE_STATUS_17_RESERVED_17A_LSB                 0
423 #define REO_UNBLOCK_CACHE_STATUS_17_RESERVED_17A_MASK                0xffffffff
424 
425 /* Description		REO_UNBLOCK_CACHE_STATUS_18_RESERVED_18A
426 
427 			<legal 0>
428 */
429 #define REO_UNBLOCK_CACHE_STATUS_18_RESERVED_18A_OFFSET              0x00000048
430 #define REO_UNBLOCK_CACHE_STATUS_18_RESERVED_18A_LSB                 0
431 #define REO_UNBLOCK_CACHE_STATUS_18_RESERVED_18A_MASK                0xffffffff
432 
433 /* Description		REO_UNBLOCK_CACHE_STATUS_19_RESERVED_19A
434 
435 			<legal 0>
436 */
437 #define REO_UNBLOCK_CACHE_STATUS_19_RESERVED_19A_OFFSET              0x0000004c
438 #define REO_UNBLOCK_CACHE_STATUS_19_RESERVED_19A_LSB                 0
439 #define REO_UNBLOCK_CACHE_STATUS_19_RESERVED_19A_MASK                0xffffffff
440 
441 /* Description		REO_UNBLOCK_CACHE_STATUS_20_RESERVED_20A
442 
443 			<legal 0>
444 */
445 #define REO_UNBLOCK_CACHE_STATUS_20_RESERVED_20A_OFFSET              0x00000050
446 #define REO_UNBLOCK_CACHE_STATUS_20_RESERVED_20A_LSB                 0
447 #define REO_UNBLOCK_CACHE_STATUS_20_RESERVED_20A_MASK                0xffffffff
448 
449 /* Description		REO_UNBLOCK_CACHE_STATUS_21_RESERVED_21A
450 
451 			<legal 0>
452 */
453 #define REO_UNBLOCK_CACHE_STATUS_21_RESERVED_21A_OFFSET              0x00000054
454 #define REO_UNBLOCK_CACHE_STATUS_21_RESERVED_21A_LSB                 0
455 #define REO_UNBLOCK_CACHE_STATUS_21_RESERVED_21A_MASK                0xffffffff
456 
457 /* Description		REO_UNBLOCK_CACHE_STATUS_22_RESERVED_22A
458 
459 			<legal 0>
460 */
461 #define REO_UNBLOCK_CACHE_STATUS_22_RESERVED_22A_OFFSET              0x00000058
462 #define REO_UNBLOCK_CACHE_STATUS_22_RESERVED_22A_LSB                 0
463 #define REO_UNBLOCK_CACHE_STATUS_22_RESERVED_22A_MASK                0xffffffff
464 
465 /* Description		REO_UNBLOCK_CACHE_STATUS_23_RESERVED_23A
466 
467 			<legal 0>
468 */
469 #define REO_UNBLOCK_CACHE_STATUS_23_RESERVED_23A_OFFSET              0x0000005c
470 #define REO_UNBLOCK_CACHE_STATUS_23_RESERVED_23A_LSB                 0
471 #define REO_UNBLOCK_CACHE_STATUS_23_RESERVED_23A_MASK                0xffffffff
472 
473 /* Description		REO_UNBLOCK_CACHE_STATUS_24_RESERVED_24A
474 
475 			<legal 0>
476 */
477 #define REO_UNBLOCK_CACHE_STATUS_24_RESERVED_24A_OFFSET              0x00000060
478 #define REO_UNBLOCK_CACHE_STATUS_24_RESERVED_24A_LSB                 0
479 #define REO_UNBLOCK_CACHE_STATUS_24_RESERVED_24A_MASK                0x0fffffff
480 
481 /* Description		REO_UNBLOCK_CACHE_STATUS_24_LOOPING_COUNT
482 
483 			A count value that indicates the number of times the
484 			producer of entries into this Ring has looped around the
485 			ring.
486 
487 			At initialization time, this value is set to 0. On the
488 			first loop, this value is set to 1. After the max value is
489 			reached allowed by the number of bits for this field, the
490 			count value continues with 0 again.
491 
492 
493 
494 			In case SW is the consumer of the ring entries, it can
495 			use this field to figure out up to where the producer of
496 			entries has created new entries. This eliminates the need to
497 			check where the head pointer' of the ring is located once
498 			the SW starts processing an interrupt indicating that new
499 			entries have been put into this ring...
500 
501 
502 
503 			Also note that SW if it wants only needs to look at the
504 			LSB bit of this count value.
505 
506 			<legal all>
507 */
508 #define REO_UNBLOCK_CACHE_STATUS_24_LOOPING_COUNT_OFFSET             0x00000060
509 #define REO_UNBLOCK_CACHE_STATUS_24_LOOPING_COUNT_LSB                28
510 #define REO_UNBLOCK_CACHE_STATUS_24_LOOPING_COUNT_MASK               0xf0000000
511 
512 
513 #endif // _REO_UNBLOCK_CACHE_STATUS_H_
514