summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2015-11-06 12:45:56 -0500
committerTerje Bergstrom <tbergstrom@nvidia.com>2015-11-17 18:12:00 -0500
commite469b21a1d8b0de70a14caaeb701395ba6f4ebc7 (patch)
tree0d12bac312f8be4cbcb20d812f58b60e542e453c /drivers/gpu/nvgpu/gk20a/gr_gk20a.c
parent30632cec54048944ee364781b4b8c2676ae5dfed (diff)
gpu: nvgpu: ZBC update without idle
Do ZBC updates without forcing engine idle first. Bug 1698013 Change-Id: I99218c8cfd02be05dace2003b8d91921765f7ca9 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/829145
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c74
1 files changed, 2 insertions, 72 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index 0cb18665..090f95a5 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -3456,42 +3456,6 @@ int gr_gk20a_add_zbc_depth(struct gk20a *g, struct gr_gk20a *gr,
3456 return 0; 3456 return 0;
3457} 3457}
3458 3458
3459void gr_gk20a_pmu_save_zbc(struct gk20a *g, u32 entries)
3460{
3461 struct fifo_gk20a *f = &g->fifo;
3462 struct fifo_engine_info_gk20a *gr_info =
3463 f->engine_info + ENGINE_GR_GK20A;
3464 unsigned long end_jiffies = jiffies +
3465 msecs_to_jiffies(gk20a_get_gr_idle_timeout(g));
3466 u32 ret;
3467
3468 ret = gk20a_fifo_disable_engine_activity(g, gr_info, true);
3469 if (ret) {
3470 gk20a_err(dev_from_gk20a(g),
3471 "failed to disable gr engine activity\n");
3472 return;
3473 }
3474
3475 ret = g->ops.gr.wait_empty(g, end_jiffies, GR_IDLE_CHECK_DEFAULT);
3476 if (ret) {
3477 gk20a_err(dev_from_gk20a(g),
3478 "failed to idle graphics\n");
3479 goto clean_up;
3480 }
3481
3482 /* update zbc */
3483 gk20a_pmu_save_zbc(g, entries);
3484
3485clean_up:
3486 ret = gk20a_fifo_enable_engine_activity(g, gr_info);
3487 if (ret) {
3488 gk20a_err(dev_from_gk20a(g),
3489 "failed to enable gr engine activity\n");
3490 }
3491
3492 return;
3493}
3494
3495int gr_gk20a_add_zbc(struct gk20a *g, struct gr_gk20a *gr, 3459int gr_gk20a_add_zbc(struct gk20a *g, struct gr_gk20a *gr,
3496 struct zbc_entry *zbc_val) 3460 struct zbc_entry *zbc_val)
3497{ 3461{
@@ -3584,7 +3548,7 @@ int gr_gk20a_add_zbc(struct gk20a *g, struct gr_gk20a *gr,
3584 /* update zbc for elpg only when new entry is added */ 3548 /* update zbc for elpg only when new entry is added */
3585 entries = max(gr->max_used_color_index, 3549 entries = max(gr->max_used_color_index,
3586 gr->max_used_depth_index); 3550 gr->max_used_depth_index);
3587 gr_gk20a_pmu_save_zbc(g, entries); 3551 gk20a_pmu_save_zbc(g, entries);
3588 } 3552 }
3589 3553
3590err_mutex: 3554err_mutex:
@@ -3739,47 +3703,13 @@ int gr_gk20a_load_zbc_default_table(struct gk20a *g, struct gr_gk20a *gr)
3739 return 0; 3703 return 0;
3740} 3704}
3741 3705
3742static int _gk20a_gr_zbc_set_table(struct gk20a *g, struct gr_gk20a *gr,
3743 struct zbc_entry *zbc_val)
3744{
3745 struct fifo_gk20a *f = &g->fifo;
3746 struct fifo_engine_info_gk20a *gr_info = f->engine_info + ENGINE_GR_GK20A;
3747 unsigned long end_jiffies;
3748 int ret;
3749
3750 ret = gk20a_fifo_disable_engine_activity(g, gr_info, true);
3751 if (ret) {
3752 gk20a_err(dev_from_gk20a(g),
3753 "failed to disable gr engine activity\n");
3754 return ret;
3755 }
3756
3757 end_jiffies = jiffies + msecs_to_jiffies(gk20a_get_gr_idle_timeout(g));
3758 ret = g->ops.gr.wait_empty(g, end_jiffies, GR_IDLE_CHECK_DEFAULT);
3759 if (ret) {
3760 gk20a_err(dev_from_gk20a(g),
3761 "failed to idle graphics\n");
3762 goto clean_up;
3763 }
3764
3765 ret = gr_gk20a_add_zbc(g, gr, zbc_val);
3766
3767clean_up:
3768 if (gk20a_fifo_enable_engine_activity(g, gr_info)) {
3769 gk20a_err(dev_from_gk20a(g),
3770 "failed to enable gr engine activity\n");
3771 }
3772
3773 return ret;
3774}
3775
3776int gk20a_gr_zbc_set_table(struct gk20a *g, struct gr_gk20a *gr, 3706int gk20a_gr_zbc_set_table(struct gk20a *g, struct gr_gk20a *gr,
3777 struct zbc_entry *zbc_val) 3707 struct zbc_entry *zbc_val)
3778{ 3708{
3779 gk20a_dbg_fn(""); 3709 gk20a_dbg_fn("");
3780 3710
3781 return gr_gk20a_elpg_protected_call(g, 3711 return gr_gk20a_elpg_protected_call(g,
3782 _gk20a_gr_zbc_set_table(g, gr, zbc_val)); 3712 gr_gk20a_add_zbc(g, gr, zbc_val));
3783} 3713}
3784 3714
3785void gr_gk20a_init_blcg_mode(struct gk20a *g, u32 mode, u32 engine) 3715void gr_gk20a_init_blcg_mode(struct gk20a *g, u32 mode, u32 engine)