summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2016-08-29 12:16:12 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2016-09-08 23:05:49 -0400
commitf56ed459dde2a292b3af0dd4deb96b1090eb53a2 (patch)
treee69a53c34f6b89805ef74a63ecfacede0d864cc5
parenta0dd3ee5becb8e0f91e46654e25619b55655c017 (diff)
gpu: nvgpu: Skip calling undefined prod callbacks
Fix rest of code to not call prod callbacks that are set to NULL. Bug 1799537 Change-Id: I756bb1f7ef58ba753ac43a2be6f125107be3cf34 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/1209133 (cherry picked from commit 5f4d7b42b6101407fde8c4a7dcdd3633eca85ae5) Reviewed-on: http://git-master/r/1217297 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-rw-r--r--drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c30
-rw-r--r--drivers/gpu/nvgpu/gk20a/fifo_gk20a.c15
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c9
3 files changed, 33 insertions, 21 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c
index f1f2cc70..d15386d7 100644
--- a/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c
@@ -1088,12 +1088,15 @@ static int dbg_set_powergate(struct dbg_session_gk20a *dbg_s, u32 powermode)
1088 /*do elpg disable before clock gating */ 1088 /*do elpg disable before clock gating */
1089 if (support_gk20a_pmu(g->dev)) 1089 if (support_gk20a_pmu(g->dev))
1090 gk20a_pmu_disable_elpg(g); 1090 gk20a_pmu_disable_elpg(g);
1091 g->ops.clock_gating.slcg_gr_load_gating_prod(g, 1091 if (g->ops.clock_gating.slcg_gr_load_gating_prod)
1092 false); 1092 g->ops.clock_gating.slcg_gr_load_gating_prod(g,
1093 g->ops.clock_gating.slcg_perf_load_gating_prod(g, 1093 false);
1094 false); 1094 if (g->ops.clock_gating.slcg_perf_load_gating_prod)
1095 g->ops.clock_gating.slcg_ltc_load_gating_prod(g, 1095 g->ops.clock_gating.slcg_perf_load_gating_prod(g,
1096 false); 1096 false);
1097 if (g->ops.clock_gating.slcg_ltc_load_gating_prod)
1098 g->ops.clock_gating.slcg_ltc_load_gating_prod(g,
1099 false);
1097 1100
1098 gr_gk20a_init_cg_mode(g, BLCG_MODE, BLCG_RUN); 1101 gr_gk20a_init_cg_mode(g, BLCG_MODE, BLCG_RUN);
1099 g->elcg_enabled = false; 1102 g->elcg_enabled = false;
@@ -1120,12 +1123,15 @@ static int dbg_set_powergate(struct dbg_session_gk20a *dbg_s, u32 powermode)
1120 gr_gk20a_init_cg_mode(g, ELCG_MODE, ELCG_AUTO); 1123 gr_gk20a_init_cg_mode(g, ELCG_MODE, ELCG_AUTO);
1121 gr_gk20a_init_cg_mode(g, BLCG_MODE, BLCG_AUTO); 1124 gr_gk20a_init_cg_mode(g, BLCG_MODE, BLCG_AUTO);
1122 1125
1123 g->ops.clock_gating.slcg_ltc_load_gating_prod(g, 1126 if (g->ops.clock_gating.slcg_ltc_load_gating_prod)
1124 g->slcg_enabled); 1127 g->ops.clock_gating.slcg_ltc_load_gating_prod(g,
1125 g->ops.clock_gating.slcg_perf_load_gating_prod(g, 1128 g->slcg_enabled);
1126 g->slcg_enabled); 1129 if (g->ops.clock_gating.slcg_perf_load_gating_prod)
1127 g->ops.clock_gating.slcg_gr_load_gating_prod(g, 1130 g->ops.clock_gating.slcg_perf_load_gating_prod(g,
1128 g->slcg_enabled); 1131 g->slcg_enabled);
1132 if (g->ops.clock_gating.slcg_gr_load_gating_prod)
1133 g->ops.clock_gating.slcg_gr_load_gating_prod(g,
1134 g->slcg_enabled);
1129 1135
1130 if (support_gk20a_pmu(g->dev)) 1136 if (support_gk20a_pmu(g->dev))
1131 gk20a_pmu_enable_elpg(g); 1137 gk20a_pmu_enable_elpg(g);
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
index c5bc5bda..ee42f4d7 100644
--- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
@@ -1323,12 +1323,15 @@ static bool gk20a_fifo_handle_mmu_fault(
1323 /* Disable power management */ 1323 /* Disable power management */
1324 if (support_gk20a_pmu(g->dev) && g->elpg_enabled) 1324 if (support_gk20a_pmu(g->dev) && g->elpg_enabled)
1325 gk20a_pmu_disable_elpg(g); 1325 gk20a_pmu_disable_elpg(g);
1326 g->ops.clock_gating.slcg_gr_load_gating_prod(g, 1326 if (g->ops.clock_gating.slcg_gr_load_gating_prod)
1327 false); 1327 g->ops.clock_gating.slcg_gr_load_gating_prod(g,
1328 g->ops.clock_gating.slcg_perf_load_gating_prod(g, 1328 false);
1329 false); 1329 if (g->ops.clock_gating.slcg_perf_load_gating_prod)
1330 g->ops.clock_gating.slcg_ltc_load_gating_prod(g, 1330 g->ops.clock_gating.slcg_perf_load_gating_prod(g,
1331 false); 1331 false);
1332 if (g->ops.clock_gating.slcg_ltc_load_gating_prod)
1333 g->ops.clock_gating.slcg_ltc_load_gating_prod(g,
1334 false);
1332 1335
1333 gr_gk20a_init_cg_mode(g, ELCG_MODE, ELCG_RUN); 1336 gr_gk20a_init_cg_mode(g, ELCG_MODE, ELCG_RUN);
1334 1337
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c b/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c
index 973adc7d..8ac983d9 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c
+++ b/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c
@@ -104,7 +104,8 @@ static ssize_t blcg_enable_store(struct device *dev,
104 g->ops.clock_gating.blcg_fb_load_gating_prod(g, g->blcg_enabled); 104 g->ops.clock_gating.blcg_fb_load_gating_prod(g, g->blcg_enabled);
105 if (g->ops.clock_gating.blcg_fifo_load_gating_prod) 105 if (g->ops.clock_gating.blcg_fifo_load_gating_prod)
106 g->ops.clock_gating.blcg_fifo_load_gating_prod(g, g->blcg_enabled); 106 g->ops.clock_gating.blcg_fifo_load_gating_prod(g, g->blcg_enabled);
107 g->ops.clock_gating.blcg_gr_load_gating_prod(g, g->blcg_enabled); 107 if (g->ops.clock_gating.blcg_gr_load_gating_prod)
108 g->ops.clock_gating.blcg_gr_load_gating_prod(g, g->blcg_enabled);
108 if (g->ops.clock_gating.blcg_ltc_load_gating_prod) 109 if (g->ops.clock_gating.blcg_ltc_load_gating_prod)
109 g->ops.clock_gating.blcg_ltc_load_gating_prod(g, g->blcg_enabled); 110 g->ops.clock_gating.blcg_ltc_load_gating_prod(g, g->blcg_enabled);
110 if (g->ops.clock_gating.blcg_pmu_load_gating_prod) 111 if (g->ops.clock_gating.blcg_pmu_load_gating_prod)
@@ -167,10 +168,12 @@ static ssize_t slcg_enable_store(struct device *dev,
167 g->ops.clock_gating.slcg_fb_load_gating_prod(g, g->slcg_enabled); 168 g->ops.clock_gating.slcg_fb_load_gating_prod(g, g->slcg_enabled);
168 if (g->ops.clock_gating.slcg_fifo_load_gating_prod) 169 if (g->ops.clock_gating.slcg_fifo_load_gating_prod)
169 g->ops.clock_gating.slcg_fifo_load_gating_prod(g, g->slcg_enabled); 170 g->ops.clock_gating.slcg_fifo_load_gating_prod(g, g->slcg_enabled);
170 g->ops.clock_gating.slcg_gr_load_gating_prod(g, g->slcg_enabled); 171 if (g->ops.clock_gating.slcg_gr_load_gating_prod)
172 g->ops.clock_gating.slcg_gr_load_gating_prod(g, g->slcg_enabled);
171 if (g->ops.clock_gating.slcg_ltc_load_gating_prod) 173 if (g->ops.clock_gating.slcg_ltc_load_gating_prod)
172 g->ops.clock_gating.slcg_ltc_load_gating_prod(g, g->slcg_enabled); 174 g->ops.clock_gating.slcg_ltc_load_gating_prod(g, g->slcg_enabled);
173 g->ops.clock_gating.slcg_perf_load_gating_prod(g, g->slcg_enabled); 175 if (g->ops.clock_gating.slcg_perf_load_gating_prod)
176 g->ops.clock_gating.slcg_perf_load_gating_prod(g, g->slcg_enabled);
174 if (g->ops.clock_gating.slcg_priring_load_gating_prod) 177 if (g->ops.clock_gating.slcg_priring_load_gating_prod)
175 g->ops.clock_gating.slcg_priring_load_gating_prod(g, g->slcg_enabled); 178 g->ops.clock_gating.slcg_priring_load_gating_prod(g, g->slcg_enabled);
176 if (g->ops.clock_gating.slcg_pmu_load_gating_prod) 179 if (g->ops.clock_gating.slcg_pmu_load_gating_prod)