diff --git a/drivers/gpu/nvgpu/include/nvgpu/vgpu/vgpu.h b/drivers/gpu/nvgpu/include/nvgpu/vgpu/vgpu.h index e251ac717..029a7ec26 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/vgpu/vgpu.h +++ b/drivers/gpu/nvgpu/include/nvgpu/vgpu/vgpu.h @@ -102,5 +102,6 @@ int vgpu_gp10b_init_hal(struct gk20a *g); int vgpu_gv11b_init_hal(struct gk20a *g); bool vgpu_is_reduced_bar1(struct gk20a *g); +int vgpu_finalize_poweron_common(struct gk20a *g); #endif diff --git a/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c b/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c index 827a7737d..fe72a2fc1 100644 --- a/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c +++ b/drivers/gpu/nvgpu/os/linux/vgpu/vgpu_linux.c @@ -185,50 +185,10 @@ int vgpu_pm_finalize_poweron(struct device *dev) g->power_on = true; - vgpu_detect_chip(g); - err = vgpu_init_hal(g); + err = vgpu_finalize_poweron_common(g); if (err) goto done; - if (g->ops.ltc.init_fs_state) - g->ops.ltc.init_fs_state(g); - - err = nvgpu_init_ltc_support(g); - if (err) { - nvgpu_err(g, "failed to init ltc"); - goto done; - } - - err = vgpu_init_mm_support(g); - if (err) { - nvgpu_err(g, "failed to init gk20a mm"); - goto done; - } - - err = vgpu_init_fifo_support(g); - if (err) { - nvgpu_err(g, "failed to init gk20a fifo"); - goto done; - } - - err = vgpu_init_gr_support(g); - if (err) { - nvgpu_err(g, "failed to init gk20a gr"); - goto done; - } - - err = nvgpu_clk_arb_init_arbiter(g); - if (err) { - nvgpu_err(g, "failed to init clk arb"); - goto done; - } - - err = g->ops.chip_init_gpu_characteristics(g); - if (err) { - nvgpu_err(g, "failed to init gk20a gpu characteristics"); - goto done; - } - /* Initialize linux specific flags */ gk20a_init_linux_characteristics(g); @@ -236,11 +196,7 @@ int vgpu_pm_finalize_poweron(struct device *dev) if (err) goto done; -#ifdef CONFIG_GK20A_CTXSW_TRACE - gk20a_ctxsw_trace_init(g); -#endif gk20a_sched_ctrl_init(g); - gk20a_channel_resume(g); g->sw_ready = true; diff --git a/drivers/gpu/nvgpu/vgpu/vgpu.c b/drivers/gpu/nvgpu/vgpu/vgpu.c index 7141cbfd6..a433cc78d 100644 --- a/drivers/gpu/nvgpu/vgpu/vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/vgpu.c @@ -29,6 +29,8 @@ #include #include #include +#include +#include #include "fecs_trace_vgpu.h" @@ -399,3 +401,63 @@ int vgpu_get_constants(struct gk20a *g) priv->constants = *p; return 0; } + +int vgpu_finalize_poweron_common(struct gk20a *g) +{ + int err; + + nvgpu_log_fn(g, " "); + + vgpu_detect_chip(g); + err = vgpu_init_hal(g); + if (err != 0) { + return err; + } + + if (g->ops.ltc.init_fs_state != NULL) { + g->ops.ltc.init_fs_state(g); + } + + err = nvgpu_init_ltc_support(g); + if (err != 0) { + nvgpu_err(g, "failed to init ltc"); + return err; + } + + err = vgpu_init_mm_support(g); + if (err != 0) { + nvgpu_err(g, "failed to init gk20a mm"); + return err; + } + + err = vgpu_init_fifo_support(g); + if (err != 0) { + nvgpu_err(g, "failed to init gk20a fifo"); + return err; + } + + err = vgpu_init_gr_support(g); + if (err != 0) { + nvgpu_err(g, "failed to init gk20a gr"); + return err; + } + + err = nvgpu_clk_arb_init_arbiter(g); + if (err != 0) { + nvgpu_err(g, "failed to init clk arb"); + return err; + } + + err = g->ops.chip_init_gpu_characteristics(g); + if (err != 0) { + nvgpu_err(g, "failed to init gk20a gpu characteristics"); + return err; + } + +#ifdef CONFIG_GK20A_CTXSW_TRACE + gk20a_ctxsw_trace_init(g); +#endif + g->ops.fifo.channel_resume(g); + + return 0; +}