From ac205be1d31b00c5641df81d53f2da5f143d3354 Mon Sep 17 00:00:00 2001 From: Terje Bergstrom Date: Fri, 20 Feb 2015 10:03:47 -0800 Subject: gpu: nvgpu: Disable GO_IDLE timeout and skip waiting Disable GO_IDLE timeout when pushing SW methods. This stops FE_GI bit from getting enabled, so remove polling for that, too. Change-Id: I695aa9fbc68d4fe722ae46a28d7f4cc05db75b3b Signed-off-by: Terje Bergstrom Reviewed-on: http://git-master/r/709878 --- drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c') diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index d84d4ad5..3115b5c3 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c @@ -345,9 +345,7 @@ static int gr_gk20a_wait_fe_idle(struct gk20a *g, unsigned long end_jiffies, do { val = gk20a_readl(g, gr_status_r()); - if (!gr_status_fe_method_upper_v(val) && - !gr_status_fe_method_lower_v(val) && - !gr_status_fe_gi_v(val)) { + if (!gr_status_fe_method_lower_v(val)) { gk20a_dbg_fn("done"); return 0; } @@ -1407,7 +1405,14 @@ static u32 gk20a_init_sw_bundle(struct gk20a *g) int i; unsigned long end_jiffies = jiffies + msecs_to_jiffies(gk20a_get_gr_idle_timeout(g)); + u32 fe_go_idle_timeout_save; + /* save and disable fe_go_idle */ + fe_go_idle_timeout_save = + gk20a_readl(g, gr_fe_go_idle_timeout_r()); + gk20a_writel(g, gr_fe_go_idle_timeout_r(), + (fe_go_idle_timeout_save & gr_fe_go_idle_timeout_count_f(0)) | + gr_fe_go_idle_timeout_count_disabled_f()); /* enable pipe mode override */ gk20a_writel(g, gr_pipe_bundle_config_r(), gr_pipe_bundle_config_override_pipe_mode_enabled_f()); @@ -1438,6 +1443,9 @@ static u32 gk20a_init_sw_bundle(struct gk20a *g) gk20a_writel(g, gr_pipe_bundle_config_r(), gr_pipe_bundle_config_override_pipe_mode_disabled_f()); + /* restore fe_go_idle */ + gk20a_writel(g, gr_fe_go_idle_timeout_r(), fe_go_idle_timeout_save); + return err; } -- cgit v1.2.2