From: Dave Airlie <[email protected]>

This just refactors the libos entries that are the same pattern,
allocate + fill out entry.

Signed-off-by: Dave Airlie <[email protected]>
---
 .../drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c | 49 ++++++++++---------
 1 file changed, 25 insertions(+), 24 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
index f544afa12b6b..f4f4142ec8d0 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
@@ -1470,6 +1470,28 @@ static void create_pte_array(u64 *ptes, dma_addr_t addr, 
size_t size)
                ptes[i] = (u64)addr + (i << GSP_PAGE_SHIFT);
 }
 
+static int
+gsp_fill_libos_entry(struct nvkm_gsp *gsp,
+                    LibosMemoryRegionInitArgument *arg,
+                    size_t size,
+                    struct nvkm_gsp_mem *mem,
+                    const char *name)
+{
+       int ret;
+
+       ret = nvkm_gsp_mem_ctor(gsp, size, mem);
+       if (ret)
+               return ret;
+
+       arg->id8  = r535_gsp_libos_id8(name);
+       arg->pa   = mem->addr;
+       arg->size = mem->size;
+       arg->kind = LIBOS_MEMORY_REGION_CONTIGUOUS;
+       arg->loc  = LIBOS_MEMORY_REGION_LOC_SYSMEM;
+       create_pte_array(mem->data + sizeof(u64), mem->addr, mem->size);
+       return 0;
+}
+
 /**
  * r535_gsp_libos_init() -- create the libos arguments structure
  * @gsp: gsp pointer
@@ -1516,39 +1538,18 @@ r535_gsp_libos_init(struct nvkm_gsp *gsp)
 
        args = gsp->libos.data;
 
-       ret = nvkm_gsp_mem_ctor(gsp, 0x10000, &gsp->loginit);
+       ret = gsp_fill_libos_entry(gsp, &args[0], 0x10000, &gsp->loginit, 
"LOGINIT");
        if (ret)
                return ret;
 
-       args[0].id8  = r535_gsp_libos_id8("LOGINIT");
-       args[0].pa   = gsp->loginit.addr;
-       args[0].size = gsp->loginit.size;
-       args[0].kind = LIBOS_MEMORY_REGION_CONTIGUOUS;
-       args[0].loc  = LIBOS_MEMORY_REGION_LOC_SYSMEM;
-       create_pte_array(gsp->loginit.data + sizeof(u64), gsp->loginit.addr, 
gsp->loginit.size);
-
-       ret = nvkm_gsp_mem_ctor(gsp, 0x10000, &gsp->logintr);
+       ret = gsp_fill_libos_entry(gsp, &args[1], 0x10000, &gsp->logintr, 
"LOGINTR");
        if (ret)
                return ret;
 
-       args[1].id8  = r535_gsp_libos_id8("LOGINTR");
-       args[1].pa   = gsp->logintr.addr;
-       args[1].size = gsp->logintr.size;
-       args[1].kind = LIBOS_MEMORY_REGION_CONTIGUOUS;
-       args[1].loc  = LIBOS_MEMORY_REGION_LOC_SYSMEM;
-       create_pte_array(gsp->logintr.data + sizeof(u64), gsp->logintr.addr, 
gsp->logintr.size);
-
-       ret = nvkm_gsp_mem_ctor(gsp, 0x10000, &gsp->logrm);
+       ret = gsp_fill_libos_entry(gsp, &args[2], 0x10000, &gsp->logrm, 
"LOGRM");
        if (ret)
                return ret;
 
-       args[2].id8  = r535_gsp_libos_id8("LOGRM");
-       args[2].pa   = gsp->logrm.addr;
-       args[2].size = gsp->logrm.size;
-       args[2].kind = LIBOS_MEMORY_REGION_CONTIGUOUS;
-       args[2].loc  = LIBOS_MEMORY_REGION_LOC_SYSMEM;
-       create_pte_array(gsp->logrm.data + sizeof(u64), gsp->logrm.addr, 
gsp->logrm.size);
-
        ret = r535_gsp_rmargs_init(gsp, false);
        if (ret)
                return ret;
-- 
2.55.0

Reply via email to