summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
diff options
context:
space:
mode:
authorDavid Nieto <dmartineznie@nvidia.com>2017-10-16 15:24:25 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-10-20 14:55:38 -0400
commit8c5ea40ccaad022401e45e61d5b6ff3354ffa413 (patch)
treeb67eb0bf86473cbebeb2fb84302fdd92d262c945 /drivers/gpu/nvgpu/gk20a/gr_gk20a.c
parente492eb5bdd8b4e6484291954f57d1b8303e22eb1 (diff)
gpu: nvgpu: handle smid table init failures
Handle the possibility of failing gr init due to smid table initialization failures bug 2004378 Change-Id: I904b918a0ea31c32292edb3ab8ac3b1459c38a28 Signed-off-by: David Nieto <dmartineznie@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1581661 Reviewed-by: Alex Waterman <alexw@nvidia.com> Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index 700dcdf8..1b9ecd86 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -1164,8 +1164,12 @@ int gr_gk20a_init_fs_state(struct gk20a *g)
1164 1164
1165 gk20a_dbg_fn(""); 1165 gk20a_dbg_fn("");
1166 1166
1167 if (g->ops.gr.init_sm_id_table) 1167 if (g->ops.gr.init_sm_id_table) {
1168 g->ops.gr.init_sm_id_table(g); 1168 g->ops.gr.init_sm_id_table(g);
1169 /* Is table empty ? */
1170 if (g->gr.no_of_sm == 0)
1171 return -EINVAL;
1172 }
1169 1173
1170 for (sm_id = 0; sm_id < g->gr.no_of_sm; sm_id++) { 1174 for (sm_id = 0; sm_id < g->gr.no_of_sm; sm_id++) {
1171 tpc_index = g->gr.sm_to_cluster[sm_id].tpc_index; 1175 tpc_index = g->gr.sm_to_cluster[sm_id].tpc_index;
@@ -1459,7 +1463,9 @@ static int gr_gk20a_init_golden_ctx_image(struct gk20a *g,
1459 g->ops.gr.commit_global_timeslice(g, c, false); 1463 g->ops.gr.commit_global_timeslice(g, c, false);
1460 1464
1461 /* floorsweep anything left */ 1465 /* floorsweep anything left */
1462 g->ops.gr.init_fs_state(g); 1466 err = g->ops.gr.init_fs_state(g);
1467 if (err)
1468 goto clean_up;
1463 1469
1464 err = gr_gk20a_wait_idle(g, gk20a_get_gr_idle_timeout(g), 1470 err = gr_gk20a_wait_idle(g, gk20a_get_gr_idle_timeout(g),
1465 GR_IDLE_CHECK_DEFAULT); 1471 GR_IDLE_CHECK_DEFAULT);