| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- // SPDX-License-Identifier: GPL-2.0
- /*
- * Copyright (C) 2014-2025 Etnaviv Project
- */
- #ifndef __ETNAVIV_BUFFER_H__
- #define __ETNAVIV_BUFFER_H__
- #include "etnaviv_cmdbuf.h"
- #include "etnaviv_gpu.h"
- #include "etnaviv_gem.h"
- #include "etnaviv_mmu.h"
- #include "common.xml.h"
- #include "linux/printk.h"
- #include "state.xml.h"
- #include "state_blt.xml.h"
- #include "state_hi.xml.h"
- #include "state_3d.xml.h"
- #include "cmdstream.xml.h"
- static inline void OUT(struct etnaviv_cmdbuf *buffer, u32 data)
- {
- u32 *vaddr = (u32 *)buffer->vaddr;
- BUG_ON(buffer->user_size >= buffer->size);
- vaddr[buffer->user_size / 4] = data;
- buffer->user_size += 4;
- }
- static inline void CMD_LOAD_STATE(struct etnaviv_cmdbuf *buffer, u32 reg,
- u32 value)
- {
- u32 index = reg >> VIV_FE_LOAD_STATE_HEADER_OFFSET__SHR;
- buffer->user_size = ALIGN(buffer->user_size, 8);
- /* write a register via cmd stream */
- OUT(buffer, VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE |
- VIV_FE_LOAD_STATE_HEADER_COUNT(1) |
- VIV_FE_LOAD_STATE_HEADER_OFFSET(index));
- OUT(buffer, value);
- }
- static inline void CMD_LOAD_STATES_START(struct etnaviv_cmdbuf *buffer, u32 reg,
- u32 nvalues)
- {
- u32 index = reg >> VIV_FE_LOAD_STATE_HEADER_OFFSET__SHR;
- buffer->user_size = ALIGN(buffer->user_size, 8);
- /* write a register via cmd stream */
- OUT(buffer, VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE |
- VIV_FE_LOAD_STATE_HEADER_OFFSET(index) |
- VIV_FE_LOAD_STATE_HEADER_COUNT(nvalues));
- }
- static inline void CMD_END(struct etnaviv_cmdbuf *buffer)
- {
- buffer->user_size = ALIGN(buffer->user_size, 8);
- OUT(buffer, VIV_FE_END_HEADER_OP_END);
- }
- static inline void CMD_WAIT(struct etnaviv_cmdbuf *buffer,
- unsigned int waitcycles)
- {
- buffer->user_size = ALIGN(buffer->user_size, 8);
- OUT(buffer, VIV_FE_WAIT_HEADER_OP_WAIT | waitcycles);
- }
- static inline void CMD_LINK(struct etnaviv_cmdbuf *buffer, u16 prefetch,
- u32 address)
- {
- buffer->user_size = ALIGN(buffer->user_size, 8);
- OUT(buffer,
- VIV_FE_LINK_HEADER_OP_LINK | VIV_FE_LINK_HEADER_PREFETCH(prefetch));
- OUT(buffer, address);
- }
- static inline void CMD_STALL(struct etnaviv_cmdbuf *buffer, u32 from, u32 to)
- {
- buffer->user_size = ALIGN(buffer->user_size, 8);
- OUT(buffer, VIV_FE_STALL_HEADER_OP_STALL);
- OUT(buffer, VIV_FE_STALL_TOKEN_FROM(from) | VIV_FE_STALL_TOKEN_TO(to));
- }
- static inline void CMD_SEM(struct etnaviv_cmdbuf *buffer, u32 from, u32 to)
- {
- CMD_LOAD_STATE(buffer, VIVS_GL_SEMAPHORE_TOKEN,
- VIVS_GL_SEMAPHORE_TOKEN_FROM(from) |
- VIVS_GL_SEMAPHORE_TOKEN_TO(to));
- }
- #endif /* __ETNAVIV_BUFFER_H__ */
|