• Home
  • Raw
  • Download

Lines Matching full:buffer

18  * Command Buffer helper:
22 static inline void OUT(struct etnaviv_cmdbuf *buffer, u32 data) in OUT() argument
24 u32 *vaddr = (u32 *)buffer->vaddr; in OUT()
26 BUG_ON(buffer->user_size >= buffer->size); in OUT()
28 vaddr[buffer->user_size / 4] = data; in OUT()
29 buffer->user_size += 4; in OUT()
32 static inline void CMD_LOAD_STATE(struct etnaviv_cmdbuf *buffer, in CMD_LOAD_STATE() argument
37 buffer->user_size = ALIGN(buffer->user_size, 8); in CMD_LOAD_STATE()
40 OUT(buffer, VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE | in CMD_LOAD_STATE()
43 OUT(buffer, value); in CMD_LOAD_STATE()
46 static inline void CMD_END(struct etnaviv_cmdbuf *buffer) in CMD_END() argument
48 buffer->user_size = ALIGN(buffer->user_size, 8); in CMD_END()
50 OUT(buffer, VIV_FE_END_HEADER_OP_END); in CMD_END()
53 static inline void CMD_WAIT(struct etnaviv_cmdbuf *buffer) in CMD_WAIT() argument
55 buffer->user_size = ALIGN(buffer->user_size, 8); in CMD_WAIT()
57 OUT(buffer, VIV_FE_WAIT_HEADER_OP_WAIT | 200); in CMD_WAIT()
60 static inline void CMD_LINK(struct etnaviv_cmdbuf *buffer, in CMD_LINK() argument
63 buffer->user_size = ALIGN(buffer->user_size, 8); in CMD_LINK()
65 OUT(buffer, VIV_FE_LINK_HEADER_OP_LINK | in CMD_LINK()
67 OUT(buffer, address); in CMD_LINK()
70 static inline void CMD_STALL(struct etnaviv_cmdbuf *buffer, in CMD_STALL() argument
73 buffer->user_size = ALIGN(buffer->user_size, 8); in CMD_STALL()
75 OUT(buffer, VIV_FE_STALL_HEADER_OP_STALL); in CMD_STALL()
76 OUT(buffer, VIV_FE_STALL_TOKEN_FROM(from) | VIV_FE_STALL_TOKEN_TO(to)); in CMD_STALL()
79 static inline void CMD_SEM(struct etnaviv_cmdbuf *buffer, u32 from, u32 to) in CMD_SEM() argument
81 CMD_LOAD_STATE(buffer, VIVS_GL_SEMAPHORE_TOKEN, in CMD_SEM()
87 struct etnaviv_cmdbuf *buffer, u8 pipe) in etnaviv_cmd_select_pipe() argument
104 CMD_LOAD_STATE(buffer, VIVS_GL_FLUSH_CACHE, flush); in etnaviv_cmd_select_pipe()
105 CMD_SEM(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE); in etnaviv_cmd_select_pipe()
106 CMD_STALL(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE); in etnaviv_cmd_select_pipe()
108 CMD_LOAD_STATE(buffer, VIVS_GL_PIPE_SELECT, in etnaviv_cmd_select_pipe()
131 static void etnaviv_buffer_replace_wait(struct etnaviv_cmdbuf *buffer, in etnaviv_buffer_replace_wait() argument
134 u32 *lw = buffer->vaddr + wl_offset; in etnaviv_buffer_replace_wait()
143 * Ensure that there is space in the command buffer to contiguously write
144 * 'cmd_dwords' 64-bit words into the buffer, wrapping if necessary.
147 struct etnaviv_cmdbuf *buffer, unsigned int cmd_dwords) in etnaviv_buffer_reserve() argument
149 if (buffer->user_size + cmd_dwords * sizeof(u64) > buffer->size) in etnaviv_buffer_reserve()
150 buffer->user_size = 0; in etnaviv_buffer_reserve()
152 return etnaviv_cmdbuf_get_va(buffer) + buffer->user_size; in etnaviv_buffer_reserve()
157 struct etnaviv_cmdbuf *buffer = &gpu->buffer; in etnaviv_buffer_init() local
161 /* initialize buffer */ in etnaviv_buffer_init()
162 buffer->user_size = 0; in etnaviv_buffer_init()
164 CMD_WAIT(buffer); in etnaviv_buffer_init()
165 CMD_LINK(buffer, 2, etnaviv_cmdbuf_get_va(buffer) + in etnaviv_buffer_init()
166 buffer->user_size - 4); in etnaviv_buffer_init()
168 return buffer->user_size / 8; in etnaviv_buffer_init()
173 struct etnaviv_cmdbuf *buffer = &gpu->buffer; in etnaviv_buffer_config_mmuv2() local
177 buffer->user_size = 0; in etnaviv_buffer_config_mmuv2()
180 CMD_LOAD_STATE(buffer, VIVS_GL_PIPE_SELECT, in etnaviv_buffer_config_mmuv2()
182 CMD_LOAD_STATE(buffer, VIVS_MMUv2_CONFIGURATION, in etnaviv_buffer_config_mmuv2()
184 CMD_LOAD_STATE(buffer, VIVS_MMUv2_SAFE_ADDRESS, safe_addr); in etnaviv_buffer_config_mmuv2()
185 CMD_SEM(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE); in etnaviv_buffer_config_mmuv2()
186 CMD_STALL(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE); in etnaviv_buffer_config_mmuv2()
190 CMD_LOAD_STATE(buffer, VIVS_GL_PIPE_SELECT, in etnaviv_buffer_config_mmuv2()
192 CMD_LOAD_STATE(buffer, VIVS_MMUv2_CONFIGURATION, in etnaviv_buffer_config_mmuv2()
194 CMD_LOAD_STATE(buffer, VIVS_MMUv2_SAFE_ADDRESS, safe_addr); in etnaviv_buffer_config_mmuv2()
195 CMD_SEM(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE); in etnaviv_buffer_config_mmuv2()
196 CMD_STALL(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE); in etnaviv_buffer_config_mmuv2()
199 CMD_END(buffer); in etnaviv_buffer_config_mmuv2()
201 buffer->user_size = ALIGN(buffer->user_size, 8); in etnaviv_buffer_config_mmuv2()
203 return buffer->user_size / 8; in etnaviv_buffer_config_mmuv2()
208 struct etnaviv_cmdbuf *buffer = &gpu->buffer; in etnaviv_buffer_config_pta() local
212 buffer->user_size = 0; in etnaviv_buffer_config_pta()
214 CMD_LOAD_STATE(buffer, VIVS_MMUv2_PTA_CONFIG, in etnaviv_buffer_config_pta()
217 CMD_END(buffer); in etnaviv_buffer_config_pta()
219 buffer->user_size = ALIGN(buffer->user_size, 8); in etnaviv_buffer_config_pta()
221 return buffer->user_size / 8; in etnaviv_buffer_config_pta()
226 struct etnaviv_cmdbuf *buffer = &gpu->buffer; in etnaviv_buffer_end() local
227 unsigned int waitlink_offset = buffer->user_size - 16; in etnaviv_buffer_end()
244 link_target = etnaviv_buffer_reserve(gpu, buffer, dwords); in etnaviv_buffer_end()
246 CMD_SEM(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE); in etnaviv_buffer_end()
247 CMD_STALL(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE); in etnaviv_buffer_end()
248 CMD_LOAD_STATE(buffer, VIVS_GL_FLUSH_CACHE, flush); in etnaviv_buffer_end()
250 CMD_LOAD_STATE(buffer, VIVS_TS_FLUSH_CACHE, in etnaviv_buffer_end()
252 CMD_SEM(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE); in etnaviv_buffer_end()
253 CMD_STALL(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE); in etnaviv_buffer_end()
254 CMD_END(buffer); in etnaviv_buffer_end()
256 etnaviv_buffer_replace_wait(buffer, waitlink_offset, in etnaviv_buffer_end()
262 etnaviv_buffer_replace_wait(buffer, waitlink_offset, in etnaviv_buffer_end()
267 /* Append a 'sync point' to the ring buffer. */
270 struct etnaviv_cmdbuf *buffer = &gpu->buffer; in etnaviv_sync_point_queue() local
271 unsigned int waitlink_offset = buffer->user_size - 16; in etnaviv_sync_point_queue()
281 target = etnaviv_buffer_reserve(gpu, buffer, dwords); in etnaviv_sync_point_queue()
284 CMD_LOAD_STATE(buffer, VIVS_GL_EVENT, VIVS_GL_EVENT_EVENT_ID(event) | in etnaviv_sync_point_queue()
288 CMD_END(buffer); in etnaviv_sync_point_queue()
291 CMD_WAIT(buffer); in etnaviv_sync_point_queue()
292 CMD_LINK(buffer, 2, etnaviv_cmdbuf_get_va(buffer) + in etnaviv_sync_point_queue()
293 buffer->user_size - 4); in etnaviv_sync_point_queue()
297 * WAIT with a link to the address in the ring buffer. in etnaviv_sync_point_queue()
299 etnaviv_buffer_replace_wait(buffer, waitlink_offset, in etnaviv_sync_point_queue()
305 /* Append a command buffer to the ring buffer. */
309 struct etnaviv_cmdbuf *buffer = &gpu->buffer; in etnaviv_buffer_queue() local
310 unsigned int waitlink_offset = buffer->user_size - 16; in etnaviv_buffer_queue()
320 etnaviv_buffer_dump(gpu, buffer, 0, 0x50); in etnaviv_buffer_queue()
326 * If we need maintanence prior to submitting this buffer, we will in etnaviv_buffer_queue()
328 * link to this buffer - a total of four additional words. in etnaviv_buffer_queue()
348 target = etnaviv_buffer_reserve(gpu, buffer, extra_dwords); in etnaviv_buffer_queue()
353 CMD_LOAD_STATE(buffer, VIVS_GL_FLUSH_MMU, in etnaviv_buffer_queue()
360 CMD_LOAD_STATE(buffer, VIVS_MMUv2_CONFIGURATION, in etnaviv_buffer_queue()
364 CMD_SEM(buffer, SYNC_RECIPIENT_FE, in etnaviv_buffer_queue()
366 CMD_STALL(buffer, SYNC_RECIPIENT_FE, in etnaviv_buffer_queue()
374 etnaviv_cmd_select_pipe(gpu, buffer, exec_state); in etnaviv_buffer_queue()
378 /* And the link to the submitted buffer */ in etnaviv_buffer_queue()
379 CMD_LINK(buffer, link_dwords, link_target); in etnaviv_buffer_queue()
387 * Append a LINK to the submitted command buffer to return to in etnaviv_buffer_queue()
388 * the ring buffer. return_target is the ring target address. in etnaviv_buffer_queue()
393 return_target = etnaviv_buffer_reserve(gpu, buffer, return_dwords); in etnaviv_buffer_queue()
398 * the wait command to the ring buffer. in etnaviv_buffer_queue()
401 CMD_LOAD_STATE(buffer, VIVS_GL_FLUSH_CACHE, in etnaviv_buffer_queue()
404 CMD_LOAD_STATE(buffer, VIVS_GL_FLUSH_CACHE, in etnaviv_buffer_queue()
407 CMD_LOAD_STATE(buffer, VIVS_TS_FLUSH_CACHE, in etnaviv_buffer_queue()
410 CMD_SEM(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE); in etnaviv_buffer_queue()
411 CMD_STALL(buffer, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE); in etnaviv_buffer_queue()
412 CMD_LOAD_STATE(buffer, VIVS_GL_EVENT, VIVS_GL_EVENT_EVENT_ID(event) | in etnaviv_buffer_queue()
414 CMD_WAIT(buffer); in etnaviv_buffer_queue()
415 CMD_LINK(buffer, 2, etnaviv_cmdbuf_get_va(buffer) + in etnaviv_buffer_queue()
416 buffer->user_size - 4); in etnaviv_buffer_queue()
427 pr_info("link op: %p\n", buffer->vaddr + waitlink_offset); in etnaviv_buffer_queue()
435 * WAIT with a link to the address in the ring buffer. in etnaviv_buffer_queue()
437 etnaviv_buffer_replace_wait(buffer, waitlink_offset, in etnaviv_buffer_queue()
443 etnaviv_buffer_dump(gpu, buffer, 0, 0x50); in etnaviv_buffer_queue()