summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/clk
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/clk')
-rw-r--r--drivers/gpu/nvgpu/clk/clk_arb.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/clk/clk_arb.c b/drivers/gpu/nvgpu/clk/clk_arb.c
index 983a82f9..8543196b 100644
--- a/drivers/gpu/nvgpu/clk/clk_arb.c
+++ b/drivers/gpu/nvgpu/clk/clk_arb.c
@@ -750,12 +750,20 @@ error_check:
750 750
751int nvgpu_clk_arb_init_arbiter(struct gk20a *g) 751int nvgpu_clk_arb_init_arbiter(struct gk20a *g)
752{ 752{
753 int err = 0;
754
753 if (!g->ops.clk.support_clk_freq_controller || 755 if (!g->ops.clk.support_clk_freq_controller ||
754 !g->ops.clk_arb.get_arbiter_clk_domains) { 756 !g->ops.clk_arb.get_arbiter_clk_domains) {
755 return 0; 757 return 0;
756 } 758 }
757 759
758 return g->ops.clk_arb.arbiter_clk_init(g); 760 nvgpu_mutex_acquire(&g->clk_arb_enable_lock);
761
762 err = g->ops.clk_arb.arbiter_clk_init(g);
763
764 nvgpu_mutex_release(&g->clk_arb_enable_lock);
765
766 return err;
759} 767}
760 768
761void nvgpu_clk_arb_send_thermal_alarm(struct gk20a *g) 769void nvgpu_clk_arb_send_thermal_alarm(struct gk20a *g)
@@ -783,10 +791,14 @@ void nvgpu_clk_arb_cleanup_arbiter(struct gk20a *g)
783{ 791{
784 struct nvgpu_clk_arb *arb = g->clk_arb; 792 struct nvgpu_clk_arb *arb = g->clk_arb;
785 793
794 nvgpu_mutex_acquire(&g->clk_arb_enable_lock);
795
786 if (arb) { 796 if (arb) {
787 nvgpu_clk_arb_worker_deinit(g); 797 nvgpu_clk_arb_worker_deinit(g);
788 g->ops.clk_arb.clk_arb_cleanup(g->clk_arb); 798 g->ops.clk_arb.clk_arb_cleanup(g->clk_arb);
789 } 799 }
800
801 nvgpu_mutex_release(&g->clk_arb_enable_lock);
790} 802}
791 803
792int nvgpu_clk_arb_init_session(struct gk20a *g, 804int nvgpu_clk_arb_init_session(struct gk20a *g,