summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/gp10b/gr_gp10b.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
index 45befc51..04856e44 100644
--- a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
@@ -415,17 +415,26 @@ static void gr_gp10b_set_circular_buffer_size(struct gk20a *g, u32 data)
415{ 415{
416 struct gr_gk20a *gr = &g->gr; 416 struct gr_gk20a *gr = &g->gr;
417 u32 gpc_index, ppc_index, stride, val; 417 u32 gpc_index, ppc_index, stride, val;
418 u32 cb_size = data * 4; 418 u32 cb_size_steady = data * 4, cb_size;
419 419
420 gk20a_dbg_fn(""); 420 gk20a_dbg_fn("");
421 421
422 if (cb_size > gr->attrib_cb_size) 422 if (cb_size_steady > gr->attrib_cb_size)
423 cb_size = gr->attrib_cb_size; 423 cb_size_steady = gr->attrib_cb_size;
424 if (gk20a_readl(g, gr_gpc0_ppc0_cbm_beta_cb_size_r()) !=
425 gk20a_readl(g,
426 gr_gpc0_ppc0_cbm_beta_steady_state_cb_size_r())) {
427 cb_size = cb_size_steady +
428 (gr_gpc0_ppc0_cbm_beta_cb_size_v_gfxp_v() -
429 gr_gpc0_ppc0_cbm_beta_cb_size_v_default_v());
430 } else {
431 cb_size = cb_size_steady;
432 }
424 433
425 gk20a_writel(g, gr_ds_tga_constraintlogic_beta_r(), 434 gk20a_writel(g, gr_ds_tga_constraintlogic_beta_r(),
426 (gk20a_readl(g, gr_ds_tga_constraintlogic_beta_r()) & 435 (gk20a_readl(g, gr_ds_tga_constraintlogic_beta_r()) &
427 ~gr_ds_tga_constraintlogic_beta_cbsize_f(~0)) | 436 ~gr_ds_tga_constraintlogic_beta_cbsize_f(~0)) |
428 gr_ds_tga_constraintlogic_beta_cbsize_f(cb_size)); 437 gr_ds_tga_constraintlogic_beta_cbsize_f(cb_size_steady));
429 438
430 for (gpc_index = 0; gpc_index < gr->gpc_count; gpc_index++) { 439 for (gpc_index = 0; gpc_index < gr->gpc_count; gpc_index++) {
431 stride = proj_gpc_stride_v() * gpc_index; 440 stride = proj_gpc_stride_v() * gpc_index;
@@ -446,12 +455,19 @@ static void gr_gp10b_set_circular_buffer_size(struct gk20a *g, u32 data)
446 stride + 455 stride +
447 proj_ppc_in_gpc_stride_v() * ppc_index, val); 456 proj_ppc_in_gpc_stride_v() * ppc_index, val);
448 457
458 gk20a_writel(g, proj_ppc_in_gpc_stride_v() * ppc_index +
459 gr_gpc0_ppc0_cbm_beta_steady_state_cb_size_r() +
460 stride,
461 gr_gpc0_ppc0_cbm_beta_steady_state_cb_size_v_f(
462 cb_size_steady));
463
449 val = gk20a_readl(g, gr_gpcs_swdx_tc_beta_cb_size_r( 464 val = gk20a_readl(g, gr_gpcs_swdx_tc_beta_cb_size_r(
450 ppc_index + gpc_index)); 465 ppc_index + gpc_index));
451 466
452 val = set_field(val, 467 val = set_field(val,
453 gr_gpcs_swdx_tc_beta_cb_size_v_m(), 468 gr_gpcs_swdx_tc_beta_cb_size_v_m(),
454 gr_gpcs_swdx_tc_beta_cb_size_v_f(cb_size * 469 gr_gpcs_swdx_tc_beta_cb_size_v_f(
470 cb_size_steady *
455 gr->gpc_ppc_count[gpc_index])); 471 gr->gpc_ppc_count[gpc_index]));
456 472
457 gk20a_writel(g, gr_gpcs_swdx_tc_beta_cb_size_r( 473 gk20a_writel(g, gr_gpcs_swdx_tc_beta_cb_size_r(