diff options
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/pmu_gp10b.c | 39 |
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 | ||
289 | static 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 | |||
289 | void gp10b_init_pmu_ops(struct gpu_ops *gops) | 327 | void 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; |