[PATCH 47/48] staging: etnaviv: don't use GEM buffer for internal ring buffer

2015-10-21 Thread Russell King - ARM Linux
On Fri, Sep 25, 2015 at 01:57:59PM +0200, Lucas Stach wrote:
> Instead of using a GEM buffer for the kernel internal ring buffer
> use the newly introduced cmdbuf object. This removes the last remaining
> user of the CMDSTREAM GEM flag.
> 
> Signed-off-by: Lucas Stach 

Applied, thanks.

-- 
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.


[PATCH 47/48] staging: etnaviv: don't use GEM buffer for internal ring buffer

2015-09-25 Thread Lucas Stach
Instead of using a GEM buffer for the kernel internal ring buffer
use the newly introduced cmdbuf object. This removes the last remaining
user of the CMDSTREAM GEM flag.

Signed-off-by: Lucas Stach 
---
 drivers/staging/etnaviv/etnaviv_buffer.c | 90 ++--
 drivers/staging/etnaviv/etnaviv_drv.c|  8 +--
 drivers/staging/etnaviv/etnaviv_gpu.c| 13 +++--
 drivers/staging/etnaviv/etnaviv_gpu.h|  4 +-
 4 files changed, 53 insertions(+), 62 deletions(-)

diff --git a/drivers/staging/etnaviv/etnaviv_buffer.c 
b/drivers/staging/etnaviv/etnaviv_buffer.c
index 76c646076b05..586f84316f1a 100644
--- a/drivers/staging/etnaviv/etnaviv_buffer.c
+++ b/drivers/staging/etnaviv/etnaviv_buffer.c
@@ -28,21 +28,22 @@
  */


-static inline void OUT(struct etnaviv_gem_object *buffer, u32 data)
+static inline void OUT(struct etnaviv_cmdbuf *buffer, u32 data)
 {
u32 *vaddr = (u32 *)buffer->vaddr;

-   BUG_ON(buffer->offset >= buffer->base.size / sizeof(*vaddr));
+   BUG_ON(buffer->user_size >= buffer->size);

-   vaddr[buffer->offset++] = data;
+   vaddr[buffer->user_size / 4] = data;
+   buffer->user_size += 4;
 }

-static inline void CMD_LOAD_STATE(struct etnaviv_gem_object *buffer,
+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->offset = ALIGN(buffer->offset, 2);
+   buffer->user_size = ALIGN(buffer->user_size, 8);

/* write a register via cmd stream */
OUT(buffer, VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE |
@@ -51,40 +52,40 @@ static inline void CMD_LOAD_STATE(struct etnaviv_gem_object 
*buffer,
OUT(buffer, value);
 }

-static inline void CMD_END(struct etnaviv_gem_object *buffer)
+static inline void CMD_END(struct etnaviv_cmdbuf *buffer)
 {
-   buffer->offset = ALIGN(buffer->offset, 2);
+   buffer->user_size = ALIGN(buffer->user_size, 8);

OUT(buffer, VIV_FE_END_HEADER_OP_END);
 }

-static inline void CMD_WAIT(struct etnaviv_gem_object *buffer)
+static inline void CMD_WAIT(struct etnaviv_cmdbuf *buffer)
 {
-   buffer->offset = ALIGN(buffer->offset, 2);
+   buffer->user_size = ALIGN(buffer->user_size, 8);

OUT(buffer, VIV_FE_WAIT_HEADER_OP_WAIT | 200);
 }

-static inline void CMD_LINK(struct etnaviv_gem_object *buffer,
+static inline void CMD_LINK(struct etnaviv_cmdbuf *buffer,
u16 prefetch, u32 address)
 {
-   buffer->offset = ALIGN(buffer->offset, 2);
+   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_gem_object *buffer,
+static inline void CMD_STALL(struct etnaviv_cmdbuf *buffer,
u32 from, u32 to)
 {
-   buffer->offset = ALIGN(buffer->offset, 2);
+   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 void etnaviv_cmd_select_pipe(struct etnaviv_gem_object *buffer, u8 pipe)
+static void etnaviv_cmd_select_pipe(struct etnaviv_cmdbuf *buffer, u8 pipe)
 {
u32 flush;
u32 stall;
@@ -106,24 +107,19 @@ static void etnaviv_cmd_select_pipe(struct 
etnaviv_gem_object *buffer, u8 pipe)
   VIVS_GL_PIPE_SELECT_PIPE(pipe));
 }

-static u32 gpu_va(struct etnaviv_gpu *gpu, struct etnaviv_gem_object *obj)
+static u32 gpu_va(struct etnaviv_gpu *gpu, struct etnaviv_cmdbuf *buf)
 {
-   return obj->paddr - gpu->memory_base;
-}
-
-static u32 gpu_va_raw(struct etnaviv_gpu *gpu, u32 paddr)
-{
-   return paddr - gpu->memory_base;
+   return buf->paddr - gpu->memory_base;
 }

 static void etnaviv_buffer_dump(struct etnaviv_gpu *gpu,
-   struct etnaviv_gem_object *obj, u32 off, u32 len)
+   struct etnaviv_cmdbuf *buf, u32 off, u32 len)
 {
-   u32 size = obj->base.size;
-   u32 *ptr = obj->vaddr + off;
+   u32 size = buf->size;
+   u32 *ptr = buf->vaddr + off;

dev_info(gpu->dev, "virt %p phys 0x%08x free 0x%08x\n",
-   ptr, gpu_va(gpu, obj) + off, size - len * 4 - off);
+   ptr, gpu_va(gpu, buf) + off, size - len * 4 - off);

print_hex_dump(KERN_INFO, "cmd ", DUMP_PREFIX_OFFSET, 16, 4,
ptr, len * 4, 0);
@@ -131,24 +127,23 @@ static void etnaviv_buffer_dump(struct etnaviv_gpu *gpu,

 u16 etnaviv_buffer_init(struct etnaviv_gpu *gpu)
 {
-   struct etnaviv_gem_object *buffer = to_etnaviv_bo(gpu->buffer);
+   struct etnaviv_cmdbuf *buffer = gpu->buffer;

/* initialize buffer */
-   buffer->offset = 0;
-   buffer->is_ring_buffer = true;
+   buffer->user_size = 0;

CMD_WAIT(buffer);
-   CMD_LINK(buffer, 2, gpu_va(gpu, buffer) + ((buffer->offset - 1) * 4));
+