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
