summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index d7693515..488a6fcb 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -1525,26 +1525,43 @@ static u32 gk20a_init_sw_bundle(struct gk20a *g)
1525 sw_bundle_init->l[i].addr); 1525 sw_bundle_init->l[i].addr);
1526 1526
1527 if (gr_pipe_bundle_address_value_v(sw_bundle_init->l[i].addr) == 1527 if (gr_pipe_bundle_address_value_v(sw_bundle_init->l[i].addr) ==
1528 GR_GO_IDLE_BUNDLE) 1528 GR_GO_IDLE_BUNDLE) {
1529 err |= gr_gk20a_wait_idle(g, 1529 err = gr_gk20a_wait_idle(g,
1530 gk20a_get_gr_idle_timeout(g), 1530 gk20a_get_gr_idle_timeout(g),
1531 GR_IDLE_CHECK_DEFAULT); 1531 GR_IDLE_CHECK_DEFAULT);
1532 if (err)
1533 goto error;
1534 }
1532 1535
1533 err = gr_gk20a_wait_fe_idle(g, gk20a_get_gr_idle_timeout(g), 1536 err = gr_gk20a_wait_fe_idle(g, gk20a_get_gr_idle_timeout(g),
1534 GR_IDLE_CHECK_DEFAULT); 1537 GR_IDLE_CHECK_DEFAULT);
1535 if (err) 1538 if (err)
1536 break; 1539 goto error;
1537 } 1540 }
1538 if (g->ops.gr.init_sw_veid_bundle) 1541
1539 g->ops.gr.init_sw_veid_bundle(g); 1542 if (!err && g->ops.gr.init_sw_veid_bundle) {
1543 err = g->ops.gr.init_sw_veid_bundle(g);
1544 if (err)
1545 goto error;
1546 }
1547
1540 /* disable pipe mode override */ 1548 /* disable pipe mode override */
1541 gk20a_writel(g, gr_pipe_bundle_config_r(), 1549 gk20a_writel(g, gr_pipe_bundle_config_r(),
1542 gr_pipe_bundle_config_override_pipe_mode_disabled_f()); 1550 gr_pipe_bundle_config_override_pipe_mode_disabled_f());
1543 1551
1544 err = gr_gk20a_wait_idle(g, gk20a_get_gr_idle_timeout(g), 1552 err = gr_gk20a_wait_idle(g, gk20a_get_gr_idle_timeout(g),
1545 GR_IDLE_CHECK_DEFAULT); 1553 GR_IDLE_CHECK_DEFAULT);
1546 if (err) 1554
1547 return err; 1555 /* restore fe_go_idle */
1556 gk20a_writel(g, gr_fe_go_idle_timeout_r(),
1557 gr_fe_go_idle_timeout_count_prod_f());
1558
1559 return err;
1560
1561error:
1562 /* in case of error skip waiting for GR idle - just restore state */
1563 gk20a_writel(g, gr_pipe_bundle_config_r(),
1564 gr_pipe_bundle_config_override_pipe_mode_disabled_f());
1548 1565
1549 /* restore fe_go_idle */ 1566 /* restore fe_go_idle */
1550 gk20a_writel(g, gr_fe_go_idle_timeout_r(), 1567 gk20a_writel(g, gr_fe_go_idle_timeout_r(),