diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2016-08-29 12:16:12 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2016-09-08 23:05:49 -0400 |
commit | f56ed459dde2a292b3af0dd4deb96b1090eb53a2 (patch) | |
tree | e69a53c34f6b89805ef74a63ecfacede0d864cc5 /drivers/gpu | |
parent | a0dd3ee5becb8e0f91e46654e25619b55655c017 (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>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/dbg_gpu_gk20a.c | 30 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | 15 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c | 9 |
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) |