mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 02:22:34 +03:00
gpu: nvgpu: Do not skip errors in gk20a_init_sw_bundle
gk20a_init_sw_bundle() has a couple of places where it continues even despite an error is returned. Also it does not check the return value from gops->gr.init_sw_veid_bundle(). Add an error goto label which restores pipeline state. Add gotos to that label for all error cases. Coverity ID 490376 Change-Id: I65338272d2817fa831370c8f070019debbfcd673 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/1300098 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
91406a18f0
commit
07f0798173
@@ -1525,26 +1525,43 @@ static u32 gk20a_init_sw_bundle(struct gk20a *g)
|
||||
sw_bundle_init->l[i].addr);
|
||||
|
||||
if (gr_pipe_bundle_address_value_v(sw_bundle_init->l[i].addr) ==
|
||||
GR_GO_IDLE_BUNDLE)
|
||||
err |= gr_gk20a_wait_idle(g,
|
||||
GR_GO_IDLE_BUNDLE) {
|
||||
err = gr_gk20a_wait_idle(g,
|
||||
gk20a_get_gr_idle_timeout(g),
|
||||
GR_IDLE_CHECK_DEFAULT);
|
||||
if (err)
|
||||
goto error;
|
||||
}
|
||||
|
||||
err = gr_gk20a_wait_fe_idle(g, gk20a_get_gr_idle_timeout(g),
|
||||
GR_IDLE_CHECK_DEFAULT);
|
||||
if (err)
|
||||
break;
|
||||
goto error;
|
||||
}
|
||||
if (g->ops.gr.init_sw_veid_bundle)
|
||||
g->ops.gr.init_sw_veid_bundle(g);
|
||||
|
||||
if (!err && g->ops.gr.init_sw_veid_bundle) {
|
||||
err = g->ops.gr.init_sw_veid_bundle(g);
|
||||
if (err)
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* disable pipe mode override */
|
||||
gk20a_writel(g, gr_pipe_bundle_config_r(),
|
||||
gr_pipe_bundle_config_override_pipe_mode_disabled_f());
|
||||
|
||||
err = gr_gk20a_wait_idle(g, gk20a_get_gr_idle_timeout(g),
|
||||
GR_IDLE_CHECK_DEFAULT);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/* restore fe_go_idle */
|
||||
gk20a_writel(g, gr_fe_go_idle_timeout_r(),
|
||||
gr_fe_go_idle_timeout_count_prod_f());
|
||||
|
||||
return err;
|
||||
|
||||
error:
|
||||
/* in case of error skip waiting for GR idle - just restore state */
|
||||
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(),
|
||||
|
||||
Reference in New Issue
Block a user