diff options
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | 10 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/acr_gm20b.c | 33 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/acr_gm20b.h | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/pmu_gm20b.c | 2 |
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, | |||
2476 | static int gk20a_init_pmu_setup_hw1(struct gk20a *g) | 2476 | static 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 | ||
1216 | int 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 | |||
1216 | static int gm20b_init_pmu_setup_hw1(struct gk20a *g, | 1249 | static 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); | |||
407 | int pmu_exec_gen_bl(struct gk20a *g, void *desc, u8 b_wait_for_halt); | 407 | int pmu_exec_gen_bl(struct gk20a *g, void *desc, u8 b_wait_for_halt); |
408 | int pmu_wait_for_halt(struct gk20a *g, unsigned int timeout_us); | 408 | int pmu_wait_for_halt(struct gk20a *g, unsigned int timeout_us); |
409 | int clear_halt_interrupt_status(struct gk20a *g, unsigned int timeout); | 409 | int clear_halt_interrupt_status(struct gk20a *g, unsigned int timeout); |
410 | int 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 | } |