summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c
diff options
context:
space:
mode:
authorPeter Daifuku <pdaifuku@nvidia.com>2016-03-09 22:10:20 -0500
committerTerje Bergstrom <tbergstrom@nvidia.com>2016-04-07 14:05:49 -0400
commit37155b65f1dd6039bdef92f513d86640956bc12c (patch)
tree1deb57523c3acc445996c642da6ac96e1cf7c355 /drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c
parent6675c03603669c667c6ffec34567eaf101a2d09d (diff)
gpu: nvgpu: support for hwpm context switching
Add support for hwpm context switching Bug 1648200 Change-Id: I482899bf165cd2ef24bb8617be16df01218e462f Signed-off-by: Peter Daifuku <pdaifuku@nvidia.com> Reviewed-on: http://git-master/r/1120450 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c65
1 files changed, 63 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c
index 94dba7b6..64d6542b 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c
@@ -3,7 +3,7 @@
3 * 3 *
4 * GK20A Graphics Context 4 * GK20A Graphics Context
5 * 5 *
6 * Copyright (c) 2011-2015, NVIDIA CORPORATION. All rights reserved. 6 * Copyright (c) 2011-2016, NVIDIA CORPORATION. All rights reserved.
7 * 7 *
8 * This program is free software; you can redistribute it and/or modify it 8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms and conditions of the GNU General Public License, 9 * under the terms and conditions of the GNU General Public License,
@@ -281,7 +281,60 @@ static int gr_gk20a_init_ctx_vars_fw(struct gk20a *g, struct gr_gk20a *gr)
281 netlist_num); 281 netlist_num);
282 break; 282 break;
283 case NETLIST_REGIONID_CTXREG_PMPPC: 283 case NETLIST_REGIONID_CTXREG_PMPPC:
284 gk20a_dbg_info("NETLIST_REGIONID_CTXREG_PMPPC skipped"); 284 gk20a_dbg_info("NETLIST_REGIONID_CTXREG_PMPPC");
285 err = gr_gk20a_alloc_load_netlist_aiv(
286 src, size, &g->gr.ctx_vars.ctxsw_regs.pm_ppc);
287 if (err)
288 goto clean_up;
289 break;
290 case NETLIST_REGIONID_NVPERF_CTXREG_SYS:
291 gk20a_dbg_info("NETLIST_REGIONID_NVPERF_CTXREG_SYS");
292 err = gr_gk20a_alloc_load_netlist_aiv(
293 src, size, &g->gr.ctx_vars.ctxsw_regs.perf_sys);
294 if (err)
295 goto clean_up;
296 break;
297 case NETLIST_REGIONID_NVPERF_FBP_CTXREGS:
298 gk20a_dbg_info("NETLIST_REGIONID_NVPERF_FBP_CTXREGS");
299 err = gr_gk20a_alloc_load_netlist_aiv(
300 src, size, &g->gr.ctx_vars.ctxsw_regs.fbp);
301 if (err)
302 goto clean_up;
303 break;
304 case NETLIST_REGIONID_NVPERF_CTXREG_GPC:
305 gk20a_dbg_info("NETLIST_REGIONID_NVPERF_CTXREG_GPC");
306 err = gr_gk20a_alloc_load_netlist_aiv(
307 src, size, &g->gr.ctx_vars.ctxsw_regs.perf_gpc);
308 if (err)
309 goto clean_up;
310 break;
311 case NETLIST_REGIONID_NVPERF_FBP_ROUTER:
312 gk20a_dbg_info("NETLIST_REGIONID_NVPERF_FBP_ROUTER");
313 err = gr_gk20a_alloc_load_netlist_aiv(
314 src, size, &g->gr.ctx_vars.ctxsw_regs.fbp_router);
315 if (err)
316 goto clean_up;
317 break;
318 case NETLIST_REGIONID_NVPERF_GPC_ROUTER:
319 gk20a_dbg_info("NETLIST_REGIONID_NVPERF_GPC_ROUTER");
320 err = gr_gk20a_alloc_load_netlist_aiv(
321 src, size, &g->gr.ctx_vars.ctxsw_regs.gpc_router);
322 if (err)
323 goto clean_up;
324 break;
325 case NETLIST_REGIONID_CTXREG_PMLTC:
326 gk20a_dbg_info("NETLIST_REGIONID_CTXREG_PMLTC");
327 err = gr_gk20a_alloc_load_netlist_aiv(
328 src, size, &g->gr.ctx_vars.ctxsw_regs.pm_ltc);
329 if (err)
330 goto clean_up;
331 break;
332 case NETLIST_REGIONID_CTXREG_PMFBPA:
333 gk20a_dbg_info("NETLIST_REGIONID_CTXREG_PMFBPA");
334 err = gr_gk20a_alloc_load_netlist_aiv(
335 src, size, &g->gr.ctx_vars.ctxsw_regs.pm_fbpa);
336 if (err)
337 goto clean_up;
285 break; 338 break;
286 default: 339 default:
287 gk20a_dbg_info("unrecognized region %d skipped", i); 340 gk20a_dbg_info("unrecognized region %d skipped", i);
@@ -319,6 +372,14 @@ clean_up:
319 kfree(g->gr.ctx_vars.ctxsw_regs.pm_sys.l); 372 kfree(g->gr.ctx_vars.ctxsw_regs.pm_sys.l);
320 kfree(g->gr.ctx_vars.ctxsw_regs.pm_gpc.l); 373 kfree(g->gr.ctx_vars.ctxsw_regs.pm_gpc.l);
321 kfree(g->gr.ctx_vars.ctxsw_regs.pm_tpc.l); 374 kfree(g->gr.ctx_vars.ctxsw_regs.pm_tpc.l);
375 kfree(g->gr.ctx_vars.ctxsw_regs.pm_ppc.l);
376 kfree(g->gr.ctx_vars.ctxsw_regs.perf_sys.l);
377 kfree(g->gr.ctx_vars.ctxsw_regs.fbp.l);
378 kfree(g->gr.ctx_vars.ctxsw_regs.perf_gpc.l);
379 kfree(g->gr.ctx_vars.ctxsw_regs.fbp_router.l);
380 kfree(g->gr.ctx_vars.ctxsw_regs.gpc_router.l);
381 kfree(g->gr.ctx_vars.ctxsw_regs.pm_ltc.l);
382 kfree(g->gr.ctx_vars.ctxsw_regs.pm_fbpa.l);
322 release_firmware(netlist_fw); 383 release_firmware(netlist_fw);
323 err = -ENOENT; 384 err = -ENOENT;
324 } 385 }