diff options
author | Vijayakumar <vsubbu@nvidia.com> | 2015-04-09 07:17:13 -0400 |
---|---|---|
committer | Ishan Mittal <imittal@nvidia.com> | 2015-05-18 02:03:44 -0400 |
commit | d65a93b80c60bb677fbc13b7180e0f31b7f97f84 (patch) | |
tree | da92083e7565c8d82f4f8bd7d06dab20b4f61e1a /drivers/gpu/nvgpu/gm20b/pmu_gm20b.c | |
parent | 6a5cc111713cec1d0e1edf9b8a1e64eb17105d9c (diff) |
gpu: nvgpu: add secure gpccs boot support
bug 200080684
keeping it disabled by default
also trimming the code by removing redundant
variable to check recovery. pmu quick wait
now checks only for irqs which are serviced
by kernel. requests pmu to bit bang gpccs
ucode.
Change-Id: I12ef23d6d59b507e86a129b69eab65b21d0438c6
Signed-off-by: Vijayakumar <vsubbu@nvidia.com>
Reviewed-on: http://git-master/r/729622
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b/pmu_gm20b.c')
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/pmu_gm20b.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/pmu_gm20b.c b/drivers/gpu/nvgpu/gm20b/pmu_gm20b.c index c25d2d56..28b40b1c 100644 --- a/drivers/gpu/nvgpu/gm20b/pmu_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/pmu_gm20b.c | |||
@@ -161,7 +161,7 @@ static void pmu_handle_acr_init_wpr_msg(struct gk20a *g, struct pmu_msg *msg, | |||
161 | gm20b_dbg_pmu("reply PMU_ACR_CMD_ID_INIT_WPR_REGION"); | 161 | gm20b_dbg_pmu("reply PMU_ACR_CMD_ID_INIT_WPR_REGION"); |
162 | 162 | ||
163 | if (msg->msg.acr.acrmsg.errorcode == PMU_ACR_SUCCESS) | 163 | if (msg->msg.acr.acrmsg.errorcode == PMU_ACR_SUCCESS) |
164 | g->ops.pmu.lspmuwprinitdone = true; | 164 | g->ops.pmu.lspmuwprinitdone = 1; |
165 | gk20a_dbg_fn("done"); | 165 | gk20a_dbg_fn("done"); |
166 | } | 166 | } |
167 | 167 | ||
@@ -213,7 +213,7 @@ void gm20b_pmu_load_lsf(struct gk20a *g, u8 falcon_id) | |||
213 | gk20a_dbg_fn(""); | 213 | gk20a_dbg_fn(""); |
214 | 214 | ||
215 | gm20b_dbg_pmu("wprinit status = %x\n", g->ops.pmu.lspmuwprinitdone); | 215 | gm20b_dbg_pmu("wprinit status = %x\n", g->ops.pmu.lspmuwprinitdone); |
216 | if (g->ops.pmu.lspmuwprinitdone && g->ops.pmu.fecsbootstrapdone) { | 216 | if (g->ops.pmu.lspmuwprinitdone) { |
217 | /* send message to load FECS falcon */ | 217 | /* send message to load FECS falcon */ |
218 | memset(&cmd, 0, sizeof(struct pmu_cmd)); | 218 | memset(&cmd, 0, sizeof(struct pmu_cmd)); |
219 | cmd.hdr.unit_id = PMU_UNIT_ACR; | 219 | cmd.hdr.unit_id = PMU_UNIT_ACR; |
@@ -224,8 +224,8 @@ void gm20b_pmu_load_lsf(struct gk20a *g, u8 falcon_id) | |||
224 | cmd.cmd.acr.bootstrap_falcon.flags = | 224 | cmd.cmd.acr.bootstrap_falcon.flags = |
225 | PMU_ACR_CMD_BOOTSTRAP_FALCON_FLAGS_RESET_YES; | 225 | PMU_ACR_CMD_BOOTSTRAP_FALCON_FLAGS_RESET_YES; |
226 | cmd.cmd.acr.bootstrap_falcon.falconid = falcon_id; | 226 | cmd.cmd.acr.bootstrap_falcon.falconid = falcon_id; |
227 | gm20b_dbg_pmu("cmd post PMU_ACR_CMD_ID_BOOTSTRAP_FALCON"); | 227 | gm20b_dbg_pmu("cmd post PMU_ACR_CMD_ID_BOOTSTRAP_FALCON: %x\n", |
228 | g->ops.pmu.fecsrecoveryinprogress = 1; | 228 | falcon_id); |
229 | gk20a_pmu_cmd_post(g, &cmd, NULL, NULL, PMU_COMMAND_QUEUE_HPQ, | 229 | gk20a_pmu_cmd_post(g, &cmd, NULL, NULL, PMU_COMMAND_QUEUE_HPQ, |
230 | pmu_handle_fecs_boot_acr_msg, pmu, &seq, ~0); | 230 | pmu_handle_fecs_boot_acr_msg, pmu, &seq, ~0); |
231 | } | 231 | } |
@@ -244,7 +244,6 @@ void gm20b_init_pmu_ops(struct gpu_ops *gops) | |||
244 | gops->pmu.init_wpr_region = NULL; | 244 | gops->pmu.init_wpr_region = NULL; |
245 | } | 245 | } |
246 | gops->pmu.pmu_setup_elpg = gm20b_pmu_setup_elpg; | 246 | gops->pmu.pmu_setup_elpg = gm20b_pmu_setup_elpg; |
247 | gops->pmu.lspmuwprinitdone = false; | 247 | gops->pmu.lspmuwprinitdone = 0; |
248 | gops->pmu.fecsbootstrapdone = false; | 248 | gops->pmu.fecsbootstrapdone = false; |
249 | gops->pmu.fecsrecoveryinprogress = 0; | ||
250 | } | 249 | } |