diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gp106/clk_gp106.c')
-rw-r--r-- | drivers/gpu/nvgpu/gp106/clk_gp106.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gp106/clk_gp106.c b/drivers/gpu/nvgpu/gp106/clk_gp106.c index 8869c94b..8bc47ead 100644 --- a/drivers/gpu/nvgpu/gp106/clk_gp106.c +++ b/drivers/gpu/nvgpu/gp106/clk_gp106.c | |||
@@ -78,18 +78,23 @@ static int gp106_init_clk_support(struct gk20a *g) { | |||
78 | 78 | ||
79 | gk20a_dbg_fn(""); | 79 | gk20a_dbg_fn(""); |
80 | 80 | ||
81 | nvgpu_mutex_init(&clk->clk_mutex); | 81 | err = nvgpu_mutex_init(&clk->clk_mutex); |
82 | if (err) | ||
83 | return err; | ||
82 | 84 | ||
83 | clk->clk_namemap = (struct namemap_cfg *) | 85 | clk->clk_namemap = (struct namemap_cfg *) |
84 | nvgpu_kzalloc(g, sizeof(struct namemap_cfg) * NUM_NAMEMAPS); | 86 | nvgpu_kzalloc(g, sizeof(struct namemap_cfg) * NUM_NAMEMAPS); |
85 | 87 | ||
86 | if (!clk->clk_namemap) | 88 | if (!clk->clk_namemap) { |
89 | nvgpu_mutex_destroy(&clk->clk_mutex); | ||
87 | return -ENOMEM; | 90 | return -ENOMEM; |
91 | } | ||
88 | 92 | ||
89 | clk->namemap_xlat_table = nvgpu_kcalloc(g, NUM_NAMEMAPS, sizeof(u32)); | 93 | clk->namemap_xlat_table = nvgpu_kcalloc(g, NUM_NAMEMAPS, sizeof(u32)); |
90 | 94 | ||
91 | if (!clk->namemap_xlat_table) { | 95 | if (!clk->namemap_xlat_table) { |
92 | nvgpu_kfree(g, clk->clk_namemap); | 96 | nvgpu_kfree(g, clk->clk_namemap); |
97 | nvgpu_mutex_destroy(&clk->clk_mutex); | ||
93 | return -ENOMEM; | 98 | return -ENOMEM; |
94 | } | 99 | } |
95 | 100 | ||
@@ -265,8 +270,15 @@ err_out: | |||
265 | } | 270 | } |
266 | #endif /* CONFIG_DEBUG_FS */ | 271 | #endif /* CONFIG_DEBUG_FS */ |
267 | 272 | ||
273 | static int gp106_suspend_clk_support(struct gk20a *g) | ||
274 | { | ||
275 | nvgpu_mutex_destroy(&g->clk.clk_mutex); | ||
276 | return 0; | ||
277 | } | ||
278 | |||
268 | void gp106_init_clk_ops(struct gpu_ops *gops) { | 279 | void gp106_init_clk_ops(struct gpu_ops *gops) { |
269 | gops->clk.init_clk_support = gp106_init_clk_support; | 280 | gops->clk.init_clk_support = gp106_init_clk_support; |
270 | gops->clk.get_crystal_clk_hz = gp106_crystal_clk_hz; | 281 | gops->clk.get_crystal_clk_hz = gp106_crystal_clk_hz; |
271 | gops->clk.measure_freq = gp106_clk_measure_freq; | 282 | gops->clk.measure_freq = gp106_clk_measure_freq; |
283 | gops->clk.suspend_clk_support = gp106_suspend_clk_support; | ||
272 | } | 284 | } |