To support the per-SKU GSP WPR2 heap initialization, first, factor out the
common routine for all the SKUs.

Factor out nvkm_gsp_init_fw_heap(). Adjust some indent to make
checkpatch.pl happy.

No functional change is intended.

Cc: Milos Tijanic <mtija...@nvidia.com>
Signed-off-by: Zhi Wang <z...@nvidia.com>
---
 .../gpu/drm/nouveau/nvkm/subdev/gsp/priv.h    |  1 +
 .../gpu/drm/nouveau/nvkm/subdev/gsp/r535.c    | 69 +++++++++++--------
 2 files changed, 40 insertions(+), 30 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h
index 9f4a62375a27..579d83048164 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h
@@ -58,6 +58,7 @@ int ga102_gsp_booter_ctor(struct nvkm_gsp *, const char *, 
const struct firmware
 int ga102_gsp_reset(struct nvkm_gsp *);
 
 void r535_gsp_dtor(struct nvkm_gsp *);
+void nvkm_gsp_init_fw_heap(struct nvkm_gsp *gsp);
 int r535_gsp_oneinit(struct nvkm_gsp *);
 int r535_gsp_init(struct nvkm_gsp *);
 int r535_gsp_fini(struct nvkm_gsp *, bool suspend);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c
index cf58f9da9139..6f2319845322 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c
@@ -2517,6 +2517,44 @@ r535_gsp_dtor(struct nvkm_gsp *gsp)
        nvkm_gsp_mem_dtor(gsp, &gsp->logrm);
 }
 
+void nvkm_gsp_init_fw_heap(struct nvkm_gsp *gsp)
+{
+       /* Calculate FB layout. */
+       gsp->fb.wpr2.frts.size = 0x100000;
+       gsp->fb.wpr2.frts.addr = ALIGN_DOWN(gsp->fb.bios.addr, 0x20000) - 
gsp->fb.wpr2.frts.size;
+
+       gsp->fb.wpr2.boot.size = gsp->boot.fw.size;
+       gsp->fb.wpr2.boot.addr = ALIGN_DOWN(gsp->fb.wpr2.frts.addr - 
gsp->fb.wpr2.boot.size,
+                                           0x1000);
+
+       gsp->fb.wpr2.elf.size = gsp->fw.len;
+       gsp->fb.wpr2.elf.addr = ALIGN_DOWN(gsp->fb.wpr2.boot.addr - 
gsp->fb.wpr2.elf.size,
+                                          0x10000);
+
+       {
+               u32 fb_size_gb = DIV_ROUND_UP_ULL(gsp->fb.size, 1 << 30);
+
+               gsp->fb.wpr2.heap.size =
+                       gsp->func->wpr_heap.os_carveout_size +
+                       gsp->func->wpr_heap.base_size +
+                       ALIGN(GSP_FW_HEAP_PARAM_SIZE_PER_GB_FB * fb_size_gb, 1 
<< 20) +
+                       ALIGN(GSP_FW_HEAP_PARAM_CLIENT_ALLOC_SIZE, 1 << 20);
+
+               gsp->fb.wpr2.heap.size = max(gsp->fb.wpr2.heap.size, 
gsp->func->wpr_heap.min_size);
+       }
+
+       gsp->fb.wpr2.heap.addr = ALIGN_DOWN(gsp->fb.wpr2.elf.addr - 
gsp->fb.wpr2.heap.size,
+                                           0x100000);
+       gsp->fb.wpr2.heap.size = ALIGN_DOWN(gsp->fb.wpr2.elf.addr - 
gsp->fb.wpr2.heap.addr,
+                                           0x100000);
+
+       gsp->fb.wpr2.addr = ALIGN_DOWN(gsp->fb.wpr2.heap.addr - 
sizeof(GspFwWprMeta), 0x100000);
+       gsp->fb.wpr2.size = gsp->fb.wpr2.frts.addr + gsp->fb.wpr2.frts.size - 
gsp->fb.wpr2.addr;
+
+       gsp->fb.heap.size = 0x100000;
+       gsp->fb.heap.addr = gsp->fb.wpr2.addr - gsp->fb.heap.size;
+}
+
 int
 r535_gsp_oneinit(struct nvkm_gsp *gsp)
 {
@@ -2581,36 +2619,7 @@ r535_gsp_oneinit(struct nvkm_gsp *gsp)
        /* Release FW images - we've copied them to DMA buffers now. */
        r535_gsp_dtor_fws(gsp);
 
-       /* Calculate FB layout. */
-       gsp->fb.wpr2.frts.size = 0x100000;
-       gsp->fb.wpr2.frts.addr = ALIGN_DOWN(gsp->fb.bios.addr, 0x20000) - 
gsp->fb.wpr2.frts.size;
-
-       gsp->fb.wpr2.boot.size = gsp->boot.fw.size;
-       gsp->fb.wpr2.boot.addr = ALIGN_DOWN(gsp->fb.wpr2.frts.addr - 
gsp->fb.wpr2.boot.size, 0x1000);
-
-       gsp->fb.wpr2.elf.size = gsp->fw.len;
-       gsp->fb.wpr2.elf.addr = ALIGN_DOWN(gsp->fb.wpr2.boot.addr - 
gsp->fb.wpr2.elf.size, 0x10000);
-
-       {
-               u32 fb_size_gb = DIV_ROUND_UP_ULL(gsp->fb.size, 1 << 30);
-
-               gsp->fb.wpr2.heap.size =
-                       gsp->func->wpr_heap.os_carveout_size +
-                       gsp->func->wpr_heap.base_size +
-                       ALIGN(GSP_FW_HEAP_PARAM_SIZE_PER_GB_FB * fb_size_gb, 1 
<< 20) +
-                       ALIGN(GSP_FW_HEAP_PARAM_CLIENT_ALLOC_SIZE, 1 << 20);
-
-               gsp->fb.wpr2.heap.size = max(gsp->fb.wpr2.heap.size, 
gsp->func->wpr_heap.min_size);
-       }
-
-       gsp->fb.wpr2.heap.addr = ALIGN_DOWN(gsp->fb.wpr2.elf.addr - 
gsp->fb.wpr2.heap.size, 0x100000);
-       gsp->fb.wpr2.heap.size = ALIGN_DOWN(gsp->fb.wpr2.elf.addr - 
gsp->fb.wpr2.heap.addr, 0x100000);
-
-       gsp->fb.wpr2.addr = ALIGN_DOWN(gsp->fb.wpr2.heap.addr - 
sizeof(GspFwWprMeta), 0x100000);
-       gsp->fb.wpr2.size = gsp->fb.wpr2.frts.addr + gsp->fb.wpr2.frts.size - 
gsp->fb.wpr2.addr;
-
-       gsp->fb.heap.size = 0x100000;
-       gsp->fb.heap.addr = gsp->fb.wpr2.addr - gsp->fb.heap.size;
+       nvkm_gsp_init_fw_heap(gsp);
 
        ret = nvkm_gsp_fwsec_frts(gsp);
        if (WARN_ON(ret))
-- 
2.34.1

Reply via email to