[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