summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSupriya <ssharatkumar@nvidia.com>2015-08-07 03:02:32 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2015-08-21 13:59:07 -0400
commit3fba1e929ba17531f88809cbc12212cedaed015b (patch)
treec83dc5eb3b5df954fa52eab15df3b5d79efc08cf
parente44e67333bb835c54a2a66835a13498d4080893f (diff)
gpu: nvgpu: Fix NS boot transcfg
Bug 1667322 Accommodate for transcfg address change Change-Id: I7054202b8ce3be1a3fbfe0465e662be6f9740eb3 Signed-off-by: Supriya <ssharatkumar@nvidia.com> Reviewed-on: http://git-master/r/780326 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h1
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.c10
-rw-r--r--drivers/gpu/nvgpu/gm20b/acr_gm20b.c33
-rw-r--r--drivers/gpu/nvgpu/gm20b/acr_gm20b.h1
-rw-r--r--drivers/gpu/nvgpu/gm20b/pmu_gm20b.c2
5 files changed, 41 insertions, 6 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index 79240800..6454bbfc 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -385,6 +385,7 @@ struct gpu_ops {
385 struct { 385 struct {
386 int (*prepare_ucode)(struct gk20a *g); 386 int (*prepare_ucode)(struct gk20a *g);
387 int (*pmu_setup_hw_and_bootstrap)(struct gk20a *g); 387 int (*pmu_setup_hw_and_bootstrap)(struct gk20a *g);
388 int (*pmu_nsbootstrap)(struct pmu_gk20a *pmu);
388 int (*pmu_setup_elpg)(struct gk20a *g); 389 int (*pmu_setup_elpg)(struct gk20a *g);
389 int (*init_wpr_region)(struct gk20a *g); 390 int (*init_wpr_region)(struct gk20a *g);
390 int (*load_lsfalcon_ucode)(struct gk20a *g, u32 falconidmask); 391 int (*load_lsfalcon_ucode)(struct gk20a *g, u32 falconidmask);
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
index 2236e76c..18404ec0 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
@@ -2476,7 +2476,7 @@ static void pmu_handle_pg_buf_config_msg(struct gk20a *g, struct pmu_msg *msg,
2476static int gk20a_init_pmu_setup_hw1(struct gk20a *g) 2476static int gk20a_init_pmu_setup_hw1(struct gk20a *g)
2477{ 2477{
2478 struct pmu_gk20a *pmu = &g->pmu; 2478 struct pmu_gk20a *pmu = &g->pmu;
2479 int err; 2479 int err = 0;
2480 2480
2481 gk20a_dbg_fn(""); 2481 gk20a_dbg_fn("");
2482 2482
@@ -2501,12 +2501,9 @@ static int gk20a_init_pmu_setup_hw1(struct gk20a *g)
2501 pwr_fbif_transcfg_mem_type_physical_f() | 2501 pwr_fbif_transcfg_mem_type_physical_f() |
2502 pwr_fbif_transcfg_target_noncoherent_sysmem_f()); 2502 pwr_fbif_transcfg_target_noncoherent_sysmem_f());
2503 2503
2504 /* TBD: load pmu ucode */ 2504 err = g->ops.pmu.pmu_nsbootstrap(pmu);
2505 err = pmu_bootstrap(pmu);
2506 if (err)
2507 return err;
2508 2505
2509 return 0; 2506 return err;
2510 2507
2511} 2508}
2512 2509
@@ -2650,6 +2647,7 @@ void gk20a_init_pmu_ops(struct gpu_ops *gops)
2650{ 2647{
2651 gops->pmu.prepare_ucode = gk20a_prepare_ucode; 2648 gops->pmu.prepare_ucode = gk20a_prepare_ucode;
2652 gops->pmu.pmu_setup_hw_and_bootstrap = gk20a_init_pmu_setup_hw1; 2649 gops->pmu.pmu_setup_hw_and_bootstrap = gk20a_init_pmu_setup_hw1;
2650 gops->pmu.pmu_nsbootstrap = pmu_bootstrap;
2653 gops->pmu.pmu_setup_elpg = NULL; 2651 gops->pmu.pmu_setup_elpg = NULL;
2654 gops->pmu.init_wpr_region = NULL; 2652 gops->pmu.init_wpr_region = NULL;
2655 gops->pmu.load_lsfalcon_ucode = NULL; 2653 gops->pmu.load_lsfalcon_ucode = NULL;
diff --git a/drivers/gpu/nvgpu/gm20b/acr_gm20b.c b/drivers/gpu/nvgpu/gm20b/acr_gm20b.c
index 3a19d6b6..152b9637 100644
--- a/drivers/gpu/nvgpu/gm20b/acr_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/acr_gm20b.c
@@ -1213,6 +1213,39 @@ static int bl_bootstrap(struct pmu_gk20a *pmu,
1213 return 0; 1213 return 0;
1214} 1214}
1215 1215
1216int gm20b_init_nspmu_setup_hw1(struct gk20a *g)
1217{
1218 struct pmu_gk20a *pmu = &g->pmu;
1219 int err = 0;
1220
1221 gk20a_dbg_fn("");
1222
1223 mutex_lock(&pmu->isr_mutex);
1224 pmu_reset(pmu);
1225 pmu->isr_enabled = true;
1226 mutex_unlock(&pmu->isr_mutex);
1227
1228 /* setup apertures - virtual */
1229 gk20a_writel(g, pwr_fbif_transcfg_r(GK20A_PMU_DMAIDX_UCODE),
1230 pwr_fbif_transcfg_mem_type_virtual_f());
1231 gk20a_writel(g, pwr_fbif_transcfg_r(GK20A_PMU_DMAIDX_VIRT),
1232 pwr_fbif_transcfg_mem_type_virtual_f());
1233 /* setup apertures - physical */
1234 gk20a_writel(g, pwr_fbif_transcfg_r(GK20A_PMU_DMAIDX_PHYS_VID),
1235 pwr_fbif_transcfg_mem_type_physical_f() |
1236 pwr_fbif_transcfg_target_local_fb_f());
1237 gk20a_writel(g, pwr_fbif_transcfg_r(GK20A_PMU_DMAIDX_PHYS_SYS_COH),
1238 pwr_fbif_transcfg_mem_type_physical_f() |
1239 pwr_fbif_transcfg_target_coherent_sysmem_f());
1240 gk20a_writel(g, pwr_fbif_transcfg_r(GK20A_PMU_DMAIDX_PHYS_SYS_NCOH),
1241 pwr_fbif_transcfg_mem_type_physical_f() |
1242 pwr_fbif_transcfg_target_noncoherent_sysmem_f());
1243
1244 err = g->ops.pmu.pmu_nsbootstrap(pmu);
1245
1246 return err;
1247}
1248
1216static int gm20b_init_pmu_setup_hw1(struct gk20a *g, 1249static int gm20b_init_pmu_setup_hw1(struct gk20a *g,
1217 struct flcn_bl_dmem_desc *desc, u32 bl_sz) 1250 struct flcn_bl_dmem_desc *desc, u32 bl_sz)
1218{ 1251{
diff --git a/drivers/gpu/nvgpu/gm20b/acr_gm20b.h b/drivers/gpu/nvgpu/gm20b/acr_gm20b.h
index bd3b633a..fd9cf2ec 100644
--- a/drivers/gpu/nvgpu/gm20b/acr_gm20b.h
+++ b/drivers/gpu/nvgpu/gm20b/acr_gm20b.h
@@ -407,4 +407,5 @@ int gm20b_pmu_setup_sw(struct gk20a *g);
407int pmu_exec_gen_bl(struct gk20a *g, void *desc, u8 b_wait_for_halt); 407int pmu_exec_gen_bl(struct gk20a *g, void *desc, u8 b_wait_for_halt);
408int pmu_wait_for_halt(struct gk20a *g, unsigned int timeout_us); 408int pmu_wait_for_halt(struct gk20a *g, unsigned int timeout_us);
409int clear_halt_interrupt_status(struct gk20a *g, unsigned int timeout); 409int clear_halt_interrupt_status(struct gk20a *g, unsigned int timeout);
410int gm20b_init_nspmu_setup_hw1(struct gk20a *g);
410#endif /*__ACR_GM20B_H_*/ 411#endif /*__ACR_GM20B_H_*/
diff --git a/drivers/gpu/nvgpu/gm20b/pmu_gm20b.c b/drivers/gpu/nvgpu/gm20b/pmu_gm20b.c
index c3aad72b..813bb16c 100644
--- a/drivers/gpu/nvgpu/gm20b/pmu_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/pmu_gm20b.c
@@ -291,6 +291,8 @@ void gm20b_init_pmu_ops(struct gpu_ops *gops)
291 gops->pmu.load_lsfalcon_ucode = gm20b_load_falcon_ucode; 291 gops->pmu.load_lsfalcon_ucode = gm20b_load_falcon_ucode;
292 } else { 292 } else {
293 gk20a_init_pmu_ops(gops); 293 gk20a_init_pmu_ops(gops);
294 gops->pmu.pmu_setup_hw_and_bootstrap =
295 gm20b_init_nspmu_setup_hw1;
294 gops->pmu.load_lsfalcon_ucode = NULL; 296 gops->pmu.load_lsfalcon_ucode = NULL;
295 gops->pmu.init_wpr_region = NULL; 297 gops->pmu.init_wpr_region = NULL;
296 } 298 }