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 <sgadagottu@nvidia.com>
Reviewed-on: http://git-master/r/1181571
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Adeel Raza <araza@nvidia.com>
This commit is contained in:
seshendra Gadagottu
2016-07-14 11:43:53 -07:00
committed by Seshendra Gadagottu
parent e2b965e555
commit 021c23e46e
2 changed files with 18 additions and 6 deletions

View File

@@ -118,10 +118,13 @@ static int gk20a_scale_make_freq_table(struct gk20a_scale_profile *profile)
int num_freqs, err;
unsigned long *freqs;
/* get gpu frequency table */
err = platform->get_clk_freqs(profile->dev, &freqs,
if (platform->get_clk_freqs) {
/* get gpu frequency table */
err = platform->get_clk_freqs(profile->dev, &freqs,
&num_freqs);
if (err)
if (err)
return -ENOSYS;
} else
return -ENOSYS;
profile->devfreq_profile.freq_table = (unsigned long *)freqs;

View File

@@ -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)