diff options
author | Peter Daifuku <pdaifuku@nvidia.com> | 2016-03-09 22:10:20 -0500 |
---|---|---|
committer | Terje Bergstrom <tbergstrom@nvidia.com> | 2016-04-07 14:05:49 -0400 |
commit | 37155b65f1dd6039bdef92f513d86640956bc12c (patch) | |
tree | 1deb57523c3acc445996c642da6ac96e1cf7c355 /drivers/gpu/nvgpu/gk20a/gr_ctx_gk20a.c | |
parent | 6675c03603669c667c6ffec34567eaf101a2d09d (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.c | 65 |
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 | } |