1  /*
2   * Copyright (c) 2020, The Linux Foundation. All rights reserved.
3   *
4   * Permission to use, copy, modify, and/or distribute this software for any
5   * purpose with or without fee is hereby granted, provided that the above
6   * copyright notice and this permission notice appear in all copies.
7   *
8   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9   * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10   * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11   * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12   * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13   * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14   * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15   */
16  
17  #ifndef _REO_UNBLOCK_CACHE_H_
18  #define _REO_UNBLOCK_CACHE_H_
19  #if !defined(__ASSEMBLER__)
20  #endif
21  
22  #include "uniform_reo_cmd_header.h"
23  
24  // ################ START SUMMARY #################
25  //
26  //	Dword	Fields
27  //	0	struct uniform_reo_cmd_header cmd_header;
28  //	1	unblock_type[0], cache_block_resource_index[2:1], reserved_1a[31:3]
29  //	2	reserved_2a[31:0]
30  //	3	reserved_3a[31:0]
31  //	4	reserved_4a[31:0]
32  //	5	reserved_5a[31:0]
33  //	6	reserved_6a[31:0]
34  //	7	reserved_7a[31:0]
35  //	8	reserved_8a[31:0]
36  //
37  // ################ END SUMMARY #################
38  
39  #define NUM_OF_DWORDS_REO_UNBLOCK_CACHE 9
40  
41  struct reo_unblock_cache {
42      struct            uniform_reo_cmd_header                       cmd_header;
43               uint32_t unblock_type                    :  1, //[0]
44                        cache_block_resource_index      :  2, //[2:1]
45                        reserved_1a                     : 29; //[31:3]
46               uint32_t reserved_2a                     : 32; //[31:0]
47               uint32_t reserved_3a                     : 32; //[31:0]
48               uint32_t reserved_4a                     : 32; //[31:0]
49               uint32_t reserved_5a                     : 32; //[31:0]
50               uint32_t reserved_6a                     : 32; //[31:0]
51               uint32_t reserved_7a                     : 32; //[31:0]
52               uint32_t reserved_8a                     : 32; //[31:0]
53  };
54  
55  /*
56  
57  struct uniform_reo_cmd_header cmd_header
58  
59  			Consumer: REO
60  
61  			Producer: SW
62  
63  
64  
65  			Details for command execution tracking purposes.
66  
67  unblock_type
68  
69  			Unblock type
70  
71  
72  
73  			<enum 0 unblock_resource_index> Unblock a block
74  			resource, whose index is given in field
75  			'cache_block_resource_index'.
76  
77  			If the indicated blocking resource is not in use (=> not
78  			blocking an address at the moment), the command status will
79  			indicate an error.
80  
81  
82  
83  			<enum 1 unblock_cache> The entire cache usage is
84  			unblocked.
85  
86  			If the entire cache is not in a blocked mode at the
87  			moment this command is received, the command status will
88  			indicate an error.
89  
90  			Note that unlocking the entire cache has no changes to
91  			the current settings of the blocking resource settings
92  
93  
94  
95  			<legal all>
96  
97  cache_block_resource_index
98  
99  			Field not valid when field Unblock_type is set to
100  			unblock_cache.
101  
102  
103  
104  			Indicates which of the four blocking resources in REO
105  			should be released from blocking a (descriptor) address.
106  
107  			<legal all>
108  
109  reserved_1a
110  
111  			<legal 0>
112  
113  reserved_2a
114  
115  			<legal 0>
116  
117  reserved_3a
118  
119  			<legal 0>
120  
121  reserved_4a
122  
123  			<legal 0>
124  
125  reserved_5a
126  
127  			<legal 0>
128  
129  reserved_6a
130  
131  			<legal 0>
132  
133  reserved_7a
134  
135  			<legal 0>
136  
137  reserved_8a
138  
139  			<legal 0>
140  */
141  
142  
143   /* EXTERNAL REFERENCE : struct uniform_reo_cmd_header cmd_header */
144  
145  
146  /* Description		REO_UNBLOCK_CACHE_0_CMD_HEADER_REO_CMD_NUMBER
147  
148  			Consumer: REO/SW/DEBUG
149  
150  			Producer: SW
151  
152  
153  
154  			This number can be used by SW to track, identify and
155  			link the created commands with the command statusses
156  
157  
158  
159  
160  
161  			<legal all>
162  */
163  #define REO_UNBLOCK_CACHE_0_CMD_HEADER_REO_CMD_NUMBER_OFFSET         0x00000000
164  #define REO_UNBLOCK_CACHE_0_CMD_HEADER_REO_CMD_NUMBER_LSB            0
165  #define REO_UNBLOCK_CACHE_0_CMD_HEADER_REO_CMD_NUMBER_MASK           0x0000ffff
166  
167  /* Description		REO_UNBLOCK_CACHE_0_CMD_HEADER_REO_STATUS_REQUIRED
168  
169  			Consumer: REO
170  
171  			Producer: SW
172  
173  
174  
175  			<enum 0 NoStatus> REO does not need to generate a status
176  			TLV for the execution of this command
177  
178  			<enum 1 StatusRequired> REO shall generate a status TLV
179  			for the execution of this command
180  
181  
182  
183  			<legal all>
184  */
185  #define REO_UNBLOCK_CACHE_0_CMD_HEADER_REO_STATUS_REQUIRED_OFFSET    0x00000000
186  #define REO_UNBLOCK_CACHE_0_CMD_HEADER_REO_STATUS_REQUIRED_LSB       16
187  #define REO_UNBLOCK_CACHE_0_CMD_HEADER_REO_STATUS_REQUIRED_MASK      0x00010000
188  
189  /* Description		REO_UNBLOCK_CACHE_0_CMD_HEADER_RESERVED_0A
190  
191  			<legal 0>
192  */
193  #define REO_UNBLOCK_CACHE_0_CMD_HEADER_RESERVED_0A_OFFSET            0x00000000
194  #define REO_UNBLOCK_CACHE_0_CMD_HEADER_RESERVED_0A_LSB               17
195  #define REO_UNBLOCK_CACHE_0_CMD_HEADER_RESERVED_0A_MASK              0xfffe0000
196  
197  /* Description		REO_UNBLOCK_CACHE_1_UNBLOCK_TYPE
198  
199  			Unblock type
200  
201  
202  
203  			<enum 0 unblock_resource_index> Unblock a block
204  			resource, whose index is given in field
205  			'cache_block_resource_index'.
206  
207  			If the indicated blocking resource is not in use (=> not
208  			blocking an address at the moment), the command status will
209  			indicate an error.
210  
211  
212  
213  			<enum 1 unblock_cache> The entire cache usage is
214  			unblocked.
215  
216  			If the entire cache is not in a blocked mode at the
217  			moment this command is received, the command status will
218  			indicate an error.
219  
220  			Note that unlocking the entire cache has no changes to
221  			the current settings of the blocking resource settings
222  
223  
224  
225  			<legal all>
226  */
227  #define REO_UNBLOCK_CACHE_1_UNBLOCK_TYPE_OFFSET                      0x00000004
228  #define REO_UNBLOCK_CACHE_1_UNBLOCK_TYPE_LSB                         0
229  #define REO_UNBLOCK_CACHE_1_UNBLOCK_TYPE_MASK                        0x00000001
230  
231  /* Description		REO_UNBLOCK_CACHE_1_CACHE_BLOCK_RESOURCE_INDEX
232  
233  			Field not valid when field Unblock_type is set to
234  			unblock_cache.
235  
236  
237  
238  			Indicates which of the four blocking resources in REO
239  			should be released from blocking a (descriptor) address.
240  
241  			<legal all>
242  */
243  #define REO_UNBLOCK_CACHE_1_CACHE_BLOCK_RESOURCE_INDEX_OFFSET        0x00000004
244  #define REO_UNBLOCK_CACHE_1_CACHE_BLOCK_RESOURCE_INDEX_LSB           1
245  #define REO_UNBLOCK_CACHE_1_CACHE_BLOCK_RESOURCE_INDEX_MASK          0x00000006
246  
247  /* Description		REO_UNBLOCK_CACHE_1_RESERVED_1A
248  
249  			<legal 0>
250  */
251  #define REO_UNBLOCK_CACHE_1_RESERVED_1A_OFFSET                       0x00000004
252  #define REO_UNBLOCK_CACHE_1_RESERVED_1A_LSB                          3
253  #define REO_UNBLOCK_CACHE_1_RESERVED_1A_MASK                         0xfffffff8
254  
255  /* Description		REO_UNBLOCK_CACHE_2_RESERVED_2A
256  
257  			<legal 0>
258  */
259  #define REO_UNBLOCK_CACHE_2_RESERVED_2A_OFFSET                       0x00000008
260  #define REO_UNBLOCK_CACHE_2_RESERVED_2A_LSB                          0
261  #define REO_UNBLOCK_CACHE_2_RESERVED_2A_MASK                         0xffffffff
262  
263  /* Description		REO_UNBLOCK_CACHE_3_RESERVED_3A
264  
265  			<legal 0>
266  */
267  #define REO_UNBLOCK_CACHE_3_RESERVED_3A_OFFSET                       0x0000000c
268  #define REO_UNBLOCK_CACHE_3_RESERVED_3A_LSB                          0
269  #define REO_UNBLOCK_CACHE_3_RESERVED_3A_MASK                         0xffffffff
270  
271  /* Description		REO_UNBLOCK_CACHE_4_RESERVED_4A
272  
273  			<legal 0>
274  */
275  #define REO_UNBLOCK_CACHE_4_RESERVED_4A_OFFSET                       0x00000010
276  #define REO_UNBLOCK_CACHE_4_RESERVED_4A_LSB                          0
277  #define REO_UNBLOCK_CACHE_4_RESERVED_4A_MASK                         0xffffffff
278  
279  /* Description		REO_UNBLOCK_CACHE_5_RESERVED_5A
280  
281  			<legal 0>
282  */
283  #define REO_UNBLOCK_CACHE_5_RESERVED_5A_OFFSET                       0x00000014
284  #define REO_UNBLOCK_CACHE_5_RESERVED_5A_LSB                          0
285  #define REO_UNBLOCK_CACHE_5_RESERVED_5A_MASK                         0xffffffff
286  
287  /* Description		REO_UNBLOCK_CACHE_6_RESERVED_6A
288  
289  			<legal 0>
290  */
291  #define REO_UNBLOCK_CACHE_6_RESERVED_6A_OFFSET                       0x00000018
292  #define REO_UNBLOCK_CACHE_6_RESERVED_6A_LSB                          0
293  #define REO_UNBLOCK_CACHE_6_RESERVED_6A_MASK                         0xffffffff
294  
295  /* Description		REO_UNBLOCK_CACHE_7_RESERVED_7A
296  
297  			<legal 0>
298  */
299  #define REO_UNBLOCK_CACHE_7_RESERVED_7A_OFFSET                       0x0000001c
300  #define REO_UNBLOCK_CACHE_7_RESERVED_7A_LSB                          0
301  #define REO_UNBLOCK_CACHE_7_RESERVED_7A_MASK                         0xffffffff
302  
303  /* Description		REO_UNBLOCK_CACHE_8_RESERVED_8A
304  
305  			<legal 0>
306  */
307  #define REO_UNBLOCK_CACHE_8_RESERVED_8A_OFFSET                       0x00000020
308  #define REO_UNBLOCK_CACHE_8_RESERVED_8A_LSB                          0
309  #define REO_UNBLOCK_CACHE_8_RESERVED_8A_MASK                         0xffffffff
310  
311  
312  #endif // _REO_UNBLOCK_CACHE_H_
313