[PATCH 1/6] nouveau/gsp: refactor libos entry handling for r535.

Dave Airlie <[email protected]> Wed, 29 Jul 2026 14:15:25 +1000
Newsgroups org.freedesktop.lists.nouveau,org.freedesktop.lists.dri-devel
Message-ID <[email protected]>
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/driver=
s/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 a=
ddr, size_t size)
 =09=09ptes[i] =3D (u64)addr + (i << GSP_PAGE_SHIFT);
 }
=20
+static int
+gsp_fill_libos_entry(struct nvkm_gsp *gsp,
+=09=09     LibosMemoryRegionInitArgument *arg,
+=09=09     size_t size,
+=09=09     struct nvkm_gsp_mem *mem,
+=09=09     const char *name)
+{
+=09int ret;
+
+=09ret =3D nvkm_gsp_mem_ctor(gsp, size, mem);
+=09if (ret)
+=09=09return ret;
+
+=09arg->id8  =3D r535_gsp_libos_id8(name);
+=09arg->pa   =3D mem->addr;
+=09arg->size =3D mem->size;
+=09arg->kind =3D LIBOS_MEMORY_REGION_CONTIGUOUS;
+=09arg->loc  =3D LIBOS_MEMORY_REGION_LOC_SYSMEM;
+=09create_pte_array(mem->data + sizeof(u64), mem->addr, mem->size);
+=09return 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)
=20
 =09args =3D gsp->libos.data;
=20
-=09ret =3D nvkm_gsp_mem_ctor(gsp, 0x10000, &gsp->loginit);
+=09ret =3D gsp_fill_libos_entry(gsp, &args[0], 0x10000, &gsp->loginit, "LO=
GINIT");
 =09if (ret)
 =09=09return ret;
=20
-=09args[0].id8  =3D r535_gsp_libos_id8("LOGINIT");
-=09args[0].pa   =3D gsp->loginit.addr;
-=09args[0].size =3D gsp->loginit.size;
-=09args[0].kind =3D LIBOS_MEMORY_REGION_CONTIGUOUS;
-=09args[0].loc  =3D LIBOS_MEMORY_REGION_LOC_SYSMEM;
-=09create_pte_array(gsp->loginit.data + sizeof(u64), gsp->loginit.addr, gs=
p->loginit.size);
-
-=09ret =3D nvkm_gsp_mem_ctor(gsp, 0x10000, &gsp->logintr);
+=09ret =3D gsp_fill_libos_entry(gsp, &args[1], 0x10000, &gsp->logintr, "LO=
GINTR");
 =09if (ret)
 =09=09return ret;
=20
-=09args[1].id8  =3D r535_gsp_libos_id8("LOGINTR");
-=09args[1].pa   =3D gsp->logintr.addr;
-=09args[1].size =3D gsp->logintr.size;
-=09args[1].kind =3D LIBOS_MEMORY_REGION_CONTIGUOUS;
-=09args[1].loc  =3D LIBOS_MEMORY_REGION_LOC_SYSMEM;
-=09create_pte_array(gsp->logintr.data + sizeof(u64), gsp->logintr.addr, gs=
p->logintr.size);
-
-=09ret =3D nvkm_gsp_mem_ctor(gsp, 0x10000, &gsp->logrm);
+=09ret =3D gsp_fill_libos_entry(gsp, &args[2], 0x10000, &gsp->logrm, "LOGR=
M");
 =09if (ret)
 =09=09return ret;
=20
-=09args[2].id8  =3D r535_gsp_libos_id8("LOGRM");
-=09args[2].pa   =3D gsp->logrm.addr;
-=09args[2].size =3D gsp->logrm.size;
-=09args[2].kind =3D LIBOS_MEMORY_REGION_CONTIGUOUS;
-=09args[2].loc  =3D LIBOS_MEMORY_REGION_LOC_SYSMEM;
-=09create_pte_array(gsp->logrm.data + sizeof(u64), gsp->logrm.addr, gsp->l=
ogrm.size);
-
 =09ret =3D r535_gsp_rmargs_init(gsp, false);
 =09if (ret)
 =09=09return ret;
--=20
2.55.0