summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gp10b/pmu_gp10b.c
diff options
context:
space:
mode:
authorSeshendra Gadagottu <sgadagottu@nvidia.com>2015-10-06 12:37:11 -0400
committerDeepak Nibade <dnibade@nvidia.com>2016-12-27 04:52:08 -0500
commit8066fc9b7be169e29f294a34eaa6e699f13baa5d (patch)
tree4a7d3b0155d25acfe0a32b696f20307288aeb603 /drivers/gpu/nvgpu/gp10b/pmu_gp10b.c
parent8d864432f5b411d6aaade01520c17c97c6282ac3 (diff)
gpu:nvgpu: gp10b: modify gpmu hw init
Modify gpmu hwinit to take gp10b specific register offsets in non-secure GPMU boot path. Bug 1685722 Change-Id: Id6696fb20c4fd40ee1b168c952a438771721c792 Signed-off-by: Seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-on: http://git-master/r/812271 (cherry picked from commit b9408892dd08beca5f4b2e056287a2bc28ccff0e) Reviewed-on: http://git-master/r/813979 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gp10b/pmu_gp10b.c')
-rw-r--r--drivers/gpu/nvgpu/gp10b/pmu_gp10b.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gp10b/pmu_gp10b.c b/drivers/gpu/nvgpu/gp10b/pmu_gp10b.c
index 77727ff2..df515d1b 100644
--- a/drivers/gpu/nvgpu/gp10b/pmu_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/pmu_gp10b.c
@@ -286,6 +286,44 @@ static void gp10b_write_dmatrfbase(struct gk20a *g, u32 addr)
286 0x0); 286 0x0);
287} 287}
288 288
289static int gp10b_init_pmu_setup_hw1(struct gk20a *g)
290{
291 struct pmu_gk20a *pmu = &g->pmu;
292 int err;
293
294 gk20a_dbg_fn("");
295
296 mutex_lock(&pmu->isr_mutex);
297 pmu_reset(pmu);
298 pmu->isr_enabled = true;
299 mutex_unlock(&pmu->isr_mutex);
300
301 /* setup apertures - virtual */
302 gk20a_writel(g, pwr_fbif_transcfg_r(GK20A_PMU_DMAIDX_UCODE),
303 pwr_fbif_transcfg_mem_type_virtual_f());
304 gk20a_writel(g, pwr_fbif_transcfg_r(GK20A_PMU_DMAIDX_VIRT),
305 pwr_fbif_transcfg_mem_type_virtual_f());
306
307 /* setup apertures - physical */
308 gk20a_writel(g, pwr_fbif_transcfg_r(GK20A_PMU_DMAIDX_PHYS_VID),
309 pwr_fbif_transcfg_mem_type_physical_f() |
310 pwr_fbif_transcfg_target_local_fb_f());
311 gk20a_writel(g, pwr_fbif_transcfg_r(GK20A_PMU_DMAIDX_PHYS_SYS_COH),
312 pwr_fbif_transcfg_mem_type_physical_f() |
313 pwr_fbif_transcfg_target_coherent_sysmem_f());
314 gk20a_writel(g, pwr_fbif_transcfg_r(GK20A_PMU_DMAIDX_PHYS_SYS_NCOH),
315 pwr_fbif_transcfg_mem_type_physical_f() |
316 pwr_fbif_transcfg_target_noncoherent_sysmem_f());
317
318 err = pmu_bootstrap(pmu);
319 if (err)
320 return err;
321
322 gk20a_dbg_fn("done");
323 return 0;
324
325}
326
289void gp10b_init_pmu_ops(struct gpu_ops *gops) 327void gp10b_init_pmu_ops(struct gpu_ops *gops)
290{ 328{
291 if (gops->privsecurity) { 329 if (gops->privsecurity) {
@@ -299,6 +337,7 @@ void gp10b_init_pmu_ops(struct gpu_ops *gops)
299 gops->pmu.load_lsfalcon_ucode = NULL; 337 gops->pmu.load_lsfalcon_ucode = NULL;
300 gops->pmu.init_wpr_region = NULL; 338 gops->pmu.init_wpr_region = NULL;
301 } 339 }
340 gops->pmu.pmu_setup_hw_and_bootstrap = gp10b_init_pmu_setup_hw1;
302 gops->pmu.pmu_setup_elpg = gp10b_pmu_setup_elpg; 341 gops->pmu.pmu_setup_elpg = gp10b_pmu_setup_elpg;
303 gops->pmu.lspmuwprinitdone = false; 342 gops->pmu.lspmuwprinitdone = false;
304 gops->pmu.fecsbootstrapdone = false; 343 gops->pmu.fecsbootstrapdone = false;