From 021c23e46eb69ee2c888fa3b05834f110da7a450 Mon Sep 17 00:00:00 2001 From: seshendra Gadagottu Date: Thu, 14 Jul 2016 11:43:53 -0700 Subject: gpu: nvgpu: check for valid function pointers Before calling prod settings functions, check for availability of those functions. Similar check is extended for get_clk_freqs. Bug 1735760 Change-Id: Ic4b38079043ab2049a479a2d8bb0cb6091e94f4a Signed-off-by: seshendra Gadagottu Reviewed-on: http://git-master/r/1181571 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Adeel Raza --- drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c') diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index 62d3b231..6fc52ad0 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c @@ -4656,6 +4656,8 @@ out: static void gr_gk20a_load_gating_prod(struct gk20a *g) { + gk20a_dbg_fn(""); + /* slcg prod values */ if (g->ops.clock_gating.slcg_bus_load_gating_prod) g->ops.clock_gating.slcg_bus_load_gating_prod(g, @@ -4669,7 +4671,9 @@ static void gr_gk20a_load_gating_prod(struct gk20a *g) if (g->ops.clock_gating.slcg_ctxsw_firmware_load_gating_prod) g->ops.clock_gating.slcg_ctxsw_firmware_load_gating_prod(g, g->slcg_enabled); - g->ops.clock_gating.slcg_perf_load_gating_prod(g, g->slcg_enabled); + if (g->ops.clock_gating.slcg_perf_load_gating_prod) + g->ops.clock_gating.slcg_perf_load_gating_prod(g, + g->slcg_enabled); if (g->ops.clock_gating.slcg_xbar_load_gating_prod) g->ops.clock_gating.slcg_xbar_load_gating_prod(g, g->slcg_enabled); @@ -4681,14 +4685,19 @@ static void gr_gk20a_load_gating_prod(struct gk20a *g) if (g->ops.clock_gating.blcg_ce_load_gating_prod) g->ops.clock_gating.blcg_ce_load_gating_prod(g, g->blcg_enabled); - g->ops.clock_gating.blcg_gr_load_gating_prod(g, g->blcg_enabled); + if (g->ops.clock_gating.blcg_gr_load_gating_prod) + g->ops.clock_gating.blcg_gr_load_gating_prod(g, + g->blcg_enabled); if (g->ops.clock_gating.blcg_ctxsw_firmware_load_gating_prod) g->ops.clock_gating.blcg_ctxsw_firmware_load_gating_prod(g, g->blcg_enabled); if (g->ops.clock_gating.blcg_xbar_load_gating_prod) g->ops.clock_gating.blcg_xbar_load_gating_prod(g, g->blcg_enabled); - g->ops.clock_gating.pg_gr_load_gating_prod(g, true); + if (g->ops.clock_gating.pg_gr_load_gating_prod) + g->ops.clock_gating.pg_gr_load_gating_prod(g, true); + + gk20a_dbg_fn("done"); } static int gk20a_init_gr_prepare(struct gk20a *g) -- cgit v1.2.2