summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2015-02-20 13:03:47 -0500
committerDan Willemsen <dwillemsen@nvidia.com>2015-04-04 21:08:04 -0400
commitac205be1d31b00c5641df81d53f2da5f143d3354 (patch)
treea63815927d2fc5414c380d5753bf973ff1bb9f8e /drivers/gpu/nvgpu/gk20a/gr_gk20a.c
parentb82c86a8650aa11cd730c5b8a62315d63ce62ad4 (diff)
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 <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/709878
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c14
1 files changed, 11 insertions, 3 deletions
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,
345 do { 345 do {
346 val = gk20a_readl(g, gr_status_r()); 346 val = gk20a_readl(g, gr_status_r());
347 347
348 if (!gr_status_fe_method_upper_v(val) && 348 if (!gr_status_fe_method_lower_v(val)) {
349 !gr_status_fe_method_lower_v(val) &&
350 !gr_status_fe_gi_v(val)) {
351 gk20a_dbg_fn("done"); 349 gk20a_dbg_fn("done");
352 return 0; 350 return 0;
353 } 351 }
@@ -1407,7 +1405,14 @@ static u32 gk20a_init_sw_bundle(struct gk20a *g)
1407 int i; 1405 int i;
1408 unsigned long end_jiffies = jiffies + 1406 unsigned long end_jiffies = jiffies +
1409 msecs_to_jiffies(gk20a_get_gr_idle_timeout(g)); 1407 msecs_to_jiffies(gk20a_get_gr_idle_timeout(g));
1408 u32 fe_go_idle_timeout_save;
1410 1409
1410 /* save and disable fe_go_idle */
1411 fe_go_idle_timeout_save =
1412 gk20a_readl(g, gr_fe_go_idle_timeout_r());
1413 gk20a_writel(g, gr_fe_go_idle_timeout_r(),
1414 (fe_go_idle_timeout_save & gr_fe_go_idle_timeout_count_f(0)) |
1415 gr_fe_go_idle_timeout_count_disabled_f());
1411 /* enable pipe mode override */ 1416 /* enable pipe mode override */
1412 gk20a_writel(g, gr_pipe_bundle_config_r(), 1417 gk20a_writel(g, gr_pipe_bundle_config_r(),
1413 gr_pipe_bundle_config_override_pipe_mode_enabled_f()); 1418 gr_pipe_bundle_config_override_pipe_mode_enabled_f());
@@ -1438,6 +1443,9 @@ static u32 gk20a_init_sw_bundle(struct gk20a *g)
1438 gk20a_writel(g, gr_pipe_bundle_config_r(), 1443 gk20a_writel(g, gr_pipe_bundle_config_r(),
1439 gr_pipe_bundle_config_override_pipe_mode_disabled_f()); 1444 gr_pipe_bundle_config_override_pipe_mode_disabled_f());
1440 1445
1446 /* restore fe_go_idle */
1447 gk20a_writel(g, gr_fe_go_idle_timeout_r(), fe_go_idle_timeout_save);
1448
1441 return err; 1449 return err;
1442} 1450}
1443 1451