summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm20b/ltc_gm20b.c
diff options
context:
space:
mode:
authorVinod G <vinodg@nvidia.com>2018-06-26 21:09:57 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-07-14 18:36:53 -0400
commitac98827c9d81746020dce689f9eb8c4018a8c148 (patch)
tree142dea7d1109be3b12a4e94c738a01ab7b13ee89 /drivers/gpu/nvgpu/gm20b/ltc_gm20b.c
parentb97bcb3c689426a1b099e88ceef4d55584e2362b (diff)
gpu: nvgpu: Add L2 register read-backs following writes
LTC register write is followed by a register read and if data doesn't match code will report the error. Renamed existing nvgpu_writel_check function as nvgpu_writel_loop as it loops until the write get success. nvgpu_writel_check function write and read back and compare the data. Bug 2039150 Change-Id: I0a49be36aad23936f2d58aa82872710827da1d32 Signed-off-by: Vinod G <vinodg@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1762344 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b/ltc_gm20b.c')
-rw-r--r--drivers/gpu/nvgpu/gm20b/ltc_gm20b.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/ltc_gm20b.c b/drivers/gpu/nvgpu/gm20b/ltc_gm20b.c
index a8cbca13..9812c8d8 100644
--- a/drivers/gpu/nvgpu/gm20b/ltc_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/ltc_gm20b.c
@@ -276,7 +276,7 @@ void gm20b_flush_ltc(struct gk20a *g)
276 u32 ltc_stride = nvgpu_get_litter_value(g, GPU_LIT_LTC_STRIDE); 276 u32 ltc_stride = nvgpu_get_litter_value(g, GPU_LIT_LTC_STRIDE);
277 277
278 /* Clean... */ 278 /* Clean... */
279 gk20a_writel(g, ltc_ltcs_ltss_tstg_cmgmt1_r(), 279 nvgpu_writel_check(g, ltc_ltcs_ltss_tstg_cmgmt1_r(),
280 ltc_ltcs_ltss_tstg_cmgmt1_clean_pending_f() | 280 ltc_ltcs_ltss_tstg_cmgmt1_clean_pending_f() |
281 ltc_ltcs_ltss_tstg_cmgmt1_max_cycles_between_cleans_3_f() | 281 ltc_ltcs_ltss_tstg_cmgmt1_max_cycles_between_cleans_3_f() |
282 ltc_ltcs_ltss_tstg_cmgmt1_clean_wait_for_fb_to_pull_true_f() | 282 ltc_ltcs_ltss_tstg_cmgmt1_clean_wait_for_fb_to_pull_true_f() |
@@ -318,7 +318,7 @@ void gm20b_flush_ltc(struct gk20a *g)
318 } 318 }
319 319
320 /* And invalidate. */ 320 /* And invalidate. */
321 gk20a_writel(g, ltc_ltcs_ltss_tstg_cmgmt0_r(), 321 nvgpu_writel_check(g, ltc_ltcs_ltss_tstg_cmgmt0_r(),
322 ltc_ltcs_ltss_tstg_cmgmt0_invalidate_pending_f() | 322 ltc_ltcs_ltss_tstg_cmgmt0_invalidate_pending_f() |
323 ltc_ltcs_ltss_tstg_cmgmt0_max_cycles_between_invalidates_3_f() | 323 ltc_ltcs_ltss_tstg_cmgmt0_max_cycles_between_invalidates_3_f() |
324 ltc_ltcs_ltss_tstg_cmgmt0_invalidate_evict_last_class_true_f() | 324 ltc_ltcs_ltss_tstg_cmgmt0_invalidate_evict_last_class_true_f() |
@@ -393,15 +393,15 @@ void gm20b_ltc_set_zbc_color_entry(struct gk20a *g,
393 u32 i; 393 u32 i;
394 u32 real_index = index + GK20A_STARTOF_ZBC_TABLE; 394 u32 real_index = index + GK20A_STARTOF_ZBC_TABLE;
395 395
396 gk20a_writel(g, ltc_ltcs_ltss_dstg_zbc_index_r(), 396 nvgpu_writel_check(g, ltc_ltcs_ltss_dstg_zbc_index_r(),
397 ltc_ltcs_ltss_dstg_zbc_index_address_f(real_index)); 397 ltc_ltcs_ltss_dstg_zbc_index_address_f(real_index));
398 398
399 for (i = 0; 399 for (i = 0;
400 i < ltc_ltcs_ltss_dstg_zbc_color_clear_value__size_1_v(); i++) { 400 i < ltc_ltcs_ltss_dstg_zbc_color_clear_value__size_1_v(); i++) {
401 gk20a_writel(g, ltc_ltcs_ltss_dstg_zbc_color_clear_value_r(i), 401 nvgpu_writel_check(g,
402 color_val->color_l2[i]); 402 ltc_ltcs_ltss_dstg_zbc_color_clear_value_r(i),
403 color_val->color_l2[i]);
403 } 404 }
404 gk20a_readl(g, ltc_ltcs_ltss_dstg_zbc_index_r());
405} 405}
406 406
407/* 407/*
@@ -413,13 +413,12 @@ void gm20b_ltc_set_zbc_depth_entry(struct gk20a *g,
413{ 413{
414 u32 real_index = index + GK20A_STARTOF_ZBC_TABLE; 414 u32 real_index = index + GK20A_STARTOF_ZBC_TABLE;
415 415
416 gk20a_writel(g, ltc_ltcs_ltss_dstg_zbc_index_r(), 416 nvgpu_writel_check(g, ltc_ltcs_ltss_dstg_zbc_index_r(),
417 ltc_ltcs_ltss_dstg_zbc_index_address_f(real_index)); 417 ltc_ltcs_ltss_dstg_zbc_index_address_f(real_index));
418 418
419 gk20a_writel(g, ltc_ltcs_ltss_dstg_zbc_depth_clear_value_r(), 419 nvgpu_writel_check(g,
420 depth_val->depth); 420 ltc_ltcs_ltss_dstg_zbc_depth_clear_value_r(),
421 421 depth_val->depth);
422 gk20a_readl(g, ltc_ltcs_ltss_dstg_zbc_index_r());
423} 422}
424 423
425void gm20b_ltc_init_cbc(struct gk20a *g, struct gr_gk20a *gr) 424void gm20b_ltc_init_cbc(struct gk20a *g, struct gr_gk20a *gr)