summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gv11b/subctx_gv11b.c
diff options
context:
space:
mode:
authorDeepak Goyal <dgoyal@nvidia.com>2018-03-01 05:57:51 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2018-03-06 00:18:29 -0500
commit963fac80687c1e7d8941a281cace3ccdcc34fc68 (patch)
treecfdd0d967cd3348025acff02ea7d2f12e31322ea /drivers/gpu/nvgpu/gv11b/subctx_gv11b.c
parent26b91946031a88293c7ce563ff923802af6509ce (diff)
gpu: nvgpu: initialize max_subctx_count before use
PMU instance block layout is not getting populated with subctx pdb info as max_subctx_count is 0x0 and is getting initialized after PMU instance block initialization gets completed. Therefore initializing max_subctx_count before using it. For Volta, FECS can bind itself with the PMU instance only if SC PDB info is populated. Bug 2051863 Bug 200392620 Change-Id: Id4fc26502e189c15cb57cb36cc09387dad773dc5 Signed-off-by: Deepak Goyal <dgoyal@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1666585 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gv11b/subctx_gv11b.c')
-rw-r--r--drivers/gpu/nvgpu/gv11b/subctx_gv11b.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/subctx_gv11b.c b/drivers/gpu/nvgpu/gv11b/subctx_gv11b.c
index 05d7dee0..12a606bf 100644
--- a/drivers/gpu/nvgpu/gv11b/subctx_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/subctx_gv11b.c
@@ -32,6 +32,7 @@
32 32
33#include <nvgpu/hw/gv11b/hw_ram_gv11b.h> 33#include <nvgpu/hw/gv11b/hw_ram_gv11b.h>
34#include <nvgpu/hw/gv11b/hw_ctxsw_prog_gv11b.h> 34#include <nvgpu/hw/gv11b/hw_ctxsw_prog_gv11b.h>
35#include <nvgpu/hw/gv11b/hw_gr_gv11b.h>
35 36
36static void gv11b_subctx_commit_valid_mask(struct vm_gk20a *vm, 37static void gv11b_subctx_commit_valid_mask(struct vm_gk20a *vm,
37 struct nvgpu_mem *inst_block); 38 struct nvgpu_mem *inst_block);
@@ -170,12 +171,12 @@ void gv11b_subctx_commit_pdb(struct vm_gk20a *vm,
170 struct nvgpu_mem *inst_block) 171 struct nvgpu_mem *inst_block)
171{ 172{
172 struct gk20a *g = gk20a_from_vm(vm); 173 struct gk20a *g = gk20a_from_vm(vm);
173 struct fifo_gk20a *f = &g->fifo;
174 u32 lo, hi; 174 u32 lo, hi;
175 u32 subctx_id = 0; 175 u32 subctx_id = 0;
176 u32 format_word; 176 u32 format_word;
177 u32 pdb_addr_lo, pdb_addr_hi; 177 u32 pdb_addr_lo, pdb_addr_hi;
178 u64 pdb_addr; 178 u64 pdb_addr;
179 u32 max_subctx_count = gr_pri_fe_chip_def_info_max_veid_count_init_v();
179 u32 aperture = nvgpu_aperture_mask(g, vm->pdb.mem, 180 u32 aperture = nvgpu_aperture_mask(g, vm->pdb.mem,
180 ram_in_sc_page_dir_base_target_sys_mem_ncoh_v(), 181 ram_in_sc_page_dir_base_target_sys_mem_ncoh_v(),
181 ram_in_sc_page_dir_base_target_vid_mem_v()); 182 ram_in_sc_page_dir_base_target_vid_mem_v());
@@ -194,7 +195,7 @@ void gv11b_subctx_commit_pdb(struct vm_gk20a *vm,
194 ram_in_sc_page_dir_base_lo_0_f(pdb_addr_lo); 195 ram_in_sc_page_dir_base_lo_0_f(pdb_addr_lo);
195 nvgpu_log(g, gpu_dbg_info, " pdb info lo %x hi %x", 196 nvgpu_log(g, gpu_dbg_info, " pdb info lo %x hi %x",
196 format_word, pdb_addr_hi); 197 format_word, pdb_addr_hi);
197 for (subctx_id = 0; subctx_id < f->max_subctx_count; subctx_id++) { 198 for (subctx_id = 0; subctx_id < max_subctx_count; subctx_id++) {
198 lo = ram_in_sc_page_dir_base_vol_0_w() + (4 * subctx_id); 199 lo = ram_in_sc_page_dir_base_vol_0_w() + (4 * subctx_id);
199 hi = ram_in_sc_page_dir_base_hi_0_w() + (4 * subctx_id); 200 hi = ram_in_sc_page_dir_base_hi_0_w() + (4 * subctx_id);
200 nvgpu_mem_wr32(g, inst_block, lo, format_word); 201 nvgpu_mem_wr32(g, inst_block, lo, format_word);