]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
gpu: nvgpu: Use HAL for waiting for GR quiet
authorTerje Bergstrom <tbergstrom@nvidia.com>
Thu, 21 May 2015 15:22:51 +0000 (08:22 -0700)
committerTerje Bergstrom <tbergstrom@nvidia.com>
Mon, 1 Jun 2015 17:44:14 +0000 (10:44 -0700)
Create a HAL for waiting for GR to become quiet. Use it forall cases
where we require GR to be quiet, but where it does not need to be
idle.

Bug 1640378

Change-Id: Ic0222d595a2d049e0fa8864b069ab94a97fac143
Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com>
Reviewed-on: http://git-master/r/745639
Reviewed-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-by: Seshendra Gadagottu <sgadagottu@nvidia.com>
drivers/gpu/nvgpu/gk20a/gk20a.h
drivers/gpu/nvgpu/gk20a/gr_gk20a.c
drivers/gpu/nvgpu/gm20b/gr_gm20b.c

index 70c2ea59ba0a8f56cb3f2b789bf1f28fc9d5d90f..052fb000445423d56457aba530c4443ef6622f0b 100644 (file)
@@ -177,6 +177,8 @@ struct gpu_ops {
                u32 (*get_max_lts_per_ltc)(struct gk20a *g);
                u32* (*get_rop_l2_en_mask)(struct gk20a *g);
                void (*init_sm_dsm_reg_info)(void);
+               int (*wait_empty)(struct gk20a *g, unsigned long end_jiffies,
+                      u32 expect_delay);
        } gr;
        const char *name;
        struct {
index 836760a5611bc1739752ee562c521bfeb217c6f0..27028a147dbafd75d6a57a655d39006031e80889 100644 (file)
@@ -3489,7 +3489,7 @@ void gr_gk20a_pmu_save_zbc(struct gk20a *g, u32 entries)
                return;
        }
 
-       ret = gr_gk20a_wait_idle(g, end_jiffies, GR_IDLE_CHECK_DEFAULT);
+       ret = g->ops.gr.wait_empty(g, end_jiffies, GR_IDLE_CHECK_DEFAULT);
        if (ret) {
                gk20a_err(dev_from_gk20a(g),
                        "failed to idle graphics\n");
@@ -3772,7 +3772,7 @@ static int _gk20a_gr_zbc_set_table(struct gk20a *g, struct gr_gk20a *gr,
        }
 
        end_jiffies = jiffies + msecs_to_jiffies(gk20a_get_gr_idle_timeout(g));
-       ret = gr_gk20a_wait_idle(g, end_jiffies, GR_IDLE_CHECK_DEFAULT);
+       ret = g->ops.gr.wait_empty(g, end_jiffies, GR_IDLE_CHECK_DEFAULT);
        if (ret) {
                gk20a_err(dev_from_gk20a(g),
                        "failed to idle graphics\n");
@@ -5655,7 +5655,7 @@ int gk20a_gr_suspend(struct gk20a *g)
 
        gk20a_dbg_fn("");
 
-       ret = gr_gk20a_wait_idle(g, end_jiffies, GR_IDLE_CHECK_DEFAULT);
+       ret = g->ops.gr.wait_empty(g, end_jiffies, GR_IDLE_CHECK_DEFAULT);
        if (ret)
                return ret;
 
@@ -7345,4 +7345,5 @@ void gk20a_init_gr_ops(struct gpu_ops *gops)
        gops->gr.get_max_lts_per_ltc = gr_gk20a_get_max_lts_per_ltc;
        gops->gr.get_rop_l2_en_mask = gr_gk20a_rop_l2_en_mask;
        gops->gr.init_sm_dsm_reg_info = gr_gk20a_init_sm_dsm_reg_info;
+       gops->gr.wait_empty = gr_gk20a_wait_idle;
 }
index 241fffa2aef48815b93d5e450b58fc2da7e3ced6..e37a7e1a5ad234e96694753cb36db663b785927e 100644 (file)
@@ -1119,4 +1119,5 @@ void gm20b_init_gr(struct gpu_ops *gops)
        gops->gr.get_rop_l2_en_mask = gr_gm20b_rop_l2_en_mask;
        gops->gr.get_max_fbps_count = gr_gm20b_get_max_fbps_count;
        gops->gr.init_sm_dsm_reg_info = gr_gm20b_init_sm_dsm_reg_info;
+       gops->gr.wait_empty = gr_gk20a_wait_idle;
 }