diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index 0997ea367..0cb7e246d 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c @@ -780,8 +780,7 @@ int gk20a_init_sw_bundle(struct gk20a *g) unsigned int i; /* enable pipe mode override */ - gk20a_writel(g, gr_pipe_bundle_config_r(), - gr_pipe_bundle_config_override_pipe_mode_enabled_f()); + g->ops.gr.init.pipe_mode_override(g, true); /* load bundle init */ for (i = 0U; i < sw_bundle_init->count; i++) { @@ -823,8 +822,7 @@ int gk20a_init_sw_bundle(struct gk20a *g) } /* disable pipe mode override */ - gk20a_writel(g, gr_pipe_bundle_config_r(), - gr_pipe_bundle_config_override_pipe_mode_disabled_f()); + g->ops.gr.init.pipe_mode_override(g, false); err = g->ops.gr.init.wait_idle(g); @@ -832,8 +830,7 @@ int gk20a_init_sw_bundle(struct gk20a *g) 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()); + g->ops.gr.init.pipe_mode_override(g, false); return err; } diff --git a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c index 9116874a6..837d78a55 100644 --- a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c @@ -468,6 +468,7 @@ static const struct gpu_ops gm20b_ops = { gm20b_gr_init_commit_global_attrib_cb, .commit_global_cb_manager = gm20b_gr_init_commit_global_cb_manager, + .pipe_mode_override = gm20b_gr_init_pipe_mode_override, }, .intr = { .enable_hww_exceptions = diff --git a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c index 8e9dabb3e..f86935319 100644 --- a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c +++ b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c @@ -546,6 +546,7 @@ static const struct gpu_ops gp10b_ops = { gp10b_gr_init_commit_global_attrib_cb, .commit_global_cb_manager = gp10b_gr_init_commit_global_cb_manager, + .pipe_mode_override = gm20b_gr_init_pipe_mode_override, }, .intr = { .enable_hww_exceptions = diff --git a/drivers/gpu/nvgpu/gv100/hal_gv100.c b/drivers/gpu/nvgpu/gv100/hal_gv100.c index 4a1f9d3de..d2d1fc90e 100644 --- a/drivers/gpu/nvgpu/gv100/hal_gv100.c +++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c @@ -689,6 +689,7 @@ static const struct gpu_ops gv100_ops = { gv11b_gr_init_commit_global_attrib_cb, .commit_global_cb_manager = gp10b_gr_init_commit_global_cb_manager, + .pipe_mode_override = gm20b_gr_init_pipe_mode_override, }, .intr = { .enable_hww_exceptions = diff --git a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c index d0eac8ac1..7422da878 100644 --- a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c @@ -648,6 +648,7 @@ static const struct gpu_ops gv11b_ops = { gv11b_gr_init_commit_global_attrib_cb, .commit_global_cb_manager = gp10b_gr_init_commit_global_cb_manager, + .pipe_mode_override = gm20b_gr_init_pipe_mode_override, }, .intr = { .enable_hww_exceptions = diff --git a/drivers/gpu/nvgpu/hal/gr/init/gr_init_gm20b.c b/drivers/gpu/nvgpu/hal/gr/init/gr_init_gm20b.c index 90ce0fd2f..77a3480c7 100644 --- a/drivers/gpu/nvgpu/hal/gr/init/gr_init_gm20b.c +++ b/drivers/gpu/nvgpu/hal/gr/init/gr_init_gm20b.c @@ -711,6 +711,17 @@ void gm20b_gr_init_fe_go_idle_timeout(struct gk20a *g, bool enable) } } +void gm20b_gr_init_pipe_mode_override(struct gk20a *g, bool enable) +{ + if (enable) { + nvgpu_writel(g, gr_pipe_bundle_config_r(), + gr_pipe_bundle_config_override_pipe_mode_enabled_f()); + } else { + nvgpu_writel(g, gr_pipe_bundle_config_r(), + gr_pipe_bundle_config_override_pipe_mode_disabled_f()); + } +} + void gm20b_gr_init_load_method_init(struct gk20a *g, struct netlist_av_list *sw_method_init) { diff --git a/drivers/gpu/nvgpu/hal/gr/init/gr_init_gm20b.h b/drivers/gpu/nvgpu/hal/gr/init/gr_init_gm20b.h index 74d9a13fa..a579b0bd1 100644 --- a/drivers/gpu/nvgpu/hal/gr/init/gr_init_gm20b.h +++ b/drivers/gpu/nvgpu/hal/gr/init/gr_init_gm20b.h @@ -59,6 +59,7 @@ int gm20b_gr_init_wait_fe_idle(struct gk20a *g); int gm20b_gr_init_fe_pwr_mode_force_on(struct gk20a *g, bool force_on); void gm20b_gr_init_override_context_reset(struct gk20a *g); void gm20b_gr_init_fe_go_idle_timeout(struct gk20a *g, bool enable); +void gm20b_gr_init_pipe_mode_override(struct gk20a *g, bool enable); void gm20b_gr_init_load_method_init(struct gk20a *g, struct netlist_av_list *sw_method_init); void gm20b_gr_init_commit_global_timeslice(struct gk20a *g); diff --git a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h index 78cad396b..9d7cc3dae 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h +++ b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h @@ -733,6 +733,8 @@ struct gpu_ops { void (*commit_global_cb_manager)(struct gk20a *g, struct nvgpu_gr_config *config, struct nvgpu_gr_ctx *gr_ctx, bool patch); + void (*pipe_mode_override)(struct gk20a *g, + bool enable); } init; struct { diff --git a/drivers/gpu/nvgpu/tu104/hal_tu104.c b/drivers/gpu/nvgpu/tu104/hal_tu104.c index efe616918..142c1f31a 100644 --- a/drivers/gpu/nvgpu/tu104/hal_tu104.c +++ b/drivers/gpu/nvgpu/tu104/hal_tu104.c @@ -722,6 +722,7 @@ static const struct gpu_ops tu104_ops = { gv11b_gr_init_commit_global_attrib_cb, .commit_global_cb_manager = gp10b_gr_init_commit_global_cb_manager, + .pipe_mode_override = gm20b_gr_init_pipe_mode_override, }, .intr = { .enable_hww_exceptions =