summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2017-05-01 21:32:46 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-05-03 15:16:24 -0400
commite2148ead8bbf51c2dbf9e2b501c989f2c27582a0 (patch)
tree2124f62df3dd52478f70b4309a00e6661ad6dc43
parentb3c3ffcbfba99628f033b36e53d8dfc4a5ccd7b9 (diff)
gpu: nvgpu: Program CE clock gating list after reset
Clock gating list for CE was programmed at GR init, but at that time CE has not yet been brought out of reset. This causes a priv ring error and the clock gating setting does not take place. Move programming of CE clock gating list to CE initialization. Bug 1846641 Change-Id: Ibc9fe2487408358304f80cd679d3b1ecac7cebe8 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/1473301 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-rw-r--r--drivers/gpu/nvgpu/gk20a/ce2_gk20a.c12
-rw-r--r--drivers/gpu/nvgpu/gk20a/fifo_gk20a.c3
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c9
3 files changed, 13 insertions, 11 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/ce2_gk20a.c b/drivers/gpu/nvgpu/gk20a/ce2_gk20a.c
index ed5a8b4e..8e3f1754 100644
--- a/drivers/gpu/nvgpu/gk20a/ce2_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/ce2_gk20a.c
@@ -339,6 +339,18 @@ int gk20a_init_ce_support(struct gk20a *g)
339{ 339{
340 struct gk20a_ce_app *ce_app = &g->ce_app; 340 struct gk20a_ce_app *ce_app = &g->ce_app;
341 int err; 341 int err;
342 u32 ce_reset_mask;
343
344 ce_reset_mask = gk20a_fifo_get_all_ce_engine_reset_mask(g);
345
346 g->ops.mc.reset(g, ce_reset_mask);
347
348 if (g->ops.clock_gating.slcg_ce2_load_gating_prod)
349 g->ops.clock_gating.slcg_ce2_load_gating_prod(g,
350 g->slcg_enabled);
351 if (g->ops.clock_gating.blcg_ce_load_gating_prod)
352 g->ops.clock_gating.blcg_ce_load_gating_prod(g,
353 g->blcg_enabled);
342 354
343 if (ce_app->initialised) { 355 if (ce_app->initialised) {
344 /* assume this happen during poweron/poweroff GPU sequence */ 356 /* assume this happen during poweron/poweroff GPU sequence */
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
index 4129e407..cb54a1ca 100644
--- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
@@ -767,9 +767,6 @@ int gk20a_init_fifo_reset_enable_hw(struct gk20a *g)
767 /* enable pmc pfifo */ 767 /* enable pmc pfifo */
768 g->ops.mc.reset(g, mc_enable_pfifo_enabled_f()); 768 g->ops.mc.reset(g, mc_enable_pfifo_enabled_f());
769 769
770 if (g->ops.clock_gating.slcg_ce2_load_gating_prod)
771 g->ops.clock_gating.slcg_ce2_load_gating_prod(g,
772 g->slcg_enabled);
773 if (g->ops.clock_gating.slcg_fifo_load_gating_prod) 770 if (g->ops.clock_gating.slcg_fifo_load_gating_prod)
774 g->ops.clock_gating.slcg_fifo_load_gating_prod(g, 771 g->ops.clock_gating.slcg_fifo_load_gating_prod(g,
775 g->slcg_enabled); 772 g->slcg_enabled);
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index b2225dae..48becc81 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -4935,9 +4935,6 @@ static void gr_gk20a_load_gating_prod(struct gk20a *g)
4935 if (g->ops.clock_gating.blcg_bus_load_gating_prod) 4935 if (g->ops.clock_gating.blcg_bus_load_gating_prod)
4936 g->ops.clock_gating.blcg_bus_load_gating_prod(g, 4936 g->ops.clock_gating.blcg_bus_load_gating_prod(g,
4937 g->blcg_enabled); 4937 g->blcg_enabled);
4938 if (g->ops.clock_gating.blcg_ce_load_gating_prod)
4939 g->ops.clock_gating.blcg_ce_load_gating_prod(g,
4940 g->blcg_enabled);
4941 if (g->ops.clock_gating.blcg_gr_load_gating_prod) 4938 if (g->ops.clock_gating.blcg_gr_load_gating_prod)
4942 g->ops.clock_gating.blcg_gr_load_gating_prod(g, 4939 g->ops.clock_gating.blcg_gr_load_gating_prod(g,
4943 g->blcg_enabled); 4940 g->blcg_enabled);
@@ -4957,9 +4954,6 @@ static int gk20a_init_gr_prepare(struct gk20a *g)
4957{ 4954{
4958 u32 gpfifo_ctrl, pmc_en; 4955 u32 gpfifo_ctrl, pmc_en;
4959 u32 err = 0; 4956 u32 err = 0;
4960 u32 ce_reset_mask;
4961
4962 ce_reset_mask = gk20a_fifo_get_all_ce_engine_reset_mask(g);
4963 4957
4964 /* disable fifo access */ 4958 /* disable fifo access */
4965 pmc_en = gk20a_readl(g, mc_enable_r()); 4959 pmc_en = gk20a_readl(g, mc_enable_r());
@@ -4972,8 +4966,7 @@ static int gk20a_init_gr_prepare(struct gk20a *g)
4972 /* reset gr engine */ 4966 /* reset gr engine */
4973 g->ops.mc.reset(g, mc_enable_pgraph_enabled_f() | 4967 g->ops.mc.reset(g, mc_enable_pgraph_enabled_f() |
4974 mc_enable_blg_enabled_f() | 4968 mc_enable_blg_enabled_f() |
4975 mc_enable_perfmon_enabled_f() | 4969 mc_enable_perfmon_enabled_f());
4976 ce_reset_mask);
4977 4970
4978 gr_gk20a_load_gating_prod(g); 4971 gr_gk20a_load_gating_prod(g);
4979 4972