drm/etnaviv: move cmdbuf into submit object
[platform/kernel/linux-rpi.git] / drivers / gpu / drm / etnaviv / etnaviv_cmdbuf.c
index 633e0f0..3746827 100644 (file)
@@ -19,6 +19,7 @@
 #include "etnaviv_cmdbuf.h"
 #include "etnaviv_gpu.h"
 #include "etnaviv_mmu.h"
+#include "etnaviv_perfmon.h"
 
 #define SUBALLOC_SIZE          SZ_256K
 #define SUBALLOC_GRANULE       SZ_4K
@@ -85,19 +86,11 @@ void etnaviv_cmdbuf_suballoc_destroy(struct etnaviv_cmdbuf_suballoc *suballoc)
        kfree(suballoc);
 }
 
-struct etnaviv_cmdbuf *
-etnaviv_cmdbuf_new(struct etnaviv_cmdbuf_suballoc *suballoc, u32 size,
-                  size_t nr_bos)
+int etnaviv_cmdbuf_init(struct etnaviv_cmdbuf_suballoc *suballoc,
+                       struct etnaviv_cmdbuf *cmdbuf, u32 size)
 {
-       struct etnaviv_cmdbuf *cmdbuf;
-       size_t sz = size_vstruct(nr_bos, sizeof(cmdbuf->bo_map[0]),
-                                sizeof(*cmdbuf));
        int granule_offs, order, ret;
 
-       cmdbuf = kzalloc(sz, GFP_KERNEL);
-       if (!cmdbuf)
-               return NULL;
-
        cmdbuf->suballoc = suballoc;
        cmdbuf->size = size;
 
@@ -115,7 +108,7 @@ retry:
                if (!ret) {
                        dev_err(suballoc->gpu->dev,
                                "Timeout waiting for cmdbuf space\n");
-                       return NULL;
+                       return -ETIMEDOUT;
                }
                goto retry;
        }
@@ -123,7 +116,7 @@ retry:
        cmdbuf->suballoc_offset = granule_offs * SUBALLOC_GRANULE;
        cmdbuf->vaddr = suballoc->vaddr + cmdbuf->suballoc_offset;
 
-       return cmdbuf;
+       return 0;
 }
 
 void etnaviv_cmdbuf_free(struct etnaviv_cmdbuf *cmdbuf)
@@ -139,7 +132,6 @@ void etnaviv_cmdbuf_free(struct etnaviv_cmdbuf *cmdbuf)
        suballoc->free_space = 1;
        mutex_unlock(&suballoc->lock);
        wake_up_all(&suballoc->free_event);
-       kfree(cmdbuf);
 }
 
 u32 etnaviv_cmdbuf_get_va(struct etnaviv_cmdbuf *buf)