diff options
author | Vaibhav Kachore <vkachore@nvidia.com> | 2018-07-06 05:40:03 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-07-10 21:13:43 -0400 |
commit | e14fdcd8f1f4125da697433b1744b1e4e4f15b09 (patch) | |
tree | f48ff794ef77e977ccba397f5abf14f5ae7b185b /drivers/gpu/nvgpu/gv100 | |
parent | 4cd59404a2d4ab1c31605d96cff848dd4e93c3b4 (diff) |
gpu: nvgpu: enable HWPM Mode-E context switch
- Write new pm mode to context buffer header. Ucode use
this mode to enable mode-e context switch. This is Mode-B
context switch of PMs with Mode-E streamout on one context.
If this mode is set, Ucode makes sure that Mode-E pipe
(perfmons, routers, pma) is idle before it context switches PMs.
- This allows us to collect counters in a secure way
(i.e. on context basis) with stream out.
Bug 2106999
Change-Id: I5a7435f09d1bf053ca428e538b0a57f3a175ac37
Signed-off-by: Vaibhav Kachore <vkachore@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1760366
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gv100')
-rw-r--r-- | drivers/gpu/nvgpu/gv100/gr_gv100.c | 6 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gv100/gr_gv100.h | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gv100/hal_gv100.c | 2 |
3 files changed, 9 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gv100/gr_gv100.c b/drivers/gpu/nvgpu/gv100/gr_gv100.c index 680bcba3..b1b1cee6 100644 --- a/drivers/gpu/nvgpu/gv100/gr_gv100.c +++ b/drivers/gpu/nvgpu/gv100/gr_gv100.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <nvgpu/hw/gv100/hw_proj_gv100.h> | 38 | #include <nvgpu/hw/gv100/hw_proj_gv100.h> |
39 | #include <nvgpu/hw/gv100/hw_fuse_gv100.h> | 39 | #include <nvgpu/hw/gv100/hw_fuse_gv100.h> |
40 | #include <nvgpu/hw/gv100/hw_top_gv100.h> | 40 | #include <nvgpu/hw/gv100/hw_top_gv100.h> |
41 | #include <nvgpu/hw/gv100/hw_ctxsw_prog_gv100.h> | ||
41 | 42 | ||
42 | 43 | ||
43 | /* | 44 | /* |
@@ -453,3 +454,8 @@ void gr_gv100_split_fbpa_broadcast_addr(struct gk20a *g, u32 addr, | |||
453 | } | 454 | } |
454 | } | 455 | } |
455 | } | 456 | } |
457 | |||
458 | u32 gr_gv100_get_hw_accessor_stream_out_mode() | ||
459 | { | ||
460 | return ctxsw_prog_main_image_pm_mode_stream_out_ctxsw_f(); | ||
461 | } | ||
diff --git a/drivers/gpu/nvgpu/gv100/gr_gv100.h b/drivers/gpu/nvgpu/gv100/gr_gv100.h index 821659aa..457bd701 100644 --- a/drivers/gpu/nvgpu/gv100/gr_gv100.h +++ b/drivers/gpu/nvgpu/gv100/gr_gv100.h | |||
@@ -47,4 +47,5 @@ void gr_gv100_split_fbpa_broadcast_addr(struct gk20a *g, u32 addr, | |||
47 | u32 num_fbpas, | 47 | u32 num_fbpas, |
48 | u32 *priv_addr_table, u32 *t); | 48 | u32 *priv_addr_table, u32 *t); |
49 | void gr_gv100_init_gpc_mmu(struct gk20a *g); | 49 | void gr_gv100_init_gpc_mmu(struct gk20a *g); |
50 | u32 gr_gv100_get_hw_accessor_stream_out_mode(void); | ||
50 | #endif | 51 | #endif |
diff --git a/drivers/gpu/nvgpu/gv100/hal_gv100.c b/drivers/gpu/nvgpu/gv100/hal_gv100.c index 07c71a04..c84778dd 100644 --- a/drivers/gpu/nvgpu/gv100/hal_gv100.c +++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c | |||
@@ -358,6 +358,8 @@ static const struct gpu_ops gv100_ops = { | |||
358 | .enable_exceptions = gr_gv11b_enable_exceptions, | 358 | .enable_exceptions = gr_gv11b_enable_exceptions, |
359 | .get_lrf_tex_ltc_dram_override = get_ecc_override_val, | 359 | .get_lrf_tex_ltc_dram_override = get_ecc_override_val, |
360 | .update_smpc_ctxsw_mode = gr_gk20a_update_smpc_ctxsw_mode, | 360 | .update_smpc_ctxsw_mode = gr_gk20a_update_smpc_ctxsw_mode, |
361 | .get_hw_accessor_stream_out_mode = | ||
362 | gr_gv100_get_hw_accessor_stream_out_mode, | ||
361 | .update_hwpm_ctxsw_mode = gr_gk20a_update_hwpm_ctxsw_mode, | 363 | .update_hwpm_ctxsw_mode = gr_gk20a_update_hwpm_ctxsw_mode, |
362 | .record_sm_error_state = gv11b_gr_record_sm_error_state, | 364 | .record_sm_error_state = gv11b_gr_record_sm_error_state, |
363 | .update_sm_error_state = gv11b_gr_update_sm_error_state, | 365 | .update_sm_error_state = gv11b_gr_update_sm_error_state, |