summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gv11b/gr_gv11b.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gv11b/gr_gv11b.c')
-rw-r--r--drivers/gpu/nvgpu/gv11b/gr_gv11b.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/gr_gv11b.c b/drivers/gpu/nvgpu/gv11b/gr_gv11b.c
index f44c60b0..eefbdf3b 100644
--- a/drivers/gpu/nvgpu/gv11b/gr_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/gr_gv11b.c
@@ -3253,6 +3253,87 @@ static int gr_gv11b_handle_tpc_mpc_exception(struct gk20a *g,
3253 return 0; 3253 return 0;
3254} 3254}
3255 3255
3256static const u32 _num_ovr_perf_regs = 20;
3257static u32 _ovr_perf_regs[20] = { 0, };
3258
3259static void gv11b_gr_init_ovr_sm_dsm_perf(void)
3260{
3261 if (_ovr_perf_regs[0] != 0)
3262 return;
3263
3264 _ovr_perf_regs[0] = gr_egpc0_etpc0_sm_dsm_perf_counter_control_sel0_r();
3265 _ovr_perf_regs[1] = gr_egpc0_etpc0_sm_dsm_perf_counter_control_sel1_r();
3266 _ovr_perf_regs[2] = gr_egpc0_etpc0_sm_dsm_perf_counter_control0_r();
3267 _ovr_perf_regs[3] = gr_egpc0_etpc0_sm_dsm_perf_counter_control1_r();
3268 _ovr_perf_regs[4] = gr_egpc0_etpc0_sm_dsm_perf_counter_control2_r();
3269 _ovr_perf_regs[5] = gr_egpc0_etpc0_sm_dsm_perf_counter_control3_r();
3270 _ovr_perf_regs[6] = gr_egpc0_etpc0_sm_dsm_perf_counter_control4_r();
3271 _ovr_perf_regs[7] = gr_egpc0_etpc0_sm_dsm_perf_counter_control5_r();
3272 _ovr_perf_regs[8] = gr_egpc0_etpc0_sm_dsm_perf_counter0_control_r();
3273 _ovr_perf_regs[9] = gr_egpc0_etpc0_sm_dsm_perf_counter1_control_r();
3274 _ovr_perf_regs[10] = gr_egpc0_etpc0_sm_dsm_perf_counter2_control_r();
3275 _ovr_perf_regs[11] = gr_egpc0_etpc0_sm_dsm_perf_counter3_control_r();
3276 _ovr_perf_regs[12] = gr_egpc0_etpc0_sm_dsm_perf_counter4_control_r();
3277 _ovr_perf_regs[13] = gr_egpc0_etpc0_sm_dsm_perf_counter5_control_r();
3278 _ovr_perf_regs[14] = gr_egpc0_etpc0_sm_dsm_perf_counter6_control_r();
3279 _ovr_perf_regs[15] = gr_egpc0_etpc0_sm_dsm_perf_counter7_control_r();
3280
3281 _ovr_perf_regs[16] = gr_egpc0_etpc0_sm0_dsm_perf_counter4_r();
3282 _ovr_perf_regs[17] = gr_egpc0_etpc0_sm0_dsm_perf_counter5_r();
3283 _ovr_perf_regs[18] = gr_egpc0_etpc0_sm0_dsm_perf_counter6_r();
3284 _ovr_perf_regs[19] = gr_egpc0_etpc0_sm0_dsm_perf_counter7_r();
3285}
3286
3287/* Following are the blocks of registers that the ucode
3288 * stores in the extended region.
3289 */
3290/* == ctxsw_extended_sm_dsm_perf_counter_register_stride_v() ? */
3291static const u32 _num_sm_dsm_perf_regs;
3292/* == ctxsw_extended_sm_dsm_perf_counter_control_register_stride_v() ?*/
3293static const u32 _num_sm_dsm_perf_ctrl_regs = 2;
3294static u32 *_sm_dsm_perf_regs;
3295static u32 _sm_dsm_perf_ctrl_regs[2];
3296
3297static void gv11b_gr_init_sm_dsm_reg_info(void)
3298{
3299 if (_sm_dsm_perf_ctrl_regs[0] != 0)
3300 return;
3301
3302 _sm_dsm_perf_ctrl_regs[0] =
3303 gr_egpc0_etpc0_sm_dsm_perf_counter_control0_r();
3304 _sm_dsm_perf_ctrl_regs[1] =
3305 gr_egpc0_etpc0_sm_dsm_perf_counter_control5_r();
3306}
3307
3308static void gv11b_gr_get_sm_dsm_perf_regs(struct gk20a *g,
3309 u32 *num_sm_dsm_perf_regs,
3310 u32 **sm_dsm_perf_regs,
3311 u32 *perf_register_stride)
3312{
3313 *num_sm_dsm_perf_regs = _num_sm_dsm_perf_regs;
3314 *sm_dsm_perf_regs = _sm_dsm_perf_regs;
3315 *perf_register_stride =
3316 ctxsw_prog_extended_sm_dsm_perf_counter_register_stride_v();
3317}
3318
3319static void gv11b_gr_get_sm_dsm_perf_ctrl_regs(struct gk20a *g,
3320 u32 *num_sm_dsm_perf_ctrl_regs,
3321 u32 **sm_dsm_perf_ctrl_regs,
3322 u32 *ctrl_register_stride)
3323{
3324 *num_sm_dsm_perf_ctrl_regs = _num_sm_dsm_perf_ctrl_regs;
3325 *sm_dsm_perf_ctrl_regs = _sm_dsm_perf_ctrl_regs;
3326 *ctrl_register_stride =
3327 ctxsw_prog_extended_sm_dsm_perf_counter_control_register_stride_v();
3328}
3329
3330static void gv11b_gr_get_ovr_perf_regs(struct gk20a *g, u32 *num_ovr_perf_regs,
3331 u32 **ovr_perf_regs)
3332{
3333 *num_ovr_perf_regs = _num_ovr_perf_regs;
3334 *ovr_perf_regs = _ovr_perf_regs;
3335}
3336
3256void gv11b_init_gr(struct gpu_ops *gops) 3337void gv11b_init_gr(struct gpu_ops *gops)
3257{ 3338{
3258 gp10b_init_gr(gops); 3339 gp10b_init_gr(gops);
@@ -3337,4 +3418,9 @@ void gv11b_init_gr(struct gpu_ops *gops)
3337 gr_gv11b_handle_tpc_sm_ecc_exception; 3418 gr_gv11b_handle_tpc_sm_ecc_exception;
3338 gops->gr.handle_tpc_mpc_exception = 3419 gops->gr.handle_tpc_mpc_exception =
3339 gr_gv11b_handle_tpc_mpc_exception; 3420 gr_gv11b_handle_tpc_mpc_exception;
3421 gops->gr.init_ovr_sm_dsm_perf = gv11b_gr_init_ovr_sm_dsm_perf;
3422 gops->gr.init_sm_dsm_reg_info = gv11b_gr_init_sm_dsm_reg_info;
3423 gops->gr.get_sm_dsm_perf_regs = gv11b_gr_get_sm_dsm_perf_regs;
3424 gops->gr.get_sm_dsm_perf_ctrl_regs = gv11b_gr_get_sm_dsm_perf_ctrl_regs;
3425 gops->gr.get_ovr_perf_regs = gv11b_gr_get_ovr_perf_regs;
3340} 3426}