From: Dave Airlie <[email protected]>

r570 adds logmnoc and logkrnl. logkrnl is only used for libos3, so
add a flag to pick libos2 out and not init on that.

Signed-off-by: Dave Airlie <[email protected]>
---
 .../gpu/drm/nouveau/include/nvkm/subdev/gsp.h |  2 ++
 .../drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c |  2 ++
 .../drm/nouveau/nvkm/subdev/gsp/rm/r535/rm.c  |  1 +
 .../drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c | 23 +++++++++++++++----
 .../drm/nouveau/nvkm/subdev/gsp/rm/r570/rm.c  |  1 +
 .../gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h   |  1 +
 6 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h 
b/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h
index 64fed208e4cf..d45351ce08a1 100644
--- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h
+++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h
@@ -145,6 +145,8 @@ struct nvkm_gsp {
        struct nvkm_gsp_mem loginit;
        struct nvkm_gsp_mem logintr;
        struct nvkm_gsp_mem logrm;
+       struct nvkm_gsp_mem logmnoc;
+       struct nvkm_gsp_mem logkrnl;
        struct nvkm_gsp_mem rmargs;
 
        struct nvkm_gsp_mem wpr_meta;
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 8e1ad2e79d3e..77a5a1882472 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
@@ -2108,6 +2108,8 @@ r535_gsp_dtor(struct nvkm_gsp *gsp)
 
        r535_gsp_libos_debugfs_fini(gsp);
 
+       nvkm_gsp_mem_dtor(&gsp->logkrnl);
+       nvkm_gsp_mem_dtor(&gsp->logmnoc);
        nvkm_gsp_mem_dtor(&gsp->loginit);
        nvkm_gsp_mem_dtor(&gsp->logintr);
        nvkm_gsp_mem_dtor(&gsp->logrm);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/rm.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/rm.c
index a4190676e1ad..e198212df9c5 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/rm.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/rm.c
@@ -11,6 +11,7 @@ r535_wpr_libos2 = {
        .os_carveout_size = GSP_FW_HEAP_PARAM_OS_SIZE_LIBOS2,
        .base_size = GSP_FW_HEAP_PARAM_BASE_RM_SIZE_TU10X,
        .heap_size_min = GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS2_MIN_MB,
+       .is_libos2 = true,
 };
 
 static const struct nvkm_rm_wpr
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c
index 64011430f4c0..d9786830153d 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c
@@ -236,6 +236,7 @@ r570_gsp_libos_init(struct nvkm_gsp *gsp)
 {
        LibosMemoryRegionInitArgument *args;
        int ret;
+       int idx;
 
        ret = nvkm_gsp_mem_ctor(gsp, 0x1000, &gsp->libos);
        if (ret)
@@ -255,15 +256,27 @@ r570_gsp_libos_init(struct nvkm_gsp *gsp)
        if (ret)
                return ret;
 
+       ret = gsp_fill_libos_entry(gsp, &args[3], 0x10000, &gsp->logmnoc, 
"LOGMNOC");
+       if (ret)
+               return ret;
+
+       idx = 4;
+       if (!gsp->rm->wpr->is_libos2) {
+               ret = gsp_fill_libos_entry(gsp, &args[idx], 0x10000, 
&gsp->logkrnl, "LOGKRNL");
+               if (ret)
+                       return ret;
+               idx++;
+       }
+
        ret = r535_gsp_rmargs_init(gsp, false);
        if (ret)
                return ret;
 
-       args[3].id8  = r535_gsp_libos_id8("RMARGS");
-       args[3].pa   = gsp->rmargs.addr;
-       args[3].size = gsp->rmargs.size;
-       args[3].kind = LIBOS_MEMORY_REGION_CONTIGUOUS;
-       args[3].loc  = LIBOS_MEMORY_REGION_LOC_SYSMEM;
+       args[idx].id8  = r535_gsp_libos_id8("RMARGS");
+       args[idx].pa   = gsp->rmargs.addr;
+       args[idx].size = gsp->rmargs.size;
+       args[idx].kind = LIBOS_MEMORY_REGION_CONTIGUOUS;
+       args[idx].loc  = LIBOS_MEMORY_REGION_LOC_SYSMEM;
 
 #ifdef CONFIG_DEBUG_FS
        r535_gsp_libos_debugfs_init(gsp);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/rm.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/rm.c
index 498658d0c60c..fa012756a731 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/rm.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/rm.c
@@ -11,6 +11,7 @@ r570_wpr_libos2 = {
        .os_carveout_size = GSP_FW_HEAP_PARAM_OS_SIZE_LIBOS2,
        .base_size = GSP_FW_HEAP_PARAM_BASE_RM_SIZE_TU10X,
        .heap_size_min = GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS2_MIN_MB,
+       .is_libos2 = true,
 };
 
 static const struct nvkm_rm_wpr
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h
index cc9f33202673..b77059e0ac12 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h
@@ -28,6 +28,7 @@ struct nvkm_rm_wpr {
        u32 heap_size_non_wpr;
        u32 rsvd_size_pmu;
        bool offset_set_by_acr;
+       bool is_libos2;
 };
 
 struct nvkm_rm_api {
-- 
2.55.0

Reply via email to